예제 #1
0
 def block(self):
     """Block all traffic in network"""
     filter_xml = LibvirtXMLBuilder.build_network_filter(
         name=self.network_name,
         uuid=self._nwfilter.UUIDString(),
         rule=dict(action='drop', direction='inout', priority='-1000'))
     self.driver.conn.nwfilterDefineXML(filter_xml)
예제 #2
0
    def define(self):
        # define filter first
        filter_xml = LibvirtXMLBuilder.build_network_filter(
            name=self.network_name)
        self.driver.conn.nwfilterDefineXML(filter_xml)

        bridge_name = self.driver.get_available_device_name(prefix='virbr')

        # TODO(ddmitriev): check if 'vlan' package installed
        # Define tagged interfaces on the bridge
        for vlanid in self.vlan_ifaces:
            self.iface_define(name=bridge_name, vlanid=vlanid)

        # Define libvirt network
        ip_network_address = None
        ip_network_prefixlen = None
        dhcp_range_start = None
        dhcp_range_end = None
        addresses = []
        if self.address_pool is not None:
            # Reserved names 'l2_network_device' and 'dhcp'
            ip_network_address = self.address_pool.get_ip('l2_network_device')

            # Workaround for fuel-qa compatibility, if 'l2_network_device'
            # address was not reserved in the YAML template
            if not ip_network_address:
                ip_network_address = str(self.address_pool.ip_network[1])

            ip_network_prefixlen = str(self.address_pool.ip_network.prefixlen)
            dhcp_range_start = self.address_pool.ip_range_start('dhcp')
            dhcp_range_end = self.address_pool.ip_range_end('dhcp')

            for interface in self.interfaces:
                for address in interface.addresses:
                    ip_addr = netaddr.IPAddress(address.ip_address)
                    if ip_addr in self.address_pool.ip_network:
                        addresses.append(
                            dict(mac=str(interface.mac_address),
                                 ip=str(address.ip_address),
                                 name=interface.node.name))

        xml = LibvirtXMLBuilder.build_network_xml(
            network_name=self.network_name,
            bridge_name=bridge_name,
            addresses=addresses,
            forward=self.forward.mode,
            ip_network_address=ip_network_address,
            ip_network_prefixlen=ip_network_prefixlen,
            dhcp_range_start=dhcp_range_start,
            dhcp_range_end=dhcp_range_end,
            stp=self.driver.stp,
            has_pxe_server=self.has_pxe_server,
            has_dhcp_server=self.has_dhcp_server,
            tftp_root_dir=self.tftp_root_dir,
        )
        ret = self.driver.conn.networkDefineXML(xml)
        ret.setAutostart(True)
        self.uuid = ret.UUIDString()

        super(LibvirtL2NetworkDevice, self).define()
예제 #3
0
 def block(self):
     """Block all traffic in network"""
     filter_xml = LibvirtXMLBuilder.build_network_filter(
         name=self.network_name,
         uuid=self._nwfilter.UUIDString(),
         rule=dict(action='drop',
                   direction='inout',
                   priority='-1000'))
     self.driver.conn.nwfilterDefineXML(filter_xml)
예제 #4
0
 def unblock(self):
     """Unblock all traffic in network"""
     filter_xml = LibvirtXMLBuilder.build_network_filter(
         name=self.network_name,
         uuid=self._nwfilter.UUIDString())
     self.driver.conn.nwfilterDefineXML(filter_xml)
예제 #5
0
    def define(self):
        # define filter first
        filter_xml = LibvirtXMLBuilder.build_network_filter(
            name=self.network_name)
        self.driver.conn.nwfilterDefineXML(filter_xml)

        bridge_name = self.driver.get_available_device_name(prefix='virbr')

        # TODO(ddmitriev): check if 'vlan' package installed
        # Define tagged interfaces on the bridge
        for vlanid in self.vlan_ifaces:
            self.iface_define(name=bridge_name, vlanid=vlanid)

        # Define libvirt network
        ip_network_address = None
        ip_network_prefixlen = None
        dhcp_range_start = None
        dhcp_range_end = None
        addresses = []
        if self.address_pool is not None:
            # Reserved names 'l2_network_device' and 'dhcp'
            ip_network_address = self.address_pool.get_ip('l2_network_device')

            # Workaround for fuel-qa compatibility, if 'l2_network_device'
            # address was not reserved in the YAML template
            if not ip_network_address:
                ip_network_address = str(self.address_pool.ip_network[1])

            ip_network_prefixlen = str(self.address_pool.ip_network.prefixlen)
            dhcp_range_start = self.address_pool.ip_range_start('dhcp')
            dhcp_range_end = self.address_pool.ip_range_end('dhcp')

            for interface in self.interfaces:
                for address in interface.addresses:
                    ip_addr = netaddr.IPAddress(address.ip_address)
                    if ip_addr in self.address_pool.ip_network:
                        addresses.append(dict(
                            mac=str(interface.mac_address),
                            ip=str(address.ip_address),
                            name=interface.node.name
                        ))

        xml = LibvirtXMLBuilder.build_network_xml(
            network_name=self.network_name,
            bridge_name=bridge_name,
            addresses=addresses,
            forward=self.forward.mode,
            ip_network_address=ip_network_address,
            ip_network_prefixlen=ip_network_prefixlen,
            dhcp_range_start=dhcp_range_start,
            dhcp_range_end=dhcp_range_end,
            stp=self.driver.stp,
            has_pxe_server=self.has_pxe_server,
            has_dhcp_server=self.has_dhcp_server,
            tftp_root_dir=self.tftp_root_dir,
        )
        ret = self.driver.conn.networkDefineXML(xml)
        ret.setAutostart(True)
        self.uuid = ret.UUIDString()

        super(LibvirtL2NetworkDevice, self).define()
예제 #6
0
 def unblock(self):
     """Unblock all traffic in network"""
     filter_xml = LibvirtXMLBuilder.build_network_filter(
         name=self.network_name, uuid=self._nwfilter.UUIDString())
     self.driver.conn.nwfilterDefineXML(filter_xml)