def plug(self, instance, vif): """Plug using hybrid strategy Create a per-VIF linux bridge, then link that bridge to the OVS integration bridge via a veth device, setting up the other end of the veth device just like a normal OVS port. Then boot the VIF on the linux bridge using standard libvirt mechanisms. """ iface_id = vif.ovs_interfaceid br_name = vif.br_name v1_name, v2_name = vif.veth_pair_names if not linux_net.device_exists(br_name): processutils.execute('sudo', 'brctl', 'addbr', br_name) processutils.execute('sudo', 'brctl', 'setfd', br_name, 0) processutils.execute('sudo', 'brctl', 'stp', br_name, 'off') syspath = '/sys/class/net/%s/bridge/multicast_snooping' syspath = syspath % br_name processutils.execute('sudo', 'tee', syspath, process_input='0', check_exit_code=[0, 1]) if not linux_net.device_exists(v2_name): linux_net.create_veth_pair(v1_name, v2_name, self.config.get('network_device_mtu')) processutils.execute('sudo', 'ip', 'link', 'set', br_name, 'up') processutils.execute('sudo', 'brctl', 'addif', br_name, v1_name) linux_net.create_ivs_vif_port(v2_name, iface_id, vifaddress, instance.uuid)
def unplug(self, vif): """UnPlug using hybrid strategy Unhook port from OVS, unhook port from bridge, delete bridge, and delete both veth devices. """ br_name = vif.br_name v1_name, v2_name = vif.veth_pair_names if linux_net.device_exists(br_name): processutils.execute('sudo', 'brctl', 'delif', br_name, v1_name) processutils.execute('sudo', 'ip', 'link', 'set', br_name, 'down') processutils.execute('sudo', 'brctl', 'delbr', br_name) linux_net.delete_ovs_vif_port(vif.bridge_name, v2_name)