blob: 4410d27e4cd6dabc80a168e35f004ed3550c606b [file] [log] [blame]
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).