Skip to content

Commit

Permalink
Add generic SAI Thrift server (#203)
Browse files Browse the repository at this point in the history
Signed-off-by: Yurii Lisovskyi <[email protected]>
  • Loading branch information
yuriilisovskyi authored Oct 3, 2023
1 parent 424897e commit 1f0699b
Show file tree
Hide file tree
Showing 8 changed files with 228 additions and 3 deletions.
11 changes: 11 additions & 0 deletions .github/workflows/sc-client-server-deb10.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ env:
DOCKER_CLIENT: 'dockerfiles/buster/Dockerfile.client'
DOCKER_SERVER_BASE: 'dockerfiles/buster/Dockerfile.server'
DOCKER_SERVER: 'npu/broadcom/BCM56850/saivs/Dockerfile.server'
DOCKER_THRIFT_SERVER: 'dockerfiles/buster/Dockerfile.saithrift-server'
REDIS_CLIENT: 0
REDIS_SERVER: 0
THRIFT_SERVER: 0


jobs:
Expand Down Expand Up @@ -54,6 +56,11 @@ jobs:
echo "REDIS_SERVER=1" >> $GITHUB_ENV
fi
done
for file in "$DOCKER_THRIFT_SERVER" "sai.env"; do
if [[ "${{ steps.check_changes.outputs.changed_files }}" == *"$file"* ]]; then
echo "THRIFT_SERVER=1" >> $GITHUB_ENV
fi
done
- name: Build server Docker image
run: ./build.sh -i server -o deb10
Expand All @@ -70,6 +77,10 @@ jobs:
with:
name: Server Image
path: sc-server.tar

- name: Build Thrift server Docker image
run: ./build.sh -i server -o deb10 -s thrift
if: ${{ env.THRIFT_SERVER == '1' }}

build-sc-client:
name: Build SAI Challenger client image
Expand Down
11 changes: 11 additions & 0 deletions .github/workflows/sc-client-server-deb11.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ env:
DOCKER_CLIENT: 'dockerfiles/bullseye/Dockerfile.client'
DOCKER_SERVER_BASE: 'dockerfiles/bullseye/Dockerfile.server'
DOCKER_SERVER: 'npu/broadcom/BCM56850/saivs/Dockerfile.server'
DOCKER_THRIFT_SERVER: 'dockerfiles/buster/Dockerfile.saithrift-server'
REDIS_CLIENT: 0
REDIS_SERVER: 0
THRIFT_SERVER: 0

jobs:
build-sc-server:
Expand All @@ -53,6 +55,11 @@ jobs:
echo "REDIS_SERVER=1" >> $GITHUB_ENV
fi
done
for file in "$DOCKER_THRIFT_SERVER" "sai.env"; do
if [[ "${{ steps.check_changes.outputs.changed_files }}" == *"$file"* ]]; then
echo "THRIFT_SERVER=1" >> $GITHUB_ENV
fi
done
- name: Build server Docker image
run: ./build.sh -i server -o deb11
Expand All @@ -70,6 +77,10 @@ jobs:
name: Server Image
path: sc-server.tar

- name: Build Thrift server Docker image
run: ./build.sh -i server -o deb11 -s thrift
if: ${{ env.THRIFT_SERVER == '1' }}

build-sc-client:
name: Build SAI Challenger client image
runs-on: ubuntu-20.04
Expand Down
13 changes: 11 additions & 2 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -149,13 +149,18 @@ if [ "${IMAGE_TYPE}" = "standalone" ]; then
elif [ "${IMAGE_TYPE}" = "server" ]; then
find ${ASIC_PATH}/../ -type f -name \*.py -exec install -D {} .build/{} \;
find ${ASIC_PATH}/../ -type f -name \*.json -exec install -D {} .build/{} \;
docker build -f dockerfiles/${BASE_OS}/Dockerfile.server -t sc-server-base:${BASE_OS} .
if [ "${SAI_INTERFACE}" = "thrift" ]; then
docker build -f dockerfiles/${BASE_OS}/Dockerfile.saithrift-server -t sc-thrift-server-base:${BASE_OS} .
else
docker build -f dockerfiles/${BASE_OS}/Dockerfile.server -t sc-server-base:${BASE_OS} .
fi
rm -rf .build/
else
docker build -f dockerfiles/${BASE_OS}/Dockerfile.client --build-arg NOSNAPPI=${NOSNAPPI} -t sc-client:${BASE_OS} .
if [ "${SAI_INTERFACE}" = "thrift" ]; then
docker build -f dockerfiles/${BASE_OS}/Dockerfile.saithrift-client -t sc-thrift-client:${BASE_OS} .
fi
exit 0
fi

# Build target Docker image
Expand All @@ -168,6 +173,10 @@ if [ "${IMAGE_TYPE}" = "standalone" ]; then
docker build -f Dockerfile --build-arg BASE_OS=${BASE_OS} -t sc-${IMG_NAME}:${BASE_OS} .
fi
elif [ "${IMAGE_TYPE}" = "server" ]; then
docker build -f Dockerfile.server --build-arg BASE_OS=${BASE_OS} -t sc-server-${IMG_NAME}:${BASE_OS} .
if [ "${SAI_INTERFACE}" = "thrift" ]; then
docker build -f Dockerfile.saithrift-server --build-arg BASE_OS=${BASE_OS} -t sc-thrift-server-${IMG_NAME}:${BASE_OS} .
else
docker build -f Dockerfile.server --build-arg BASE_OS=${BASE_OS} -t sc-server-${IMG_NAME}:${BASE_OS} .
fi
fi
popd
32 changes: 32 additions & 0 deletions configs/server/supervisord.conf.thrift
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
[supervisord]
logfile_maxbytes=1MB
logfile_backups=2
nodaemon=true

[eventlistener:dependent-startup]
command=python3 -m supervisord_dependent_startup
autostart=true
autorestart=unexpected
startretries=0
exitcodes=0,3
events=PROCESS_STATE
buffer_size=1024

[program:rsyslogd]
command=/usr/sbin/rsyslogd -n -iNONE
priority=1
autostart=false
autorestart=false
stdout_logfile=syslog
stderr_logfile=syslog
dependent_startup=true

[program:saiserver]
command=/usr/sbin/saiserver -f /usr/share/sonic/hwsku/port_config.ini -p /usr/share/sonic/hwsku/sai.profile
priority=3
autostart=true
autorestart=true
stdout_logfile=syslog
stderr_logfile=syslog
dependent_startup_wait_for=rsyslogd:running

79 changes: 79 additions & 0 deletions dockerfiles/bullseye/Dockerfile.saithrift-server
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
FROM debian:buster-slim

## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive

COPY sai.env /

# Install generic packages
RUN apt-get -o Acquire::Check-Valid-Until=false update && apt-get install -y \
apt-utils \
vim \
curl \
wget \
iproute2 \
unzip \
git \
procps \
build-essential \
graphviz \
doxygen \
aspell \
python3-pip \
rsyslog \
supervisor

# Add support for supervisord to handle startup dependencies
RUN pip3 install supervisord-dependent-startup==1.4.0

# Install generic packages
RUN apt-get install -y \
libtemplate-perl \
libconst-fast-perl \
libmoosex-aliases-perl \
libnamespace-autoclean-perl \
libgetopt-long-descriptive-perl \
aspell-en bison flex g++ \
libboost-all-dev libevent-dev libssl-dev \
libpython3-dev libpcap-dev

WORKDIR /sai

RUN apt-get install -y pkg-config \
&& wget "http://archive.apache.org/dist/thrift/0.11.0/thrift-0.11.0.tar.gz" \
&& tar -xf thrift-0.11.0.tar.gz \
&& cd thrift-0.11.0 \
&& ./bootstrap.sh \
&& ./configure --prefix=/usr --with-cpp --with-python \
--with-qt4=no --with-qt5=no --with-csharp=no --with-java=no --with-erlang=no \
--with-nodejs=no --with-lua=no --with-per=no --with-php=no --with-dart=no \
--with-ruby=no --with-haskell=no --with-go=no --with-rs=no --with-haxe=no \
--with-dotnetcore=no --with-d=no \
&& make && make install \
&& pip3 install ctypesgen lib/py \
&& cd /sai \
&& rm -rf thrift-0.11.0 thrift-0.11.0.tar.gz ;

ENV SAITHRIFTV2=y
ENV GEN_SAIRPC_OPTS="-cve"
ENV SAIRPC_EXTRA_LIBS="-L/usr/local/lib/ -lpthread"

RUN git clone https://github.com/opencomputeproject/SAI.git \
&& cd SAI && git fetch origin \
&& . /sai.env \
&& git checkout ${SAI_ID} \
&& cd meta \
&& make all libsaimetadata.so libsai.so \
&& cp libsaimetadata.so /usr/lib \
&& cp libsai.so /usr/lib \
&& cd .. \
&& mkdir /usr/include/sai/ \
&& cp ./inc/sai*.h /usr/include/sai/ \
&& cp ./experimental/sai*.h /usr/include/sai/ \
&& make saithrift-install

WORKDIR /sai-challenger

COPY configs/server/supervisord.conf.thrift /etc/supervisor/conf.d/supervisord.conf

CMD ["/usr/bin/supervisord"]
73 changes: 73 additions & 0 deletions dockerfiles/buster/Dockerfile.saithrift-server
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
FROM debian:buster-slim

RUN echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian/ buster main contrib non-free" >> /etc/apt/sources.list && \
echo "deb-src [arch=amd64] http://debian-archive.trafficmanager.net/debian/ buster main contrib non-free" >> /etc/apt/sources.list && \
echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ buster/updates main contrib non-free" >> /etc/apt/sources.list && \
echo "deb-src [arch=amd64] http://debian-archive.trafficmanager.net/debian-security/ buster/updates main contrib non-free" >> /etc/apt/sources.list && \
echo "deb [arch=amd64] http://debian-archive.trafficmanager.net/debian buster-backports main" >> /etc/apt/sources.list

## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive

COPY sai.env /

# Install generic packages
RUN apt-get -o Acquire::Check-Valid-Until=false update && apt-get install -y \
apt-utils \
vim \
curl \
wget \
iproute2 \
unzip \
git \
procps \
build-essential \
graphviz \
doxygen \
aspell \
python3-pip \
rsyslog \
supervisor

# Add support for supervisord to handle startup dependencies
RUN pip3 install supervisord-dependent-startup==1.4.0

# Install generic packages
RUN apt-get install -y \
libtemplate-perl \
libconst-fast-perl \
libmoosex-aliases-perl \
libnamespace-autoclean-perl \
libgetopt-long-descriptive-perl \
aspell-en bison flex g++ \
libboost-all-dev libevent-dev libssl-dev \
libpython3-dev libpcap-dev

WORKDIR /sai

RUN apt-get install -y thrift-compiler libthrift-dev libthrift-0.11.0 \
&& pip3 install ctypesgen thrift==0.11.0 ;

ENV SAITHRIFTV2=y
ENV GEN_SAIRPC_OPTS="-cve"
ENV SAIRPC_EXTRA_LIBS="-L/usr/local/lib/ -lpthread"

RUN git clone https://github.com/opencomputeproject/SAI.git \
&& cd SAI && git fetch origin \
&& . /sai.env \
&& git checkout ${SAI_ID} \
&& cd meta \
&& make all libsaimetadata.so libsai.so \
&& cp libsaimetadata.so /usr/lib \
&& cp libsai.so /usr/lib \
&& cd .. \
&& mkdir /usr/include/sai/ \
&& cp ./inc/sai*.h /usr/include/sai/ \
&& cp ./experimental/sai*.h /usr/include/sai/ \
&& make saithrift-install

WORKDIR /sai-challenger

COPY configs/server/supervisord.conf.thrift /etc/supervisor/conf.d/supervisord.conf

CMD ["/usr/bin/supervisord"]
10 changes: 10 additions & 0 deletions npu/broadcom/BCM56850/saivs/Dockerfile.saithrift-server
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
ARG BASE_OS
FROM sc-thrift-server-base:$BASE_OS

COPY configs/sai.profile /usr/share/sonic/hwsku/
COPY configs/port_config.ini /usr/share/sonic/hwsku/
COPY configs/lanemap.ini /usr/share/sonic/hwsku/

WORKDIR /

CMD ["/usr/bin/supervisord"]
2 changes: 1 addition & 1 deletion run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ if [ "${IMAGE_TYPE}" = "standalone" ]; then
IMG_NAME=$(echo "${PREFIX}-${ASIC_TYPE}-${TARGET}" | tr '[:upper:]' '[:lower:]')
OPTS="$OPTS -v $(pwd):/sai-challenger"
elif [ "${IMAGE_TYPE}" = "server" ]; then
IMG_NAME=$(echo "sc-server-${ASIC_TYPE}-${TARGET}" | tr '[:upper:]' '[:lower:]')
IMG_NAME=$(echo "${PREFIX}-server-${ASIC_TYPE}-${TARGET}" | tr '[:upper:]' '[:lower:]')
else
IMG_NAME=${PREFIX}-client
OPTS="$OPTS -v $(pwd):/sai-challenger"
Expand Down

0 comments on commit 1f0699b

Please sign in to comment.