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 release(self): super().release() name = self.context.make_network_namespace_name() try: pyroute2.netns.remove(name) except OSError as e: raise exc.SystemResourceError(type(self), name) from e
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 create(self): name = self.context.make_network_namespace_name() klass = type(self) try: pyroute2.netns.create(name) except OSError as e: if e.errno == errno.EEXIST: raise exc.SystemResourceExistsError(klass, name) raise exc.SystemResourceError(klass, name) from e
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): name = self.context.make_bridge_name() klass = type(self) try: self._make_bridge_ifadd(name) self._make_bridge_setup(name) except OSError as e: raise exc.SystemResourceError(klass, name) from e except KeyError: raise exc.SystemResourceDamagedError(klass, name, 'interface not found')
def create(self): name = self.context.make_network_namespace_name() klass = type(self) try: pyroute2.netns.create(name) except OSError as e: if e.errno == errno.EEXIST: raise exc.SystemResourceExistsError(klass, name) raise exc.SystemResourceError(klass, name) from e self._sysctl(name, 'net.ipv6.conf.default.disable_ipv6', 1)
def create(self): name = self.make_name() left, right = name klass = type(self) try: with self.get_ipdb().create(kind='veth', ifname=left, peer=right): # don't do any extra configuration here pass except pyroute2.CreateException: raise exc.SystemResourceExistsError(klass, name) except Exception as e: raise exc.SystemResourceError(klass, name) from e
def configure(self): veth = self.context.shared_registry.fetch(VEthPair) veth_index = self.iface_get_info(veth.root).index try: with self.get_ipdb().interfaces[self.context.iface.index] as iface: iface.add_port(veth_index) except OSError as e: raise exc.SystemResourceError(type(self), veth.root) from e except KeyError: raise exc.SystemResourceDamagedError(type(self), self.context.iface.name, 'interface not found')
def configure(self): name = self.context.make_bridge_name() veth = self.context.shared_registry.fetch(VEthPair) need_ports = { self.context.iface.index, self.iface_get_info(veth.root).index } klass = type(self) try: with self.get_ipdb().interfaces[name] as iface: iface.up() ports = set(iface.ports) for port in ports - need_ports: iface.del_port(port) for port in need_ports - ports: iface.add_port(port) except OSError as e: raise exc.SystemResourceError(klass, name) from e except KeyError: raise exc.SystemResourceDamagedError(klass, name, 'interface not found')