def on_delete_request(self, rsrc_id): app_unique_name = rsrc_id with lc.LogContext(_LOGGER, rsrc_id): veth, _ = _device_from_rsrc_id(app_unique_name) try: netdev.dev_state(veth) netdev.link_del_veth(veth) except (OSError, IOError) as err: if err.errno != errno.ENOENT: raise # Remove it from our state (if present) dev_info = self._devices.pop(app_unique_name, None) if dev_info is not None and 'ip' in dev_info: # Remove the environment mark on the IP if 'environment' in dev_info: _delete_mark_rule( dev_info['ip'], dev_info['environment'] ) # VIPs deallocation (the owner is the resource link) self._vips.free(app_unique_name, dev_info['ip']) return True
def test_link_del_veth(self): """Test veth deletion. """ netdev.link_del_veth('foo') treadmill.subproc.check_call.assert_called_with( [ 'ip', 'link', 'delete', 'dev', 'foo', 'type', 'veth', ], )
def _bridge_initialize(self): """Reset/initialize the Treadmill node bridge. """ try: # FIXME(boysson): This is for migration when TM_DEV0 used to be a # bridge. netdev.link_set_down(self._TM_DEV0) netdev.bridge_delete(self._TM_DEV0) except subproc.CalledProcessError: pass try: netdev.link_set_down(self._TM_DEV0) netdev.link_del_veth(self._TM_DEV0) except subproc.CalledProcessError: pass try: netdev.link_set_down(self._TMBR_DEV) netdev.bridge_delete(self._TMBR_DEV) except subproc.CalledProcessError: pass netdev.bridge_create(self._TMBR_DEV) netdev.bridge_setfd(self._TMBR_DEV, 0) netdev.link_add_veth(self._TM_DEV0, self._TM_DEV1) netdev.link_set_mtu(self._TM_DEV0, self.ext_mtu) netdev.link_set_mtu(self._TM_DEV1, self.ext_mtu) netdev.bridge_addif(self._TMBR_DEV, self._TM_DEV1) # Force the bridge MAC address to the Treadmill device. This # prevents the bridge's MAC from changing when adding/removing # container interfaces. # (Default Linux bridge behavior is to set the bridge's MAC to be # lowest of it's ports). tm_mac = netdev.dev_mac(self._TM_DEV1) netdev.link_set_addr(self._TMBR_DEV, tm_mac) # Bring up the bridge interface netdev.link_set_up(self._TMBR_DEV) netdev.link_set_up(self._TM_DEV1) netdev.addr_add( addr='{ip}/16'.format(ip=self._TM_IP), devname=self._TM_DEV0 ) # Enable route_localnet so that we can redirect traffic from the # container to the node's loopback address. netdev.dev_conf_route_localnet_set(self._TM_DEV0, True) # Bring up the TM interface netdev.link_set_up(self._TM_DEV0)