Skip to content

Commit

Permalink
selftests: openvswitch: Support implicit ipv6 arguments.
Browse files Browse the repository at this point in the history
The current iteration of IPv6 support requires explicit fields to be set
in addition to not properly support the actual IPv6 addresses properly.
With this change, make it so that the ipv6() bare option is usable to
create wildcarded flows to match broad swaths of ipv6 traffic.

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-6-aconole@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
  • Loading branch information
Aaron Conole authored and Jakub Kicinski committed Jun 27, 2024
1 parent fefe3b7 commit 51458e1
Showing 1 changed file with 24 additions and 12 deletions.
36 changes: 24 additions & 12 deletions tools/testing/selftests/net/openvswitch/ovs-dpctl.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,18 @@ def convert_ipv4(data):

return int(ipaddress.IPv4Address(ip)), int(ipaddress.IPv4Address(mask))

def convert_ipv6(data):
ip, _, mask = data.partition('/')

if not ip:
ip = mask = 0
elif not mask:
mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'
elif mask.isdigit():
mask = ipaddress.IPv6Network("::/" + mask).hostmask

return ipaddress.IPv6Address(ip).packed, ipaddress.IPv6Address(mask).packed

def convert_int(size):
def convert_int_sized(data):
value, _, mask = data.partition('/')
Expand Down Expand Up @@ -941,21 +953,21 @@ class ovs_key_ipv6(ovs_key_proto):
"src",
"src",
lambda x: str(ipaddress.IPv6Address(x)),
lambda x: int.from_bytes(x, "big"),
lambda x: ipaddress.IPv6Address(x),
lambda x: ipaddress.IPv6Address(x).packed if x else 0,
convert_ipv6,
),
(
"dst",
"dst",
lambda x: str(ipaddress.IPv6Address(x)),
lambda x: int.from_bytes(x, "big"),
lambda x: ipaddress.IPv6Address(x),
lambda x: ipaddress.IPv6Address(x).packed if x else 0,
convert_ipv6,
),
("label", "label", "%d", int),
("proto", "proto", "%d", int),
("tclass", "tclass", "%d", int),
("hlimit", "hlimit", "%d", int),
("frag", "frag", "%d", int),
("label", "label", "%d", lambda x: int(x) if x else 0),
("proto", "proto", "%d", lambda x: int(x) if x else 0),
("tclass", "tclass", "%d", lambda x: int(x) if x else 0),
("hlimit", "hlimit", "%d", lambda x: int(x) if x else 0),
("frag", "frag", "%d", lambda x: int(x) if x else 0),
)

def __init__(
Expand Down Expand Up @@ -1153,7 +1165,7 @@ class ovs_key_nd(ovs_key_proto):
"target",
"target",
lambda x: str(ipaddress.IPv6Address(x)),
lambda x: int.from_bytes(x, "big"),
convert_ipv6,
),
("sll", "sll", macstr, lambda x: int.from_bytes(x, "big")),
("tll", "tll", macstr, lambda x: int.from_bytes(x, "big")),
Expand Down Expand Up @@ -1238,13 +1250,13 @@ class ovs_key_ct_tuple_ipv6(nla):
"src",
"src",
lambda x: str(ipaddress.IPv6Address(x)),
lambda x: int.from_bytes(x, "big", convertmac),
convert_ipv6,
),
(
"dst",
"dst",
lambda x: str(ipaddress.IPv6Address(x)),
lambda x: int.from_bytes(x, "big"),
convert_ipv6,
),
("tp_src", "tp_src", "%d", int),
("tp_dst", "tp_dst", "%d", int),
Expand Down

0 comments on commit 51458e1

Please sign in to comment.