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 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): 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 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')