[PATCH] KVM test: Remove custom bridge managing code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Since we already require some deps to run KVM autotest,
and since the majority of the potential KVM autotest
users do have libvirt installed and running, it makes
little sense to maintain custom code to manage an internal
bridge. Let's just require libvirt and use virbr0 as the
default kvm autotest virt bridge. It's functional, available
and allows to do everything we want.

CC: Cleber Rosa <cleber@xxxxxxxxxx>
CC: Alex Williamson <alex.williamson@xxxxxxxxxx>
Signed-off-by: Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx>
---
 client/tests/kvm/tests_base.cfg.sample |   11 +--
 client/virt/kvm_vm.py                  |    3 -
 client/virt/virt_env_process.py        |    8 --
 client/virt/virt_test_setup.py         |  186 --------------------------------
 4 files changed, 2 insertions(+), 206 deletions(-)

diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index acd9883..9e40d65 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -57,16 +57,9 @@ redirs = remote_shell
 guest_port_remote_shell = 22
 
 # NIC parameters
-#nic_mode = user
 nic_mode = tap
-bridge = private
-# You can set bridge to
-# be a specific bridge
-# name, such as 'virbr0'
-#bridge = virbr0
-# If you need more ports to be available for comm between host and guest,
-# please add them here
-priv_bridge_ports = 53 67
+# By default we use libvirt's bridge
+bridge = virbr0
 run_tcpdump = yes
 
 # Misc
diff --git a/client/virt/kvm_vm.py b/client/virt/kvm_vm.py
index a2f22b4..f7b8345 100644
--- a/client/virt/kvm_vm.py
+++ b/client/virt/kvm_vm.py
@@ -617,7 +617,6 @@ class VM(virt_vm.BaseVM):
         @raise TAPCreationError: If fail to create tap fd
         @raise BRAddIfError: If fail to add a tap to a bridge
         @raise TAPBringUpError: If fail to bring up a tap
-        @raise PrivateBridgeError: If fail to bring the private bridge
         """
         error.context("creating '%s'" % self.name)
         self.destroy(free_mac_addresses=False)
@@ -692,8 +691,6 @@ class VM(virt_vm.BaseVM):
                 if nic_params.get("nic_mode") == "tap":
                     ifname = self.get_ifname(vlan)
                     brname = nic_params.get("bridge")
-                    if brname == "private":
-                        brname = virt_test_setup.PrivateBridgeConfig().brname
                     tapfd = virt_utils.open_tap("/dev/net/tun", ifname)
                     virt_utils.add_to_bridge(ifname, brname)
                     virt_utils.bring_up_ifname(ifname)
diff --git a/client/virt/virt_env_process.py b/client/virt/virt_env_process.py
index 8fd5c21..8ef6497 100644
--- a/client/virt/virt_env_process.py
+++ b/client/virt/virt_env_process.py
@@ -205,10 +205,6 @@ def preprocess(test, params, env):
     """
     error.context("preprocessing")
 
-    if params.get("bridge") == "private":
-        brcfg = virt_test_setup.PrivateBridgeConfig(params)
-        brcfg.setup()
-
     # Start tcpdump if it isn't already running
     if "address_cache" not in env:
         env["address_cache"] = {}
@@ -375,10 +371,6 @@ def postprocess(test, params, env):
                         int(params.get("post_command_timeout", "600")),
                         params.get("post_command_noncritical") == "yes")
 
-    if params.get("bridge") == "private":
-        brcfg = virt_test_setup.PrivateBridgeConfig()
-        brcfg.cleanup()
-
 
 def postprocess_on_error(test, params, env):
     """
diff --git a/client/virt/virt_test_setup.py b/client/virt/virt_test_setup.py
index f2ff38b..334c3cf 100644
--- a/client/virt/virt_test_setup.py
+++ b/client/virt/virt_test_setup.py
@@ -289,189 +289,3 @@ class HugePageConfig(object):
             return
         utils.system("echo 0 > %s" % self.kernel_hp_file)
         logging.debug("Hugepage memory successfuly dealocated")
-
-
-class PrivateBridgeError(Exception):
-    def __init__(self, brname):
-        self.brname = brname
-
-    def __str__(self):
-        return "Bridge %s not available after setup" % self.brname
-
-
-class PrivateBridgeConfig(object):
-    __shared_state = {}
-    def __init__(self, params=None):
-        self.__dict__ = self.__shared_state
-        if params is not None:
-            self.brname = params.get("priv_brname", 'atbr0')
-            self.subnet = params.get("priv_subnet", '192.168.58')
-            self.ip_version = params.get("bridge_ip_version", "ipv4")
-            self.dhcp_server_pid = None
-            ports = params.get("priv_bridge_ports", '53 67').split()
-            s_port = params.get("guest_port_remote_shell", "10022")
-            if s_port not in ports:
-                ports.append(s_port)
-            ft_port = params.get("guest_port_file_transfer", "10023")
-            if ft_port not in ports:
-                ports.append(ft_port)
-            u_port = params.get("guest_port_unattended_install", "13323")
-            if u_port not in ports:
-                ports.append(u_port)
-            self.iptables_rules = self._assemble_iptables_rules(ports)
-
-
-    def _assemble_iptables_rules(self, port_list):
-        rules = []
-        index = 0
-        for port in port_list:
-            index += 1
-            rules.append("INPUT %s -i %s -p tcp -m tcp --dport %s -j ACCEPT" %
-                         (index, self.brname, port))
-            index += 1
-            rules.append("INPUT %s -i %s -p udp -m udp --dport %s -j ACCEPT" %
-                         (index, self.brname, port))
-        rules.append("FORWARD 1 -m physdev --physdev-is-bridged -j ACCEPT")
-        rules.append("FORWARD 2 -d %s.0/24 -o %s -m state "
-                     "--state RELATED,ESTABLISHED -j ACCEPT" %
-                     (self.subnet, self.brname))
-        rules.append("FORWARD 3 -s %s.0/24 -i %s -j ACCEPT" %
-                     (self.subnet, self.brname))
-        rules.append("FORWARD 4 -i %s -o %s -j ACCEPT" %
-                     (self.brname, self.brname))
-        return rules
-
-
-    def _add_bridge(self):
-        utils.system("brctl addbr %s" % self.brname)
-        ip_fwd_path = "/proc/sys/net/%s/ip_forward" % self.ip_version
-        ip_fwd = open(ip_fwd_path, "w")
-        ip_fwd.write("1\n")
-        utils.system("brctl stp %s on" % self.brname)
-        utils.system("brctl setfd %s 0" % self.brname)
-
-
-    def _bring_bridge_up(self):
-        utils.system("ifconfig %s %s.1 up" % (self.brname, self.subnet))
-
-
-    def _iptables_add(self, cmd):
-        return utils.system("iptables -I %s" % cmd)
-
-
-    def _iptables_del(self, cmd):
-        return utils.system("iptables -D %s" % cmd)
-
-
-    def _enable_nat(self):
-        for rule in self.iptables_rules:
-            self._iptables_add(rule)
-
-
-    def _start_dhcp_server(self):
-        utils.run("service dnsmasq stop")
-        utils.run("dnsmasq --strict-order --bind-interfaces "
-                  "--listen-address %s.1 --dhcp-range %s.2,%s.254 "
-                  "--dhcp-lease-max=253 "
-                  "--dhcp-no-override "
-                  "--pid-file=/tmp/dnsmasq.pid "
-                  "--log-facility=/tmp/dnsmasq.log" %
-                  (self.subnet, self.subnet, self.subnet))
-        self.dhcp_server_pid = None
-        try:
-            self.dhcp_server_pid = int(open('/tmp/dnsmasq.pid', 'r').read())
-        except ValueError:
-            raise PrivateBridgeError(self.brname)
-        logging.debug("Started internal DHCP server with PID %s",
-                      self.dhcp_server_pid)
-
-
-    def _verify_bridge(self):
-        brctl_output = utils.system_output("brctl show")
-        if self.brname not in brctl_output:
-            raise PrivateBridgeError(self.brname)
-
-
-    def setup(self):
-        brctl_output = utils.system_output("brctl show")
-        if self.brname not in brctl_output:
-            logging.debug("Configuring KVM test private bridge %s", self.brname)
-            try:
-                self._add_bridge()
-            except:
-                self._remove_bridge()
-                raise
-            try:
-                self._bring_bridge_up()
-            except:
-                self._bring_bridge_down()
-                self._remove_bridge()
-                raise
-            try:
-                self._enable_nat()
-            except:
-                self._disable_nat()
-                self._bring_bridge_down()
-                self._remove_bridge()
-                raise
-            try:
-                self._start_dhcp_server()
-            except:
-                self._stop_dhcp_server()
-                self._disable_nat()
-                self._bring_bridge_down()
-                self._remove_bridge()
-                raise
-            self._verify_bridge()
-
-
-    def _stop_dhcp_server(self):
-        if self.dhcp_server_pid is not None:
-            try:
-                os.kill(self.dhcp_server_pid, 15)
-            except OSError:
-                pass
-        else:
-            try:
-                dhcp_server_pid = int(open('/tmp/dnsmasq.pid', 'r').read())
-            except ValueError:
-                return
-            try:
-                os.kill(dhcp_server_pid, 15)
-            except OSError:
-                pass
-
-
-    def _bring_bridge_down(self):
-        utils.system("ifconfig %s down" % self.brname, ignore_status=True)
-
-
-    def _disable_nat(self):
-        for rule in self.iptables_rules:
-            split_list = rule.split(' ')
-            # We need to remove numbering here
-            split_list.pop(1)
-            rule = " ".join(split_list)
-            self._iptables_del(rule)
-
-
-    def _remove_bridge(self):
-        utils.system("brctl delbr %s" % self.brname, ignore_status=True)
-
-
-    def cleanup(self):
-        brctl_output = utils.system_output("brctl show")
-        cleanup = False
-        for line in brctl_output.split("\n"):
-            if line.startswith(self.brname):
-                # len == 4 means there is a TAP using the bridge
-                # so don't try to clean it up
-                if len(line.split()) < 4:
-                    cleanup = True
-                    break
-        if cleanup:
-            logging.debug("Cleaning up KVM test private bridge %s", self.brname)
-            self._stop_dhcp_server()
-            self._disable_nat()
-            self._bring_bridge_down()
-            self._remove_bridge()
-- 
1.7.6

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux