def iface_set_up(self, name): klass = type(self) try: with self.get_ipdb().interfaces[name] as iface: iface.up() except OSError as e: raise exc.SystemResourceError(klass, name) from e except KeyError: raise exc.SystemResourceNotFoundError(klass, name)
def iface_drop_all_addresses(self, name): klass = type(self) try: with self.get_ipdb().interfaces[name] as iface: for addr in tuple(iface.ipaddr): iface.del_ip(*addr) except OSError as e: raise exc.SystemResourceError(klass, name) from e except KeyError: raise exc.SystemResourceNotFoundError(klass, self.context.iface)
def configure(self): ns_name = self.context.make_network_namespace_name() name = self.make_name() left, right = name ip = self.get_ipdb() klass = type(self) self.iface_set_up(left) try: with ip.interfaces[right] as iface: iface.net_ns_fd = ns_name except OSError as e: raise exc.SystemResourceError(klass, name) from e except KeyError: # perhaps someone already move iface into our NS pass nsip = self.context.shared_registry.fetch(NetworkNamespace) iface_index = self.ns_gw_name try: with nsip.interfaces[right] as iface: iface_index = iface.index iface.ifname = self.ns_gw_name iface.up() except OSError as e: raise exc.SystemResourceError(klass, name) from e except KeyError: # perhaps someone already rename iface, check it try: with ip.interfaces[left].ro as iface_left: with nsip.interfaces[self.ns_gw_name].ro as iface_right: ok = iface_left['kind'] == iface_right['kind'] == 'veth' ok = ok and iface_left['peer'] == right if not ok: raise exc.SystemResourceDamagedError( klass, name, 'is not a veth pair created in previous ' 'step') except KeyError as e: raise exc.SystemResourceNotFoundError(klass, str(e)) self.context.shared_registry.add(klass, GWDescriptor(left, self.ns_gw_name)) self.context.shared_registry.add(GatewayIfaceDescriptor, GatewayIfaceDescriptor(iface_index))
def iface_get_info(self, name): try: iface = self.get_ipdb().interfaces[name].ro except KeyError: raise exc.SystemResourceNotFoundError(type(self), name) return iface