Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[dpapp] add data plane app target #607

Merged
merged 6 commits into from
Aug 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 104 additions & 2 deletions dash-pipeline/Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
SHELL = /bin/bash

HAVE_DPAPP ?=
ifeq ($(HAVE_DPAPP),y)
DPAPP_LINK = veth4
DPAPP_LINK_PEER = veth5
SWITCH_PORT_DPAPP = --interface 2@$(DPAPP_LINK)
endif

mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
mkfile_dir := $(dir $(mkfile_path))

Expand Down Expand Up @@ -64,6 +71,10 @@ include dockerfiles/DOCKER_SAI_CHALLENGER_CLIENT_BLDR_IMG.env
# SAIChallenger Client image built locally with saithrift client libs + PTF & Pytest frameworks
DOCKER_SAI_CHALLENGER_CLIENT_IMG ?= local/dash-saichallenger-client:latest

# Run/compile dpapp
# include file defines DOCKER_DPAPP_IMG
include dockerfiles/DOCKER_DPAPP_IMG.env

# Set differently in CI scripts as needed, e.g. run switch container in -d mode
DOCKER_FLAGS ?=-it

Expand Down Expand Up @@ -251,6 +262,53 @@ run-saithrift-bldr-bash:
$(DOCKER_RUN_SAITHRIFT_BLDR) \
/bin/bash

######################################
# bmv2 date-plane app TARGETS
######################################
DOCKER_RUN_DPAPP = docker run\
$(DOCKER_FLAGS) \
-v $(PWD)/bmv2:/bmv2 \
-v $(PWD)/$(P4_OUTDIR)/dash_pipeline.json:/etc/dash/dash_pipeline.json \
-v $(PWD)/$(P4_OUTDIR)/dash_pipeline_p4rt.txt:/etc/dash/dash_pipeline_p4rt.txt \
-v $(PWD)/SAI:/SAI \
-v $(PWD)/tests:/tests \
-v $(PWD)/../:/dash \
--network=host \
-u $(HOST_USER):$(HOST_GROUP) \
--rm \

.PHONY:dpapp dpapp-clean
dpapp-clean:
$(DOCKER_RUN_DPAPP) \
--name dash-dpapp-$(USER) \
-w /dash/dash-pipeline/dpapp $(DOCKER_DPAPP_IMG) \
make clean

dpapp:
@echo "Compile dpapp for date-plane app ..."
$(DOCKER_RUN_DPAPP) \
--name dash-dpapp-$(USER) \
-w /dash/dash-pipeline/dpapp $(DOCKER_DPAPP_IMG) \
make

run-dpapp-bash:
$(DOCKER_RUN_DPAPP) \
--privileged \
--name dash-dpapp-$(USER) \
-w /dash/dash-pipeline/dpapp $(DOCKER_DPAPP_IMG) \
/bin/bash

run-dpapp: $(DPAPP_LINK)
$(DOCKER_RUN_DPAPP) \
--privileged \
-u root \
--name dash-dpapp-$(USER) \
-w /dash/dash-pipeline/dpapp $(DOCKER_DPAPP_IMG) \
env HOST_INTERFACE=$(DPAPP_LINK_PEER) ./dpapp.sh startup.conf

kill-dpapp:
-docker kill dash-dpapp-$(USER)

######################################
# P4 Behavioral-model (switch) TARGETS
######################################
Expand All @@ -267,6 +325,7 @@ run-switch: network
simple_switch_grpc \
--interface 0@veth0 \
--interface 1@veth2 \
$(SWITCH_PORT_DPAPP) \
--log-console \
--no-p4

Expand Down Expand Up @@ -621,11 +680,40 @@ docker-publish-dash-grpc:
docker push $(DOCKER_GRPC_IMG)
[ -n $(DOCKER_GRPC_IMG_CTAG) ] && docker push $(DOCKER_GRPC_IMG_NAME):$(DOCKER_GRPC_IMG_CTAG)

###############################

DOCKER_DPAPP_IMG_TAG = $(shell cat dockerfiles/Dockerfile.dpapp | $(SHA1SUM))
DOCKER_DPAPP_IMG = $(DOCKER_DPAPP_IMG_NAME):$(DOCKER_DPAPP_IMG_TAG)

docker-dash-dpapp:
{ [ x$(ENABLE_DOCKER_PULL) == xy ] && docker pull $(DOCKER_DPAPP_IMG); } || \
docker build \
-f dockerfiles/Dockerfile.dpapp \
-t $(DOCKER_DPAPP_IMG) \
--build-arg user=$(DASH_USER) \
--build-arg group=$(DASH_GROUP) \
--build-arg uid=$(DASH_UID) \
--build-arg guid=$(DASH_GUID) \
--build-arg hostname=$(DASH_HOST) \
--build-arg available_processors=$(shell nproc) \
dockerfiles
[ -n $(DOCKER_DPAPP_IMG_CTAG) ] && \
docker tag $(DOCKER_DPAPP_IMG) $(DOCKER_DPAPP_IMG_NAME):$(DOCKER_DPAPP_IMG_CTAG)

docker-pull-dash-dpapp:
docker pull $(DOCKER_DPAPP_IMG)

docker-publish-dash-dpapp:
@echo "Publish $(DOCKER_DPAPP_IMG) - requires credentials, can only do from DASH repo, not a fork"
docker push $(DOCKER_DPAPP_IMG)
[ -n $(DOCKER_DPAPP_IMG_CTAG) ] && \
docker push $(DOCKER_DPAPP_IMG_NAME):$(DOCKER_DPAPP_IMG_CTAG)

###############################
# BMV2-PKTGEN NETWORKING TARGETS
###############################

network:veth0 veth2 disable-ipv6
network:veth0 veth2 $(DPAPP_LINK) disable-ipv6

veth0: /sys/class/net/veth0
/sys/class/net/veth0:
Expand All @@ -644,13 +732,27 @@ veth2: /sys/class/net/veth2
sudo ip link set veth2 mtu 9500
sudo ip link set veth3 mtu 9500

ifeq ($(HAVE_DPAPP),y)
$(DPAPP_LINK): /sys/class/net/$(DPAPP_LINK)
/sys/class/net/$(DPAPP_LINK):
sudo ip link add name $(DPAPP_LINK) type veth peer name $(DPAPP_LINK_PEER)
sudo ip link set dev $(DPAPP_LINK) up
sudo ip link set dev $(DPAPP_LINK_PEER) up
sudo ip link set $(DPAPP_LINK) mtu 9500
sudo ip link set $(DPAPP_LINK_PEER) mtu 9500
endif

disable-ipv6:
./disable_veth_ipv6.sh
DPAPP_LINK=$(DPAPP_LINK) DPAPP_LINK_PEER=$(DPAPP_LINK_PEER) ./disable_veth_ipv6.sh

# Delete veth's, test existence to avoid needless use of sudo
network-clean:
@-([ -e /sys/class/net/veth0 ] && sudo ip link delete dev veth0 && echo "Deleted veth0/1") || echo "No veth0, not deleting"
@-([ -e /sys/class/net/veth2 ] && sudo ip link delete dev veth2 && echo "Deleted veth2/3") || echo "No veth2, not deleting"
ifeq ($(HAVE_DPAPP),y)
@-([ -e /sys/class/net/$(DPAPP_LINK) ] && sudo ip link delete dev $(DPAPP_LINK) \
&& echo "Deleted $(DPAPP_LINK)") || echo "No $(DPAPP_LINK), not deleting"
endif

###############################
# IXIA-C TARGETS
Expand Down
14 changes: 14 additions & 0 deletions dash-pipeline/disable_veth_ipv6.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,17 @@ sudo sysctl net.ipv6.conf.veth3.autoconf=0
sudo sysctl net.ipv6.conf.veth3.accept_ra=0
sudo sysctl net.ipv6.conf.veth3.accept_ra_pinfo=0
sudo sysctl net.ipv6.conf.veth3.router_solicitations=0

if [ $DPAPP_LINK ]; then
sudo sysctl net.ipv6.conf.$DPAPP_LINK.autoconf=0
sudo sysctl net.ipv6.conf.$DPAPP_LINK.accept_ra=0
sudo sysctl net.ipv6.conf.$DPAPP_LINK.accept_ra_pinfo=0
sudo sysctl net.ipv6.conf.$DPAPP_LINK.router_solicitations=0
fi
if [ $DPAPP_LINK_PEER ]; then
sudo sysctl net.ipv6.conf.$DPAPP_LINK_PEER.disable_ipv6=1
sudo sysctl net.ipv6.conf.$DPAPP_LINK_PEER.autoconf=0
sudo sysctl net.ipv6.conf.$DPAPP_LINK_PEER.accept_ra=0
sudo sysctl net.ipv6.conf.$DPAPP_LINK_PEER.accept_ra_pinfo=0
sudo sysctl net.ipv6.conf.$DPAPP_LINK_PEER.router_solicitations=0
fi
5 changes: 5 additions & 0 deletions dash-pipeline/dockerfiles/DOCKER_DPAPP_IMG.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Define docker image repo/name:tag
# Changing this will cause build/publish to occur in CI actions
export DASH_ACR_REGISTRY=sonicdash.azurecr.io
export DOCKER_DPAPP_IMG_NAME?=${DASH_ACR_REGISTRY}/dash-dpapp-bldr
export DOCKER_DPAPP_IMG_CTAG?=240827
86 changes: 86 additions & 0 deletions dash-pipeline/dockerfiles/Dockerfile.dpapp
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# This Dockerfile builds an image used to compile/run dash date-plane app.
FROM sonicdash.azurecr.io/dash-grpc:1.43.2 as grpc
FROM p4lang/behavioral-model@sha256:ce45720e28a96a50f275c1b511cd84c2558b62f2cf7a7e506765183bc3fb2e32
LABEL maintainer="SONIC-DASH Community"
LABEL description="DASH date-plane app using vpp"

# Configure make to run as many parallel jobs as cores available
ARG available_processors
ARG MAKEFLAGS=-j$available_processors

ARG sswitch_grpc=yes
ARG CC=gcc
ARG CXX=g++
# Set TZ to avoid interactive installer
ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV GIT_SSL_NO_VERIFY=true

RUN apt-get update && \
apt-get install -y --no-install-recommends \
git \
build-essential \
autoconf \
libtool \
libtool-bin \
pkg-config \
patchelf \
sudo \
iproute2 net-tools iputils-ping \
make

## Install vpp
RUN apt-get install -y curl
RUN curl -s https://packagecloud.io/install/repositories/fdio/release/script.deb.sh | bash -x
RUN apt-get update && \
apt-get install -y --no-install-recommends \
vpp vpp-plugin-core vpp-plugin-dpdk vpp-dbg vpp-dev

# vpp development environment
RUN echo "wireshark-common wireshark-common/install-setuid boolean true" | debconf-set-selections
WORKDIR /var
RUN (git clone https://gerrit.fd.io/r/vpp && \
cd vpp && UNATTENDED=y make install-dep)


WORKDIR /usr/local/lib/

# Copy libabsl .a files from p4pi, make shared lib for our use and delete .a's
COPY --from=grpc /usr/local/lib/lib*grpc*.so* \
/usr/local/lib/libabsl*.so* \
/usr/local/lib/libgpr*.so* \
/usr/local/lib/libupb*.so* \
/usr/local/lib/libre2*.so* \
/usr/local/lib/libaddress_sorting*.so* \
/usr/local/lib/libssl*.so* \
/usr/local/lib/libcrypto*.so* \
./

# Specify dash sai libs dependency on vpp
RUN patchelf --set-rpath /SAI/lib /usr/bin/vpp
RUN patchelf --add-needed libsai.so \
--add-needed libprotobuf.so \
--add-needed libpiprotobuf.so \
--add-needed libpiprotogrpc.so \
--add-needed libgrpc++.so.1.43 \
/usr/bin/vpp
RUN ldconfig

WORKDIR /

ARG user
ARG uid
ARG group
ARG guid
ARG hostname

ENV BUILD_HOSTNAME $hostname
ENV USER $user

RUN groupadd -f -r -g $guid $group
RUN useradd $user -l -u $uid -g $guid -d /var/$user -m -s /bin/bash
RUN echo "$user ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers

USER $user

CMD /bin/bash
Loading