diff options
author | fmenguy <francoisregis.menguy@orange.com> | 2020-11-16 17:01:33 +0100 |
---|---|---|
committer | fmenguy <francoisregis.menguy@orange.com> | 2021-04-28 11:00:55 +0200 |
commit | 83c4a7885d7c32901ff7335bdbef9d8d9f4417d7 (patch) | |
tree | a9a9a5ed6f6e6ef5eb3413d5d9be809409b8e719 /nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d | |
parent | ffa058dfad5d98c6af50126748cd5798ed7b3d94 (diff) |
NFVBENCH-196: New NFVbench image for generator part (nfvbench and TRex codes inside VM)5.0.0
Change-Id: Id919a1b9dbf5e04b198d022432ed5c64232a27ba
Signed-off-by: fmenguy <francoisregis.menguy@orange.com>
Diffstat (limited to 'nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d')
-rw-r--r-- | nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.generator | 109 | ||||
-rw-r--r-- | nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.loopvm (renamed from nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local) | 18 |
2 files changed, 117 insertions, 10 deletions
diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.generator b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.generator new file mode 100644 index 0000000..0746fd6 --- /dev/null +++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.generator @@ -0,0 +1,109 @@ +#!/bin/bash + +touch /var/lock/subsys/local + +# Waiting for cloud-init to generate $NFVBENCH_CONF, retry 60 seconds +NFVBENCH_CONF=/etc/nfvbenchvm.conf +OPENRC=/etc/nfvbench/openrc +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 NFVbench and TRex..." +eval $(cat $NFVBENCH_CONF) +touch /nfvbench_configured.flag + +if [ -f $OPENRC ]; then + source $OPENRC +fi + +# Add DNS entry +if [ $DNS_SERVERS ]; then + IFS="," read -a dns <<< $DNS_SERVERS + for d in "${dns[@]}"; do + echo "nameserver $d" >> /etc/resolv.conf + done +fi + +# 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 + if [ -f /proc/irq/$irq/smp_affinity ]; then + echo 1 > /proc/irq/$irq/smp_affinity + fi +done + +NET_PATH=/sys/class/net + +get_eth_port() { + # device mapping for CentOS Linux 7: + # lspci: + # 00.03.0 Ethernet controller: Red Hat, Inc. Virtio network device + # 00.04.0 Ethernet controller: Red Hat, Inc. Virtio network device + # /sys/class/net: + # /sys/class/net/eth0 -> ../../devices/pci0000:00/0000:00:03.0/virtio0/net/eth0 + # /sys/class/net/eth1 -> ../../devices/pci0000:00/0000:00:04.0/virtio1/net/eth1 + + mac=$1 + for f in $(ls $NET_PATH/); do + if grep -q "$mac" $NET_PATH/$f/address; then + eth_port=$(readlink $NET_PATH/$f | cut -d "/" -f8) + # some virtual interfaces match on MAC and do not have a PCI address + if [ "$eth_port" -a "$eth_port" != "N/A" ]; then + # Found matching interface + logger "NFVBENCHVM: found interface $f ($eth_port) matching $mac" + break + else + eth_port="" + fi + fi; + done + if [ -z "$eth_port" ]; then + echo "ERROR: Cannot find eth port for MAC $mac" >&2 + logger "NFVBENCHVM ERROR: Cannot find eth port for MAC $mac" + return 1 + fi + echo $eth_port + return 0 +} + +# Set VM MANAGEMENT port up and running +if [ $INTF_MGMT_CIDR ] && [ $INTF_MGMT_IP_GW ]; then + if [ $INTF_MAC_MGMT ]; then + ETH_PORT=$(get_eth_port $INTF_MAC_MGMT) + elif [ -f $OPENRC ] && [ "$PORT_MGMT_NAME" ]; then + $INTF_MAC_MGMT=$(openstack port list | grep $PORT_MGMT_NAME | grep -o -Ei '([a-fA-F0-9:]{17}|[a-fA-F0-9]{12}$)' | head -1) + ETH_PORT=$(get_eth_port $INTF_MAC_MGMT) + else + ETH_PORT="" + fi + if [ -z "$ETH_PORT" ]; then + echo "ERROR: Cannot find eth port for management port" >&2 + logger "NFVBENCHVM ERROR: Cannot find eth port for management port" + return 1 + fi + ip addr add $INTF_MGMT_CIDR dev $ETH_PORT + ip link set $ETH_PORT up + ip route add default via $INTF_MGMT_IP_GW dev $ETH_PORT +else + echo "INFO: VM management IP Addresses missing in $NFVBENCH_CONF" +fi + +/nfvbench/configure-nfvbench.sh + +if [ $ACTION ]; then + /nfvbench/start-nfvbench.sh $ACTION +else + /nfvbench/start-nfvbench.sh +fi + +exit 0
\ No newline at end of file diff --git a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.loopvm index d69cd0e..a83e7ba 100644 --- a/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local +++ b/nfvbenchvm/dib/elements/nfvbenchvm/static/etc/rc.d/rc.local.loopvm @@ -2,7 +2,7 @@ touch /var/lock/subsys/local -# Waiting for cloud-init to generate $TESTPMD_CONF, retry 60 seconds +# Waiting for cloud-init to generate $NFVBENCH_CONF, retry 60 seconds NFVBENCH_CONF=/etc/nfvbenchvm.conf retry=30 until [ $retry -eq 0 ]; do @@ -175,8 +175,8 @@ if [ $PCI_ADDRESS_1 ] && [ $PCI_ADDRESS_2 ]; then if [ "$FORWARDER" == "testpmd" ]; then echo "Configuring testpmd..." # Binding ports to DPDK - /dpdk/dpdk-devbind.py -b igb_uio $PCI_ADDRESS_1 - /dpdk/dpdk-devbind.py -b igb_uio $PCI_ADDRESS_2 + dpdk-devbind -b igb_uio $PCI_ADDRESS_1 + dpdk-devbind -b igb_uio $PCI_ADDRESS_2 screen -dmSL testpmd /dpdk/testpmd \ -c $CORE_MASK \ -n 4 \ @@ -195,7 +195,7 @@ if [ $PCI_ADDRESS_1 ] && [ $PCI_ADDRESS_2 ]; then --cmdline-file=/dpdk/testpmd_cmd.txt echo "testpmd running in screen 'testpmd'" logger "NFVBENCHVM: testpmd running in screen 'testpmd'" - else + elif [ "$FORWARDER" == "vpp" ]; then echo "Configuring vpp..." cp /vpp/startup.conf /etc/vpp/startup.conf cp /vpp/vm.conf /etc/vpp/vm.conf @@ -233,6 +233,9 @@ if [ $PCI_ADDRESS_1 ] && [ $PCI_ADDRESS_2 ]; then sed -i "s/{{TG_GATEWAY2_IP}}/${TG_GATEWAY2_IP}/g" /etc/vpp/vm.conf service vpp restart logger "NFVBENCHVM: vpp service restarted" + else + echo "ERROR: Unknown forwarder value. Accepted values: testpmd or vpp" + exit 1 fi else echo "ERROR: Cannot find PCI Address from MAC" @@ -241,9 +244,4 @@ else logger "NFVBENCHVM ERROR: Cannot find PCI Address from MAC" fi -# Set SSH config -logger $(cat /etc/ssh/sshd_config | grep "PasswordAuthentication") -sed -i 's/PasswordAuthentication no/#PasswordAuthentication no/g' /etc/ssh/sshd_config -sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config -logger $(cat /etc/ssh/sshd_config | grep "PasswordAuthentication") -service sshd restart +exit 0
\ No newline at end of file |