@@ -196,6 +196,28 @@ def preprocess(test, params, env):
@param env: The environment (a dict-like object).
"""
error.context("preprocessing")
+
+ if params.get("bridge") == "private":
+ priv_brname = params.get("priv_brname", 'atbr0')
+ priv_subnet = params.get("priv_subnet", '192.168.58')
+ if priv_brname not in commands.getoutput("btctl show"):
+ logging.info("Setup private bridge: %s" % priv_brname)
+ commands.getoutput("brctl addbr %s" % priv_brname)
+ file("/proc/sys/net/ipv4/ip_forward", "w").write("1\n")
+ commands.getoutput("brctl stp %s on" % priv_brname)
+ commands.getoutput("brctl setfd %s 0" % priv_brname)
+ commands.getoutput("ifconfig %s %s.1 up" % (priv_brname,
+ priv_subnet))
+ commands.getoutput("iptables -t nat -A POSTROUTING -s %s.254/24 !"
+ " -d %s.254/24 -j MASQUERADE" % (priv_subnet, priv_subnet))
+ commands.getoutput("service dnsmasq stop")
+ commands.getoutput("dnsmasq --strict-order --bind-interfaces"
+ " --listen-address %s.1 --dhcp-range %s.1,%s.254"
+ " --pid-file=/tmp/dnsmasq.pid" %
+ (priv_subnet, priv_subnet, priv_subnet))
+ if priv_brname not in commands.getoutput("brctl show"):
+ raise error.TestError("Fail to setup private bridge.")
+
# Start tcpdump if it isn't already running
if "address_cache" not in env:
env["address_cache"] = {}
@@ -365,6 +387,18 @@ def postprocess(test, params, env):
int(params.get("post_command_timeout", "600")),
params.get("post_command_noncritical") == "yes")
+ if params.get("bridge") == "private":
+ priv_brname = params.get("priv_brname", 'atbr0')
+ priv_subnet = params.get("priv_subnet", '192.168.58')
+ if len(commands.getoutput("brctl show|grep %s" %
+ priv_brname).split()) < 4:
+ logging.info("Remove private bridge: %s" % priv_brname)
+ pid = file("/tmp/dnsmasq.pid").read()
+ os.kill(int(pid), 9)
+ commands.getoutput("ifconfig %s down" % priv_brname)
+ commands.getoutput("brctl delbr %s" % priv_brname)
+ commands.getoutput("iptables -t nat -D POSTROUTING -s %s.254/24 !"
+ " -d %s.254/24 -j MASQUERADE" % (priv_subnet, priv_subnet))
def postprocess_on_error(test, params, env):
"""
KVM users always use bridge network, there are also some limits in userspace network, and userspace network is not officially supported by some companys. Framework will clean configuration when private bridge is not used. We can replace user net with private bridge if this setup is stable and general enough. Configure parameters: bridge = private priv_brname = atbr0 priv_subnet = 192.168.58 nic_script = scripts/qemu-ifup-atbr0 Signed-off-by: Amos Kong <akong@redhat.com> --- 0 files changed, 0 insertions(+), 0 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html