From 88509fe353767cbde707c3e3b1f29392957819f3 Mon Sep 17 00:00:00 2001 From: Mauro Sardara Date: Tue, 24 Mar 2020 17:34:14 +0000 Subject: [HICN-574] Host stack plugin for VPP. Signed-off-by: Mauro Sardara Change-Id: I8d8fdffef31a7013265d6529c5f52f3d5ec70d18 Signed-off-by: Mauro Sardara Signed-off-by: Mauro Signed-off-by: Mauro Sardara --- hicn-plugin/src/host_stack/testbed/Dockerfile | 46 +++++ .../src/host_stack/testbed/client-startup.txt | 6 + hicn-plugin/src/host_stack/testbed/init.sh | 6 + .../src/host_stack/testbed/run-client-server.sh | 24 +++ .../src/host_stack/testbed/server-startup.txt | 7 + .../src/host_stack/testbed/startup-client.conf | 188 ++++++++++++++++++++ .../src/host_stack/testbed/startup-server.conf | 189 +++++++++++++++++++++ .../src/host_stack/testbed/test_hicn_hs.txt | 6 + hicn-plugin/src/host_stack/testbed/vcl.conf | 7 + 9 files changed, 479 insertions(+) create mode 100644 hicn-plugin/src/host_stack/testbed/Dockerfile create mode 100644 hicn-plugin/src/host_stack/testbed/client-startup.txt create mode 100644 hicn-plugin/src/host_stack/testbed/init.sh create mode 100644 hicn-plugin/src/host_stack/testbed/run-client-server.sh create mode 100644 hicn-plugin/src/host_stack/testbed/server-startup.txt create mode 100644 hicn-plugin/src/host_stack/testbed/startup-client.conf create mode 100644 hicn-plugin/src/host_stack/testbed/startup-server.conf create mode 100644 hicn-plugin/src/host_stack/testbed/test_hicn_hs.txt create mode 100644 hicn-plugin/src/host_stack/testbed/vcl.conf (limited to 'hicn-plugin/src/host_stack/testbed') diff --git a/hicn-plugin/src/host_stack/testbed/Dockerfile b/hicn-plugin/src/host_stack/testbed/Dockerfile new file mode 100644 index 000000000..4e7005938 --- /dev/null +++ b/hicn-plugin/src/host_stack/testbed/Dockerfile @@ -0,0 +1,46 @@ +FROM ubuntu:18.04 + +ARG USERNAME=ubuntu +ARG USER_UID=1000 +ARG USER_GID=$USER_UID + +ARG VPP_GRP=vpp +ARG VPP_GID=998 + +ARG WORKDIR=/home/ubuntu + +RUN apt-get update \ + && apt-get -y install --no-install-recommends apt-utils sudo dialog build-essential \ + cmake cppcheck valgrind curl autoconf automake ccache debhelper dkms git libtool \ + libapr1-dev dh-systemd libconfuse-dev git-review exuberant-ctags cscope pkg-config \ + lcov chrpath autoconf indent clang-format libnuma-dev python-all python3-all \ + python3-setuptools python-dev python-virtualenv python-pip libffi6 check \ + libboost-all-dev libffi-dev python3-ply libmbedtls-dev cmake ninja-build uuid-dev \ + python3-jsonschema gdb libssl-dev python-setuptools zsh 2>&1 \ + # + # Verify git, process tools, lsb-release (useful for CLI installs) installed + && apt-get -y install git procps lsb-release curl iproute2 \ + # + # Create a non-root user to use if preferred - see https://aka.ms/vscode-remote/containers/non-root-user. + && groupadd --gid $USER_GID $USERNAME \ + && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \ + # [Optional] Uncomment the next three lines to add sudo support + && apt-get install -y sudo \ + && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ + && chmod 0440 /etc/sudoers.d/$USERNAME \ + # Create vpp group + && groupadd --gid $VPP_GID $VPP_GRP \ + # + && mkdir -p $WORKDIR \ + # + # Clean up + && apt-get autoremove -y \ + && apt-get clean -y \ + && rm -rf /var/lib/apt/lists/* + +USER $USERNAME +COPY init.sh /init.sh + +WORKDIR $WORKDIR + +CMD ["bash", "/init.sh"] diff --git a/hicn-plugin/src/host_stack/testbed/client-startup.txt b/hicn-plugin/src/host_stack/testbed/client-startup.txt new file mode 100644 index 000000000..7165265b3 --- /dev/null +++ b/hicn-plugin/src/host_stack/testbed/client-startup.txt @@ -0,0 +1,6 @@ +create interface memif id 0 master +set int state memif0/0 up +set int ip addr memif0/0 192.168.10.1/24 +set int ip addr memif0/0 2001::1/64 +ip route add b001::/64 via 2001::2 memif0/0 +#hicn enable b001::/64 \ No newline at end of file diff --git a/hicn-plugin/src/host_stack/testbed/init.sh b/hicn-plugin/src/host_stack/testbed/init.sh new file mode 100644 index 000000000..3017c2fea --- /dev/null +++ b/hicn-plugin/src/host_stack/testbed/init.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +sudo modprobe uio_pci_generic +sudo cp /home/ubuntu/host-stack/install/lib/libhicn.so /usr/lib/libhicn.so + +tail -f /dev/null \ No newline at end of file diff --git a/hicn-plugin/src/host_stack/testbed/run-client-server.sh b/hicn-plugin/src/host_stack/testbed/run-client-server.sh new file mode 100644 index 000000000..53388cdda --- /dev/null +++ b/hicn-plugin/src/host_stack/testbed/run-client-server.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +docker run -d \ + --privileged \ + --cap-add=ALL \ + --security-opt seccomp=unconfined \ + --hostname=vpp-client \ + -e STARTUP_CONF=/home/ubuntu/host-stack/vpp/testbed/startup-client.conf \ + -v /home/ubuntu/host-stack:/home/ubuntu/host-stack \ + -v /dev:/dev -v /lib/modules:/lib/modules \ + -v /var/run/vpp:/var/run/vpp \ + --name vpp-client vpp-develop + +docker run -d \ + --privileged \ + --cap-add=SYS_PTRACE \ + --security-opt seccomp=unconfined \ + --hostname=vpp-server \ + -e STARTUP_CONF=/home/ubuntu/host-stack/vpp/testbed/startup-server.conf \ + --cap-add=NET_ADMIN \ + -v /home/ubuntu/host-stack:/home/ubuntu/host-stack \ + -v /dev:/dev -v /lib/modules:/lib/modules \ + -v /var/run/vpp:/var/run/vpp \ + --name vpp-server vpp-develop \ No newline at end of file diff --git a/hicn-plugin/src/host_stack/testbed/server-startup.txt b/hicn-plugin/src/host_stack/testbed/server-startup.txt new file mode 100644 index 000000000..1b4d54338 --- /dev/null +++ b/hicn-plugin/src/host_stack/testbed/server-startup.txt @@ -0,0 +1,7 @@ +create interface memif id 0 slave +set int state memif0/0 up +set int ip addr memif0/0 192.168.10.2/24 +set int ip addr memif0/0 2001::2/64 +hicn hs set local prefix b001::/16 +#test hicn hs server uri hicn://b001::/64 +#hicn enable b001::/64 diff --git a/hicn-plugin/src/host_stack/testbed/startup-client.conf b/hicn-plugin/src/host_stack/testbed/startup-client.conf new file mode 100644 index 000000000..fb0c89c87 --- /dev/null +++ b/hicn-plugin/src/host_stack/testbed/startup-client.conf @@ -0,0 +1,188 @@ + +unix { + nodaemon + interactive + log /var/log/vpp/vpp.log + full-coredump + cli-listen /run/vpp/cli.sock + gid vpp + startup-config /home/ubuntu/host-stack/vpp/testbed/client-startup.txt +} + +api-trace { +## This stanza controls binary API tracing. Unless there is a very strong reason, +## please leave this feature enabled. + on +## Additional parameters: +## +## To set the number of binary API trace records in the circular buffer, configure nitems +## +## nitems +## +## To save the api message table decode tables, configure a filename. Results in /tmp/ +## Very handy for understanding api message changes between versions, identifying missing +## plugins, and so forth. +## +## save-api-table +} + +api-segment { + gid vpp +} + +socksvr { + default +} + +cpu { + ## In the VPP there is one main thread and optionally the user can create worker(s) + ## The main thread and worker thread(s) can be pinned to CPU core(s) manually or automatically + + ## Manual pinning of thread(s) to CPU core(s) + + ## Set logical CPU core where main thread runs, if main core is not set + ## VPP will use core 1 if available + main-core 1 + + ## Set logical CPU core(s) where worker threads are running + # corelist-workers 2-3,18-19 + + ## Automatic pinning of thread(s) to CPU core(s) + + ## Sets number of CPU core(s) to be skipped (1 ... N-1) + ## Skipped CPU core(s) are not used for pinning main thread and working thread(s). + ## The main thread is automatically pinned to the first available CPU core and worker(s) + ## are pinned to next free CPU core(s) after core assigned to main thread + # skip-cores 4 + + ## Specify a number of workers to be created + ## Workers are pinned to N consecutive CPU cores while skipping "skip-cores" CPU core(s) + ## and main thread's CPU core + # workers 2 + + ## Set scheduling policy and priority of main and worker threads + + ## Scheduling policy options are: other (SCHED_OTHER), batch (SCHED_BATCH) + ## idle (SCHED_IDLE), fifo (SCHED_FIFO), rr (SCHED_RR) + # scheduler-policy fifo + + ## Scheduling priority is used only for "real-time policies (fifo and rr), + ## and has to be in the range of priorities supported for a particular policy + # scheduler-priority 50 +} + +buffers { + ## Increase number of buffers allocated, needed only in scenarios with + ## large number of interfaces and worker threads. Value is per numa node. +# Default is 16384 (8192 if running unpriviledged) + buffers-per-numa 600000 + ## Size of buffer data area + ## Default is 2048 + # default data-size 2048 +} + +# dpdk { + ## Change default settings for all interfaces + # dev default { + ## Number of receive queues, enables RSS + ## Default is 1 + # num-rx-queues 3 + + ## Number of transmit queues, Default is equal + ## to number of worker threads or 1 if no workers treads + # num-tx-queues 3 + + ## Number of descriptors in transmit and receive rings + ## increasing or reducing number can impact performance + ## Default is 1024 for both rx and tx + # num-rx-desc 512 + # num-tx-desc 512 + + ## VLAN strip offload mode for interface + ## Default is off + # vlan-strip-offload on + + ## TCP Segment Offload + ## Default is off + ## To enable TSO, 'enable-tcp-udp-checksum' must be set + # tso on + + ## Devargs + ## device specific init args + ## Default is NULL + # devargs safe-mode-support=1,pipeline-mode-support=1 + # } + + ## Whitelist specific interface by specifying PCI address + # dev 0000:13:00.0 + + ## Blacklist specific device type by specifying PCI vendor:device + ## Whitelist entries take precedence + # blacklist 8086:10fb + + ## Set interface name + # dev 0000:02:00.1 { + # name eth0 + # } + + ## Whitelist specific interface by specifying PCI address and in + ## addition specify custom parameters for this interface + # dev 0000:02:00.1 { + # num-rx-queues 2 + # } + + ## Change UIO driver used by VPP, Options are: igb_uio, vfio-pci, + ## uio_pci_generic or auto (default) + # uio-driver vfio-pci + + ## Disable multi-segment buffers, improves performance but + ## disables Jumbo MTU support + # no-multi-seg + + ## Change hugepages allocation per-socket, needed only if there is need for + ## larger number of mbufs. Default is 256M on each detected CPU socket + # socket-mem 2048,2048 + + ## Disables UDP / TCP TX checksum offload. Typically needed for use + ## faster vector PMDs (together with no-multi-seg) + # no-tx-checksum-offload + + ## Enable UDP / TCP TX checksum offload + ## This is the reversed option of 'no-tx-checksum-offload' + # enable-tcp-udp-checksum +# } + + +plugins { + ## Adjusting the plugin path depending on where the VPP plugins are + path /home/ubuntu/host-stack/vpp/build-root/install-vpp_debug-native/vpp/lib/x86_64-linux-gnu/vpp_plugins:/home/ubuntu/host-stack/vpp/build-root/install-vpp_debug-native/vpp/lib/vpp_plugins:/home/ubuntu/host-stack/install/lib/vpp_plugins + ## Disable all plugins by default and then selectively enable specific plugins + plugin default { enable } + plugin dpdk_plugin.so { disable } + plugin hicn_plugin.so { enable } +# plugin hicn_plugin.so { enable } + + + ## Enable all plugins by default and then selectively disable specific plugins + # plugin dpdk_plugin.so { disable } + # plugin acl_plugin.so { disable } +} + +## Statistics Segment +# statseg { + # socket-name , name of the stats segment socket + # defaults to /run/vpp/stats.sock + # size [KMG], size of the stats segment, defaults to 32mb + # per-node-counters on | off, defaults to none + # update-interval , sets the segment scrape / update interval +# } + +#hicn { +# pit-size 2000000 +# cs-size 1000000 +# cs-reserved-app 10 +#} + +session { evt_qs_memfd_seg } +socksvr { socket-name /tmp/vpp-api.sock} +tcp {cc-algo cubic} diff --git a/hicn-plugin/src/host_stack/testbed/startup-server.conf b/hicn-plugin/src/host_stack/testbed/startup-server.conf new file mode 100644 index 000000000..46fc220d8 --- /dev/null +++ b/hicn-plugin/src/host_stack/testbed/startup-server.conf @@ -0,0 +1,189 @@ + +unix { + nodaemon + interactive + log /var/log/vpp/vpp.log + full-coredump + cli-listen /run/vpp/cli.sock + gid vpp + startup-config /home/ubuntu/host-stack/vpp/testbed/server-startup.txt +} + +api-trace { +## This stanza controls binary API tracing. Unless there is a very strong reason, +## please leave this feature enabled. + on +## Additional parameters: +## +## To set the number of binary API trace records in the circular buffer, configure nitems +## +## nitems +## +## To save the api message table decode tables, configure a filename. Results in /tmp/ +## Very handy for understanding api message changes between versions, identifying missing +## plugins, and so forth. +## +## save-api-table +} + +api-segment { + gid vpp +} + +socksvr { + default +} + +cpu { + ## In the VPP there is one main thread and optionally the user can create worker(s) + ## The main thread and worker thread(s) can be pinned to CPU core(s) manually or automatically + + ## Manual pinning of thread(s) to CPU core(s) + + ## Set logical CPU core where main thread runs, if main core is not set + ## VPP will use core 1 if available + main-core 2 + + ## Set logical CPU core(s) where worker threads are running + # corelist-workers 2-3,18-19 + + ## Automatic pinning of thread(s) to CPU core(s) + + ## Sets number of CPU core(s) to be skipped (1 ... N-1) + ## Skipped CPU core(s) are not used for pinning main thread and working thread(s). + ## The main thread is automatically pinned to the first available CPU core and worker(s) + ## are pinned to next free CPU core(s) after core assigned to main thread + # skip-cores 4 + + ## Specify a number of workers to be created + ## Workers are pinned to N consecutive CPU cores while skipping "skip-cores" CPU core(s) + ## and main thread's CPU core + # workers 2 + + ## Set scheduling policy and priority of main and worker threads + + ## Scheduling policy options are: other (SCHED_OTHER), batch (SCHED_BATCH) + ## idle (SCHED_IDLE), fifo (SCHED_FIFO), rr (SCHED_RR) + # scheduler-policy fifo + + ## Scheduling priority is used only for "real-time policies (fifo and rr), + ## and has to be in the range of priorities supported for a particular policy + # scheduler-priority 50 +} + +buffers { + ## Increase number of buffers allocated, needed only in scenarios with + ## large number of interfaces and worker threads. Value is per numa node. +# Default is 16384 (8192 if running unpriviledged) + buffers-per-numa 600000 + ## Size of buffer data area + ## Default is 2048 + # default data-size 2048 +} + +# dpdk { + ## Change default settings for all interfaces + # dev default { + ## Number of receive queues, enables RSS + ## Default is 1 + # num-rx-queues 3 + + ## Number of transmit queues, Default is equal + ## to number of worker threads or 1 if no workers treads + # num-tx-queues 3 + + ## Number of descriptors in transmit and receive rings + ## increasing or reducing number can impact performance + ## Default is 1024 for both rx and tx + # num-rx-desc 512 + # num-tx-desc 512 + + ## VLAN strip offload mode for interface + ## Default is off + # vlan-strip-offload on + + ## TCP Segment Offload + ## Default is off + ## To enable TSO, 'enable-tcp-udp-checksum' must be set + # tso on + + ## Devargs + ## device specific init args + ## Default is NULL + # devargs safe-mode-support=1,pipeline-mode-support=1 + # } + + ## Whitelist specific interface by specifying PCI address + # dev 0000:13:00.1 + + ## Blacklist specific device type by specifying PCI vendor:device + ## Whitelist entries take precedence + # blacklist 8086:10fb + + ## Set interface name + # dev 0000:02:00.1 { + # name eth0 + # } + + ## Whitelist specific interface by specifying PCI address and in + ## addition specify custom parameters for this interface + # dev 0000:02:00.1 { + # num-rx-queues 2 + # } + + ## Change UIO driver used by VPP, Options are: igb_uio, vfio-pci, + ## uio_pci_generic or auto (default) + # uio-driver vfio-pci + + ## Disable multi-segment buffers, improves performance but + ## disables Jumbo MTU support + # no-multi-seg + + ## Change hugepages allocation per-socket, needed only if there is need for + ## larger number of mbufs. Default is 256M on each detected CPU socket + # socket-mem 2048,2048 + + ## Disables UDP / TCP TX checksum offload. Typically needed for use + ## faster vector PMDs (together with no-multi-seg) + # no-tx-checksum-offload + + ## Enable UDP / TCP TX checksum offload + ## This is the reversed option of 'no-tx-checksum-offload' + # enable-tcp-udp-checksum +# } + + +plugins { + ## Adjusting the plugin path depending on where the VPP plugins are + path /home/ubuntu/host-stack/vpp/build-root/install-vpp_debug-native/vpp/lib/x86_64-linux-gnu/vpp_plugins:/home/ubuntu/host-stack/vpp/build-root/install-vpp_debug-native/vpp/lib/vpp_plugins:/home/ubuntu/host-stack/install/lib/vpp_plugins + ## Disable all plugins by default and then selectively enable specific plugins + plugin default { enable } + plugin dpdk_plugin.so { disable } + plugin hicn_plugin.so { enable } +# plugin memif_plugin.so { enable } +# plugin hicn_plugin.so { enable } + + + ## Enable all plugins by default and then selectively disable specific plugins + # plugin dpdk_plugin.so { disable } + # plugin acl_plugin.so { disable } +} + +## Statistics Segment +# statseg { + # socket-name , name of the stats segment socket + # defaults to /run/vpp/stats.sock + # size [KMG], size of the stats segment, defaults to 32mb + # per-node-counters on | off, defaults to none + # update-interval , sets the segment scrape / update interval +# } + +#hicn { +# pit-size 2000000 +# cs-size 1000000 +# cs-reserved-app 10 +#} + +session { evt_qs_memfd_seg } +socksvr { socket-name /tmp/vpp-api.sock} +tcp {cc-algo cubic} diff --git a/hicn-plugin/src/host_stack/testbed/test_hicn_hs.txt b/hicn-plugin/src/host_stack/testbed/test_hicn_hs.txt new file mode 100644 index 000000000..73a5b15f5 --- /dev/null +++ b/hicn-plugin/src/host_stack/testbed/test_hicn_hs.txt @@ -0,0 +1,6 @@ +hicn hs set local prefix b001::/8 +test hicn hs server uri hicn://b001::/64 +test hicn hs client uri hicn://b001::1/64 + + +b hicn_hs.c:772 if ctx->snd_nxt == 46604 \ No newline at end of file diff --git a/hicn-plugin/src/host_stack/testbed/vcl.conf b/hicn-plugin/src/host_stack/testbed/vcl.conf new file mode 100644 index 000000000..694a3e3a1 --- /dev/null +++ b/hicn-plugin/src/host_stack/testbed/vcl.conf @@ -0,0 +1,7 @@ +vcl { + rx-fifo-size 4000000 + tx-fifo-size 4000000 + app-scope-local + app-scope-global + api-socket-name /tmp/vpp-api.sock +} \ No newline at end of file -- cgit 1.2.3-korg