|  | 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). |