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: Simon Horman <horms@kernel.org> Tested-by: Simon Horman <horms@kernel.org> Signed-off-by: Aaron Conole <aconole@redhat.com> Link: https://patch.msgid.link/20240625172245.233874-3-aconole@redhat.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
f94ecbc920
commit
37de65a764
@ -439,32 +439,30 @@ 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":
|
||||
print_str += "recirc(0x%x)" % int(self.get_attr(field[0]))
|
||||
elif field[0] == "OVS_ACTION_ATTR_TRUNC":
|
||||
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":
|
||||
print_str += "ct_clear"
|
||||
elif field[0] == "OVS_ACTION_ATTR_POP_VLAN":
|
||||
print_str += "pop_vlan"
|
||||
elif field[0] == "OVS_ACTION_ATTR_POP_ETH":
|
||||
print_str += "pop_eth"
|
||||
elif field[0] == "OVS_ACTION_ATTR_POP_NSH":
|
||||
print_str += "pop_nsh"
|
||||
elif field[0] == "OVS_ACTION_ATTR_POP_MPLS":
|
||||
print_str += "pop_mpls"
|
||||
if field[0] == "OVS_ACTION_ATTR_OUTPUT":
|
||||
print_str += "%d" % int(self.get_attr(field[0]))
|
||||
elif field[0] == "OVS_ACTION_ATTR_RECIRC":
|
||||
print_str += "recirc(0x%x)" % int(self.get_attr(field[0]))
|
||||
elif field[0] == "OVS_ACTION_ATTR_TRUNC":
|
||||
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[0] == "OVS_ACTION_ATTR_CT_CLEAR":
|
||||
print_str += "ct_clear"
|
||||
elif field[0] == "OVS_ACTION_ATTR_POP_VLAN":
|
||||
print_str += "pop_vlan"
|
||||
elif field[0] == "OVS_ACTION_ATTR_POP_ETH":
|
||||
print_str += "pop_eth"
|
||||
elif field[0] == "OVS_ACTION_ATTR_POP_NSH":
|
||||
print_str += "pop_nsh"
|
||||
elif field[0] == "OVS_ACTION_ATTR_POP_MPLS":
|
||||
print_str += "pop_mpls"
|
||||
else:
|
||||
datum = self.get_attr(field[0])
|
||||
if field[0] == "OVS_ACTION_ATTR_CLONE":
|
||||
@ -472,7 +470,10 @@ class ovsactions(nla):
|
||||
print_str += datum.dpstr(more)
|
||||
print_str += ")"
|
||||
else:
|
||||
print_str += datum.dpstr(more)
|
||||
try:
|
||||
print_str += datum.dpstr(more)
|
||||
except:
|
||||
print_str += "{ATTR: %s not decoded}" % field[0]
|
||||
|
||||
return print_str
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user