From 3ad830eb49c0b853434ba613a351dc9427943947 Mon Sep 17 00:00:00 2001 From: judyjoseph <53951155+judyjoseph@users.noreply.github.com> Date: Tue, 22 Jun 2021 11:12:22 -0700 Subject: [PATCH] New sonic-buildimage images for Broadcom DNX ASIC family. (#7598) Introduce new sonic-buildimage images for Broadcom DNX ASIC family. sonic-broadcom-dnx.bin sonic-aboot-broadcom-dnx.swi How I did it NO CHANGE to existing make commands make init; make configure PLATFORM=broadcom; make target/sonic-aboot-broadcom.swi; make target/sonic-broadcom.bin The difference now is that it will result in new broadcom images for DNX asic family as well. sonic-broadcom.bin, sonic-broadcom-dnx.bin sonic-aboot-broadcom.swi, sonic-aboot-broadcom-dnx.swi Note: This PR also adds support for Broadcom SAI 5.0 (based on 1.8 SAI ) for DNX based platform + changes in platform x86_64-arista_7280cr3_32p4 bcm config files and platform_env.conf files --- .gitmodules | 4 ++ .../jr2-a7280cr3-32p4-40x100G.config.bcm | 7 +- .../platform_env.conf | 1 + .../build_templates/sonic_debian_extension.j2 | 18 ++++- onie-image-arm64.conf | 3 + onie-image-armhf.conf | 3 + onie-image.conf | 3 + onie-mk-demo.sh | 7 +- .../broadcom/docker-syncd-brcm-dnx-rpc.dep | 10 +++ .../broadcom/docker-syncd-brcm-dnx-rpc.mk | 31 ++++++++ .../docker-syncd-brcm-dnx-rpc/Dockerfile.j2 | 57 +++++++++++++++ .../base_image_files/bcmcmd | 3 + .../base_image_files/bcmsh | 3 + .../ptf_nn_agent.conf | 10 +++ platform/broadcom/docker-syncd-brcm-dnx.dep | 13 ++++ platform/broadcom/docker-syncd-brcm-dnx.mk | 49 +++++++++++++ .../docker-syncd-brcm-dnx/Dockerfile.j2 | 39 ++++++++++ .../base_image_files/bcm_common | 40 +++++++++++ .../base_image_files/bcmcmd | 8 +++ .../base_image_files/bcmsh | 8 +++ .../base_image_files/monit_syncd | 11 +++ platform/broadcom/docker-syncd-brcm-dnx/bcmsh | 40 +++++++++++ .../docker-syncd-brcm-dnx/critical_processes | 2 + .../broadcom/docker-syncd-brcm-dnx/start.sh | 31 ++++++++ .../docker-syncd-brcm-dnx/start_led.sh | 38 ++++++++++ .../docker-syncd-brcm-dnx/supervisord.conf | 61 ++++++++++++++++ platform/broadcom/docker-syncd-brcm-rpc.mk | 2 +- platform/broadcom/docker-syncd-brcm.mk | 2 + platform/broadcom/one-aboot.mk | 4 +- platform/broadcom/one-image.mk | 3 +- platform/broadcom/rules.dep | 2 + platform/broadcom/rules.mk | 7 +- platform/broadcom/sai-modules.mk | 13 ++++ platform/broadcom/sai.dep | 4 ++ platform/broadcom/sai.mk | 5 ++ platform/broadcom/saibcm-modules-dnx | 1 + platform/broadcom/saibcm-modules/debian/rules | 6 +- rules/syncd.mk | 2 + slave.mk | 72 +++++++++++-------- src/sonic-device-data/tests/permitted_list | 1 + 40 files changed, 577 insertions(+), 47 deletions(-) create mode 100644 device/arista/x86_64-arista_7280cr3_32p4/platform_env.conf create mode 100644 platform/broadcom/docker-syncd-brcm-dnx-rpc.dep create mode 100644 platform/broadcom/docker-syncd-brcm-dnx-rpc.mk create mode 100644 platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 create mode 100755 platform/broadcom/docker-syncd-brcm-dnx-rpc/base_image_files/bcmcmd create mode 100755 platform/broadcom/docker-syncd-brcm-dnx-rpc/base_image_files/bcmsh create mode 100644 platform/broadcom/docker-syncd-brcm-dnx-rpc/ptf_nn_agent.conf create mode 100644 platform/broadcom/docker-syncd-brcm-dnx.dep create mode 100644 platform/broadcom/docker-syncd-brcm-dnx.mk create mode 100755 platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 create mode 100644 platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcm_common create mode 100755 platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcmcmd create mode 100755 platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcmsh create mode 100644 platform/broadcom/docker-syncd-brcm-dnx/base_image_files/monit_syncd create mode 100755 platform/broadcom/docker-syncd-brcm-dnx/bcmsh create mode 100644 platform/broadcom/docker-syncd-brcm-dnx/critical_processes create mode 100755 platform/broadcom/docker-syncd-brcm-dnx/start.sh create mode 100755 platform/broadcom/docker-syncd-brcm-dnx/start_led.sh create mode 100644 platform/broadcom/docker-syncd-brcm-dnx/supervisord.conf create mode 160000 platform/broadcom/saibcm-modules-dnx diff --git a/.gitmodules b/.gitmodules index 96e5645dcaee..f8020be8bb8f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -88,3 +88,7 @@ [submodule "src/wpasupplicant/sonic-wpa-supplicant"] path = src/wpasupplicant/sonic-wpa-supplicant url = https://github.com/Azure/sonic-wpa-supplicant.git +[submodule "platform/broadcom/saibcm-modules-dnx"] + path = platform/broadcom/saibcm-modules-dnx + url = https://github.com/Azure/saibcm-modules.git + branch = sdk-6.5.22-gpl-dnx diff --git a/device/arista/x86_64-arista_7280cr3_32p4/Arista-7280CR3-C40/jr2-a7280cr3-32p4-40x100G.config.bcm b/device/arista/x86_64-arista_7280cr3_32p4/Arista-7280CR3-C40/jr2-a7280cr3-32p4-40x100G.config.bcm index ca3c266eadfc..ea071fa044f3 100644 --- a/device/arista/x86_64-arista_7280cr3_32p4/Arista-7280CR3-C40/jr2-a7280cr3-32p4-40x100G.config.bcm +++ b/device/arista/x86_64-arista_7280cr3_32p4/Arista-7280CR3-C40/jr2-a7280cr3-32p4-40x100G.config.bcm @@ -273,10 +273,10 @@ tdma_timeout_usec.BCM8869X=1000000 tslam_timeout_usec.BCM8869X=1000000 appl_enable_intr_init.BCM8869X=1 -polled_irq_mode.BCM8869X=1 +polled_irq_mode.BCM8869X=0 polled_irq_delay.BCM8869X=1000 -bcm_stat_interval.BCM8869X=1000 +bcm_stat_interval.BCM8869X=1000000 mem_cache_enable_ecc.BCM8869X=1 mem_cache_enable_parity.BCM8869X=1 @@ -750,7 +750,8 @@ ucode_port_38=CGE23:core_1.38 ucode_port_39=CGE20:core_1.39 ucode_port_40=CGE21:core_1.40 -rif_id_max=0x4000 +rif_id_max=0x6000 +dpp_db_path=/usr/share/bcm/db dma_desc_aggregator_chain_length_max.BCM8869X=1000 dma_desc_aggregator_buff_size_kb.BCM8869X=100 diff --git a/device/arista/x86_64-arista_7280cr3_32p4/platform_env.conf b/device/arista/x86_64-arista_7280cr3_32p4/platform_env.conf new file mode 100644 index 000000000000..283e1c0ce710 --- /dev/null +++ b/device/arista/x86_64-arista_7280cr3_32p4/platform_env.conf @@ -0,0 +1 @@ +usemsi=1 diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 2e09064fec5d..7c0926dcbac4 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -285,6 +285,14 @@ sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/sonic-ztp_*.deb || \ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f {% endif %} +{% for machine_debs in lazy_build_installer_debs.strip().split() -%} +{% set machine, pkgname = machine_debs.split('|') %} +if [[ -z "{{machine}}" || -n "{{machine}}" && $TARGET_MACHINE == "{{machine}}" ]]; then +sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/{{pkgname}} || \ + sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f +fi +{% endfor %} + # Install SONiC Device Data (and its dependencies via 'apt-get -y install -f') sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/sonic-device-data_*.deb || \ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f @@ -653,10 +661,11 @@ sudo mount --bind target $FILESYSTEM_ROOT/target sudo chroot $FILESYSTEM_ROOT docker $SONIC_NATIVE_DOCKERD_FOR_DOCKERFS info {% for docker_installation_target in installer_images.strip().split() -%} -{% set pkgname, docker_build_path, image = docker_installation_target.split('|') %} +{% set pkgname, docker_build_path, machine, image = docker_installation_target.split('|') %} {% set imagefilepath = image.split(':')|first -%} {% set imagefilename = imagefilepath.split('/')|last -%} {% set imagename = imagefilename.split('.')|first -%} +if [[ -z "{{machine}}" || -n "{{machine}}" && $TARGET_MACHINE == "{{machine}}" ]]; then sudo LANG=C chroot $FILESYSTEM_ROOT docker $SONIC_NATIVE_DOCKERD_FOR_DOCKERFS load -i {{imagefilepath}} sudo LANG=C chroot $FILESYSTEM_ROOT docker $SONIC_NATIVE_DOCKERD_FOR_DOCKERFS tag {{imagename}}:latest {{imagename}}:"${SONIC_IMAGE_VERSION}" # Check if manifest exists for {{imagename}} and it is a valid JSON @@ -671,6 +680,7 @@ jq -e . /tmp/manifest.json || { sudo LANG=C chroot $FILESYSTEM_ROOT docker $SONIC_NATIVE_DOCKERD_FOR_DOCKERFS tag {{imagename}}:latest {{imagebasename}}:"${SONIC_IMAGE_VERSION}" sudo LANG=C chroot $FILESYSTEM_ROOT docker $SONIC_NATIVE_DOCKERD_FOR_DOCKERFS tag {{imagename}}:latest {{imagebasename}}:latest {% endif %} +fi {% endfor %} SONIC_PACKAGE_MANAGER_FOLDER="/var/lib/sonic-package-manager/" @@ -714,7 +724,11 @@ sudo bash -c "echo { > $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/ctr_image_name sudo bash -c "echo } >> $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/ctr_image_names.json" {% for script in installer_start_scripts.split(' ') -%} -sudo cp {{script}} $FILESYSTEM_ROOT/usr/bin/ +if [ -f $TARGET_MACHINE"_{{script}}" ]; then + sudo cp $TARGET_MACHINE"_{{script}}" $FILESYSTEM_ROOT/usr/bin/{{script}} +else + sudo cp {{script}} $FILESYSTEM_ROOT/usr/bin/ +fi {% endfor %} {% for service in installer_services.split(' ') -%} if [ -f {{service}} ]; then diff --git a/onie-image-arm64.conf b/onie-image-arm64.conf index ff280207e192..c0cabff2a6ec 100644 --- a/onie-image-arm64.conf +++ b/onie-image-arm64.conf @@ -12,6 +12,9 @@ ONIEIMAGE_VERSION=r0 +## Filesystem root +FILESYSTEM_ROOT=./fsroot-${TARGET_MACHINE} + ## Filename for squashfs file system FILESYSTEM_SQUASHFS=fs.squashfs diff --git a/onie-image-armhf.conf b/onie-image-armhf.conf index 48fe793c768c..39e89366325a 100644 --- a/onie-image-armhf.conf +++ b/onie-image-armhf.conf @@ -12,6 +12,9 @@ ONIEIMAGE_VERSION=r0 +## Filesystem root +FILESYSTEM_ROOT=./fsroot-${TARGET_MACHINE} + ## Filename for squashfs file system FILESYSTEM_SQUASHFS=fs.squashfs diff --git a/onie-image.conf b/onie-image.conf index 419095b24470..5d32226371fd 100644 --- a/onie-image.conf +++ b/onie-image.conf @@ -12,6 +12,9 @@ ONIEIMAGE_VERSION=r0 +## Filesystem root +FILESYSTEM_ROOT=./fsroot-${TARGET_MACHINE} + ## Filename for squashfs file system FILESYSTEM_SQUASHFS=fs.squashfs diff --git a/onie-mk-demo.sh b/onie-mk-demo.sh index 845348d860f1..fcfe500e9249 100755 --- a/onie-mk-demo.sh +++ b/onie-mk-demo.sh @@ -40,8 +40,7 @@ fi } [ -r "$platform_conf" ] || { - echo "Error: Unable to read installer platform configuration file: $platform_conf" - exit 1 + echo "Warning: Unable to read installer platform configuration file: $platform_conf" } [ $# -gt 0 ] || { @@ -98,7 +97,9 @@ sed -i -e "s/%%DEMO_TYPE%%/$demo_type/g" \ echo -n "." cp -r $* $tmp_installdir || clean_up 1 echo -n "." -cp $platform_conf $tmp_installdir || clean_up 1 +[ -r "$platform_conf" ] && { + cp $platform_conf $tmp_installdir || clean_up 1 +} echo "machine=$machine" > $tmp_installdir/machine.conf echo "platform=$platform" >> $tmp_installdir/machine.conf echo -n "." diff --git a/platform/broadcom/docker-syncd-brcm-dnx-rpc.dep b/platform/broadcom/docker-syncd-brcm-dnx-rpc.dep new file mode 100644 index 000000000000..b644e5493faf --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx-rpc.dep @@ -0,0 +1,10 @@ + +DPATH := $($(DOCKER_SYNCD_BRCM_DNX_RPC)_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) $(PLATFORM_PATH)/docker-syncd-brcm-dnx-rpc.mk $(PLATFORM_PATH)/docker-syncd-brcm-dnx-rpc.dep +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +DEP_FILES += $(shell git ls-files $(DPATH)) + +$(DOCKER_SYNCD_BRCM_DNX_RPC)_CACHE_MODE := GIT_CONTENT_SHA +$(DOCKER_SYNCD_BRCM_DNX_RPC)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(DOCKER_SYNCD_BRCM_DNX_RPC)_DEP_FILES := $(DEP_FILES) + diff --git a/platform/broadcom/docker-syncd-brcm-dnx-rpc.mk b/platform/broadcom/docker-syncd-brcm-dnx-rpc.mk new file mode 100644 index 000000000000..c4ccf51f6534 --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx-rpc.mk @@ -0,0 +1,31 @@ +# docker image for brcm syncd with rpc + +DOCKER_SYNCD_BRCM_DNX_RPC = docker-syncd-brcm-dnx-rpc.gz +DOCKER_SYNCD_DNX_BASE = docker-syncd-brcm-dnx.gz +$(DOCKER_SYNCD_BRCM_DNX_RPC)_PATH = $(PLATFORM_PATH)/docker-syncd-brcm-dnx-rpc +$(DOCKER_SYNCD_BRCM_DNX_RPC)_DEPENDS += $(SYNCD_RPC) $(LIBTHRIFT) $(PTF) +ifeq ($(INSTALL_DEBUG_TOOLS), y) +$(DOCKER_SYNCD_BRCM_DNX_RPC)_DEPENDS += $(SYNCD_RPC_DBG) \ + $(LIBSWSSCOMMON_DBG) \ + $(LIBSAIMETADATA_DBG) \ + $(LIBSAIREDIS_DBG) +endif +$(DOCKER_SYNCD_BRCM_DNX_RPC)_FILES += $(DSSERVE) $(BCMCMD) $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) +$(DOCKER_SYNCD_BRCM_DNX_RPC)_LOAD_DOCKERS += $(DOCKER_SYNCD_DNX_BASE) +SONIC_DOCKER_IMAGES += $(DOCKER_SYNCD_BRCM_DNX_RPC) +ifeq ($(ENABLE_SYNCD_RPC),y) +SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_SYNCD_BRCM_DNX_RPC) +endif + +$(DOCKER_SYNCD_BRCM_DNX_RPC)_CONTAINER_NAME = syncd +$(DOCKER_SYNCD_BRCM_DNX_RPC)_VERSION = 1.0.0-rpc +$(DOCKER_SYNCD_BRCM_DNX_RPC)_PACKAGE_NAME = syncd-dnx +$(DOCKER_SYNCD_BRCM_DNX_RPC)_RUN_OPT += --privileged -t +$(DOCKER_SYNCD_BRCM_DNX_RPC)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf +$(DOCKER_SYNCD_BRCM_DNX_RPC)_RUN_OPT += -v /host/warmboot:/var/warmboot +$(DOCKER_SYNCD_BRCM_DNX_RPC)_RUN_OPT += -v /var/run/docker-syncd:/var/run/sswsyncd +$(DOCKER_SYNCD_BRCM_DNX_RPC)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro + +$(DOCKER_SYNCD_BRCM_DNX_RPC)_BASE_IMAGE_FILES += bcmcmd:/usr/bin/bcmcmd +$(DOCKER_SYNCD_BRCM_DNX_RPC)_BASE_IMAGE_FILES += bcmsh:/usr/bin/bcmsh +$(DOCKER_SYNCD_BRCM_DNX_RPC)_MACHINE = broadcom-dnx diff --git a/platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 b/platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 new file mode 100644 index 000000000000..b2af1d98a33d --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx-rpc/Dockerfile.j2 @@ -0,0 +1,57 @@ +FROM docker-syncd-brcm-dnx + +## Make apt-get non-interactive +ENV DEBIAN_FRONTEND=noninteractive + +COPY \ +{% for deb in docker_syncd_brcm_dnx_rpc_debs.split(' ') -%} +debs/{{ deb }}{{' '}} +{%- endfor -%} +debs/ + +RUN apt-get purge -y syncd + +## Pre-install the fundamental packages +RUN apt-get update \ + && apt-get -y install \ + net-tools \ + python-pip \ + python-setuptools \ + build-essential \ + libssl-dev \ + libffi-dev \ + python-dev \ + wget \ + cmake \ + libqt5core5a \ + libqt5network5 \ + libboost-atomic1.71.0 + +RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; } ; \ +{% for deb in docker_syncd_brcm_dnx_rpc_debs.split(' ') -%} +dpkg_apt debs/{{ deb }}{{'; '}} +{%- endfor %} + +RUN wget https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz \ + && tar xvfz 1.0.0.tar.gz \ + && cd nanomsg-1.0.0 \ + && mkdir -p build \ + && cmake . \ + && make install \ + && ldconfig \ + && cd .. \ + && rm -fr nanomsg-1.0.0 \ + && rm -f 1.0.0.tar.gz \ + && pip2 install cffi==1.7.0 \ + && pip2 install --upgrade cffi==1.7.0 \ + && pip2 install wheel \ + && pip2 install nnpy \ + && mkdir -p /opt \ + && cd /opt \ + && wget https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py \ + && apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y \ + && rm -rf /root/deps + +COPY ["ptf_nn_agent.conf", "/etc/supervisor/conf.d/"] + +ENTRYPOINT ["/usr/local/bin/supervisord"] diff --git a/platform/broadcom/docker-syncd-brcm-dnx-rpc/base_image_files/bcmcmd b/platform/broadcom/docker-syncd-brcm-dnx-rpc/base_image_files/bcmcmd new file mode 100755 index 000000000000..7903db6ed6a3 --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx-rpc/base_image_files/bcmcmd @@ -0,0 +1,3 @@ +#!/bin/bash + +docker exec -i syncd bcmcmd "$@" diff --git a/platform/broadcom/docker-syncd-brcm-dnx-rpc/base_image_files/bcmsh b/platform/broadcom/docker-syncd-brcm-dnx-rpc/base_image_files/bcmsh new file mode 100755 index 000000000000..3bb78b0da796 --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx-rpc/base_image_files/bcmsh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker exec -it syncd bcmsh "$@" diff --git a/platform/broadcom/docker-syncd-brcm-dnx-rpc/ptf_nn_agent.conf b/platform/broadcom/docker-syncd-brcm-dnx-rpc/ptf_nn_agent.conf new file mode 100644 index 000000000000..fa1ed0eb1622 --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx-rpc/ptf_nn_agent.conf @@ -0,0 +1,10 @@ +[program:ptf_nn_agent] +command=/usr/bin/python /opt/ptf_nn_agent.py --device-socket 1@tcp://0.0.0.0:10900 -i 1-3@Ethernet12 --set-iface-rcv-buffer=109430400 +process_name=ptf_nn_agent +stdout_logfile=/tmp/ptf_nn_agent.out.log +stderr_logfile=/tmp/ptf_nn_agent.err.log +redirect_stderr=false +autostart=true +autorestart=true +startsecs=1 +numprocs=1 diff --git a/platform/broadcom/docker-syncd-brcm-dnx.dep b/platform/broadcom/docker-syncd-brcm-dnx.dep new file mode 100644 index 000000000000..50c048c5bc9a --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx.dep @@ -0,0 +1,13 @@ +#DPKG FRK +DOCKER_SYNCD_DNX_BASE = docker-syncd-brcm-dnx.gz +DOCKER_SYNCD_DNX_BASE_DBG = docker-syncd-brcm-dnx-$(DBG_IMAGE_MARK).gz +DPATH := $($(DOCKER_SYNCD_DNX_BASE)_PATH) +DEP_FILES := $(SONIC_COMMON_FILES_LIST) platform/broadcom/docker-syncd-brcm-dnx.mk platform/broadcom/docker-syncd-brcm-dnx.dep platform/broadcom/sai.mk +DEP_FILES += $(SONIC_COMMON_BASE_FILES_LIST) +DEP_FILES += $(shell git ls-files $(DPATH)) + +$(DOCKER_SYNCD_DNX_BASE)_CACHE_MODE := GIT_CONTENT_SHA +$(DOCKER_SYNCD_DNX_BASE)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) +$(DOCKER_SYNCD_DNX_BASE)_DEP_FILES := $(DEP_FILES) + +$(eval $(call add_dbg_docker,$(DOCKER_SYNCD_DNX_BASE),$(DOCKER_SYNCD_DNX_BASE_DBG))) diff --git a/platform/broadcom/docker-syncd-brcm-dnx.mk b/platform/broadcom/docker-syncd-brcm-dnx.mk new file mode 100644 index 000000000000..f51088c34ef5 --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx.mk @@ -0,0 +1,49 @@ +# docker image for brcm-dnx syncd + +DOCKER_SYNCD_DNX_BASE = docker-syncd-brcm-dnx.gz +DOCKER_SYNCD_DNX_BASE_DBG = docker-syncd-brcm-dnx-$(DBG_IMAGE_MARK).gz +DOCKER_SYNCD_DNX_PLATFORM_CODE = brcm-dnx + +$(DOCKER_SYNCD_DNX_BASE)_PATH = $(PLATFORM_PATH)/docker-syncd-$(DOCKER_SYNCD_DNX_PLATFORM_CODE) +$(DOCKER_SYNCD_DNX_BASE)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT) + +$(DOCKER_SYNCD_DNX_BASE)_LOAD_DOCKERS += $(DOCKER_CONFIG_ENGINE_BUSTER) +$(DOCKER_SYNCD_DNX_BASE)_DBG_DEPENDS += $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_DEPENDS) +$(DOCKER_SYNCD_DNX_BASE)_DBG_IMAGE_PACKAGES = $($(DOCKER_CONFIG_ENGINE_BUSTER)_DBG_IMAGE_PACKAGES) + +SONIC_DOCKER_IMAGES += $(DOCKER_SYNCD_DNX_BASE) +ifneq ($(ENABLE_SYNCD_RPC),y) +SONIC_INSTALL_DOCKER_IMAGES += $(DOCKER_SYNCD_DNX_BASE) +endif + +SONIC_DOCKER_DBG_IMAGES += $(DOCKER_SYNCD_DNX_BASE_DBG) +ifneq ($(ENABLE_SYNCD_RPC),y) +SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_SYNCD_DNX_BASE_DBG) +endif + + +$(DOCKER_SYNCD_DNX_BASE)_DEPENDS += $(SYNCD) +$(DOCKER_SYNCD_DNX_BASE)_DEPENDS += $(BRCM_DNX_SAI) +$(DOCKER_SYNCD_DNX_BASE)_FILES += $(DSSERVE) $(BCMCMD) + +ifeq ($(INSTALL_DEBUG_TOOLS), y) +$(DOCKER_SYNCD_DNX_BASE)_DBG_DEPENDS += $(SYNCD_DBG) \ + $(LIBSWSSCOMMON_DBG) \ + $(LIBSAIMETADATA_DBG) \ + $(LIBSAIREDIS_DBG) +endif + +$(DOCKER_SYNCD_DNX_BASE)_VERSION = 1.0.0 +$(DOCKER_SYNCD_DNX_BASE)_PACKAGE_NAME = syncd-dnx +$(DOCKER_SYNCD_DNX_BASE)_MACHINE = broadcom-dnx +$(DOCKER_SYNCD_DNX_BASE)_AFTER = $(DOCKER_SYNCD_BASE) +$(DOCKER_SYNCD_DNX_BASE)_CONTAINER_NAME = syncd +$(DOCKER_SYNCD_DNX_BASE)_RUN_OPT += --privileged -t +$(DOCKER_SYNCD_DNX_BASE)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf +$(DOCKER_SYNCD_DNX_BASE)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro +$(DOCKER_SYNCD_DNX_BASE)_RUN_OPT += -v /host/warmboot:/var/warmboot + +$(DOCKER_SYNCD_DNX_BASE)_BASE_IMAGE_FILES += bcmcmd:/usr/bin/bcmcmd +$(DOCKER_SYNCD_DNX_BASE)_BASE_IMAGE_FILES += bcmsh:/usr/bin/bcmsh +$(DOCKER_SYNCD_DNX_BASE)_BASE_IMAGE_FILES += bcm_common:/usr/bin/bcm_common +$(DOCKER_SYNCD_DNX_BASE)_BASE_IMAGE_FILES += monit_syncd:/etc/monit/conf.d diff --git a/platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 b/platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 new file mode 100755 index 000000000000..e0085b42f4de --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx/Dockerfile.j2 @@ -0,0 +1,39 @@ +{% from "dockers/dockerfile-macros.j2" import install_debian_packages %} +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 + +COPY \ +{% for deb in docker_syncd_brcm_dnx_debs.split(' ') -%} +debs/{{ deb }}{{' '}} +{%- endfor -%} +debs/ + +# Install locally-built Debian packages and implicitly install their dependencies +{{ install_debian_packages(docker_syncd_brcm_dnx_debs.split(' ')) }} + +## TODO: add kmod into Depends +RUN apt-get install -yf kmod + +## BRCM uses ethtool to set host interface speed +RUN apt-get install -y ethtool + +COPY ["files/dsserve", "files/bcmcmd", "start.sh", "start_led.sh", "bcmsh", "/usr/bin/"] +RUN chmod +x /usr/bin/dsserve /usr/bin/bcmcmd + +COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] +COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] +COPY ["critical_processes", "/etc/supervisor/"] + +## Clean up +RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y +RUN rm -rf /debs + +ENTRYPOINT ["/usr/local/bin/supervisord"] diff --git a/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcm_common b/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcm_common new file mode 100644 index 000000000000..1b560a1a1522 --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcm_common @@ -0,0 +1,40 @@ +#!/bin/bash + +function help() +{ + echo "Usage: $0 -n [0 to $(($NUM_ASIC-1))]" 1>&2; exit 1; + +} + + +DEV="" + +PLATFORM=`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform` + +# Parse the device specific asic conf file, if it exists + +ASIC_CONF=/usr/share/sonic/device/$PLATFORM/asic.conf +if [ -f "$ASIC_CONF" ]; then + source $ASIC_CONF +fi + + +if [[ ($NUM_ASIC -gt 1) ]]; then + OPTIND=1 + + while getopts ":n:h:" opt; do + case "${opt}" in + h) help + exit 0 + ;; + n) DEV=${OPTARG} + [ $DEV -lt $NUM_ASIC -a $DEV -ge 0 ] || help + ;; + esac + done + shift "$((OPTIND-1))" + + if [ -z "${DEV}" ]; then + help + fi +fi diff --git a/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcmcmd b/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcmcmd new file mode 100755 index 000000000000..76362fc64804 --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcmcmd @@ -0,0 +1,8 @@ +#!/bin/bash + +BCM_COMMON=/usr/bin/bcm_common +if [ -f "$BCM_COMMON" ]; then + source $BCM_COMMON +fi +docker exec -i syncd$DEV bcmcmd "$@" + diff --git a/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcmsh b/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcmsh new file mode 100755 index 000000000000..3cb2aad7afb6 --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/bcmsh @@ -0,0 +1,8 @@ +#!/bin/bash + +BCM_COMMON=/usr/bin/bcm_common +if [ -f "$BCM_COMMON" ]; then + source $BCM_COMMON +fi + +docker exec -it syncd$DEV bcmsh "$@" diff --git a/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/monit_syncd b/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/monit_syncd new file mode 100644 index 000000000000..d63346d9ee20 --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx/base_image_files/monit_syncd @@ -0,0 +1,11 @@ +############################################################################### +## Monit configuration for syncd container +## process list: +## syncd +## dsserve +############################################################################### +check program syncd|syncd with path "/usr/bin/process_checker syncd /usr/bin/syncd" + if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles + +check program syncd|dsserve with path "/usr/bin/process_checker syncd /usr/bin/dsserve /usr/bin/syncd" + if status != 0 for 5 times within 5 cycles then alert repeat every 1 cycles diff --git a/platform/broadcom/docker-syncd-brcm-dnx/bcmsh b/platform/broadcom/docker-syncd-brcm-dnx/bcmsh new file mode 100755 index 000000000000..7488e63c64fd --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx/bcmsh @@ -0,0 +1,40 @@ +#!/bin/bash +usage="$(basename "$0") [-h] [-q] [-t timeout] -- interactive shell for bcm service + +where: + -h show this help text + -t inactivity timeout in seconds (default 300 seconds, 0 for no timeout) + -q quite, no banner (default: verbose)" + +banner="Press Enter to show prompt. +Press Ctrl+C to exit. +NOTICE: Only one bcmsh or bcmcmd can connect to the shell at same time. +" + +# Default verbose +quiet=false +timeout=300 + +while getopts 'hqt:' option; do + case "$option" in + h) echo "$usage" + exit + ;; + q) quiet=true + ;; + t) timeout=$OPTARG + ;; + \?) printf "illegal option: -%s\n" "$OPTARG" >&2 + echo "$usage" >&2 + exit 1 + ;; + esac +done +shift $((OPTIND - 1)) + +if [ "$quiet" = false ]; then + echo "$banner" +fi + +/usr/bin/socat -T$timeout readline UNIX-CONNECT:/var/run/sswsyncd/sswsyncd.socket + diff --git a/platform/broadcom/docker-syncd-brcm-dnx/critical_processes b/platform/broadcom/docker-syncd-brcm-dnx/critical_processes new file mode 100644 index 000000000000..d1163a9c3046 --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx/critical_processes @@ -0,0 +1,2 @@ +program:dsserve +program:syncd diff --git a/platform/broadcom/docker-syncd-brcm-dnx/start.sh b/platform/broadcom/docker-syncd-brcm-dnx/start.sh new file mode 100755 index 000000000000..e4a5b2e2c5bd --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx/start.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +HWSKU_DIR=/usr/share/sonic/hwsku + +SYNCD_SOCKET_FILE=/var/run/sswsyncd/sswsyncd.socket + +# Remove stale files if they exist +rm -f ${SYNCD_SOCKET_FILE} + +mkdir -p /etc/sai.d/ + +# There are two ways to specify the contents of the SAI_INIT_CONFIG_FILE and they are mutually exclusive +# via current method (sai.profile.j2) or new method (config.bcm.j2) +# If delta is large, use sai.profile.j2 which basically require the user to select which config file to use +# If delta is small, use config.bcm.j2 where additional SAI INIT config properties are added +# based on specific device metadata requirement +# in this case sai.profile should have been modified to use the path /etc/sai.d/config.bcm +# There is also a possibility that both sai.profile.j2 and config.bcm.j2 are absent. in that cacse just copy +# sai.profile to the new /etc/said directory. + +# Create/Copy the sai.profile to /etc/sai.d/sai.profile +if [ -f $HWSKU_DIR/sai.profile.j2 ]; then + sonic-cfggen -d -t $HWSKU_DIR/sai.profile.j2 > /etc/sai.d/sai.profile +else + if [ -f $HWSKU_DIR/config.bcm.j2 ]; then + sonic-cfggen -d -t $HWSKU_DIR/config.bcm.j2 > /etc/sai.d/config.bcm + fi + if [ -f $HWSKU_DIR/sai.profile ]; then + cp $HWSKU_DIR/sai.profile /etc/sai.d/sai.profile + fi +fi diff --git a/platform/broadcom/docker-syncd-brcm-dnx/start_led.sh b/platform/broadcom/docker-syncd-brcm-dnx/start_led.sh new file mode 100755 index 000000000000..0b133d6d811e --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx/start_led.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +PLATFORM_DIR=/usr/share/sonic/platform +SYNCD_SOCKET_FILE=/var/run/sswsyncd/sswsyncd.socket +LED_PROC_INIT_SOC=${PLATFORM_DIR}/led_proc_init.soc + +# Function: wait until syncd has created the socket for bcmcmd to connect to +wait_syncd() { + while true; do + if [ -e ${SYNCD_SOCKET_FILE} ]; then + break + fi + sleep 1 + done + + # wait until bcm sdk is ready to get a request + counter=0 + while true; do + /usr/bin/bcmcmd -t 1 "show unit" | grep BCM >/dev/null 2>&1 + rv=$? + if [ $rv -eq 0 ]; then + break + fi + counter=$((counter+1)) + if [ $counter -ge 60 ]; then + echo "syncd is not ready to take commands after $counter re-tries; Exiting!" + break + fi + sleep 1 + done +} + +# If this platform has an initialization file for the Broadcom LED microprocessor, load it +if [[ -r "$LED_PROC_INIT_SOC" && ! -f /var/warmboot/warm-starting ]]; then + wait_syncd + /usr/bin/bcmcmd -t 60 "rcload $LED_PROC_INIT_SOC" +fi + diff --git a/platform/broadcom/docker-syncd-brcm-dnx/supervisord.conf b/platform/broadcom/docker-syncd-brcm-dnx/supervisord.conf new file mode 100644 index 000000000000..7f1943600a31 --- /dev/null +++ b/platform/broadcom/docker-syncd-brcm-dnx/supervisord.conf @@ -0,0 +1,61 @@ +[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 + +[eventlistener:supervisor-proc-exit-listener] +command=/usr/bin/supervisor-proc-exit-listener --container-name syncd +events=PROCESS_STATE_EXITED,PROCESS_STATE_RUNNING +autostart=true +autorestart=unexpected +buffer_size=1024 + +[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] +command=/usr/bin/syncd_start.sh +priority=3 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true +dependent_startup_wait_for=start:exited + +[program:ledinit] +command=/usr/bin/start_led.sh +priority=4 +autostart=false +autorestart=false +startsecs=0 +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true +dependent_startup_wait_for=syncd:running diff --git a/platform/broadcom/docker-syncd-brcm-rpc.mk b/platform/broadcom/docker-syncd-brcm-rpc.mk index 7ee58dda4514..554c603e63e4 100644 --- a/platform/broadcom/docker-syncd-brcm-rpc.mk +++ b/platform/broadcom/docker-syncd-brcm-rpc.mk @@ -27,4 +27,4 @@ $(DOCKER_SYNCD_BRCM_RPC)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro $(DOCKER_SYNCD_BRCM_RPC)_BASE_IMAGE_FILES += bcmcmd:/usr/bin/bcmcmd $(DOCKER_SYNCD_BRCM_RPC)_BASE_IMAGE_FILES += bcmsh:/usr/bin/bcmsh - +$(DOCKER_SYNCD_BRCM_RPC)_MACHINE = broadcom diff --git a/platform/broadcom/docker-syncd-brcm.mk b/platform/broadcom/docker-syncd-brcm.mk index 6f7d9680d884..1129c7681c34 100644 --- a/platform/broadcom/docker-syncd-brcm.mk +++ b/platform/broadcom/docker-syncd-brcm.mk @@ -4,6 +4,7 @@ DOCKER_SYNCD_PLATFORM_CODE = brcm include $(PLATFORM_PATH)/../template/docker-syncd-base.mk $(DOCKER_SYNCD_BASE)_DEPENDS += $(SYNCD) +$(DOCKER_SYNCD_BASE)_DEPENDS += $(BRCM_SAI) $(DOCKER_SYNCD_BASE)_FILES += $(DSSERVE) $(BCMCMD) $(DOCKER_SYNCD_BASE)_DBG_DEPENDS += $(SYNCD_DBG) \ @@ -13,6 +14,7 @@ $(DOCKER_SYNCD_BASE)_DBG_DEPENDS += $(SYNCD_DBG) \ $(DOCKER_SYNCD_BASE)_VERSION = 1.0.0 $(DOCKER_SYNCD_BASE)_PACKAGE_NAME = syncd +$(DOCKER_SYNCD_BASE)_MACHINE = broadcom $(DOCKER_SYNCD_BASE)_RUN_OPT += -v /host/warmboot:/var/warmboot $(DOCKER_SYNCD_BASE)_RUN_OPT += -v /usr/share/sonic/device/x86_64-broadcom_common:/usr/share/sonic/device/x86_64-broadcom_common:ro diff --git a/platform/broadcom/one-aboot.mk b/platform/broadcom/one-aboot.mk index 959cda20907e..cb55a438f29d 100644 --- a/platform/broadcom/one-aboot.mk +++ b/platform/broadcom/one-aboot.mk @@ -2,10 +2,12 @@ SONIC_ONE_ABOOT_IMAGE = sonic-aboot-broadcom.swi $(SONIC_ONE_ABOOT_IMAGE)_MACHINE = broadcom +$(SONIC_ONE_ABOOT_IMAGE)_DEPENDENT_MACHINE = broadcom-dnx $(SONIC_ONE_ABOOT_IMAGE)_IMAGE_TYPE = aboot -$(SONIC_ONE_ABOOT_IMAGE)_INSTALLS += $(BRCM_OPENNSL_KERNEL) $(ARISTA_PLATFORM_MODULE_DRIVERS) $(ARISTA_PLATFORM_MODULE_PYTHON2) $(ARISTA_PLATFORM_MODULE_PYTHON3) $(ARISTA_PLATFORM_MODULE) +$(SONIC_ONE_ABOOT_IMAGE)_INSTALLS += $(ARISTA_PLATFORM_MODULE_DRIVERS) $(ARISTA_PLATFORM_MODULE_PYTHON2) $(ARISTA_PLATFORM_MODULE_PYTHON3) $(ARISTA_PLATFORM_MODULE) $(SONIC_ONE_ABOOT_IMAGE)_INSTALLS += $(PHY_CREDO) $(SONIC_ONE_ABOOT_IMAGE)_INSTALLS += $(SYSTEMD_SONIC_GENERATOR) +$(SONIC_ONE_ABOOT_IMAGE)_LAZY_BUILD_INSTALLS = $(BRCM_OPENNSL_KERNEL) $(BRCM_DNX_OPENNSL_KERNEL) ifeq ($(INSTALL_DEBUG_TOOLS),y) $(SONIC_ONE_ABOOT_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_DBG_IMAGES) $(SONIC_ONE_ABOOT_IMAGE)_DOCKERS += $(filter-out $(patsubst %-$(DBG_IMAGE_MARK).gz,%.gz, $(SONIC_INSTALL_DOCKER_DBG_IMAGES)), $(SONIC_INSTALL_DOCKER_IMAGES)) diff --git a/platform/broadcom/one-image.mk b/platform/broadcom/one-image.mk index 7b3df0dd73c7..c4ca49db9fbe 100644 --- a/platform/broadcom/one-image.mk +++ b/platform/broadcom/one-image.mk @@ -2,8 +2,8 @@ SONIC_ONE_IMAGE = sonic-broadcom.bin $(SONIC_ONE_IMAGE)_MACHINE = broadcom +$(SONIC_ONE_IMAGE)_DEPENDENT_MACHINE = broadcom-dnx $(SONIC_ONE_IMAGE)_IMAGE_TYPE = onie -$(SONIC_ONE_IMAGE)_INSTALLS += $(BRCM_OPENNSL_KERNEL) $(SONIC_ONE_IMAGE)_INSTALLS += $(PDDF_PLATFORM_MODULE) $(SONIC_ONE_IMAGE)_INSTALLS += $(SYSTEMD_SONIC_GENERATOR) $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(DELL_S6000_PLATFORM_MODULE) \ @@ -69,6 +69,7 @@ $(SONIC_ONE_IMAGE)_LAZY_INSTALLS += $(DELL_S6000_PLATFORM_MODULE) \ $(DELTA_AGC032_PLATFORM_MODULE) \ $(RUIJIE_B6510_48VS8CQ_PLATFORM_MODULE) \ $(RAGILE_RA_B6510_48V8C_PLATFORM_MODULE) +$(SONIC_ONE_IMAGE)_LAZY_BUILD_INSTALLS = $(BRCM_OPENNSL_KERNEL) $(BRCM_DNX_OPENNSL_KERNEL) ifeq ($(INSTALL_DEBUG_TOOLS),y) $(SONIC_ONE_IMAGE)_DOCKERS += $(SONIC_INSTALL_DOCKER_DBG_IMAGES) $(SONIC_ONE_IMAGE)_DOCKERS += $(filter-out $(patsubst %-$(DBG_IMAGE_MARK).gz,%.gz, $(SONIC_INSTALL_DOCKER_DBG_IMAGES)), $(SONIC_INSTALL_DOCKER_IMAGES)) diff --git a/platform/broadcom/rules.dep b/platform/broadcom/rules.dep index 2e2d44ed018a..fd9407aeb049 100644 --- a/platform/broadcom/rules.dep +++ b/platform/broadcom/rules.dep @@ -22,3 +22,5 @@ include $(PLATFORM_PATH)/one-pde-image.dep include $(PLATFORM_PATH)/raw-image.dep 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 diff --git a/platform/broadcom/rules.mk b/platform/broadcom/rules.mk index bc31c7023866..f7fb22a07442 100644 --- a/platform/broadcom/rules.mk +++ b/platform/broadcom/rules.mk @@ -21,6 +21,8 @@ include $(PLATFORM_PATH)/one-image.mk include $(PLATFORM_PATH)/raw-image.mk 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 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" @@ -35,11 +37,8 @@ SONIC_ALL += $(SONIC_ONE_IMAGE) $(SONIC_ONE_ABOOT_IMAGE) \ # Inject brcm sai into syncd $(SYNCD)_DEPENDS += $(BRCM_SAI) $(BRCM_SAI_DEV) -$(SYNCD)_UNINSTALLS += $(BRCM_SAI_DEV) +$(SYNCD)_UNINSTALLS += $(BRCM_SAI_DEV) $(BRCM_SAI) ifeq ($(ENABLE_SYNCD_RPC),y) $(SYNCD)_DEPENDS += $(LIBSAITHRIFT_DEV) endif - -# Runtime dependency on brcm sai is set only for syncd -$(SYNCD)_RDEPENDS += $(BRCM_SAI) diff --git a/platform/broadcom/sai-modules.mk b/platform/broadcom/sai-modules.mk index 4c3b2c62f87c..0a21aa503670 100644 --- a/platform/broadcom/sai-modules.mk +++ b/platform/broadcom/sai-modules.mk @@ -5,4 +5,17 @@ BRCM_OPENNSL_KERNEL_VERSION = 5.0.0.1 BRCM_OPENNSL_KERNEL = opennsl-modules_$(BRCM_OPENNSL_KERNEL_VERSION)_amd64.deb $(BRCM_OPENNSL_KERNEL)_SRC_PATH = $(PLATFORM_PATH)/saibcm-modules $(BRCM_OPENNSL_KERNEL)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON) +$(BRCM_OPENNSL_KERNEL)_BUILD_ENV += PKG_NAME=$(BRCM_OPENNSL_KERNEL) +$(BRCM_OPENNSL_KERNEL)_MACHINE = broadcom SONIC_DPKG_DEBS += $(BRCM_OPENNSL_KERNEL) + +# SAI bcm modules for DNX family ASIC +BRCM_DNX_OPENNSL_KERNEL_VERSION = 5.0.0.1 + +BRCM_DNX_OPENNSL_KERNEL = opennsl-modules-dnx_$(BRCM_DNX_OPENNSL_KERNEL_VERSION)_amd64.deb +$(BRCM_DNX_OPENNSL_KERNEL)_SRC_PATH = $(PLATFORM_PATH)/saibcm-modules-dnx +$(BRCM_DNX_OPENNSL_KERNEL)_DEPENDS += $(LINUX_HEADERS) $(LINUX_HEADERS_COMMON) +$(BRCM_DNX_OPENNSL_KERNEL)_BUILD_ENV += PKG_NAME=$(BRCM_DNX_OPENNSL_KERNEL) +$(BRCM_DNX_OPENNSL_KERNEL)_MACHINE = broadcom-dnx +$(BRCM_DNX_OPENNSL_KERNEL)_AFTER = $(BRCM_OPENNSL_KERNEL) +SONIC_DPKG_DEBS += $(BRCM_DNX_OPENNSL_KERNEL) diff --git a/platform/broadcom/sai.dep b/platform/broadcom/sai.dep index c5b10a4e93a3..d6f6bb374f0d 100644 --- a/platform/broadcom/sai.dep +++ b/platform/broadcom/sai.dep @@ -16,3 +16,7 @@ $(BRCM_SAI_DEV)_CACHE_MODE := GIT_CONTENT_SHA $(BRCM_SAI_DEV)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) $(SAI_FLAGS) $(BRCM_SAI_DEV)_DEP_FILES := $(DEP_FILES) +# Dependencies for SAI DNX ASIC family +$(BRCM_DNX_SAI)_CACHE_MODE := GIT_CONTENT_SHA +$(BRCM_DNX_SAI)_DEP_FLAGS := $(SONIC_COMMON_FLAGS_LIST) $(SAI_FLAGS) +$(BRCM_DNX_SAI)_DEP_FILES := $(DEP_FILES) diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index 1fa82b9ee3ab..065aca8291e5 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -4,6 +4,11 @@ BRCM_SAI_DEV = libsaibcm-dev_5.0.0.1_amd64.deb $(eval $(call add_derived_package,$(BRCM_SAI),$(BRCM_SAI_DEV))) $(BRCM_SAI_DEV)_URL = "https://sonicstorage.blob.core.windows.net/packages/bcmsai/5.0/master/libsaibcm-dev_5.0.0.1_amd64.deb?sv=2015-04-05&sr=b&sig=C48%2BIViiA5KAq4ubDkXSehylTQgiIc7ZD47eo4roBYI%3D&se=2029-08-15T01%3A21%3A14Z&sp=r" +# SAI module for DNX Asic family +BRCM_DNX_SAI = libsaibcm_dnx_5.0.0.1_amd64.deb +$(BRCM_DNX_SAI)_URL = "https://sonicstorage.blob.core.windows.net/packages/bcmsai/5.0/master/libsaibcm_dnx_5.0.0.1_amd64.deb?sv=2015-04-05&sr=b&sig=iUW4ZSz43oeOSe21%2BFaNTG1phTr6qgAfeeEN2mCXBWU%3D&se=2035-01-17T05%3A15%3A51Z&sp=r" + SONIC_ONLINE_DEBS += $(BRCM_SAI) +SONIC_ONLINE_DEBS += $(BRCM_DNX_SAI) $(BRCM_SAI_DEV)_DEPENDS += $(BRCM_SAI) $(eval $(call add_conflict_package,$(BRCM_SAI_DEV),$(LIBSAIVS_DEV))) diff --git a/platform/broadcom/saibcm-modules-dnx b/platform/broadcom/saibcm-modules-dnx new file mode 160000 index 000000000000..569123865209 --- /dev/null +++ b/platform/broadcom/saibcm-modules-dnx @@ -0,0 +1 @@ +Subproject commit 569123865209da9d12ef8f2828a3118b00dc5e88 diff --git a/platform/broadcom/saibcm-modules/debian/rules b/platform/broadcom/saibcm-modules/debian/rules index 572471027c87..509901745e97 100755 --- a/platform/broadcom/saibcm-modules/debian/rules +++ b/platform/broadcom/saibcm-modules/debian/rules @@ -178,7 +178,7 @@ binary-indep: build install dh_shlibdeps -i dh_gencontrol -i dh_md5sums -i - dh_builddeb -i + dh_builddeb -i --filename $(PKG_NAME) # Build architecture-dependent files here. binary-arch: build install @@ -209,9 +209,9 @@ binary-arch: build install dh_installdeb -s # dh_perl -s dh_shlibdeps -s - dh_gencontrol -s + dh_gencontrol -s -- -n"$(PKG_NAME)" dh_md5sums -s - dh_builddeb -s + dh_builddeb -s --filename $(PKG_NAME) binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure binary-modules kdist kdist_configure kdist_image kdist_clean diff --git a/rules/syncd.mk b/rules/syncd.mk index 2b7007d84d5b..595e04671c30 100644 --- a/rules/syncd.mk +++ b/rules/syncd.mk @@ -21,10 +21,12 @@ $(SYNCD)_DEPENDS += $(LIBSWSSCOMMON_DEV) $(LIBTHRIFT_DEV) $(SYNCD)_DPKG_TARGET = binary-syncd-rpc endif +ifeq ($(INSTALL_DEBUG_TOOLS), y) SYNCD_DBG = syncd-dbg_1.0.0_$(CONFIGURED_ARCH).deb $(SYNCD_DBG)_DEPENDS += $(SYNCD) $(SYNCD_DBG)_RDEPENDS += $(SYNCD) $(eval $(call add_derived_package,$(SYNCD),$(SYNCD_DBG))) +endif ifeq ($(ENABLE_SYNCD_RPC),y) SYNCD_RPC_DBG = syncd-rpc-dbg_1.0.0_$(CONFIGURED_ARCH).deb diff --git a/slave.mk b/slave.mk index c35f62cb90ff..4ef14c0cdc1e 100644 --- a/slave.mk +++ b/slave.mk @@ -717,6 +717,7 @@ $(foreach IMAGE,$(DOCKER_DBG_IMAGES), $(eval $(IMAGE)_FILES_PATH := $(FILES_PATH # Targets for building docker images $(addprefix $(TARGET_PATH)/, $(DOCKER_IMAGES)) : $(TARGET_PATH)/%.gz : .platform docker-start \ $$(addprefix $$($$*.gz_DEBS_PATH)/,$$($$*.gz_DEPENDS)) \ + $$(addprefix $(TARGET_PATH)/,$$($$*.gz_AFTER)) \ $$(addprefix $$($$*.gz_FILES_PATH)/,$$($$*.gz_FILES)) \ $$(addprefix $(PYTHON_DEBS_PATH)/,$$($$*.gz_PYTHON_DEBS)) \ $$(addprefix $(PYTHON_WHEELS_PATH)/,$$($$*.gz_PYTHON_WHEELS)) \ @@ -789,6 +790,7 @@ SONIC_TARGET_LIST += $(addprefix $(TARGET_PATH)/, $(DOCKER_IMAGES)) # Targets for building docker images $(addprefix $(TARGET_PATH)/, $(DOCKER_DBG_IMAGES)) : $(TARGET_PATH)/%-$(DBG_IMAGE_MARK).gz : .platform docker-start \ + $$(addprefix $(TARGET_PATH)/,$$($$*.gz_AFTER)) \ $$(addprefix $$($$*.gz_DEBS_PATH)/,$$($$*.gz_DBG_DEPENDS)) \ $$(addsuffix -load,$$(addprefix $(TARGET_PATH)/,$$*.gz)) \ $(call dpkg_depend,$(TARGET_PATH)/%-$(DBG_IMAGE_MARK).gz.dep) @@ -862,6 +864,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ $$(addsuffix -install,$$(addprefix $(IMAGE_DISTRO_DEBS_PATH)/,$$($$*_DEPENDS))) \ $$(addprefix $(IMAGE_DISTRO_DEBS_PATH)/,$$($$*_INSTALLS)) \ $$(addprefix $(IMAGE_DISTRO_DEBS_PATH)/,$$($$*_LAZY_INSTALLS)) \ + $$(addprefix $(IMAGE_DISTRO_DEBS_PATH)/,$$($$*_LAZY_BUILD_INSTALLS)) \ $(addprefix $(IMAGE_DISTRO_DEBS_PATH)/,$(INITRAMFS_TOOLS) \ $(LINUX_KERNEL) \ $(SONIC_DEVICE_DATA) \ @@ -927,10 +930,12 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ export enable_pfcwd_on_start="$(ENABLE_PFCWD_ON_START)" export installer_debs="$(addprefix $(IMAGE_DISTRO_DEBS_PATH)/,$($*_INSTALLS))" export lazy_installer_debs="$(foreach deb, $($*_LAZY_INSTALLS),$(foreach device, $($(deb)_PLATFORM),$(addprefix $(device)@, $(IMAGE_DISTRO_DEBS_PATH)/$(deb))))" + export lazy_build_installer_debs="$(foreach deb, $($*_LAZY_BUILD_INSTALLS), $(addprefix $($(deb)_MACHINE)|,$(deb)))" export installer_images="$(foreach docker, $($*_DOCKERS),\ $(addprefix $($(docker)_PACKAGE_NAME)|,\ $(addprefix $($(docker)_PATH)|,\ - $(addprefix $(TARGET_PATH)/,$(addsuffix :$($(docker)_VERSION),$(docker))))))" + $(addprefix $($(docker)_MACHINE)|,\ + $(addprefix $(TARGET_PATH)/,$(addsuffix :$($(docker)_VERSION),$(docker)))))))" export sonic_py_common_py2_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PY_COMMON_PY2))" export sonic_py_common_py3_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_PY_COMMON_PY3))" export config_engine_py2_wheel_path="$(addprefix $(PYTHON_WHEELS_PATH)/,$(SONIC_CONFIG_ENGINE_PY2))" @@ -990,8 +995,13 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ j2 files/build_templates/docker_image_ctl.j2 > $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).sh chmod +x $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).sh + + $(if $($(docker:-dbg.gz=.gz)_MACHINE),\ + mv $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).sh $($(docker:-dbg.gz=.gz)_MACHINE)_$($(docker:-dbg.gz=.gz)_CONTAINER_NAME).sh + ) ) + # Exported variables are used by sonic_debian_extension.sh export installer_start_scripts="$(foreach docker, $($*_DOCKERS),$(addsuffix .sh, $($(docker:-dbg.gz=.gz)_CONTAINER_NAME)))" export feature_vs_image_names="$(foreach docker, $($*_DOCKERS), $(addsuffix :, $($(docker:-dbg.gz=.gz)_CONTAINER_NAME):$(docker:-dbg.gz=.gz)))" @@ -1023,36 +1033,40 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ chmod +x sonic_debian_extension.sh, ) - DEBUG_IMG="$(INSTALL_DEBUG_TOOLS)" \ - DEBUG_SRC_ARCHIVE_DIRS="$(DBG_SRC_ARCHIVE)" \ - DEBUG_SRC_ARCHIVE_FILE="$(DBG_SRC_ARCHIVE_FILE)" \ - scripts/dbg_files.sh - - DEBUG_IMG="$(INSTALL_DEBUG_TOOLS)" \ - DEBUG_SRC_ARCHIVE_FILE="$(DBG_SRC_ARCHIVE_FILE)" \ - USERNAME="$(USERNAME)" \ - PASSWORD="$(PASSWORD)" \ - IMAGE_TYPE=$($*_IMAGE_TYPE) \ - TARGET_PATH=$(TARGET_PATH) \ - SONIC_ENFORCE_VERSIONS=$(SONIC_ENFORCE_VERSIONS) \ - TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) \ - PACKAGE_URL_PREFIX=$(PACKAGE_URL_PREFIX) \ - MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \ - ./build_debian.sh $(LOG) - - USERNAME="$(USERNAME)" \ - PASSWORD="$(PASSWORD)" \ - TARGET_MACHINE=$($*_MACHINE) \ - IMAGE_TYPE=$($*_IMAGE_TYPE) \ - SONIC_ENABLE_IMAGE_SIGNATURE="$(SONIC_ENABLE_IMAGE_SIGNATURE)" \ - SIGNING_KEY="$(SIGNING_KEY)" \ - SIGNING_CERT="$(SIGNING_CERT)" \ - CA_CERT="$(CA_CERT)" \ - TARGET_PATH="$(TARGET_PATH)" \ - ./build_image.sh $(LOG) + # Build images for the MACHINE, DEPENDENT_MACHINE defined. + $(foreach dep_machine, $($*_MACHINE) $($*_DEPENDENT_MACHINE), \ + DEBUG_IMG="$(INSTALL_DEBUG_TOOLS)" \ + DEBUG_SRC_ARCHIVE_DIRS="$(DBG_SRC_ARCHIVE)" \ + DEBUG_SRC_ARCHIVE_FILE="$(DBG_SRC_ARCHIVE_FILE)" \ + scripts/dbg_files.sh + + DEBUG_IMG="$(INSTALL_DEBUG_TOOLS)" \ + DEBUG_SRC_ARCHIVE_FILE="$(DBG_SRC_ARCHIVE_FILE)" \ + USERNAME="$(USERNAME)" \ + PASSWORD="$(PASSWORD)" \ + TARGET_MACHINE=$(dep_machine) \ + IMAGE_TYPE=$($*_IMAGE_TYPE) \ + TARGET_PATH=$(TARGET_PATH) \ + SONIC_ENFORCE_VERSIONS=$(SONIC_ENFORCE_VERSIONS) \ + TRUSTED_GPG_URLS=$(TRUSTED_GPG_URLS) \ + PACKAGE_URL_PREFIX=$(PACKAGE_URL_PREFIX) \ + MULTIARCH_QEMU_ENVIRON=$(MULTIARCH_QEMU_ENVIRON) \ + ./build_debian.sh $(LOG) + + USERNAME="$(USERNAME)" \ + PASSWORD="$(PASSWORD)" \ + TARGET_MACHINE=$(dep_machine) \ + IMAGE_TYPE=$($*_IMAGE_TYPE) \ + SONIC_ENABLE_IMAGE_SIGNATURE="$(SONIC_ENABLE_IMAGE_SIGNATURE)" \ + SIGNING_KEY="$(SIGNING_KEY)" \ + SIGNING_CERT="$(SIGNING_CERT)" \ + CA_CERT="$(CA_CERT)" \ + TARGET_PATH="$(TARGET_PATH)" \ + ./build_image.sh $(LOG) + ) $(foreach docker, $($*_DOCKERS), \ - rm -f $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).sh + rm -f *$($(docker:-dbg.gz=.gz)_CONTAINER_NAME).sh rm -f $($(docker:-dbg.gz=.gz)_CONTAINER_NAME).service rm -f $($(docker:-dbg.gz=.gz)_CONTAINER_NAME)@.service ) diff --git a/src/sonic-device-data/tests/permitted_list b/src/sonic-device-data/tests/permitted_list index 0b43720081f0..1f563128fc54 100644 --- a/src/sonic-device-data/tests/permitted_list +++ b/src/sonic-device-data/tests/permitted_list @@ -247,3 +247,4 @@ sai_optimized_mmu buf.map.egress_pool0.ingress_pool buf.map.egress_pool1.ingress_pool buf.map.egress_pool2.ingress_pool +dpp_db_path