Example #1
0
 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)
Example #2
0
 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)
Example #3
0
    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))
Example #4
0
 def iface_get_info(self, name):
     try:
         iface = self.get_ipdb().interfaces[name].ro
     except KeyError:
         raise exc.SystemResourceNotFoundError(type(self), name)
     return iface