Commit 37de65a7 authored by Aaron Conole's avatar Aaron Conole Committed by Jakub Kicinski
Browse files

selftests: openvswitch: Refactor actions parsing.



Until recently, the ovs-dpctl utility was used with a limited actions set
and didn't need to have support for multiple similar actions.  However,
when adding support for tunnels, it will be important to support multiple
set() actions in a single flow.  When printing these actions, the existing
code will be unable to print all of the sets - it will only print the
first.

Refactor this code to be easier to read and support multiple actions of the
same type in an action list.

Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Tested-by: default avatarSimon Horman <horms@kernel.org>
Signed-off-by: default avatarAaron Conole <aconole@redhat.com>
Link: https://patch.msgid.link/20240625172245.233874-3-aconole@redhat.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent f94ecbc9
Loading
Loading
Loading
Loading
+23 −22
Original line number Diff line number Diff line
@@ -439,13 +439,12 @@ class ovsactions(nla):
    def dpstr(self, more=False):
        print_str = ""

        for field in self.nla_map:
        for field in self["attrs"]:
            if field[1] == "none" or self.get_attr(field[0]) is None:
                continue
            if print_str != "":
                print_str += ","

            if field[1] == "uint32":
            if field[0] == "OVS_ACTION_ATTR_OUTPUT":
                print_str += "%d" % int(self.get_attr(field[0]))
            elif field[0] == "OVS_ACTION_ATTR_RECIRC":
@@ -454,8 +453,7 @@ class ovsactions(nla):
                print_str += "trunc(%d)" % int(self.get_attr(field[0]))
            elif field[0] == "OVS_ACTION_ATTR_DROP":
                print_str += "drop(%d)" % int(self.get_attr(field[0]))
            elif field[1] == "flag":
                if field[0] == "OVS_ACTION_ATTR_CT_CLEAR":
            elif field[0] == "OVS_ACTION_ATTR_CT_CLEAR":
                print_str += "ct_clear"
            elif field[0] == "OVS_ACTION_ATTR_POP_VLAN":
                print_str += "pop_vlan"
@@ -472,7 +470,10 @@ class ovsactions(nla):
                    print_str += datum.dpstr(more)
                    print_str += ")"
                else:
                    try:
                        print_str += datum.dpstr(more)
                    except:
                        print_str += "{ATTR: %s not decoded}" % field[0]

        return print_str