Jorge Somavilla
2011-Apr-13 12:29 UTC
[libvirt-users] point-to-point connection between vm and host
Hi! hopefully someone can give me a hint with this: I need to create a vm with a point-to-point connection to the host using a /30 subnet. Right now i have this in the vm's xml for libvirt: <interface type="network" name="eth0" onboot="yes"> <source network="default"/> <mac address="02:fd:00:00:01:00"/> </interface> Which brings up an interface in the vm that is configured later by a a daemon, getting to this: vnx at r2:~$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 02:fd:00:00:01:00 inet addr:10.250.0.2 Bcast:10.250.0.3 Mask:255.255.255.252 While in the host the other interface is created: root at tau:/home/jorge/workspace/vnx# ifconfig r2-e0 r2-e0 Link encap:Ethernet HWaddr 0a:81:b6:3c:24:15 inet addr:10.250.0.1 Bcast:10.250.0.3 Mask:255.255.255.252 However there is no connectivity between them, probably because of some mistake in the <interface> tag, perhaps a wrong 'type' attribute, but i haven't found out yet. I wouldn't want to create a bridge and connect both interfaces (vm's and host's) to the bridge, but to have this ptp, if possible. How would i go about doing that? thanks! Jorge
paul.worner at thomsonreuters.com
2011-Apr-13 13:03 UTC
[libvirt-users] point-to-point connection between vm and host
Hi Jorge, I am doing it by creating a bridge per vm. I am not sure this is the best approach. Hopefully, someone has a cleaner approach. I did need to add forward mode "route", since the vm's network is independent of the host's network(s) and I am routing. <network> <name>netdom4</name> <forward mode="route"/> <bridge name="virbr%d" stp="off" delay="0"/> <ip address="10.0.0.1" netmask="255.255.255.252"> </ip> </network> If you are not routing, you can set this mode to "nat" so the vm will get sourced from host's address. I haven't tried this, but I would assume the iptables nat rules are created automatically. <forward mode="nat"/> Hope this helps, Paul -----Original Message----- From: libvirt-users-bounces at redhat.com [mailto:libvirt-users-bounces at redhat.com] On Behalf Of Jorge Somavilla Sent: Wednesday, April 13, 2011 7:29 AM To: libvirt-users at redhat.com Subject: [libvirt-users] point-to-point connection between vm and host Hi! hopefully someone can give me a hint with this: I need to create a vm with a point-to-point connection to the host using a /30 subnet. Right now i have this in the vm's xml for libvirt: <interface type="network" name="eth0" onboot="yes"> <source network="default"/> <mac address="02:fd:00:00:01:00"/> </interface> Which brings up an interface in the vm that is configured later by a a daemon, getting to this: vnx at r2:~$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 02:fd:00:00:01:00 inet addr:10.250.0.2 Bcast:10.250.0.3 Mask:255.255.255.252 While in the host the other interface is created: root at tau:/home/jorge/workspace/vnx# ifconfig r2-e0 r2-e0 Link encap:Ethernet HWaddr 0a:81:b6:3c:24:15 inet addr:10.250.0.1 Bcast:10.250.0.3 Mask:255.255.255.252 However there is no connectivity between them, probably because of some mistake in the <interface> tag, perhaps a wrong 'type' attribute, but i haven't found out yet. I wouldn't want to create a bridge and connect both interfaces (vm's and host's) to the bridge, but to have this ptp, if possible. How would i go about doing that? thanks! Jorge _______________________________________________ libvirt-users mailing list libvirt-users at redhat.com https://www.redhat.com/mailman/listinfo/libvirt-users
Jorge Somavilla
2011-May-12 13:30 UTC
[libvirt-users] point-to-point connection between vm and host
Hello, we have been looking for other options to do this, and found that we can add qemu lines to the vm's xml for libvirt. What we want libvirt to do can be done with a qemu line like this: qemu -boot c -net nic,vlan=0,macaddr=02:fd:00:04:01:00,name=eth0 -net tap,vlan=0,ifname=ubuntu-e0,script=no ubuntu.img Which means that inside the host we connect a new tap device to the interface ubuntu-e0, and then connect the tap device of the host with the guest's nic, eth0. This provides connectivity between host and guest. The way to do this with libvirt seems with the tag <qemu:commandline>, which allows us to append some qemu lines. So now the definition file of the vm for libvirt looks like this: </domain> ... ??? <interface type="network" name="eth0" onboot="yes"> ????? <source network="default"/> ????? <mac address="02:fd:00:04:01:00"/> ??? </interface> ... ? <qemu:commandline> ??? <qemu:arg value="-net"/> ??? <qemu:arg value="nic,macaddr=02:fd:00:04:01:00"/> ??? <qemu:arg value="-net"/> ??? <qemu:arg value="tap,ifname=ubuntu-e0,script=no"/> ? </qemu:commandline> </domain> With this, the guest shows the eth0 interface correctly configured. However there is no connectivity with the host. If we look at the log file, we find that some of the qemu options of the xml are missing, like the name oh the host's interface to be associated with the tap device ("ifname=ubuntu-e0"): # tail -f /var/log/libvirt/qemu/ubuntu.log LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin QEMU_AUDIO_DRV=none /usr/bin/kvm -S -M pc-0.12 -cpu qemu32 -enable-kvm -m 256 -smp 1 -name ubuntu -uuid fb6e6954-53c6-7982-7b55-04edd406b871 -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/ubuntu.monitor,server,nowait -monitor chardev:monitor -boot cd -drive file=/root/.vnx/scenarios/simple_ubuntu/vms/ubuntu/fs/root_cow_fs,if=ide,index=0,boot=on,format=qcow2 -drive file=/root/.vnx/scenarios/simple_ubuntu/vms/ubuntu/fs/opt_fs.iso,if=ide,media=cdrom,index=1 -net nic,macaddr=02:fd:00:04:01:00,vlan=0,name=nic.0 -net tap,fd=16,vlan=0,name=tap.0 -net nic,macaddr=02:fd:00:04:01:01,vlan=1,name=nic.1 -net tap,fd=17,vlan=1,name=tap.1 -chardev pty,id=serial0 -serial chardev:serial0 -chardev socket,id=serial1,path=/root/.vnx/scenarios/simple_ubuntu/vms/ubuntu/ubuntu_socket,server,nowait -serial chardev:serial1 -parallel none -usb -vnc :1 -vga cirrus char device redirected to /dev/pts/8 What am i doing wrong? How can i specify the name of the host's interface? regards, Jorge On Wed, Apr 13, 2011 at 14:29, Jorge Somavilla <somavilla at dit.upm.es> wrote:> > Hi! hopefully someone can give me a hint with this: > > > I need to create a vm with a point-to-point connection to the host > using a /30 subnet. Right now i have this in the vm's xml for libvirt: > > <interface type="network" name="eth0" onboot="yes"> > ? <source network="default"/> > ? <mac address="02:fd:00:00:01:00"/> > </interface> > > > Which brings up an interface in the vm that is configured later by a a > daemon, getting to this: > > vnx at r2:~$ ifconfig eth0 > eth0 ? ? Link encap:Ethernet ?HWaddr 02:fd:00:00:01:00 > ? ? ? ? ?inet addr:10.250.0.2 ?Bcast:10.250.0.3 ?Mask:255.255.255.252 > > > While in the host the other interface is created: > > root at tau:/home/jorge/workspace/vnx# ifconfig r2-e0 > r2-e0 ? ? Link encap:Ethernet ?HWaddr 0a:81:b6:3c:24:15 > ? ? ? ? ?inet addr:10.250.0.1 ?Bcast:10.250.0.3 ?Mask:255.255.255.252 > > > However there is no connectivity between them, probably because of > some mistake in the <interface> tag, perhaps a wrong 'type' attribute, > but i haven't found out yet. I wouldn't want to create a bridge and > connect both interfaces (vm's and host's) to the bridge, but to have > this ptp, if possible. How would i go about doing that? > > thanks! > Jorge