Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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)