aboutsummaryrefslogtreecommitdiffstats
path: root/vnfs
diff options
context:
space:
mode:
authorYour Name <you@example.com>2019-04-09 06:47:51 -0500
committerPaul Vaduva <Paul.Vaduva@enea.com>2019-04-10 14:51:10 +0200
commit73f56f16a45e6ff77363956cb6c1130cbf4025c3 (patch)
tree0270c06bde3d4cc457ddd191383cbb8668ee466d /vnfs
parent845800d65fc2f25286c74551a1d5dd00e2798df5 (diff)
vfirewall usecase for arm64
vfirewall support for running on arm64 openstack deployment. Due to lack of support for arm64 un current vfirewall usecase deps we had to update some components version like the ubuntu (16.04) vpp, dpdk, and honeycomb Change-Id: I3a434df1493fab9bdb43cb0ec1313b1a626b33c9 Issue-ID: INT-884 Signed-off-by: Paul Vaduva <Paul.Vaduva@enea.com>
Diffstat (limited to 'vnfs')
-rw-r--r--vnfs/VES/bldjobs/Makefile22
-rw-r--r--vnfs/VES5.0/evel/evel-library/bldjobs/Makefile22
-rw-r--r--vnfs/VES5.0/evel/evel-library/code/VESreporting_HB/Makefile3
-rw-r--r--vnfs/VES5.0/evel/evel-library/code/VESreporting_fault/Makefile3
-rw-r--r--vnfs/VES5.0/evel/evel-library/code/VESreporting_syslog/Makefile3
-rw-r--r--vnfs/VES5.0/evel/evel-library/code/VESreporting_vFW/Makefile3
-rwxr-xr-xvnfs/VES5.0/evel/evel-library/libs/aarch64/libevel.abin0 -> 585853 bytes
-rw-r--r--vnfs/VESreporting_vFW/Makefile3
-rw-r--r--vnfs/VESreporting_vFW5.0/Makefile3
-rw-r--r--vnfs/VESreporting_vLB/Makefile3
-rw-r--r--vnfs/VESreporting_vLB5.0/Makefile3
-rwxr-xr-xvnfs/vFW/scripts/v_firewall_init_arm64.sh82
-rwxr-xr-xvnfs/vFW/scripts/v_firewall_install_arm64.sh110
-rwxr-xr-xvnfs/vFW/scripts/v_packetgen_init_arm64.sh94
-rwxr-xr-xvnfs/vFW/scripts/v_packetgen_install_arm64.sh89
-rwxr-xr-xvnfs/vFW/scripts/v_sink_install_arm64.sh68
16 files changed, 487 insertions, 24 deletions
diff --git a/vnfs/VES/bldjobs/Makefile b/vnfs/VES/bldjobs/Makefile
index 659f02fb..058deca7 100644
--- a/vnfs/VES/bldjobs/Makefile
+++ b/vnfs/VES/bldjobs/Makefile
@@ -26,13 +26,14 @@
#******************************************************************************
ARCH=$(shell getconf LONG_BIT)
+MACHINE_ARCH=$(shell uname -m)
CODE_ROOT=$(CURDIR)/..
EVELLIB_ROOT=$(CODE_ROOT)/code/evel_library
EVELDEMO_ROOT=$(CODE_ROOT)/code/evel_demo
EVELUNIT_ROOT=$(CODE_ROOT)/code/evel_unit
EVELTRAINING_ROOT=$(CODE_ROOT)/code/evel_training
-LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
-OUTPUT_DIR=$(CODE_ROOT)/output/x86_$(ARCH)
+LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
+OUTPUT_DIR=$(CODE_ROOT)/output/$(MACHINE_ARCH)
DOCS_ROOT=$(CODE_ROOT)/docs
CC=gcc
SCP=scp
@@ -46,8 +47,13 @@ PLANTFLAGS=-tsvg
# Standard compiler flags. *
#******************************************************************************
CPPFLAGS=-I $(EVELLIB_ROOT)
-CFLAGS=-Wall -Wextra -m$(ARCH) -g -fPIC
-LIBCFLAGS=-Wall -Wextra -m$(ARCH) -g -shared -fPIC
+ifeq ($(MACHINE_ARCH), aarch64)
+ CFLAGS=-Wall -Wextra -march=native -g -fPIC
+ LIBCFLAGS=-Wall -Wextra -march=native -g -shared -fPIC
+else
+ CFLAGS=-Wall -Wextra -m$(ARCH) -g -fPIC
+ LIBCFLAGS=-Wall -Wextra -m$(ARCH) -g -shared -fPIC
+endif
#******************************************************************************
# The testbed is a VM instance where we can install the EVEL example under *
@@ -251,7 +257,7 @@ evel_test_centos: evel_install_centos
@echo Testing EVEL Demo application on CentOS...
@$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
source .bash_profile \; \
- $(TESTBED_CENTOS_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
+ $(TESTBED_CENTOS_INSTALL_PATH)/output/$(MACHINE_ARCH)/evel_demo \
--fqdn $(VNF_COLLECTOR_HOST) \
--port $(VNF_COLLECTOR_PORT) \
--verbose
@@ -265,7 +271,7 @@ evel_test_ubuntu: evel_install_ubuntu
@echo Testing EVEL Demo application on Ubuntu...
@$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
source .profile \; \
- $(TESTBED_UBUNTU_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
+ $(TESTBED_UBUNTU_INSTALL_PATH)/output/$(MACHINE_ARCH)/evel_demo \
--fqdn $(VNF_COLLECTOR_HOST) \
--port $(VNF_COLLECTOR_PORT) \
--verbose
@@ -293,8 +299,8 @@ package: api_library_clean \
@cd $(CODE_ROOT) && tar cfz output/evel-library-package.tgz bldjobs \
code \
docs \
- libs/x86_64/README \
- output/x86_64/README \
+ libs/$(MACHINE_ARCH)/README \
+ output/$(MACHINE_ARCH)/README \
readme.md
package_clean:
diff --git a/vnfs/VES5.0/evel/evel-library/bldjobs/Makefile b/vnfs/VES5.0/evel/evel-library/bldjobs/Makefile
index 1c327d3d..fe06f81a 100644
--- a/vnfs/VES5.0/evel/evel-library/bldjobs/Makefile
+++ b/vnfs/VES5.0/evel/evel-library/bldjobs/Makefile
@@ -26,12 +26,13 @@
#****************************************************************************/
ARCH=$(shell getconf LONG_BIT)
+MACHINE_ARCH=$(shell uname -m)
CODE_ROOT=$(CURDIR)/..
EVELLIB_ROOT=$(CODE_ROOT)/code/evel_library
EVELUNIT_ROOT=$(CODE_ROOT)/code/evel_unit
EVELTRAINING_ROOT=$(CODE_ROOT)/code
-LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
-OUTPUT_DIR=$(CODE_ROOT)/output/x86_$(ARCH)
+LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
+OUTPUT_DIR=$(CODE_ROOT)/output/$(MACHINE_ARCH)
DOCS_ROOT=$(CODE_ROOT)/docs
CC=gcc
SCP=scp
@@ -45,8 +46,13 @@ PLANTFLAGS=-tsvg
# Standard compiler flags. *
#******************************************************************************
CPPFLAGS=-I $(EVELLIB_ROOT)
-CFLAGS=-Wall -Wextra -m$(ARCH) -g -fPIC
-LIBCFLAGS=-Wall -Wextra -m$(ARCH) -g -shared -fPIC
+ifeq ($(MACHINE_ARCH), aarch64)
+ CFLAGS=-Wall -Wextra -march=native -g -fPIC
+ LIBCFLAGS=-Wall -Wextra -march=native -g -shared -fPIC
+else
+ CFLAGS=-Wall -Wextra -m$(ARCH) -g -fPIC
+ LIBCFLAGS=-Wall -Wextra -m$(ARCH) -g -shared -fPIC
+endif
#******************************************************************************
# The testbed is a VM instance where we can install the EVEL example under *
@@ -253,7 +259,7 @@ evel_test_centos: evel_install_centos
@echo Testing EVEL Demo application on CentOS...
@$(SSH) $(VNF_TESTBED_CENTOS_USER)@$(VNF_TESTBED_CENTOS) \
source .bash_profile \; \
- $(TESTBED_CENTOS_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
+ $(TESTBED_CENTOS_INSTALL_PATH)/output/$(MACHINE_ARCH)/evel_demo \
--fqdn $(VNF_COLLECTOR_HOST) \
--port $(VNF_COLLECTOR_PORT) \
--verbose
@@ -267,7 +273,7 @@ evel_test_ubuntu: evel_install_ubuntu
@echo Testing EVEL Demo application on Ubuntu...
@$(SSH) $(VNF_TESTBED_UBUNTU_USER)@$(VNF_TESTBED_UBUNTU) \
source .profile \; \
- $(TESTBED_UBUNTU_INSTALL_PATH)/output/x86_$(ARCH)/evel_demo \
+ $(TESTBED_UBUNTU_INSTALL_PATH)/output/$(MACHINE_ARCH)/evel_demo \
--fqdn $(VNF_COLLECTOR_HOST) \
--port $(VNF_COLLECTOR_PORT) \
--verbose
@@ -292,8 +298,8 @@ package: api_library_clean \
@cd $(CODE_ROOT) && tar cfz output/evel-library-package.tgz bldjobs \
code \
docs \
- libs/x86_64/README \
- output/x86_64/README \
+ libs/$(MACHINE_ARCH)/README \
+ output/$(MACHINE_ARCH)/README \
readme.md
package_clean:
diff --git a/vnfs/VES5.0/evel/evel-library/code/VESreporting_HB/Makefile b/vnfs/VES5.0/evel/evel-library/code/VESreporting_HB/Makefile
index e0077597..1119f59a 100644
--- a/vnfs/VES5.0/evel/evel-library/code/VESreporting_HB/Makefile
+++ b/vnfs/VES5.0/evel/evel-library/code/VESreporting_HB/Makefile
@@ -17,9 +17,10 @@
CC=gcc
ARCH=$(shell getconf LONG_BIT)
+MACHINE_ARCH=$(shell uname -m)
CODE_ROOT=$(CURDIR)/../..
#CODE_ROOT=../code/evel-library
-LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
+LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
#LIBS_DIR=/usr/lib
INCLUDE_DIR= -I $(CODE_ROOT)/code/evel_library -I .
diff --git a/vnfs/VES5.0/evel/evel-library/code/VESreporting_fault/Makefile b/vnfs/VES5.0/evel/evel-library/code/VESreporting_fault/Makefile
index 4837c7d1..87e0d4ac 100644
--- a/vnfs/VES5.0/evel/evel-library/code/VESreporting_fault/Makefile
+++ b/vnfs/VES5.0/evel/evel-library/code/VESreporting_fault/Makefile
@@ -17,9 +17,10 @@
CC=gcc
ARCH=$(shell getconf LONG_BIT)
+MACHINE_ARCH=$(shell uname -m)
CODE_ROOT=$(CURDIR)/../..
#CODE_ROOT=../code/evel-library
-LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
+LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
#LIBS_DIR=/usr/lib
INCLUDE_DIR= -I $(CODE_ROOT)/code/evel_library -I .
diff --git a/vnfs/VES5.0/evel/evel-library/code/VESreporting_syslog/Makefile b/vnfs/VES5.0/evel/evel-library/code/VESreporting_syslog/Makefile
index 4b0fd85d..f0b4ed3b 100644
--- a/vnfs/VES5.0/evel/evel-library/code/VESreporting_syslog/Makefile
+++ b/vnfs/VES5.0/evel/evel-library/code/VESreporting_syslog/Makefile
@@ -17,9 +17,10 @@
CC=gcc
ARCH=$(shell getconf LONG_BIT)
+MACHINE_ARCH=$(shell uname -m)
CODE_ROOT=$(CURDIR)/../..
#CODE_ROOT=../code/evel-library
-LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
+LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
#LIBS_DIR=/usr/lib
INCLUDE_DIR= -I $(CODE_ROOT)/code/evel_library -I .
diff --git a/vnfs/VES5.0/evel/evel-library/code/VESreporting_vFW/Makefile b/vnfs/VES5.0/evel/evel-library/code/VESreporting_vFW/Makefile
index 9d1812fa..f5e3c463 100644
--- a/vnfs/VES5.0/evel/evel-library/code/VESreporting_vFW/Makefile
+++ b/vnfs/VES5.0/evel/evel-library/code/VESreporting_vFW/Makefile
@@ -17,9 +17,10 @@
CC=gcc
ARCH=$(shell getconf LONG_BIT)
+MACHINE_ARCH=$(shell uname -m)
CODE_ROOT=$(CURDIR)/../..
#CODE_ROOT=../code/evel-library
-LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
+LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
#LIBS_DIR=/usr/lib
INCLUDE_DIR= -I $(CODE_ROOT)/code/evel_library -I .
diff --git a/vnfs/VES5.0/evel/evel-library/libs/aarch64/libevel.a b/vnfs/VES5.0/evel/evel-library/libs/aarch64/libevel.a
new file mode 100755
index 00000000..0e17b9f8
--- /dev/null
+++ b/vnfs/VES5.0/evel/evel-library/libs/aarch64/libevel.a
Binary files differ
diff --git a/vnfs/VESreporting_vFW/Makefile b/vnfs/VESreporting_vFW/Makefile
index 77ca5742..f821b442 100644
--- a/vnfs/VESreporting_vFW/Makefile
+++ b/vnfs/VESreporting_vFW/Makefile
@@ -18,8 +18,9 @@
CC=gcc
ARCH=$(shell getconf LONG_BIT)
+MACHINE_ARCH=$(shell uname -m)
CODE_ROOT=$(CURDIR)/../../..
-LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
+LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
INCLUDE_DIR=$(CODE_ROOT)/code/evel_library
#******************************************************************************
diff --git a/vnfs/VESreporting_vFW5.0/Makefile b/vnfs/VESreporting_vFW5.0/Makefile
index c9776e0e..66240d61 100644
--- a/vnfs/VESreporting_vFW5.0/Makefile
+++ b/vnfs/VESreporting_vFW5.0/Makefile
@@ -18,8 +18,9 @@
CC=gcc
ARCH=$(shell getconf LONG_BIT)
+MACHINE_ARCH=$(shell uname -m)
CODE_ROOT=$(CURDIR)/../..
-LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
+LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
INCLUDE_DIR=$(CODE_ROOT)/code/evel_library
#******************************************************************************
diff --git a/vnfs/VESreporting_vLB/Makefile b/vnfs/VESreporting_vLB/Makefile
index 094adabe..172e81c5 100644
--- a/vnfs/VESreporting_vLB/Makefile
+++ b/vnfs/VESreporting_vLB/Makefile
@@ -19,8 +19,9 @@
CC=gcc
ARCH=$(shell getconf LONG_BIT)
+MACHINE_ARCH=$(shell uname -m)
CODE_ROOT=$(CURDIR)/../../..
-LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
+LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
INCLUDE_DIR=$(CODE_ROOT)/code/evel_library
#******************************************************************************
diff --git a/vnfs/VESreporting_vLB5.0/Makefile b/vnfs/VESreporting_vLB5.0/Makefile
index a9eb05e1..76029120 100644
--- a/vnfs/VESreporting_vLB5.0/Makefile
+++ b/vnfs/VESreporting_vLB5.0/Makefile
@@ -18,8 +18,9 @@
CC=gcc
ARCH=$(shell getconf LONG_BIT)
+MACHINE_ARCH=$(shell uname -m)
CODE_ROOT=$(CURDIR)/../..
-LIBS_DIR=$(CODE_ROOT)/libs/x86_$(ARCH)
+LIBS_DIR=$(CODE_ROOT)/libs/$(MACHINE_ARCH)
INCLUDE_DIR=$(CODE_ROOT)/code/evel_library
#******************************************************************************
diff --git a/vnfs/vFW/scripts/v_firewall_init_arm64.sh b/vnfs/vFW/scripts/v_firewall_init_arm64.sh
new file mode 100755
index 00000000..7fce884c
--- /dev/null
+++ b/vnfs/vFW/scripts/v_firewall_init_arm64.sh
@@ -0,0 +1,82 @@
+#!/bin/bash
+set -x
+
+# Convert Network CIDR to Netmask
+mask2cidr() {
+ nbits=0
+ IFS=.
+ for dec in $1 ; do
+ case $dec in
+ 255) let nbits+=8;;
+ 254) let nbits+=7;;
+ 252) let nbits+=6;;
+ 248) let nbits+=5;;
+ 240) let nbits+=4;;
+ 224) let nbits+=3;;
+ 192) let nbits+=2;;
+ 128) let nbits+=1;;
+ 0);;
+ *) echo "Error: $dec is not recognized"; exit 1
+ esac
+ done
+ echo "$nbits"
+}
+
+# Start VPP
+if ! which start; then
+ echo "#!/bin/bash" > /usr/local/sbin/start
+ echo "systemctl start \$1" >> /usr/local/sbin/start
+ chmod u+x /usr/local/sbin/start
+fi
+start vpp
+sleep 1
+
+# Configure VPP for vFirewall
+IPADDR1=$(ifconfig enp2s0 | grep "inet addr" | tr -s ' ' | cut -d' ' -f3 | cut -d':' -f2)
+IPADDR2=$(ifconfig enp3s0 | grep "inet addr" | tr -s ' ' | cut -d' ' -f3 | cut -d':' -f2)
+HWADDR1=$(ifconfig enp2s0 | grep -Po "HWaddr \K(.*)")
+HWADDR2=$(ifconfig enp3s0 | grep -Po "HWaddr \K(.*)")
+FAKE_HWADDR1=$(echo -n 00; dd bs=1 count=5 if=/dev/urandom 2>/dev/null | hexdump -v -e '/1 ":%02X"')
+FAKE_HWADDR2=$(echo -n 00; dd bs=1 count=5 if=/dev/urandom 2>/dev/null | hexdump -v -e '/1 ":%02X"')
+
+IPADDR1_MASK=$(ifconfig enp2s0 | grep "Mask" | awk '{print $4}' | awk -F ":" '{print $2}')
+IPADDR1_CIDR=$(mask2cidr $IPADDR1_MASK)
+IPADDR2_MASK=$(ifconfig enp3s0 | grep "Mask" | awk '{print $4}' | awk -F ":" '{print $2}')
+IPADDR2_CIDR=$(mask2cidr $IPADDR2_MASK)
+
+ifconfig enp2s0 down
+ifconfig enp3s0 down
+ifconfig enp2s0 hw ether $FAKE_HWADDR1
+ifconfig enp3s0 hw ether $FAKE_HWADDR2
+ip addr flush dev enp2s0
+ip addr flush dev enp3s0
+ifconfig enp2s0 up
+ifconfig enp3s0 up
+vppctl tap connect tap111 hwaddr $HWADDR1
+vppctl tap connect tap222 hwaddr $HWADDR2
+vppctl set int ip address tapcli-0 $IPADDR1"/"$IPADDR1_CIDR
+vppctl set int ip address tapcli-1 $IPADDR2"/"$IPADDR2_CIDR
+vppctl set int state tapcli-0 up
+vppctl set int state tapcli-1 up
+brctl addbr br0
+brctl addif br0 tap111
+brctl addif br0 enp2s0
+brctl addbr br1
+brctl addif br1 tap222
+brctl addif br1 enp3s0
+ifconfig br0 up
+ifconfig br1 up
+sleep 1
+
+# Start HoneyComb
+VERSION=$(cat /opt/config/demo_artifacts_version.txt)
+mkdir -p /var/lib/honeycomb/persist/{config,context}/
+echo "" > /var/lib/honeycomb/persist/context/data.json
+echo "" > /var/lib/honeycomb/persist/config/data.json
+# /opt/honeycomb/sample-distribution-$VERSION/honeycomb &>/dev/null &disown
+systemctl restart honeycomb
+sleep 1
+
+# Start VES client
+cd /opt/VES/evel/evel-library/code/VESreporting/
+./go-client.sh &>/dev/null &disown
diff --git a/vnfs/vFW/scripts/v_firewall_install_arm64.sh b/vnfs/vFW/scripts/v_firewall_install_arm64.sh
new file mode 100755
index 00000000..c97fa91f
--- /dev/null
+++ b/vnfs/vFW/scripts/v_firewall_install_arm64.sh
@@ -0,0 +1,110 @@
+#!/bin/bash
+set -x
+
+NEXUS_ARTIFACT_REPO=$(cat /opt/config/nexus_artifact_repo.txt)
+DEMO_ARTIFACTS_VERSION=$(cat /opt/config/demo_artifacts_version.txt)
+if [[ "$DEMO_ARTIFACTS_VERSION" =~ "SNAPSHOT" ]]; then REPO=snapshots; else REPO=releases; fi
+INSTALL_SCRIPT_VERSION=$(cat /opt/config/install_script_version.txt)
+CLOUD_ENV=$(cat /opt/config/cloud_env.txt)
+
+# Convert Network CIDR to Netmask
+cdr2mask () {
+ # Number of args to shift, 255..255, first non-255 byte, zeroes
+ set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
+ [ $1 -gt 1 ] && shift $1 || shift
+ echo ${1-0}.${2-0}.${3-0}.${4-0}
+}
+
+# OpenStack network configuration
+if [[ $CLOUD_ENV == "openstack" ]]
+then
+ echo 127.0.0.1 $(hostname) >> /etc/hosts
+
+ # Allow remote login as root
+ mv /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bk
+ cp /home/ubuntu/.ssh/authorized_keys /root/.ssh
+
+ MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1)
+
+ IP=$(cat /opt/config/vfw_private_ip_0.txt)
+ BITS=$(cat /opt/config/unprotected_private_net_cidr.txt | cut -d"/" -f2)
+ NETMASK=$(cdr2mask $BITS)
+ echo "auto enp2s0" >> /etc/network/interfaces
+ echo "iface enp2s0 inet static" >> /etc/network/interfaces
+ echo " address $IP" >> /etc/network/interfaces
+ echo " netmask $NETMASK" >> /etc/network/interfaces
+ echo " mtu $MTU" >> /etc/network/interfaces
+
+ IP=$(cat /opt/config/vfw_private_ip_1.txt)
+ BITS=$(cat /opt/config/protected_private_net_cidr.txt | cut -d"/" -f2)
+ NETMASK=$(cdr2mask $BITS)
+ echo "auto enp3s0" >> /etc/network/interfaces
+ echo "iface enp3s0 inet static" >> /etc/network/interfaces
+ echo " address $IP" >> /etc/network/interfaces
+ echo " netmask $NETMASK" >> /etc/network/interfaces
+ echo " mtu $MTU" >> /etc/network/interfaces
+
+ IP=$(cat /opt/config/vfw_private_ip_2.txt)
+ BITS=$(cat /opt/config/onap_private_net_cidr.txt | cut -d"/" -f2)
+ NETMASK=$(cdr2mask $BITS)
+ echo "auto enp4s0" >> /etc/network/interfaces
+ echo "iface enp4s0 inet static" >> /etc/network/interfaces
+ echo " address $IP" >> /etc/network/interfaces
+ echo " netmask $NETMASK" >> /etc/network/interfaces
+ echo " mtu $MTU" >> /etc/network/interfaces
+
+ ifup enp2s0
+ ifup enp3s0
+ ifup enp4s0
+fi
+
+# Download required dependencies
+echo "deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list
+echo "deb-src http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list
+apt-get update
+apt-get install --allow-unauthenticated -y make wget openjdk-8-jdk gcc libcurl4-openssl-dev python-pip bridge-utils apt-transport-https ca-certificates
+pip install jsonschema
+
+# Download artifacts for virtual firewall
+mkdir /opt/honeycomb
+cd /opt
+
+unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip v_firewall_init_arm64.sh > /opt/v_firewall_init.sh
+unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip vfirewall.sh > /opt/vfirewall.sh
+wget -O sample-distribution-$DEMO_ARTIFACTS_VERSION-hc.tar.gz "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf&a=sample-distribution&c=hc&e=tar.gz&v=$DEMO_ARTIFACTS_VERSION"
+wget -O ves-$DEMO_ARTIFACTS_VERSION-demo.tar.gz "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.ves5&a=ves&c=demo&e=tar.gz&v=$DEMO_ARTIFACTS_VERSION"
+wget -O ves_vfw_reporting-$DEMO_ARTIFACTS_VERSION-demo.tar.gz "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.ves5&a=ves_vfw_reporting&c=demo&e=tar.gz&v=$DEMO_ARTIFACTS_VERSION"
+
+tar -zmxvf ves-$DEMO_ARTIFACTS_VERSION-demo.tar.gz
+mv ves-$DEMO_ARTIFACTS_VERSION VES
+tar -zmxvf ves_vfw_reporting-$DEMO_ARTIFACTS_VERSION-demo.tar.gz
+mv ves_vfw_reporting-$DEMO_ARTIFACTS_VERSION /opt/VES/evel/evel-library/code/VESreporting
+tar -zmxvf sample-distribution-$DEMO_ARTIFACTS_VERSION-hc.tar.gz
+
+mv sample-distribution-$DEMO_ARTIFACTS_VERSION honeycomb
+sed -i 's/"restconf-binding-address": "127.0.0.1",/"restconf-binding-address": "0.0.0.0",/g' honeycomb/sample-distribution-$DEMO_ARTIFACTS_VERSION/config/honeycomb.json
+rm *.tar.gz
+
+chmod +x v_firewall_init.sh
+chmod +x vfirewall.sh
+chmod +x /opt/VES/evel/evel-library/code/VESreporting/go-client.sh
+
+# Install VPP
+rm /etc/apt/sources.list.d/99fd.io.list
+echo "deb [trusted=yes] http://linux.enea.com/apt-mk/xenial nightly extra" | sudo tee -a /etc/apt/sources.list.d/99fd.io.list
+echo "deb [trusted=yes] http://ubuntu-cloud.archive.canonical.com/ubuntu xenial-updates/queens/main ./" | sudo tee -a /etc/apt/sources.list.d/99fd.io.list
+apt-get update
+apt-get -o Dpkg::Options::="--force-overwrite" install -y vpp vpp-lib vpp-dbg vpp-plugins vpp-dev dpdk dpdk-dev dpdk-igb-uio-dkms dpdk-rte-kni-dkms honeycomb
+sleep 1
+
+# Install VES
+cd /opt/VES/evel/evel-library/bldjobs/
+make clean
+make
+sleep 1
+
+# Run instantiation script
+cd /opt
+mv vfirewall.sh /etc/init.d
+update-rc.d vfirewall.sh defaults
+./v_firewall_init.sh
diff --git a/vnfs/vFW/scripts/v_packetgen_init_arm64.sh b/vnfs/vFW/scripts/v_packetgen_init_arm64.sh
new file mode 100755
index 00000000..ca2cb7c1
--- /dev/null
+++ b/vnfs/vFW/scripts/v_packetgen_init_arm64.sh
@@ -0,0 +1,94 @@
+#!/bin/bash
+set -x
+
+# Convert Network CIDR to Netmask
+mask2cidr() {
+ nbits=0
+ IFS=.
+ for dec in $1 ; do
+ case $dec in
+ 255) let nbits+=8;;
+ 254) let nbits+=7;;
+ 252) let nbits+=6;;
+ 248) let nbits+=5;;
+ 240) let nbits+=4;;
+ 224) let nbits+=3;;
+ 192) let nbits+=2;;
+ 128) let nbits+=1;;
+ 0);;
+ *) echo "Error: $dec is not recognized"; exit 1
+ esac
+ done
+ echo "$nbits"
+}
+
+# Start VPP
+if ! which start; then
+ echo "#!/bin/bash" > /usr/local/sbin/start
+ echo "systemctl start \$1" >> /usr/local/sbin/start
+ chmod u+x /usr/local/sbin/start
+fi
+start vpp
+sleep 1
+
+# Configure VPP for vPacketGenerator
+IPADDR1=$(ifconfig enp2s0 | grep "inet addr" | tr -s ' ' | cut -d' ' -f3 | cut -d':' -f2)
+HWADDR1=$(ifconfig enp2s0 | grep -Po "HWaddr \K(.*)")
+FAKE_HWADDR1=$(echo -n 00; dd bs=1 count=5 if=/dev/urandom 2>/dev/null | hexdump -v -e '/1 ":%02X"')
+PROTECTED_NET_CIDR=$(cat /opt/config/protected_net_cidr.txt)
+FW_IPADDR=$(cat /opt/config/fw_ipaddr.txt)
+SINK_IPADDR=$(cat /opt/config/sink_ipaddr.txt)
+
+IPADDR1_MASK=$(ifconfig enp2s0 | grep "Mask" | awk '{print $4}' | awk -F ":" '{print $2}')
+IPADDR1_CIDR=$(mask2cidr $IPADDR1_MASK)
+
+ifconfig enp2s0 down
+ifconfig enp2s0 hw ether $FAKE_HWADDR1
+ip addr flush dev enp2s0
+ifconfig enp2s0 up
+vppctl tap connect tap111 hwaddr $HWADDR1
+vppctl set int ip address tapcli-0 $IPADDR1"/"$IPADDR1_CIDR
+vppctl set int state tapcli-0 up
+brctl addbr br0
+brctl addif br0 tap111
+brctl addif br0 enp2s0
+ifconfig br0 up
+vppctl ip route add $PROTECTED_NET_CIDR via $FW_IPADDR
+sleep 1
+
+# Install packet streams
+sed -i -e "0,/UDP/ s/UDP:.*/UDP: "$IPADDR1" -> "$SINK_IPADDR"/" /opt/pg_streams/stream_fw_udp1
+sed -i -e "0,/UDP/ s/UDP:.*/UDP: "$IPADDR1" -> "$SINK_IPADDR"/" /opt/pg_streams/stream_fw_udp2
+sed -i -e "0,/UDP/ s/UDP:.*/UDP: "$IPADDR1" -> "$SINK_IPADDR"/" /opt/pg_streams/stream_fw_udp3
+sed -i -e "0,/UDP/ s/UDP:.*/UDP: "$IPADDR1" -> "$SINK_IPADDR"/" /opt/pg_streams/stream_fw_udp4
+sed -i -e "0,/UDP/ s/UDP:.*/UDP: "$IPADDR1" -> "$SINK_IPADDR"/" /opt/pg_streams/stream_fw_udp5
+sed -i -e "0,/UDP/ s/UDP:.*/UDP: "$IPADDR1" -> "$SINK_IPADDR"/" /opt/pg_streams/stream_fw_udp6
+sed -i -e "0,/UDP/ s/UDP:.*/UDP: "$IPADDR1" -> "$SINK_IPADDR"/" /opt/pg_streams/stream_fw_udp7
+sed -i -e "0,/UDP/ s/UDP:.*/UDP: "$IPADDR1" -> "$SINK_IPADDR"/" /opt/pg_streams/stream_fw_udp8
+sed -i -e "0,/UDP/ s/UDP:.*/UDP: "$IPADDR1" -> "$SINK_IPADDR"/" /opt/pg_streams/stream_fw_udp9
+sed -i -e "0,/UDP/ s/UDP:.*/UDP: "$IPADDR1" -> "$SINK_IPADDR"/" /opt/pg_streams/stream_fw_udp10
+vppctl exec /opt/pg_streams/stream_fw_udp1
+vppctl exec /opt/pg_streams/stream_fw_udp2
+vppctl exec /opt/pg_streams/stream_fw_udp3
+vppctl exec /opt/pg_streams/stream_fw_udp4
+vppctl exec /opt/pg_streams/stream_fw_udp5
+vppctl exec /opt/pg_streams/stream_fw_udp6
+vppctl exec /opt/pg_streams/stream_fw_udp7
+vppctl exec /opt/pg_streams/stream_fw_udp8
+vppctl exec /opt/pg_streams/stream_fw_udp9
+vppctl exec /opt/pg_streams/stream_fw_udp10
+sleep 1
+
+# Start HoneyComb
+#VERSION=$(cat /opt/config/demo_artifacts_version.txt)
+mkdir -p /var/lib/honeycomb/persist/{config,context}/
+echo "" > /var/lib/honeycomb/persist/context/data.json
+echo "" > /var/lib/honeycomb/persist/config/data.json
+#/opt/honeycomb/sample-distribution-$VERSION/honeycomb &>/dev/null &disown
+systemctl restart honeycomb
+sleep 20
+
+# Enable traffic flows
+cd /opt
+chmod +x run_traffic_fw_demo.sh
+./run_traffic_fw_demo.sh &>/dev/null &disown
diff --git a/vnfs/vFW/scripts/v_packetgen_install_arm64.sh b/vnfs/vFW/scripts/v_packetgen_install_arm64.sh
new file mode 100755
index 00000000..8dee6977
--- /dev/null
+++ b/vnfs/vFW/scripts/v_packetgen_install_arm64.sh
@@ -0,0 +1,89 @@
+#!/bin/bash
+set -x
+
+NEXUS_ARTIFACT_REPO=$(cat /opt/config/nexus_artifact_repo.txt)
+DEMO_ARTIFACTS_VERSION=$(cat /opt/config/demo_artifacts_version.txt)
+if [[ "$DEMO_ARTIFACTS_VERSION" =~ "SNAPSHOT" ]]; then REPO=snapshots; else REPO=releases; fi
+INSTALL_SCRIPT_VERSION=$(cat /opt/config/install_script_version.txt)
+CLOUD_ENV=$(cat /opt/config/cloud_env.txt)
+
+# Convert Network CIDR to Netmask
+cdr2mask () {
+ # Number of args to shift, 255..255, first non-255 byte, zeroes
+ set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
+ [ $1 -gt 1 ] && shift $1 || shift
+ echo ${1-0}.${2-0}.${3-0}.${4-0}
+}
+
+# OpenStack network configuration
+if [[ $CLOUD_ENV == "openstack" ]]
+then
+ echo 127.0.0.1 $(hostname) >> /etc/hosts
+
+ # Allow remote login as root
+ mv /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bk
+ cp /home/ubuntu/.ssh/authorized_keys /root/.ssh
+
+ MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1)
+
+ IP=$(cat /opt/config/vpg_private_ip_0.txt)
+ BITS=$(cat /opt/config/unprotected_private_net_cidr.txt | cut -d"/" -f2)
+ NETMASK=$(cdr2mask $BITS)
+ echo "auto enp1s0" >> /etc/network/interfaces
+ echo "iface enp1s0 inet static" >> /etc/network/interfaces
+ echo " address $IP" >> /etc/network/interfaces
+ echo " netmask $NETMASK" >> /etc/network/interfaces
+ echo " mtu $MTU" >> /etc/network/interfaces
+
+ IP=$(cat /opt/config/vpg_private_ip_1.txt)
+ BITS=$(cat /opt/config/onap_private_net_cidr.txt | cut -d"/" -f2)
+ NETMASK=$(cdr2mask $BITS)
+ echo "auto enp2s0" >> /etc/network/interfaces
+ echo "iface enp2s0 inet static" >> /etc/network/interfaces
+ echo " address $IP" >> /etc/network/interfaces
+ echo " netmask $NETMASK" >> /etc/network/interfaces
+ echo " mtu $MTU" >> /etc/network/interfaces
+
+ ifup enp1s0
+ ifup enp2s0
+fi
+
+# Download required dependencies
+echo "deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list
+echo "deb-src http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list
+apt-get update
+apt-get install --allow-unauthenticated -y make wget openjdk-8-jdk gcc libcurl4-openssl-dev python-pip bridge-utils apt-transport-https ca-certificates
+pip install jsonschema
+
+# Download code for packet generator
+mkdir /opt/honeycomb
+cd /opt
+
+unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip v_packetgen_init_arm64.sh > /opt/v_packetgen_init.sh
+unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip vpacketgen.sh > /opt/vpacketgen.sh
+unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip run_traffic_fw_demo.sh > /opt/run_traffic_fw_demo.sh
+wget -O sample-distribution-$DEMO_ARTIFACTS_VERSION-hc.tar.gz "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf&a=sample-distribution&c=hc&e=tar.gz&v=$DEMO_ARTIFACTS_VERSION"
+wget -O vfw_pg_streams-$DEMO_ARTIFACTS_VERSION-demo.tar.gz "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vfw&a=vfw_pg_streams&c=demo&e=tar.gz&v=$DEMO_ARTIFACTS_VERSION"
+
+tar -zmxvf sample-distribution-$DEMO_ARTIFACTS_VERSION-hc.tar.gz
+tar -zmxvf vfw_pg_streams-$DEMO_ARTIFACTS_VERSION-demo.tar.gz
+mv vfw_pg_streams-$DEMO_ARTIFACTS_VERSION pg_streams
+mv sample-distribution-$DEMO_ARTIFACTS_VERSION honeycomb
+sed -i 's/"restconf-binding-address": "127.0.0.1",/"restconf-binding-address": "0.0.0.0",/g' honeycomb/sample-distribution-$DEMO_ARTIFACTS_VERSION/config/honeycomb.json
+rm *.tar.gz
+chmod +x v_packetgen_init.sh
+chmod +x vpacketgen.sh
+
+# Install VPP
+rm /etc/apt/sources.list.d/99fd.io.list
+echo "deb [trusted=yes] http://linux.enea.com/apt-mk/xenial nightly extra" | sudo tee -a /etc/apt/sources.list.d/99fd.io.list
+echo "deb [trusted=yes] http://ubuntu-cloud.archive.canonical.com/ubuntu xenial-updates/queens/main ./" | sudo tee -a /etc/apt/sources.list.d/99fd.io.list
+apt-get update
+apt-get -o Dpkg::Options::="--force-overwrite" install -y vpp vpp-lib vpp-dbg vpp-plugins vpp-dev dpdk dpdk-dev dpdk-igb-uio-dkms dpdk-rte-kni-dkms honeycomb
+sleep 1
+
+# Run instantiation script
+cd /opt
+mv vpacketgen.sh /etc/init.d
+update-rc.d vpacketgen.sh defaults
+./v_packetgen_init.sh
diff --git a/vnfs/vFW/scripts/v_sink_install_arm64.sh b/vnfs/vFW/scripts/v_sink_install_arm64.sh
new file mode 100755
index 00000000..73f6ee53
--- /dev/null
+++ b/vnfs/vFW/scripts/v_sink_install_arm64.sh
@@ -0,0 +1,68 @@
+#!/bin/bash
+
+INSTALL_SCRIPT_VERSION=$(cat /opt/config/install_script_version.txt)
+CLOUD_ENV=$(cat /opt/config/cloud_env.txt)
+
+# Convert Network CIDR to Netmask
+cdr2mask () {
+ # Number of args to shift, 255..255, first non-255 byte, zeroes
+ set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
+ [ $1 -gt 1 ] && shift $1 || shift
+ echo ${1-0}.${2-0}.${3-0}.${4-0}
+}
+
+# OpenStack network configuration
+if [[ $CLOUD_ENV == "openstack" ]]
+then
+ echo 127.0.0.1 $(hostname) >> /etc/hosts
+
+ # Allow remote login as root
+ mv /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bk
+ cp /home/ubuntu/.ssh/authorized_keys /root/.ssh
+
+ MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' | sort -n | head -1)
+
+ IP=$(cat /opt/config/vsn_private_ip_0.txt)
+ BITS=$(cat /opt/config/protected_private_net_cidr.txt | cut -d"/" -f2)
+ NETMASK=$(cdr2mask $BITS)
+ echo "auto enp2s0" >> /etc/network/interfaces
+ echo "iface enp2s0 inet static" >> /etc/network/interfaces
+ echo " address $IP" >> /etc/network/interfaces
+ echo " netmask $NETMASK" >> /etc/network/interfaces
+ echo " mtu $MTU" >> /etc/network/interfaces
+
+ IP=$(cat /opt/config/vsn_private_ip_1.txt)
+ BITS=$(cat /opt/config/onap_private_net_cidr.txt | cut -d"/" -f2)
+ NETMASK=$(cdr2mask $BITS)
+ echo "auto enp3s0" >> /etc/network/interfaces
+ echo "iface enp3s0 inet static" >> /etc/network/interfaces
+ echo " address $IP" >> /etc/network/interfaces
+ echo " netmask $NETMASK" >> /etc/network/interfaces
+ echo " mtu $MTU" >> /etc/network/interfaces
+
+ ifup enp2s0
+ ifup enp3s0
+fi
+
+# Download required dependencies
+echo "deb http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list
+echo "deb-src http://ppa.launchpad.net/openjdk-r/ppa/ubuntu $(lsb_release -c -s) main" >> /etc/apt/sources.list.d/java.list
+apt-get update
+apt-get install --allow-unauthenticated -y make wget openjdk-8-jdk apt-transport-https ca-certificates darkstat
+
+# Configure and run Darkstat
+sed -i "s/START_DARKSTAT=.*/START_DARKSTAT=yes/g" /etc/darkstat/init.cfg
+sed -i "s/INTERFACE=.*/INTERFACE=\"-i enp2s0\"/g" /etc/darkstat/init.cfg
+/etc/init.d/darkstat start
+
+# Download scripts for virtual sink
+cd /opt
+unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip v_sink_init.sh > /opt/v_sink_init.sh
+unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip vsink.sh > /opt/vsink.sh
+chmod +x v_sink_init.sh
+chmod +x vsink.sh
+
+# Run instantiation script
+mv vsink.sh /etc/init.d
+update-rc.d vsink.sh defaults
+./v_sink_init.sh