From 90649d374a50581831e0eba0b57adfaa0ff25755 Mon Sep 17 00:00:00 2001 From: Julien Fortin Date: Wed, 19 Oct 2016 00:41:02 +0200 Subject: [PATCH] addons: addressvirtual: ifquery normalizing ip address to IPNetwork format for comparaisons Ticket: None Reviewed By: Roopa Testing Done: Test from CM-8736: auto bridge iface bridge bridge-vlan-aware yes bridge-ports swp42 mstpctl-treeprio 4096 bridge-stp on bridge-vids 5 13 14 20 799 1001-1006 bridge-pvid 192 auto bridge.20 iface bridge.20 address 10.7.192.194/27 address-virtual 44:38:39:ff:00:20 10.7.192.193 $ ifreload -a $ ifquery bridge.20 -c auto bridge.20 iface bridge.20 [fail] address 10.7.192.194/27 [pass] address-virtual 44:38:39:ff:00:20 10.7.192.193/32 [fail] $ it fails because ifquery is comparing : ['10.7.192.193/32'] with ['10.7.192.193'] after the patch: $ ifquery bridge.20 -c auto bridge.20 iface bridge.20 [pass] address 10.7.192.194/27 [pass] address-virtual 44:38:39:ff:00:20 10.7.192.193 [pass] Signed-off-by: Julien Fortin --- addons/addressvirtual.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/addons/addressvirtual.py b/addons/addressvirtual.py index 8b9bed3..007f2a0 100644 --- a/addons/addressvirtual.py +++ b/addons/addressvirtual.py @@ -359,14 +359,27 @@ class addressvirtual(moduleBase): % (ifaceobj.name, macvlan_ifacename, ' '.join(av_attrs))) - if (rhwaddress == av_attrs[0] and raddrs == av_attrs[1:] and - self._check_addresses_in_bridge(ifaceobj, av_attrs[0])): - ifaceobjcurr.update_config_with_status('address-virtual', - address_virtual, 0) - else: - raddress_virtual = '%s %s' %(rhwaddress, ' '.join(raddrs)) - ifaceobjcurr.update_config_with_status('address-virtual', - raddress_virtual, 1) + try: + cmp_av_addr = av_attrs[1:][0] + cmp_raddr = raddrs[0] + + if '/' in cmp_raddr and '/' not in cmp_av_addr: + cmp_av_addr = str(IPNetwork(cmp_av_addr)) + elif '/' in cmp_av_addr and '/' not in cmp_raddr: + cmp_raddr = str(IPNetwork(cmp_raddr)) + + if (rhwaddress == av_attrs[0] and cmp_raddr == cmp_av_addr and + self._check_addresses_in_bridge(ifaceobj, av_attrs[0])): + ifaceobjcurr.update_config_with_status('address-virtual', + address_virtual, 0) + else: + raddress_virtual = '%s %s' % (rhwaddress, ' '.join(raddrs)) + ifaceobjcurr.update_config_with_status('address-virtual', + raddress_virtual, 1) + except: + raddress_virtual = '%s %s' % (rhwaddress, ' '.join(raddrs)) + ifaceobjcurr.update_config_with_status('address-virtual', + raddress_virtual, 1) av_idx += 1 return