diff options
Diffstat (limited to 'nfvbenchvm/dib/elements/nfvbenchvm/static')
6 files changed, 142 insertions, 0 deletions
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg new file mode 100644 index 0000000..7d46ed7 --- /dev/null +++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg @@ -0,0 +1,2 @@ +network: {config: disabled} + diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local new file mode 100644 index 0000000..114dd54 --- /dev/null +++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local @@ -0,0 +1,86 @@ +#!/bin/bash + +touch /var/lock/subsys/local + +# Waiting for cloud-init to generate $TESTPMD_CONF, retry 60 seconds +NFVBENCH_CONF=/etc/nfvbenchvm.conf +retry=30 +until [ $retry -eq 0 ]; do + if [ -f $NFVBENCH_CONF ]; then break; fi + retry=$[$retry-1] + sleep 2 +done +if [ ! -f $NFVBENCH_CONF ]; then + exit 0 +fi + +# Parse and obtain all configurations +echo "Generating configurations for forwarder..." +eval $(cat $NFVBENCH_CONF) +touch /nfvbench_configured.flag +NICS=`lspci -D | grep Ethernet | cut -d' ' -f1 | xargs` +PCI_ADDRESS_1=`echo $NICS | awk '{ print $1 }'` +PCI_ADDRESS_2=`echo $NICS | awk '{ print $2 }'` +CPU_CORES=`grep -c ^processor /proc/cpuinfo` +CPU_MASKS=0x`echo "obase=16; 2 ^ $CPU_CORES - 1" | bc` +WORKER_CORES=`expr $CPU_CORES - 1` + +# CPU isolation optimizations +echo 1 > /sys/bus/workqueue/devices/writeback/cpumask +echo 1 > /sys/devices/virtual/workqueue/cpumask +echo 1 > /proc/irq/default_smp_affinity +for irq in `ls /proc/irq/`; do + echo 1 > /proc/irq/$irq/smp_affinity +done +tuna -c $(seq -s, 1 1 $WORKER_CORES) --isolate + +# Configure the forwarder +if [ "$FORWARDER" == "testpmd" ]; then + echo "Configuring testpmd..." + if [ -z "`lsmod | grep igb_uio`" ]; then + modprobe uio + insmod /dpdk/igb_uio.ko + fi + # Binding ports to DPDK + /dpdk/dpdk-devbind.py -b igb_uio $PCI_ADDRESS_1 + /dpdk/dpdk-devbind.py -b igb_uio $PCI_ADDRESS_2 + screen -dmSL testpmd /dpdk/testpmd \ + -c $CPU_MASKS \ + -n 4 \ + -- \ + --burst=32 \ + --txd=256 \ + --rxd=1024 \ + --txqflags=0xf00 \ + --disable-hw-vlan \ + --eth-peer=0,$TG_MAC1 \ + --eth-peer=1,$TG_MAC2 \ + --forward-mode=mac \ + --nb-cores=$WORKER_CORES\ + --max-pkt-len 9000 +else + echo "Configuring vpp..." + cp /vpp/startup.conf /etc/vpp/startup.conf + cp /vpp/vm.conf /etc/vpp/vm.conf + + sed -i "s/{{PCI_ADDRESS_1}}/$PCI_ADDRESS_1/g" /etc/vpp/startup.conf + sed -i "s/{{PCI_ADDRESS_2}}/$PCI_ADDRESS_2/g" /etc/vpp/startup.conf + sed -i "s/{{WORKER_CORES}}/$WORKER_CORES/g" /etc/vpp/startup.conf + service vpp start + + INTFS=`vppctl show int | grep Ethernet | xargs` + INTF_1=`echo $INTFS | awk '{ print $1 }'` + INTF_2=`echo $INTFS | awk '{ print $4 }'` + sed -i "s/{{INTF_1}}/${INTF_1//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{INTF_2}}/${INTF_2//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{VNF_GATEWAY1_CIDR}}/${VNF_GATEWAY1_CIDR//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{VNF_GATEWAY2_CIDR}}/${VNF_GATEWAY2_CIDR//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_MAC1}}/${TG_MAC1}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_MAC2}}/${TG_MAC2}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_NET1}}/${TG_NET1//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_NET2}}/${TG_NET2//\//\/}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_GATEWAY1_IP}}/${TG_GATEWAY1_IP}/g" /etc/vpp/vm.conf + sed -i "s/{{TG_GATEWAY2_IP}}/${TG_GATEWAY2_IP}/g" /etc/vpp/vm.conf + + service vpp restart +fi diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/sysconfig/network-scripts/ifcfg-eth0 b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/sysconfig/network-scripts/ifcfg-eth0 new file mode 100644 index 0000000..c1ed6a7 --- /dev/null +++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/sysconfig/network-scripts/ifcfg-eth0 @@ -0,0 +1,8 @@ +DEVICE="eth0" +BOOTPROTO="dhcp" +ONBOOT="no" +TYPE="Ethernet" +USERCTL="yes" +PEERDNS="yes" +IPV6INIT="no" +PERSISTENT_DHCLIENT="0" diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/sysconfig/network-scripts/ifcfg-eth1 b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/sysconfig/network-scripts/ifcfg-eth1 new file mode 100644 index 0000000..c5cd837 --- /dev/null +++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/sysconfig/network-scripts/ifcfg-eth1 @@ -0,0 +1,8 @@ +DEVICE="eth1" +BOOTPROTO="dhcp" +ONBOOT="no" +TYPE="Ethernet" +USERCTL="yes" +PEERDNS="yes" +IPV6INIT="no" +PERSISTENT_DHCLIENT="0" diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/vpp/startup.conf b/nfvbenchvm/dib/elements/nfvbenchvm/static/vpp/startup.conf new file mode 100644 index 0000000..811eee1 --- /dev/null +++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/vpp/startup.conf @@ -0,0 +1,30 @@ +unix { + nodaemon + log /tmp/vpp.log + full-coredump + startup-config /etc/vpp/vm.conf + cli-listen localhost:5002 +} + +api-trace { + on +} + +dpdk { + dev default { + num-rx-desc 1024 + num-tx-desc 256 + } + socket-mem 1024 + dev {{PCI_ADDRESS_1}} + dev {{PCI_ADDRESS_2}} +} + +api-segment { + gid vpp +} + +cpu { + main-core 0 + workers {{WORKER_CORES}} +} diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/vpp/vm.conf b/nfvbenchvm/dib/elements/nfvbenchvm/static/vpp/vm.conf new file mode 100644 index 0000000..f52a045 --- /dev/null +++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/vpp/vm.conf @@ -0,0 +1,8 @@ +set int state {{INTF_1}} up +set int state {{INTF_2}} up +set interface ip address {{INTF_1}} {{VNF_GATEWAY1_CIDR}} +set interface ip address {{INTF_2}} {{VNF_GATEWAY2_CIDR}} +set ip arp {{INTF_1}} {{TG_GATEWAY1_IP}} {{TG_MAC1}} static +set ip arp {{INTF_2}} {{TG_GATEWAY2_IP}} {{TG_MAC2}} static +ip route add {{TG_NET1}} via {{TG_GATEWAY1_IP}} +ip route add {{TG_NET2}} via {{TG_GATEWAY2_IP}} |