Simple setup for connecting openvswitch to qemu/kvm =================================================== This example brings up openvswitch using a private network. Preliminary notes ================= 1. Make sure to build kernel support for openvswitch as a module. The openvswitch init scripts expect to load a module and upon success continue to setup the switch. If openvswitch is compiled statically, the init scripts not load the ovs-vswitchd daemon and none of the configured bridges will show up in the interfaces table (ifconfig). You can get around this limiation by running the following by hand: # ovs-vswitchd --pidfile --detach 2. Verify that ovs-vswitchd is running before proceeding: # /etc/init.d/openvswitch-switch status ovsdb-server is running with pid 1867 ovs-vswitchd is running with pid 1877 3. A kernel and rootfs is required for qemu bring up. Qemu Setup ========== The host requires a /etc/qemu-ifup script to setup the bridging and tap devices. Qemu will invoke this qemu-ifup script at startup. Here is an example script: $ cat /etc/qemu-fup #!/bin/sh # the tap is dynamically assigned and passed into this script # as a parameter TAP=$1 # Note: if booting over NFS, once the $ETH0 device is added to the bridge, # your host will be unusable. In that case, setup networking # init scripts appropriately and change the following to work # with it. ETH0="eth1" NETMASK=255.255.255.0 IP=192.168.1.1 GATEWAY= SWITCH=ovsbr0 if [ -n "$TAP" ];then ifconfig $TAP up ifconfig $SWITCH down &>/dev/null ovs-vsctl del-br $SWITCH ovs-vsctl add-br $SWITCH ifconfig $ETH0 0.0.0.0 ifconfig $SWITCH $IP up netmask $NETMASK #-- external access not required for this test. #route add default gw $GATEWAY ovs-vsctl add-port $SWITCH $ETH0 ovs-vsctl add-port $SWITCH $TAP exit 0 else echo "$0: No tap device" exit 1 fi Start Qemu ========== This example will bring up qemu with a tap network interface. Note: this command must be run as root due to the networking setup. $ qemu-system-x86_64 -nographic -k en-us -m 1024 \ -net nic,macaddr=1a:46:0b:ca:bc:7a,model=virtio \ -net tap -enable-kvm\ -kernel /opt/dpdk-guest-kernel \ -append 'root=/dev/vda ro console=ttyS0' \ -drive file=/opt/intel-xeon-core-ovp-kvm-preempt-rt-dist.ext3,cache=none,if=virtio Once the guest OS is up and running, configure the quest network interface: $ ifconfig eth0 192.168.1.10 Ping the bridge: $ ping 192.168.1.1 From the host, view the bridged network: $ ovs-vsctl show c1212b96-ef49-4a8e-b598-09b05b854dd0 Bridge "ovsbr0" Port "tap0" Interface "tap0" Port "eth1" Interface "eth1" Port "ovsbr0" Interface "ovsbr0" type: internal At this point, openvswitch is up and running. If you want external network access, you need to set a GATEWAY in the qemu-ifup script and make sure the external device is part of the bridge. Note: Proper setup will require a /etc/qemu-ifdown script to tear down the bridge and interfaces. (not provided here).