From: anuradhak Date: Mon, 2 Feb 2015 17:54:53 +0000 (-0800) Subject: Move clag_enable setting to ifupdown2 ifenslave. X-Git-Tag: 1.2.2-1~146^2~343 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=ff01349dd4edc8f4b056328bc10e8c20a527ab07;p=mirror_ifupdown2.git Move clag_enable setting to ifupdown2 ifenslave. Ticket: CM-4802 Reviewed By: Testing Done: yes 1. clag_enable needs to be set before slaves are added to the bond. Otherwise bonding driver will bring the slaves up independent of clagd. 2. also added post_down clagd addon to cleanup the clag-id on ifdown. --- diff --git a/addons/ifenslave.py b/addons/ifenslave.py index 95fed79..8e4c9ef 100644 --- a/addons/ifenslave.py +++ b/addons/ifenslave.py @@ -246,6 +246,11 @@ class ifenslave(moduleBase): ifaceobj.link_type != ifaceLinkType.LINK_NA): rtnetlink_api.rtnl_api.link_set(slave, "up") + def _set_clag_enable(self, ifaceobj): + attrval = ifaceobj.get_attr_value_first('clag-id') + attrval = attrval if attrval else '0' + self.ifenslavecmd.set_clag_enable(ifaceobj.name, attrval) + def _apply_slaves_lacp_bypass_prio(self, ifaceobj): slaves = self.ifenslavecmd.get_slaves(ifaceobj.name) if not slaves: @@ -285,6 +290,8 @@ class ifenslave(moduleBase): if not self.ipcmd.link_exists(ifaceobj.name): self.ifenslavecmd.create_bond(ifaceobj.name) self._apply_master_settings(ifaceobj) + # clag_enable has to happen before the slaves are added to the bond + self._set_clag_enable(ifaceobj) self._add_slaves(ifaceobj) self._apply_slaves_lacp_bypass_prio(ifaceobj) if ifaceobj.addr_method == 'manual': diff --git a/config/addons.conf b/config/addons.conf index 97f0f3d..e9aa487 100644 --- a/config/addons.conf +++ b/config/addons.conf @@ -18,6 +18,7 @@ down,dhcp down,addressvirtual down,address down,usercmds +post-down,clagd post-down,mstpctl post-down,bridgevlan post-down,bridge diff --git a/ifupdownaddons/ifenslaveutil.py b/ifupdownaddons/ifenslaveutil.py index 6b4e228..c7e0d42 100644 --- a/ifupdownaddons/ifenslaveutil.py +++ b/ifupdownaddons/ifenslaveutil.py @@ -53,7 +53,8 @@ class ifenslaveutil(utilsBase): self.read_file_oneline('/sys/class/net/%s/bonding/%s' %(bondname, x))), ['use_carrier', 'miimon', 'min_links', 'num_unsol_na', - 'num_grat_arp', 'lacp_bypass_allow', 'lacp_bypass_period']) + 'num_grat_arp', 'lacp_bypass_allow', 'lacp_bypass_period', + 'clag_enable']) except Exception, e: pass @@ -191,6 +192,18 @@ class ifenslaveutil(utilsBase): def get_miimon(self, bondname): return self._cache_get([bondname, 'linkinfo', 'miimon']) + def set_clag_enable(self, bondname, clag_id): + clag_enable = '0' if clag_id == '0' else '1' + if self._cache_check([bondname, 'linkinfo', 'clag_enable'], + clag_enable) == False: + self.write_file('/sys/class/net/%s' %bondname + + '/bonding/clag_enable', clag_enable) + self._cache_update([bondname, 'linkinfo', 'clag_enable'], + clag_enable) + + def get_clag_enable(self, bondname): + return self._cache_get([bondname, 'linkinfo', 'clag_enable']) + def set_mode(self, bondname, mode, prehook=None): valid_modes = ['balance-rr', 'active-backup', 'balance-xor', 'broadcast', '802.3ad', 'balance-tlb', 'balance-alb']