def configureBond(self, bond, **opts): if not self.owned_device(bond.name): IfcfgAcquire.acquire_device(bond.name) self.configApplier.addBonding(bond, self.net_info, **opts) if not link_vlan.is_base_device(bond.name): for slave in bond.slaves: ifdown(slave.name) for slave in bond.slaves: slave.configure(**opts) self._addSourceRoute(bond) _ifup(bond) # When acquiring the device from NM, it may take a few seconds until # the bond is released by NM and loaded through initscripts. # Giving it a chance to come up before continuing. with waitfor.waitfor_linkup(bond.name): pass bond_attr = { 'options': bond.options, 'nics': sorted(s.name for s in bond.slaves), 'switch': 'legacy', } if bond.hwaddr: bond_attr['hwaddr'] = bond.hwaddr self.runningConfig.setBonding(bond.name, bond_attr)
def _wait_for_link_up(devname, timeout): """ Waiting for link-up, no longer than the specified timeout period. The time waited (in seconds) is returned. """ if timeout > 0 and not iface_obj(devname).is_oper_up(): time_start = monotonic_time() with waitfor.waitfor_linkup(devname, timeout=timeout): pass return monotonic_time() - time_start return 0
def monitor_stable_link_state(device, wait_for_linkup=True): """Raises an exception if it detects that the device link state changes.""" if wait_for_linkup: with waitfor.waitfor_linkup(device): pass iface_properties = iface(device).properties() original_state = iface_properties['state'] try: with monitor.Monitor(groups=('link', )) as mon: yield finally: state_changes = (e['state'] for e in mon if e['name'] == device) for state in state_changes: if state != original_state: raise pytest.fail('{} link state changed: {} -> {}'.format( device, original_state, state))
def _ifup(iface, cgroup=dhclient.DHCLIENT_CGROUP): if not iface.blockingdhcp and (iface.ipv4.bootproto == "dhcp" or iface.ipv6.dhcpv6): # wait for dhcp in another thread, so vdsm won't get stuck (BZ#498940) t = concurrent.thread(_exec_ifup, name="ifup/%s" % iface, args=(iface, cgroup)) t.start() else: if not iface.master and (iface.ipv4 or iface.ipv6): if iface.ipv4: wait_for_ip = waitfor.waitfor_ipv4_addr elif iface.ipv6: wait_for_ip = waitfor.waitfor_ipv6_addr with wait_for_ip(iface.name): _exec_ifup(iface, cgroup) else: with waitfor.waitfor_linkup(iface.name): _exec_ifup(iface, cgroup)
def monitor_stable_link_state(device, wait_for_linkup=True): """Raises an exception if it detects that the device link state changes.""" if wait_for_linkup: with waitfor.waitfor_linkup(device): pass iface_properties = iface(device).properties() original_state = iface_properties['state'] try: with monitor.Monitor(groups=('link',)) as mon: yield finally: state_changes = (e['state'] for e in mon if e['name'] == device) for state in state_changes: if state != original_state: raise pytest.fail( '{} link state changed: {} -> {}'.format( device, original_state, state))
def _ifup(iface, cgroup=dhclient.DHCLIENT_CGROUP): if not iface.blockingdhcp and (iface.ipv4.bootproto == 'dhcp' or iface.ipv6.dhcpv6): # wait for dhcp in another thread, so vdsm won't get stuck (BZ#498940) t = concurrent.thread(_exec_ifup, name='ifup/%s' % iface, args=(iface, cgroup)) t.start() else: if not iface.master and (iface.ipv4 or iface.ipv6): if iface.ipv4: wait_for_ip = waitfor.waitfor_ipv4_addr elif iface.ipv6: wait_for_ip = waitfor.waitfor_ipv6_addr with wait_for_ip(iface.name): _exec_ifup(iface, cgroup) else: with waitfor.waitfor_linkup(iface.name): _exec_ifup(iface, cgroup)
def _ifup(iface, cgroup=dhclient.DHCLIENT_CGROUP, blocking=None): if blocking is None: blocking = _blocking_action_required(iface) if blocking: if not iface.master and (iface.ipv4 or iface.ipv6): if iface.ipv4: wait_for_ip = waitfor.waitfor_ipv4_addr elif iface.ipv6: wait_for_ip = waitfor.waitfor_ipv6_addr with wait_for_ip(iface.name): _exec_ifup(iface, cgroup) else: with waitfor.waitfor_linkup(iface.name): _exec_ifup(iface, cgroup) else: # wait for dhcp in another thread, so vdsm won't get stuck (BZ#498940) t = concurrent.thread(_exec_ifup, name='ifup/%s' % iface, args=(iface, cgroup)) t.start()
def _ifup(iface, cgroup=dhclient.DHCLIENT_CGROUP, blocking=None): if blocking is None: blocking = _blocking_action_required(iface) if blocking: if not iface.master and (iface.ipv4 or iface.ipv6): if iface.ipv4: wait_for_ip = waitfor.waitfor_ipv4_addr elif iface.ipv6: wait_for_ip = waitfor.waitfor_ipv6_addr with wait_for_ip(iface.name, timeout=60): _exec_ifup(iface, cgroup) else: with waitfor.waitfor_linkup(iface.name): _exec_ifup(iface, cgroup) else: # wait for dhcp in another thread, so vdsm won't get stuck (BZ#498940) t = concurrent.thread(_exec_ifup, name='ifup/%s' % iface, args=(iface, cgroup)) t.start()
def configureBond(self, bond, **opts): if not self.owned_device(bond.name): IfcfgAcquire.acquire_device(bond.name) self.configApplier.addBonding(bond, self.net_info, **opts) if not vlans.is_vlanned(bond.name): for slave in bond.slaves: ifdown(slave.name) for slave in bond.slaves: slave.configure(**opts) self._addSourceRoute(bond) _ifup(bond) # When acquiring the device from NM, it may take a few seconds until # the bond is released by NM and loaded through initscripts. # Giving it a chance to come up before continuing. with waitfor.waitfor_linkup(bond.name): pass self.runningConfig.setBonding( bond.name, {'options': bond.options, 'nics': sorted(s.name for s in bond.slaves), 'switch': 'legacy'})
def up(self): with waitfor.waitfor_linkup(self._master, timeout=2): self._setlinks(up=True)
def _up_blocking(self, link_blocking): with waitfor_linkup(self._dev, link_blocking): ipwrapper.linkSet(self._dev, [STATE_UP])
def _up_blocking(dev, link_blocking): with waitfor_linkup(dev, link_blocking): ipwrapper.linkSet(dev, [STATE_UP])