From 4d3dc0f7523f3600eda1cff427151fde8d0df49f Mon Sep 17 00:00:00 2001 From: Nikhil Date: Thu, 17 Mar 2016 13:01:26 -0700 Subject: [PATCH] addons: addressvirtual: vrr virtual mac multicast bit check Ticket: CM-8658 Reviewed By: Roopa Prabhu, Scott Emery Testing Done: Yes, by installing ifupdown .deb file onto cel-e1031-01 This patch includes a check for multicast bit of vrr virtual mac address and set an error Signed-off-by: Nikhil --- addons/addressvirtual.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/addons/addressvirtual.py b/addons/addressvirtual.py index 55510b9..45a582c 100644 --- a/addons/addressvirtual.py +++ b/addons/addressvirtual.py @@ -156,6 +156,9 @@ class addressvirtual(moduleBase): av_idx += 1 continue + mac = av_attrs[0] + if not self.check_mac_address(ifaceobj, mac): + continue # Create a macvlan device on this device and set the virtual # router mac and ip on it link_created = False @@ -164,7 +167,6 @@ class addressvirtual(moduleBase): rtnetlink_api.rtnl_api.create_macvlan(macvlan_ifacename, ifaceobj.name) link_created = True - mac = av_attrs[0] ips = av_attrs[1:] if mac != 'None': mac = mac.lower() @@ -237,6 +239,18 @@ class addressvirtual(moduleBase): self.ipcmd.batch_commit() self._remove_addresses_from_bridge(ifaceobj, hwaddress) + def check_mac_address(self, ifaceobj, mac): + if mac == 'None': + return True + mac = mac.lower() + try: + if int(mac.split(":")[0][1], 16) & 1 : + self.logger.error("%s: Multicast bit is set in the virtual mac address '%s'" %(ifaceobj.name, mac)) + return False + return True + except Exception, e: + return False + def _up(self, ifaceobj): address_virtual_list = ifaceobj.get_attr_value('address-virtual') if not address_virtual_list: -- 2.39.5