This hack allows CIDR notations for OFPMatch. For example: ofpp.OFPMatch(ipv4_src="198.51.100.0/24")
Signed-off-by: IWAMOTO Toshihiro <iwam...@valinux.co.jp> --- ryu/lib/addrconv.py | 20 ++++++++++++++++---- ryu/ofproto/oxx_fields.py | 3 +++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ryu/lib/addrconv.py b/ryu/lib/addrconv.py index 7641750..36a00fa 100644 --- a/ryu/lib/addrconv.py +++ b/ryu/lib/addrconv.py @@ -18,20 +18,32 @@ import netaddr class AddressConverter(object): - def __init__(self, addr, strat, **kwargs): + def __init__(self, addr, strat, fallback=None, **kwargs): self._addr = addr self._strat = strat + self._fallback = fallback self._addr_kwargs = kwargs def text_to_bin(self, text): - return self._addr(text, **self._addr_kwargs).packed + try: + return self._addr(text, **self._addr_kwargs).packed + except Exception as e: + if self._fallback is None: + raise e + + # text_to_bin is expected to return binary string under + # normal circumstances. See ofproto.oxx_fields._from_user. + ip = self._fallback(text, **self._addr_kwargs) + return ip.ip.packed, ip.netmask.packed def bin_to_text(self, bin): return str(self._addr(self._strat.packed_to_int(bin), **self._addr_kwargs)) -ipv4 = AddressConverter(netaddr.IPAddress, netaddr.strategy.ipv4, version=4) -ipv6 = AddressConverter(netaddr.IPAddress, netaddr.strategy.ipv6, version=6) +ipv4 = AddressConverter(netaddr.IPAddress, netaddr.strategy.ipv4, + fallback=netaddr.IPNetwork, version=4) +ipv6 = AddressConverter(netaddr.IPAddress, netaddr.strategy.ipv6, + fallback=netaddr.IPNetwork, version=6) class mac_mydialect(netaddr.mac_unix): diff --git a/ryu/ofproto/oxx_fields.py b/ryu/ofproto/oxx_fields.py index e9c1fb9..e8477de 100644 --- a/ryu/ofproto/oxx_fields.py +++ b/ryu/ofproto/oxx_fields.py @@ -72,6 +72,9 @@ def _from_user(oxx, name_to_field, name, user_value): value = t.from_user(value) if mask is not None: mask = t.from_user(mask) + elif isinstance(value, tuple): + # This hack is to accomodate CIDR notations with IPv[46]Addr. + value, mask = value return num, value, mask -- 2.1.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Ryu-devel mailing list Ryu-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ryu-devel