Skip to content

Instantly share code, notes, and snippets.

@krsna1729
Created October 8, 2018 16:33
Show Gist options
  • Save krsna1729/f2907e0575a7612be1be089ea9a85468 to your computer and use it in GitHub Desktop.
Save krsna1729/f2907e0575a7612be1be089ea9a85468 to your computer and use it in GitHub Desktop.
#################################################
# Install
# sudo -E apt-get update && sudo -E apt-get install -y git dh-autoreconf linux-image-extra-$(uname -r)
sudo -E dnf -y install make git python python-devel autoconf automake libtool kernel-devel-$(uname -r) kernel-modules-$(uname -r) psmisc pciutils
pip install --user six

export MY_DIR=$(pwd)
export DPDK_TAG=v16.11
export OVS_TAG=branch-2.7

git clone http://dpdk.org/git/dpdk -b $DPDK_TAG $MY_DIR/dpdk
cd $MY_DIR/dpdk
export RTE_SDK=$(pwd)
export RTE_TARGET=x86_64-native-linuxapp-gcc
make -j4 install T=$RTE_TARGET

git clone https://github.com/openvswitch/ovs -b $OVS_TAG $MY_DIR/ovs
cd $MY_DIR/ovs
./boot.sh
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-dpdk=$RTE_SDK/$RTE_TARGET --with-debug
sudo -E make install -j4

#################################################
# System setup

sudo -E sysctl -w vm.nr_hugepages=2048

sudo -E umount /dev/hugepages
sudo -E mkdir -p /dev/hugepages
sudo -E mount -t hugetlbfs -o pagesize=2048k none /dev/hugepages

$RTE_SDK/tools/dpdk-devbind.py -s
ip addr show eth2
sudo -E modprobe uio
sudo -E insmod $RTE_SDK/$RTE_TARGET/kmod/igb_uio.ko
sudo -E $RTE_SDK/tools/dpdk-devbind.py -b igb_uio eth2

#################################################
# Clean OVS setup

sudo -E killall ovsdb-server ovs-vswitchd
sudo -E rm -rf /var/run/openvswitch
sudo -E rm -rf /etc/openvswitch
sudo -E mkdir -p /var/run/openvswitch
sudo -E mkdir -p /etc/openvswitch

export DB_SOCK=/var/run/openvswitch/db.sock
sudo -E ovsdb-tool create /etc/openvswitch/conf.db /usr/share/openvswitch/vswitch.ovsschema
sudo -E ovsdb-server --remote=punix:$DB_SOCK --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach

sudo -E ovs-vsctl --no-wait init
sudo -E ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-lcore-mask=0x8
sudo -E ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-socket-mem=1024
sudo -E ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true

sudo -E ovs-vswitchd unix:$DB_SOCK --pidfile --detach --log-file=/var/log/openvswitch/ovs-vswitchd.log

#################################################
# Compute-1 specific

sudo -E ovs-vsctl add-br br-int -- set bridge br-int datapath_type=netdev other_config:hwaddr=52:54:00:d9:19:22
sudo -E ovs-vsctl add-port br-int vxlan -- set interface vxlan type=vxlan options:remote_ip=flow options:key=flow
sudo -E ovs-vsctl add-port br-int fabric -- set interface fabric type=dpdk options:dpdk-devargs=0000:00:07.0
sudo -E ovs-vsctl add-port br-int vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser
# sudo -E ovs-vsctl add-port br-int fabric -- set interface fabric type=dpdk options:dpdk-devargs=net_bonding0,mode=1,slave=0000:05:00.0,slave=0000:05:00.1,primary=0000:05:00.0
sudo -E ip addr add 192.168.22.111/24 dev br-int
sudo -E ip link set dev br-int up
sudo -E ovs-vsctl show
sudo -E ovs-ofctl show br-int
sudo -E ovs-ofctl del-flows br-int

sudo -E ovs-ofctl del-flows br-int
sudo -E ovs-ofctl add-flow br-int "ip,in_port=2,nw_dst=192.168.22.111 actions=LOCAL"
sudo -E ovs-ofctl add-flow br-int "arp,in_port=2,arp_tpa=192.168.22.111 actions=LOCAL"
sudo -E ovs-ofctl add-flow br-int "in_port=LOCAL actions=output:2"
sudo -E ovs-ofctl add-flow br-int "in_port=3 actions=set_field:0x448->tun_id,set_field:192.168.22.112->tun_dst,output:1"
sudo -E ovs-ofctl add-flow br-int "tun_id=0x448 actions=output:3"
watch -n1 -c 'sudo -E ovs-ofctl dump-flows br-int'

#################################################
# Compute-2 specific

sudo -E ovs-vsctl add-br br-int -- set bridge br-int datapath_type=netdev other_config:hwaddr=52:54:00:51:b4:09
sudo -E ovs-vsctl add-port br-int vxlan -- set interface vxlan type=vxlan options:remote_ip=flow options:key=flow
sudo -E ovs-vsctl add-port br-int fabric -- set interface fabric type=dpdk options:dpdk-devargs=0000:00:07.0
sudo -E ovs-vsctl add-port br-int vhost-user1 -- set Interface vhost-user1 type=dpdkvhostuser

sudo -E ip addr add 192.168.22.112/24 dev br-int
sudo -E ip link set dev br-int up
sudo -E ovs-vsctl show
sudo -E ovs-ofctl show br-int
sudo -E ovs-ofctl del-flows br-int

sudo -E ovs-ofctl del-flows br-int
sudo -E ovs-ofctl add-flow br-int "ip,in_port=2,nw_dst=192.168.22.112 actions=LOCAL"
sudo -E ovs-ofctl add-flow br-int "arp,in_port=2,arp_tpa=192.168.22.112 actions=LOCAL"
sudo -E ovs-ofctl add-flow br-int "in_port=LOCAL actions=output:2"
sudo -E ovs-ofctl add-flow br-int "in_port=3 actions=set_field:0x448->tun_id,set_field:192.168.22.111->tun_dst,output:1"
sudo -E ovs-ofctl add-flow br-int "tun_id=0x448 actions=output:3"
watch -n1 -c 'sudo -E ovs-ofctl dump-flows br-int'

#################################################
# QEMU 

sudo qemu-system-x86_64 -m 1024M -vga none -nographic -enable-kvm -cpu host \
-chardev socket,id=char0,path=/var/run/openvswitch/vhost-user1 \
-netdev type=vhost-user,id=mynet0,chardev=char0,vhostforce \
-device virtio-net-pci,netdev=mynet0,mac=52:54:00:02:d9:00 \
-object memory-backend-file,id=mem,size=1024M,mem-path=/dev/hugepages,prealloc=on,share=on \
-numa node,memdev=mem vm.qcow2
 

#################################################
# Compute-1 simultaneous VXLAN VLAN test

# Edge VM to Core VM over VxLAN
sudo -E ovs-ofctl add-flow br-int "in_port=3,dl_dst=52:54:00:02:d9:02 actions=set_field:0x448->tun_id,set_field:192.168.22.112->tun_dst,output:1"
# Edge VM to Access device VLAN tagged
sudo -E ovs-ofctl add-flow br-int "in_port=3,dl_dst=52:54:00:1d:d5:cd actions=mod_vlan_vid:500,output:2"
# Core VM to Edge VM over VXLAN 
sudo -E ovs-ofctl add-flow br-int "tun_id=0x448 actions=output:3"
# Access device VLAN tagged to Edge VM
sudo -E ovs-ofctl add-flow br-int "dl_vlan=500 actions=strip_vlan,output:3"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment