[gearbox] Add gbsyncd container for Credo gearbox chips (#8144)

This change is to add a gbsyncd container to accommodate the syncd process and the SAI libraries for the Credo gearbox chips.

How I did it
This container works similar to the existing Broadcom syncd container. Its main difference is that the SAI-related dynamic libraries are replaced by the ones for Credo gearbox chips, and the container only reacts to SAI events for the gearbox chips. The SAI libraries will be provided by the package libsai-credo_1.0_amd64.deb.

For the image build, the added container will be built and included in the Broadcom platform image, after $(LIBSAI_CREDO)_URL = is replaced to the correct value. For now, as $(LIBSAI_CREDO)_URL is empty, the container build is skipped in the image build.

After the container is included in the image, in the runtime, the container will begin with checking the existence of /usr/share/sonic/hwsku/gearbox_config.json; if that file is not provided, the container will exit by itself. Therefore, for platforms unrelated to the Credo chips, as long as they are not providing the file, they will not be affected by this change.
This commit is contained in:
byu343 2021-08-04 16:05:53 -07:00 committed by GitHub
parent e5a64463fd
commit 2fccf0661a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 177 additions and 5 deletions

View File

@ -0,0 +1 @@
gbsyncd.service.j2

View File

@ -1,5 +1,5 @@
[Unit]
Description=gbsyncd service
Description={{docker_container_name}} service
Requires=database.service updategraph.service
ConditionPathExists=!/usr/share/sonic/hwsku/gearbox_config.json
After=database.service updategraph.service
@ -12,6 +12,8 @@ Before=ntp-config.service
[Service]
User=root
Environment=sonic_asic_platform={{ sonic_asic_platform }}
Environment=gbsyncd_platform={{ docker_container_name }}
ExecCondition=/usr/bin/gbsyncd-platform.sh
ExecStartPre=/usr/local/bin/gbsyncd.sh start
ExecStart=/usr/local/bin/gbsyncd.sh wait
ExecStop=/usr/local/bin/gbsyncd.sh stop

View File

@ -794,6 +794,7 @@ sudo LANG=C cp $SCRIPTS_DIR/swss.sh $FILESYSTEM_ROOT/usr/local/bin/swss.sh
sudo LANG=C cp $SCRIPTS_DIR/syncd.sh $FILESYSTEM_ROOT/usr/local/bin/syncd.sh
sudo LANG=C cp $SCRIPTS_DIR/syncd_common.sh $FILESYSTEM_ROOT/usr/local/bin/syncd_common.sh
sudo LANG=C cp $SCRIPTS_DIR/gbsyncd.sh $FILESYSTEM_ROOT/usr/local/bin/gbsyncd.sh
sudo LANG=C cp $SCRIPTS_DIR/gbsyncd-platform.sh $FILESYSTEM_ROOT/usr/bin/gbsyncd-platform.sh
sudo LANG=C cp $SCRIPTS_DIR/bgp.sh $FILESYSTEM_ROOT/usr/local/bin/bgp.sh
sudo LANG=C cp $SCRIPTS_DIR/teamd.sh $FILESYSTEM_ROOT/usr/local/bin/teamd.sh
sudo LANG=C cp $SCRIPTS_DIR/lldp.sh $FILESYSTEM_ROOT/usr/local/bin/lldp.sh

View File

@ -0,0 +1,27 @@
#!/bin/bash
# Check the gbsyncd platform defined on the device matching the service,
# or otherwise skip starting the service
SERVICE="$gbsyncd_platform"
PLATFORM=${PLATFORM:-`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform`}
DEVPATH="/usr/share/sonic/device"
CONFIGFILE="${DEVPATH}/${PLATFORM}/gbsyncd.ini"
if [ ! -f "$CONFIGFILE" ]; then
if [ gbsyncd = "$SERVICE" ]; then
exit 0
fi
exit 1
fi
while IFS="=" read -r key value; do
case "$key" in
platform)
if [ "$value" = "$SERVICE" ]; then
exit 0
fi
;;
esac
done < "$CONFIGFILE"
exit 1

View File

@ -21,10 +21,10 @@ function stopplatform2() {
OP=$1
DEV=$2
SERVICE="gbsyncd"
SERVICE="$gbsyncd_platform"
PEER="swss"
DEBUGLOG="/tmp/swss-gbsyncd-debug$DEV.log"
LOCKFILE="/tmp/swss-gbsyncd-lock$DEV"
DEBUGLOG="/tmp/swss-$SERVICE-debug$DEV.log"
LOCKFILE="/tmp/swss-$SERVICE-lock$DEV"
NAMESPACE_PREFIX="asic"
if [ "$DEV" ]; then
NET_NS="$NAMESPACE_PREFIX$DEV" #name of the network namespace

View File

@ -27,3 +27,4 @@ include $(PLATFORM_PATH)/one-aboot.dep
include $(PLATFORM_PATH)/libsaithrift-dev.dep
include $(PLATFORM_PATH)/docker-syncd-brcm-dnx.dep
include $(PLATFORM_PATH)/docker-syncd-brcm-dnx-rpc.dep
include $(PLATFORM_PATH)/../components/docker-gbsyncd-credo.dep

View File

@ -27,6 +27,7 @@ include $(PLATFORM_PATH)/one-aboot.mk
include $(PLATFORM_PATH)/libsaithrift-dev.mk
include $(PLATFORM_PATH)/docker-syncd-brcm-dnx.mk
include $(PLATFORM_PATH)/docker-syncd-brcm-dnx-rpc.mk
include $(PLATFORM_PATH)/../components/docker-gbsyncd-credo.mk
BCMCMD = bcmcmd
$(BCMCMD)_URL = "https://sonicstorage.blob.core.windows.net/packages/20190307/bcmcmd?sv=2015-04-05&sr=b&sig=sUdbU7oVbh5exbXXHVL5TDFBTWDDBASHeJ8Cp0B0TIc%3D&se=2038-05-06T22%3A34%3A19Z&sp=r"

View File

@ -0,0 +1,12 @@
DPATH := $($(DOCKER_GBSYNCD_BASE)_PATH)
DEP_FILES := $(SONIC_COMMON_FILES_LIST)
DEP_FILES += platform/components/docker-gbsyncd-credo.mk
DEP_FILES += platform/components/docker-gbsyncd-credo.dep
DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST)
DEP_FILES += $(shell git ls-files $(DPATH))
$(DOCKER_GBSYNCD_BASE)_CACHE_MODE := GIT_CONTENT_SHA
$(DOCKER_GBSYNCD_BASE)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST)
$(DOCKER_GBSYNCD_BASE)_DEP_FILES := $(DEP_FILES)
$(eval $(call add_dbg_docker,$(DOCKER_GBSYNCD_BASE),$(DOCKER_GBSYNCD_BASE_DBG)))

View File

@ -0,0 +1,14 @@
DOCKER_GBSYNCD_PLATFORM_CODE = credo
LIBSAI_CREDO = libsaicredo_0.5.1-alpha.2_amd64.deb
$(LIBSAI_CREDO)_URL =
LIBSAI_CREDO_OWL = libsaicredo-owl_0.5.1-alpha.2_amd64.deb
$(LIBSAI_CREDO_OWL)_URL =
ifneq ($($(LIBSAI_CREDO)_URL),)
include $(PLATFORM_PATH)/../template/docker-gbsyncd-base.mk
$(DOCKER_GBSYNCD_BASE)_CONTAINER_NAME = gbsyncd-$(DOCKER_GBSYNCD_PLATFORM_CODE)
$(DOCKER_GBSYNCD_BASE)_PATH = $(PLATFORM_PATH)/../components/docker-gbsyncd-$(DOCKER_GBSYNCD_PLATFORM_CODE)
SONIC_ONLINE_DEBS += $(LIBSAI_CREDO) $(LIBSAI_CREDO_OWL)
$(DOCKER_GBSYNCD_BASE)_DEPENDS += $(SYNCD) $(LIBSAI_CREDO) $(LIBSAI_CREDO_OWL)
endif

View File

@ -0,0 +1,40 @@
FROM docker-config-engine-buster
ARG docker_container_name
RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf
## Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -f -y iproute2 libcap2-bin libprotobuf-dev
COPY \
{% for deb in docker_gbsyncd_credo_debs.split(' ') -%}
{% if 'libsaibcm' not in deb -%}
debs/{{ deb }}{{' '}}
{%- endif %}
{%- endfor -%}
debs/
RUN dpkg -i \
{% for deb in docker_gbsyncd_credo_debs.split(' ') -%}
{% if 'libsaibcm' not in deb -%}
debs/{{ deb }}{{' '}}
{%- endif %}
{%- endfor %}
COPY ["docker-init.sh", "/usr/bin/"]
COPY ["start.sh", "/usr/bin/"]
COPY ["critical_processes.j2", "/usr/share/sonic/templates"]
COPY ["supervisord.conf.j2", "/usr/share/sonic/templates"]
COPY ["files/supervisor-proc-exit-listener", "/usr/bin"]
## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /debs
ENTRYPOINT ["/usr/bin/docker-init.sh"]

View File

@ -0,0 +1 @@
program:syncd

View File

@ -0,0 +1,16 @@
#! /bin/sh
GB_CONFIG=/usr/share/sonic/hwsku/gearbox_config.json
if [ ! -f $GB_CONFIG ]; then
exit 0
fi
CFGGEN_ARG="-j $GB_CONFIG"
mkdir -p /etc/supervisor/conf.d/
sonic-cfggen $CFGGEN_ARG -t /usr/share/sonic/templates/supervisord.conf.j2 > /etc/supervisor/conf.d/supervisord.conf
sonic-cfggen $CFGGEN_ARG -t /usr/share/sonic/templates/critical_processes.j2 > /etc/supervisor/critical_processes
exec /usr/local/bin/supervisord

View File

@ -0,0 +1,14 @@
#!/usr/bin/env bash
HWSKU_DIR=/usr/share/sonic/hwsku
mkdir -p /etc/sai.d/
# Create/Copy the psai.profile to /etc/sai.d/psai.profile
if [ -f $HWSKU_DIR/psai.profile.j2 ]; then
sonic-cfggen -d -t $HWSKU_DIR/psai.profile.j2 > /etc/sai.d/psai.profile
else
if [ -f $HWSKU_DIR/psai.profile ]; then
cp $HWSKU_DIR/psai.profile /etc/sai.d/psai.profile
fi
fi

View File

@ -0,0 +1,43 @@
[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
[program:rsyslogd]
command=/usr/sbin/rsyslogd -n -iNONE
priority=1
autostart=false
autorestart=unexpected
stdout_logfile=syslog
stderr_logfile=syslog
dependent_startup=true
[program:start]
command=/usr/bin/start.sh
priority=2
autostart=false
autorestart=false
startsecs=0
stdout_logfile=syslog
stderr_logfile=syslog
dependent_startup=true
dependent_startup_wait_for=rsyslogd:running
[program:syncd]
environment=CREDO_DEVICE_PATH=/usr/lib
command=/usr/bin/syncd -s -p /etc/sai.d/psai.profile -x /usr/share/sonic/hwsku/context_config.json -g 1
priority=3
autostart=false
autorestart=false
stdout_logfile=syslog
stderr_logfile=syslog
dependent_startup=true
dependent_startup_wait_for=start:exited

View File

@ -27,4 +27,3 @@ $(DOCKER_GBSYNCD_BASE)_CONTAINER_NAME = gbsyncd
$(DOCKER_GBSYNCD_BASE)_RUN_OPT += --net=host --privileged -t
$(DOCKER_GBSYNCD_BASE)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf
$(DOCKER_GBSYNCD_BASE)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro