summaryrefslogtreecommitdiffstats
path: root/docs/openvswitch.txt
blob: 4410d27e4cd6dabc80a168e35f004ed3550c606b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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).