1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00

netlink ip link set up/down may silently fail, adding try/except statements

Ticket: CM-12609
Reviewed By: Roopa, Nikhil G
Testing Done: ifupdown2 smoke tests

Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
This commit is contained in:
Julien Fortin
2016-08-24 14:20:45 -07:00
parent 781b55c5b0
commit 707aeb7378
4 changed files with 41 additions and 28 deletions

View File

@@ -338,34 +338,33 @@ class address(moduleBase):
self.logger.error('%s: %s' % (ifaceobj.name, str(e)))
ifaceobj.set_status(ifaceStatus.ERROR)
hwaddress = self._get_hwaddress(ifaceobj)
if hwaddress:
running_hwaddress = None
if not ifupdownflags.flags.PERFMODE: # system is clean
running_hwaddress = self.ipcmd.link_get_hwaddress(ifaceobj.name)
if hwaddress != running_hwaddress:
slave_down = False
netlink.link_set_updown(ifaceobj.name, "down")
if ifaceobj.link_kind & ifaceLinkKind.BOND:
# if bond, down all the slaves
if ifaceobj.lowerifaces:
for l in ifaceobj.lowerifaces:
netlink.link_set_updown(l, "down")
slave_down = True
try:
self.ipcmd.link_set(ifaceobj.name, 'address', hwaddress)
finally:
netlink.link_set_updown(ifaceobj.name, "up")
if slave_down:
for l in ifaceobj.lowerifaces:
netlink.link_set_updown(l, "up")
try:
hwaddress = self._get_hwaddress(ifaceobj)
if hwaddress:
running_hwaddress = None
if not ifupdownflags.flags.PERFMODE: # system is clean
running_hwaddress = self.ipcmd.link_get_hwaddress(ifaceobj.name)
if hwaddress != running_hwaddress:
slave_down = False
netlink.link_set_updown(ifaceobj.name, "down")
if ifaceobj.link_kind & ifaceLinkKind.BOND:
# if bond, down all the slaves
if ifaceobj.lowerifaces:
for l in ifaceobj.lowerifaces:
netlink.link_set_updown(l, "down")
slave_down = True
try:
self.ipcmd.link_set(ifaceobj.name, 'address', hwaddress)
finally:
netlink.link_set_updown(ifaceobj.name, "up")
if slave_down:
for l in ifaceobj.lowerifaces:
netlink.link_set_updown(l, "up")
# Handle special things on a bridge
self._process_bridge(ifaceobj, True)
except Exception, e:
self.log_error('%s: %s' %(ifaceobj.name, str(e)), ifaceobj)
pass
if addr_method != "dhcp":
gateways = ifaceobj.get_attr_value('gateway')