On Wed, 2010-02-24 at 21:14 -0500, Shuxi Shang wrote: > Hello, Lucas, I think there are two advantages of such a private bridge: > 1). With private bridge, not paying attention to the conflict of guest's mac address. > 2). segregating from public network which host locates. All right, please re-send it to the mailing list (I can't find your patch on patchwork). Also, we'll spend some time considering your approach, so the patch will stay on the queue for some time. Thanks! > > ----- "Lucas Meneghel Rodrigues" <lmr@xxxxxxxxxx> 写道: > > > On Tue, 2010-02-23 at 16:56 +0800, sshang wrote: > > > Add private bridge to use for communication between host and guest. > > > Config of parameter: > > > bridge = private > > > private_bridge_name = private(default) > > > private_bridge_addr = 192.168.0.1(default) > > > private_bridge_mask = 255.255.255.0(default) > > > pre_command = scripts/private_bridge_setup.py > > > > Hi, I've checked your patch, seems fair enough. But can you elaborate > > more on the advantages of having such a private bridge for > > communication > > between hosts and guests? We have mechanisms of doing so in both tap > > and > > user mode networking... > > > > > Signed-off-by: sshang <sshang@xxxxxxxxxx> > > > --- > > > client/tests/kvm/scripts/private_bridge_setup.py | 90 > > ++++++++++++++++++++++ > > > 1 files changed, 90 insertions(+), 0 deletions(-) > > > create mode 100755 > > client/tests/kvm/scripts/private_bridge_setup.py > > > > > > diff --git a/client/tests/kvm/scripts/private_bridge_setup.py > > b/client/tests/kvm/scripts/private_bridge_setup.py > > > new file mode 100755 > > > index 0000000..fe1b653 > > > --- /dev/null > > > +++ b/client/tests/kvm/scripts/private_bridge_setup.py > > > @@ -0,0 +1,90 @@ > > > +#!/usr/bin/python > > > +import os, sys, commands > > > + > > > +class SetupError(Exception): > > > + """ > > > + Simple wrapper for the builtin Exception class. > > > + """ > > > + pass > > > + > > > + > > > +class SetupPrivateBridge(object): > > > + """ > > > + Setup private bridge and running dnsmasq for communication > > > + between host and guest. > > > + """ > > > + def __init__(self): > > > + script_dir = > > os.path.dirname(sys.modules[__name__].__file__) > > > + kvm_test_dir = os.path.abspath(os.path.join(script_dir, > > "..")) > > > + self.private_bridge_name = os.environ.get(\ > > > + > > 'KVM_TEST_private_bridge_name','private') > > > + self.private_bridge_addr = os.environ.get(\ > > > + > > 'KVM_TEST_private_bridge_addr','192.168.0.1') > > > + self.private_bridge_mask = os.environ.get(\ > > > + > > 'KVM_TEST_private_bridge_mask','255.255.255.0') > > > + self.dhcp_boot = os.environ.get(\ > > > + 'KVM_TEST_dhcp_boot','/pxelinux.0') > > > + self.tftp_root = os.environ.get('KVM_TEST_tftp') > > > + if self.tftp_root: > > > + self.tftp_root = os.path.join(kvm_test_dir, > > self.tftp_root) > > > + self.qemu_ifup_file = os.path.join(script_dir, > > "qemu-ifup-private") > > > + > > > + > > > + def setup_private_bridge(self): > > > + """ > > > + Setup private bridge. > > > + """ > > > + > > > + text = """#!/bin/sh > > > +switch=%s > > > +/sbin/ifconfig $1 0.0.0.0 up > > > +/usr/sbin/brctl addif ${switch} $1 > > > +""" > > > + text = text % (self.private_bridge_name) > > > + f = open(self.qemu_ifup_file,"w") > > > + f.write(text) > > > + f.close() > > > + commands.getoutput('chmod a+x %s' % self.qemu_ifup_file) > > > + > > > + check_br_cmd = "brctl show | grep %s" % > > self.private_bridge_name > > > + s,o = commands.getstatusoutput(check_br_cmd) > > > + if s: > > > + add_br_cmd = "brctl addbr %s" % > > self.private_bridge_name > > > + s,o = commands.getstatusoutput(add_br_cmd) > > > + if s: > > > + raise SetupError('Add bridge error: %s' % o) > > > + else: > > > + ifdown_cmd = "ifconfig %s down" % > > self.private_bridge_name > > > + s,o = commands.getstatusoutput(ifdown_cmd) > > > + if s: > > > + raise SetupError('Down bridge error: %s' % o) > > > + > > > + ifconfig_cmd = "ifconfig %s %s netmask %s up" % \ > > > + > > (self.private_bridge_name,self.private_bridge_addr,\ > > > + self.private_bridge_mask) > > > + s,o = commands.getstatusoutput(ifconfig_cmd) > > > + if s: > > > + raise SetupError('Config bridge error: %s' % o) > > > + > > > + commands.getoutput("pkill dnsmasq") > > > + > > > + addr_list = self.private_bridge_addr.split('.') > > > + addr_list[3] = str(int(addr_list[3]) + 1) > > > + dhcp_addr_begin = '.'.join(addr_list) > > > + addr_list[3] = '254' > > > + dhcp_addr_end = '.'.join(addr_list) > > > + > > > + dnsmasq_argument = " -u root --listen-address %s > > --dhcp-range %s,%s" %\ > > > + > > (self.private_bridge_addr,dhcp_addr_begin,dhcp_addr_end) > > > + if self.tftp_root: > > > + dnsmasq_argument += " --dhcp-boot %s --enable-tftp > > --tftp-root %s"\ > > > + % (self.dhcp_boot,self.tftp_root) > > > + dnsmasq_cmd = "dnsmasq" + dnsmasq_argument > > > + s,o = commands.getstatusoutput(dnsmasq_cmd) > > > + if s: > > > + raise SetupError("Running dnsmasq fail %s" % o) > > > + print "Private bridge dnsmasq setup finished successfuly" > > > + > > > +if __name__ == "__main__": > > > + setup = SetupPrivateBridge() > > > + setup.setup_private_bridge() -- 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