From 12542bf1ba653e82d61d69a777fe731500e3ca7a Mon Sep 17 00:00:00 2001 From: sophiek Date: Thu, 11 Jul 2024 18:36:43 +0300 Subject: [PATCH 001/117] [Mellanox] CMIS host management script (#19509) - Why I did it Added a script for CMIS Host Management enabling and disabling on a running switch. This intend to prevent issues caused by wrong configuration of the feature. The idea is to provide a more convenient way for users to configure the feature. - How I did it Add the script to /usr/bin/ that supports two options: --enable - receives paths to config files for Port SI parameters and Module SI parameters: media_settings.json, optics_si_settings.json, and enables the feature --disable - disables the feature --- .../build_templates/sonic_debian_extension.j2 | 2 + .../mellanox/cmis_host_mgmt/cmis_host_mgmt.py | 171 ++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 platform/mellanox/cmis_host_mgmt/cmis_host_mgmt.py diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 766874571dd1..40d721220d59 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -1060,6 +1060,8 @@ for MLNX_CPLD_ARCHIVE in $MLNX_CPLD_ARCHIVES; do done sudo cp platform/mellanox/get_component_versions/get_component_versions.py $FILESYSTEM_ROOT/usr/bin/get_component_versions.py sudo chmod 755 $FILESYSTEM_ROOT/usr/bin/get_component_versions.py +sudo cp platform/mellanox/cmis_host_mgmt/cmis_host_mgmt.py $FILESYSTEM_ROOT/usr/bin/cmis_host_mgmt.py +sudo chmod 755 $FILESYSTEM_ROOT/usr/bin/cmis_host_mgmt.py j2 platform/mellanox/mlnx-fw-upgrade.j2 | sudo tee $FILESYSTEM_ROOT/usr/bin/mlnx-fw-upgrade.sh sudo chmod 755 $FILESYSTEM_ROOT/usr/bin/mlnx-fw-upgrade.sh diff --git a/platform/mellanox/cmis_host_mgmt/cmis_host_mgmt.py b/platform/mellanox/cmis_host_mgmt/cmis_host_mgmt.py new file mode 100644 index 000000000000..aaedbe4a57ba --- /dev/null +++ b/platform/mellanox/cmis_host_mgmt/cmis_host_mgmt.py @@ -0,0 +1,171 @@ +#!/usr/bin/env python3 +# +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. +# Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import shutil +import click +import re +import os +import subprocess + + +class CMISHostMgmtActivator: + PARAMS = { + "sai_profile": { + "file_name": "sai.profile", + "enabled_param": "SAI_INDEPENDENT_MODULE_MODE=1", + "disabled_param": "SAI_INDEPENDENT_MODULE_MODE=0" + }, + "pmon_daemon_control": { + "file_name": "pmon_daemon_control.json", + "enabled_param": "\"skip_xcvrd_cmis_mgr\": false", + "disabled_param": "\"skip_xcvrd_cmis_mgr\": true", + }, + "sai_xml": { + "file_name": "sai_<>.xml", # will be filled at main, since we can't know the SKU here + "enabled_param": "1", + "disabled_param": "1" # Shouldn't be called + } + } + + @staticmethod + def change_param(param, path, action): + file_path = '{}/{}'.format(path, CMISHostMgmtActivator.PARAMS[param]["file_name"]) + lines = None + + try: + with open(file_path, 'r') as param_file: + lines = param_file.read() + + if lines: + if action == "disable": + lines = re.sub(CMISHostMgmtActivator.PARAMS[param]["enabled_param"], + CMISHostMgmtActivator.PARAMS[param]["disabled_param"], + lines) + elif action == "enable": + if param == "sai_profile" and not re.search(CMISHostMgmtActivator.PARAMS[param]["disabled_param"], lines): + if not re.search(CMISHostMgmtActivator.PARAMS[param]["enabled_param"], lines): + with open(file_path, 'a') as param_file: + param_file.write(CMISHostMgmtActivator.PARAMS[param]["enabled_param"]) + return + + lines = re.sub(CMISHostMgmtActivator.PARAMS[param]["disabled_param"], + CMISHostMgmtActivator.PARAMS[param]["enabled_param"], + lines) + + with open(file_path, 'w') as param_file: + param_file.write(lines) + + except FileNotFoundError as e: + print('Missing file: {}'.format(e.filename)) + + + @staticmethod + def parse_show_platform_summary(): + summary = subprocess.check_output(['show', 'platform', 'summary']) + summary = summary.decode('utf-8') + summary = [x for x in summary.split('\n') if x] + + for field in summary: + key, value = field.split(": ") + + if key == 'Platform': + platform = value + + elif key == 'HwSKU': + sku = value + + return platform, sku + + + @staticmethod + def remove_file(file_path): + if os.path.isfile(file_path): + os.remove(file_path) + + + @staticmethod + def copy_file(src_path, dest_path): + if os.path.isfile(src_path): + shutil.copy(src_path, dest_path) + + + @staticmethod + def is_spc_supported(spc): + return int(spc) >= 4000 + + @staticmethod + def disable(): + platform, sku = CMISHostMgmtActivator.parse_show_platform_summary() + sku_path = '/usr/share/sonic/device/{0}/{1}'.format(platform, sku) + platform_path = '/usr/share/sonic/device/{0}'.format(platform) + CMISHostMgmtActivator.change_param("sai_profile", sku_path, 'disable') + + if os.path.isfile('{0}/{1}'.format(platform_path, 'pmon_daemon_control.json')): + CMISHostMgmtActivator.change_param("pmon_daemon_control", platform_path, 'disable') + CMISHostMgmtActivator.remove_file('{0}/{1}'.format(sku_path, 'pmon_daemon_control.json')) + else: + CMISHostMgmtActivator.change_param("pmon_daemon_control", sku_path, 'disable') + + CMISHostMgmtActivator.remove_file('{0}/{1}'.format(sku_path, 'media_settings.json')) + CMISHostMgmtActivator.remove_file('{0}/{1}'.format(sku_path,'optics_si_settings.json')) + CMISHostMgmtActivator.remove_file('{0}/{1}'.format(platform_path, 'media_settings.json')) + CMISHostMgmtActivator.remove_file('{0}/{1}'.format(platform_path, 'optics_si_settings.json')) + + + @staticmethod + def enable(args): + platform, sku = CMISHostMgmtActivator.parse_show_platform_summary() + sku_path = '/usr/share/sonic/device/{0}/{1}'.format(platform, sku) + platform_path = '/usr/share/sonic/device/{0}'.format(platform) + + sku_num = re.search('[0-9]{4}', sku).group() + + if not CMISHostMgmtActivator.is_spc_supported(sku_num): + print("Error: unsupported platform - feature is supported on SPC3 and higher.") + + CMISHostMgmtActivator.PARAMS["sai_xml"]["file_name"] = "sai_{0}.xml".format(sku_num) + + CMISHostMgmtActivator.copy_file(args[0], sku_path) + CMISHostMgmtActivator.copy_file(args[1], sku_path) + CMISHostMgmtActivator.copy_file('{0}/{1}'.format(platform_path, 'pmon_daemon_control.json'), sku_path) + + CMISHostMgmtActivator.change_param("sai_profile", sku_path, 'enable') + CMISHostMgmtActivator.change_param("pmon_daemon_control", sku_path, 'enable') + CMISHostMgmtActivator.change_param("sai_xml", sku_path, 'enable') + + +@click.command() +@click.option('--disable', is_flag=True, help='Disable CMIS Host Management') +@click.option('--enable', nargs=2, type=click.Path(), help='Enable CMIS Host Management, receives two arguments: media_settings.json path, and optics_si_settings.json path') +def main(disable, enable): + + if disable and enable: + print("Error: can't use both options, please choose one.") + return + + if disable: + CMISHostMgmtActivator.disable() + + elif enable: + CMISHostMgmtActivator.enable(enable) + + else: + print("Error: no option was provided - nothing to execute.") + +if __name__ == '__main__': + main() From 1c2aa3262826034b6b44f299d17584dff3333b38 Mon Sep 17 00:00:00 2001 From: Oleksandr Ivantsiv Date: Thu, 11 Jul 2024 10:20:42 -0700 Subject: [PATCH 002/117] [nvidia-bluefield] Add the possibility to compile BFB image (#19512) - Why I did it Add the possibility to compile BFB (BlueField boot stream) image for the nvidia-bluefield platform. The BFB image fully overwrites the DPU's SSD and can be used for DPU recovery. - How I did it Add new bfb image type to build_image.sh script. Add scripts under the "nvidia-bluefield" platform to create the binary file. - How to verify it Configure nvidia-bluefield platform. Run make target/sonic-nvidia-bluefield.bfb command to compile the image. --- build_image.sh | 11 + onie-image-arm64.conf | 3 + .../installer/create_sonic_image | 420 ++++++++++++++++++ .../nvidia-bluefield/installer/install.sh.j2 | 390 ++++++++++++++++ .../nvidia-bluefield/installer/sonic-grub.cfg | 27 ++ .../recipes/installer-image.dep | 1 - .../recipes/installer-image.mk | 13 +- 7 files changed, 852 insertions(+), 13 deletions(-) create mode 100755 platform/nvidia-bluefield/installer/create_sonic_image create mode 100755 platform/nvidia-bluefield/installer/install.sh.j2 create mode 100644 platform/nvidia-bluefield/installer/sonic-grub.cfg diff --git a/build_image.sh b/build_image.sh index 571febe5cbaa..2ef9be097568 100755 --- a/build_image.sh +++ b/build_image.sh @@ -253,6 +253,17 @@ elif [ "$IMAGE_TYPE" = "dsc" ]; then generate_onie_installer_image +elif [ "$IMAGE_TYPE" = "bfb" ]; then + echo "Build BFB installer" + + if [[ $SECURE_UPGRADE_MODE != "no_sign" ]]; then + secure_upgrade_keys="--signing-key "$SECURE_UPGRADE_DEV_SIGNING_KEY" --signing-cert "$SECURE_UPGRADE_SIGNING_CERT"" + fi + + sudo -E ./platform/${CONFIGURED_PLATFORM}/installer/create_sonic_image --kernel $KVERSION "$secure_upgrade_keys" + + sudo chown $USER $OUTPUT_BFB_IMAGE + else echo "Error: Non supported image type $IMAGE_TYPE" exit 1 diff --git a/onie-image-arm64.conf b/onie-image-arm64.conf index b8a199c70bea..28f83855d77c 100644 --- a/onie-image-arm64.conf +++ b/onie-image-arm64.conf @@ -53,3 +53,6 @@ ABOOT_BOOT_IMAGE=.sonic-boot.swi ## Output file name for dsc installer OUTPUT_DSC_IMAGE=target/sonic-$TARGET_MACHINE.tar + +## Output file name for bfb image +OUTPUT_BFB_IMAGE=target/sonic-$TARGET_MACHINE.bfb diff --git a/platform/nvidia-bluefield/installer/create_sonic_image b/platform/nvidia-bluefield/installer/create_sonic_image new file mode 100755 index 000000000000..8e18f1b7fe80 --- /dev/null +++ b/platform/nvidia-bluefield/installer/create_sonic_image @@ -0,0 +1,420 @@ +#!/bin/bash +# +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. +# Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +set -x +set -e + +WDIR= +IMAGE_VERSION= +KERNEL_VERSION= +CHROOT_DIR= +INITRD= +VMLINUZ= +MODULES_DIR= + +SIGNING_CERT= +SIGNING_KEY= +CDIR=/sonic/ +SDIR=$CDIR/platform/${CONFIGURED_PLATFORM}/installer/ +DDIR=$CDIR +CAPSULE=/lib/firmware/mellanox/boot/capsule/boot_update2.cap +BOOTCTL_DRIVER= +TMFIFO_DRIVER= +SDHCI_OF_DWCMSHC_DRIVER= +TARGET_MACHINE=nvidia-bluefield +BFB="${BFB:-/lib/firmware/mellanox/boot/default.bfb}" +GRUB_AA64=grubnetaa64.efi +GRUB_CFG="" # Common Grub Config +BF2_BOOT_ARGS="console=ttyAMA1 console=hvc0 console=ttyAMA0 earlycon=pl011,0x01000000 earlycon=pl011,0x01800000" +BF2_GRUB_CFG="$BF2_BOOT_ARGS isolcpus=1-7 nohz_full=1-7 rcu_nocbs=1-7" +BF3_BOOT_ARGS="console=ttyAMA1 console=hvc0 console=ttyAMA0 earlycon=pl011,0x13010000" +BF3_GRUB_CFG="$BF3_BOOT_ARGS isolcpus=1-13 nohz_full=1-13 rcu_nocbs=1-13" + +usage() { +cat << EOF +Usage: `basename $0` [ OPTIONS ] +OPTIONS: +-k, --kernel Kernel version for the SmartNIC. +-sc, --signing-cert Secure upgrade signing certificate. +-sk, --signing-key Secure upgrade signing key. +-v, --verbose Run script in verbose mode. Will print out each step of execution. +-h, --help Display help +EOF +} +parse_args() { + while [[ $@ != "" ]]; do + case $1 in + -h|--help) + usage + exit 0 + ;; + -v|--verbose) + shift + set -x + ;; + -k|--kernel) + shift + KERNEL_VERSION=$1 + ;; + -sc|--signing-cert) + shift + echo "signing cert $1" + SIGNING_CERT="$1" + ;; + -sk|--signing-key) + shift + echo "signing key $1" + SIGNING_KEY="$1" + ;; + *) + usage + exit 1 + ;; + esac + shift + done +} + +clean_dir() +{ + rm -rf $1 + exit $2 +} + +validate_config() { + if [[ ! -f "$INITRD" ]]; then + echo "[create_sonic_image] Error! SONiC INITRD not found" + exit 1 + fi + + if [[ ! -f "$VMLINUZ" ]]; then + echo "[create_sonic_image] Error! SONiC VMLINUZ not found" + exit 1 + fi + + if [[ ! -d "$MODULES_DIR" ]]; then + echo "[create_sonic_image] Error! Path to Kernel Modules not found" + exit 1 + fi + + if [[ ! -n "$OUTPUT_BFB_IMAGE" ]]; then + echo "[create_sonic_image] Error! OUTPUT_BFB_IMAGE name not defined. Exiting.." + exit 1 + fi + + if [[ ! -f "$CDIR/$INSTALLER_PAYLOAD" ]]; then + echo "$INSTALLER_PAYLOAD not found. Exiting.." + exit 1 + fi + + mkbfb=`which mlx-mkbfb` + if [[ ! -x "${mkbfb}" ]]; then + echo "Error! mlx-mkbfb is required to build BFB image" + exit 1 + fi + + if [[ ! -f $CAPSULE ]]; then + echo "ERROR: Capsule file $CAPSULE does not exist" + exit 1 + fi + + if [[ ! -f $BOOTCTL_DRIVER ]]; then + echo "ERROR: Bootctl driver $BOOTCTL_DRIVER does not exist" + exit 1 + fi + + if [[ ! -f $TMFIFO_DRIVER ]]; then + echo "ERROR: Bootctl driver $TMFIFO_DRIVER does not exist" + exit 1 + fi + + if [[ ! -f $SDHCI_OF_DWCMSHC_DRIVER ]]; then + echo "ERROR: Bootctl driver $SDHCI_OF_DWCMSHC_DRIVER does not exist" + exit 1 + fi + + if [[ ! -f $BFB ]]; then + echo "ERROR: Default BFB $BFB does not exist" + exit 1 + fi +} + +cleanup_workdir() { + rm -rf $boot_args $boot_args2 $boot_path $boot_desc $WDIR +} + +create_workdir() { + if [[ $WDIR == "" ]]; then + WDIR=$(mktemp -d /sonic/bfb-wd-XXXX) + else + rm -rf $WDIR/* + fi + boot_args=$(mktemp /tmp/boot-args-XXXX) + boot_args2=$(mktemp /tmp/boot-args2-XXXX) + boot_path=$(mktemp /tmp/boot-path-XXXX) + boot_desc=$(mktemp /tmp/boot-desc-XXXX) + trap cleanup_workdir EXIT +} + +add_sonic_to_initramfs() { + # Add the logic to put second stage installer into bfb initramfs + mkdir -p debian + + j2 ${SDIR}/install.sh.j2 -o ./debian/install.sh -e SECURE_UPGRADE_MODE="$SECURE_UPGRADE_MODE" + chmod 0755 ./debian/install.sh + + # Copy the INSTALLER payload + cp $CDIR/$INSTALLER_PAYLOAD ./debian/ + +cat > scripts/initrd-install << EOF +#!/bin/bash + +printf_msg() +{ + echo "$@" | tee /dev/kmsg + return 0 +} + +depmod -a $KERNEL_VERSION > /dev/null 2>&1 +insmod /mlx-bootctl.ko +insmod /sdhci-of-dwcmshc.ko +insmod /sbsa_gwdt.ko +/usr/sbin/watchdog + +printf_msg "=================================" +printf_msg "Installing SONiC. Please wait..." +printf_msg "=================================" + +/bin/bash /debian/install.sh +if [ \$? -eq 0 ]; then + printf_msg "===================================" + printf_msg "Installation finished. Rebooting..." + printf_msg "===================================" + printf_msg + reboot -f +else + printf_msg "========================" + printf_msg "Failed to install SONiC" + printf_msg "========================" +fi +EOF + chmod +x scripts/initrd-install + sudo rm -f conf/conf.d/debian-core* + sudo sh -c 'echo "BOOT=initrd-install" > conf/conf.d/initrd_install' + sudo sh -c 'echo "ROOT=\"LABEL=writable\"" > conf/conf.d/default_root' +} + +copy_bin() +{ + from=$(realpath $1) + + if [ -e $from/$2 ]; then + bin=$2 + else + bin=$(sudo chroot $from bash -c "which $2 2> /dev/null") + fi + + echo "copy from" $from file: $bin + + if [ -h $from/$bin ]; then + if [[ $from == "/" ]]; then + tbin=`readlink -f $bin` + else + tbin=`readlink -f $from/$bin | sed -e "s~$from~~"` + fi + + if [ ! -e .$tbin ]; then + sudo mkdir -p .`dirname $tbin` + sudo cp $from/$tbin .$tbin + fi + + if [ ! -e .${bin} ]; then + sudo mkdir -p .`dirname $bin` + sudo cp -a $from/$bin .${bin} + fi + elif [ -e $from/$bin ]; then + sudo mkdir -p .`dirname $bin` + sudo cp -a $from/$bin .${bin} + else + echo "ERROR: Cannot find $2" + exit 1 + fi + + # Copy dependencies + for lib in `ldd $from/$bin 2> /dev/null | grep '=>' | awk '{print $3}'` + do + if [ -e .$lib ]; then + continue + fi + + sudo mkdir -p .`dirname $lib` + sudo cp -a $from/$lib .$lib + echo sudo cp -a $from/$lib .$lib + if [ -h $from/.$lib ]; then + if [[ $from == "/" ]]; then + tlib=`readlink -f $lib` + else + tlib=`readlink -f $from/$lib | sed -e "s~$from~~"` + fi + if [ ! -e .$tlib ]; then + sudo mkdir -p .`dirname $tlib` + sudo cp $from/$tlib .$tlib + fi + fi + done + } + +create_bfb_image() { + + pushd $WDIR + + # Copy the initrd into the work directory + initramfs=$(realpath $INITRD) + cp $initramfs $WDIR/dump-initramfs-v0 + initramfs=$WDIR/dump-initramfs-v0 + + case "$(file --brief --mime-type "$initramfs")" in + "application/x-lzma") + cat_initrd="lzcat" ;; + "application/x-lz4") + cat_initrd="lz4cat" ;; + "application/zstd") + cat_initrd="zstdcat" ;; + *) + cat_initrd="zcat" ;; + esac + + echo "Rebuilding $initramfs" + + mkdir -p ${WDIR}/initramfs + pushd initramfs + $cat_initrd "$initramfs" | cpio -i + + # Remove tools coming with busybox + for tool in `dpkg -L grub2-common` \ + `dpkg -L e2fsprogs` \ + `dpkg -L kmod | grep -v share` \ + `dpkg -L pciutils | grep -v share` \ + `dpkg -L usbutils | grep -v share` \ + `dpkg -L tar` \ + /usr/sbin/watchdog + do + if [ -d $tool ]; then + continue + fi + /bin/rm -f .${tool} + done + + for tool in `dpkg -L bfscripts | grep bin/` \ + `dpkg -L e2fsprogs | grep -v share` \ + `dpkg -L grub2-common` \ + `dpkg -L kmod | grep -v share` \ + `dpkg -L pciutils | grep -v share` \ + `dpkg -L usbutils | grep -v share` \ + `dpkg -L tar | grep -v share` \ + `dpkg -L grub-efi-arm64-bin` \ + `dpkg -L dmidecode | grep -v share` \ + xz efibootmgr bash getopt hexdump lspci perl \ + lsblk shutdown systemctl strings aarch64-linux-gnu-strings \ + mlxbf-bootctl id mkfs fsck watchdog dirname curl openssl + do + if [ -d $tool ]; then + continue + fi + copy_bin / $tool + done + + sudo depmod -a -b ./ $KERNEL_VERSION + mkdir -p usr/share/misc/ bin/ var/log/watchdog + sudo cp /etc/watchdog.conf etc + sudo cp /usr/share/misc/pci.ids usr/share/misc/ + cp $CHROOT_DIR/usr/share/misc/pci.ids usr/share/misc/ + cp $BOOTCTL_DRIVER . + cp $TMFIFO_DRIVER . + cp $SDHCI_OF_DWCMSHC_DRIVER . + cp $WATCHDOG . + mkdir -p ./secure-boot + cp -r $CDIR/$FILESYSTEM_ROOT/boot/* ./secure-boot + + mkdir -p ./lib/firmware/mellanox/boot/ + cp /lib/firmware/mellanox/boot/default.bfb ./lib/firmware/mellanox/boot/default.bfb + cp -a /lib/firmware/mellanox/boot/capsule ./lib/firmware/mellanox/boot/ + mkdir -p mnt dev sys proc + + add_sonic_to_initramfs + + # Make initramfs with new debian + find . -print0 | sudo cpio --null -o --format=newc | gzip -9 > "$initramfs" + + popd + + printf "$BF2_BOOT_ARGS initrd=initramfs" > \ + "$boot_args" + printf "$BF3_BOOT_ARGS initrd=initramfs" > \ + "$boot_args2" + + printf "VenHw(F019E406-8C9C-11E5-8797-001ACA00BFC4)/Image" > "$boot_path" + printf "Linux from rshim" > "$boot_desc" + vmlinuz=$WDIR/vmlinuz + cat $VMLINUZ > "$vmlinuz" + + $mkbfb --image "$vmlinuz" \ + --initramfs "$initramfs" \ + --capsule "$CAPSULE" \ + --boot-args-v0 "$boot_args" \ + --boot-args-v2 "$boot_args2" \ + --boot-path "$boot_path" \ + --boot-desc "$boot_desc" \ + ${BFB} ${DDIR}/${OUTPUT_BFB_IMAGE} + + echo "BFB is ready: $(readlink -f ${DDIR}/${OUTPUT_BFB_IMAGE})" + + popd +} + +main() { + echo $@ + parse_args $@ + . $CDIR/onie-image-arm64.conf + # Export ENV Variables for j2cli + CHROOT_DIR=$CDIR/$FILESYSTEM_ROOT + if [[ ! -d "$CHROOT_DIR" ]]; then + echo "[create_sonic_image] Error! Path to CHROOT not found" + exit 1 + fi + export GRUB_CFG=$(cat $SDIR/sonic-grub.cfg) + export IMAGE_VERSION=$(cat $CHROOT_DIR/etc/sonic/sonic_version.yml | grep "build_version" | sed -e "s/build_version: //g;s/'//g") + export BF2_BOOT_ARGS BF3_BOOT_ARGS BF2_GRUB_CFG BF3_GRUB_CFG INSTALLER_PAYLOAD FILESYSTEM_DOCKERFS DOCKERFS_DIR FILESYSTEM_SQUASHFS KERNEL_VERSION SECURE_UPGRADE_MODE SIGNING_KEY SIGNING_CERT + + INITRD=$CDIR/$FILESYSTEM_ROOT/boot/initrd.img-$KERNEL_VERSION + VMLINUZ=$CDIR/$FILESYSTEM_ROOT/boot/vmlinuz-$KERNEL_VERSION + MODULES_DIR=$CDIR/$FILESYSTEM_ROOT/lib/modules/$KERNEL_VERSION + WATCHDOG=$MODULES_DIR/kernel/drivers/watchdog/sbsa_gwdt.ko + BOOTCTL_DRIVER=$CHROOT_DIR/usr/lib/modules/$KERNEL_VERSION/extra/mlx-bootctl.ko + TMFIFO_DRIVER=$CHROOT_DIR/usr/lib/modules/$KERNEL_VERSION/extra/mlxbf-tmfifo.ko + SDHCI_OF_DWCMSHC_DRIVER=$CHROOT_DIR/usr/lib/modules/$KERNEL_VERSION/extra/sdhci-of-dwcmshc.ko + + validate_config + + create_workdir + echo "Work directory: $WDIR" + + create_bfb_image +} + +main $@ diff --git a/platform/nvidia-bluefield/installer/install.sh.j2 b/platform/nvidia-bluefield/installer/install.sh.j2 new file mode 100755 index 000000000000..e8167f4ab6d0 --- /dev/null +++ b/platform/nvidia-bluefield/installer/install.sh.j2 @@ -0,0 +1,390 @@ +# +# Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. +# Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +#!/bin/bash + +# This script will run after being booted into a installer kernel +# This will setup the disk, grub etc for the actual SONiC to boot from + +# NOTE: Replace these flag at build time +IMAGE_VERSION="{{IMAGE_VERSION}}" +INSTALLER_PAYLOAD="{{INSTALLER_PAYLOAD}}" +FILESYSTEM_DOCKERFS="{{FILESYSTEM_DOCKERFS}}" +DOCKERFS_DIR="{{DOCKERFS_DIR}}" +FILESYSTEM_SQUASHFS="{{FILESYSTEM_SQUASHFS}}" +KERNEL_VERSION="{{KERNEL_VERSION}}" +BF2_GRUB_CFG="{{BF2_GRUB_CFG}}" +BF3_GRUB_CFG="{{BF3_GRUB_CFG}}" + +image_dir="image-$IMAGE_VERSION" +demo_volume_revision_label="SONiC-OS-${IMAGE_VERSION}" + +PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/mellanox/scripts" +CHROOT_PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + +rshimlog=`which bfrshlog 2> /dev/null` +distro="SONiC" + +device_nvmv=/dev/nvme0n1 +device_emmc=/dev/mmcblk0 + +capsule=/lib/firmware/mellanox/boot/capsule/boot_update2.cap + +rshim_log() +{ + # Write a message to rshim. Rshim can handle only a limited number of bites. + # It should be used only for critical messages. + echo "INFO: $*" + if [ -n "$rshimlog" ]; then + $rshimlog "INFO: $*" + fi +} + +log() +{ + # Write message to serial concole + if [ -e /dev/ttyAMA0 ]; then + echo "INFO: $*" > /dev/ttyAMA0 + fi +} + +function_exists() +{ + declare -f -F "$1" > /dev/null + return $? +} + +# +# Check auto configuration passed from boot-fifo +# + +boot_fifo_path="/sys/bus/platform/devices/MLNXBF04:00/bootfifo" +if [ -e "${boot_fifo_path}" ]; then + cfg_file=$(mktemp) + # Get 16KB assuming it's big enough to hold the config file. + dd if=${boot_fifo_path} of=${cfg_file} bs=4096 count=4 + + # + # Check the .xz signature {0xFD, '7', 'z', 'X', 'Z', 0x00} and extract the + # config file from it. Then start decompression in the background. + # + offset=$(strings -a -t d ${cfg_file} | grep -m 1 "7zXZ" | awk '{print $1}') + if [ -s "${cfg_file}" -a ."${offset}" != ."1" ]; then + log "Found bf.cfg" + cat ${cfg_file} | tr -d '\0' > /etc/bf.cfg + fi + rm -f $cfg_file +fi + +if [ -e /etc/bf.cfg ]; then + . /etc/bf.cfg +fi + +ex() { + echo "Executing command: $@" > /dev/ttyAMA0 + + local rc=0 + $@ 2>&1 > /dev/ttyAMA0 + rc=$? + + if [[ $rc -ne 0 ]]; then + echo "RC: $rc" > /dev/ttyAMA0 + fi +} + +if (lspci -n -d 15b3: | grep -wq 'a2dc'); then + module=BF3 + if [[ $DHCP_CLASS_ID != "" ]]; then + DHCP_CLASS_ID="BF3Client" + fi +else + module=BF2 + if [[ $DHCP_CLASS_ID != "" ]]; then + DHCP_CLASS_ID="BF2Client" + fi +fi + +log "$distro installation started on $module module" + +default_device_label="SONiC-OS" + +device_label=${device_label:-$default_device_label} + +if [[ $module == "BF3" ]]; then + default_device=$device_nvmv + if [[ $(blkid -L $device_label) =~ ${device_emmc} ]] && [[ -b ${device_emmc}p1 ]]; then + # Delete EFi boot partition on eMMC device. This is required to migrate to NVME device and boot from NVME correctly + sfdisk --force ${device_emmc} --delete 1 + fi +else + default_device=$device_emmc +fi + +device=${device:-$default_device} + +log "Using $device device and $device_label device label" + +# We cannot use wait-for-root as it expects the device to contain a +# known filesystem, which might not be the case here. +while [ ! -b $device ]; do + log "Waiting for $device to be ready" + sleep 1 +done + +# Flash image +bs=512 +reserved=34 +boot_size_megs=50 +mega=$((2**20)) +boot_size_bytes=$(($boot_size_megs * $mega)) + +disk_sectors=`fdisk -l $device | grep "Disk $device:" | awk '{print $7}'` +disk_end=$((disk_sectors - reserved)) +boot_start=2048 +boot_size=$(($boot_size_bytes/$bs)) +root_start=$((2048 + $boot_size)) +root_end=$disk_end +root_size=$(($root_end - $root_start + 1)) + +dd if=/dev/zero of="$device" bs="$bs" count=1 +sfdisk -f "$device" << EOF +label: gpt +label-id: A2DF9E70-6329-4679-9C1F-1DAF38AE25AE +device: ${device} +unit: sectors +first-lba: $reserved +last-lba: $disk_end + +${device}p1 : start=$boot_start, size=$boot_size, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=CEAEF8AC-B559-4D83-ACB1-A4F45B26E7F0, name="EFI System", bootable +${device}p2 : start=$root_start ,size=$root_size, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=F093FF4B-CC26-408F-81F5-FF2DD6AE139F, name=$device_label +EOF +sync + +# Refresh partition table +ex blockdev --rereadpt ${device} + +if function_exists bfb_pre_install; then + log "Running bfb_pre_install from bf.cfg" + bfb_pre_install +fi + +# Generate some entropy +ex mke2fs -F ${device}p2 +ex mkdosfs ${device}p1 -n "system-boot" +ex mkfs.ext4 -F ${device}p2 -L $device_label +ex fsck.vfat -a ${device}p1 +mkdir -p /mnt +ex mount -t ext4 ${device}p2 /mnt +mkdir -p /mnt/boot/efi +ex mount -t vfat ${device}p1 /mnt/boot/efi +log "Extracting SONiC files" + +mkdir -p /mnt/$image_dir + +# Extract the INSTALLER_PAYLOAD to the $image_dir +export EXTRACT_UNSAFE_SYMLINKS=1 +ex unzip -o /debian/$INSTALLER_PAYLOAD -x $FILESYSTEM_DOCKERFS "platform.tar.gz" -d /mnt/$image_dir +mkdir -p /mnt/$image_dir/$DOCKERFS_DIR +unzip -op /debian/$INSTALLER_PAYLOAD "$FILESYSTEM_DOCKERFS" | tar xz --warning=no-timestamp -f - -C /mnt/$image_dir/$DOCKERFS_DIR + +mkdir -p /mnt/$image_dir/platform +unzip -op /debian/$INSTALLER_PAYLOAD "platform.tar.gz" | tar xz --warning=no-timestamp -f - -C /mnt/$image_dir/platform + +platform=$(dmidecode -t 4 | grep "Part Number" | awk '{split($NF,a,"-"); print tolower(a[1])}') +platform=arm64-nvda_bf-$platform + +# Copy in the machine.conf file +cat < /mnt/machine.conf +onie_arch=arm64 +onie_platform=$platform +EOF + +chmod a+r /mnt/machine.conf + +sync +{% if SECURE_UPGRADE_MODE in ['dev', 'prod'] %} +demo_volume_label="SONiC-OS" +log "creating demo_volume_label=$demo_volume_label dir under EFI partition to include all boot related modules" +mkdir -p /mnt/boot/efi/EFI/$demo_volume_label + +if [ ! -f /secure-boot/mmaa64.efi ]; then + echo "ERROR: /secure-boot/mmaa64.efi file does not exist" + exit 1 +fi + +if [ ! -f /secure-boot/shimaa64.efi ]; then + echo "ERROR: /secure-boot/shimaa64.efi file does not exist" + exit 1 +fi + +if [ ! -f /secure-boot/grubaa64.efi ]; then + echo "ERROR: /secure-boot/grubaa64.efi file does not exist" + exit 1 +fi + +log "copying signed shim, mm, grub, grub.cfg from /secure-boot to /boot/efi/EFI/$demo_volume_label directory" +MNT_DIR="/mnt/boot/efi/EFI/$demo_volume_label" +cp /secure-boot/shimaa64.efi $MNT_DIR +cp /secure-boot/grubaa64.efi $MNT_DIR +cp /secure-boot/mmaa64.efi $MNT_DIR +{% else %} +log "Installing GRUB" +{% endif %} +# Create a minimal grub.cfg that allows for: +# - configure the serial console +# - allows for grub-reboot to work +# - a menu entry for the DEMO OS + +grub_cfg=$(mktemp) + +# Modify GRUB_CMDLINE_LINUX from bf.cfg file if required + +if [[ $module == "BF3" ]]; then + DEFAULT_GRUB_CMDLINE_LINUX=$BF3_GRUB_CFG +else + DEFAULT_GRUB_CMDLINE_LINUX=$BF2_GRUB_CFG +fi + +GRUB_CMDLINE_LINUX=${GRUB_CMDLINE_LINUX:-"$DEFAULT_GRUB_CMDLINE_LINUX"} +export GRUB_CMDLINE_LINUX + +# Add a menu entry for the SONiC OS +# Note: assume that apparmor is supported in the kernel +demo_grub_entry="$demo_volume_revision_label" + +# Find the grub_cfg_root +uuid=$(blkid ${device}p2 | sed -ne 's/.* UUID=\"\([^"]*\)\".*/\1/p') +if [ -z "$uuid" ]; then + grub_cfg_root=${device}p2 +else + grub_cfg_root=UUID=$uuid +fi + +cat <> $grub_cfg +{{GRUB_CFG}} +EOF + +# Copy the grub.cfg onto the boot-directory as specified in the grub-install +{% if SECURE_UPGRADE_MODE in ['dev', 'prod'] %} +ex cp $grub_cfg /mnt/boot/efi/EFI/$demo_volume_label/grub.cfg +ex mkdir -p /mnt/grub +ex cp $grub_cfg /mnt/grub/grub.cfg +{% else %} +ex mkdir -p /mnt/grub +ex cp $grub_cfg /mnt/grub/grub.cfg + +{% endif %} +sync + +log "GRUB CFG Updated" + +# Update HW-dependant files + +umount /mnt/boot/efi +umount /mnt + +ex blockdev --rereadpt ${device} + +ex fsck.vfat -a ${device}p1 +sync + +if function_exists bfb_pre_bootmgr_update; then + log "Running bfb_pre_bootmgr_update from bf.cfg" + bfb_pre_bootmgr_update +fi + +if [ -e ${capsule} ]; then + log "Update capsule: ${capsule}" + ex bfrec --capsule ${capsule} +fi + +log "Updating EFIBootMgr" + +if [ ! -d /sys/firmware/efi/efivars ]; then + ex mount -t efivarfs none /sys/firmware/efi/efivars +fi + +# Cleanup boot partition +ex bfbootmgr --cleanall +ex rm -f /sys/firmware/efi/efivars/Boot* +ex rm -f /sys/firmware/efi/efivars/dump-* + +# If any of the following commands fail or the image is not booting after the installation check if efivars driver is available and loaded +if [[ $(which grub-install) != "" ]]; then + log "Installing grub with grub-install utility" + + ex mount ${device}p2 /mnt/ + ex mount ${device}p1 /mnt/boot/efi/ + ex grub-install ${device}p1 --bootloader-id=$device_label --locale-directory=/mnt/usr/share/locale --efi-directory=/mnt/boot/efi/ --boot-directory=/mnt/ + ex umount /mnt/boot/efi + ex umount /mnt +else + log "Updating bootmgr with efibootmgr utility" + + if efibootmgr | grep $device_label; then + ex efibootmgr --delete-bootnum -b "$(efibootmgr | grep $device_label | cut -c 5-8)" + fi + ex efibootmgr -c -d "$device" -p 1 -L $device_label -l "\EFI\\$device_label\grubaa64.efi" +fi +{% if SECURE_UPGRADE_MODE in ['dev', 'prod'] %} +uefi_part=1 +ex efibootmgr --create \ + --label "$demo_volume_label" \ + --disk "$device" --part $uefi_part \ + --loader "\EFI\$demo_volume_label\shimaa64.efi" || { + echo "ERROR: efibootmgr failed to create new boot variable on: $device" + exit 1 +} +echo "uefi_shim: Secure Boot components installed successfully" +{% endif %} +BFCFG=`which bfcfg 2> /dev/null` +if [ -n "$BFCFG" ]; then + # Create PXE boot entries + # Not adding CX ifaces because presumably they'll not be used for PXE + if [ -e /etc/bf.cfg ]; then + mv /etc/bf.cfg /etc/bf.cfg.orig + fi + + cat > /etc/bf.cfg << EOF +BOOT0=DISK +BOOT1=NET-OOB-IPV4 +BOOT2=NET-OOB-IPV6 +BOOT3=NET-RSHIM-IPV4 +BOOT4=NET-RSHIM-IPV6 +PXE_DHCP_CLASS_ID=$DHCP_CLASS_ID +EOF + + ex $BFCFG + + # Restore the original bf.cfg + /bin/rm -f /etc/bf.cfg + if [ -e /etc/bf.cfg.orig ]; then + mv /etc/bf.cfg.orig /etc/bf.cfg + fi +fi + +if [ -n "$BFCFG" ]; then + ex $BFCFG +fi + +if function_exists bfb_post_install; then + ex bfb_post_install +fi + +rshim_log "Installation finished" +rshim_log "Rebooting..." +# Wait for these messages to be pulled by the rshim service +sleep 3 diff --git a/platform/nvidia-bluefield/installer/sonic-grub.cfg b/platform/nvidia-bluefield/installer/sonic-grub.cfg new file mode 100644 index 000000000000..59b037b5abf1 --- /dev/null +++ b/platform/nvidia-bluefield/installer/sonic-grub.cfg @@ -0,0 +1,27 @@ +set timeout=5 + +if [ -s \$prefix/grubenv ]; then + load_env +fi +if [ "\${saved_entry}" ]; then + set default="\${saved_entry}" +fi +if [ "\${next_entry}" ]; then + set default="\${next_entry}" + unset next_entry + save_env next_entry +fi + +menuentry '$demo_grub_entry' { + insmod gzio + insmod part_gpt + insmod ext2 + search --no-floppy --label --set=root $device_label + if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi + echo 'Loading SONiC-OS Kernel' + linux /$image_dir/boot/vmlinuz-$KERNEL_VERSION root=$grub_cfg_root rw $GRUB_CMDLINE_LINUX fixrtc \ + loop=$image_dir/$FILESYSTEM_SQUASHFS loopfstype=squashfs systemd.unified_cgroup_hierarchy=0 \ + apparmor=1 security=apparmor varlog_size=4096 systemd.unified_cgroup_hierarchy=0 + echo 'Loading SONiC-OS initial ramdisk ...' + initrd /$image_dir/boot/initrd.img-$KERNEL_VERSION +} diff --git a/platform/nvidia-bluefield/recipes/installer-image.dep b/platform/nvidia-bluefield/recipes/installer-image.dep index 74214c6485a4..43a4d4e1f856 100644 --- a/platform/nvidia-bluefield/recipes/installer-image.dep +++ b/platform/nvidia-bluefield/recipes/installer-image.dep @@ -1,5 +1,4 @@ # DPKG FRK -(SONIC_BF_IMAGE_PXE)_CACHE_MODE := none (SONIC_BF_IMAGE_BIN)_CACHE_MODE := none (SONIC_BF_IMAGE_BFB)_CACHE_MODE := none diff --git a/platform/nvidia-bluefield/recipes/installer-image.mk b/platform/nvidia-bluefield/recipes/installer-image.mk index e87fcb03d98d..08592bcd30e7 100644 --- a/platform/nvidia-bluefield/recipes/installer-image.mk +++ b/platform/nvidia-bluefield/recipes/installer-image.mk @@ -58,17 +58,6 @@ $(foreach feature, $(DISABLED_FEATURE_FLAGS), $(eval override $(feature)=n )) $(SONIC_BF_IMAGE_BASE)_DOCKERS = $(filter-out $(DISABLED_DOCKERS), $(SONIC_INSTALL_DOCKER_IMAGES)) $(SONIC_BF_IMAGE_BASE)_FILES = $(BF_FW_FILES) -# A compressed archive which contains individual files required for PXE boot -# A BFB image is also generated as a by-product of PXE image generation -SONIC_BF_IMAGE_PXE = $(SONIC_BF_IMAGE_BASE).tar.gz -$(SONIC_BF_IMAGE_PXE)_IMAGE_TYPE = pxe -$(SONIC_BF_IMAGE_PXE)_MACHINE = $($(SONIC_BF_IMAGE_BASE)_MACHINE) -$(SONIC_BF_IMAGE_PXE)_INSTALLS += $($(SONIC_BF_IMAGE_BASE)_INSTALLS) -$(SONIC_BF_IMAGE_PXE)_DEPENDS += $($(SONIC_BF_IMAGE_BASE)_DEPENDS) -$(SONIC_BF_IMAGE_PXE)_DOCKERS += $($(SONIC_BF_IMAGE_BASE)_DOCKERS) -$(SONIC_BF_IMAGE_PXE)_LAZY_INSTALLS += $($(SONIC_BF_IMAGE_BASE)_LAZY_INSTALLS) -$(SONIC_BF_IMAGE_PXE)_FILES += $($(SONIC_BF_IMAGE_BASE)_FILES) - # The traditional *.bin image. Works for sonic-sonic upgrade. SONIC_BF_IMAGE_BIN = $(SONIC_BF_IMAGE_BASE).bin $(SONIC_BF_IMAGE_BIN)_IMAGE_TYPE = onie @@ -89,4 +78,4 @@ $(SONIC_BF_IMAGE_BFB)_DOCKERS += $($(SONIC_BF_IMAGE_BASE)_DOCKERS) $(SONIC_BF_IMAGE_BFB)_LAZY_INSTALLS += $($(SONIC_BF_IMAGE_BASE)_LAZY_INSTALLS) $(SONIC_BF_IMAGE_BFB)_FILES += $($(SONIC_BF_IMAGE_BASE)_FILES) -SONIC_INSTALLERS += $(SONIC_BF_IMAGE_PXE) $(SONIC_BF_IMAGE_BIN) $(SONIC_BF_IMAGE_BFB) +SONIC_INSTALLERS += $(SONIC_BF_IMAGE_BIN) $(SONIC_BF_IMAGE_BFB) From b87521d59ff6c81470c851d5ccc90a5f4c6a7fc2 Mon Sep 17 00:00:00 2001 From: Yakiv Huryk <62013282+Yakiv-Huryk@users.noreply.github.com> Date: Thu, 11 Jul 2024 20:22:14 +0300 Subject: [PATCH 003/117] [nvidia-bluefield] add arm64-nvda_bf-bf3comdpu platform (#19408) - Why I did it To add support for the arm64-nvda_bf-bf3comdpu platform - How I did it Added arm64-nvda_bf-bf3comdpu directory to the devices Signed-off-by: Yakiv Huryk --- .../Nvidia-bf3-com-dpu/hwsku.json | 9 ++++ .../Nvidia-bf3-com-dpu/port_config.ini | 18 +++++++ .../Nvidia-bf3-com-dpu/sai.profile | 5 ++ .../arm64-nvda_bf-bf3comdpu/default_sku | 1 + .../arm64-nvda_bf-bf3comdpu/installer.conf | 2 + .../arm64-nvda_bf-bf3comdpu/pcie.yaml | 47 +++++++++++++++++++ .../arm64-nvda_bf-bf3comdpu/platform.json | 21 +++++++++ .../arm64-nvda_bf-bf3comdpu/platform_asic | 1 + .../plugins/ssd_util.py | 10 ++++ .../pmon_daemon_control.json | 7 +++ .../system_health_monitoring_config.json | 6 +++ 11 files changed, 127 insertions(+) create mode 100644 device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/hwsku.json create mode 100644 device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/port_config.ini create mode 100644 device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/sai.profile create mode 100644 device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/default_sku create mode 100644 device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/installer.conf create mode 100644 device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pcie.yaml create mode 100644 device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/platform.json create mode 100644 device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/platform_asic create mode 100644 device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/plugins/ssd_util.py create mode 100644 device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pmon_daemon_control.json create mode 100644 device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/system_health_monitoring_config.json diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/hwsku.json b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/hwsku.json new file mode 100644 index 000000000000..a0f9dda6b250 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/hwsku.json @@ -0,0 +1,9 @@ +{ + "interfaces": { + "Ethernet0": { + "default_brkout_mode": "1x400G", + "autoneg": "on", + "role": "Dpc" + } + } +} diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/port_config.ini b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/port_config.ini new file mode 100644 index 000000000000..6cfe733cb65f --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/port_config.ini @@ -0,0 +1,18 @@ +## +## Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. +## Apache-2.0 +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## +# name lanes alias index +Ethernet0 0,1,2,3 etp1 1 diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/sai.profile b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/sai.profile new file mode 100644 index 000000000000..d86d58acb003 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/Nvidia-bf3-com-dpu/sai.profile @@ -0,0 +1,5 @@ +SAI_DUMP_STORE_PATH=/var/log/bluefield/sdk-dumps +SAI_DUMP_STORE_AMOUNT=10 +DASH_ACL_DEFAULT_RULE_ACTION=permit +PORT_LAYOUT=1x400G +HAIRPIN=false diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/default_sku b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/default_sku new file mode 100644 index 000000000000..41bda2fe9583 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/default_sku @@ -0,0 +1 @@ +Nvidia-bf3-com-dpu appliance diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/installer.conf b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/installer.conf new file mode 100644 index 000000000000..66c2a99a31e4 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/installer.conf @@ -0,0 +1,2 @@ +GRUB_CMDLINE_LINUX="console=ttyAMA1 console=hvc0 console=ttyAMA0 earlycon=pl011,0x13010000 quiet" +ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="isolcpus=1-13 nohz_full=1-13 rcu_nocbs=1-13" diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pcie.yaml b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pcie.yaml new file mode 100644 index 000000000000..bb2a783fe2bc --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pcie.yaml @@ -0,0 +1,47 @@ +- bus: '00' + dev: '00' + fn: '0' + id: a2da + name: 'PCI bridge: Mellanox Technologies MT43244 BlueField-3 SoC Crypto enabled + (rev 01)' +- bus: '01' + dev: '00' + fn: '0' + id: 197b + name: 'PCI bridge: Mellanox Technologies MT43244 Family [BlueField-3 SoC PCIe Bridge] + (rev 01)' +- bus: '02' + dev: '00' + fn: '0' + id: 197b + name: 'PCI bridge: Mellanox Technologies MT43244 Family [BlueField-3 SoC PCIe Bridge] + (rev 01)' +- bus: '02' + dev: '03' + fn: '0' + id: 197b + name: 'PCI bridge: Mellanox Technologies MT43244 Family [BlueField-3 SoC PCIe Bridge] + (rev 01)' +- bus: '03' + dev: '00' + fn: '0' + id: a2dc + name: 'Ethernet controller: Mellanox Technologies MT43244 BlueField-3 integrated + ConnectX-7 network controller (rev 01)' +- bus: '04' + dev: '00' + fn: '0' + id: 197b + name: 'PCI bridge: Mellanox Technologies MT43244 Family [BlueField-3 SoC PCIe Bridge] + (rev 01)' +- bus: '05' + dev: '00' + fn: '0' + id: 197b + name: 'PCI bridge: Mellanox Technologies MT43244 Family [BlueField-3 SoC PCIe Bridge] + (rev 01)' +- bus: '06' + dev: '00' + fn: '0' + id: '5765' + name: 'Non-Volatile memory controller: Device 1f9f:5765 (rev 01)' diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/platform.json b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/platform.json new file mode 100644 index 000000000000..b50809fd4225 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/platform.json @@ -0,0 +1,21 @@ +{ + "chassis": { + "name": "Nvidia-bf3-com-dpu", + "components": [], + "fans": [], + "fan_drawers": [], + "psus": [], + "thermals": [], + "sfps": [] + }, + "interfaces": { + "Ethernet0": { + "index": "1,1,1,1", + "lanes": "0,1,2,3", + "breakout_modes": { + "1x400G": ["etp1"] + } + } + }, + "DPU": {} +} diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/platform_asic b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/platform_asic new file mode 100644 index 000000000000..ce453ec804ad --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/platform_asic @@ -0,0 +1 @@ +nvidia-bluefield diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/plugins/ssd_util.py b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/plugins/ssd_util.py new file mode 100644 index 000000000000..22a6f3eca14f --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/plugins/ssd_util.py @@ -0,0 +1,10 @@ + +import os + +from sonic_platform_base.sonic_storage.emmc import EmmcUtil +from sonic_platform_base.sonic_storage.ssd import SsdUtil as SsdUtilDefault + +def SsdUtil(diskdev): + if os.path.basename(diskdev).startswith('mmcblk'): + return EmmcUtil(diskdev) + return SsdUtilDefault(diskdev) diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pmon_daemon_control.json b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pmon_daemon_control.json new file mode 100644 index 000000000000..86f807221ef5 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/pmon_daemon_control.json @@ -0,0 +1,7 @@ +{ + "skip_ledd": true, + "skip_psud": true, + "skip_fancontrol": true, + "skip_chassisd": true, + "skip_ycabled": true +} diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/system_health_monitoring_config.json b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/system_health_monitoring_config.json new file mode 100644 index 000000000000..fff1c7ca7492 --- /dev/null +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/system_health_monitoring_config.json @@ -0,0 +1,6 @@ +{ + "services_to_ignore": [], + "devices_to_ignore": ["psu", "fan"], + "user_defined_checkers": [], + "polling_interval": 60 +} From 990a72546e9dc8db0c846b2b515aa1cb768a146b Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Thu, 11 Jul 2024 16:14:58 -0700 Subject: [PATCH 004/117] Enable iburst option for NTP servers loaded from minigraph (#19424) Why I did it In #15058, the NTP server configuration was modified to add additional options, such as conditionally enabling iburst, specifying the association type, and specifying the NTP version. One side effect of this was that the iburst option which was previously always enabled now requires it to be explicitly enabled in the config_db. Fixes #19425. How I did it To restore the old behavior, when loading from minigraph, add "iburst": "true" for each NTP server loaded from minigraph. How to verify it Tested on a KVM setup, verified that the generated ntp.conf file had the iburst option. Signed-off-by: Saikrishna Arcot --- src/sonic-config-engine/minigraph.py | 2 +- src/sonic-config-engine/tests/test_cfggen.py | 2 +- src/sonic-config-engine/tests/test_chassis_cfggen.py | 8 ++++---- src/sonic-config-engine/tests/test_minigraph_case.py | 2 +- src/sonic-config-engine/tests/test_multinpu_cfggen.py | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index b2e87aa0597e..ca34726d56cf 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -2612,7 +2612,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw results['SYSLOG_SERVER'] = dict((item, {}) for item in syslog_servers) results['DHCP_SERVER'] = dict((item, {}) for item in dhcp_servers) results['DHCP_RELAY'] = dhcp_relay_table - results['NTP_SERVER'] = dict((item, {}) for item in ntp_servers) + results['NTP_SERVER'] = dict((item, {'iburst': 'on'}) for item in ntp_servers) # Set default DNS nameserver from dns.j2 results['DNS_NAMESERVER'] = {} if os.environ.get("CFGGEN_UNIT_TESTING", "0") == "2": diff --git a/src/sonic-config-engine/tests/test_cfggen.py b/src/sonic-config-engine/tests/test_cfggen.py index 6126522bb6dd..19e0af5cd4dd 100644 --- a/src/sonic-config-engine/tests/test_cfggen.py +++ b/src/sonic-config-engine/tests/test_cfggen.py @@ -696,7 +696,7 @@ def test_metadata_tacacs(self): def test_metadata_ntp(self): argument = ['-m', self.sample_graph_metadata, '-p', self.port_config, '-v', "NTP_SERVER"] output = self.run_script(argument) - self.assertEqual(utils.to_dict(output.strip()), utils.to_dict("{'10.0.10.1': {}, '10.0.10.2': {}}")) + self.assertEqual(utils.to_dict(output.strip()), utils.to_dict("{'10.0.10.1': {'iburst': 'on'}, '10.0.10.2': {'iburst': 'on'}}")) def test_dns_nameserver(self): argument = ['-m', self.sample_graph_metadata, '-p', self.port_config, '-v', "DNS_NAMESERVER"] diff --git a/src/sonic-config-engine/tests/test_chassis_cfggen.py b/src/sonic-config-engine/tests/test_chassis_cfggen.py index a2be6ed6b8ce..c5f1e148e9f1 100644 --- a/src/sonic-config-engine/tests/test_chassis_cfggen.py +++ b/src/sonic-config-engine/tests/test_chassis_cfggen.py @@ -104,7 +104,7 @@ def test_ntp(self): argument = ['-m', self.sample_graph, '-p', self.sample_port_config, '--var-json', 'NTP_SERVER'] output = json.loads(self.run_script(argument)) - self.assertDictEqual(output, {'17.39.1.130': {}, '17.39.1.129': {}}) + self.assertDictEqual(output, {'17.39.1.130': {'iburst': 'on'}, '17.39.1.129': {'iburst': 'on'}}) # NTP data is present only in the host config argument = ['-m', self.sample_graph, '--var-json', 'NTP_SERVER'] @@ -416,7 +416,7 @@ def test_ntp(self): argument = ['-m', self.sample_graph, '-p', self.sample_port_config, '--var-json', 'NTP_SERVER'] output = json.loads(self.run_script(argument)) - self.assertDictEqual(output, {'17.39.1.130': {}, '17.39.1.129': {}}) + self.assertDictEqual(output, {'17.39.1.130': {'iburst': 'on'}, '17.39.1.129': {'iburst': 'on'}}) # NTP data is present only in the host config argument = ['-m', self.sample_graph, '--var-json', 'NTP_SERVER'] @@ -884,7 +884,7 @@ def test_ntp(self): '--var-json', 'NTP_SERVER' ] output = json.loads(self.run_script(argument)) - self.assertDictEqual(output, {'17.39.1.130': {}, '17.39.1.129': {}}) + self.assertDictEqual(output, {'17.39.1.130': {'iburst': 'on'}, '17.39.1.129': {'iburst': 'on'}}) def test_mgmt_port(self): @@ -1019,7 +1019,7 @@ def test_ntp(self): '--var-json', 'NTP_SERVER' ] output = json.loads(self.run_script(argument)) - self.assertDictEqual(output, {'17.39.1.130': {}, '17.39.1.129': {}}) + self.assertDictEqual(output, {'17.39.1.130': {'iburst': 'on'}, '17.39.1.129': {'iburst': 'on'}}) # NTP data is present only in the host config argument = ['-m', self.sample_graph, '--var-json', 'NTP_SERVER'] diff --git a/src/sonic-config-engine/tests/test_minigraph_case.py b/src/sonic-config-engine/tests/test_minigraph_case.py index a5578b841df4..9e19fbdaeaff 100644 --- a/src/sonic-config-engine/tests/test_minigraph_case.py +++ b/src/sonic-config-engine/tests/test_minigraph_case.py @@ -283,7 +283,7 @@ def test_minigraph_mgmt_port(self): def test_metadata_ntp(self): argument = ['-m', self.sample_graph, '-p', self.port_config, '-v', "NTP_SERVER"] output = self.run_script(argument) - self.assertEqual(output.strip(), "{'10.0.10.1': {}, '10.0.10.2': {}}") + self.assertEqual(output.strip(), "{'10.0.10.1': {'iburst': 'on'}, '10.0.10.2': {'iburst': 'on'}}") def test_minigraph_vnet(self): argument = ['-m', self.sample_graph, '-p', self.port_config, '-v', "VNET"] diff --git a/src/sonic-config-engine/tests/test_multinpu_cfggen.py b/src/sonic-config-engine/tests/test_multinpu_cfggen.py index bba0adeae752..5f7646f48f1c 100644 --- a/src/sonic-config-engine/tests/test_multinpu_cfggen.py +++ b/src/sonic-config-engine/tests/test_multinpu_cfggen.py @@ -151,7 +151,7 @@ def test_metadata_tacacs(self): def test_metadata_ntp(self): argument = ['-m', self.sample_graph, '-p', self.sample_port_config, '--var-json', "NTP_SERVER"] output = json.loads(self.run_script(argument)) - self.assertDictEqual(output, {'17.39.1.130': {}, '17.39.1.129': {}}) + self.assertDictEqual(output, {'17.39.1.130': {'iburst': 'on'}, '17.39.1.129': {'iburst': 'on'}}) #NTP data is present only in the host config argument = ['-m', self.sample_graph, '--var-json', "NTP_SERVER"] for asic in range(NUM_ASIC): From ecb1d1e82ed0ed778e9d03e1ec5cb38a1ad5f08c Mon Sep 17 00:00:00 2001 From: fountzou <169114916+fountzou@users.noreply.github.com> Date: Fri, 12 Jul 2024 04:09:58 +0300 Subject: [PATCH 005/117] Reliable TSA: Addressing review comments to use SpineRouter in checks instead of 'voq' and fix few echo msgs. (#19527) use 'SpineRouter' in checks instead of 'voq' and fix few echo msgs. Signed-off-by: fountzou --- dockers/docker-fpm-frr/base_image_files/TS | 4 ++-- dockers/docker-fpm-frr/base_image_files/TSA | 2 +- dockers/docker-fpm-frr/base_image_files/TSB | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dockers/docker-fpm-frr/base_image_files/TS b/dockers/docker-fpm-frr/base_image_files/TS index 0084bd5f27bd..fb1c077cb371 100755 --- a/dockers/docker-fpm-frr/base_image_files/TS +++ b/dockers/docker-fpm-frr/base_image_files/TS @@ -4,10 +4,10 @@ [ -f /etc/sonic/sonic-environment ] && . /etc/sonic/sonic-environment PLATFORM=${PLATFORM:-`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform`} -switch_type=`sonic-db-cli CONFIG_DB hget 'DEVICE_METADATA|localhost' 'switch_type'` +type=`sonic-db-cli CONFIG_DB hget 'DEVICE_METADATA|localhost' 'type'` TSA_CHASSIS_STATE=false -if [[ $switch_type == 'voq' ]]; then +if [[ $type == *"SpineRouter"* ]]; then TSA_CHASSIS_STATE="$(sonic-db-cli CHASSIS_APP_DB HGET "BGP_DEVICE_GLOBAL|STATE" tsa_enabled)" fi diff --git a/dockers/docker-fpm-frr/base_image_files/TSA b/dockers/docker-fpm-frr/base_image_files/TSA index 2cd29e92afb1..beeb86819f67 100755 --- a/dockers/docker-fpm-frr/base_image_files/TSA +++ b/dockers/docker-fpm-frr/base_image_files/TSA @@ -19,7 +19,7 @@ if [ -f /etc/sonic/chassisdb.conf ]; then echo "Chassis Mode: Normal -> Maintenance" logger -t TSA -p user.info "Chassis Mode: Normal -> Maintenance" fi - echo "Please execute \"rexec all -c 'sudo config save -y'\" to preserve System mode in Maintenance after reboot\ + echo "Please execute 'sudo config save' to preserve System mode in Maintenance after reboot\ or config reload on all linecards" exit 0 fi diff --git a/dockers/docker-fpm-frr/base_image_files/TSB b/dockers/docker-fpm-frr/base_image_files/TSB index c09126e1d12d..36c69843b1b3 100755 --- a/dockers/docker-fpm-frr/base_image_files/TSB +++ b/dockers/docker-fpm-frr/base_image_files/TSB @@ -19,7 +19,7 @@ if [ -f /etc/sonic/chassisdb.conf ]; then echo "Chassis Mode: Maintenance -> Normal" logger -t TSB -p user.info "Chassis Mode: Maintenance -> Normal" fi - echo "Please execute \"rexec all -c 'sudo config save -y'\" to preserve System mode in Normal state after reboot\ + echo "Please execute 'sudo config save' to preserve System mode in Normal state after reboot\ or config reload on all linecards" exit 0 fi From 287500285cde1d6276a80651241f64a3a725bee9 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 12 Jul 2024 10:01:29 +0800 Subject: [PATCH 006/117] [submodule] Update submodule sonic-host-services to the latest HEAD automatically (#19415) #### Why I did it src/sonic-host-services ``` * 02d9b55 - (HEAD -> master, origin/master, origin/HEAD) Added support to render template format of `delayed` flag on Feature Table. (#135) (28 hours ago) [abdosi] * 60fdfea - Fixed determine/process reboot-cause service dependency (#17406) (#132) (13 days ago) [anamehra] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-host-services | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-host-services b/src/sonic-host-services index 37c24a935420..02d9b55c2939 160000 --- a/src/sonic-host-services +++ b/src/sonic-host-services @@ -1 +1 @@ -Subproject commit 37c24a9354200e147ed2aaf3dccb11d65d4f24ec +Subproject commit 02d9b55c29394510cdab9725bbbdbf3e9ae2cadf From a5aee14653c200b66fca8b7c4c55feb126176048 Mon Sep 17 00:00:00 2001 From: Yutong Zhang <90831468+yutongzhang-microsoft@users.noreply.github.com> Date: Fri, 12 Jul 2024 10:03:22 +0800 Subject: [PATCH 007/117] Add onboarding dualtor PR checker (#19503) In this PR, we add a new PR checker called onboarding dualtor. This new PR checker is for onboarding dualtor speific test scripts. --- azure-pipelines.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 966ebc551a17..b72aa967cc2e 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -295,6 +295,23 @@ stages: MGMT_BRANCH: $(BUILD_BRANCH) TEST_SET: onboarding_t1 + - job: onboarding_elastictest_dualtor + displayName: "onboarding dualtor testcases by Elastictest - optional" + timeoutInMinutes: 240 + continueOnError: true + pool: sonic-ubuntu-1c + steps: + - template: .azure-pipelines/run-test-elastictest-template.yml@sonic-mgmt + parameters: + TOPOLOGY: dualtor + STOP_ON_FAILURE: "False" + RETRY_TIMES: 0 + MIN_WORKER: $(T0_DUALTOR_INSTANCE_NUM) + MAX_WORKER: $(T0_DUALTOR_INSTANCE_NUM) + KVM_IMAGE_BRANCH: $(BUILD_BRANCH) + MGMT_BRANCH: $(BUILD_BRANCH) + TEST_SET: onboarding_dualtor + # - job: wan_elastictest # displayName: "kvmtest-wan by Elastictest" # pool: sonic-ubuntu-1c From 4397a85564f0991339536a7ce15dd00743df999b Mon Sep 17 00:00:00 2001 From: Stepan Blyshchak <38952541+stepanblyschak@users.noreply.github.com> Date: Fri, 12 Jul 2024 07:47:44 +0300 Subject: [PATCH 008/117] Revert suppress FIB pending feature (#19027) Why I did it Revert BGP suppress FIB pending due to unresolved FRR issues in current version Work item tracking Microsoft ADO (number only): How I did it Revert it How to verify it Build and run --- .../docker-fpm-frr/frr/bgpd/bgpd.main.conf.j2 | 1 - .../frr/supervisord/supervisord.conf.j2 | 2 +- .../vs/docker-sonic-vs/supervisord.conf.j2 | 2 +- src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py | 5 ++-- .../data/sonic-cfggen/bgpd.conf.j2/all.conf | 1 - .../sonic-cfggen/bgpd.main.conf.j2/all.conf | 1 - .../sonic-cfggen/bgpd.main.conf.j2/base.conf | 1 - .../bgpd.main.conf.j2/defaults.conf | 1 - .../bgpd.main.conf.j2/defaults_router_id.conf | 1 - .../bgpd.main.conf.j2/ipv6_lo.conf | 1 - .../bgpd.main.conf.j2/lo0_ipv6_only.conf | 1 - .../lo0_ipv6_only_router_id.conf | 1 - .../bgpd.main.conf.j2/packet_chassis.conf | 1 - .../packet_chassis_ipv6_lo4096.conf | 1 - .../packet_chassis_ipv6_lo4096_router_id.conf | 1 - .../packet_chassis_router_id.conf | 1 - .../bgpd.main.conf.j2/voq_chassis.conf | 1 - .../data/sonic-cfggen/frr.conf.j2/all.conf | 1 - src/sonic-config-engine/minigraph.py | 5 ---- .../tests/sample_output/py2/bgpd_frr.conf | 1 - .../py2/bgpd_frr_backend_asic.conf | 1 - .../sample_output/py2/bgpd_frr_dualtor.conf | 1 - .../py2/bgpd_frr_frontend_asic.conf | 1 - .../tests/sample_output/py2/frr.conf | 1 - .../sample_output/py2/t2-chassis-fe-bgpd.conf | 1 - .../tests/sample_output/py3/bgpd_frr.conf | 1 - .../py3/bgpd_frr_backend_asic.conf | 1 - .../sample_output/py3/bgpd_frr_dualtor.conf | 1 - .../py3/bgpd_frr_frontend_asic.conf | 1 - .../tests/sample_output/py3/frr.conf | 1 - .../sample_output/py3/t2-chassis-fe-bgpd.conf | 1 - .../tests/device_metadata.json | 10 ------- .../tests_config/device_metadata.json | 30 ------------------- .../yang-models/sonic-device_metadata.yang | 12 -------- 34 files changed, 4 insertions(+), 89 deletions(-) diff --git a/dockers/docker-fpm-frr/frr/bgpd/bgpd.main.conf.j2 b/dockers/docker-fpm-frr/frr/bgpd/bgpd.main.conf.j2 index da6358a00ca6..1b920e7a52d8 100644 --- a/dockers/docker-fpm-frr/frr/bgpd/bgpd.main.conf.j2 +++ b/dockers/docker-fpm-frr/frr/bgpd/bgpd.main.conf.j2 @@ -70,7 +70,6 @@ router bgp {{ DEVICE_METADATA['localhost']['bgp_asn'] }} ! {% block bgp_init %} bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy {% if (DEVICE_METADATA is defined) and ('localhost' in DEVICE_METADATA) and ('subtype' in DEVICE_METADATA['localhost']) and (DEVICE_METADATA['localhost']['subtype'].lower() == 'dualtor') %} diff --git a/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 b/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 index 0b26be8d3c45..4ee96cf845c3 100644 --- a/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 +++ b/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 @@ -30,7 +30,7 @@ stderr_logfile=syslog dependent_startup=true [program:zebra] -command=/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M dplane_fpm_nl -M snmp --asic-offload=notify_on_offload +command=/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M dplane_fpm_nl -M snmp priority=4 autostart=false autorestart=false diff --git a/platform/vs/docker-sonic-vs/supervisord.conf.j2 b/platform/vs/docker-sonic-vs/supervisord.conf.j2 index 5b988a5a5d92..ae32fe41d4d0 100644 --- a/platform/vs/docker-sonic-vs/supervisord.conf.j2 +++ b/platform/vs/docker-sonic-vs/supervisord.conf.j2 @@ -164,7 +164,7 @@ environment=ASAN_OPTIONS="log_path=/var/log/asan/teammgrd-asan.log{{ asan_extra_ {% endif %} [program:zebra] -command=/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M dplane_fpm_nl --asic-offload=notify_on_offload +command=/usr/lib/frr/zebra -A 127.0.0.1 -s 90000000 -M dplane_fpm_nl priority=13 autostart=false autorestart=false diff --git a/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py b/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py index 3708b5b30dfc..ce3f60fad144 100644 --- a/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py +++ b/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py @@ -311,11 +311,10 @@ def apply_op(self, cmd, vrf): :return: True if no errors, False if there are errors """ bgp_asn = self.directory.get_slot("CONFIG_DB", swsscommon.CFG_DEVICE_METADATA_TABLE_NAME)["localhost"]["bgp_asn"] - enable_bgp_suppress_fib_pending_cmd = 'bgp suppress-fib-pending' if vrf == 'default': - cmd = ('router bgp %s\n %s\n' % (bgp_asn, enable_bgp_suppress_fib_pending_cmd)) + cmd + cmd = ('router bgp %s\n' % bgp_asn) + cmd else: - cmd = ('router bgp %s vrf %s\n %s\n' % (bgp_asn, vrf, enable_bgp_suppress_fib_pending_cmd)) + cmd + cmd = ('router bgp %s vrf %s\n' % (bgp_asn, vrf)) + cmd self.cfg_mgr.push(cmd) return True diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.conf.j2/all.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.conf.j2/all.conf index a7f34245873a..c39115706d79 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.conf.j2/all.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.conf.j2/all.conf @@ -55,7 +55,6 @@ route-map HIDE_INTERNAL permit 20 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/all.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/all.conf index d2dc9e40e892..c5ba79d34392 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/all.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/all.conf @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/base.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/base.conf index 27d04b953a3e..77cc9d6fffd8 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/base.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/base.conf @@ -12,7 +12,6 @@ ip prefix-list PL_LoopbackV4 permit 55.55.55.55/32 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/defaults.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/defaults.conf index b85dd67a5ca0..00b09bd40d9a 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/defaults.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/defaults.conf @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/defaults_router_id.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/defaults_router_id.conf index 96a30d0ab5df..c042f00a7c2a 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/defaults_router_id.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/defaults_router_id.conf @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/ipv6_lo.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/ipv6_lo.conf index 5ee5ce5443aa..50414a89a389 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/ipv6_lo.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/ipv6_lo.conf @@ -14,7 +14,6 @@ ipv6 prefix-list PL_LoopbackV6 permit fc00::1/128 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/lo0_ipv6_only.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/lo0_ipv6_only.conf index b181dbd5e430..31e0e66cb5af 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/lo0_ipv6_only.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/lo0_ipv6_only.conf @@ -32,7 +32,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/lo0_ipv6_only_router_id.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/lo0_ipv6_only_router_id.conf index c41fa0cfedc9..f0526d73976e 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/lo0_ipv6_only_router_id.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/lo0_ipv6_only_router_id.conf @@ -32,7 +32,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis.conf index 6b2e1f257948..a949ce6e4512 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis.conf @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_ipv6_lo4096.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_ipv6_lo4096.conf index 381c5b05a1f0..81c7d0f2bf42 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_ipv6_lo4096.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_ipv6_lo4096.conf @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_ipv6_lo4096_router_id.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_ipv6_lo4096_router_id.conf index 213872f45c70..3acce1ffb6c1 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_ipv6_lo4096_router_id.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_ipv6_lo4096_router_id.conf @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_router_id.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_router_id.conf index 213872f45c70..3acce1ffb6c1 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_router_id.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/packet_chassis_router_id.conf @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/voq_chassis.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/voq_chassis.conf index efd45eda1ea9..0d9eeebe9e8e 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/voq_chassis.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/bgpd.main.conf.j2/voq_chassis.conf @@ -34,7 +34,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/frr.conf.j2/all.conf b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/frr.conf.j2/all.conf index 8856e58db686..af2e974ee9b7 100644 --- a/src/sonic-bgpcfgd/tests/data/sonic-cfggen/frr.conf.j2/all.conf +++ b/src/sonic-bgpcfgd/tests/data/sonic-cfggen/frr.conf.j2/all.conf @@ -71,7 +71,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 55555 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index ca34726d56cf..d6c811552778 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -52,7 +52,6 @@ console_device_types = ['MgmtTsToR'] dhcp_server_enabled_device_types = ['BmcMgmtToRRouter'] mgmt_device_types = ['BmcMgmtToRRouter', 'MgmtToRRouter', 'MgmtTsToR'] -leafrouter_device_types = ['LeafRouter'] # Counters disabled on management devices mgmt_disabled_counters = ["BUFFER_POOL_WATERMARK", "PFCWD", "PG_DROP", "PG_WATERMARK", "PORT_BUFFER_DROP", "QUEUE", "QUEUE_WATERMARK"] @@ -2708,10 +2707,6 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw if current_device and current_device['type'] in mgmt_device_types: results["FLEX_COUNTER_TABLE"] = {counter: {"FLEX_COUNTER_STATUS": "disable"} for counter in mgmt_disabled_counters} - # Enable bgp-suppress-fib by default for leafrouter - if current_device and current_device['type'] in leafrouter_device_types: - results['DEVICE_METADATA']['localhost']['suppress-fib-pending'] = 'enabled' - return results def get_tunnel_entries(tunnel_intfs, tunnel_intfs_qos_remap_config, lo_intfs, tunnel_qos_remap, mux_tunnel_name, peer_switch_ip): diff --git a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr.conf b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr.conf index 3828af13fd71..2c146698a960 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr.conf @@ -42,7 +42,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.0.0/27 router bgp 65100 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_backend_asic.conf b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_backend_asic.conf index 45cd03a540a8..d793dfa39a98 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_backend_asic.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_backend_asic.conf @@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 65100 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_dualtor.conf b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_dualtor.conf index eda11ab9f285..364a2c34bcaa 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_dualtor.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_dualtor.conf @@ -42,7 +42,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.0.0/27 router bgp 65100 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy coalesce-time 10000 diff --git a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_frontend_asic.conf b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_frontend_asic.conf index 8daeff2a61e9..94bd37e3b90f 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_frontend_asic.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/bgpd_frr_frontend_asic.conf @@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 65100 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-config-engine/tests/sample_output/py2/frr.conf b/src/sonic-config-engine/tests/sample_output/py2/frr.conf index 032adb8c5106..2653f8fc0893 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/frr.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/frr.conf @@ -62,7 +62,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.0.0/27 router bgp 65100 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-config-engine/tests/sample_output/py2/t2-chassis-fe-bgpd.conf b/src/sonic-config-engine/tests/sample_output/py2/t2-chassis-fe-bgpd.conf index 32a9abf88bac..20744efaa40f 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/t2-chassis-fe-bgpd.conf +++ b/src/sonic-config-engine/tests/sample_output/py2/t2-chassis-fe-bgpd.conf @@ -58,7 +58,6 @@ ip prefix-list PL_LoopbackV4 permit 4.0.0.0/32 router bgp 4000 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr.conf b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr.conf index e5ad8964454a..e7534d4b9781 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr.conf @@ -42,7 +42,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.200.0/27 router bgp 65100 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_backend_asic.conf b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_backend_asic.conf index 45cd03a540a8..d793dfa39a98 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_backend_asic.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_backend_asic.conf @@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 65100 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_dualtor.conf b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_dualtor.conf index 0ada9a4f8d60..4f606b80838c 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_dualtor.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_dualtor.conf @@ -42,7 +42,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.200.0/27 router bgp 65100 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy coalesce-time 10000 diff --git a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_frontend_asic.conf b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_frontend_asic.conf index 8daeff2a61e9..94bd37e3b90f 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_frontend_asic.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/bgpd_frr_frontend_asic.conf @@ -53,7 +53,6 @@ route-map HIDE_INTERNAL permit 10 router bgp 65100 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-config-engine/tests/sample_output/py3/frr.conf b/src/sonic-config-engine/tests/sample_output/py3/frr.conf index d0821f1b11ca..5b7eacefe8ba 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/frr.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/frr.conf @@ -62,7 +62,6 @@ ip prefix-list LOCAL_VLAN_IPV4_PREFIX seq 10 permit 192.168.200.0/27 router bgp 65100 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-config-engine/tests/sample_output/py3/t2-chassis-fe-bgpd.conf b/src/sonic-config-engine/tests/sample_output/py3/t2-chassis-fe-bgpd.conf index 32a9abf88bac..20744efaa40f 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/t2-chassis-fe-bgpd.conf +++ b/src/sonic-config-engine/tests/sample_output/py3/t2-chassis-fe-bgpd.conf @@ -58,7 +58,6 @@ ip prefix-list PL_LoopbackV4 permit 4.0.0.0/32 router bgp 4000 ! bgp log-neighbor-changes - bgp suppress-fib-pending no bgp default ipv4-unicast no bgp ebgp-requires-policy ! diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json b/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json index 3acfff5c42ad..11d0c9e9daab 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json @@ -132,16 +132,6 @@ "DEVICE_METADATA_ADVERTISE_LO_PREFIX_AS_128": { "desc": "Verifying advertising lo prefix as /128." }, - "DEVICE_METADATA_SUPPRESS_PENDING_FIB_ENABLED": { - "desc": "Enable bgp-suppress-fib-pending" - }, - "DEVICE_METADATA_SUPPRESS_PENDING_FIB_DISABLED": { - "desc": "Disable bgp-suppress-fib-pending" - }, - "DEVICE_METADATA_SUPPRESS_PENDING_FIB_ENABLED_SYNCHRONOUS_MODE_DISABLED": { - "desc": "Enable bgp-suppress-fib-pending when synchronous mode is disabled", - "eStr": ["ASIC synchronous mode must be enabled in order to enable suppress FIB pending feature"] - }, "DEVICE_METADATA_VALID_RACK_MGMT_MAP": { "desc": "Verifying rack_mgmt_map configuration." }, diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json index 74f4d17dd518..bc977e7da076 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json @@ -361,36 +361,6 @@ } } }, - "DEVICE_METADATA_SUPPRESS_PENDING_FIB_ENABLED": { - "sonic-device_metadata:sonic-device_metadata": { - "sonic-device_metadata:DEVICE_METADATA": { - "sonic-device_metadata:localhost": { - "synchronous_mode": "enable", - "suppress-fib-pending": "enabled" - } - } - } - }, - "DEVICE_METADATA_SUPPRESS_PENDING_FIB_DISABLED": { - "sonic-device_metadata:sonic-device_metadata": { - "sonic-device_metadata:DEVICE_METADATA": { - "sonic-device_metadata:localhost": { - "synchronous_mode": "disable", - "suppress-fib-pending": "disabled" - } - } - } - }, - "DEVICE_METADATA_SUPPRESS_PENDING_FIB_ENABLED_SYNCHRONOUS_MODE_DISABLED": { - "sonic-device_metadata:sonic-device_metadata": { - "sonic-device_metadata:DEVICE_METADATA": { - "sonic-device_metadata:localhost": { - "synchronous_mode": "disable", - "suppress-fib-pending": "enabled" - } - } - } - }, "DEVICE_METADATA_VALID_RACK_MGMT_MAP": { "sonic-device_metadata:sonic-device_metadata": { "sonic-device_metadata:DEVICE_METADATA": { diff --git a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang index 61f6888ded6d..7bd936e831c3 100644 --- a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang +++ b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang @@ -212,18 +212,6 @@ module sonic-device_metadata { By default SONiC advertises /128 subnet prefix in Loopback0 as /64 subnet route"; } - leaf suppress-fib-pending { - description "Enable BGP suppress FIB pending feature. BGP will wait for route FIB installation before announcing routes"; - type enumeration { - enum enabled; - enum disabled; - } - default disabled; - - must "((current() = 'disabled') or (current() = 'enabled' and ../synchronous_mode = 'enable'))" { - error-message "ASIC synchronous mode must be enabled in order to enable suppress FIB pending feature"; - } - } leaf rack_mgmt_map { type string { length 0..128 { From c52462808fa737bc640d389db7b82ee9f74bf0d4 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 12 Jul 2024 19:57:08 +0800 Subject: [PATCH 009/117] [submodule] Update submodule sonic-dash-api to the latest HEAD automatically (#19459) #### Why I did it src/sonic-dash-api ``` * 5809048 - (HEAD -> master, origin/master, origin/HEAD) [build]Update pool sonicbld to sonic-ububtu-1c since it's deprecated (#21) (10 days ago) [Jianquan Ye] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-dash-api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-dash-api b/src/sonic-dash-api index d033898e7e47..5809048abbc5 160000 --- a/src/sonic-dash-api +++ b/src/sonic-dash-api @@ -1 +1 @@ -Subproject commit d033898e7e4774fad88229610a5bb502b4152a5a +Subproject commit 5809048abbc52ce1762f3ed29eb77483051176dd From 339a4e62ce88c90b3fde5b2e192576740f2ce757 Mon Sep 17 00:00:00 2001 From: abdosi <58047199+abdosi@users.noreply.github.com> Date: Fri, 12 Jul 2024 19:29:51 -0700 Subject: [PATCH 010/117] [healthd] Added change to handle Feature Table exception (#19480) *Fix: #18818 Handle any exception in API get_service_from_feature_table() gracefully . --------- Signed-off-by: Abhishek Dosi --- .../health_checker/sysmonitor.py | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/system-health/health_checker/sysmonitor.py b/src/system-health/health_checker/sysmonitor.py index 115dbfbe9ea0..c07b58b5489b 100755 --- a/src/system-health/health_checker/sysmonitor.py +++ b/src/system-health/health_checker/sysmonitor.py @@ -204,20 +204,23 @@ def get_service_from_feature_table(self, dir_list): while max_retry > 0: success = True - feature_table = self.config_db.get_table("FEATURE") - device_config = {} - device_config['DEVICE_METADATA'] = self.config_db.get_table('DEVICE_METADATA') - device_config.update(device_info.get_device_runtime_metadata()) - for srv, fields in feature_table.items(): - if 'state' not in fields: - success = False - logger.log_warning("FEATURE table is not fully ready: {}, retrying".format(feature_table)) - break - state = self.get_render_value_for_field(fields["state"], device_config, ['enabled', 'disabled', 'always_enabled', 'always_disabled']) - if state not in ["disabled", "always_disabled"]: - srvext = srv + ".service" - if srvext not in dir_list: - dir_list.append(srvext) + try: + feature_table = self.config_db.get_table("FEATURE") + device_config = {} + device_config['DEVICE_METADATA'] = self.config_db.get_table('DEVICE_METADATA') + device_config.update(device_info.get_device_runtime_metadata()) + for srv, fields in feature_table.items(): + if 'state' not in fields: + success = False + logger.log_warning("FEATURE table is not fully ready: {}, retrying".format(feature_table)) + break + state = self.get_render_value_for_field(fields["state"], device_config, ['enabled', 'disabled', 'always_enabled', 'always_disabled']) + if state not in ["disabled", "always_disabled"]: + srvext = srv + ".service" + if srvext not in dir_list: + dir_list.append(srvext) + except: + success = False if not success: max_retry -= 1 time.sleep(retry_delay) From a14681fb23cb3e899151584ebf0e2fa43a4b755b Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:00:58 +0800 Subject: [PATCH 011/117] [submodule] Update submodule sonic-host-services to the latest HEAD automatically (#19568) #### Why I did it src/sonic-host-services ``` * cfb3cb8 - (HEAD -> master, origin/master, origin/HEAD) Modified scripts: replaced deprecated 'logger' with 'syslogger' (#136) (2 hours ago) [Ashwin Srinivasan] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-host-services | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-host-services b/src/sonic-host-services index 02d9b55c2939..cfb3cb89aff0 160000 --- a/src/sonic-host-services +++ b/src/sonic-host-services @@ -1 +1 @@ -Subproject commit 02d9b55c29394510cdab9725bbbdbf3e9ae2cadf +Subproject commit cfb3cb89aff003290db547b78657528d0f20914c From dd09d9ea98d8f5138a3478e06b00271f0e116c35 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:01:27 +0800 Subject: [PATCH 012/117] [submodule] Update submodule sonic-linux-kernel to the latest HEAD automatically (#19548) #### Why I did it src/sonic-linux-kernel ``` * 88c1826 - (HEAD -> master, origin/master, origin/HEAD) [Micas] Kernel configuration is enabled to support mdio-gpio and spi-gpio (#411) (27 hours ago) [Philo] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-linux-kernel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-linux-kernel b/src/sonic-linux-kernel index a128c86539ab..88c1826e5e1e 160000 --- a/src/sonic-linux-kernel +++ b/src/sonic-linux-kernel @@ -1 +1 @@ -Subproject commit a128c86539ab63afbce811a364ded5f670d4b8c3 +Subproject commit 88c1826e5e1e96cc016f633f1d3c250b6694abda From a74777d25f3223c0735853477c467f76456b6da7 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:01:43 +0800 Subject: [PATCH 013/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19522) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### Why I did it src/sonic-utilities ``` * b6f7c2b7 - (HEAD -> master, origin/master, origin/HEAD) [sfputil] Add loopback sub-command for debugging and module diagnosti… (#3369) (27 hours ago) [Xinyu Lin] * 1f944447 - Fix multi-asic behaviour for pg-drop (#3058) (2 days ago) [bktsim] * 789ef634 - Add Parallel option for apply-patch (#3373) (3 days ago) [Xincun Li] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index fb2e5cda90ce..b6f7c2b7d138 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit fb2e5cda90ced88249e06b18d8c5717a89ff62b9 +Subproject commit b6f7c2b7d138299475d994d251721455deab668f From 293bc71f35bd2f8ce47b843336f7b5b0d119066f Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:01:47 +0800 Subject: [PATCH 014/117] [submodule] Update submodule sonic-gnmi to the latest HEAD automatically (#19513) #### Why I did it src/sonic-gnmi ``` * a85dfc1 - (HEAD -> master, origin/master, origin/HEAD) Subscribe COUNTERS_DB (#268) (4 days ago) [ganglv] * 1e90d23 - Update gnmi-native to support subscribe poll mode (#267) (5 days ago) [ganglv] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-gnmi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-gnmi b/src/sonic-gnmi index 78014155a59e..a85dfc112da3 160000 --- a/src/sonic-gnmi +++ b/src/sonic-gnmi @@ -1 +1 @@ -Subproject commit 78014155a59ebdaa61ccec5f036835089f289238 +Subproject commit a85dfc112da34e2577272484b2ecbbb7f629a3b9 From 3c6e347f4ef9a8ba6c110e7c06efeb00f8bb40e6 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sat, 13 Jul 2024 19:01:52 +0800 Subject: [PATCH 015/117] [submodule] Update submodule linkmgrd to the latest HEAD automatically (#19458) #### Why I did it src/linkmgrd ``` * 6fcab47 - (HEAD -> master, origin/master, origin/HEAD) [active-standby] raising log level to notice for timed oscillation config change (#262) (28 hours ago) [Jing Zhang] * 2b7e4f9 - [active-standby] Fix the oscillation logic (#261) (11 days ago) [Longxiang Lyu] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/linkmgrd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/linkmgrd b/src/linkmgrd index 9768268cf11c..6fcab4740650 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit 9768268cf11cdfab1eccb194c0ce762e372aa536 +Subproject commit 6fcab47406502cd41d60267b36dc362555487d7c From e2b30cc49cae3d4f91126ca8dc4dd2d7b232c708 Mon Sep 17 00:00:00 2001 From: Arvindsrinivasan Lakshmi Narasimhan <55814491+arlakshm@users.noreply.github.com> Date: Sat, 13 Jul 2024 15:26:52 -0700 Subject: [PATCH 016/117] [Chassis][Voq][Yang] Make asic_name case sensitive in yang models (#19486) * make asic_name case sensitive * address comment --- .../tests_config/system_port.json | 76 +++++++++++++++++++ .../yang-models/sonic-buffer-queue.yang | 4 +- .../yang-models/sonic-queue.yang | 4 +- .../yang-models/sonic-system-port.yang | 4 +- .../yang-templates/sonic-types.yang.j2 | 6 ++ 5 files changed, 85 insertions(+), 9 deletions(-) diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/system_port.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/system_port.json index 28edae5727a1..837d5a67797d 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/system_port.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/system_port.json @@ -86,6 +86,82 @@ ] } } + }, + "SYSTEM_ASIC_NAME_UPPERCASE": { + "sonic-system-port:sonic-system-port": { + "sonic-system-port:SYSTEM_PORT": { + "SYSTEM_PORT_LIST": [ + { + "hostname": "host456", + "asic_name": "ASIC0", + "ifname": "Ethernet0", + "core_index": "1", + "core_port_index": "20", + "num_voq": "8", + "speed": "900000", + "switch_id": "1", + "system_port_id": "200" + } + ] + } + } + }, + "SYSTEM_ASIC_NAME_INVALID": { + "sonic-system-port:sonic-system-port": { + "sonic-system-port:SYSTEM_PORT": { + "SYSTEM_PORT_LIST": [ + { + "hostname": "host456", + "asic_name": "INVALIDASIC0", + "ifname": "Ethernet0", + "core_index": "1", + "core_port_index": "20", + "num_voq": "8", + "speed": "900000", + "switch_id": "1", + "system_port_id": "200" + } + ] + } + } + }, + "SYSTEM_ASIC_NAME_SUP": { + "sonic-system-port:sonic-system-port": { + "sonic-system-port:SYSTEM_PORT": { + "SYSTEM_PORT_LIST": [ + { + "hostname": "host456", + "asic_name": "ASIC12", + "ifname": "Ethernet0", + "core_index": "1", + "core_port_index": "20", + "num_voq": "8", + "speed": "900000", + "switch_id": "1", + "system_port_id": "200" + } + ] + } + } + }, + "SYSTEM_ASIC_NAME_MIXED_CASE": { + "sonic-system-port:sonic-system-port": { + "sonic-system-port:SYSTEM_PORT": { + "SYSTEM_PORT_LIST": [ + { + "hostname": "host456", + "asic_name": "Asic2", + "ifname": "Ethernet0", + "core_index": "1", + "core_port_index": "20", + "num_voq": "8", + "speed": "900000", + "switch_id": "1", + "system_port_id": "200" + } + ] + } + } } } diff --git a/src/sonic-yang-models/yang-models/sonic-buffer-queue.yang b/src/sonic-yang-models/yang-models/sonic-buffer-queue.yang index 3e96db23c16c..685ed026dbfa 100644 --- a/src/sonic-yang-models/yang-models/sonic-buffer-queue.yang +++ b/src/sonic-yang-models/yang-models/sonic-buffer-queue.yang @@ -84,9 +84,7 @@ module sonic-buffer-queue { } leaf asic_name { - type string { - pattern "[Aa]sic[0-4]"; - } + type stypes:asic_name; } leaf port { diff --git a/src/sonic-yang-models/yang-models/sonic-queue.yang b/src/sonic-yang-models/yang-models/sonic-queue.yang index e491a50b01d2..453950f8b944 100644 --- a/src/sonic-yang-models/yang-models/sonic-queue.yang +++ b/src/sonic-yang-models/yang-models/sonic-queue.yang @@ -105,9 +105,7 @@ module sonic-queue { } leaf asic_name { - type string { - pattern "[Aa]sic[0-4]"; - } + type stypes:asic_name; } leaf ifname { diff --git a/src/sonic-yang-models/yang-models/sonic-system-port.yang b/src/sonic-yang-models/yang-models/sonic-system-port.yang index f95405ac662f..25d18e9a5515 100644 --- a/src/sonic-yang-models/yang-models/sonic-system-port.yang +++ b/src/sonic-yang-models/yang-models/sonic-system-port.yang @@ -34,9 +34,7 @@ module sonic-system-port { } leaf asic_name { - type string { - pattern "[Aa]sic[0-4]"; - } + type stypes:asic_name; } leaf ifname { diff --git a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 index 6d3d3db00526..df9b3c91dd8f 100644 --- a/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 +++ b/src/sonic-yang-models/yang-templates/sonic-types.yang.j2 @@ -386,6 +386,12 @@ module sonic-types { } } + typedef asic_name { + type string { + pattern '[Aa][Ss][Ii][Cc][0-9]{1,2}'; + } + } + {% if yang_model_type == "cvl" %} /* Required for CVL */ container operation { From dc3c0451b1f8853bfd4a41b02ad6800a7080f0fa Mon Sep 17 00:00:00 2001 From: Yaqiang Zhu Date: Wed, 17 Jul 2024 04:55:19 +0800 Subject: [PATCH 017/117] [DHCP] Add try/exception when using psutil.process_iter (#19537) Why I did it After got running process list by psutil, if some of the processes exited, but invoke name() / cmdline() function of them, it will raise NoSuchProcess exception Fix issue #19507 How I did it Add try/exception in process execution Change func get_target_process_cmds to get_target_process for reuse How to verify it UT passed --- .../dhcp_utilities/common/utils.py | 7 ++++-- .../dhcp_utilities/dhcprelayd/dhcprelayd.py | 23 +++++++++++-------- .../dhcp_utilities/dhcpservd/dhcpservd.py | 9 +++++--- .../tests/common_utils.py | 7 +++++- .../tests/test_dhcprelayd.py | 17 +++++++------- .../tests/test_dhcpservd.py | 1 + src/sonic-dhcp-utilities/tests/test_utils.py | 4 +++- 7 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/sonic-dhcp-utilities/dhcp_utilities/common/utils.py b/src/sonic-dhcp-utilities/dhcp_utilities/common/utils.py index f6975c452cdd..325553f536af 100644 --- a/src/sonic-dhcp-utilities/dhcp_utilities/common/utils.py +++ b/src/sonic-dhcp-utilities/dhcp_utilities/common/utils.py @@ -160,8 +160,11 @@ def get_target_process_cmds(process_name): """ res = [] for proc in psutil.process_iter(): - if proc.name() == process_name: - res.append(proc.cmdline()) + try: + if proc.name() == process_name: + res.append(proc.cmdline()) + except psutil.NoSuchProcess: + continue return res diff --git a/src/sonic-dhcp-utilities/dhcp_utilities/dhcprelayd/dhcprelayd.py b/src/sonic-dhcp-utilities/dhcp_utilities/dhcprelayd/dhcprelayd.py index 66139500d0a5..01e6d5499cf5 100644 --- a/src/sonic-dhcp-utilities/dhcp_utilities/dhcprelayd/dhcprelayd.py +++ b/src/sonic-dhcp-utilities/dhcp_utilities/dhcprelayd/dhcprelayd.py @@ -319,16 +319,19 @@ def _kill_exist_relay_releated_process(self, new_dhcp_interfaces, process_name, # Get old dhcrelay process and get old dhcp interfaces for proc in psutil.process_iter(): - if proc.name() == process_name: - cmds = proc.cmdline() - index = 0 - target_procs.append(proc) - while index < len(cmds): - if cmds[index] == "-id": - old_dhcp_interfaces.add(cmds[index + 1]) - index += 2 - else: - index += 1 + try: + if proc.name() == process_name: + cmds = proc.cmdline() + index = 0 + target_procs.append(proc) + while index < len(cmds): + if cmds[index] == "-id": + old_dhcp_interfaces.add(cmds[index + 1]) + index += 2 + else: + index += 1 + except psutil.NoSuchProcess: + continue if len(target_procs) == 0: return NOT_FOUND_PROC diff --git a/src/sonic-dhcp-utilities/dhcp_utilities/dhcpservd/dhcpservd.py b/src/sonic-dhcp-utilities/dhcp_utilities/dhcpservd/dhcpservd.py index e8341e436b7c..73a928eb08c9 100644 --- a/src/sonic-dhcp-utilities/dhcp_utilities/dhcpservd/dhcpservd.py +++ b/src/sonic-dhcp-utilities/dhcp_utilities/dhcpservd/dhcpservd.py @@ -39,9 +39,12 @@ def _notify_kea_dhcp4_proc(self): Send SIGHUP signal to kea-dhcp4 process """ for proc in psutil.process_iter(): - if KEA_DHCP4_PROC_NAME in proc.name(): - proc.send_signal(signal.SIGHUP) - break + try: + if KEA_DHCP4_PROC_NAME in proc.name(): + proc.send_signal(signal.SIGHUP) + break + except psutil.NoSuchProcess: + continue def dump_dhcp4_config(self): """ diff --git a/src/sonic-dhcp-utilities/tests/common_utils.py b/src/sonic-dhcp-utilities/tests/common_utils.py index 6f3c07a174f8..f5eb4e018f86 100644 --- a/src/sonic-dhcp-utilities/tests/common_utils.py +++ b/src/sonic-dhcp-utilities/tests/common_utils.py @@ -65,17 +65,22 @@ def mock_get_config_db_table(table_name): class MockProc(object): - def __init__(self, name, pid=None, status=psutil.STATUS_RUNNING): + def __init__(self, name, pid=1, exited=False): self.proc_name = name self.pid = pid + self.exited = exited def name(self): + if self.exited: + raise psutil.NoSuchProcess(self.pid) return self.proc_name def send_signal(self, sig_num): pass def cmdline(self): + if self.exited: + raise psutil.NoSuchProcess(self.pid) if self.proc_name == "dhcrelay": return ["/usr/sbin/dhcrelay", "-d", "-m", "discard", "-a", "%h:%p", "%P", "--name-alias-map-file", "/tmp/port-name-alias-map.txt", "-id", "Vlan1000", "-iu", "docker0", "240.127.1.2"] diff --git a/src/sonic-dhcp-utilities/tests/test_dhcprelayd.py b/src/sonic-dhcp-utilities/tests/test_dhcprelayd.py index 0cc95ad6a21c..4914ff020d63 100644 --- a/src/sonic-dhcp-utilities/tests/test_dhcprelayd.py +++ b/src/sonic-dhcp-utilities/tests/test_dhcprelayd.py @@ -111,6 +111,7 @@ def test_kill_exist_relay_releated_process(mock_swsscommon_dbconnector_init, new process_iter_ret = [] for running_proc in running_procs: process_iter_ret.append(MockProc(running_proc)) + process_iter_ret.append(MockProc("exited_proc", exited=True)) with patch.object(psutil, "process_iter", return_value=process_iter_ret), \ patch.object(ConfigDbEventChecker, "enable"): dhcp_db_connector = DhcpDbConnector() @@ -194,23 +195,23 @@ def test_execute_supervisor_dhcp_relay_process(mock_swsscommon_dbconnector_init, mock_run.assert_called_once_with(["supervisorctl", op, "dhcpmon-Vlan1000"], check=True) -@pytest.mark.parametrize("target_cmds", [[["/usr/bin/dhcrelay"]], [["/usr/bin/dhcpmon"]]]) -def test_check_dhcp_relay_process(mock_swsscommon_dbconnector_init, mock_swsscommon_table_init, target_cmds): - exp_config = {"isc-dhcpv4-relay-Vlan1000": ["/usr/bin/dhcrelay"]} - with patch("dhcp_utilities.dhcprelayd.dhcprelayd.get_target_process_cmds", return_value=target_cmds), \ +@pytest.mark.parametrize("target_procs_cmds", [[["dhcrelay", "-d"]], [["dhcpmon"]]]) +def test_check_dhcp_relay_process(mock_swsscommon_dbconnector_init, mock_swsscommon_table_init, target_procs_cmds): + exp_config = { + "isc-dhcpv4-relay-Vlan1000": ["dhcrelay", "-d"] + } + with patch("dhcp_utilities.dhcprelayd.dhcprelayd.get_target_process_cmds", return_value=target_procs_cmds), \ patch.object(DhcpRelayd, "dhcp_relay_supervisor_config", return_value=exp_config, new_callable=PropertyMock), \ patch.object(sys, "exit", mock_exit_func): dhcp_db_connector = DhcpDbConnector() dhcprelayd = DhcpRelayd(dhcp_db_connector, None) - exp_cmds = [value for key, value in exp_config.items() if "isc-dhcpv4-relay" in key] - exp_cmds.sort() try: dhcprelayd._check_dhcp_relay_processes() except SystemExit: - assert exp_cmds != target_cmds + assert target_procs_cmds[0] != exp_config["isc-dhcpv4-relay-Vlan1000"] else: - assert exp_cmds == target_cmds + assert target_procs_cmds[0] == exp_config["isc-dhcpv4-relay-Vlan1000"] def test_get_dhcp_relay_config(mock_swsscommon_dbconnector_init, mock_swsscommon_table_init): diff --git a/src/sonic-dhcp-utilities/tests/test_dhcpservd.py b/src/sonic-dhcp-utilities/tests/test_dhcpservd.py index 4c8175b7e0bc..b55703aeb416 100644 --- a/src/sonic-dhcp-utilities/tests/test_dhcpservd.py +++ b/src/sonic-dhcp-utilities/tests/test_dhcpservd.py @@ -66,6 +66,7 @@ def test_dump_dhcp4_config(mock_swsscommon_dbconnector_init, enabled_checker): def test_notify_kea_dhcp4_proc(process_list, mock_swsscommon_dbconnector_init, mock_get_render_template, mock_parse_port_map_alias): proc_list = [MockProc(process_name) for process_name in process_list] + proc_list.append(MockProc("exited_proc", exited=True)) with patch.object(psutil, "process_iter", return_value=proc_list), \ patch.object(MockProc, "send_signal", MagicMock()) as mock_send_signal: dhcp_db_connector = DhcpDbConnector() diff --git a/src/sonic-dhcp-utilities/tests/test_utils.py b/src/sonic-dhcp-utilities/tests/test_utils.py index cf69c2f93377..4a41049fe06e 100644 --- a/src/sonic-dhcp-utilities/tests/test_utils.py +++ b/src/sonic-dhcp-utilities/tests/test_utils.py @@ -142,7 +142,9 @@ def test_validate_ttr_type(test_data): def test_get_target_process_cmds(): - with patch.object(psutil, "process_iter", return_value=[MockProc("dhcrelay", 1), MockProc("dhcpmon", 2)], + with patch.object(psutil, "process_iter", return_value=[MockProc("dhcrelay", 1), + MockProc("dhcrelay", 1, exited=True), + MockProc("dhcpmon", 2)], new_callable=PropertyMock): res = utils.get_target_process_cmds("dhcrelay") expected_res = [ From 14eb4ca944ca4d08f984fa5599e461c05a77b100 Mon Sep 17 00:00:00 2001 From: xumia <59720581+xumia@users.noreply.github.com> Date: Wed, 17 Jul 2024 20:05:08 +0800 Subject: [PATCH 018/117] [Security] Fix krb5 CVE-2024-37370 (#19577) Why I did it [Security] Fix krb5 CVE-2024-37370 Work item tracking Microsoft ADO (number only): 28432951 How I did it Upgrade krb5 to version 1.18.3-6+deb11u5+fips --- rules/sonic-fips.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rules/sonic-fips.mk b/rules/sonic-fips.mk index 0ec82b26690d..524da2c61509 100644 --- a/rules/sonic-fips.mk +++ b/rules/sonic-fips.mk @@ -12,14 +12,14 @@ FIPS_KRB5_VERSION = 1.20.1-2+deb12u1+fips endif ifeq ($(BLDENV), bullseye) -FIPS_VERSION = 0.12 +FIPS_VERSION = 0.13 FIPS_OPENSSL_VERSION = 1.1.1n-0+deb11u5+fips FIPS_OPENSSH_VERSION = 8.4p1-5+deb11u2+fips FIPS_PYTHON_MAIN_VERSION = 3.9 FIPS_PYTHON_VERSION = 3.9.2-1+fips FIPS_GOLANG_MAIN_VERSION = 1.15 FIPS_GOLANG_VERSION = 1.15.15-1~deb11u4+fips -FIPS_KRB5_VERSION = 1.18.3-6+deb11u4+fips +FIPS_KRB5_VERSION = 1.18.3-6+deb11u5+fips endif FIPS_URL_PREFIX = https://sonicstorage.blob.core.windows.net/public/fips/$(BLDENV)/$(FIPS_VERSION)/$(CONFIGURED_ARCH) From 68136cb440614127f60848b751e0f9ebb0ab15c6 Mon Sep 17 00:00:00 2001 From: Riff Date: Wed, 17 Jul 2024 09:55:55 -0700 Subject: [PATCH 019/117] [Arista]: Update Arista7060X6-PE 256x200G mmu configuration. (#19570) Why I did it This PR updates the MMU related configurations on Arista 7060X6-PE device with 256x200G breakout. Work item tracking Microsoft ADO (number only): 28707303 How I did it This PR updates 3 things: - Updated bcm file for optimal MMU settings. - Updated buffer defaults to accommodate the TH5 architecture with 1 ingress pool + 1 egress pool and updated to optimal value. - Updated PG lookups for buffer setups. How to verify it Tested with sonic-mgmt tests with xoff/xon tests with updated QoS parameter: https://github.com/sonic-net/sonic-mgmt/pull/13656/files Local ixia test is passing in lab. Both verified using 202311 branch for backporting. --- .../Arista-7060X6-64PE-256x200G/BALANCED | 1 - .../BALANCED/buffers_defaults_t0.j2 | 36 + .../BALANCED/buffers_defaults_t1.j2 | 36 + .../BALANCED/pg_profile_lookup.ini | 23 + .../th5-a7060x6-64pe.config.bcm | 1180 ++++++++++++++++- 5 files changed, 1230 insertions(+), 46 deletions(-) delete mode 120000 device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED create mode 100644 device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t0.j2 create mode 100644 device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t1.j2 create mode 100644 device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/pg_profile_lookup.ini diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED deleted file mode 120000 index afd21766cc64..000000000000 --- a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED +++ /dev/null @@ -1 +0,0 @@ -../../../common/profiles/th5/gen/BALANCED \ No newline at end of file diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..f4b26e0f3497 --- /dev/null +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t0.j2 @@ -0,0 +1,36 @@ +{%- set default_cable = '5m' %} + +{%- include 'buffer_ports.j2' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "165660324", + "type": "ingress", + "mode": "dynamic", + "xoff": "29520896" + }, + "egress_lossless_pool": { + "size": "165660324", + "type": "egress", + "mode": "dynamic" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool": "ingress_lossless_pool", + "size": "0", + "static_th": "167546528" + }, + "egress_lossy_profile": { + "pool": "egress_lossless_pool", + "size": "1778", + "dynamic_th": "0" + }, + "egress_lossless_profile": { + "pool": "egress_lossless_pool", + "size": "0", + "static_th": "167546528" + } + }, +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t1.j2 b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..46a7b799acf2 --- /dev/null +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t1.j2 @@ -0,0 +1,36 @@ +{%- set default_cable = '5m' %} + +{%- include 'buffer_ports.j2' %} + +{%- macro generate_buffer_pool_and_profiles() %} + "BUFFER_POOL": { + "ingress_lossless_pool": { + "size": "121964196", + "type": "ingress", + "mode": "dynamic", + "xoff": "29520896" + }, + "egress_lossless_pool": { + "size": "121964196", + "type": "egress", + "mode": "static" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_profile": { + "pool": "ingress_lossless_pool", + "size": "0", + "static_th": "167546528" + }, + "egress_lossy_profile": { + "pool": "egress_lossless_pool", + "size": "1778", + "dynamic_th": "1" + }, + "egress_lossless_profile": { + "pool": "egress_lossless_pool", + "size": "0", + "static_th": "125995684" + } + }, +{%- endmacro %} diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/pg_profile_lookup.ini b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/pg_profile_lookup.ini new file mode 100644 index 000000000000..064222610a18 --- /dev/null +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/pg_profile_lookup.ini @@ -0,0 +1,23 @@ +# PG lossless profiles. +# speed cable size xon xoff threshold xon_offset + 10000 5m 1248 2288 35776 0 2288 + 25000 5m 1248 2288 53248 0 2288 + 40000 5m 1248 2288 66560 0 2288 + 50000 5m 1248 2288 90272 0 2288 + 100000 5m 18796 3556 300990 -2 3556 + 200000 5m 18796 3556 300990 -2 3556 + 400000 5m 18796 3556 300990 -2 3556 + 10000 40m 1248 2288 37024 0 2288 + 25000 40m 1248 2288 53248 0 2288 + 40000 40m 1248 2288 71552 0 2288 + 50000 40m 1248 2288 96096 0 2288 + 100000 40m 18796 3556 300990 -2 3556 + 200000 40m 18796 3556 300990 -2 3556 + 400000 40m 18796 3556 300990 -2 3556 + 10000 300m 1248 2288 46176 0 2288 + 25000 300m 1248 2288 79040 0 2288 + 40000 300m 1248 2288 108160 0 2288 + 50000 300m 1248 2288 141856 0 2288 + 100000 300m 18796 3556 300990 -2 3556 + 200000 300m 18796 3556 300990 -2 3556 + 400000 300m 18796 3556 300990 -2 3556 diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm index 7df89f4322ee..a7fc7551e347 100644 --- a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm @@ -19,7 +19,6 @@ # ... # : # - --- bcm_device: 0: @@ -40,6 +39,7 @@ bcm_device: l3_intf_vlan_split_egress : 1 pfc_deadlock_seq_control : 1 sai_tunnel_support: 2 + mmu_init_config: "\"TH5-MSFT-PROD\"" bcm_tunnel_term_compatible_mode: 1 l3_ecmp_member_first_lkup_mem_size: 12288 --- @@ -1926,95 +1926,1185 @@ device: DEVICE_CONFIG: AUTOLOAD_BOARD_SETTINGS: 0 ... -## Baseline +### Baseline +# Skipping buffer reservation. This means that don't use SDK default setings. --- device: 0: TM_THD_CONFIG: SKIP_BUFFER_RESERVATION: 1 THRESHOLD_MODE: LOSSY_AND_LOSSLESS + + TM_SCHEDULER_CONFIG: + NUM_MC_Q: NUM_MC_Q_2 + ... + +# Initialize the various thresholds to zero --- +# Ingress service pool level initialization device: 0: + # Ingress service pool + TM_ING_THD_SERVICE_POOL: + ? + BUFFER_POOL: [0,1] + TM_ING_SERVICE_POOL_ID: [[0,3]] + : + COLOR_SPECIFIC_LIMITS: 0 + SHARED_LIMIT_CELLS: 0 + SHARED_RESUME_OFFSET_CELLS: 0 + YELLOW_OFFSET_CELLS: 0 + RED_OFFSET_CELLS: 0 + + # Ingress headroom pool TM_ING_THD_HEADROOM_POOL: ? - BUFFER_POOL: [[0,1]] + BUFFER_POOL: [0,1] TM_HEADROOM_POOL_ID: [[0,3]] : LIMIT_CELLS: 0 + +... +# Ingress priority to PG mappings +--- +device: + 0: + # priority to PG mapping for UC traffic, 8 profiles (IDs), 16 priorties + TM_ING_UC_ING_PRI_MAP: + ? + # Profile 0 + TM_ING_UC_ING_PRI_MAP_ID: [0,7] + ING_PRI: [0,15] + : + TM_PRI_GRP_ID: 0 - TM_ING_THD_SERVICE_POOL: + # priority to PG mapping for MC traffic, 8 profiles( IDs) 16 priorities + TM_ING_NONUC_ING_PRI_MAP: ? - BUFFER_POOL: [[0,1]] - TM_ING_SERVICE_POOL_ID: [[0,3]] + # Profile 0 + TM_ING_NONUC_ING_PRI_MAP_ID: [0,7] + ING_PRI: [0,15] : - SHARED_LIMIT_CELLS: 0 - SHARED_RESUME_OFFSET_CELLS: 0 - COLOR_SPECIFIC_LIMITS: 0 + TM_PRI_GRP_ID: 0 + + TM_PRI_GRP_POOL_MAP: + ? + TM_PRI_GRP_POOL_MAP_ID: [0,7] + TM_PRI_GRP_ID: [[0,7]] + : + TM_ING_SERVICE_POOL_ID: 0 + TM_HEADROOM_POOL_ID: 0 + # PFC generation: Priority group(s) + TM_PFC_PRI_TO_PRI_GRP_MAP: + ? + TM_PFC_PRI_TO_PRI_GRP_MAP_ID: [0,7] + PFC_PRI: [0,7] + : + TM_PRI_GRP_ID: 0 + +... +# Egress service pool level initialization +# Output port Thresholds +--- +device: + 0: + # Egress unicast shared pool TM_EGR_THD_SERVICE_POOL: ? - BUFFER_POOL: [[0,1]] + BUFFER_POOL: [0,1] TM_EGR_SERVICE_POOL_ID: [[0,3]] : + COLOR_SPECIFIC_LIMITS: 0 SHARED_LIMIT_CELLS: 0 SHARED_RESUME_LIMIT_CELLS: 0 - COLOR_SPECIFIC_LIMITS: 0 YELLOW_SHARED_LIMIT_CELLS: 0 YELLOW_SHARED_RESUME_LIMIT_CELLS: 0 RED_SHARED_LIMIT_CELLS: 0 RED_SHARED_RESUME_LIMIT_CELLS: 0 + # Egress multicast CQE pool TM_THD_MC_EGR_SERVICE_POOL: ? - BUFFER_POOL: [[0,1]] + BUFFER_POOL: [0,1] TM_EGR_SERVICE_POOL_ID: [[0,3]] : + COLOR_SPECIFIC_LIMITS: 0 SHARED_LIMIT_CELLS: 0 SHARED_RESUME_LIMIT_CELLS: 0 - COLOR_SPECIFIC_LIMITS: 0 YELLOW_SHARED_LIMIT_CELLS: 0 YELLOW_SHARED_RESUME_LIMIT_CELLS: 0 RED_SHARED_LIMIT_CELLS: 0 RED_SHARED_RESUME_LIMIT_CELLS: 0 + + TM_THD_DYNAMIC_MARGIN: + ? + BUFFER_POOL: [0,1] + TM_EGR_SERVICE_POOL_ID: [0,3] + : + MARGIN: [8256,16513,24769,33026,41282,49539,57795,66052,82565,99078] + +... +#Per Port Registers +#Input Port Thresholds +--- +device: + 0: + # Set PG is LOSSLESS, PFC enable bit TM_ING_PORT_PRI_GRP: ? - PORT_ID: [[1, 8], - [11, 18], - [22, 29], - [33, 40], - [44, 51], - [55, 62], - [66, 73], - [77, 84], - [88, 95], - [99, 106], - [110, 117], - [121, 128], - [132, 139], - [143, 150], - [154, 161], - [165, 172], - [176, 183], - [187, 194], - [198, 205], - [209, 216], - [220, 227], - [231, 238], - [242, 249], - [253, 260], - [264, 271], - [275, 282], - [286, 293], - [297, 304], - [308, 315], - [319, 326], - [330, 337], - [341, 348]] + PORT_ID: [[0,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_PRI_GRP_ID: [[0,7]] + : + PFC: 0 + LOSSLESS: 0 + ING_MIN_MODE: USE_PRI_GRP_MIN + + TM_ING_PORT: + ? + PORT_ID: [[0,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + : + # Pause enable bit, + PAUSE: 0 + # Ingress priority profile select, maps to priority group + ING_PRI_MAP_ID: 0 + #Priority group profile select, maps to service pool + PRI_GRP_MAP_ID: 0 + + # Ingress port Level to Service Pool limits + TM_ING_THD_PORT_SERVICE_POOL: + ? + PORT_ID: [[0,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_ING_SERVICE_POOL_ID: [[0,3]] + : + MIN_GUARANTEE_CELLS: 0 + SHARED_LIMIT_CELLS: 0 + RESUME_LIMIT_CELLS: 0 + + # Port level PG limits + TM_ING_THD_PORT_PRI_GRP: + ? + PORT_ID: [[0,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_PRI_GRP_ID: [[0,7]] + : + MIN_GUARANTEE_CELLS: 0 + DYNAMIC_SHARED_LIMITS: 0 + SHARED_LIMIT_CELLS_STATIC: 0 + RESUME_OFFSET_CELLS: 0 + RESUME_FLOOR_CELLS: 0 + HEADROOM_LIMIT_AUTO: 0 + HEADROOM_LIMIT_CELLS: 0 + EARLY_PFC_XOFF_OFFSET_CELLS: 0 + EARLY_PFC_XON_OFFSET_CELLS: 0 + EARLY_PFC_FLOOR_CELLS: 0 + +... +# Output Port Thresholds -2 +# Per Unicast Queue Thresholds +--- +device: + 0: + TM_EGR_SERVICE_POOL_DYNAMIC: + ? + BUFFER_POOL: [0,1] + TM_EGR_SERVICE_POOL_ID: [0,3] + : + ADAPTIVE_DYNAMIC: ALPHA_1 + + TM_PORT_UC_Q_TO_SERVICE_POOL: + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_UC_Q_ID: [[0,7]] + : + USE_QGROUP_MIN: 0 + + TM_THD_UC_Q: + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_UC_Q_ID: [[0,7]] + : + MIN_GUARANTEE_CELLS: 0 + SHARED_LIMITS: 1 + DYNAMIC_SHARED_LIMITS: 0 + SHARED_LIMIT_CELLS_STATIC: 0 + + TM_PORT_MC_Q_TO_SERVICE_POOL: + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_MC_Q_ID: [[0,1]] + : + USE_QGROUP_MIN: 0 + + TM_THD_MC_Q: + ? + # CPU port, 48 MC queues + PORT_ID: 0 + TM_MC_Q_ID: [[0,47]] + : + MIN_GUARANTEE_CELLS: 0 + SHARED_LIMITS: 1 + DYNAMIC_SHARED_LIMITS: 0 + SHARED_LIMIT_CELLS_STATIC: 0 + ? + # uplink, downlink and loopback ports, 2 MC queues + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_MC_Q_ID: [[0,1]] + : + MIN_GUARANTEE_CELLS: 0 + SHARED_LIMITS: 1 + DYNAMIC_SHARED_LIMITS: 0 + SHARED_LIMIT_CELLS_STATIC: 0 + + TM_THD_Q_GRP: + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + : + UC_Q_GRP_MIN_GUARANTEE_CELLS: 0 + MC_Q_GRP_MIN_GUARANTEE_CELLS: 0 + + TM_EGR_THD_UC_PORT_SERVICE_POOL: + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_EGR_SERVICE_POOL_ID: [0,3] + : + COLOR_SPECIFIC_LIMITS: 0 + SHARED_LIMIT_CELLS: 0 + SHARED_RESUME_LIMIT_CELLS: 0 + YELLOW_SHARED_LIMIT_CELLS: 0 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 0 + RED_SHARED_LIMIT_CELLS: 0 + RED_SHARED_RESUME_LIMIT_CELLS: 0 + + TM_EGR_THD_MC_PORT_SERVICE_POOL: + ? + PORT_ID: [[0,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_EGR_SERVICE_POOL_ID: [0,3] + : + COLOR_SPECIFIC_LIMITS: 0 + RED_SHARED_LIMIT_CELLS: 0 + YELLOW_SHARED_LIMIT_CELLS: 0 + SHARED_LIMIT_CELLS: 0 + RED_SHARED_RESUME_LIMIT_CELLS: 0 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 0 + SHARED_RESUME_LIMIT_CELLS: 0 +... +### THDR Limits : initialization +--- +device: + 0: + TM_THD_REPL_Q: + ? + REPL_Q_NUM: [0,6] + : + SHARED_LIMITS: 0 + DYNAMIC_SHARED_LIMITS: 0 + SHARED_LIMIT_DYNAMIC: ALPHA_1 + RESUME_OFFSET_CELLS: 0 + COLOR_SPECIFIC_LIMITS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 + YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 + RED_LIMIT_DYNAMIC: PERCENTAGE_625 + SHARED_LIMIT_PKTS: 0 + DYNAMIC_SHARED_LIMIT_PKTS: 0 + SHARED_LIMIT_DYNAMIC_PKTS: ALPHA_1 + RESUME_OFFSET_PKTS: 0 + COLOR_SPECIFIC_LIMIT_PKTS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMIT_PKTS: 0 + YELLOW_LIMIT_DYNAMIC_PKTS: PERCENTAGE_750 + RED_LIMIT_DYNAMIC_PKTS: PERCENTAGE_625 + MIN_GUARANTEE_CELLS: 0 + MIN_GUARANTEE_PKTS: 0 + + TM_THD_REPL_SERVICE_POOL: + SHARED_LIMIT_CELLS: 0 + SHARED_RESUME_LIMIT_CELLS: 0 + COLOR_SPECIFIC_LIMITS: 0 + YELLOW_SHARED_LIMIT_CELLS: 0 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 0 + RED_SHARED_LIMIT_CELLS: 0 + RED_SHARED_RESUME_LIMIT_CELLS: 0 + SHARED_LIMIT_PKTS: 0 + SHARED_RESUME_LIMIT_PKTS: 0 + COLOR_SPECIFIC_LIMITS: 0 + YELLOW_SHARED_LIMIT_PKTS: 0 + YELLOW_SHARED_RESUME_LIMIT_PKTS: 0 + RED_SHARED_LIMIT_PKTS: 0 + RED_SHARED_RESUME_LIMIT_PKTS: 0 + +... +### Begin MMU ingress threshold settings + +### Pools +--- +device: + 0: +# Ingress Service Pool Thresholds + TM_ING_THD_SERVICE_POOL: + ? + BUFFER_POOL: [0,1] + TM_ING_SERVICE_POOL_ID: 0 + : + SHARED_LIMIT_CELLS: 240087 + SHARED_RESUME_OFFSET_CELLS: 74 + COLOR_SPECIFIC_LIMITS: 0 + ? + BUFFER_POOL: [0,1] + TM_ING_SERVICE_POOL_ID: 1 + : + SHARED_LIMIT_CELLS: 605 + SHARED_RESUME_OFFSET_CELLS: 74 + COLOR_SPECIFIC_LIMITS: 0 + + +# Ingress Headroom Pool Thresholds + TM_ING_THD_HEADROOM_POOL: + ? + BUFFER_POOL: [0,1] + TM_HEADROOM_POOL_ID: 0 + : + LIMIT_CELLS: 58112 + +... +--- +device: + 0: +# UC Traffic Priority to PG mapping + TM_ING_UC_ING_PRI_MAP: + ? + # Profile 0 + TM_ING_UC_ING_PRI_MAP_ID: 0 + ING_PRI: [0, 1, 2, 5, 6, [8,15]] + : + TM_PRI_GRP_ID: 0 + ? + TM_ING_UC_ING_PRI_MAP_ID: 0 + ING_PRI: 3 + : + TM_PRI_GRP_ID: 3 + ? + TM_ING_UC_ING_PRI_MAP_ID: 0 + ING_PRI: 4 + : + TM_PRI_GRP_ID: 4 + ? + TM_ING_UC_ING_PRI_MAP_ID: 0 + ING_PRI: 7 + : + TM_PRI_GRP_ID: 7 + ? + # Profile 1 + TM_ING_UC_ING_PRI_MAP_ID: 1 + ING_PRI: [[0,7]] + : + TM_PRI_GRP_ID: 7 + ? + TM_ING_UC_ING_PRI_MAP_ID: 1 + ING_PRI: [[8,15]] + : + TM_PRI_GRP_ID: 0 + +# MC Traffic Priority to PG mapping + TM_ING_NONUC_ING_PRI_MAP: + ? + # Profile 0 + TM_ING_NONUC_ING_PRI_MAP_ID: 0 + ING_PRI: [0, 1, 2, 5, 6, [8,15]] + : + TM_PRI_GRP_ID: 0 + ? + TM_ING_NONUC_ING_PRI_MAP_ID: 0 + ING_PRI: 3 + : + TM_PRI_GRP_ID: 3 + ? + TM_ING_NONUC_ING_PRI_MAP_ID: 0 + ING_PRI: 4 + : + TM_PRI_GRP_ID: 4 + ? + TM_ING_NONUC_ING_PRI_MAP_ID: 0 + ING_PRI: 7 + : + TM_PRI_GRP_ID: 7 + ? + # Profile 1 + TM_ING_NONUC_ING_PRI_MAP_ID: 1 + ING_PRI: [[0,7]] + : + TM_PRI_GRP_ID: 7 + ? + TM_ING_NONUC_ING_PRI_MAP_ID: 1 + ING_PRI: [[8,15]] + : + TM_PRI_GRP_ID: 0 + +# PG to Headroom Pool Mapping + TM_PRI_GRP_POOL_MAP: + ? + TM_PRI_GRP_POOL_MAP_ID: 0 + TM_PRI_GRP_ID: [[0,6]] + : + TM_HEADROOM_POOL_ID: 0 + ? + TM_PRI_GRP_POOL_MAP_ID: 0 + TM_PRI_GRP_ID: 7 + : + TM_HEADROOM_POOL_ID: 1 + +# PG to Service Pool Mapping + TM_PRI_GRP_POOL_MAP: + ? + TM_PRI_GRP_POOL_MAP_ID: 0 + TM_PRI_GRP_ID: [[0,6]] + : + TM_ING_SERVICE_POOL_ID: 0 + ? + TM_PRI_GRP_POOL_MAP_ID: 0 + TM_PRI_GRP_ID: 7 + : + TM_ING_SERVICE_POOL_ID: 1 + +# Ingress PG to PFC priority mapping +# TM_PFC_PRI_TO_PRI_GRP_MAP is mapped to MMU_THDI_PFCPRI_PG_PROFILE in physical table. There are 8 profiles to configure the PFC to priority group mappings. For exmple, you could map multiple PG to a PFC. This is needed to generate PFC when a PG is hitting the limits. + TM_PFC_PRI_TO_PRI_GRP_MAP: + ? + TM_PFC_PRI_TO_PRI_GRP_MAP_ID: 0 + PFC_PRI: 3 + : TM_PRI_GRP_ID: 3 + ? + TM_PFC_PRI_TO_PRI_GRP_MAP_ID: 0 + PFC_PRI: 4 + : + TM_PRI_GRP_ID: 4 + +# Per input port PG and flow control configurations +# TM_ING_PORT_PRI_GRP is mapped to MMU_THDI_ING_PORT_CONFIG in physical table + TM_ING_PORT_PRI_GRP: + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + TM_PRI_GRP_ID: [3,4] + : + PFC: 1 + LOSSLESS: 1 + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + TM_PRI_GRP_ID: [3,4] : PFC: 1 LOSSLESS: 1 + +# ING_PRI_MAP_ID is the ingress priority PG profile select, which maps to the Priority Group +# PRI_GRP_MAP_ID is the Priority Group profile select, which maps to service pool + TM_ING_PORT: + ? + PORT_ID: [0] + : + ING_PRI_MAP_ID: 1 + PRI_GRP_MAP_ID: 0 + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + : + ING_PRI_MAP_ID: 0 + PRI_GRP_MAP_ID: 0 + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + : + ING_PRI_MAP_ID: 0 + PRI_GRP_MAP_ID: 0 + ? + PORT_ID: [76, 274] + : + ING_PRI_MAP_ID: 1 + PRI_GRP_MAP_ID: 0 + ? + PORT_ID: [21, 43, 65, 87, 109, 131, 153, 175, 197, 219, 241, 263, 285, 307, 329, 351] + : + ING_PRI_MAP_ID: 1 + PRI_GRP_MAP_ID: 0 + +... + + +###################################### +--- +device: + 0: +# Per input port Service Pool Thresholds + TM_ING_THD_PORT_SERVICE_POOL: + ? + PORT_ID: [[0,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_ING_SERVICE_POOL_ID: [0, 1] + : + MIN_GUARANTEE_CELLS: 0 + SHARED_LIMIT_CELLS: 329816 + RESUME_LIMIT_CELLS: 329816 + +# Per input Port PG Thresholds + TM_ING_THD_PORT_PRI_GRP: + ? + PORT_ID: [[0,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_PRI_GRP_ID: [0, 1, 2, 5, 6, 7] + : + MIN_GUARANTEE_CELLS: 0 + DYNAMIC_SHARED_LIMITS: 0 + SHARED_LIMIT_CELLS_STATIC: 329816 + HEADROOM_LIMIT_CELLS: 0 + RESUME_OFFSET_CELLS: 0 + RESUME_FLOOR_CELLS: 0 + HEADROOM_LIMIT_AUTO: 0 + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + TM_PRI_GRP_ID: [3,4] + : + MIN_GUARANTEE_CELLS: 74 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_DYNAMIC: ALPHA_1_4 + RESUME_OFFSET_CELLS: 14 + RESUME_FLOOR_CELLS: 0 + HEADROOM_LIMIT_AUTO: 0 + HEADROOM_LIMIT_CELLS: 1185 + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + TM_PRI_GRP_ID: [3,4] + : + MIN_GUARANTEE_CELLS: 74 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_DYNAMIC: ALPHA_1_4 + RESUME_OFFSET_CELLS: 14 + RESUME_FLOOR_CELLS: 0 + HEADROOM_LIMIT_AUTO: 0 + HEADROOM_LIMIT_CELLS: 1185 + ? + PORT_ID: [76, 274] + TM_PRI_GRP_ID: [3,4] + : + MIN_GUARANTEE_CELLS: 0 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_DYNAMIC: ALPHA_1_4 + RESUME_OFFSET_CELLS: 0 + RESUME_FLOOR_CELLS: 0 + HEADROOM_LIMIT_AUTO: 0 + HEADROOM_LIMIT_CELLS: 0 + ? + PORT_ID: [21, 43, 65, 87, 109, 131, 153, 175, 197, 219, 241, 263, 285, 307, 329, 351] + TM_PRI_GRP_ID: [3,4] + : + MIN_GUARANTEE_CELLS: 0 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_DYNAMIC: ALPHA_1_4 + RESUME_OFFSET_CELLS: 0 + RESUME_FLOOR_CELLS: 0 + HEADROOM_LIMIT_AUTO: 0 + ? + PORT_ID: [0] + TM_PRI_GRP_ID: [3,4] + : + MIN_GUARANTEE_CELLS: 0 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_DYNAMIC: ALPHA_1_4 + RESUME_OFFSET_CELLS: 0 + RESUME_FLOOR_CELLS: 0 + HEADROOM_LIMIT_AUTO: 0 + +... + + +### Egress Service Pools +--- +device: + 0: +# Unicast Egress Service Pool Limits + TM_EGR_THD_SERVICE_POOL: + ? + BUFFER_POOL: [0,1] + TM_EGR_SERVICE_POOL_ID: 0 + : + SHARED_LIMIT_CELLS: 240087 + SHARED_RESUME_LIMIT_CELLS: 30001 + COLOR_SPECIFIC_LIMITS: 0 + YELLOW_SHARED_LIMIT_CELLS: 22509 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 22499 + RED_SHARED_LIMIT_CELLS: 18757 + RED_SHARED_RESUME_LIMIT_CELLS: 18747 + ? + BUFFER_POOL: [0,1] + TM_EGR_SERVICE_POOL_ID: 1 + : + SHARED_LIMIT_CELLS: 605 + SHARED_RESUME_LIMIT_CELLS: 73 + COLOR_SPECIFIC_LIMITS: 0 + YELLOW_SHARED_LIMIT_CELLS: 57 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 55 + RED_SHARED_LIMIT_CELLS: 48 + RED_SHARED_RESUME_LIMIT_CELLS: 46 +... +--- +device: + 0: +# Multicast Egress Service Pool Limits, CQEs + TM_THD_MC_EGR_SERVICE_POOL: + ? + BUFFER_POOL: [0,1] + TM_EGR_SERVICE_POOL_ID: 0 + : + SHARED_LIMIT_CELLS: 19538 + ? + BUFFER_POOL: [0,1] + TM_EGR_SERVICE_POOL_ID: 1 + : + SHARED_LIMIT_CELLS: 605 +... +--- +device: + 0: +# Multicast Egress Service Pool Limits, CQEs + TM_THD_MC_EGR_SERVICE_POOL: + ? + BUFFER_POOL: [0,1] + TM_EGR_SERVICE_POOL_ID: 0 + : + SHARED_RESUME_LIMIT_CELLS: 2432 + COLOR_SPECIFIC_LIMITS: 0 + YELLOW_SHARED_LIMIT_CELLS: 1832 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 1822 + RED_SHARED_LIMIT_CELLS: 1527 + RED_SHARED_RESUME_LIMIT_CELLS: 1517 + ? + BUFFER_POOL: [0,1] + TM_EGR_SERVICE_POOL_ID: 1 + : + SHARED_RESUME_LIMIT_CELLS: 73 + COLOR_SPECIFIC_LIMITS: 0 + YELLOW_SHARED_LIMIT_CELLS: 57 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 55 + RED_SHARED_LIMIT_CELLS: 48 + RED_SHARED_RESUME_LIMIT_CELLS: 46 +... + +... +### Adaptive Alpha +--- +device: + 0: + TM_EGR_SERVICE_POOL_DYNAMIC: + ? + BUFFER_POOL: [0,1] + TM_EGR_SERVICE_POOL_ID: [0] + : + ADAPTIVE_DYNAMIC: ALPHA_1 + + TM_THD_DYNAMIC_MARGIN: + ? + BUFFER_POOL: [0,1] + TM_EGR_SERVICE_POOL_ID: [0] + : + MARGIN: [16513, 33026, 49539, 66052, 82565, 99078, 115591, 132104, 148617, 165130] + +... + +--- +device: + 0: + TM_PORT_UC_Q_TO_SERVICE_POOL: + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_UC_Q_ID: [0,1,2,5,6,8,9] + : + USE_QGROUP_MIN: 0 + TM_EGR_SERVICE_POOL_ID: 0 + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_UC_Q_ID: [3,4] + : + USE_QGROUP_MIN: 0 + TM_EGR_SERVICE_POOL_ID: 0 + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_UC_Q_ID: 7 + : + USE_QGROUP_MIN: 0 + TM_EGR_SERVICE_POOL_ID: 1 + + TM_PORT_MC_Q_TO_SERVICE_POOL: + ? + PORT_ID: [0] + TM_MC_Q_ID: [[0,47]] + : + USE_QGROUP_MIN: 0 + TM_EGR_SERVICE_POOL_ID: 1 + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_MC_Q_ID: [[0,1]] + : + USE_QGROUP_MIN: 0 + TM_EGR_SERVICE_POOL_ID: 0 +... +### Queue Thresholds +###################################### +--- +device: + 0: + TM_THD_UC_Q: + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + TM_UC_Q_ID: [0, 1, 2, 5, 6, 7] + : + MIN_GUARANTEE_CELLS: 7 + SHARED_LIMITS: 1 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_CELLS_STATIC: 0 + SHARED_LIMIT_DYNAMIC: ALPHA_1 + DYNAMIC_GROUP: MID_PRI_GROUP + RESUME_OFFSET_CELLS: 2 + COLOR_SPECIFIC_LIMITS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 + YELLOW_LIMIT_CELLS_STATIC: 0 + YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 + RED_LIMIT_CELLS_STATIC: 0 + RED_LIMIT_DYNAMIC: PERCENTAGE_625 + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + TM_UC_Q_ID: [8,9] + : + MIN_GUARANTEE_CELLS: 0 + SHARED_LIMITS: 1 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_CELLS_STATIC: 0 + SHARED_LIMIT_DYNAMIC: ALPHA_1 + DYNAMIC_GROUP: MID_PRI_GROUP + RESUME_OFFSET_CELLS: 2 + COLOR_SPECIFIC_LIMITS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 + YELLOW_LIMIT_CELLS_STATIC: 0 + YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 + RED_LIMIT_CELLS_STATIC: 0 + RED_LIMIT_DYNAMIC: PERCENTAGE_625 + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + TM_UC_Q_ID: [3,4] + : + MIN_GUARANTEE_CELLS: 0 + SHARED_LIMITS: 0 + DYNAMIC_SHARED_LIMITS: 0 + SHARED_LIMIT_CELLS_STATIC: 329816 + DYNAMIC_GROUP: MID_PRI_GROUP + RESUME_OFFSET_CELLS: 2 + COLOR_SPECIFIC_LIMITS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 + YELLOW_LIMIT_CELLS_STATIC: 0 + RED_LIMIT_CELLS_STATIC: 0 + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + TM_UC_Q_ID: [0, 1, 2, 5, 6, 7] + : + MIN_GUARANTEE_CELLS: 7 + SHARED_LIMITS: 1 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_CELLS_STATIC: 0 + SHARED_LIMIT_DYNAMIC: ALPHA_1 + DYNAMIC_GROUP: MID_PRI_GROUP + RESUME_OFFSET_CELLS: 2 + COLOR_SPECIFIC_LIMITS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 + YELLOW_LIMIT_CELLS_STATIC: 0 + YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 + RED_LIMIT_CELLS_STATIC: 0 + RED_LIMIT_DYNAMIC: PERCENTAGE_625 + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + TM_UC_Q_ID: [8,9] + : + MIN_GUARANTEE_CELLS: 0 + SHARED_LIMITS: 1 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_CELLS_STATIC: 0 + SHARED_LIMIT_DYNAMIC: ALPHA_1 + DYNAMIC_GROUP: MID_PRI_GROUP + RESUME_OFFSET_CELLS: 2 + COLOR_SPECIFIC_LIMITS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 + YELLOW_LIMIT_CELLS_STATIC: 0 + YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 + RED_LIMIT_CELLS_STATIC: 0 + RED_LIMIT_DYNAMIC: PERCENTAGE_625 + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + TM_UC_Q_ID: [3,4] + : + MIN_GUARANTEE_CELLS: 0 + SHARED_LIMITS: 0 + DYNAMIC_SHARED_LIMITS: 0 + SHARED_LIMIT_CELLS_STATIC: 329816 + DYNAMIC_GROUP: MID_PRI_GROUP + RESUME_OFFSET_CELLS: 2 + COLOR_SPECIFIC_LIMITS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 + YELLOW_LIMIT_CELLS_STATIC: 0 + RED_LIMIT_CELLS_STATIC: 0 + + TM_THD_Q_GRP: + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + : + UC_Q_GRP_MIN_GUARANTEE_CELLS: 0 + MC_Q_GRP_MIN_GUARANTEE_CELLS: 0 + + TM_THD_MC_Q: + ? + PORT_ID: [0] + TM_MC_Q_ID: [[0,47]] + : + MIN_GUARANTEE_CELLS: 7 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_DYNAMIC: ALPHA_1_4 + COLOR_SPECIFIC_LIMITS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 + YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 + RED_LIMIT_DYNAMIC: PERCENTAGE_625 + RESUME_OFFSET_CELLS: 2 + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_MC_Q_ID: [0,1] + SHARED_LIMIT_DYNAMIC: ALPHA_2 + : + SHARED_LIMITS: 1 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_DYNAMIC: ALPHA_1 + COLOR_SPECIFIC_LIMITS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 + YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 + RED_LIMIT_DYNAMIC: PERCENTAGE_625 + RESUME_OFFSET_CELLS: 2 + + TM_EGR_THD_UC_PORT_SERVICE_POOL: + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_EGR_SERVICE_POOL_ID: 0 + : + COLOR_SPECIFIC_LIMITS: 0 + RED_SHARED_LIMIT_CELLS: 18756 + YELLOW_SHARED_LIMIT_CELLS: 22508 + SHARED_LIMIT_CELLS: 240087 + RED_SHARED_RESUME_LIMIT_CELLS: 18754 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 22506 + SHARED_RESUME_LIMIT_CELLS: 30009 + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_EGR_SERVICE_POOL_ID: 1 + : + COLOR_SPECIFIC_LIMITS: 0 + RED_SHARED_LIMIT_CELLS: 47 + YELLOW_SHARED_LIMIT_CELLS: 56 + SHARED_LIMIT_CELLS: 605 + RED_SHARED_RESUME_LIMIT_CELLS: 45 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 54 + SHARED_RESUME_LIMIT_CELLS: 73 + + TM_EGR_THD_MC_PORT_SERVICE_POOL: + ? + PORT_ID: [[0,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_EGR_SERVICE_POOL_ID: 0 + : + COLOR_SPECIFIC_LIMITS: 0 + RED_SHARED_LIMIT_CELLS: 1526 + YELLOW_SHARED_LIMIT_CELLS: 1831 + SHARED_LIMIT_CELLS: 19538 + RED_SHARED_RESUME_LIMIT_CELLS: 1524 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 1829 + SHARED_RESUME_LIMIT_CELLS: 2440 + ? + PORT_ID: [[0,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + TM_EGR_SERVICE_POOL_ID: 1 + : + COLOR_SPECIFIC_LIMITS: 0 + RED_SHARED_LIMIT_CELLS: 47 + YELLOW_SHARED_LIMIT_CELLS: 56 + SHARED_LIMIT_CELLS: 605 + RED_SHARED_RESUME_LIMIT_CELLS: 45 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 54 + SHARED_RESUME_LIMIT_CELLS: 73 + +... + + +### PFC mapping +--- +device: + 0: + PC_MAC_CONTROL: + ? + PORT_ID: [[1,8], [11,18], [21,29], [33,40], [43,51], [55,62], [65,73], [76,84], [87,95], [99,106], [109,117], [121,128], [131,139], [143,150], [153,161], [165,172], [175,183], [187,194], [197,205], [209,216], [219,227], [231,238], [241,249], [253,260], [263,271], [274,282], [285,293], [297,304], [307,315], [319,326], [329,337], [341,348], 351] + : + PAUSE_TX: 0 + PAUSE_RX: 0 + + TM_PFC_EGR: + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + : + TM_PFC_PRI_PROFILE_ID: 0 + + TM_PFC_EGR: + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + : + TM_PFC_PRI_PROFILE_ID: 0 +... +--- +device: + 0: +# TM_PFC_PRI_PROFILE is mapped to MMU_INTFI_PFCRPI_PROFILE in physical table. There are 8 profiles to configure the PFC value to COS/priorities mapping. For example, you could map multiple coses to a PFC. This mapping is needed when receiving PFC frames and stopping queues(coses) according to the PFC frame received. + TM_PFC_PRI_PROFILE: + ? + TM_PFC_PRI_PROFILE_ID: 0 + PFC_PRI: 3 + : + PFC: 1 + COS_LIST: [0, 0, 0, 1, 0, 0, 0, 0, 0, 0] + ? + TM_PFC_PRI_PROFILE_ID: 0 + PFC_PRI: 4 + : + PFC: 1 + COS_LIST: [0, 0, 0, 0, 1, 0, 0, 0, 0, 0] + + +# enable the MAC's PFC controls. + PC_PFC: + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + : + ENABLE_RX: 1 + ENABLE_TX: 1 + + PC_PFC: + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + : + ENABLE_RX: 1 + ENABLE_TX: 1 +... +### Mirror-on-drop +--- +device: + 0: + TM_MIRROR_ON_DROP_CONTROL: + RESERVED_LIMIT_CELLS: 0 + + TM_MIRROR_ON_DROP_PROFILE: + ? + TM_MIRROR_ON_DROP_PROFILE_ID: 0 + : + PERCENTAGE_0_25: 65535 + PERCENTAGE_25_50: 65535 + PERCENTAGE_50_75: 65535 + PERCENTAGE_75_100: 65535 + INGRESS_LIMIT: 0 + SHARED_LIMIT: 0 + + TM_MIRROR_ON_DROP_DESTINATION: + ? + TM_MIRROR_ON_DROP_DESTINATION_ID: 0 + : + TM_MC_Q_ID: 11 + PORT_ID: 1 +... +### THDR Limits +--- +device: + 0: + TM_THD_REPL_Q: + ? + REPL_Q_NUM: [0,6] + : + SHARED_LIMITS: 1 + DYNAMIC_SHARED_LIMITS: 1 + SHARED_LIMIT_DYNAMIC: ALPHA_1 + RESUME_OFFSET_CELLS: 14 + COLOR_SPECIFIC_LIMITS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMITS: 0 + YELLOW_LIMIT_DYNAMIC: PERCENTAGE_750 + RED_LIMIT_DYNAMIC: PERCENTAGE_625 + SHARED_LIMIT_PKTS: 1 + DYNAMIC_SHARED_LIMIT_PKTS: 1 + SHARED_LIMIT_DYNAMIC_PKTS: ALPHA_1 + RESUME_OFFSET_PKTS: 14 + COLOR_SPECIFIC_LIMIT_PKTS: 0 + COLOR_SPECIFIC_DYNAMIC_LIMIT_PKTS: 0 + YELLOW_LIMIT_DYNAMIC_PKTS: PERCENTAGE_750 + RED_LIMIT_DYNAMIC_PKTS: PERCENTAGE_625 + + TM_THD_REPL_Q: + ? + REPL_Q_NUM: [0,3] + : + MIN_GUARANTEE_CELLS: 0 + MIN_GUARANTEE_PKTS: 0 + ? + REPL_Q_NUM: [4,6] + : + MIN_GUARANTEE_CELLS: 37 + MIN_GUARANTEE_PKTS: 7 + + + TM_THD_REPL_SERVICE_POOL: + SHARED_LIMIT_CELLS: 11153 + SHARED_RESUME_LIMIT_CELLS: 11139 + SHARED_LIMIT_PKTS: 3051 + SHARED_RESUME_LIMIT_PKTS: 3037 + COLOR_SPECIFIC_LIMITS: 0 + YELLOW_SHARED_LIMIT_CELLS: 8364 + RED_SHARED_LIMIT_CELLS: 6970 + YELLOW_SHARED_LIMIT_PKTS: 2288 + RED_SHARED_LIMIT_PKTS: 1906 + YELLOW_SHARED_RESUME_LIMIT_CELLS: 8350 + RED_SHARED_RESUME_LIMIT_CELLS: 6956 + YELLOW_SHARED_RESUME_LIMIT_PKTS: 2274 + RED_SHARED_RESUME_LIMIT_PKTS: 1892 + +... +### OBM +--- +device: + 0: + TM_OBM_PORT_PKT_PARSE: + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + : + OUTER_TPID: 1 + HEADER_TYPE: OBM_HEADER_TYPE_ETHERNET + DEFAULT_PKT_PRI: 0 # mapp to obm_lossy_low + + TM_OBM_PORT_PKT_PARSE: + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + : + OUTER_TPID: 1 + HEADER_TYPE: OBM_HEADER_TYPE_ETHERNET + DEFAULT_PKT_PRI: 0 # mapp to obm_lossy_low + + TM_OBM_PORT_PKT_PRI_TC_MAP: + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + PKT_PRI_TYPE: PKT_PRI_TYPE_VLAN + PKT_PRI: 1 + : + TRAFFIC_CLASS: OBM_TC_LOSSLESS0 + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + PKT_PRI_TYPE: PKT_PRI_TYPE_VLAN + PKT_PRI: 1 + : + TRAFFIC_CLASS: OBM_TC_LOSSLESS0 + + TM_OBM_PC_PM_PKT_PARSE: + ? + PC_PM_ID: [1,65] + : + OUTER_TPID: 0x8100 + + TM_OBM_THD_PORT: + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + : + THD_AUTO: 0 + MAX_BYTES: 125440 + LOSSY_LOW_MAX_BYTES: 18688 + LOSSY_MAX_BYTES: 25472 + LOSSLESS0_MAX_BYTES: 502528 + LOSSLESS1_MAX_BYTES: 502528 + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + : + THD_AUTO: 0 + MAX_BYTES: 125440 + LOSSY_LOW_MAX_BYTES: 18688 + LOSSY_MAX_BYTES: 25472 + LOSSLESS0_MAX_BYTES: 502528 + LOSSLESS1_MAX_BYTES: 502528 + + TM_OBM_THD_PORT_FLOW_CTRL: + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + : + THD_AUTO: 0 + XOFF_BYTES: 76992 + XON_BYTES: 76480 + LOSSLESS0_XOFF_BYTES: 5184 + LOSSLESS0_XON_BYTES: 4672 + LOSSLESS1_XOFF_BYTES: 5184 + LOSSLESS1_XON_BYTES: 4672 + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + : + THD_AUTO: 0 + XOFF_BYTES: 76992 + XON_BYTES: 76480 + LOSSLESS0_XOFF_BYTES: 5184 + LOSSLESS0_XON_BYTES: 4672 + LOSSLESS1_XOFF_BYTES: 5184 + LOSSLESS1_XON_BYTES: 4672 + + TM_OBM_PORT_FLOW_CTRL: + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + : + FLOW_CTRL: 1 + FLOW_CTRL_TYPE: PFC + LOSSLESS0_FLOW_CTRL: 1 + LOSSLESS1_FLOW_CTRL: 0 + COS_BMAP_LOSSLESS0: [0,0,0,1,1,0,0,0] + COS_BMAP_LOSSLESS1: 0 + + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + : + FLOW_CTRL: 1 + FLOW_CTRL_TYPE: PFC + LOSSLESS0_FLOW_CTRL: 1 + LOSSLESS1_FLOW_CTRL: 0 + COS_BMAP_LOSSLESS0: [0,0,0,1,1,0,0,0] + COS_BMAP_LOSSLESS1: 0 + + TM_OBM_PORT_PKT_PRI_TC_MAP: + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + PKT_PRI_TYPE: PKT_PRI_TYPE_VLAN + PKT_PRI: [0,1,2,5,6,7] + : + TRAFFIC_CLASS: OBM_TC_LOSSY_LOW + ? + PORT_ID: [[1,8], [11,18], [22,29], [33,40], [44,51], [55,62], [66,73], [77,84], [88,95], [99,106], [110,117], [121,128], [132,139], [143,150], [154,161], [165,172]] + PKT_PRI_TYPE: PKT_PRI_TYPE_VLAN + PKT_PRI: [3,4] + : + TRAFFIC_CLASS: OBM_TC_LOSSLESS0 + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + PKT_PRI_TYPE: PKT_PRI_TYPE_VLAN + PKT_PRI: [0,1,2,5,6,7] + : + TRAFFIC_CLASS: OBM_TC_LOSSY_LOW + ? + PORT_ID: [[176,183], [187,194], [198,205], [209,216], [220,227], [231,238], [242,249], [253,260], [264,271], [275,282], [286,293], [297,304], [308,315], [319,326], [330,337], [341,348]] + PKT_PRI_TYPE: PKT_PRI_TYPE_VLAN + PKT_PRI: [3,4] + : + TRAFFIC_CLASS: OBM_TC_LOSSLESS0 + ? + PORT_ID: [76, 274] + PKT_PRI_TYPE: PKT_PRI_TYPE_VLAN + PKT_PRI: [0,1,2,5,6,7] + : + TRAFFIC_CLASS: OBM_TC_LOSSY_LOW + ? + PORT_ID: [76, 274] + PKT_PRI_TYPE: PKT_PRI_TYPE_VLAN + PKT_PRI: [3,4] + : + TRAFFIC_CLASS: OBM_TC_LOSSLESS0 + ... From 200e4d59736a7788f3455deac8e3291bbef27b8a Mon Sep 17 00:00:00 2001 From: Riff Date: Wed, 17 Jul 2024 09:57:07 -0700 Subject: [PATCH 020/117] [Broadcom]: Update XGS SAI version to 10.1.35.0 (#19584) Why I did it Upgrade the xgs SAI version to 10.1.35.0 to include the following changes: 10.1.21.0: Update the ACL impelementation to enable the ACL switch bind to support PFCWD on MACSEC devices 10.1.23.0: Handle the FDR stats get not supported more properly. 10.1.24.0: (CSP CS00012316286) Fix LPM Miss ACL with counters fails 10.1.25.0: Improve ECMP performance 10.1.28.0: Fix SAI is not honoring the bcm_linkscan_interval set in .bcm config file for Ramon and error with setting SAI_NEIGHBOR_ENTRY_ATTR_IS_LOCAL attribute for neighbor 10.1.29.0: Fix fabric switch initialization delayed if SW linkscan enabled during platform init 10.1.30.0: (CSP CS00012356911) Fix traffic drops on all priorities when PFC asserted on two priorities. 10.1.31.0: NHG performance fix 10.1.33.0: (CSP CS00012345242) High CPU due to SAI code calls bcm_port_resource_get for every fabric error counter 10.1.35.0: Support MMU configuration updates for TH5. Work item tracking Microsoft ADO (number only): 28724885 --- platform/broadcom/sai.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index ddf43a6e7f41..4cfd2849e6c1 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -1,4 +1,4 @@ -LIBSAIBCM_XGS_VERSION = 10.1.21.0 +LIBSAIBCM_XGS_VERSION = 10.1.35.0 LIBSAIBCM_DNX_VERSION = 10.1.25.0 LIBSAIBCM_XGS_BRANCH_NAME = SAI_10.1.0_GA LIBSAIBCM_DNX_BRANCH_NAME = SAI_10.1.0_GA From bc08470c6c8402cf4c48ca6c11af9504175e74ea Mon Sep 17 00:00:00 2001 From: SuvarnaMeenakshi <50386592+SuvarnaMeenakshi@users.noreply.github.com> Date: Wed, 17 Jul 2024 16:03:00 -0700 Subject: [PATCH 021/117] [sonic-snmpagent]: Advance submodule (#19582) #### Why I did it Update sonic-snmpagent submodule to include below commit: a281f9a [ciscoPfcExtMIB]: Remove returning first intf index if subid is empty (#322) d532923 Modify path of python-wheels package to use bookworm (#324) --- src/sonic-snmpagent | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-snmpagent b/src/sonic-snmpagent index f6529481013d..a281f9ab771a 160000 --- a/src/sonic-snmpagent +++ b/src/sonic-snmpagent @@ -1 +1 @@ -Subproject commit f6529481013dbe736246e7c0b34d4851ce515c2c +Subproject commit a281f9ab771adaa438f01fd5394d7a73ed6bc1d6 From 21f2d3b79a20fed25f6f80a42b81cede3ba4870a Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 18 Jul 2024 10:01:22 +0800 Subject: [PATCH 022/117] [submodule] Update submodule sonic-gnmi to the latest HEAD automatically (#19571) #### Why I did it src/sonic-gnmi ``` * 015de94 - (HEAD -> master, origin/master, origin/HEAD) Update gnmi-native to support subscribe stream mode (#271) (2 days ago) [ganglv] * ccce9a2 - Return GNMI API error when ZMQ operation failed. (#270) (2 days ago) [Hua Liu] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-gnmi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-gnmi b/src/sonic-gnmi index a85dfc112da3..015de9423ae8 160000 --- a/src/sonic-gnmi +++ b/src/sonic-gnmi @@ -1 +1 @@ -Subproject commit a85dfc112da34e2577272484b2ecbbb7f629a3b9 +Subproject commit 015de9423ae81a0d4c6db9fa4b69f89c631d8862 From 8c08883fc464b6105611b52194faf788129611a3 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 18 Jul 2024 19:01:05 +0800 Subject: [PATCH 023/117] [submodule] Update submodule sonic-platform-daemons to the latest HEAD automatically (#19596) #### Why I did it src/sonic-platform-daemons ``` * 8c89f6b - (HEAD -> master, origin/master, origin/HEAD) [ycabled][active-active] Fix in gRPC channel callback logic by creating swsscommon table within the context (#509) (10 hours ago) [vdahiya12] * bc936a4 - Initialize application specific fields as 'N/A' in TRANSCEIVER_INFO table (#511) (34 hours ago) [mihirpat1] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-platform-daemons | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 74881e1b3137..8c89f6ba2975 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 74881e1b31371bbd9c0966c48402a3058181bc4b +Subproject commit 8c89f6ba2975a7699861f2c6d77083cebb62e97c From c8e46accc10f31c8f71912c205de6eeccca1780a Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 18 Jul 2024 19:01:10 +0800 Subject: [PATCH 024/117] [submodule] Update submodule sonic-linux-kernel to the latest HEAD automatically (#19595) #### Why I did it src/sonic-linux-kernel ``` * 98e4af9 - (HEAD -> master, origin/master, origin/HEAD) Fix os crash caused by optoe when class switch (#413) (2 days ago) [Philo] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-linux-kernel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-linux-kernel b/src/sonic-linux-kernel index 88c1826e5e1e..98e4af96b655 160000 --- a/src/sonic-linux-kernel +++ b/src/sonic-linux-kernel @@ -1 +1 @@ -Subproject commit 88c1826e5e1e96cc016f633f1d3c250b6694abda +Subproject commit 98e4af96b65564b161e1fd66f31323121f56b302 From c8d1c1d0ca84562e4743380d4a76fae6e79bea8a Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 18 Jul 2024 19:01:15 +0800 Subject: [PATCH 025/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19586) #### Why I did it src/sonic-utilities ``` * b9a6049a - (HEAD -> master, origin/master, origin/HEAD) [Bug Fix] Fix disk check test and drops group test (#3424) (28 hours ago) [Changrong Wu] * c03c9c84 - Revert "fix: fix show bgp summary output typo" (#3423) (2 days ago) [Jianquan Ye] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index b6f7c2b7d138..b9a6049a954f 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit b6f7c2b7d138299475d994d251721455deab668f +Subproject commit b9a6049a954f6053b49de198bbacf550d5728de7 From ac0574cee3764e514e52fafee0749e1362218524 Mon Sep 17 00:00:00 2001 From: Mai Bui Date: Thu, 18 Jul 2024 12:01:55 -0400 Subject: [PATCH 026/117] Revert "[sudoers] add `/usr/local/bin/storyteller` to `READ_ONLY_CMDS` (#13422)" (#19612) This reverts commit dabb31c5f6d7c9d3897a14d3851cf7d0de0a4fe6. --- files/image_config/sudoers/sudoers | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/files/image_config/sudoers/sudoers b/files/image_config/sudoers/sudoers index ad50f0f0b0df..bc0755dd2ce9 100644 --- a/files/image_config/sudoers/sudoers +++ b/files/image_config/sudoers/sudoers @@ -43,8 +43,7 @@ Cmnd_Alias READ_ONLY_CMDS = /bin/cat /var/log/syslog, /bin/cat /var/log/sys /usr/local/bin/pcieutil *, \ /usr/local/bin/psuutil *, \ /usr/local/bin/sonic-installer list, \ - /usr/local/bin/sfputil show *, \ - /usr/local/bin/storyteller * + /usr/local/bin/sfputil show * Cmnd_Alias PASSWD_CMDS = /usr/local/bin/config tacacs passkey *, \ From 34b0d19f4fe1f9ec278e95eafbf64a09f0a30204 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 19 Jul 2024 19:01:01 +0800 Subject: [PATCH 027/117] [submodule] Update submodule sonic-ztp to the latest HEAD automatically (#19630) #### Why I did it src/sonic-ztp ``` * b4cdd8c - (HEAD -> master, origin/master, origin/HEAD) Add role field to the ztp PORT config (#57) (24 hours ago) [Vivek] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-ztp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-ztp b/src/sonic-ztp index 56cebaeec285..b4cdd8c58bc4 160000 --- a/src/sonic-ztp +++ b/src/sonic-ztp @@ -1 +1 @@ -Subproject commit 56cebaeec285c74ef531fa7b8436febe85547608 +Subproject commit b4cdd8c58bc419f37b91e783b357bff4c5174536 From 41d7f446b3a1245ce109e7e809166f13c8af7308 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 19 Jul 2024 19:01:05 +0800 Subject: [PATCH 028/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19627) #### Why I did it src/sonic-utilities ``` * f2b76213 - (HEAD -> master, origin/master, origin/HEAD) [SfpUtil] sfp eeprom with option dom is not working on Xcvrs with flat memory (#3385) (4 hours ago) [mihirpat1] * fd3096c7 - Enable show ip bgp on sup and -n all for show ip bgp network (#3417) (9 hours ago) [Changrong Wu] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index b9a6049a954f..f2b762138c32 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit b9a6049a954f6053b49de198bbacf550d5728de7 +Subproject commit f2b762138c3236807bf1995e2e2130f7b8e5f386 From c4a7658fce0de742150e6c4256e63c8932e7bbf4 Mon Sep 17 00:00:00 2001 From: Oleksandr Ivantsiv Date: Fri, 19 Jul 2024 11:45:41 -0700 Subject: [PATCH 029/117] [smart-switch] Extend config generator for t1-smartswitch topology. (#19056) Extend config generator for t1-smartswitch topology --- src/sonic-config-engine/config_samples.py | 69 +- src/sonic-config-engine/smartswitch_config.py | 37 +- src/sonic-config-engine/sonic-cfggen | 6 - .../smartswitch/SS-DPU-1x400Gb/hwsku.json | 7 + .../smartswitch/SSwitch-32x1000Gb/hwsku.json | 14 - .../data/smartswitch/sample_dpu_platform.json | 3 + .../smartswitch/sample_switch_platform.json | 16 + .../sample_output/t1-smartswitch-dpu.json | 27 + .../tests/sample_output/t1-smartswitch.json | 1202 +++++++++-------- .../tests/t1-ss-dpu-sample-port-config.ini | 2 + src/sonic-config-engine/tests/test_j2files.py | 12 + 11 files changed, 759 insertions(+), 636 deletions(-) create mode 100644 src/sonic-config-engine/tests/data/smartswitch/SS-DPU-1x400Gb/hwsku.json create mode 100644 src/sonic-config-engine/tests/data/smartswitch/sample_dpu_platform.json create mode 100644 src/sonic-config-engine/tests/data/smartswitch/sample_switch_platform.json create mode 100644 src/sonic-config-engine/tests/sample_output/t1-smartswitch-dpu.json create mode 100644 src/sonic-config-engine/tests/t1-ss-dpu-sample-port-config.ini diff --git a/src/sonic-config-engine/config_samples.py b/src/sonic-config-engine/config_samples.py index 4989b88021a7..b5b25757b1e8 100644 --- a/src/sonic-config-engine/config_samples.py +++ b/src/sonic-config-engine/config_samples.py @@ -4,6 +4,8 @@ from ipaddress import ip_interface from natsort import natsorted +import smartswitch_config + #TODO: Remove once Python 2 support is removed if sys.version_info.major == 3: UNICODE_TYPE = str @@ -75,31 +77,56 @@ def generate_t1_sample_config(data): port_count += 1 return data -def generate_t1_smartswitch_sample_config(data): +def generate_t1_smartswitch_switch_sample_config(data, ss_config): data = generate_t1_sample_config(data) data['DEVICE_METADATA']['localhost']['subtype'] = 'SmartSwitch' mpbr_prefix = '169.254.200' mpbr_address = '{}.254'.format(mpbr_prefix) - bridge_name = 'bridge_midplane' - data['MID_PLANE_BRIDGE'] = { - 'GLOBAL': { - 'bridge': bridge_name, - 'ip_prefix': '{}/24'.format(mpbr_address) - } - } + bridge_name = 'bridge-midplane' dhcp_server_ports = {} - for dpu_name in natsorted(data.get('DPUS', {})): - midplane_interface = data['DPUS'][dpu_name]['midplane_interface'] + for dpu_name in natsorted(ss_config.get('DPUS', {})): + midplane_interface = ss_config['DPUS'][dpu_name]['midplane_interface'] dpu_id = int(midplane_interface.replace('dpu', '')) dhcp_server_ports['{}|{}'.format(bridge_name, midplane_interface)] = {'ips': ['{}.{}'.format(mpbr_prefix, dpu_id + 1)]} if dhcp_server_ports: + data['DPUS'] = ss_config['DPUS'] + + data['FEATURE'] = { + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "dhcp_server": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "False" + } + } + data['DHCP_SERVER_IPV4'] = { bridge_name: { + 'customized_options': [ + 'option60', + 'option223' + ], 'gateway': mpbr_address, 'lease_time': '3600', 'mode': 'PORT', @@ -107,10 +134,32 @@ def generate_t1_smartswitch_sample_config(data): "state": "enabled" } } + data['DHCP_SERVER_IPV4_PORT'] = dhcp_server_ports return data +def generate_t1_smartswitch_dpu_sample_config(data, ss_config): + data['DEVICE_METADATA']['localhost']['hostname'] = 'sonic' + data['DEVICE_METADATA']['localhost']['switch_type'] = 'dpu' + data['DEVICE_METADATA']['localhost']['type'] = 'SonicDpu' + data['DEVICE_METADATA']['localhost']['subtype'] = 'SmartSwitch' + data['DEVICE_METADATA']['localhost']['bgp_asn'] = '65100' + + for port in natsorted(data['PORT']): + data['PORT'][port]['admin_status'] = 'up' + data['PORT'][port]['mtu'] = '9100' + + return data + +def generate_t1_smartswitch_sample_config(data): + ss_config = smartswitch_config.get_smartswitch_config(data['DEVICE_METADATA']['localhost']['hwsku']) + + if smartswitch_config.DPU_TABLE in ss_config: + return generate_t1_smartswitch_dpu_sample_config(data, ss_config) + + return generate_t1_smartswitch_switch_sample_config(data, ss_config) + def generate_empty_config(data): new_data = {'DEVICE_METADATA': data['DEVICE_METADATA']} if 'hostname' not in new_data['DEVICE_METADATA']['localhost']: diff --git a/src/sonic-config-engine/smartswitch_config.py b/src/sonic-config-engine/smartswitch_config.py index b11c6b558985..6c5202a59a05 100644 --- a/src/sonic-config-engine/smartswitch_config.py +++ b/src/sonic-config-engine/smartswitch_config.py @@ -1,6 +1,7 @@ import os import sys import portconfig +from sonic_py_common import device_info try: if os.environ["CFGGEN_UNIT_TESTING"] == "2": @@ -14,25 +15,29 @@ except KeyError: pass -DPUS_TABLE = 'DPUS' +DPU_TABLE = 'DPU' +DPUS_TABLE = 'DPUS' -def get_smartswitch_config(hwsku=None, platform=None): - hwsku_json_file = portconfig.get_hwsku_file_name(hwsku, platform) - - if os.environ.get("CFGGEN_UNIT_TESTING") == "2" and hwsku == 'SSwitch-32x1000Gb': - hwsku_json_file = os.path.join(tests_path, "data", "smartswitch", hwsku, "hwsku.json") - - if not hwsku_json_file: - return {} - - hwsku_dict = portconfig.readJson(hwsku_json_file) - if not hwsku_dict: - raise Exception("hwsku_dict is none") - +def get_smartswitch_config(hwsku=None): config = {} - if DPUS_TABLE in hwsku_dict: - config[DPUS_TABLE] = hwsku_dict[DPUS_TABLE] + if os.environ.get("CFGGEN_UNIT_TESTING") == "2": + if hwsku == 'SSwitch-32x1000Gb': + json_file = os.path.join(tests_path, "data", "smartswitch", "sample_switch_platform.json") + elif hwsku == 'SS-DPU-1x400Gb': + json_file = os.path.join(tests_path, "data", "smartswitch", "sample_dpu_platform.json") + else: + platform_path = device_info.get_path_to_platform_dir() + json_file = os.path.join(platform_path, device_info.PLATFORM_JSON_FILE) + + platform_json = portconfig.readJson(json_file) + if not platform_json: + return config + + if DPU_TABLE in platform_json: + config[DPU_TABLE] = platform_json[DPU_TABLE] + if DPUS_TABLE in platform_json: + config[DPUS_TABLE] = platform_json[DPUS_TABLE] return config diff --git a/src/sonic-config-engine/sonic-cfggen b/src/sonic-config-engine/sonic-cfggen index e3314d34fa42..9151bfa20de1 100755 --- a/src/sonic-config-engine/sonic-cfggen +++ b/src/sonic-config-engine/sonic-cfggen @@ -33,7 +33,6 @@ from config_samples import generate_sample_config, get_available_config from functools import partial from minigraph import minigraph_encoder, parse_xml, parse_device_desc_xml, parse_asic_sub_role, parse_asic_switch_type, parse_hostname from portconfig import get_port_config, get_breakout_mode -from smartswitch_config import get_smartswitch_config from sonic_py_common.multi_asic import get_asic_id_from_name, get_asic_device_id, is_multi_asic from sonic_py_common import device_info from swsscommon.swsscommon import ConfigDBConnector, SonicDBConfig, ConfigDBPipeConnector @@ -371,11 +370,6 @@ def main(): if brkout_table is not None: deep_update(data, {'BREAKOUT_CFG': brkout_table}) - # Read Smart Switch config - smartswitch_config = get_smartswitch_config(hwsku, platform) - if smartswitch_config: - deep_update(data, smartswitch_config) - _process_json(args, data) if args.yang is not None: diff --git a/src/sonic-config-engine/tests/data/smartswitch/SS-DPU-1x400Gb/hwsku.json b/src/sonic-config-engine/tests/data/smartswitch/SS-DPU-1x400Gb/hwsku.json new file mode 100644 index 000000000000..6f9d58a075d8 --- /dev/null +++ b/src/sonic-config-engine/tests/data/smartswitch/SS-DPU-1x400Gb/hwsku.json @@ -0,0 +1,7 @@ +{ + "interfaces": { + "Ethernet0": { + "default_brkout_mode": "1x400G" + } + } +} diff --git a/src/sonic-config-engine/tests/data/smartswitch/SSwitch-32x1000Gb/hwsku.json b/src/sonic-config-engine/tests/data/smartswitch/SSwitch-32x1000Gb/hwsku.json index 9ce920b2ddbc..697fb7b1ccb4 100644 --- a/src/sonic-config-engine/tests/data/smartswitch/SSwitch-32x1000Gb/hwsku.json +++ b/src/sonic-config-engine/tests/data/smartswitch/SSwitch-32x1000Gb/hwsku.json @@ -111,19 +111,5 @@ "Ethernet144": { "default_brkout_mode": "1x100000[50G,40000,25G,10000]" } - }, - "DPUS": { - "dpu0": { - "midplane_interface": "dpu0" - }, - "dpu1": { - "midplane_interface": "dpu1" - }, - "dpu2": { - "midplane_interface": "dpu2" - }, - "dpu3": { - "midplane_interface": "dpu3" - } } } diff --git a/src/sonic-config-engine/tests/data/smartswitch/sample_dpu_platform.json b/src/sonic-config-engine/tests/data/smartswitch/sample_dpu_platform.json new file mode 100644 index 000000000000..11eb9a4dae58 --- /dev/null +++ b/src/sonic-config-engine/tests/data/smartswitch/sample_dpu_platform.json @@ -0,0 +1,3 @@ +{ + "DPU": {} +} diff --git a/src/sonic-config-engine/tests/data/smartswitch/sample_switch_platform.json b/src/sonic-config-engine/tests/data/smartswitch/sample_switch_platform.json new file mode 100644 index 000000000000..18b525588301 --- /dev/null +++ b/src/sonic-config-engine/tests/data/smartswitch/sample_switch_platform.json @@ -0,0 +1,16 @@ +{ + "DPUS": { + "dpu0": { + "midplane_interface": "dpu0" + }, + "dpu1": { + "midplane_interface": "dpu1" + }, + "dpu2": { + "midplane_interface": "dpu2" + }, + "dpu3": { + "midplane_interface": "dpu3" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/t1-smartswitch-dpu.json b/src/sonic-config-engine/tests/sample_output/t1-smartswitch-dpu.json new file mode 100644 index 000000000000..23a29ba6ed7c --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/t1-smartswitch-dpu.json @@ -0,0 +1,27 @@ +{ + "DEVICE_METADATA": { + "localhost": { + "hwsku": "SS-DPU-1x400Gb", + "hostname": "sonic", + "switch_type": "dpu", + "type": "SonicDpu", + "subtype": "SmartSwitch", + "bgp_asn": "65100" + } + }, + "PORT": { + "Ethernet0": { + "lanes": "0,1,2,3,4,5,6,7", + "alias": "etp1", + "admin_status": "up", + "mtu": "9100" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_STATUS": "disable", + "FLEX_COUNTER_DELAY_STATUS": "true", + "POLL_INTERVAL": "10000" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/t1-smartswitch.json b/src/sonic-config-engine/tests/sample_output/t1-smartswitch.json index 58d91aa90560..fc305243fb0e 100644 --- a/src/sonic-config-engine/tests/sample_output/t1-smartswitch.json +++ b/src/sonic-config-engine/tests/sample_output/t1-smartswitch.json @@ -1,591 +1,613 @@ { - "DEVICE_METADATA": { - "localhost": { - "hwsku": "SSwitch-32x1000Gb", - "hostname": "sonic", - "type": "LeafRouter", - "bgp_asn": "65100", - "subtype": "SmartSwitch" - } - }, - "PORT": { - "Ethernet0": { - "lanes": "0,1,2,3,4,5,6,7", - "alias": "etp1", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet8": { - "lanes": "8,9,10,11,12,13,14,15", - "alias": "etp2", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet16": { - "lanes": "16,17,18,19,20,21,22,23", - "alias": "etp3", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet24": { - "lanes": "24,25,26,27,28,29,30,31", - "alias": "etp4", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet32": { - "lanes": "32,33,34,35,36,37,38,39", - "alias": "etp5", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet40": { - "lanes": "40,41,42,43,44,45,46,47", - "alias": "etp6", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet48": { - "lanes": "48,49,50,51,52,53,54,55", - "alias": "etp7", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet56": { - "lanes": "56,57,58,59,60,61,62,63", - "alias": "etp8", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet64": { - "lanes": "64,65,66,67,68,69,70,71", - "alias": "etp9", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet72": { - "lanes": "72,73,74,75,76,77,78,79", - "alias": "etp10", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet80": { - "lanes": "80,81,82,83,84,85,86,87", - "alias": "etp11", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet88": { - "lanes": "88,89,90,91,92,93,94,95", - "alias": "etp12", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet96": { - "lanes": "96,97,98,99,100,101,102,103", - "alias": "etp13", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet104": { - "lanes": "104,105,106,107,108,109,110,111", - "alias": "etp14", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet112": { - "lanes": "112,113,114,115,116,117,118,119", - "alias": "etp15", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet120": { - "lanes": "120,121,122,123,124,125,126,127", - "alias": "etp16", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet128": { - "lanes": "128,129,130,131,132,133,134,135", - "alias": "etp17", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet136": { - "lanes": "136,137,138,139,140,141,142,143", - "alias": "etp18", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet144": { - "lanes": "144,145,146,147,148,149,150,151", - "alias": "etp19", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet152": { - "lanes": "152,153,154,155,156,157,158,159", - "alias": "etp20", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet160": { - "lanes": "160,161,162,163,164,165,166,167", - "alias": "etp21", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet168": { - "lanes": "168,169,170,171,172,173,174,175", - "alias": "etp22", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet176": { - "lanes": "176,177,178,179,180,181,182,183", - "alias": "etp23", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet184": { - "lanes": "184,185,186,187,188,189,190,191", - "alias": "etp24", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet192": { - "lanes": "192,193,194,195,196,197,198,199", - "alias": "etp25", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet200": { - "lanes": "200,201,202,203,204,205,206,207", - "alias": "etp26", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet208": { - "lanes": "208,209,210,211,212,213,214,215", - "alias": "etp27", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet216": { - "lanes": "216,217,218,219,220,221,222,223", - "alias": "etp28", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet224": { - "lanes": "224,225,226,227,228,229,230,231", - "alias": "etp29", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet232": { - "lanes": "232,233,234,235,236,237,238,239", - "alias": "etp30", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet240": { - "lanes": "240,241,242,243,244,245,246,247", - "alias": "etp31", - "admin_status": "up", - "mtu": "9100" - }, - "Ethernet248": { - "lanes": "248,249,250,251,252,253,254,255", - "alias": "etp32", - "admin_status": "up", - "mtu": "9100" - } - }, - "DPUS": { - "dpu0": { - "midplane_interface": "dpu0" - }, - "dpu1": { - "midplane_interface": "dpu1" - }, - "dpu2": { - "midplane_interface": "dpu2" - }, - "dpu3": { - "midplane_interface": "dpu3" - } - }, - "FLEX_COUNTER_TABLE": { - "ACL": { - "FLEX_COUNTER_STATUS": "disable", - "FLEX_COUNTER_DELAY_STATUS": "true", - "POLL_INTERVAL": "10000" - } - }, - "LOOPBACK_INTERFACE": { - "Loopback0|10.1.0.1/32": {} - }, - "BGP_NEIGHBOR": { - "10.0.0.1": { - "rrclient": 0, - "name": "ARISTA01T2", - "local_addr": "10.0.0.0", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.3": { - "rrclient": 0, - "name": "ARISTA02T2", - "local_addr": "10.0.0.2", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.5": { - "rrclient": 0, - "name": "ARISTA03T2", - "local_addr": "10.0.0.4", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.7": { - "rrclient": 0, - "name": "ARISTA04T2", - "local_addr": "10.0.0.6", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.9": { - "rrclient": 0, - "name": "ARISTA05T2", - "local_addr": "10.0.0.8", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.11": { - "rrclient": 0, - "name": "ARISTA06T2", - "local_addr": "10.0.0.10", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.13": { - "rrclient": 0, - "name": "ARISTA07T2", - "local_addr": "10.0.0.12", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.15": { - "rrclient": 0, - "name": "ARISTA08T2", - "local_addr": "10.0.0.14", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.17": { - "rrclient": 0, - "name": "ARISTA09T2", - "local_addr": "10.0.0.16", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.19": { - "rrclient": 0, - "name": "ARISTA10T2", - "local_addr": "10.0.0.18", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.21": { - "rrclient": 0, - "name": "ARISTA11T2", - "local_addr": "10.0.0.20", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.23": { - "rrclient": 0, - "name": "ARISTA12T2", - "local_addr": "10.0.0.22", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.25": { - "rrclient": 0, - "name": "ARISTA13T2", - "local_addr": "10.0.0.24", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.27": { - "rrclient": 0, - "name": "ARISTA14T2", - "local_addr": "10.0.0.26", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.29": { - "rrclient": 0, - "name": "ARISTA15T2", - "local_addr": "10.0.0.28", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.31": { - "rrclient": 0, - "name": "ARISTA16T2", - "local_addr": "10.0.0.30", - "nhopself": 0, - "holdtime": "180", - "asn": "65200", - "keepalive": "60" - }, - "10.0.0.33": { - "rrclient": 0, - "name": "ARISTA01T0", - "local_addr": "10.0.0.32", - "nhopself": 0, - "holdtime": "180", - "asn": "64001", - "keepalive": "60" - }, - "10.0.0.35": { - "rrclient": 0, - "name": "ARISTA02T0", - "local_addr": "10.0.0.34", - "nhopself": 0, - "holdtime": "180", - "asn": "64002", - "keepalive": "60" - }, - "10.0.0.37": { - "rrclient": 0, - "name": "ARISTA03T0", - "local_addr": "10.0.0.36", - "nhopself": 0, - "holdtime": "180", - "asn": "64003", - "keepalive": "60" - }, - "10.0.0.39": { - "rrclient": 0, - "name": "ARISTA04T0", - "local_addr": "10.0.0.38", - "nhopself": 0, - "holdtime": "180", - "asn": "64004", - "keepalive": "60" - }, - "10.0.0.41": { - "rrclient": 0, - "name": "ARISTA05T0", - "local_addr": "10.0.0.40", - "nhopself": 0, - "holdtime": "180", - "asn": "64005", - "keepalive": "60" - }, - "10.0.0.43": { - "rrclient": 0, - "name": "ARISTA06T0", - "local_addr": "10.0.0.42", - "nhopself": 0, - "holdtime": "180", - "asn": "64006", - "keepalive": "60" - }, - "10.0.0.45": { - "rrclient": 0, - "name": "ARISTA07T0", - "local_addr": "10.0.0.44", - "nhopself": 0, - "holdtime": "180", - "asn": "64007", - "keepalive": "60" - }, - "10.0.0.47": { - "rrclient": 0, - "name": "ARISTA08T0", - "local_addr": "10.0.0.46", - "nhopself": 0, - "holdtime": "180", - "asn": "64008", - "keepalive": "60" - }, - "10.0.0.49": { - "rrclient": 0, - "name": "ARISTA09T0", - "local_addr": "10.0.0.48", - "nhopself": 0, - "holdtime": "180", - "asn": "64009", - "keepalive": "60" - }, - "10.0.0.51": { - "rrclient": 0, - "name": "ARISTA10T0", - "local_addr": "10.0.0.50", - "nhopself": 0, - "holdtime": "180", - "asn": "64010", - "keepalive": "60" - }, - "10.0.0.53": { - "rrclient": 0, - "name": "ARISTA11T0", - "local_addr": "10.0.0.52", - "nhopself": 0, - "holdtime": "180", - "asn": "64011", - "keepalive": "60" - }, - "10.0.0.55": { - "rrclient": 0, - "name": "ARISTA12T0", - "local_addr": "10.0.0.54", - "nhopself": 0, - "holdtime": "180", - "asn": "64012", - "keepalive": "60" - }, - "10.0.0.57": { - "rrclient": 0, - "name": "ARISTA13T0", - "local_addr": "10.0.0.56", - "nhopself": 0, - "holdtime": "180", - "asn": "64013", - "keepalive": "60" - }, - "10.0.0.59": { - "rrclient": 0, - "name": "ARISTA14T0", - "local_addr": "10.0.0.58", - "nhopself": 0, - "holdtime": "180", - "asn": "64014", - "keepalive": "60" - }, - "10.0.0.61": { - "rrclient": 0, - "name": "ARISTA15T0", - "local_addr": "10.0.0.60", - "nhopself": 0, - "holdtime": "180", - "asn": "64015", - "keepalive": "60" - }, - "10.0.0.63": { - "rrclient": 0, - "name": "ARISTA16T0", - "local_addr": "10.0.0.62", - "nhopself": 0, - "holdtime": "180", - "asn": "64016", - "keepalive": "60" - } - }, - "DEVICE_NEIGHBOR": {}, - "INTERFACE": { - "Ethernet0|10.0.0.0/31": {}, - "Ethernet8|10.0.0.2/31": {}, - "Ethernet16|10.0.0.4/31": {}, - "Ethernet24|10.0.0.6/31": {}, - "Ethernet32|10.0.0.8/31": {}, - "Ethernet40|10.0.0.10/31": {}, - "Ethernet48|10.0.0.12/31": {}, - "Ethernet56|10.0.0.14/31": {}, - "Ethernet64|10.0.0.16/31": {}, - "Ethernet72|10.0.0.18/31": {}, - "Ethernet80|10.0.0.20/31": {}, - "Ethernet88|10.0.0.22/31": {}, - "Ethernet96|10.0.0.24/31": {}, - "Ethernet104|10.0.0.26/31": {}, - "Ethernet112|10.0.0.28/31": {}, - "Ethernet120|10.0.0.30/31": {}, - "Ethernet128|10.0.0.32/31": {}, - "Ethernet136|10.0.0.34/31": {}, - "Ethernet144|10.0.0.36/31": {}, - "Ethernet152|10.0.0.38/31": {}, - "Ethernet160|10.0.0.40/31": {}, - "Ethernet168|10.0.0.42/31": {}, - "Ethernet176|10.0.0.44/31": {}, - "Ethernet184|10.0.0.46/31": {}, - "Ethernet192|10.0.0.48/31": {}, - "Ethernet200|10.0.0.50/31": {}, - "Ethernet208|10.0.0.52/31": {}, - "Ethernet216|10.0.0.54/31": {}, - "Ethernet224|10.0.0.56/31": {}, - "Ethernet232|10.0.0.58/31": {}, - "Ethernet240|10.0.0.60/31": {}, - "Ethernet248|10.0.0.62/31": {} - }, - "MID_PLANE_BRIDGE": { - "GLOBAL": { - "bridge": "bridge_midplane", - "ip_prefix": "169.254.200.254/24" - } - }, - "DHCP_SERVER_IPV4": { - "bridge_midplane": { - "gateway": "169.254.200.254", - "lease_time": "3600", - "mode": "PORT", - "netmask": "255.255.255.0", - "state": "enabled" - } - }, - "DHCP_SERVER_IPV4_PORT": { - "bridge_midplane|dpu0": { - "ips": [ - "169.254.200.1" - ] - }, - "bridge_midplane|dpu1": { - "ips": [ - "169.254.200.2" - ] - }, - "bridge_midplane|dpu2": { - "ips": [ - "169.254.200.3" - ] - }, - "bridge_midplane|dpu3": { - "ips": [ - "169.254.200.4" - ] - } - } -} + "BGP_NEIGHBOR": { + "10.0.0.1": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.0", + "name": "ARISTA01T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.11": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.10", + "name": "ARISTA06T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.13": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.12", + "name": "ARISTA07T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.15": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.14", + "name": "ARISTA08T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.17": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.16", + "name": "ARISTA09T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.19": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.18", + "name": "ARISTA10T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.21": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.20", + "name": "ARISTA11T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.23": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.22", + "name": "ARISTA12T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.25": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.24", + "name": "ARISTA13T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.27": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.26", + "name": "ARISTA14T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.29": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.28", + "name": "ARISTA15T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.3": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.2", + "name": "ARISTA02T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.31": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.30", + "name": "ARISTA16T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.33": { + "asn": "64001", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.32", + "name": "ARISTA01T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.35": { + "asn": "64002", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.34", + "name": "ARISTA02T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.37": { + "asn": "64003", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.36", + "name": "ARISTA03T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.39": { + "asn": "64004", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.38", + "name": "ARISTA04T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.41": { + "asn": "64005", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.40", + "name": "ARISTA05T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.43": { + "asn": "64006", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.42", + "name": "ARISTA06T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.45": { + "asn": "64007", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.44", + "name": "ARISTA07T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.47": { + "asn": "64008", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.46", + "name": "ARISTA08T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.49": { + "asn": "64009", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.48", + "name": "ARISTA09T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.5": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.4", + "name": "ARISTA03T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.51": { + "asn": "64010", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.50", + "name": "ARISTA10T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.53": { + "asn": "64011", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.52", + "name": "ARISTA11T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.55": { + "asn": "64012", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.54", + "name": "ARISTA12T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.57": { + "asn": "64013", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.56", + "name": "ARISTA13T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.59": { + "asn": "64014", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.58", + "name": "ARISTA14T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.61": { + "asn": "64015", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.60", + "name": "ARISTA15T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.63": { + "asn": "64016", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.62", + "name": "ARISTA16T0", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.7": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.6", + "name": "ARISTA04T2", + "nhopself": 0, + "rrclient": 0 + }, + "10.0.0.9": { + "asn": "65200", + "holdtime": "180", + "keepalive": "60", + "local_addr": "10.0.0.8", + "name": "ARISTA05T2", + "nhopself": 0, + "rrclient": 0 + } + }, + "DEVICE_METADATA": { + "localhost": { + "bgp_asn": "65100", + "hostname": "sonic", + "hwsku": "SSwitch-32x1000Gb", + "subtype": "SmartSwitch", + "type": "LeafRouter" + } + }, + "DEVICE_NEIGHBOR": {}, + "DHCP_SERVER_IPV4": { + "bridge-midplane": { + "customized_options": [ + "option60", + "option223" + ], + "gateway": "169.254.200.254", + "lease_time": "3600", + "mode": "PORT", + "netmask": "255.255.255.0", + "state": "enabled" + } + }, + "DHCP_SERVER_IPV4_PORT": { + "bridge-midplane|dpu0": { + "ips": [ + "169.254.200.1" + ] + }, + "bridge-midplane|dpu1": { + "ips": [ + "169.254.200.2" + ] + }, + "bridge-midplane|dpu2": { + "ips": [ + "169.254.200.3" + ] + }, + "bridge-midplane|dpu3": { + "ips": [ + "169.254.200.4" + ] + } + }, + "DPUS": { + "dpu0": { + "midplane_interface": "dpu0" + }, + "dpu1": { + "midplane_interface": "dpu1" + }, + "dpu2": { + "midplane_interface": "dpu2" + }, + "dpu3": { + "midplane_interface": "dpu3" + } + }, + "FEATURE": { + "dhcp_relay": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "True" + }, + "dhcp_server": { + "auto_restart": "enabled", + "check_up_status": "False", + "delayed": "False", + "has_global_scope": "True", + "has_per_asic_scope": "False", + "high_mem_alert": "disabled", + "set_owner": "local", + "state": "enabled", + "support_syslog_rate_limit": "False" + } + }, + "FLEX_COUNTER_TABLE": { + "ACL": { + "FLEX_COUNTER_DELAY_STATUS": "true", + "FLEX_COUNTER_STATUS": "disable", + "POLL_INTERVAL": "10000" + } + }, + "INTERFACE": { + "Ethernet0|10.0.0.0/31": {}, + "Ethernet104|10.0.0.26/31": {}, + "Ethernet112|10.0.0.28/31": {}, + "Ethernet120|10.0.0.30/31": {}, + "Ethernet128|10.0.0.32/31": {}, + "Ethernet136|10.0.0.34/31": {}, + "Ethernet144|10.0.0.36/31": {}, + "Ethernet152|10.0.0.38/31": {}, + "Ethernet160|10.0.0.40/31": {}, + "Ethernet168|10.0.0.42/31": {}, + "Ethernet16|10.0.0.4/31": {}, + "Ethernet176|10.0.0.44/31": {}, + "Ethernet184|10.0.0.46/31": {}, + "Ethernet192|10.0.0.48/31": {}, + "Ethernet200|10.0.0.50/31": {}, + "Ethernet208|10.0.0.52/31": {}, + "Ethernet216|10.0.0.54/31": {}, + "Ethernet224|10.0.0.56/31": {}, + "Ethernet232|10.0.0.58/31": {}, + "Ethernet240|10.0.0.60/31": {}, + "Ethernet248|10.0.0.62/31": {}, + "Ethernet24|10.0.0.6/31": {}, + "Ethernet32|10.0.0.8/31": {}, + "Ethernet40|10.0.0.10/31": {}, + "Ethernet48|10.0.0.12/31": {}, + "Ethernet56|10.0.0.14/31": {}, + "Ethernet64|10.0.0.16/31": {}, + "Ethernet72|10.0.0.18/31": {}, + "Ethernet80|10.0.0.20/31": {}, + "Ethernet88|10.0.0.22/31": {}, + "Ethernet8|10.0.0.2/31": {}, + "Ethernet96|10.0.0.24/31": {} + }, + "LOOPBACK_INTERFACE": { + "Loopback0|10.1.0.1/32": {} + }, + "PORT": { + "Ethernet0": { + "admin_status": "up", + "alias": "etp1", + "lanes": "0,1,2,3,4,5,6,7", + "mtu": "9100" + }, + "Ethernet104": { + "admin_status": "up", + "alias": "etp14", + "lanes": "104,105,106,107,108,109,110,111", + "mtu": "9100" + }, + "Ethernet112": { + "admin_status": "up", + "alias": "etp15", + "lanes": "112,113,114,115,116,117,118,119", + "mtu": "9100" + }, + "Ethernet120": { + "admin_status": "up", + "alias": "etp16", + "lanes": "120,121,122,123,124,125,126,127", + "mtu": "9100" + }, + "Ethernet128": { + "admin_status": "up", + "alias": "etp17", + "lanes": "128,129,130,131,132,133,134,135", + "mtu": "9100" + }, + "Ethernet136": { + "admin_status": "up", + "alias": "etp18", + "lanes": "136,137,138,139,140,141,142,143", + "mtu": "9100" + }, + "Ethernet144": { + "admin_status": "up", + "alias": "etp19", + "lanes": "144,145,146,147,148,149,150,151", + "mtu": "9100" + }, + "Ethernet152": { + "admin_status": "up", + "alias": "etp20", + "lanes": "152,153,154,155,156,157,158,159", + "mtu": "9100" + }, + "Ethernet16": { + "admin_status": "up", + "alias": "etp3", + "lanes": "16,17,18,19,20,21,22,23", + "mtu": "9100" + }, + "Ethernet160": { + "admin_status": "up", + "alias": "etp21", + "lanes": "160,161,162,163,164,165,166,167", + "mtu": "9100" + }, + "Ethernet168": { + "admin_status": "up", + "alias": "etp22", + "lanes": "168,169,170,171,172,173,174,175", + "mtu": "9100" + }, + "Ethernet176": { + "admin_status": "up", + "alias": "etp23", + "lanes": "176,177,178,179,180,181,182,183", + "mtu": "9100" + }, + "Ethernet184": { + "admin_status": "up", + "alias": "etp24", + "lanes": "184,185,186,187,188,189,190,191", + "mtu": "9100" + }, + "Ethernet192": { + "admin_status": "up", + "alias": "etp25", + "lanes": "192,193,194,195,196,197,198,199", + "mtu": "9100" + }, + "Ethernet200": { + "admin_status": "up", + "alias": "etp26", + "lanes": "200,201,202,203,204,205,206,207", + "mtu": "9100" + }, + "Ethernet208": { + "admin_status": "up", + "alias": "etp27", + "lanes": "208,209,210,211,212,213,214,215", + "mtu": "9100" + }, + "Ethernet216": { + "admin_status": "up", + "alias": "etp28", + "lanes": "216,217,218,219,220,221,222,223", + "mtu": "9100" + }, + "Ethernet224": { + "admin_status": "up", + "alias": "etp29", + "lanes": "224,225,226,227,228,229,230,231", + "mtu": "9100" + }, + "Ethernet232": { + "admin_status": "up", + "alias": "etp30", + "lanes": "232,233,234,235,236,237,238,239", + "mtu": "9100" + }, + "Ethernet24": { + "admin_status": "up", + "alias": "etp4", + "lanes": "24,25,26,27,28,29,30,31", + "mtu": "9100" + }, + "Ethernet240": { + "admin_status": "up", + "alias": "etp31", + "lanes": "240,241,242,243,244,245,246,247", + "mtu": "9100" + }, + "Ethernet248": { + "admin_status": "up", + "alias": "etp32", + "lanes": "248,249,250,251,252,253,254,255", + "mtu": "9100" + }, + "Ethernet32": { + "admin_status": "up", + "alias": "etp5", + "lanes": "32,33,34,35,36,37,38,39", + "mtu": "9100" + }, + "Ethernet40": { + "admin_status": "up", + "alias": "etp6", + "lanes": "40,41,42,43,44,45,46,47", + "mtu": "9100" + }, + "Ethernet48": { + "admin_status": "up", + "alias": "etp7", + "lanes": "48,49,50,51,52,53,54,55", + "mtu": "9100" + }, + "Ethernet56": { + "admin_status": "up", + "alias": "etp8", + "lanes": "56,57,58,59,60,61,62,63", + "mtu": "9100" + }, + "Ethernet64": { + "admin_status": "up", + "alias": "etp9", + "lanes": "64,65,66,67,68,69,70,71", + "mtu": "9100" + }, + "Ethernet72": { + "admin_status": "up", + "alias": "etp10", + "lanes": "72,73,74,75,76,77,78,79", + "mtu": "9100" + }, + "Ethernet8": { + "admin_status": "up", + "alias": "etp2", + "lanes": "8,9,10,11,12,13,14,15", + "mtu": "9100" + }, + "Ethernet80": { + "admin_status": "up", + "alias": "etp11", + "lanes": "80,81,82,83,84,85,86,87", + "mtu": "9100" + }, + "Ethernet88": { + "admin_status": "up", + "alias": "etp12", + "lanes": "88,89,90,91,92,93,94,95", + "mtu": "9100" + }, + "Ethernet96": { + "admin_status": "up", + "alias": "etp13", + "lanes": "96,97,98,99,100,101,102,103", + "mtu": "9100" + } + } +} \ No newline at end of file diff --git a/src/sonic-config-engine/tests/t1-ss-dpu-sample-port-config.ini b/src/sonic-config-engine/tests/t1-ss-dpu-sample-port-config.ini new file mode 100644 index 000000000000..eb8916447e47 --- /dev/null +++ b/src/sonic-config-engine/tests/t1-ss-dpu-sample-port-config.ini @@ -0,0 +1,2 @@ +# name lanes alias +Ethernet0 0,1,2,3,4,5,6,7 etp1 diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index 4eca4fdfddb6..5afd6ed0b941 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -29,6 +29,7 @@ def setUp(self): self.t0_port_config = os.path.join(self.test_dir, 't0-sample-port-config.ini') self.t0_port_config_tiny = os.path.join(self.test_dir, 't0-sample-port-config-tiny.ini') self.t1_ss_port_config = os.path.join(self.test_dir, 't1-ss-sample-port-config.ini') + self.t1_ss_dpu_port_config = os.path.join(self.test_dir, 't1-ss-dpu-sample-port-config.ini') self.l1_l3_port_config = os.path.join(self.test_dir, 'l1-l3-sample-port-config.ini') self.t0_7050cx3_port_config = os.path.join(self.test_dir, 't0_7050cx3_d48c8_port_config.ini') self.t1_mlnx_minigraph = os.path.join(self.test_dir, 't1-sample-graph-mlnx.xml') @@ -323,6 +324,17 @@ def test_t1_smartswitch_template(self): self.assertTrue(json.dumps(sample_output_json, sort_keys=True) == json.dumps(output_json, sort_keys=True)) + def test_t1_smartswitch_dpu_template(self): + argument = ['-k', 'SS-DPU-1x400Gb', '--preset', 't1-smartswitch', '-p', self.t1_ss_dpu_port_config] + output = self.run_script(argument) + output_json = json.loads(output) + + sample_output_file = os.path.join(self.test_dir, 'sample_output', 't1-smartswitch-dpu.json') + with open(sample_output_file) as sample_output_fd: + sample_output_json = json.load(sample_output_fd) + + self.assertTrue(json.dumps(sample_output_json, sort_keys=True) == json.dumps(output_json, sort_keys=True)) + def test_qos_arista7050_render_template(self): self._test_qos_render_template('arista', 'x86_64-arista_7050_qx32s', 'Arista-7050-QX-32S', 'sample-arista-7050-t0-minigraph.xml', 'qos-arista7050.json') From 611c8168f4a9dd864f0b50caf046b008a9bd70fc Mon Sep 17 00:00:00 2001 From: Vivek Date: Fri, 19 Jul 2024 15:23:55 -0700 Subject: [PATCH 030/117] [Mellanox] Add support for SN4280 platform (#19312) [Mellanox] Add support for SN4280 platform Signed-off-by: Vivek Reddy --- .../ACS-SN4280/buffers.json.j2 | 18 + .../ACS-SN4280/buffers_defaults_objects.j2 | 1 + .../ACS-SN4280/buffers_defaults_t0.j2 | 43 ++ .../ACS-SN4280/buffers_defaults_t1.j2 | 44 ++ .../ACS-SN4280/buffers_dynamic.json.j2 | 19 + .../ACS-SN4280/hwsku.json | 140 ++++ .../ACS-SN4280/pg_profile_lookup.ini | 53 ++ .../ACS-SN4280/port_config.ini | 51 ++ .../ACS-SN4280/qos.json.j2 | 1 + .../ACS-SN4280/sai.profile | 1 + .../ACS-SN4280/sai_4280.xml | 265 +++++++ .../Mellanox-SN4280-O28/buffers.json.j2 | 1 + .../buffers_defaults_objects.j2 | 1 + .../buffers_defaults_t0.j2 | 1 + .../buffers_defaults_t1.j2 | 1 + .../buffers_dynamic.json.j2 | 1 + .../Mellanox-SN4280-O28/hwsku.json | 1 + .../Mellanox-SN4280-O28/pg_profile_lookup.ini | 1 + .../Mellanox-SN4280-O28/port_config.ini | 1 + .../Mellanox-SN4280-O28/qos.json.j2 | 1 + .../Mellanox-SN4280-O28/sai.profile | 3 + .../Mellanox-SN4280-O28/sai_4280.xml | 1 + .../x86_64-nvidia_sn4280-r0/default_sku | 1 + .../x86_64-nvidia_sn4280-r0/installer.conf | 1 + .../x86_64-nvidia_sn4280-r0/pcie.yaml | 378 ++++++++++ .../x86_64-nvidia_sn4280-r0/platform.json | 664 ++++++++++++++++++ .../x86_64-nvidia_sn4280-r0/platform_asic | 1 + .../platform_components.json | 18 + .../x86_64-nvidia_sn4280-r0/platform_wait | 1 + .../x86_64-nvidia_sn4280-r0/plugins/eeprom.py | 1 + .../plugins/psuutil.py | 1 + .../plugins/sfplpmget.py | 1 + .../plugins/sfplpmset.py | 1 + .../plugins/sfpreset.py | 1 + .../plugins/sfputil.py | 1 + .../pmon_daemon_control.json | 1 + .../x86_64-nvidia_sn4280-r0/pre_reboot_hook | 1 + .../x86_64-nvidia_sn4280-r0/sensors.conf | 565 +++++++++++++++ .../x86_64-nvidia_sn4280-r0/services.conf | 1 + .../system_health_monitoring_config.json | 1 + .../thermal_policy.json | 1 + platform/mellanox/asic_table.j2 | 1 + .../sonic_platform/component.py | 54 +- .../sonic_platform/device_data.py | 11 +- .../mlnx-platform-api/tests/test_component.py | 49 +- 45 files changed, 2396 insertions(+), 8 deletions(-) create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers.json.j2 create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_objects.j2 create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_t0.j2 create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_t1.j2 create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_dynamic.json.j2 create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/hwsku.json create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/pg_profile_lookup.ini create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/port_config.ini create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/qos.json.j2 create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/sai.profile create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/sai_4280.xml create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers.json.j2 create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_objects.j2 create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_t0.j2 create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_t1.j2 create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_dynamic.json.j2 create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/hwsku.json create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/pg_profile_lookup.ini create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/port_config.ini create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/qos.json.j2 create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/sai.profile create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/sai_4280.xml create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/default_sku create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/installer.conf create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/pcie.yaml create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/platform.json create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/platform_asic create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/platform_components.json create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/platform_wait create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/plugins/eeprom.py create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/plugins/psuutil.py create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfplpmget.py create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfplpmset.py create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfpreset.py create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfputil.py create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/pmon_daemon_control.json create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/pre_reboot_hook create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/sensors.conf create mode 100644 device/mellanox/x86_64-nvidia_sn4280-r0/services.conf create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/system_health_monitoring_config.json create mode 120000 device/mellanox/x86_64-nvidia_sn4280-r0/thermal_policy.json diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers.json.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers.json.j2 new file mode 100644 index 000000000000..e7817793ba3a --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers.json.j2 @@ -0,0 +1,18 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{%- set default_topo = 't1' %} +{%- include 'buffers_config.j2' %} diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_objects.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_objects.j2 new file mode 120000 index 000000000000..09998eb836e5 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_objects.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_objects.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_t0.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..0814c102746c --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_t0.j2 @@ -0,0 +1,43 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '40m' %} +{%-set ports2cable = { + 'leafrouter_torrouter' : '300m', + 'torrouter_server' : '40m' + } +-%} +{% set ingress_lossless_pool_size = '52064208' %} +{% set ingress_lossless_pool_xoff = '3461040' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '52064208' %} + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_t1.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..c816c29f560d --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_defaults_t1.j2 @@ -0,0 +1,44 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '300m' %} +{%-set ports2cable = { + 'spinerouter_leafrouter' : '2000m', + 'leafrouter_torrouter' : '300m' + } +-%} +{% set ingress_lossless_pool_size = '46743552' %} +{% set ingress_lossless_pool_xoff = '8781696' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '46743552' %} + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} + diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_dynamic.json.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_dynamic.json.j2 new file mode 100644 index 000000000000..54964e94b1df --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/buffers_dynamic.json.j2 @@ -0,0 +1,19 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{%- set default_topo = 't1' %} +{%- set dynamic_mode = 'true' %} +{%- include 'buffers_config.j2' %} diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/hwsku.json b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/hwsku.json new file mode 100644 index 000000000000..44cce9bf468f --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/hwsku.json @@ -0,0 +1,140 @@ +{ + "interfaces": { + "Ethernet0": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet8": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet16": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet24": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet32": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet40": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet48": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet56": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet64": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet72": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet80": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet88": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet96": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet104": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet112": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet120": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet128": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet136": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet144": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet152": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet160": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet168": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet176": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet184": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet192": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet200": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet208": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet216": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "subport": "1" + }, + "Ethernet224": { + "default_brkout_mode": "1x400G", + "subport": "1", + "autoneg": "on", + "role": "Dpc" + }, + "Ethernet232": { + "default_brkout_mode": "1x400G", + "subport": "1", + "autoneg": "on", + "role": "Dpc" + }, + "Ethernet240": { + "default_brkout_mode": "1x400G", + "subport": "1", + "autoneg": "on", + "role": "Dpc" + }, + "Ethernet248": { + "default_brkout_mode": "1x400G", + "subport": "1", + "autoneg": "on", + "role": "Dpc" + } + } +} diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/pg_profile_lookup.ini b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/pg_profile_lookup.ini new file mode 100644 index 000000000000..9fbb8eacf9ca --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/pg_profile_lookup.ini @@ -0,0 +1,53 @@ +## +## Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. +## Apache-2.0 +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## +# PG lossless profiles. +# speed cable size xon xoff threshold + 10000 5m 19456 19456 16384 0 + 25000 5m 19456 19456 17408 0 + 40000 5m 19456 19456 19456 0 + 50000 5m 19456 19456 21504 0 + 100000 5m 19456 19456 37888 0 + 200000 5m 19456 19456 43008 0 + 400000 5m 38912 38912 73728 0 + 10000 40m 19456 19456 16384 0 + 25000 40m 19456 19456 18432 0 + 40000 40m 19456 19456 21504 0 + 50000 40m 19456 19456 23552 0 + 100000 40m 19456 19456 43008 0 + 200000 40m 19456 19456 51200 0 + 400000 40m 38912 38912 91136 0 + 10000 300m 19456 19456 19456 0 + 25000 300m 19456 19456 26624 0 + 40000 300m 19456 19456 34816 0 + 50000 300m 19456 19456 40960 0 + 100000 300m 19456 19456 75776 0 + 200000 300m 19456 19456 118784 0 + 400000 300m 38912 38912 225280 0 + 10000 1500m 19456 19456 35840 0 + 25000 1500m 19456 19456 65536 0 + 40000 1500m 19456 19456 96256 0 + 50000 1500m 19456 19456 117760 0 + 100000 1500m 19456 19456 230400 0 + 200000 1500m 19456 19456 427008 0 + 400000 1500m 38912 38912 427008 0 + 10000 2000m 19456 19456 41984 0 + 25000 2000m 19456 19456 80896 0 + 40000 2000m 19456 19456 121856 0 + 50000 2000m 19456 19456 149504 0 + 100000 2000m 19456 19456 293888 0 + 200000 2000m 19456 19456 555008 0 + 400000 2000m 38912 38912 555008 0 diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/port_config.ini b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/port_config.ini new file mode 100644 index 000000000000..5a5faf7b9875 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/port_config.ini @@ -0,0 +1,51 @@ +## +## Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. +## Apache-2.0 +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## + + +# name lanes alias index +Ethernet0 0,1,2,3,4,5,6,7 etp1 1 +Ethernet8 8,9,10,11,12,13,14,15 etp2 2 +Ethernet16 16,17,18,19,20,21,22,23 etp3 3 +Ethernet24 24,25,26,27,28,29,30,31 etp4 4 +Ethernet32 32,33,34,35,36,37,38,39 etp5 5 +Ethernet40 40,41,42,43,44,45,46,47 etp6 6 +Ethernet48 48,49,50,51,52,53,54,55 etp7 7 +Ethernet56 56,57,58,59,60,61,62,63 etp8 8 +Ethernet64 64,65,66,67,68,69,70,71 etp9 9 +Ethernet72 72,73,74,75,76,77,78,79 etp10 10 +Ethernet80 80,81,82,83,84,85,86,87 etp11 11 +Ethernet88 88,89,90,91,92,93,94,95 etp12 12 +Ethernet96 96,97,98,99,100,101,102,103 etp13 13 +Ethernet104 104,105,106,107,108,109,110,111 etp14 14 +Ethernet112 112,113,114,115,116,117,118,119 etp15 15 +Ethernet120 120,121,122,123,124,125,126,127 etp16 16 +Ethernet128 128,129,130,131,132,133,134,135 etp17 17 +Ethernet136 136,137,138,139,140,141,142,143 etp18 18 +Ethernet144 144,145,146,147,148,149,150,151 etp19 19 +Ethernet152 152,153,154,155,156,157,158,159 etp20 20 +Ethernet160 160,161,162,163,164,165,166,167 etp21 21 +Ethernet168 168,169,170,171,172,173,174,175 etp22 22 +Ethernet176 176,177,178,179,180,181,182,183 etp23 23 +Ethernet184 184,185,186,187,188,189,190,191 etp24 24 +Ethernet192 192,193,194,195,196,197,198,199 etp25 25 +Ethernet200 200,201,202,203,204,205,206,207 etp26 26 +Ethernet208 208,209,210,211,212,213,214,215 etp27 27 +Ethernet216 216,217,218,219,220,221,222,223 etp28 28 +Ethernet224 224,225,226,227,228,229,230,231 etp29 29 +Ethernet232 232,233,234,235,236,237,238,239 etp30 30 +Ethernet240 240,241,242,243,244,245,246,247 etp31 31 +Ethernet248 248,249,250,251,252,253,254,255 etp32 32 diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/qos.json.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/qos.json.j2 new file mode 120000 index 000000000000..eccf286dc879 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/qos.json.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/sai.profile b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/sai.profile new file mode 100644 index 000000000000..33a14a2ecc7f --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/sai.profile @@ -0,0 +1 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_4280.xml diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/sai_4280.xml b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/sai_4280.xml new file mode 100644 index 000000000000..185aae6cf999 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/ACS-SN4280/sai_4280.xml @@ -0,0 +1,265 @@ + + + + + + + 00:77:66:55:44:00 + + + 1 + + + 32 + + + 1 + + + + + 1 + 8 + 13 + + + 3 + + + 32768 + + + 5 + 8 + 12 + 3 + 32768 + + + 9 + 8 + 15 + 3 + 32768 + + + 13 + 8 + 14 + 3 + 32768 + + + 17 + 8 + 17 + 3 + 32768 + + + 21 + 8 + 16 + 3 + 32768 + + + 25 + 8 + 19 + 3 + 32768 + + + 29 + 8 + 18 + 3 + 32768 + + + 33 + 8 + 25 + 3 + 32768 + + + 37 + 8 + 24 + 3 + 32768 + + + 41 + 8 + 27 + 3 + 32768 + + + 45 + 8 + 26 + 3 + 32768 + + + 49 + 8 + 21 + 3 + 32768 + + + 53 + 8 + 20 + 3 + 32768 + + + 57 + 8 + 23 + 3 + 32768 + + + 61 + 8 + 22 + 3 + 32768 + + + 65 + 8 + 10 + 3 + 32768 + + + 69 + 8 + 11 + 3 + 32768 + + + 73 + 8 + 8 + 3 + 32768 + + + 77 + 8 + 9 + 3 + 32768 + + + 81 + 8 + 6 + 3 + 32768 + + + 85 + 8 + 7 + 3 + 32768 + + + 89 + 8 + 4 + 3 + 32768 + + + 93 + 8 + 5 + 3 + 32768 + + + 97 + 8 + 31 + 3 + 32768 + + + 101 + 8 + 30 + 3 + 32768 + + + 105 + 8 + 29 + 3 + 32768 + + + 109 + 8 + 28 + 3 + 32768 + + + 113 + 8 + 2 + 3 + 32768 + + + 117 + 8 + 3 + 3 + 32768 + + + 121 + 8 + 0 + 3 + 32768 + + + 125 + 8 + 1 + 3 + 32768 + + + + diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers.json.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers.json.j2 new file mode 120000 index 000000000000..16698726c6b8 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers.json.j2 @@ -0,0 +1 @@ +../ACS-SN4280/buffers.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_objects.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_objects.j2 new file mode 120000 index 000000000000..09998eb836e5 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_objects.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_objects.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_t0.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_t0.j2 new file mode 120000 index 000000000000..f6b2affa3064 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_t0.j2 @@ -0,0 +1 @@ +../ACS-SN4280/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_t1.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_t1.j2 new file mode 120000 index 000000000000..e464a9c5e64a --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_defaults_t1.j2 @@ -0,0 +1 @@ +../ACS-SN4280/buffers_defaults_t1.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_dynamic.json.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_dynamic.json.j2 new file mode 120000 index 000000000000..12e94d69128c --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/buffers_dynamic.json.j2 @@ -0,0 +1 @@ +../ACS-SN4280/buffers_dynamic.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/hwsku.json b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/hwsku.json new file mode 120000 index 000000000000..0499271989cf --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/hwsku.json @@ -0,0 +1 @@ +../ACS-SN4280/hwsku.json \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/pg_profile_lookup.ini b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/pg_profile_lookup.ini new file mode 120000 index 000000000000..35b70c764a93 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/pg_profile_lookup.ini @@ -0,0 +1 @@ +../ACS-SN4280/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/port_config.ini b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/port_config.ini new file mode 120000 index 000000000000..155ca39e4c86 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/port_config.ini @@ -0,0 +1 @@ +../ACS-SN4280/port_config.ini \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/qos.json.j2 b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/qos.json.j2 new file mode 120000 index 000000000000..eb7a6af87698 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/qos.json.j2 @@ -0,0 +1 @@ +../ACS-SN4280/qos.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/sai.profile b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/sai.profile new file mode 100644 index 000000000000..18fd34bcfbe6 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/sai.profile @@ -0,0 +1,3 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_4280.xml +SAI_DEFAULT_SWITCHING_MODE_STORE_FORWARD=1 +SAI_NOT_DROP_SIP_DIP_LINK_LOCAL=1 diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/sai_4280.xml b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/sai_4280.xml new file mode 120000 index 000000000000..4aa1ca449855 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/Mellanox-SN4280-O28/sai_4280.xml @@ -0,0 +1 @@ +../ACS-SN4280/sai_4280.xml \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/default_sku b/device/mellanox/x86_64-nvidia_sn4280-r0/default_sku new file mode 100644 index 000000000000..4b5ca0bd1a7e --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/default_sku @@ -0,0 +1 @@ +ACS-SN4280 t1-smartswitch diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/installer.conf b/device/mellanox/x86_64-nvidia_sn4280-r0/installer.conf new file mode 100644 index 000000000000..b5ee161d1eaa --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/installer.conf @@ -0,0 +1 @@ +ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="libata.force=noncq module_blacklist=mlx5_ib,mlx5_core" diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/pcie.yaml b/device/mellanox/x86_64-nvidia_sn4280-r0/pcie.yaml new file mode 100644 index 000000000000..c9ef7ee705d3 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/pcie.yaml @@ -0,0 +1,378 @@ +## +## Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. +## Apache-2.0 +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## + +- bus: '00' + dev: '00' + fn: '0' + id: '1450' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Root Complex' +- bus: '00' + dev: '00' + fn: '2' + id: '1451' + name: 'IOMMU: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) I/O + Memory Management Unit' +- bus: '00' + dev: '01' + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '00' + dev: '01' + fn: '2' + id: '1453' + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + PCIe GPP Bridge' +- bus: '00' + dev: '01' + fn: '3' + id: '1453' + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + PCIe GPP Bridge' +- bus: '00' + dev: '01' + fn: '4' + id: '1453' + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + PCIe GPP Bridge' +- bus: '00' + dev: '02' + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '00' + dev: '03' + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '00' + dev: '03' + fn: '1' + id: '1453' + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + PCIe GPP Bridge' +- bus: '00' + dev: '03' + fn: '2' + id: '1453' + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + PCIe GPP Bridge' +- bus: '00' + dev: '03' + fn: '3' + id: '1453' + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + PCIe GPP Bridge' +- bus: '00' + dev: '04' + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '00' + dev: '07' + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '00' + dev: '07' + fn: '1' + id: '1454' + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Internal PCIe GPP Bridge 0 to Bus B' +- bus: '00' + dev: 08 + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '00' + dev: 08 + fn: '1' + id: '1454' + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Internal PCIe GPP Bridge 0 to Bus B' +- bus: '00' + dev: '14' + fn: '0' + id: 790b + name: 'SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 59)' +- bus: '00' + dev: '14' + fn: '3' + id: 790e + name: 'ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge (rev 51)' +- bus: '00' + dev: '18' + fn: '0' + id: '1460' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 0' +- bus: '00' + dev: '18' + fn: '1' + id: '1461' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 1' +- bus: '00' + dev: '18' + fn: '2' + id: '1462' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 2' +- bus: '00' + dev: '18' + fn: '3' + id: '1463' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 3' +- bus: '00' + dev: '18' + fn: '4' + id: '1464' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 4' +- bus: '00' + dev: '18' + fn: '5' + id: '1465' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 5' +- bus: '00' + dev: '18' + fn: '6' + id: '1466' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 6' +- bus: '00' + dev: '18' + fn: '7' + id: '1467' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 7' +- bus: '00' + dev: '19' + fn: '0' + id: '1460' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 0' +- bus: '00' + dev: '19' + fn: '1' + id: '1461' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 1' +- bus: '00' + dev: '19' + fn: '2' + id: '1462' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 2' +- bus: '00' + dev: '19' + fn: '3' + id: '1463' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 3' +- bus: '00' + dev: '19' + fn: '4' + id: '1464' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 4' +- bus: '00' + dev: '19' + fn: '5' + id: '1465' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 5' +- bus: '00' + dev: '19' + fn: '6' + id: '1466' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 6' +- bus: '00' + dev: '19' + fn: '7' + id: '1467' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Data Fabric: Device 18h; Function 7' +- bus: '01' + dev: '00' + fn: '0' + id: c2d5 + name: 'DMA controller: Mellanox Technologies MT43244 BlueField-3 SoC Management + Interface (rev 01)' +- bus: '02' + dev: '00' + fn: '0' + id: c2d5 + name: 'DMA controller: Mellanox Technologies MT43244 BlueField-3 SoC Management + Interface (rev 01)' +- bus: '03' + dev: '00' + fn: '0' + id: '5765' + name: 'Non-Volatile memory controller: Device 1f9f:5765 (rev 01)' +- bus: '04' + dev: '00' + fn: '0' + id: cf70 + name: 'Ethernet controller: Mellanox Technologies Spectrum-3' +- bus: '05' + dev: '00' + fn: '0' + id: c2d5 + name: 'DMA controller: Mellanox Technologies MT43244 BlueField-3 SoC Management + Interface (rev 01)' +- bus: '06' + dev: '00' + fn: '0' + id: c2d5 + name: 'DMA controller: Mellanox Technologies MT43244 BlueField-3 SoC Management + Interface (rev 01)' +- bus: '07' + dev: '00' + fn: '0' + id: 145a + name: 'Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] + Zeppelin/Raven/Raven2 PCIe Dummy Function' +- bus: '07' + dev: '00' + fn: '2' + id: '1456' + name: 'Encryption controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models + 00h-0fh) Platform Security Processor (PSP) 3.0 Device' +- bus: '07' + dev: '00' + fn: '3' + id: 145f + name: 'USB controller: Advanced Micro Devices, Inc. [AMD] Zeppelin USB 3.0 xHCI + Compliant Host Controller' +- bus: 08 + dev: '00' + fn: '0' + id: '1455' + name: 'Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] + Zeppelin/Renoir PCIe Dummy Function' +- bus: 08 + dev: '00' + fn: '1' + id: '1468' + name: 'Encryption controller: Advanced Micro Devices, Inc. [AMD] Zeppelin Cryptographic + Coprocessor NTBCCP' +- bus: 08 + dev: '00' + fn: '4' + id: '1458' + name: 'Ethernet controller: Advanced Micro Devices, Inc. [AMD] XGMAC 10GbE Controller' +- bus: '40' + dev: '00' + fn: '0' + id: '1450' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Root Complex' +- bus: '40' + dev: '00' + fn: '2' + id: '1451' + name: 'IOMMU: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) I/O + Memory Management Unit' +- bus: '40' + dev: '01' + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '40' + dev: '02' + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '40' + dev: '03' + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '40' + dev: '04' + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '40' + dev: '07' + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '40' + dev: '07' + fn: '1' + id: '1454' + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Internal PCIe GPP Bridge 0 to Bus B' +- bus: '40' + dev: 08 + fn: '0' + id: '1452' + name: 'Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) + PCIe Dummy Host Bridge' +- bus: '40' + dev: 08 + fn: '1' + id: '1454' + name: 'PCI bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-0fh) + Internal PCIe GPP Bridge 0 to Bus B' +- bus: '41' + dev: '00' + fn: '0' + id: 145a + name: 'Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] + Zeppelin/Raven/Raven2 PCIe Dummy Function' +- bus: '41' + dev: '00' + fn: '2' + id: '1456' + name: 'Encryption controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models + 00h-0fh) Platform Security Processor (PSP) 3.0 Device' +- bus: '41' + dev: '00' + fn: '3' + id: 145f + name: 'USB controller: Advanced Micro Devices, Inc. [AMD] Zeppelin USB 3.0 xHCI + Compliant Host Controller' +- bus: '42' + dev: '00' + fn: '0' + id: '1455' + name: 'Non-Essential Instrumentation [1300]: Advanced Micro Devices, Inc. [AMD] + Zeppelin/Renoir PCIe Dummy Function' +- bus: '42' + dev: '00' + fn: '1' + id: '1468' + name: 'Encryption controller: Advanced Micro Devices, Inc. [AMD] Zeppelin Cryptographic + Coprocessor NTBCCP' diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/platform.json b/device/mellanox/x86_64-nvidia_sn4280-r0/platform.json new file mode 100644 index 000000000000..8597bb955dd4 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/platform.json @@ -0,0 +1,664 @@ +{ + "chassis": { + "name": "SN4280", + "components": [ + { + "name": "ONIE" + }, + { + "name": "SSD" + }, + { + "name": "BIOS" + }, + { + "name": "CPLD1" + }, + { + "name": "CPLD2" + }, + { + "name": "CPLD3" + } + ], + "fans": [], + "fan_drawers": [ + { + "name": "drawer1", + "fans": [ + { + "name": "fan1" + } + ] + }, + { + "name": "drawer2", + "fans": [ + { + "name": "fan2" + } + ] + }, + { + "name": "drawer3", + "fans": [ + { + "name": "fan3" + } + ] + }, + { + "name": "drawer4", + "fans": [ + { + "name": "fan4" + } + ] + } + ], + "psus": [ + { + "name": "PSU 1", + "fans": [ + { + "name": "psu1_fan1" + } + ], + "thermals": [ + { + "name": "PSU-1 Temp" + } + ] + }, + { + "name": "PSU 2", + "fans": [ + { + "name": "psu2_fan1" + } + ], + "thermals": [ + { + "name": "PSU-2 Temp" + } + ] + } + ], + "thermals": [ + { + "name": "ASIC" + }, + { + "name": "Ambient Fan Side Temp" + }, + { + "name": "Ambient Port Side Temp" + }, + { + "name": "CPU Pack Temp" + }, + { + "name": "SODIMM 1 Temp" + }, + { + "name": "SODIMM 2 Temp" + }, + { + "name": "SODIMM 3 Temp" + }, + { + "name": "SODIMM 4 Temp" + } + ], + "sfps": [ + { + "name": "sfp1", + "thermals": [ + { + "name": "xSFP module 1 Temp" + } + ] + }, + { + "name": "sfp2", + "thermals": [ + { + "name": "xSFP module 2 Temp" + } + ] + }, + { + "name": "sfp3", + "thermals": [ + { + "name": "xSFP module 3 Temp" + } + ] + }, + { + "name": "sfp4", + "thermals": [ + { + "name": "xSFP module 4 Temp" + } + ] + }, + { + "name": "sfp5", + "thermals": [ + { + "name": "xSFP module 5 Temp" + } + ] + }, + { + "name": "sfp6", + "thermals": [ + { + "name": "xSFP module 6 Temp" + } + ] + }, + { + "name": "sfp7", + "thermals": [ + { + "name": "xSFP module 7 Temp" + } + ] + }, + { + "name": "sfp8", + "thermals": [ + { + "name": "xSFP module 8 Temp" + } + ] + }, + { + "name": "sfp9", + "thermals": [ + { + "name": "xSFP module 9 Temp" + } + ] + }, + { + "name": "sfp10", + "thermals": [ + { + "name": "xSFP module 10 Temp" + } + ] + }, + { + "name": "sfp11", + "thermals": [ + { + "name": "xSFP module 11 Temp" + } + ] + }, + { + "name": "sfp12", + "thermals": [ + { + "name": "xSFP module 12 Temp" + } + ] + }, + { + "name": "sfp13", + "thermals": [ + { + "name": "xSFP module 13 Temp" + } + ] + }, + { + "name": "sfp14", + "thermals": [ + { + "name": "xSFP module 14 Temp" + } + ] + }, + { + "name": "sfp15", + "thermals": [ + { + "name": "xSFP module 15 Temp" + } + ] + }, + { + "name": "sfp16", + "thermals": [ + { + "name": "xSFP module 16 Temp" + } + ] + }, + { + "name": "sfp17", + "thermals": [ + { + "name": "xSFP module 17 Temp" + } + ] + }, + { + "name": "sfp18", + "thermals": [ + { + "name": "xSFP module 18 Temp" + } + ] + }, + { + "name": "sfp19", + "thermals": [ + { + "name": "xSFP module 19 Temp" + } + ] + }, + { + "name": "sfp20", + "thermals": [ + { + "name": "xSFP module 20 Temp" + } + ] + }, + { + "name": "sfp21", + "thermals": [ + { + "name": "xSFP module 21 Temp" + } + ] + }, + { + "name": "sfp22", + "thermals": [ + { + "name": "xSFP module 22 Temp" + } + ] + }, + { + "name": "sfp23", + "thermals": [ + { + "name": "xSFP module 23 Temp" + } + ] + }, + { + "name": "sfp24", + "thermals": [ + { + "name": "xSFP module 24 Temp" + } + ] + }, + { + "name": "sfp25", + "thermals": [ + { + "name": "xSFP module 25 Temp" + } + ] + }, + { + "name": "sfp26", + "thermals": [ + { + "name": "xSFP module 26 Temp" + } + ] + }, + { + "name": "sfp27", + "thermals": [ + { + "name": "xSFP module 27 Temp" + } + ] + }, + { + "name": "sfp28", + "thermals": [ + { + "name": "xSFP module 28 Temp" + } + ] + } + ] + }, + "interfaces": { + "Ethernet0": { + "index": "1,1,1,1,1,1,1,1", + "lanes": "0,1,2,3,4,5,6,7", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp1"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp1a", "etp1b"], + "4x100G[50G,25G,10G,1G]": ["etp1a", "etp1b", "etp1c", "etp1d"], + "4x25G(4)[10G,1G]": ["etp1a", "etp1b", "etp1c", "etp1d"] + } + }, + "Ethernet8": { + "index": "2,2,2,2,2,2,2,2", + "lanes": "8,9,10,11,12,13,14,15", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp2"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp2a", "etp2b"], + "4x100G[50G,25G,10G,1G]": ["etp2a", "etp2b", "etp2c", "etp2d"], + "4x25G(4)[10G,1G]": ["etp2a", "etp2b", "etp2c", "etp2d"] + } + }, + "Ethernet16": { + "index": "3,3,3,3,3,3,3,3", + "lanes": "16,17,18,19,20,21,22,23", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp3"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp3a", "etp3b"], + "4x100G[50G,25G,10G,1G]": ["etp3a", "etp3b", "etp3c", "etp3d"], + "4x25G(4)[10G,1G]": ["etp3a", "etp3b", "etp3c", "etp3d"] + } + }, + "Ethernet24": { + "index": "4,4,4,4,4,4,4,4", + "lanes": "24,25,26,27,28,29,30,31", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp4"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp4a", "etp4b"], + "4x100G[50G,25G,10G,1G]": ["etp4a", "etp4b", "etp4c", "etp4d"], + "4x25G(4)[10G,1G]": ["etp4a", "etp4b", "etp4c", "etp4d"] + } + }, + "Ethernet32": { + "index": "5,5,5,5,5,5,5,5", + "lanes": "32,33,34,35,36,37,38,39", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp5"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp5a", "etp5b"], + "4x100G[50G,25G,10G,1G]": ["etp5a", "etp5b", "etp5c", "etp5d"], + "4x25G(4)[10G,1G]": ["etp5a", "etp5b", "etp5c", "etp5d"] + } + }, + "Ethernet40": { + "index": "6,6,6,6,6,6,6,6", + "lanes": "40,41,42,43,44,45,46,47", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp6"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp6a", "etp6b"], + "4x100G[50G,25G,10G,1G]": ["etp6a", "etp6b", "etp6c", "etp6d"], + "4x25G(4)[10G,1G]": ["etp6a", "etp6b", "etp6c", "etp6d"] + } + }, + "Ethernet48": { + "index": "7,7,7,7,7,7,7,7", + "lanes": "48,49,50,51,52,53,54,55", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp7"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp7a", "etp7b"], + "4x100G[50G,25G,10G,1G]": ["etp7a", "etp7b", "etp7c", "etp7d"], + "4x25G(4)[10G,1G]": ["etp7a", "etp7b", "etp7c", "etp7d"] + } + }, + "Ethernet56": { + "index": "8,8,8,8,8,8,8,8", + "lanes": "56,57,58,59,60,61,62,63", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp8"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp8a", "etp8b"], + "4x100G[50G,25G,10G,1G]": ["etp8a", "etp8b", "etp8c", "etp8d"], + "4x25G(4)[10G,1G]": ["etp8a", "etp8b", "etp8c", "etp8d"] + } + }, + "Ethernet64": { + "index": "9,9,9,9,9,9,9,9", + "lanes": "64,65,66,67,68,69,70,71", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp9"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp9a", "etp9b"], + "4x100G[50G,25G,10G,1G]": ["etp9a", "etp9b", "etp9c", "etp9d"], + "4x25G(4)[10G,1G]": ["etp9a", "etp9b", "etp9c", "etp9d"] + } + }, + "Ethernet72": { + "index": "10,10,10,10,10,10,10,10", + "lanes": "72,73,74,75,76,77,78,79", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp10"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp10a", "etp10b"], + "4x100G[50G,25G,10G,1G]": ["etp10a", "etp10b", "etp10c", "etp10d"], + "4x25G(4)[10G,1G]": ["etp10a", "etp10b", "etp10c", "etp10d"] + } + }, + "Ethernet80": { + "index": "11,11,11,11,11,11,11,11", + "lanes": "80,81,82,83,84,85,86,87", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp11"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp11a", "etp11b"], + "4x100G[50G,25G,10G,1G]": ["etp11a", "etp11b", "etp11c", "etp11d"], + "4x25G(4)[10G,1G]": ["etp11a", "etp11b", "etp11c", "etp11d"] + } + }, + "Ethernet88": { + "index": "12,12,12,12,12,12,12,12", + "lanes": "88,89,90,91,92,93,94,95", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp12"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp12a", "etp12b"], + "4x100G[50G,25G,10G,1G]": ["etp12a", "etp12b", "etp12c", "etp12d"], + "4x25G(4)[10G,1G]": ["etp12a", "etp12b", "etp12c", "etp12d"] + } + }, + "Ethernet96": { + "index": "13,13,13,13,13,13,13,13", + "lanes": "96,97,98,99,100,101,102,103", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp13"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp13a", "etp13b"], + "4x100G[50G,25G,10G,1G]": ["etp13a", "etp13b", "etp13c", "etp13d"], + "4x25G(4)[10G,1G]": ["etp13a", "etp13b", "etp13c", "etp13d"] + } + }, + "Ethernet104": { + "index": "14,14,14,14,14,14,14,14", + "lanes": "104,105,106,107,108,109,110,111", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp14"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp14a", "etp14b"], + "4x100G[50G,25G,10G,1G]": ["etp14a", "etp14b", "etp14c", "etp14d"], + "4x25G(4)[10G,1G]": ["etp14a", "etp14b", "etp14c", "etp14d"] + } + }, + "Ethernet112": { + "index": "15,15,15,15,15,15,15,15", + "lanes": "112,113,114,115,116,117,118,119", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp15"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp15a", "etp15b"], + "4x100G[50G,25G,10G,1G]": ["etp15a", "etp15b", "etp15c", "etp15d"], + "4x25G(4)[10G,1G]": ["etp15a", "etp15b", "etp15c", "etp15d"] + } + }, + "Ethernet120": { + "index": "16,16,16,16,16,16,16,16", + "lanes": "120,121,122,123,124,125,126,127", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp16"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp16a", "etp16b"], + "4x100G[50G,25G,10G,1G]": ["etp16a", "etp16b", "etp16c", "etp16d"], + "4x25G(4)[10G,1G]": ["etp16a", "etp16b", "etp16c", "etp16d"] + } + }, + "Ethernet128": { + "index": "17,17,17,17,17,17,17,17", + "lanes": "128,129,130,131,132,133,134,135", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp17"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp17a", "etp17b"], + "4x100G[50G,25G,10G,1G]": ["etp17a", "etp17b", "etp17c", "etp17d"], + "4x25G(4)[10G,1G]": ["etp17a", "etp17b", "etp17c", "etp17d"] + } + }, + "Ethernet136": { + "index": "18,18,18,18,18,18,18,18", + "lanes": "136,137,138,139,140,141,142,143", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp18"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp18a", "etp18b"], + "4x100G[50G,25G,10G,1G]": ["etp18a", "etp18b", "etp18c", "etp18d"], + "4x25G(4)[10G,1G]": ["etp18a", "etp18b", "etp18c", "etp18d"] + } + }, + "Ethernet144": { + "index": "19,19,19,19,19,19,19,19", + "lanes": "144,145,146,147,148,149,150,151", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp19"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp19a", "etp19b"], + "4x100G[50G,25G,10G,1G]": ["etp19a", "etp19b", "etp19c", "etp19d"], + "4x25G(4)[10G,1G]": ["etp19a", "etp19b", "etp19c", "etp19d"] + } + }, + "Ethernet152": { + "index": "20,20,20,20,20,20,20,20", + "lanes": "152,153,154,155,156,157,158,159", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp20"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp20a", "etp20b"], + "4x100G[50G,25G,10G,1G]": ["etp20a", "etp20b", "etp20c", "etp20d"], + "4x25G(4)[10G,1G]": ["etp20a", "etp20b", "etp20c", "etp20d"] + } + }, + "Ethernet160": { + "index": "21,21,21,21,21,21,21,21", + "lanes": "160,161,162,163,164,165,166,167", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp21"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp21a", "etp21b"], + "4x100G[50G,25G,10G,1G]": ["etp21a", "etp21b", "etp21c", "etp21d"], + "4x25G(4)[10G,1G]": ["etp21a", "etp21b", "etp21c", "etp21d"] + } + }, + "Ethernet168": { + "index": "22,22,22,22,22,22,22,22", + "lanes": "168,169,170,171,172,173,174,175", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp22"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp22a", "etp22b"], + "4x100G[50G,25G,10G,1G]": ["etp22a", "etp22b", "etp22c", "etp22d"], + "4x25G(4)[10G,1G]": ["etp22a", "etp22b", "etp22c", "etp22d"] + } + }, + "Ethernet176": { + "index": "23,23,23,23,23,23,23,23", + "lanes": "176,177,178,179,180,181,182,183", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp23"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp23a", "etp23b"], + "4x100G[50G,25G,10G,1G]": ["etp23a", "etp23b", "etp23c", "etp23d"], + "4x25G(4)[10G,1G]": ["etp23a", "etp23b", "etp23c", "etp23d"] + } + }, + "Ethernet184": { + "index": "24,24,24,24,24,24,24,24", + "lanes": "184,185,186,187,188,189,190,191", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp24"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp24a", "etp24b"], + "4x100G[50G,25G,10G,1G]": ["etp24a", "etp24b", "etp24c", "etp24d"], + "4x25G(4)[10G,1G]": ["etp24a", "etp24b", "etp24c", "etp24d"] + } + }, + "Ethernet192": { + "index": "25,25,25,25,25,25,25,25", + "lanes": "192,193,194,195,196,197,198,199", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp25"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp25a", "etp25b"], + "4x100G[50G,25G,10G,1G]": ["etp25a", "etp25b", "etp25c", "etp25d"], + "4x25G(4)[10G,1G]": ["etp25a", "etp25b", "etp25c", "etp25d"] + } + }, + "Ethernet200": { + "index": "26,26,26,26,26,26,26,26", + "lanes": "200,201,202,203,204,205,206,207", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp26"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp26a", "etp26b"], + "4x100G[50G,25G,10G,1G]": ["etp26a", "etp26b", "etp26c", "etp26d"], + "4x25G(4)[10G,1G]": ["etp26a", "etp26b", "etp26c", "etp26d"] + } + }, + "Ethernet208": { + "index": "27,27,27,27,27,27,27,27", + "lanes": "208,209,210,211,212,213,214,215", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp27"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp27a", "etp27b"], + "4x100G[50G,25G,10G,1G]": ["etp27a", "etp27b", "etp27c", "etp27d"], + "4x25G(4)[10G,1G]": ["etp27a", "etp27b", "etp27c", "etp27d"] + } + }, + "Ethernet216": { + "index": "28,28,28,28,28,28,28,28", + "lanes": "216,217,218,219,220,221,222,223", + "breakout_modes": { + "1x400G[200G,100G,50G,40G,25G,10G,1G]": ["etp28"], + "2x200G[100G,50G,40G,25G,10G,1G]": ["etp28a", "etp28b"], + "4x100G[50G,25G,10G,1G]": ["etp28a", "etp28b", "etp28c", "etp28d"], + "4x25G(4)[10G,1G]": ["etp28a", "etp28b", "etp28c", "etp28d"] + } + }, + "Ethernet224": { + "index": "29,29,29,29,29,29,29,29", + "lanes": "224,225,226,227,228,229,230,231", + "breakout_modes": { + "1x400G": ["etp29"] + } + }, + "Ethernet232": { + "index": "30,30,30,30,30,30,30,30", + "lanes": "232,233,234,235,236,237,238,239", + "breakout_modes": { + "1x400G": ["etp30"] + } + }, + "Ethernet240": { + "index": "31,31,31,31,31,31,31,31", + "lanes": "240,241,242,243,244,245,246,247", + "breakout_modes": { + "1x400G": ["etp31"] + } + }, + "Ethernet248": { + "index": "32,32,32,32,32,32,32,32", + "lanes": "248,249,250,251,252,253,254,255", + "breakout_modes": { + "1x400G": ["etp32"] + } + } + }, + "DPUS": { + "dpu0": { + "midplane_interface": "dpu0" + }, + "dpu1": { + "midplane_interface": "dpu1" + }, + "dpu2": { + "midplane_interface": "dpu2" + }, + "dpu3": { + "midplane_interface": "dpu3" + } + } +} diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/platform_asic b/device/mellanox/x86_64-nvidia_sn4280-r0/platform_asic new file mode 100644 index 000000000000..70c074885557 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/platform_asic @@ -0,0 +1 @@ +mellanox diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/platform_components.json b/device/mellanox/x86_64-nvidia_sn4280-r0/platform_components.json new file mode 100644 index 000000000000..ff3e406d8cc9 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/platform_components.json @@ -0,0 +1,18 @@ +{ + "chassis": { + "SN4280": { + "component": { + "ONIE": { }, + "SSD": { }, + "BIOS": { }, + "CPLD1": { }, + "CPLD2": { }, + "CPLD3": { }, + "DPU1_FPGA": { }, + "DPU2_FPGA": { }, + "DPU3_FPGA": { }, + "DPU4_FPGA": { } + } + } + } +} diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/platform_wait b/device/mellanox/x86_64-nvidia_sn4280-r0/platform_wait new file mode 120000 index 000000000000..4b30bd429854 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/platform_wait @@ -0,0 +1 @@ +../x86_64-mlnx_msn2700-r0/platform_wait \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/eeprom.py b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/eeprom.py new file mode 120000 index 000000000000..b4e2a6a61671 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/eeprom.py @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/plugins/eeprom.py \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/psuutil.py b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/psuutil.py new file mode 120000 index 000000000000..9f724238a8d5 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/psuutil.py @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/plugins/psuutil.py \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfplpmget.py b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfplpmget.py new file mode 120000 index 000000000000..2e84f435abd9 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfplpmget.py @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/plugins/sfplpmget.py \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfplpmset.py b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfplpmset.py new file mode 120000 index 000000000000..6a88bac30467 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfplpmset.py @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/plugins/sfplpmset.py \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfpreset.py b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfpreset.py new file mode 120000 index 000000000000..fef2063e3496 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfpreset.py @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/plugins/sfpreset.py \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfputil.py b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfputil.py new file mode 120000 index 000000000000..45909b880fc9 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/plugins/sfputil.py @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/plugins/sfputil.py \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/pmon_daemon_control.json b/device/mellanox/x86_64-nvidia_sn4280-r0/pmon_daemon_control.json new file mode 120000 index 000000000000..435a2ce7c0ba --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/pmon_daemon_control.json @@ -0,0 +1 @@ +../x86_64-mlnx_msn2700-r0/pmon_daemon_control.json \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/pre_reboot_hook b/device/mellanox/x86_64-nvidia_sn4280-r0/pre_reboot_hook new file mode 120000 index 000000000000..6fc31078ee86 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/pre_reboot_hook @@ -0,0 +1 @@ +../x86_64-mlnx_msn2700-r0/pre_reboot_hook \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/sensors.conf b/device/mellanox/x86_64-nvidia_sn4280-r0/sensors.conf new file mode 100644 index 000000000000..111e469675d3 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/sensors.conf @@ -0,0 +1,565 @@ +########################################################################### +# Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# +# Platform specific sensors config for SN4280 +########################################################################### + +# Temperature sensors +bus "i2c-2" "i2c-1-mux (chan_id 1)" + chip "mlxsw-i2c-*-48" + label temp1 "Ambient ASIC Temp" + ignore temp2 + ignore temp3 + ignore temp4 + ignore temp5 + ignore temp6 + ignore temp7 + ignore temp8 + ignore temp9 + ignore temp10 + ignore temp11 + ignore temp12 + ignore temp13 + ignore temp14 + ignore temp15 + ignore temp16 + ignore temp17 + ignore temp18 + ignore temp19 + ignore temp20 + ignore temp21 + ignore temp22 + ignore temp23 + ignore temp24 + ignore temp25 + ignore temp26 + ignore temp27 + ignore temp28 + ignore temp29 + +bus "i2c-7" "i2c-1-mux (chan_id 6)" + chip "tmp102-i2c-*-49" + label temp1 "Ambient Fan Side Temp (air intake)" + chip "adt75-i2c-*-49" + label temp1 "Ambient Fan Side Temp (air intake)" + chip "stts751-i2c-*-49" + label temp1 "Ambient Fan Side Temp (air intake)" + chip "tmp102-i2c-*-4a" + label temp1 "Ambient Port Side Temp (air exhaust)" + chip "adt75-i2c-*-4a" + label temp1 "Ambient Port Side Temp (air exhaust)" + +# Power controllers +bus "i2c-5" "i2c-1-mux (chan_id 4)" + chip "xdpe12284-i2c-*-62" + label in1 "PMIC-1 12V ASIC VDD_M (in1)" + ignore in2 + label in3 "PMIC-1 ASIC VCORE_MAIN Rail (out1)" + ignore in4 + label temp1 "PMIC-1 ASIC VCORE_MAIN Temp 1" + ignore temp2 + label power1 "PMIC-1 12V ASIC VCORE_MAIN Rail Pwr (in)" + ignore power2 + label power3 "PMIC-1 ASIC VCORE_MAIN Rail Pwr (out1)" + ignore power4 + label curr1 "PMIC-1 12V ASIC VCORE_MAIN Rail Curr (in1)" + ignore curr2 + label curr3 "PMIC-1 ASIC VCORE_MAIN Rail Curr (out1)" + ignore curr4 + chip "mp2975-i2c-*-62" + label in1 "PMIC-1 12V ASIC VDD_M (in)" + label in2 "PMIC-1 ASIC VCORE_MAIN Rail (out)" + ignore in3 + ignore in4 + label temp1 "PMIC-1 ASIC VCORE_MAIN Temp 1" + ignore temp2 + label power1 "PMIC-1 12V ASIC VCORE_MAIN Rail Pwr (in)" + label power2 "PMIC-1 ASIC VCORE_MAIN Rail Pwr (out)" + ignore power3 + ignore power4 + label curr1 "PMIC-1 12V ASIC VCORE_MAIN Rail Curr (in)" + label curr2 "PMIC-1 ASIC VCORE_MAIN Rail Curr (out)" + ignore curr3 + ignore curr4 + + chip "xdpe12284-i2c-*-64" + label in1 "PMIC-2 12V ASIC VDDI_M VDDHS_M (in1)" + label in2 "PMIC-2 12V ASIC VDDI_M VDDHS_M (in2)" + label in3 "PMIC-2 ASIC 1.8V_MAIN Rail (out1)" + label in4 "PMIC-2 ASIC 1.2V_MAIN Rail (out2)" + label temp1 "PMIC-2 ASIC 1.8V_MAIN Temp 1" + label temp2 "PMIC-2 ASIC 1.2V_MAIN Temp 2" + label power1 "PMIC-2 12V ASIC 1.8V_1.2V_MAIN Rail Pwr (in)" + ignore power2 + label power3 "PMIC-2 ASIC 1.8V_MAIN Rail Pwr (out1)" + label power4 "PMIC-2 ASIC 1.2V_MAIN Rail Pwr (out2)" + label curr1 "PMIC-2 12V ASIC 1.8V_MAIN Rail Curr (in1)" + label curr2 "PMIC-2 12V ASIC 1.2V_MAIN Rail Curr (in2)" + label curr3 "PMIC-2 ASIC 1.8V_MAIN Rail Curr (out1)" + label curr4 "PMIC-2 ASIC 1.2V_MAIN Rail Curr (out2)" + chip "mp2975-i2c-*-64" + label in1 "PMIC-2 12V ASIC VDDI_M VDDHS_M (in)" + label in2 "PMIC-2 ASIC 1.8V_MAIN Rail (out1)" + label in3 "PMIC-2 ASIC 1.2V_MAIN Rail (out2)" + ignore in4 + label temp1 "PMIC-2 ASIC 1.8V_1.2V_MAIN Temp 1" + ignore temp2 + label power1 "PMIC-2 12V ASIC 1.8V_1.2V_MAIN Rail Pwr (in)" + label power2 "PMIC-2 ASIC 1.8V_MAIN Rail Pwr (out1)" + label power3 "PMIC-2 ASIC 1.2V_MAIN Rail Pwr (out2)" + ignore power4 + label curr1 "PMIC-2 12V ASIC 1.8V_1.2V_MAIN Rail Curr (in)" + label curr2 "PMIC-2 ASIC 1.8V_MAIN Rail Curr (out1)" + label curr3 "PMIC-2 ASIC 1.2V_MAIN Rail Curr (out2)" + ignore curr4 + + chip "xdpe12284-i2c-*-66" + label in1 "PMIC-3 12V ASIC VDD_T0_T3 VDDI_T0_T3 (in1)" + label in2 "PMIC-3 12V ASIC VDD_T0_T3 VDDI_T0_T3 (in2)" + label in3 "PMIC-3 ASIC VCORE_T0_1 Rail (out1)" + label in4 "PMIC-3 ASIC 1.8V_T0_1 Rail (out2)" + label temp1 "PMIC-3 ASIC VCORE_T0_1 Temp 1" + label temp2 "PMIC-3 ASIC 1.8V_T0_1 Temp 2" + label power1 "PMIC-3 12V ASIC VCORE_1.8V_T0_1 Rail Pwr (in) " + ignore power2 + label power3 "PMIC-3 ASIC VCORE_T0_1 Rail Pwr (out1)" + label power4 "PMIC-3 ASIC 1.8V_T0_1 Rail Pwr (out2)" + label curr1 "PMIC-3 12V ASIC VCORE_T0_1 Rail Curr (in1)" + label curr2 "PMIC-3 12V ASIC 1.8V_T0_1 Rail Curr (in2)" + label curr3 "PMIC-3 ASIC VCORE_T0_1 Rail Curr (out1)" + label curr4 "PMIC-3 ASIC 1.8V_T0_1 Rail Curr (out2)" + chip "mp2975-i2c-*-66" + label in1 "PMIC-3 12V ASIC VDD_T0_T3 VDDI_T0_T3 (in)" + label in2 "PMIC-3 ASIC VCORE_T0_3 Rail (out1)" + label in3 "PMIC-3 ASIC 1.8V_T0_3 Rail (out2)" + ignore in4 + label temp1 "PMIC-3 ASIC VCORE_1.8V_T0_3 Temp 1" + ignore temp2 + label power1 "PMIC-3 12V ASIC VCORE_1.8V_T0_3 Rail Pwr (in) " + label power2 "PMIC-3 ASIC VCORE_T0_3 Rail Pwr (out1)" + label power3 "PMIC-3 ASIC 1.8V_T0_3 Rail Pwr (out2)" + ignore power4 + label curr1 "PMIC-3 12V ASIC VCORE_1.8V_T0_3 Rail Curr (in)" + label curr2 "PMIC-3 ASIC VCORE_T0_3 Rail Curr (out1)" + label curr3 "PMIC-3 ASIC 1.8V_T0_3 Rail Curr (out2)" + ignore curr4 + + chip "xdpe12284-i2c-*-6a" + label in1 "PMIC-4 12V ASIC VDD_T4_T7 VDDI_T4_T7 (in1)" + label in2 "PMIC-4 12V ASIC VDD_T4_T7 VDDI_T4_T7 (in2)" + label in3 "PMIC-4 ASIC VCORE_T2_3 Rail (out1)" + label in4 "PMIC-4 ASIC 1.8V_T2_3 Rail (out2)" + label temp1 "PMIC-4 ASIC VCORE_T2_3 Temp 1" + label temp2 "PMIC-4 ASIC 1.8V_T2_3 Temp 2" + label power1 "PMIC-4 12V ASIC VCORE_1.8V_T2_3 Rail Pwr (in) " + ignore power2 + label power3 "PMIC-4 ASIC VCORE_T2_3 Rail Pwr (out1)" + label power4 "PMIC-4 ASIC 1.8V_T2_3 Rail Pwr (out2)" + label curr1 "PMIC-4 12V ASIC VCORE_T2_3 Rail Curr (in1)" + label curr2 "PMIC-4 12V ASIC 1.8V_T2_3 Rail Curr (in2)" + label curr3 "PMIC-4 ASIC VCORE_T2_3 Rail Curr (out1)" + label curr4 "PMIC-4 ASIC 1.8V_T2_3 Rail Curr (out2)" + chip "mp2975-i2c-*-6a" + label in1 "PMIC-4 12V ASIC VDD_T4_T7 VDDI_T4_T7 (in1)" + label in2 "PMIC-4 12V ASIC VDD_T4_T7 VDDI_T4_T7 (in2)" + label in3 "PMIC-4 ASIC VCORE_T2_3 Rail (out1)" + label in4 "PMIC-4 ASIC 1.8V_T2_3 Rail (out2)" + label temp1 "PMIC-4 ASIC VCORE_T2_3 Temp 1" + label temp2 "PMIC-4 ASIC 1.8V_T2_3 Temp 2" + label power1 "PMIC-4 12V ASIC VCORE_1.8V_T2_3 Rail Pwr (in) " + ignore power2 + label power3 "PMIC-4 ASIC VCORE_T2_3 Rail Pwr (out1)" + label power4 "PMIC-4 ASIC 1.8V_T2_3 Rail Pwr (out2)" + label curr1 "PMIC-4 12V ASIC VCORE_T2_3 Rail Curr (in1)" + label curr2 "PMIC-4 12V ASIC 1.8V_T2_3 Rail Curr (in2)" + label curr3 "PMIC-4 ASIC VCORE_T2_3 Rail Curr (out1)" + label curr4 "PMIC-4 ASIC 1.8V_T2_3 Rail Curr (out2)" + + chip "xdpe12284-i2c-*-6e" + label in1 "PMIC-5 12V ASIC VDDHS_T0_T3 VDDHS_T4_T7 (in1)" + label in2 "PMIC-5 12V ASIC VDDHS_T0_T3 VDDHS_T4_T7 (in2)" + label in3 "PMIC-5 ASIC 1.2V_T0_3 Rail (out1)" + label in4 "PMIC-5 ASIC 1.2V_T4_7 Rail (out2)" + label temp1 "PMIC-5 ASIC 1.2V_T0_3 Temp 1" + label temp2 "PMIC-5 ASIC 1.2V_T4_7 Temp 2" + label power1 "PMIC-5 12V ASIC 1.2V_T0_3_T4_7 Rail Pwr (in) " + ignore power2 + label power3 "PMIC-5 ASIC 1.2V_T0_3 Rail Pwr (out1)" + label power4 "PMIC-5 ASIC 1.2V_T4_7 Rail Pwr (out2)" + label curr1 "PMIC-5 12V ASIC 1.2V_T0_3 Rail Curr (in1)" + label curr2 "PMIC-5 12V ASIC 1.2V_T4_7 Rail Curr (in2)" + label curr3 "PMIC-5 ASIC 1.2V_T0_3 Rail Curr (out1)" + label curr4 "PMIC-5 ASIC 1.2V_T4_7 Rail Curr (out2)" + chip "mp2975-i2c-*-6e" + label in1 "PMIC-5 12V ASIC VDDHS_T0_T3 VDDHS_T4_T7 (in)" + label in2 "PMIC-5 12V ASIC VDDHS_T0_T3 VDDHS_T4_T7 Rail (out1)" + label in3 "PMIC-5 ASIC 1.2V_T4_7 Rail (out2)" + ignore in4 + label temp1 "PMIC-5 ASIC 1.2V_T0_3_T4_7 Temp 1" + ignore temp2 + label power1 "PMIC-5 12V ASIC 1.2V_T0_3_T4_7 Rail Pwr (in)" + label power2 "PMIC-5 ASIC 1.2V_T0_3 Rail Pwr (out1)" + label power3 "PMIC-5 ASIC 1.2V_T4_7 Rail Pwr (out2)" + ignore power4 + label curr1 "PMIC-5 12V ASIC 1.2V_T0_3_T4_7 Rail Curr (in)" + label curr2 "PMIC-5 ASIC 1.2V_T0_3 Rail Curr (out1)" + label curr3 "PMIC-5 ASIC 1.2V_T4_7 Rail Curr (out2)" + ignore curr4 + +# DPU 1 +bus "i2c-18" "i2c-1-mux (chan_id 17)" + chip "xdpe12284-i2c-18-69" + label in1 "PMIC-6 12V DPU1 VDD VDDQ_DDR (in1)" + label in2 "PMIC-6 DPU1 VDD (out1)" + label in3 "PMIC-6 DPU1 VDD_DDR (out2)" + ignore in4 + label temp1 "PMIC-6 DPU1 VDD VDD_DDR Temp 1" + ignore temp2 + label power1 "PMIC-6 12V DPU1 VDD VDDQ_DDR (in)" + label power2 "PMIC-6 DPU1 VDD Rail Pwr (out1)" + label power3 "PMIC-6 DPU1 VDD_DDR Rail Pwr (out1)" + ignore power4 + label curr1 "PMIC-6 12V DPU1 VDD VDDQ_DDR Rail Curr (in1)" + label curr2 "PMIC-6 DPU1 VDD Rail Curr (in1)" + label curr3 "PMIC-6 DPU1 VDD_DDR Rail Curr (out1)" + ignore curr4 + chip "mp2975-i2c-18-69" + label in1 "PMIC-6 12V DPU1 VDD VDDQ_DDR (in1)" + label in2 "PMIC-6 DPU1 VDD (out1)" + label in3 "PMIC-6 DPU1 VDD_DDR (out2)" + ignore in4 + label temp1 "PMIC-6 DPU1 VDD VDD_DDR Temp 1" + ignore temp2 + label power1 "PMIC-6 12V DPU1 VDD VDDQ_DDR (in)" + label power2 "PMIC-6 DPU1 VDD Rail Pwr (out1)" + label power3 "PMIC-6 DPU1 VDD_DDR Rail Pwr (out1)" + ignore power4 + label curr1 "PMIC-6 12V DPU1 VDD VDDQ_DDR Rail Curr (in1)" + label curr2 "PMIC-6 DPU1 VDD Rail Curr (in1)" + label curr3 "PMIC-6 DPU1 VDD_DDR Rail Curr (out1)" + ignore curr4 + + chip "xdpe12284-i2c-18-6A" + label in1 "PMIC-7 12V DPU1 VDD_CPU (in1)" + label in2 "PMIC-7 DPU1 VDD_CPU (out)" + ignore in3 + ignore in4 + label temp1 "PMIC-7 DPU1 VDD_CPU Temp 1" + ignore temp2 + label power1 "PMIC-7 12V DPU1 VDD_CPU (in)" + label power2 "PMIC-7 DPU1 VDD_CPU Rail Pwr (out)" + ignore power3 + ignore power4 + label curr1 "PMIC-7 12V DPU1 VDD_CPU Rail Curr (in)" + label curr2 "PMIC-7 DPU1 VDD_CPU Rail Curr (out)" + ignore curr3 + ignore curr4 + chip "mp2975-i2c-18-6A" + label in1 "PMIC-7 12V DPU1 VDD_CPU (in1)" + label in2 "PMIC-7 DPU1 VDD_CPU (out)" + ignore in3 + ignore in4 + label temp1 "PMIC-7 DPU1 VDD_CPU Temp 1" + ignore temp2 + label power1 "PMIC-7 12V DPU1 VDD_CPU (in)" + label power2 "PMIC-7 DPU1 VDD_CPU Rail Pwr (out)" + ignore power3 + ignore power4 + label curr1 "PMIC-7 12V DPU1 VDD_CPU Rail Curr (in)" + label curr2 "PMIC-7 DPU1 VDD_CPU Rail Curr (out)" + ignore curr3 + ignore curr4 + + chip "tmp421-i2c-18-1F" + label temp1 "Ambient DPU1 Side (air exhaust)" + +# DPU 2 +bus "i2c-19" "i2c-1-mux (chan_id 18)" + chip "xdpe12284-i2c-19-69" + label in1 "PMIC-8 12V DPU2 VDD VDDQ_DDR (in1)" + label in2 "PMIC-8 DPU2 VDD (out1)" + label in3 "PMIC-8 DPU2 VDD_DDR (out2)" + ignore in4 + label temp1 "PMIC-8 DPU2 VDD VDD_DDR Temp 1" + ignore temp2 + label power1 "PMIC-8 12V DPU2 VDD VDDQ_DDR (in)" + label power2 "PMIC-8 DPU2 VDD Rail Pwr (out1)" + label power3 "PMIC-8 DPU2 VDD_DDR Rail Pwr (out1)" + ignore power4 + label curr1 "PMIC-8 12V DPU2 VDD VDDQ_DDR Rail Curr (in1)" + label curr2 "PMIC-8 DPU2 VDD Rail Curr (in1)" + label curr3 "PMIC-8 DPU2 VDD_DDR Rail Curr (out1)" + ignore curr4 + chip "mp2975-i2c-19-69" + label in1 "PMIC-8 12V DPU2 VDD VDDQ_DDR (in1)" + label in2 "PMIC-8 DPU2 VDD (out1)" + label in3 "PMIC-8 DPU2 VDD_DDR (out2)" + ignore in4 + label temp1 "PMIC-8 DPU2 VDD VDD_DDR Temp 1" + ignore temp2 + label power1 "PMIC-8 12V DPU2 VDD VDDQ_DDR (in)" + label power2 "PMIC-8 DPU2 VDD Rail Pwr (out1)" + label power3 "PMIC-8 DPU2 VDD_DDR Rail Pwr (out1)" + ignore power4 + label curr1 "PMIC-8 12V DPU2 VDD VDDQ_DDR Rail Curr (in1)" + label curr2 "PMIC-8 DPU2 VDD Rail Curr (in1)" + label curr3 "PMIC-8 DPU2 VDD_DDR Rail Curr (out1)" + ignore curr4 + chip "xdpe12284-i2c-19-6A" + label in1 "PMIC-9 12V DPU2 VDD_CPU (in1)" + label in2 "PMIC-9 DPU2 VDD_CPU (out)" + ignore in3 + ignore in4 + label temp1 "PMIC-9 DPU2 VDD_CPU Temp 1" + ignore temp2 + label power1 "PMIC-9 12V DPU2 VDD_CPU (in)" + label power2 "PMIC-9 DPU2 VDD_CPU Rail Pwr (out)" + ignore power3 + ignore power4 + label curr1 "PMIC-9 12V DPU2 VDD_CPU Rail Curr (in)" + label curr2 "PMIC-9 DPU2 VDD_CPU Rail Curr (out)" + ignore curr3 + ignore curr4 + chip "mp2975-i2c-19-6A" + label in1 "PMIC-9 12V DPU2 VDD_CPU (in1)" + label in2 "PMIC-9 DPU2 VDD_CPU (out)" + ignore in3 + ignore in4 + label temp1 "PMIC-9 DPU2 VDD_CPU Temp 1" + ignore temp2 + label power1 "PMIC-9 12V DPU2 VDD_CPU (in)" + label power2 "PMIC-9 DPU2 VDD_CPU Rail Pwr (out)" + ignore power3 + ignore power4 + label curr1 "PMIC-9 12V DPU2 VDD_CPU Rail Curr (in)" + label curr2 "PMIC-9 DPU2 VDD_CPU Rail Curr (out)" + ignore curr3 + ignore curr4 + + chip "tmp421-i2c-19-1F" + label temp1 "Ambient DPU2 Side (air exhaust)" + + +# DPU 3 +bus "i2c-20" "i2c-1-mux (chan_id 19)" + chip "xdpe12284-i2c-20-69" + label in1 "PMIC-10 12V DPU3 VDD VDDQ_DDR (in1)" + label in2 "PMIC-10 DPU3 VDD (out1)" + label in3 "PMIC-10 DPU3 VDD_DDR (out2)" + ignore in4 + label temp1 "PMIC-10 DPU3 VDD VDD_DDR Temp 1" + ignore temp2 + label power1 "PMIC-10 12V DPU3 VDD VDDQ_DDR (in)" + label power2 "PMIC-10 DPU3 VDD Rail Pwr (out1)" + label power3 "PMIC-10 DPU3 VDD_DDR Rail Pwr (out1)" + ignore power4 + label curr1 "PMIC-10 12V DPU3 VDD VDDQ_DDR Rail Curr (in1)" + label curr2 "PMIC-10 DPU3 VDD Rail Curr (in1)" + label curr3 "PMIC-10 DPU3 VDD_DDR Rail Curr (out1)" + ignore curr4 + chip "mp2975-i2c-20-69" + label in1 "PMIC-10 12V DPU3 VDD VDDQ_DDR (in1)" + label in2 "PMIC-10 DPU3 VDD (out1)" + label in3 "PMIC-10 DPU3 VDD_DDR (out2)" + ignore in4 + label temp1 "PMIC-10 DPU3 VDD VDD_DDR Temp 1" + ignore temp2 + label power1 "PMIC-10 12V DPU3 VDD VDDQ_DDR (in)" + label power2 "PMIC-10 DPU3 VDD Rail Pwr (out1)" + label power3 "PMIC-10 DPU3 VDD_DDR Rail Pwr (out1)" + ignore power4 + label curr1 "PMIC-10 12V DPU3 VDD VDDQ_DDR Rail Curr (in1)" + label curr2 "PMIC-10 DPU3 VDD Rail Curr (in1)" + label curr3 "PMIC-10 DPU3 VDD_DDR Rail Curr (out1)" + ignore curr4 + chip "xdpe12284-i2c-20-6A" + label in1 "PMIC-11 12V DPU3 VDD_CPU (in1)" + label in2 "PMIC-11 DPU3 VDD_CPU (out)" + ignore in3 + ignore in4 + label temp1 "PMIC-11 DPU3 VDD_CPU Temp 1" + ignore temp2 + label power1 "PMIC-11 12V DPU3 VDD_CPU (in)" + label power2 "PMIC-11 DPU3 VDD_CPU Rail Pwr (out)" + ignore power3 + ignore power4 + label curr1 "PMIC-11 12V DPU3 VDD_CPU Rail Curr (in)" + label curr2 "PMIC-11 DPU3 VDD_CPU Rail Curr (out)" + ignore curr3 + ignore curr4 + chip "mp2975-i2c-20-6A" + label in1 "PMIC-11 12V DPU3 VDD_CPU (in1)" + label in2 "PMIC-11 DPU3 VDD_CPU (out)" + ignore in3 + ignore in4 + label temp1 "PMIC-11 DPU3 VDD_CPU Temp 1" + ignore temp2 + label power1 "PMIC-11 12V DPU3 VDD_CPU (in)" + label power2 "PMIC-11 DPU3 VDD_CPU Rail Pwr (out)" + ignore power3 + ignore power4 + label curr1 "PMIC-11 12V DPU3 VDD_CPU Rail Curr (in)" + label curr2 "PMIC-11 DPU3 VDD_CPU Rail Curr (out)" + ignore curr3 + ignore curr4 + + chip "tmp421-i2c-20-1F" + label temp1 "Ambient DPU3 Side (air exhaust)" + + +# DPU 4 +bus "i2c-21" "i2c-1-mux (chan_id 20)" + chip "xdpe12284-i2c-21-69" + label in1 "PMIC-12 12V DPU4 VDD VDDQ_DDR (in1)" + label in2 "PMIC-12 DPU4 VDD (out1)" + label in3 "PMIC-12 DPU4 VDD_DDR (out2)" + ignore in4 + label temp1 "PMIC-12 DPU4 VDD VDD_DDR Temp 1" + ignore temp2 + label power1 "PMIC-12 12V DPU3 VDD VDDQ_DDR (in)" + label power2 "PMIC-12 DPU4 VDD Rail Pwr (out1)" + label power3 "PMIC-12 DPU4 VDD_DDR Rail Pwr (out1)" + ignore power4 + label curr1 "PMIC-12 12V DPU4 VDD VDDQ_DDR Rail Curr (in1)" + label curr2 "PMIC-12 DPU4 VDD Rail Curr (in1)" + label curr3 "PMIC-12 DPU4 VDD_DDR Rail Curr (out1)" + ignore curr4 + chip "mp2975-i2c-21-69" + label in1 "PMIC-12 12V DPU4 VDD VDDQ_DDR (in1)" + label in2 "PMIC-12 DPU4 VDD (out1)" + label in3 "PMIC-12 DPU4 VDD_DDR (out2)" + ignore in4 + label temp1 "PMIC-12 DPU4 VDD VDD_DDR Temp 1" + ignore temp2 + label power1 "PMIC-12 12V DPU3 VDD VDDQ_DDR (in)" + label power2 "PMIC-12 DPU4 VDD Rail Pwr (out1)" + label power3 "PMIC-12 DPU4 VDD_DDR Rail Pwr (out1)" + ignore power4 + label curr1 "PMIC-12 12V DPU4 VDD VDDQ_DDR Rail Curr (in1)" + label curr2 "PMIC-12 DPU4 VDD Rail Curr (in1)" + label curr3 "PMIC-12 DPU4 VDD_DDR Rail Curr (out1)" + ignore curr4 + chip "xdpe12284-i2c-21-6A" + label in1 "PMIC-13 12V DPU4 VDD_CPU (in1)" + label in2 "PMIC-13 DPU4 VDD_CPU (out)" + ignore in3 + ignore in4 + label temp1 "PMIC-13 DPU4 VDD_CPU Temp 1" + ignore temp2 + label power1 "PMIC-13 12V DPU4 VDD_CPU (in)" + label power2 "PMIC-13 DPU4 VDD_CPU Rail Pwr (out)" + ignore power3 + ignore power4 + label curr1 "PMIC-13 12V DPU4 VDD_CPU Rail Curr (in)" + label curr2 "PMIC-13 DPU4 VDD_CPU Rail Curr (out)" + ignore curr3 + ignore curr4 + chip "mp2975-i2c-21-6A" + label in1 "PMIC-13 12V DPU4 VDD_CPU (in1)" + label in2 "PMIC-13 DPU4 VDD_CPU (out)" + ignore in3 + ignore in4 + label temp1 "PMIC-13 DPU4 VDD_CPU Temp 1" + ignore temp2 + label power1 "PMIC-13 12V DPU4 VDD_CPU (in)" + label power2 "PMIC-13 DPU4 VDD_CPU Rail Pwr (out)" + ignore power3 + ignore power4 + label curr1 "PMIC-13 12V DPU4 VDD_CPU Rail Curr (in)" + label curr2 "PMIC-13 DPU4 VDD_CPU Rail Curr (out)" + ignore curr3 + ignore curr4 + + chip "tmp421-i2c-21-1F" + label temp1 "Ambient DPU4 Side (air exhaust)" + +# Power supplies +bus "i2c-4" "i2c-1-mux (chan_id 3)" + chip "dps460-i2c-*-58" + label in1 "PSU-2(R) 220V Rail (in)" + ignore in2 + label in3 "PSU-2(R) 12V Rail (out)" + label fan1 "PSU-2(R) Fan 1" + ignore fan2 + ignore fan3 + label temp1 "PSU-2(R) Temp 1" + label temp2 "PSU-2(R) Temp 2" + label temp3 "PSU-2(R) Temp 3" + label power1 "PSU-2(R) 220V Rail Pwr (in)" + label power2 "PSU-2(R) 12V Rail Pwr (out)" + label curr1 "PSU-2(R) 220V Rail Curr (in)" + label curr2 "PSU-2(R) 12V Rail Curr (out)" + chip "dps460-i2c-*-59" + label in1 "PSU-1(L) 220V Rail (in)" + ignore in2 + label in3 "PSU-1(L) 12V Rail (out)" + label fan1 "PSU-1(L) Fan 1" + ignore fan2 + ignore fan3 + label temp1 "PSU-1(L) Temp 1" + label temp2 "PSU-1(L) Temp 2" + label temp3 "PSU-1(L) Temp 3" + label power1 "PSU-1(L) 220V Rail Pwr (in)" + label power2 "PSU-1(L) 12V Rail Pwr (out)" + label curr1 "PSU-1(L) 220V Rail Curr (in)" + label curr2 "PSU-1(L) 12V Rail Curr (out)" + +# Chassis fans +chip "mlxreg_fan-isa-*" + label fan1 "Chassis Fan Drawer-1 Tach 1" + label fan2 "Chassis Fan Drawer-2 Tach 1" + label fan3 "Chassis Fan Drawer-3 Tach 1" + label fan4 "Chassis Fan Drawer-4 Tach 1" + + +# Miscellaneous +chip "*-virtual-*" + ignore temp1 + +# AMD Comex + +bus "i2c-39" "i2c-1-mux (chan_id 6)" +chip "mp2855-i2c-39-69" + label in1 "PMIC-14 COMEX VDDCR INPUT VOLT (in1)" + label in2 "PMIC-14 COMEX VDDCR_CPU VOLT (out1)" + label in3 "PMIC-14 COMEX VDDCR_SOC VOLT (out2)" + label temp1 "PMIC-14 COMEX VDDCR_CPU PHASE TEMP" + label temp2 "PMIC-14 COMEX VDDCR_SOC PHASE TEMP" + label curr1 "PMIC-14 COMEX VDDCR_CPU CURR" + label curr2 "PMIC-14 COMEX VDDCR_SOC CURR" + +chip "mp2975-i2c-39-6a" + label in1 "PMIC-15 COMEX VDD_MEM INPUT VOLT" + label in2 "PMIC-15 COMEX VDD_MEM OUTPUT VOLT" + label temp1 "PMIC-15 COMEX VDD_MEM PHASE TEMP" + label curr1 "PMIC-15 COMEX VDD_MEM INPUT CURR" + label curr2 "PMIC-15 COMEX VDD_MEM OUTPUT CURR" + ignore curr1 + ignore curr2 + label power1 "PMIC-15 COMEX VDD_MEM INPUT POWER" + label power2 "PMIC-15 COMEX VDD_MEM OUTPUT POWER" + +bus "i2c-43" "Synopsys DesignWare I2C adapter" +chip "jc42-i2c-43-1a" + label temp1 "SODIMM1 Temp" + +chip "jc42-i2c-43-1b" + label temp1 "SODIMM2 Temp" + +chip "jc42-i2c-43-1e" + label temp1 "SODIMM3 Temp" + +chip "jc42-i2c-43-1f" + label temp1 "SODIMM4 Temp" + +chip "k10temp-pci-*" + label temp1 "CPU PACKAGE TEMP" + label temp2 "CPU DIE0 TEMP" + +chip "nvme-pci-*" + label temp1 "SSD Temp" + ignore temp2 + ignore temp3 + +chip "00000400400-mdio-*" + label temp1 "PHY TEMP" \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/services.conf b/device/mellanox/x86_64-nvidia_sn4280-r0/services.conf new file mode 100644 index 000000000000..529f66cdfb47 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/services.conf @@ -0,0 +1 @@ +rshim.service diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/system_health_monitoring_config.json b/device/mellanox/x86_64-nvidia_sn4280-r0/system_health_monitoring_config.json new file mode 120000 index 000000000000..98df66c27ca5 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/system_health_monitoring_config.json @@ -0,0 +1 @@ +../x86_64-mlnx_msn2700-r0/system_health_monitoring_config.json \ No newline at end of file diff --git a/device/mellanox/x86_64-nvidia_sn4280-r0/thermal_policy.json b/device/mellanox/x86_64-nvidia_sn4280-r0/thermal_policy.json new file mode 120000 index 000000000000..5a25cd87f70c --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn4280-r0/thermal_policy.json @@ -0,0 +1 @@ +../x86_64-mlnx_msn2700-r0/thermal_policy.json \ No newline at end of file diff --git a/platform/mellanox/asic_table.j2 b/platform/mellanox/asic_table.j2 index 9fa36035a657..0069c6b77dfa 100644 --- a/platform/mellanox/asic_table.j2 +++ b/platform/mellanox/asic_table.j2 @@ -49,6 +49,7 @@ 'x86_64-nvidia_sn5600-r0':'MELLANOX-SPECTRUM-4', 'x86_64-nvidia_sn5400_simx-r0':'MELLANOX-SPECTRUM-4', 'x86_64-nvidia_sn5600_simx-r0':'MELLANOX-SPECTRUM-4', + 'x86_64-nvidia_sn4280-r0':'MELLANOX-SPECTRUM-3', 'vs-platform':'vs' } %} diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/component.py b/platform/mellanox/mlnx-platform-api/sonic_platform/component.py index ef1713f8f3be..f1ce4d8b1cc4 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/component.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/component.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2019-2023 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2019-2024 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -130,7 +130,7 @@ class ONIEUpdater(object): ONIE_FW_UPDATE_CMD_INSTALL = ['/usr/bin/mlnx-onie-fw-update.sh', 'update', '--no-reboot'] ONIE_FW_UPDATE_CMD_SHOW_PENDING = ['/usr/bin/mlnx-onie-fw-update.sh', 'show-pending'] - ONIE_VERSION_PARSE_PATTERN = '([0-9]{4})\.([0-9]{2})-([0-9]+)\.([0-9]+)\.([0-9]+)-?(dev)?-([0-9]+)' + ONIE_VERSION_PARSE_PATTERN = '([0-9]{4})\.([0-9]{2})-([0-9]+)\.([0-9]+)\.([0-9]+)-?(rc[0-9]+)?-?(dev)?-([0-9]+)' ONIE_VERSION_BASE_PARSE_PATTERN = '([0-9]+)\.([0-9]+)\.([0-9]+)' ONIE_VERSION_REQUIRED = '5.2.0016' @@ -153,7 +153,7 @@ def __init__(self): def __add_prefix(self, image_path): if image_path.endswith(self.BIOS_UPDATE_FILE_EXT_CAB): - return image_path; + return image_path elif self.BIOS_UPDATE_FILE_EXT_ROM not in image_path: rename_path = "/tmp/00-{}".format(os.path.basename(image_path)) else: @@ -281,8 +281,9 @@ def parse_onie_version(self, version, is_base=False): onie_major = m.group(3) onie_minor = m.group(4) onie_release = m.group(5) - onie_signtype = m.group(6) - onie_baudrate = m.group(7) + onie_rc = m.group(6) + onie_signtype = m.group(7) + onie_baudrate = m.group(8) return onie_year, onie_month, onie_major, onie_minor, onie_release, onie_baudrate @@ -732,6 +733,7 @@ class ComponentCPLD(Component): MST_DEVICE_PATH = '/dev/mst' MST_DEVICE_PATTERN = 'mt[0-9]*_pci_cr0' + FW_VERSION_FORMAT = 'CPLD{}_REV{}{}' CPLD_NUMBER_FILE = '/var/run/hw-management/config/cpld_num' CPLD_PART_NUMBER_FILE = '/var/run/hw-management/system/cpld{}_pn' @@ -833,7 +835,7 @@ def get_firmware_version(self): version = version.rstrip('\n').zfill(self.CPLD_VERSION_MAX_LENGTH) version_minor = version_minor.rstrip('\n').zfill(self.CPLD_VERSION_MINOR_MAX_LENGTH) - return "CPLD{}_REV{}{}".format(part_number, version, version_minor) + return self.FW_VERSION_FORMAT.format(part_number, version, version_minor) def get_available_firmware_version(self, image_path): with MPFAManager(image_path) as mpfa: @@ -906,3 +908,43 @@ def _install_firmware(self, image_path): return False return True + +class ComponentCPLDSN4280(ComponentCPLD): + CPLD_FIRMWARE_UPDATE_COMMAND = ['cpldupdate', '--gpio', '--print-progress', ''] + + def _install_firmware(self, image_path): + self.CPLD_FIRMWARE_UPDATE_COMMAND[3] = image_path + + try: + print("INFO: Installing {} firmware update: path={}".format(self.name, image_path)) + subprocess.check_call(self.CPLD_FIRMWARE_UPDATE_COMMAND, universal_newlines=True) + except subprocess.CalledProcessError as e: + print("ERROR: Failed to update {} firmware: {}".format(self.name, str(e))) + return False + + return True + +class ComponenetFPGADPU(ComponentCPLD): + CPLD_NUMBER_FILE = '/var/run/hw-management/config/dpu_num' + + COMPONENT_NAME = 'DPU{}_FPGA' + COMPONENT_DESCRIPTION = 'FPGA - Field-Programmable Gate Array' + FW_VERSION_FORMAT = 'FPGA{}_REV{}{}' + + CPLD_PART_NUMBER_FILE = '/var/run/hw-management/dpu{}/system/fpga1_pn' + CPLD_VERSION_FILE = '/var/run/hw-management/dpu{}/system/fpga1_version' + CPLD_VERSION_MINOR_FILE = '/var/run/hw-management/dpu{}/system/fpga1_version_min' + + CPLD_FIRMWARE_UPDATE_COMMAND = ['cpldupdate', '--cpld_chain', '2', '--gpio', '--print-progress', ''] + + def _install_firmware(self, image_path): + self.CPLD_FIRMWARE_UPDATE_COMMAND[5] = image_path + + try: + print("INFO: Installing {} firmware update: path={}".format(self.name, image_path)) + subprocess.check_call(self.CPLD_FIRMWARE_UPDATE_COMMAND, universal_newlines=True) + except subprocess.CalledProcessError as e: + print("ERROR: Failed to update {} firmware: {}".format(self.name, str(e))) + return False + + return True diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py b/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py index 1f2b3164a64d..676e2b498989 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py @@ -102,6 +102,13 @@ }, 'x86_64-mlnx_msn4600-r0': { }, + 'x86_64-nvidia_sn4280-r0': { + 'thermal': { + "capability": { + "comex_amb": False + } + } + }, 'x86_64-nvidia_sn4800-r0': { 'thermal': { "capability": { @@ -263,11 +270,13 @@ def get_bios_component(cls): @classmethod def get_cpld_component_list(cls): - from .component import ComponentCPLD, ComponentCPLDSN2201 + from .component import ComponentCPLD, ComponentCPLDSN2201, ComponentCPLDSN4280, ComponenetFPGADPU if cls.get_platform_name() in ['x86_64-nvidia_sn2201-r0']: # For SN2201, special chass is required for handle BIOS # Currently, only fetching BIOS version is supported return ComponentCPLDSN2201.get_component_list() + if cls.get_platform_name() in ['x86_64-nvidia_sn4280-r0']: + return ComponentCPLDSN4280.get_component_list() + ComponenetFPGADPU.get_component_list() return ComponentCPLD.get_component_list() @classmethod diff --git a/platform/mellanox/mlnx-platform-api/tests/test_component.py b/platform/mellanox/mlnx-platform-api/tests/test_component.py index 131220c27f90..d3f4543fd817 100644 --- a/platform/mellanox/mlnx-platform-api/tests/test_component.py +++ b/platform/mellanox/mlnx-platform-api/tests/test_component.py @@ -1,5 +1,5 @@ # -# Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. +# Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. # Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -35,6 +35,8 @@ ComponentBIOSSN2201, \ ComponentCPLD, \ ComponentCPLDSN2201, \ + ComponentCPLDSN4280, \ + ComponenetFPGADPU, \ MPFAManager, \ ONIEUpdater, \ Component @@ -284,6 +286,13 @@ def test_cpld_get_component_list(self): for index, item in enumerate(component_list): assert item.name == 'CPLD{}'.format(index + 1) + @mock.patch('sonic_platform.component.ComponenetFPGADPU._read_generic_file', mock.MagicMock(return_value='4')) + def test_cpld_get_component_list_dpu(self): + component_list = ComponenetFPGADPU.get_component_list() + assert len(component_list) == 4 + for index, item in enumerate(component_list): + assert item.name == 'DPU{}_FPGA'.format(index + 1) + def test_cpld_get_mst_device(self): ComponentCPLD.MST_DEVICE_PATH = '/tmp/mst' os.system('rm -rf /tmp/mst') @@ -302,6 +311,20 @@ def test_cpld_2201_component(self, mock_check_call): mock_check_call.side_effect = subprocess.CalledProcessError(1, None) assert not c._install_firmware('') + @mock.patch('sonic_platform.component.subprocess.check_call') + def test_cpld_4280_component(self, mock_check_call): + c = ComponentCPLDSN4280(1) + assert c._install_firmware('') + mock_check_call.side_effect = subprocess.CalledProcessError(1, None) + assert not c._install_firmware('') + + @mock.patch('sonic_platform.component.subprocess.check_call') + def test_cpld_dpu_component(self, mock_check_call): + c = ComponenetFPGADPU(1) + assert c._install_firmware('') + mock_check_call.side_effect = subprocess.CalledProcessError(1, None) + assert not c._install_firmware('') + @mock.patch('sonic_platform.component.MPFAManager.cleanup') @mock.patch('sonic_platform.component.MPFAManager.extract') def test_mpfa_manager_context(self, mock_extract, mock_cleanup): @@ -353,6 +376,26 @@ def test_onie_updater_parse_onie_version(self): assert onie_minor == '3' assert onie_release == '0010' assert onie_baudrate == '9600' + + # Verify presence of release candidate (rc) string doesn't throw an exception + onie_year, onie_month, onie_major, onie_minor, onie_release, onie_baudrate = \ + o.parse_onie_version('2023.11-5.3.0012-rc2-9600') + assert onie_year == '2023' + assert onie_month == '11' + assert onie_major == '5' + assert onie_minor == '3' + assert onie_release == '0012' + assert onie_baudrate == '9600' + + onie_year, onie_month, onie_major, onie_minor, onie_release, onie_baudrate = \ + o.parse_onie_version('2023.11-5.3.0012-rc24-dev-115200') + assert onie_year == '2023' + assert onie_month == '11' + assert onie_major == '5' + assert onie_minor == '3' + assert onie_release == '0012' + assert onie_baudrate == '115200' + with pytest.raises(RuntimeError): o.parse_onie_version('invalid', is_base=True) with pytest.raises(RuntimeError): @@ -368,6 +411,10 @@ def test_onie_updater_parse_onie_version(self): assert o.get_onie_required_version() == o.ONIE_VERSION_REQUIRED + def test_parse_onie_version_extra_prefix(self): + o = ONIEUpdater() + + @mock.patch('sonic_platform.component.ONIEUpdater.get_onie_version') @mock.patch('sonic_platform.component.device_info.get_platform') def test_onie_updater_is_non_onie_firmware_update_supported(self, mock_platform, mock_version): From 52c00e11e3185354425881ac41a5bb39eca9ad1c Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sat, 20 Jul 2024 19:04:15 +0800 Subject: [PATCH 031/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19639) #### Why I did it src/sonic-utilities ``` * d1ca905e - (HEAD -> master, origin/master, origin/HEAD) Update DB version to 202411 on master branch. (#3414) (6 hours ago) [ryanzhu706] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index f2b762138c32..d1ca905e3b07 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit f2b762138c3236807bf1995e2e2130f7b8e5f386 +Subproject commit d1ca905e3b0733170d19abeecad1cfbfd0180698 From 1db8d6d9375c58d14f695ff9dd522a25f8dc64fd Mon Sep 17 00:00:00 2001 From: noaOrMlnx <58519608+noaOrMlnx@users.noreply.github.com> Date: Sun, 21 Jul 2024 17:32:53 +0300 Subject: [PATCH 032/117] [Mellanox] Disable Auto Negotiation by default for SN4700 (#19607) - Why I did it When CMIS host mgmt is enabled, CMIS active cables' autoneg must be disabled. Here, it will generate config_db with autoneg:off by default for all ports. - How I did it - How to verify it deploy/sonic-cfggem --- .../Mellanox-SN4700-O8C48/hwsku.json | 168 ++++++++++++------ .../Mellanox-SN4700-O8V48/hwsku.json | 168 ++++++++++++------ 2 files changed, 224 insertions(+), 112 deletions(-) diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O8C48/hwsku.json b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O8C48/hwsku.json index d50fae23ec92..d317f873764a 100644 --- a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O8C48/hwsku.json +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O8C48/hwsku.json @@ -2,227 +2,283 @@ "interfaces": { "Ethernet0": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet4": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet8": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet12": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet16": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet20": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet24": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet28": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet32": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet36": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet40": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet44": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet48": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet52": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet56": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet60": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet64": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet68": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet72": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet76": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet80": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet84": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet88": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet92": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet96": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet104": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet112": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet120": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet128": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet136": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet144": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet152": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet160": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet164": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet168": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet172": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet176": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet180": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet184": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet188": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet192": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet196": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet200": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet204": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet208": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet212": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet216": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet220": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet224": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet228": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet232": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet236": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet240": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet244": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet248": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet252": { "default_brkout_mode": "2x100G[200G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" } } } diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O8V48/hwsku.json b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O8V48/hwsku.json index 3d51a36be689..e3aa3f8d77d6 100644 --- a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O8V48/hwsku.json +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O8V48/hwsku.json @@ -2,227 +2,283 @@ "interfaces": { "Ethernet0": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet4": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet8": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet12": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet16": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet20": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet24": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet28": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet32": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet36": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet40": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet44": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet48": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet52": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet56": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet60": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet64": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet68": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet72": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet76": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet80": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet84": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet88": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet92": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet96": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet104": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet112": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet120": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet128": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet136": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet144": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet152": { "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet160": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet164": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet168": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet172": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet176": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet180": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet184": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet188": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet192": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet196": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet200": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet204": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet208": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet212": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet216": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet220": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet224": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet228": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet232": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet236": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet240": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet244": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" }, "Ethernet248": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "1" + "subport": "1", + "autoneg": "off" }, "Ethernet252": { "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", - "subport": "2" + "subport": "2", + "autoneg": "off" } } } From 0344d4a8ba674d224ade7fc61d30997974697f51 Mon Sep 17 00:00:00 2001 From: Riff Date: Sun, 21 Jul 2024 23:23:03 -0700 Subject: [PATCH 033/117] [Arista]: Fix TH5 egress pool creation failure with BCM YAML file and SAI update on 07/16 (#19640) Why I did it The latest TH5 mmu configuration has some issues where egress pool creation fails with the latest BCM SAI updates. Jul 20 12:04:58.163923 str3-7060x6-64pe-2 ERR syncd#syncd: [none] SAI_API_BUFFER:driverEgressPoolSharedLimitSet:3476 configure egress itm 0 buffer pool 0 with size 82830162, gport 0x 800000b COS 0 current reserved size 21805392 shared size 60996322, requested shared size 61024770 failed with error -1 Jul 20 12:04:58.163923 str3-7060x6-64pe-2 ERR syncd#syncd: [none] SAI_API_BUFFER:ltsw_driverDBLimitSet:3197 set egress buffer pool 0 limit to 82830162 using port 11 queue 0 failed with error -1 Work item tracking Microsoft ADO (number only): 28775282 How I did it This PR fixes the issue by updating the egress pool size to match with the one in the ASIC. How to verify it Tested on local testbed Jul 20 19:45:35.767569 str3-7060x6-64pe-2 NOTICE swss#orchagent: :- processQueue: Set buffer queue Ethernet0:0-2 to BUFFER_PROFILE_TABLE:egress_lossy_profile Jul 20 19:45:35.823139 str3-7060x6-64pe-2 INFO syncd#syncd: [none] SAI_API_BUFFER:ltsw_driverDBLimitSet:3204 Created egress buffer pool 0 with size 82801714 bytes Jul 20 19:45:35.823139 str3-7060x6-64pe-2 INFO syncd#syncd: [none] SAI_API_BUFFER:ltsw_driverEgressQueueFieldSet:4099 Programming cosq 0 for port 11 control 81 with value 1 Jul 20 19:45:35.823166 str3-7060x6-64pe-2 INFO syncd#syncd: [none] ... Jul 20 19:45:38.214661 str3-7060x6-64pe-2 INFO syncd#syncd: [none] SAI_API_BUFFER:driverPGAttributeSet:1158 Programming ing cosq 3 for port 70 control 128 with value 3556 Jul 20 19:45:38.216275 str3-7060x6-64pe-2 INFO syncd#rsyslogd: imuxsock[pid: 33, name: /usr/bin/syncd] from str3-7060x6-64pe-2:syncd: begin to drop messages due to rate-limiting Jul 20 19:45:38.279834 str3-7060x6-64pe-2 NOTICE swss#orchagent: :- processPriorityGroup: Set buffer PG Ethernet106:0 to BUFFER_PROFILE_TABLE:ingress_lossy_profile --- .../BALANCED/buffers_defaults_t0.j2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t0.j2 b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t0.j2 index f4b26e0f3497..b1418a68eb31 100644 --- a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t0.j2 +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/buffers_defaults_t0.j2 @@ -5,13 +5,13 @@ {%- macro generate_buffer_pool_and_profiles() %} "BUFFER_POOL": { "ingress_lossless_pool": { - "size": "165660324", + "size": "165603428", "type": "ingress", "mode": "dynamic", "xoff": "29520896" }, "egress_lossless_pool": { - "size": "165660324", + "size": "165603428", "type": "egress", "mode": "dynamic" } From 64235b54d41b8b926ee5c5775b505dcc192ea733 Mon Sep 17 00:00:00 2001 From: sophiek Date: Mon, 22 Jul 2024 15:21:34 +0300 Subject: [PATCH 034/117] [Mellanox] Added simx version to Nvidia component version listing (#19523) - Why I did it Needed to add the SIMX version to the Nvidia component version listing. Also changed HW-MGMT to be HW_MANAGEMENT - How I did it Added simx version to 'component_versions' file that is created during compilation. --- platform/mellanox/component-versions/Makefile | 2 +- .../create_component_versions.sh | 5 +- platform/mellanox/fw.mk | 1 + .../get_component_versions.py | 63 +++++++++++++------ .../sonic_platform/device_data.py | 9 +++ 5 files changed, 58 insertions(+), 22 deletions(-) diff --git a/platform/mellanox/component-versions/Makefile b/platform/mellanox/component-versions/Makefile index 6a240bd02e53..095aad7902a7 100644 --- a/platform/mellanox/component-versions/Makefile +++ b/platform/mellanox/component-versions/Makefile @@ -22,5 +22,5 @@ SHELL = /bin/bash MAIN_TARGET = component-versions $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - ./create_component_versions.sh $(MLNX_SDK_VERSION) $(MLNX_SPC_FW_VERSION) $(MLNX_SAI_VERSION) $(MLNX_HW_MANAGEMENT_VERSION) $(MFT_VERSION) $(MFT_REVISION) $(KVERSION_SHORT) + ./create_component_versions.sh $(MLNX_SDK_VERSION) $(MLNX_SPC_FW_VERSION) $(MLNX_SAI_VERSION) $(MLNX_HW_MANAGEMENT_VERSION) $(MFT_VERSION) $(MFT_REVISION) $(KVERSION_SHORT) $(SIMX_VERSION) mv temp_versions_file $(DEST)/$(MAIN_TARGET) diff --git a/platform/mellanox/component-versions/create_component_versions.sh b/platform/mellanox/component-versions/create_component_versions.sh index 109242de9a0e..b523c0308d85 100755 --- a/platform/mellanox/component-versions/create_component_versions.sh +++ b/platform/mellanox/component-versions/create_component_versions.sh @@ -18,6 +18,7 @@ echo "SDK $1" > temp_versions_file echo $2 | sed -r 's/([0-9]*)\.([0-9]*)\.([0-9]*)/FW \2\.\3/g' >> temp_versions_file echo "SAI $3" >> temp_versions_file -echo "HW-MGMT $4" >> temp_versions_file +echo "HW_MANAGEMENT $4" >> temp_versions_file echo "MFT $5-$6" >> temp_versions_file -echo "Kernel $7" >> temp_versions_file +echo "KERNEL $7" >> temp_versions_file +echo "SIMX $8" >> temp_versions_file diff --git a/platform/mellanox/fw.mk b/platform/mellanox/fw.mk index 2b6931d5e440..c1f1311d84f7 100644 --- a/platform/mellanox/fw.mk +++ b/platform/mellanox/fw.mk @@ -63,6 +63,7 @@ endif MLNX_FILES += $(MLNX_FW_FILES) export MLNX_SPC_FW_VERSION MLNX_SPC2_FW_VERSION MLNX_SPC3_FW_VERSION MLNX_SPC4_FW_VERSION +export SIMX_VERSION export MLNX_SPC_FW_FILE export MLNX_SPC2_FW_FILE export MLNX_SPC3_FW_FILE diff --git a/platform/mellanox/get_component_versions/get_component_versions.py b/platform/mellanox/get_component_versions/get_component_versions.py index 8e900eb0ca08..ba75bd8a215b 100644 --- a/platform/mellanox/get_component_versions/get_component_versions.py +++ b/platform/mellanox/get_component_versions/get_component_versions.py @@ -20,22 +20,28 @@ import subprocess import re -from fwutil.lib import PlatformDataProvider +try: + from fwutil.lib import PlatformDataProvider +except Exception: + PlatformDataProvider = None + from sonic_py_common.general import check_output_pipe +from sonic_platform.device_data import DeviceDataManager from tabulate import tabulate COMPONENT_VERSIONS_FILE = "/etc/mlnx/component-versions" HEADERS = ["COMPONENT", "COMPILATION", "ACTUAL"] COMMANDS_FOR_ACTUAL = { "MFT": [["dpkg", "-l"], ["grep", "mft "], "mft *([0-9.-]*)"], - "HW-MGMT": [["dpkg", "-l"], ["grep", "hw"], ".*1\\.mlnx\\.([0-9.]*)"], + "HW_MANAGEMENT": [["dpkg", "-l"], ["grep", "hw"], ".*1\\.mlnx\\.([0-9.]*)"], "SDK": [["docker", "exec", "-it", "syncd", "bash", "-c", 'dpkg -l | grep sdk'], ".*1\\.mlnx\\.([0-9.]*)"], "SAI": [["docker", "exec", "-it", "syncd", "bash", "-c", 'dpkg -l | grep mlnx-sai'], ".*1\\.mlnx\\.([A-Za-z0-9.]*)"], "FW": [["mlxfwmanager", "--query"], "FW * [0-9]{2}\\.([0-9.]*)"], - "Kernel": [["uname", "-r"], "([0-9][0-9.-]*)-.*"] + "KERNEL": [["uname", "-r"], "([0-9][0-9.-]*)-.*"] } UNAVAILABLE_PLATFORM_VERSIONS = { + "ONIE": "N/A", "SSD": "N/A", "BIOS": "N/A", "CPLD": "N/A" @@ -45,9 +51,9 @@ "SDK": "N/A", "FW": "N/A", "SAI": "N/A", - "HW-MGMT": "N/A", + "HW_MANAGEMENT": "N/A", "MFT": "N/A", - "Kernel": "N/A" + "KERNEL": "N/A" } @@ -59,15 +65,21 @@ def parse_compiled_components_file(): with open(COMPONENT_VERSIONS_FILE, 'r') as component_versions: for line in component_versions.readlines(): - comp, version = line.split() - compiled_versions[comp] = version + try: + comp, version = line.split() + compiled_versions[comp] = version + except ValueError: + continue return compiled_versions def get_platform_component_versions(): - pdp = PlatformDataProvider() - ccm = pdp.chassis_component_map + ccm = None + + if PlatformDataProvider: + pdp = PlatformDataProvider() + ccm = pdp.chassis_component_map if not ccm: return UNAVAILABLE_PLATFORM_VERSIONS @@ -91,15 +103,18 @@ def get_platform_component_versions(): def get_current_version(comp): version = "" - # If there's only one command - if len(COMMANDS_FOR_ACTUAL[comp]) == 2: - version = subprocess.run(COMMANDS_FOR_ACTUAL[comp][0], shell=False, stdout=subprocess.PIPE, text=True) - version = str(version.stdout) - #If there are two commands and we need a pipe - elif len(COMMANDS_FOR_ACTUAL[comp]) == 3: - version = check_output_pipe(COMMANDS_FOR_ACTUAL[comp][0], COMMANDS_FOR_ACTUAL[comp][1]) - parsed_version = re.search(COMMANDS_FOR_ACTUAL[comp][-1], version) - return parsed_version.group(1) if parsed_version else "N/A" + try: + # If there's only one command + if len(COMMANDS_FOR_ACTUAL[comp]) == 2: + version = subprocess.run(COMMANDS_FOR_ACTUAL[comp][0], shell=False, stdout=subprocess.PIPE, text=True) + version = str(version.stdout) + #If there are two commands and we need a pipe + elif len(COMMANDS_FOR_ACTUAL[comp]) == 3: + version = check_output_pipe(COMMANDS_FOR_ACTUAL[comp][0], COMMANDS_FOR_ACTUAL[comp][1]) + parsed_version = re.search(COMMANDS_FOR_ACTUAL[comp][-1], version) + return parsed_version.group(1) if parsed_version else "N/A" + except Exception: + return "N/A" def format_output_table(table): @@ -113,13 +128,23 @@ def main(): return compiled_versions = parse_compiled_components_file() - platform_versions = get_platform_component_versions() + simx_compiled_ver = compiled_versions.pop("SIMX") + # Add compiled versions to table output_table = [] for comp in compiled_versions.keys(): actual = get_current_version(comp) output_table.append([comp, compiled_versions[comp], actual]) + # Handle if SIMX + if DeviceDataManager.is_simx_platform(): + simx_actual_ver = DeviceDataManager.get_simx_version() + output_table.append(["SIMX", simx_compiled_ver, simx_actual_ver]) + platform_versions = UNAVAILABLE_PLATFORM_VERSIONS + else: + platform_versions = get_platform_component_versions() + + # Add actual versions to table for comp in platform_versions.keys(): output_table.append([comp, "-", platform_versions[comp]]) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py b/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py index 676e2b498989..673e6258a09a 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/device_data.py @@ -18,8 +18,10 @@ import glob import os import time +import re from . import utils +from sonic_py_common.general import check_output_pipe DEFAULT_WD_PERIOD = 65535 @@ -173,6 +175,13 @@ def is_simx_platform(cls): platform_name = cls.get_platform_name() return platform_name and 'simx' in platform_name + @classmethod + @utils.read_only_cache() + def get_simx_version(cls): + version = check_output_pipe(["lspci", "-vv"], ["grep", "SimX"]) + parsed_version = re.search("([0-9]+\\.[0-9]+-[0-9]+)", version) + return parsed_version.group(1) if parsed_version else "N/A" + @classmethod @utils.read_only_cache() def get_fan_drawer_count(cls): From 36f95b796b9d22bf51cda4847b3683913c91fafd Mon Sep 17 00:00:00 2001 From: Mai Bui Date: Mon, 22 Jul 2024 12:28:40 -0400 Subject: [PATCH 035/117] [docker-database] limit privileged flag for database container (#19248) #### Why I did it HLD implementation: Container Hardening (https://github.com/sonic-net/SONiC/pull/1364) ##### Work item tracking - Microsoft ADO **(number only)**: 14807420 #### How I did it Reduce linux capabilities in privileged flag #### How to verify it Check container's settings: Privileged is false and container only has default Linux caps, does not have extended caps. ``` admin@vlab-08:~$ docker inspect database0 | jq '.[0] | {CapAdd: .HostConfig.CapAdd, Privileged: .HostConfig.Privileged, AppArmor: .AppArmorProfile, Security Opt: .HostConfig.SecurityOpt, Devices: .HostConfig.Devices, MaskedPath: .HostConfig.MaskedPaths, ReadonlyPaths: .HostConfig.ReadonlyPaths}' { "CapAdd": null, "Privileged": false, "AppArmor": "unconfined", "SecurityOpt": [ "apparmor=unconfined" ], "Devices": [], "MaskedPath": [], "ReadonlyPaths": [] } ``` --- rules/docker-database.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/docker-database.mk b/rules/docker-database.mk index c38f574afbfb..3b16960f632a 100644 --- a/rules/docker-database.mk +++ b/rules/docker-database.mk @@ -28,7 +28,7 @@ SONIC_BOOKWORM_DBG_DOCKERS += $(DOCKER_DATABASE_DBG) SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_DATABASE_DBG) $(DOCKER_DATABASE)_CONTAINER_NAME = database -$(DOCKER_DATABASE)_RUN_OPT += --privileged -t +$(DOCKER_DATABASE)_RUN_OPT += -t --security-opt apparmor=unconfined --security-opt="systempaths=unconfined" $(DOCKER_DATABASE)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro $(DOCKER_DATABASE)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro From 1efb520f9f34b573dd7ac99aeacf762c485258b9 Mon Sep 17 00:00:00 2001 From: Longxiang Lyu <35479537+lolyu@users.noreply.github.com> Date: Tue, 23 Jul 2024 11:33:24 +0800 Subject: [PATCH 036/117] [ctrmgrd] Fix the container restart during config reload (#19528) Signed-off-by: Longxiang Lyu --- src/sonic-ctrmgrd/ctrmgr/ctrmgrd.py | 4 +++- src/sonic-ctrmgrd/tests/ctrmgrd_test.py | 32 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/sonic-ctrmgrd/ctrmgr/ctrmgrd.py b/src/sonic-ctrmgrd/ctrmgr/ctrmgrd.py index 7e85c22f60c8..645724214bfd 100755 --- a/src/sonic-ctrmgrd/ctrmgr/ctrmgrd.py +++ b/src/sonic-ctrmgrd/ctrmgr/ctrmgrd.py @@ -489,7 +489,9 @@ def handle_update(self, feat, set_owner, ct_owner, remote_state): service_restart = False if set_owner == "local": - if ct_owner != "local": + # NOTE: no need to restart if the current owner is none, + # as none implies the container is not running. + if ct_owner != "local" and ct_owner != "none": service_restart = True else: if (ct_owner != "none") and (remote_state == "pending"): diff --git a/src/sonic-ctrmgrd/tests/ctrmgrd_test.py b/src/sonic-ctrmgrd/tests/ctrmgrd_test.py index 76651309ce6a..df7e2729d566 100755 --- a/src/sonic-ctrmgrd/tests/ctrmgrd_test.py +++ b/src/sonic-ctrmgrd/tests/ctrmgrd_test.py @@ -355,6 +355,38 @@ } } } + }, + 5: { + common_test.DESCR: "No restart for current_owner == none in config reload", + common_test.ARGS: "ctrmgrd", + common_test.PRE: { + common_test.CONFIG_DB_NO: { + common_test.FEATURE_TABLE: { + "swss": { + "set_owner": "local", + "state": "enabled", + "auto_restart": "enabled" + } + } + } + }, + common_test.UPD: { + common_test.STATE_DB_NO: { + common_test.FEATURE_TABLE: { + "swss": { + "system_state": "down", + "remote_state": "none", + "current_owner": "none", + "container_id": "", + "state": "enabled" + } + } + } + }, + common_test.POST: { + common_test.STATE_DB_NO: { + } + } } } From 6c453322d89ba4a7e68abf9b19b27d34b3bd78f5 Mon Sep 17 00:00:00 2001 From: noaOrMlnx <58519608+noaOrMlnx@users.noreply.github.com> Date: Tue, 23 Jul 2024 09:29:24 +0300 Subject: [PATCH 037/117] [Mellanox] Enable CMIS host mgmt for SN5600 Mellanox-SN5600-V256 SKU (#19641) - Why I did it To enable CMIS host mgmt feature by default on Mellanox-SN5600-V256 SKU - How I did it Added needed configuration --- .../Mellanox-SN5600-V256/hwsku.json | 1024 ++++++++++++----- .../Mellanox-SN5600-V256/media_settings.json | 234 ++++ .../optics_si_settings.json | 142 +++ .../pmon_daemon_control.json | 6 + .../Mellanox-SN5600-V256/sai.profile | 1 + 5 files changed, 1151 insertions(+), 256 deletions(-) create mode 100644 device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/media_settings.json create mode 100644 device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/optics_si_settings.json create mode 100644 device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/pmon_daemon_control.json diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/hwsku.json b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/hwsku.json index 04211490cdf6..be1f3c62d1f4 100644 --- a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/hwsku.json +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/hwsku.json @@ -1,772 +1,1284 @@ { "interfaces": { "Ethernet0": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet2": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet4": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet6": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet8": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet10": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet12": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet14": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet16": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet18": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet20": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet22": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet24": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet26": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet28": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet30": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet32": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet34": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet36": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet38": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet40": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet42": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet44": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet46": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet48": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet50": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet52": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet54": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet56": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet58": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet60": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet62": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet64": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet66": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet68": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet70": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet72": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet74": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet76": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet78": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet80": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet82": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet84": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet86": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet88": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet90": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet92": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet94": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet96": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet98": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet100": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet102": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet104": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet106": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet108": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet110": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet112": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet114": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet116": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet118": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet120": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet122": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet124": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet126": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet128": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet130": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet132": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet134": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet136": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet138": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet140": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet142": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet144": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet146": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet148": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet150": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet152": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet154": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet156": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet158": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet160": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet162": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet164": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet166": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet168": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet170": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet172": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet174": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet176": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet178": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet180": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet182": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet184": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet186": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet188": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet190": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet192": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet194": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet196": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet198": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet200": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet202": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet204": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet206": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet208": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet210": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet212": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet214": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet216": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet218": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet220": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet222": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet224": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet226": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet228": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet230": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet232": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet234": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet236": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet238": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet240": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet242": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet244": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet246": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet248": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet250": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet252": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet254": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet256": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet258": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet260": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet262": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet264": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet266": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet268": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet270": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet272": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet274": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet276": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet278": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet280": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet282": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet284": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet286": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet288": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet290": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet292": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet294": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet296": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet298": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet300": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet302": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet304": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet306": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet308": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet310": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet312": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet314": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet316": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet318": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet320": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet322": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet324": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet326": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet328": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet330": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet332": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet334": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet336": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet338": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet340": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet342": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet344": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet346": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet348": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet350": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet352": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet354": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet356": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet358": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet360": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet362": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet364": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet366": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet368": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet370": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet372": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet374": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet376": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet378": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet380": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet382": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet384": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet386": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet388": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet390": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet392": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet394": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet396": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet398": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet400": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet402": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet404": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet406": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet408": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet410": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet412": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet414": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet416": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet418": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet420": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet422": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet424": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet426": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet428": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet430": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet432": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet434": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet436": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet438": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet440": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet442": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet444": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet446": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet448": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet450": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet452": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet454": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet456": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet458": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet460": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet462": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet464": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet466": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet468": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet470": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet472": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet474": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet476": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet478": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet480": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet482": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet484": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet486": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet488": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet490": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet492": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet494": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet496": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet498": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet500": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet502": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet504": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "1", + "autoneg": "off" }, "Ethernet506": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "2", + "autoneg": "off" }, "Ethernet508": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "3", + "autoneg": "off" }, "Ethernet510": { - "default_brkout_mode": "4x200G[100G,50G,25G,10G]" + "default_brkout_mode": "4x200G[100G,50G,25G,10G]", + "subport": "4", + "autoneg": "off" }, "Ethernet512": { "default_brkout_mode": "1x25G[10G]" diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/media_settings.json b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/media_settings.json new file mode 100644 index 000000000000..d5884a727c18 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/media_settings.json @@ -0,0 +1,234 @@ +{ + "GLOBAL_MEDIA_SETTINGS": { + "1-64": { + "OSFP-8X-sm_media_interface": { + "speed:400GAUI-4-L": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000005", + "lane1": "0x00000005", + "lane2": "0x00000005", + "lane3": "0x00000005", + "lane4": "0x00000005", + "lane5": "0x00000005", + "lane6": "0x00000005", + "lane7": "0x00000005" + }, + "pre1": { + "lane0": "0xfffffff1", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "main": { + "lane0": "0x0000002b", + "lane1": "0x0000002b", + "lane2": "0x0000002b", + "lane3": "0x0000002b", + "lane4": "0x0000002b", + "lane5": "0x0000002b", + "lane6": "0x0000002b", + "lane7": "0x0000002b" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "idriver": { + "lane0": "0x00000032", + "lane1": "0x00000032", + "lane2": "0x00000032", + "lane3": "0x00000032", + "lane4": "0x00000032", + "lane5": "0x00000032", + "lane6": "0x00000032", + "lane7": "0x00000032" + } + }, + "speed:400GAUI-4-S": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000005", + "lane1": "0x00000005", + "lane2": "0x00000005", + "lane3": "0x00000005", + "lane4": "0x00000005", + "lane5": "0x00000005", + "lane6": "0x00000005", + "lane7": "0x00000005" + }, + "pre1": { + "lane0": "0xfffffff1", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "main": { + "lane0": "0x0000002b", + "lane1": "0x0000002b", + "lane2": "0x0000002b", + "lane3": "0x0000002b", + "lane4": "0x0000002b", + "lane5": "0x0000002b", + "lane6": "0x0000002b", + "lane7": "0x0000002b" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "idriver": { + "lane0": "0x00000032", + "lane1": "0x00000032", + "lane2": "0x00000032", + "lane3": "0x00000032", + "lane4": "0x00000032", + "lane5": "0x00000032", + "lane6": "0x00000032", + "lane7": "0x00000032" + } + }, + "speed:800G": { + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "pre2": { + "lane0": "0x00000005", + "lane1": "0x00000005", + "lane2": "0x00000005", + "lane3": "0x00000005", + "lane4": "0x00000005", + "lane5": "0x00000005", + "lane6": "0x00000005", + "lane7": "0x00000005" + }, + "pre1": { + "lane0": "0xfffffff1", + "lane1": "0xfffffff1", + "lane2": "0xfffffff1", + "lane3": "0xfffffff1", + "lane4": "0xfffffff1", + "lane5": "0xfffffff1", + "lane6": "0xfffffff1", + "lane7": "0xfffffff1" + }, + "main": { + "lane0": "0x0000002b", + "lane1": "0x0000002b", + "lane2": "0x0000002b", + "lane3": "0x0000002b", + "lane4": "0x0000002b", + "lane5": "0x0000002b", + "lane6": "0x0000002b", + "lane7": "0x0000002b" + }, + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000", + "lane4": "0x00000000", + "lane5": "0x00000000", + "lane6": "0x00000000", + "lane7": "0x00000000" + }, + "idriver": { + "lane0": "0x00000032", + "lane1": "0x00000032", + "lane2": "0x00000032", + "lane3": "0x00000032", + "lane4": "0x00000032", + "lane5": "0x00000032", + "lane6": "0x00000032", + "lane7": "0x00000032" + } + } + }, + "OSFP-8X-nm_850_media_interface": { + "speed:200GAUI-4": { + "post1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "idriver": { + "lane0": "0x0000003f", + "lane1": "0x0000003f", + "lane2": "0x0000003f", + "lane3": "0x0000003f" + }, + "main": { + "lane0": "0x0000003f", + "lane1": "0x0000003f", + "lane2": "0x0000003f", + "lane3": "0x0000003f" + }, + "pre1": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "pre3": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + }, + "pre2": { + "lane0": "0x00000000", + "lane1": "0x00000000", + "lane2": "0x00000000", + "lane3": "0x00000000" + } + } + } + } + } +} diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/optics_si_settings.json b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/optics_si_settings.json new file mode 100644 index 000000000000..80d06ac743a8 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/optics_si_settings.json @@ -0,0 +1,142 @@ +{ + "GLOBAL_MEDIA_SETTINGS": { + "1-64": { + "100G_SPEED": { + "Default": { + "OutputAmplitudeTargetRx": { + "OutputAmplitudeTargetRx1": 1, + "OutputAmplitudeTargetRx2": 1, + "OutputAmplitudeTargetRx3": 1, + "OutputAmplitudeTargetRx4": 1, + "OutputAmplitudeTargetRx5": 1, + "OutputAmplitudeTargetRx6": 1, + "OutputAmplitudeTargetRx7": 1, + "OutputAmplitudeTargetRx8": 1 + }, + "OutputEqPreCursorTargetRx": { + "OutputEqPreCursorTargetRx1": 0, + "OutputEqPreCursorTargetRx2": 0, + "OutputEqPreCursorTargetRx3": 0, + "OutputEqPreCursorTargetRx4": 0, + "OutputEqPreCursorTargetRx5": 0, + "OutputEqPreCursorTargetRx6": 0, + "OutputEqPreCursorTargetRx7": 0, + "OutputEqPreCursorTargetRx8": 0 + }, + "OutputEqPostCursorTargetRx": { + "OutputEqPostCursorTargetRx1": 0, + "OutputEqPostCursorTargetRx2": 0, + "OutputEqPostCursorTargetRx3": 0, + "OutputEqPostCursorTargetRx4": 0, + "OutputEqPostCursorTargetRx5": 0, + "OutputEqPostCursorTargetRx6": 0, + "OutputEqPostCursorTargetRx7": 0, + "OutputEqPostCursorTargetRx8": 0 + } + } + }, + "50G_SPEED": { + "Default": { + "OutputAmplitudeTargetRx": { + "OutputAmplitudeTargetRx1": 1, + "OutputAmplitudeTargetRx2": 1, + "OutputAmplitudeTargetRx3": 1, + "OutputAmplitudeTargetRx4": 1, + "OutputAmplitudeTargetRx5": 1, + "OutputAmplitudeTargetRx6": 1, + "OutputAmplitudeTargetRx7": 1, + "OutputAmplitudeTargetRx8": 1 + }, + "OutputEqPreCursorTargetRx": { + "OutputEqPreCursorTargetRx1": 0, + "OutputEqPreCursorTargetRx2": 0, + "OutputEqPreCursorTargetRx3": 0, + "OutputEqPreCursorTargetRx4": 0, + "OutputEqPreCursorTargetRx5": 0, + "OutputEqPreCursorTargetRx6": 0, + "OutputEqPreCursorTargetRx7": 0, + "OutputEqPreCursorTargetRx8": 0 + }, + "OutputEqPostCursorTargetRx": { + "OutputEqPostCursorTargetRx1": 0, + "OutputEqPostCursorTargetRx2": 0, + "OutputEqPostCursorTargetRx3": 0, + "OutputEqPostCursorTargetRx4": 0, + "OutputEqPostCursorTargetRx5": 0, + "OutputEqPostCursorTargetRx6": 0, + "OutputEqPostCursorTargetRx7": 0, + "OutputEqPostCursorTargetRx8": 0 + } + } + }, + "25G_SPEED": { + "Default": { + "OutputAmplitudeTargetRx": { + "OutputAmplitudeTargetRx1": 0, + "OutputAmplitudeTargetRx2": 0, + "OutputAmplitudeTargetRx3": 0, + "OutputAmplitudeTargetRx4": 0, + "OutputAmplitudeTargetRx5": 0, + "OutputAmplitudeTargetRx6": 0, + "OutputAmplitudeTargetRx7": 0, + "OutputAmplitudeTargetRx8": 0 + }, + "OutputEqPreCursorTargetRx": { + "OutputEqPreCursorTargetRx1": 0, + "OutputEqPreCursorTargetRx2": 0, + "OutputEqPreCursorTargetRx3": 0, + "OutputEqPreCursorTargetRx4": 0, + "OutputEqPreCursorTargetRx5": 0, + "OutputEqPreCursorTargetRx6": 0, + "OutputEqPreCursorTargetRx7": 0, + "OutputEqPreCursorTargetRx8": 0 + }, + "OutputEqPostCursorTargetRx": { + "OutputEqPostCursorTargetRx1": 0, + "OutputEqPostCursorTargetRx2": 0, + "OutputEqPostCursorTargetRx3": 0, + "OutputEqPostCursorTargetRx4": 0, + "OutputEqPostCursorTargetRx5": 0, + "OutputEqPostCursorTargetRx6": 0, + "OutputEqPostCursorTargetRx7": 0, + "OutputEqPostCursorTargetRx8": 0 + } + } + }, + "10G_SPEED": { + "Default": { + "OutputAmplitudeTargetRx": { + "OutputAmplitudeTargetRx1": 0, + "OutputAmplitudeTargetRx2": 0, + "OutputAmplitudeTargetRx3": 0, + "OutputAmplitudeTargetRx4": 0, + "OutputAmplitudeTargetRx5": 0, + "OutputAmplitudeTargetRx6": 0, + "OutputAmplitudeTargetRx7": 0, + "OutputAmplitudeTargetRx8": 0 + }, + "OutputEqPreCursorTargetRx": { + "OutputEqPreCursorTargetRx1": 0, + "OutputEqPreCursorTargetRx2": 0, + "OutputEqPreCursorTargetRx3": 0, + "OutputEqPreCursorTargetRx4": 0, + "OutputEqPreCursorTargetRx5": 0, + "OutputEqPreCursorTargetRx6": 0, + "OutputEqPreCursorTargetRx7": 0, + "OutputEqPreCursorTargetRx8": 0 + }, + "OutputEqPostCursorTargetRx": { + "OutputEqPostCursorTargetRx1": 0, + "OutputEqPostCursorTargetRx2": 0, + "OutputEqPostCursorTargetRx3": 0, + "OutputEqPostCursorTargetRx4": 0, + "OutputEqPostCursorTargetRx5": 0, + "OutputEqPostCursorTargetRx6": 0, + "OutputEqPostCursorTargetRx7": 0, + "OutputEqPostCursorTargetRx8": 0 + } + } + } + } + } +} diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/pmon_daemon_control.json b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/pmon_daemon_control.json new file mode 100644 index 000000000000..208fa63ca294 --- /dev/null +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/pmon_daemon_control.json @@ -0,0 +1,6 @@ +{ + "skip_ledd": true, + "skip_fancontrol": true, + "skip_xcvrd_cmis_mgr": false +} + diff --git a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/sai.profile b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/sai.profile index 0d93ea989b31..8677e1faf336 100644 --- a/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/sai.profile +++ b/device/mellanox/x86_64-nvidia_sn5600-r0/Mellanox-SN5600-V256/sai.profile @@ -1 +1,2 @@ SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_5600_256x200g.xml +SAI_INDEPENDENT_MODULE_MODE=1 From 38f2b8e36abe108e19b779e94cd36ba48077046c Mon Sep 17 00:00:00 2001 From: Oleksandr Ivantsiv Date: Mon, 22 Jul 2024 23:31:16 -0700 Subject: [PATCH 038/117] [nvidia-bluefield] Update the default topology for DPU SKUs (#19609) - Why I did it Update the default topology for all Nvidia Bluefield SKUs. The correct topology to be used for Smart Switch devices is t1-smartswitch. - How I did it Update default_sku file for all related SKUs - How to verify it Compile and run image. The default configuration should be generated for the t1-smartswitch topology. --- device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/default_sku | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/default_sku b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/default_sku index 41bda2fe9583..4653aa86a561 100644 --- a/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/default_sku +++ b/device/nvidia-bluefield/arm64-nvda_bf-bf3comdpu/default_sku @@ -1 +1 @@ -Nvidia-bf3-com-dpu appliance +Nvidia-bf3-com-dpu t1-smartswitch From bda9dd79b5f6072377ba2af4865adca45bef7020 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Tue, 23 Jul 2024 19:02:09 +0800 Subject: [PATCH 039/117] [submodule] Update submodule sonic-swss to the latest HEAD automatically (#19654) #### Why I did it src/sonic-swss ``` * 2367bca1 - (HEAD -> master, origin/master, origin/HEAD) Add a check if OID exists before setting Host Tx Ready Signal Enable (#3232) (15 hours ago) [noaOrMlnx] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-swss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-swss b/src/sonic-swss index 43ac585cf063..2367bca143ef 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 43ac585cf0634d1bc27d28637c6db7069460ee25 +Subproject commit 2367bca143effbda954bdc6aa5700b170c5ad65b From a8dc94b390fb87bec6e6cde9eec35722b9e15458 Mon Sep 17 00:00:00 2001 From: Ze Gan Date: Tue, 23 Jul 2024 22:49:43 +0800 Subject: [PATCH 040/117] Update threshold of PG profile for Arista7060X6-PE 256x200G (#19642) * Update threashold of PG profile for 7060x6-64pe Signed-off-by: Ze Gan --- .../BALANCED/pg_profile_lookup.ini | 18 +++++++++--------- .../th5-a7060x6-64pe.config.bcm | 8 ++++---- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/pg_profile_lookup.ini b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/pg_profile_lookup.ini index 064222610a18..bc4b6528ea10 100644 --- a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/pg_profile_lookup.ini +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/BALANCED/pg_profile_lookup.ini @@ -4,20 +4,20 @@ 25000 5m 1248 2288 53248 0 2288 40000 5m 1248 2288 66560 0 2288 50000 5m 1248 2288 90272 0 2288 - 100000 5m 18796 3556 300990 -2 3556 - 200000 5m 18796 3556 300990 -2 3556 - 400000 5m 18796 3556 300990 -2 3556 + 100000 5m 18796 3556 300990 0 3556 + 200000 5m 18796 3556 300990 0 3556 + 400000 5m 18796 3556 300990 0 3556 10000 40m 1248 2288 37024 0 2288 25000 40m 1248 2288 53248 0 2288 40000 40m 1248 2288 71552 0 2288 50000 40m 1248 2288 96096 0 2288 - 100000 40m 18796 3556 300990 -2 3556 - 200000 40m 18796 3556 300990 -2 3556 - 400000 40m 18796 3556 300990 -2 3556 + 100000 40m 18796 3556 300990 0 3556 + 200000 40m 18796 3556 300990 0 3556 + 400000 40m 18796 3556 300990 0 3556 10000 300m 1248 2288 46176 0 2288 25000 300m 1248 2288 79040 0 2288 40000 300m 1248 2288 108160 0 2288 50000 300m 1248 2288 141856 0 2288 - 100000 300m 18796 3556 300990 -2 3556 - 200000 300m 18796 3556 300990 -2 3556 - 400000 300m 18796 3556 300990 -2 3556 + 100000 300m 18796 3556 300990 0 3556 + 200000 300m 18796 3556 300990 0 3556 + 400000 300m 18796 3556 300990 0 3556 diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm index a7fc7551e347..af2f5f15820f 100644 --- a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm @@ -2461,7 +2461,7 @@ device: : MIN_GUARANTEE_CELLS: 74 DYNAMIC_SHARED_LIMITS: 1 - SHARED_LIMIT_DYNAMIC: ALPHA_1_4 + SHARED_LIMIT_DYNAMIC: ALPHA_1 RESUME_OFFSET_CELLS: 14 RESUME_FLOOR_CELLS: 0 HEADROOM_LIMIT_AUTO: 0 @@ -2472,7 +2472,7 @@ device: : MIN_GUARANTEE_CELLS: 74 DYNAMIC_SHARED_LIMITS: 1 - SHARED_LIMIT_DYNAMIC: ALPHA_1_4 + SHARED_LIMIT_DYNAMIC: ALPHA_1 RESUME_OFFSET_CELLS: 14 RESUME_FLOOR_CELLS: 0 HEADROOM_LIMIT_AUTO: 0 @@ -2483,7 +2483,7 @@ device: : MIN_GUARANTEE_CELLS: 0 DYNAMIC_SHARED_LIMITS: 1 - SHARED_LIMIT_DYNAMIC: ALPHA_1_4 + SHARED_LIMIT_DYNAMIC: ALPHA_1 RESUME_OFFSET_CELLS: 0 RESUME_FLOOR_CELLS: 0 HEADROOM_LIMIT_AUTO: 0 @@ -2494,7 +2494,7 @@ device: : MIN_GUARANTEE_CELLS: 0 DYNAMIC_SHARED_LIMITS: 1 - SHARED_LIMIT_DYNAMIC: ALPHA_1_4 + SHARED_LIMIT_DYNAMIC: ALPHA_1 RESUME_OFFSET_CELLS: 0 RESUME_FLOOR_CELLS: 0 HEADROOM_LIMIT_AUTO: 0 From 0324d9acd2f7223539190792ef7a31d28421210c Mon Sep 17 00:00:00 2001 From: Lawrence Lee Date: Tue, 23 Jul 2024 15:35:43 -0700 Subject: [PATCH 041/117] Add SonicHost to DEVICE_METADATA yang model (#19544) #### Why I did it Fixes https://github.com/sonic-net/sonic-mgmt/issues/12297 #### How I did it Add 'SonicHost' to the allowed device types for the DEVICE_METADATA table --- .../tests/yang_model_tests/tests/device_metadata.json | 3 +++ .../yang_model_tests/tests_config/device_metadata.json | 10 ++++++++++ .../yang-models/sonic-device_metadata.yang | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json b/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json index 11d0c9e9daab..43100cf3a3ba 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/device_metadata.json @@ -45,6 +45,9 @@ "DEVICE_METADATA_TYPE_BMC_MGMT_TOR_PATTERN": { "desc": "DEVICE_METADATA value as BmcMgmtToRRouter for Type field" }, + "DEVICE_METADATA_TYPE_SONIC_HOST_PATTERN": { + "desc": "DEVICE_METADATA value as SonicHost for Type field" + }, "DEVICE_METADATA_TYPE_NOT_PROVISIONED_PATTERN": { "desc": "DEVICE_METADATA value as not-provisioned for Type field" }, diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json index bc977e7da076..4efaca82396f 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/device_metadata.json @@ -92,6 +92,16 @@ } } }, + "DEVICE_METADATA_TYPE_SONIC_HOST_PATTERN": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "sonic-device_metadata:localhost": { + "bgp_asn": "65002", + "type": "SonicHost" + } + } + } + }, "DEVICE_METADATA_TYPE_NOT_PROVISIONED_PATTERN": { "sonic-device_metadata:sonic-device_metadata": { "sonic-device_metadata:DEVICE_METADATA": { diff --git a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang index 7bd936e831c3..efa1d4c96a0a 100644 --- a/src/sonic-yang-models/yang-models/sonic-device_metadata.yang +++ b/src/sonic-yang-models/yang-models/sonic-device_metadata.yang @@ -100,7 +100,7 @@ module sonic-device_metadata { leaf type { type string { length 1..255; - pattern "ToRRouter|LeafRouter|SpineChassisFrontendRouter|ChassisBackendRouter|ASIC|MgmtToRRouter|SpineRouter|BackEndToRRouter|BackEndLeafRouter|EPMS|MgmtTsToR|BmcMgmtToRRouter|not-provisioned"; + pattern "ToRRouter|LeafRouter|SpineChassisFrontendRouter|ChassisBackendRouter|ASIC|MgmtToRRouter|SpineRouter|BackEndToRRouter|BackEndLeafRouter|EPMS|MgmtTsToR|BmcMgmtToRRouter|SonicHost|not-provisioned"; } } From 2bec02e7ad114da74ac0788ad8c69a329fafc1bc Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Wed, 24 Jul 2024 19:00:47 +0800 Subject: [PATCH 042/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19669) #### Why I did it src/sonic-utilities ``` * 772ee793 - (HEAD -> master, origin/master, origin/HEAD) IP Assignment Issue (#3408) (5 hours ago) [Rida Hanif] * f1966227 - fix show techsupport date issue (#3437) (19 hours ago) [ganglv] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index d1ca905e3b07..772ee793d067 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit d1ca905e3b0733170d19abeecad1cfbfd0180698 +Subproject commit 772ee793d067be40eeb8779d20b645aa7f97ea30 From 82aecf9c8590ea96259c019f2cf7f42699bad452 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Wed, 24 Jul 2024 19:00:53 +0800 Subject: [PATCH 043/117] [submodule] Update submodule sonic-platform-daemons to the latest HEAD automatically (#19668) #### Why I did it src/sonic-platform-daemons ``` * d6a4635 - (HEAD -> master, origin/master, origin/HEAD) [xcvrd] Fix xcvrd crash for RJ45 cable type (#513) (9 hours ago) [Vivek] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-platform-daemons | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index 8c89f6ba2975..d6a4635fb9f8 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit 8c89f6ba2975a7699861f2c6d77083cebb62e97c +Subproject commit d6a4635fb9f8c84d671179a438c2807c0f34bb75 From dc159f2c20250bfe5fa8de6fb57baf0c72f04268 Mon Sep 17 00:00:00 2001 From: arista-nwolfe <94405414+arista-nwolfe@users.noreply.github.com> Date: Wed, 24 Jul 2024 13:38:49 -0400 Subject: [PATCH 044/117] [Arista]: Set soc property programmability_ucode_relative_path (#19637) Broadcom requires that programmability_ucode_relative_path is set in SAI11. This soc property replaces the legacy custom_feature_ucode_path Without this we get the following error: syncd#supervisord: syncd 0:dbx_file_get_db_location: DB Resource not defined#015 syncd#supervisord: syncd #015#015 syncd#supervisord: syncd 0:dnx_init_pemla_get_ucode_filepath: Error 'Invalid parameter' indicated ; #015#015 --- .../jr2-a7280cr3-32d4-40x100G.config.bcm | 2 +- .../0/j2p-a7800r3a-36d-36x400G.config.bcm | 1 + .../1/j2p-a7800r3a-36d-36x400G.config.bcm | 1 + .../0/j2p-a7800r3a-36d-36x400G.config.bcm | 1 + .../1/j2p-a7800r3a-36d-36x400G.config.bcm | 1 + .../0/j2p-a7800r3a-36d-36x400G.config.bcm | 1 + .../1/j2p-a7800r3a-36d-36x400G.config.bcm | 1 + src/sonic-device-data/tests/permitted_list | 1 + 8 files changed, 8 insertions(+), 1 deletion(-) diff --git a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm index f5f261610d25..43535d05b9bd 100644 --- a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm +++ b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/jr2-a7280cr3-32d4-40x100G.config.bcm @@ -2,7 +2,7 @@ soc_family.BCM8869X=BCM8869X system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db -custom_feature_ucode_path=u_code_db2pem.txt +programmability_ucode_relative_path.BCM8869X=pemla/ucode/standard_1/jer2pemla/u_code_db2pem.txt system_headers_mode=1 suppress_unknown_prop_warnings=1 l4_protocols_load_balancing_enable=1 diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/0/j2p-a7800r3a-36d-36x400G.config.bcm b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/0/j2p-a7800r3a-36d-36x400G.config.bcm index b0be0c5617b3..473988f4e1b3 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/0/j2p-a7800r3a-36d-36x400G.config.bcm +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/0/j2p-a7800r3a-36d-36x400G.config.bcm @@ -2,6 +2,7 @@ soc_family=BCM8885X system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db +programmability_ucode_relative_path.BCM8885X=pemla/ucode/standard_1/jer2pemla/u_code_db2pem.txt #################################################### ##Reference applications related properties - Start diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/1/j2p-a7800r3a-36d-36x400G.config.bcm b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/1/j2p-a7800r3a-36d-36x400G.config.bcm index 5ece4f833fc4..54cfe519d0ca 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/1/j2p-a7800r3a-36d-36x400G.config.bcm +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/1/j2p-a7800r3a-36d-36x400G.config.bcm @@ -2,6 +2,7 @@ soc_family=BCM8885X system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db +programmability_ucode_relative_path.BCM8885X=pemla/ucode/standard_1/jer2pemla/u_code_db2pem.txt #################################################### ##Reference applications related properties - Start diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm index 34b8c52a91d3..1582449b6b2a 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/j2p-a7800r3a-36d-36x400G.config.bcm @@ -2,6 +2,7 @@ soc_family=BCM8885X system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db +programmability_ucode_relative_path.BCM8885X=pemla/ucode/standard_1/jer2pemla/u_code_db2pem.txt #################################################### ##Reference applications related properties - Start diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm index ed7d23113add..820bbdf2ac91 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/j2p-a7800r3a-36d-36x400G.config.bcm @@ -2,6 +2,7 @@ soc_family=BCM8885X system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db +programmability_ucode_relative_path.BCM8885X=pemla/ucode/standard_1/jer2pemla/u_code_db2pem.txt #################################################### ##Reference applications related properties - Start diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/0/j2p-a7800r3a-36d-36x400G.config.bcm b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/0/j2p-a7800r3a-36d-36x400G.config.bcm index bcb27b873431..3702d9b3a82a 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/0/j2p-a7800r3a-36d-36x400G.config.bcm +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/0/j2p-a7800r3a-36d-36x400G.config.bcm @@ -2,6 +2,7 @@ soc_family=BCM8885X system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db +programmability_ucode_relative_path.BCM8885X=pemla/ucode/standard_1/jer2pemla/u_code_db2pem.txt #################################################### ##Reference applications related properties - Start diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/1/j2p-a7800r3a-36d-36x400G.config.bcm b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/1/j2p-a7800r3a-36d-36x400G.config.bcm index 30b740af2ae2..1f26bc66d50d 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/1/j2p-a7800r3a-36d-36x400G.config.bcm +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/1/j2p-a7800r3a-36d-36x400G.config.bcm @@ -2,6 +2,7 @@ soc_family=BCM8885X system_ref_core_clock_khz=1600000 dpp_db_path=/usr/share/bcm/db +programmability_ucode_relative_path.BCM8885X=pemla/ucode/standard_1/jer2pemla/u_code_db2pem.txt #################################################### ##Reference applications related properties - Start diff --git a/src/sonic-device-data/tests/permitted_list b/src/sonic-device-data/tests/permitted_list index 625e6afccad2..b526724a7819 100644 --- a/src/sonic-device-data/tests/permitted_list +++ b/src/sonic-device-data/tests/permitted_list @@ -346,3 +346,4 @@ sai_stats_support_mask sai_default_cpu_tx_tc oversubscribe_mixed_sister_25_50_enable sai_disable_srcmacqedstmac_ctrl +programmability_ucode_relative_path From 33e0efdbe4c870d0e9fa74b7f8f9be121494a1e7 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 25 Jul 2024 19:00:52 +0800 Subject: [PATCH 045/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19679) #### Why I did it src/sonic-utilities ``` * a8132159 - (HEAD -> master, origin/master, origin/HEAD) Fix multi-asic behaviour for dropstat (#3059) (6 hours ago) [bktsim] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index 772ee793d067..a81321595b1f 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 772ee793d067be40eeb8779d20b645aa7f97ea30 +Subproject commit a81321595b1f2cf34b26255fb6953f304ba2df14 From 762a9bfc0f320610523f5b5f35cae3b18e99c8f3 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 25 Jul 2024 19:01:02 +0800 Subject: [PATCH 046/117] [submodule] Update submodule sonic-platform-daemons to the latest HEAD automatically (#19677) #### Why I did it src/sonic-platform-daemons ``` * bf865c6 - (HEAD -> master, origin/master, origin/HEAD) Remove redundant xcvr_table_helper init during CmisManagerTask init (#521) (3 hours ago) [mihirpat1] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-platform-daemons | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index d6a4635fb9f8..bf865c6b7118 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit d6a4635fb9f8c84d671179a438c2807c0f34bb75 +Subproject commit bf865c6b711833347d3c57e9d84cd366bcd1b776 From d9e6ab7da88911f4651c78e9e13d1624710a8c55 Mon Sep 17 00:00:00 2001 From: Yaqiang Zhu Date: Thu, 25 Jul 2024 23:02:53 +0800 Subject: [PATCH 047/117] [dhcp_server] Remove invoke of dhcpmon when dhcp_server is enabled (#19673) * [dhcp_server] Remove invoke of dhcpmon when dhcp_server is enabled * set include_dhcp_server to y * Update log * Revert "set include_dhcp_server to y" This reverts commit 985273e0a9672f2e0b506515ff626ae761e0ac74. --- .../dhcp_utilities/dhcprelayd/dhcprelayd.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sonic-dhcp-utilities/dhcp_utilities/dhcprelayd/dhcprelayd.py b/src/sonic-dhcp-utilities/dhcp_utilities/dhcprelayd/dhcprelayd.py index 01e6d5499cf5..d1b22a3158b4 100644 --- a/src/sonic-dhcp-utilities/dhcp_utilities/dhcprelayd/dhcprelayd.py +++ b/src/sonic-dhcp-utilities/dhcp_utilities/dhcprelayd/dhcprelayd.py @@ -109,7 +109,9 @@ def refresh_dhcrelay(self, force_kill=False): self._disable_checkers(checkers_to_be_disabled) self._start_dhcrelay_process(dhcp_interfaces, dhcp_server_ip, force_kill) - self._start_dhcpmon_process(dhcp_interfaces, force_kill) + + # TODO dhcpmon is not ready for count packet for dhcp_server, hence comment invoke it for now + # self._start_dhcpmon_process(dhcp_interfaces, force_kill) def wait(self): """ @@ -307,7 +309,7 @@ def _start_dhcpmon_process(self, new_dhcp_interfaces, force_kill): for pid, cmds in pids_cmds.items(): proc = psutil.Process(pid) if proc.status() == psutil.STATUS_ZOMBIE: - syslog.syslog(syslog.LOG_ERR, "Faild to start dhcpmon process: {}".format(cmds)) + syslog.syslog(syslog.LOG_ERR, "Failed to start dhcpmon process: {}".format(cmds)) terminate_proc(proc) else: syslog.syslog(syslog.LOG_INFO, "dhcpmon process started successfully, cmds: {}".format(cmds)) From 08f333b79854a63aa2e50aedcc632d64cb1219ff Mon Sep 17 00:00:00 2001 From: Ryan Lucus Date: Thu, 25 Jul 2024 10:17:00 -0700 Subject: [PATCH 048/117] add config_db entries for TELEMETRY|gnmi|save_on_set (#19309) * add config_db entries for TELEMETRY|gnmi|save_on_set * add save_on_set to sonic-gnmi.yang --- src/sonic-yang-models/doc/Configuration.md | 3 ++- .../tests/yang_model_tests/tests/gnmi.json | 4 ++++ .../yang_model_tests/tests/telemetry.json | 4 ++++ .../yang_model_tests/tests_config/gnmi.json | 20 ++++++++++++++++++- .../tests_config/telemetry.json | 20 ++++++++++++++++++- .../yang-models/sonic-gnmi.yang | 5 +++++ .../yang-models/sonic-telemetry.yang | 5 +++++ 7 files changed, 58 insertions(+), 3 deletions(-) diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index cafc4fcaac16..088b4e545e91 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -2332,7 +2332,8 @@ and is listed in this table. "gnmi": { "client_auth": "true", "log_level": "2", - "port": "50051" + "port": "50051", + "save_on_set": "false" } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/gnmi.json b/src/sonic-yang-models/tests/yang_model_tests/tests/gnmi.json index 5938290f8a96..0d99fe09779e 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/gnmi.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/gnmi.json @@ -11,6 +11,10 @@ "desc": "TABLE_WITH_INCORRECT_PORT failure.", "eStrKey": "InvalidValue" }, + "GNMI_TABLE_WITH_INCORRECT_SAVE_ON_SET": { + "desc": "TABLE_WITH_INCORRECT_SAVE_ON_SET failure", + "eStrKey": "InvalidValue" + }, "GNMI_TABLE_WITH_VALID_CONFIG": { "desc": "TABLE WITH VALID CONFIG." } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry.json b/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry.json index f79e8ea73272..3329abd874e3 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/telemetry.json @@ -11,6 +11,10 @@ "desc": "TABLE_WITH_INCORRECT_PORT failure.", "eStrKey": "InvalidValue" }, + "TELEMETRY_TABLE_WITH_INCORRECT_SAVE_ON_SET": { + "desc": "TABLE_WITH_INCORRECT_SAVE_ON_SET failure", + "eStrKey": "InvalidValue" + }, "TELEMETRY_TABLE_WITH_VALID_CONFIG": { "desc": "TABLE WITH VALID CONFIG." } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json index db121ae3944c..62b09a2d5b01 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json @@ -47,6 +47,23 @@ } } }, + "GNMI_TABLE_WITH_INCORRECT_SAVE_ON_SET": { + "sonic-gnmi:sonic-gnmi": { + "sonic-gnmi:GNMI": { + "certs": { + "ca_crt": "/etc/sonic/credentials/dsmsroot.cer", + "server_crt": "/etc/sonic/credentials/server.cer", + "server_key": "/etc/sonic/credentials/server.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051", + "save_on_set": "wrong" + } + } + } + }, "GNMI_TABLE_WITH_VALID_CONFIG": { "sonic-gnmi:sonic-gnmi": { "sonic-gnmi:GNMI": { @@ -58,7 +75,8 @@ "gnmi": { "client_auth": "true", "log_level": "2", - "port": "50052" + "port": "50052", + "save_on_set": "false" } } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry.json index 1231a4cee662..18e708262e74 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/telemetry.json @@ -47,6 +47,23 @@ } } }, + "TELEMETRY_TABLE_WITH_INCORRECT_SAVE_ON_SET": { + "sonic-telemetry:sonic-telemetry": { + "sonic-telemetry:TELEMETRY": { + "certs": { + "ca_crt": "/etc/sonic/telemetry/dsmsroot.cer", + "server_crt": "/etc/sonic/telemetry/streamingtelemetryserver.cer", + "server_key": "/etc/sonic/telemetry/streamingtelemetryserver.key" + }, + "gnmi": { + "client_auth": "true", + "log_level": "2", + "port": "50051", + "save_on_set": "wrong" + } + } + } + }, "TELEMETRY_TABLE_WITH_VALID_CONFIG": { "sonic-telemetry:sonic-telemetry": { "sonic-telemetry:TELEMETRY": { @@ -58,7 +75,8 @@ "gnmi": { "client_auth": "true", "log_level": "2", - "port": "50051" + "port": "50051", + "save_on_set": "false" } } } diff --git a/src/sonic-yang-models/yang-models/sonic-gnmi.yang b/src/sonic-yang-models/yang-models/sonic-gnmi.yang index 1d6b228266b8..eb573e3ffe77 100644 --- a/src/sonic-yang-models/yang-models/sonic-gnmi.yang +++ b/src/sonic-yang-models/yang-models/sonic-gnmi.yang @@ -71,6 +71,11 @@ module sonic-gnmi { description "Port gnmi runs on."; } + leaf save_on_set { + type boolean; + description "Flag for enabling save on set."; + } + } } diff --git a/src/sonic-yang-models/yang-models/sonic-telemetry.yang b/src/sonic-yang-models/yang-models/sonic-telemetry.yang index d3d7600a8e98..5cbdf2bd9330 100644 --- a/src/sonic-yang-models/yang-models/sonic-telemetry.yang +++ b/src/sonic-yang-models/yang-models/sonic-telemetry.yang @@ -71,6 +71,11 @@ module sonic-telemetry { description "Port gnmi runs on."; } + leaf save_on_set { + type boolean; + description "Flag for enabling save on set."; + } + } } From 4932a383a37c29c3f10def55a53b29aae45452c9 Mon Sep 17 00:00:00 2001 From: Jianquan Ye Date: Fri, 26 Jul 2024 10:07:07 +1000 Subject: [PATCH 049/117] Make pmon feature delayed flag as jinja template (#19657) * Fix the Loopback0 IPv6 address of LC's in chassis not reachable from peer device's Signed-off-by: Abhishek Dosi * Added change to have flag Signed-off-by: Abhishek Dosi * Assign the metric vaule for Ipv6 default route learnt via RA message to higher value so that BGP learnt default route is higher priority. Signed-off-by: Abhishek Dosi * Add alternate name for bridge interface on supversior in chassis systrem Signed-off-by: Abhishek Dosi * Update service_checker.py * Update init_cfg.json.j2 to handle global scope for lldp feature * Update sonic-feature.yang * Added support to parse "AssociatedSliceStr" attribute of minigraph and save as `slice_type` as part of DEVICE_METADATA Signed-off-by: Abhishek Dosi * Revert "Added support to parse "AssociatedSliceStr" attribute of minigraph and" This reverts commit 0f2d26d0efd538fbc9d2ee16cb9600642753a6a7. * Added support to parse "AssociatedSliceStr" attribute of minigraph and save as `slice_type` as part of DEVICE_METADATA for Chassis Device type Signed-off-by: Abhishek Dosi * Update minigraph.py * pmon need not be delayed for SpineRouter/T2. pmon need to enable asap to detect ASIC's on Supervisor. pmonm need to enable asap for bring-up of 400G ports on LC's fast becuase of CMIS state machine present in PMON. Signed-off-by: Abhishek Dosi * Updated Yang model for Feature delay from boolean to string Signed-off-by: Abhishek Dosi * Fix Build Error Signed-off-by: Abhishek Dosi * Fix build error Signed-off-by: Abhishek Dosi * Update true/false to True/False --------- Signed-off-by: Abhishek Dosi Co-authored-by: Abhishek Dosi Co-authored-by: abdosi <58047199+abdosi@users.noreply.github.com> --- files/build_templates/init_cfg.json.j2 | 4 ++-- src/sonic-yang-models/yang-models/sonic-feature.yang | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/files/build_templates/init_cfg.json.j2 b/files/build_templates/init_cfg.json.j2 index dc7e4aab7e8e..f8083f040541 100644 --- a/files/build_templates/init_cfg.json.j2 +++ b/files/build_templates/init_cfg.json.j2 @@ -38,7 +38,7 @@ {%- set features = [("bgp", "{% if not DEVICE_RUNTIME_METADATA['ETHERNET_PORTS_PRESENT'] or ('CHASSIS_METADATA' in DEVICE_RUNTIME_METADATA and DEVICE_RUNTIME_METADATA['CHASSIS_METADATA']['module_type'] in ['supervisor']) %}disabled{% else %}enabled{% endif %}", false, "enabled"), ("database", "always_enabled", false, "always_enabled"), ("lldp", "enabled", true, "enabled"), - ("pmon", "enabled", true, "enabled"), + ("pmon", "enabled", "{% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'SpineRouter' %}False{% else %}True{% endif %}", "enabled"), ("snmp", "enabled", true, "enabled"), ("swss", "enabled", false, "enabled"), ("syncd", "enabled", false, "enabled")] %} @@ -71,7 +71,7 @@ {%- for feature, state, delayed, autorestart in features %} "{{feature}}": { "state": "{{state}}", - "delayed" : {{delayed | lower()}}, + "delayed" : "{{delayed}}", {%- if feature in ["lldp"] %} "has_global_scope": {% raw %}"{% if ('CHASSIS_METADATA' in DEVICE_RUNTIME_METADATA and DEVICE_RUNTIME_METADATA['CHASSIS_METADATA']['module_type'] in ['linecard']) %}False{% else %}True{% endif %}"{% endraw %}, "has_per_asic_scope": {% raw %}"{% if not DEVICE_RUNTIME_METADATA['ETHERNET_PORTS_PRESENT'] or ('CHASSIS_METADATA' in DEVICE_RUNTIME_METADATA and DEVICE_RUNTIME_METADATA['CHASSIS_METADATA']['module_type'] in ['supervisor']) %}False{% else %}True{% endif %}"{% endraw %}, diff --git a/src/sonic-yang-models/yang-models/sonic-feature.yang b/src/sonic-yang-models/yang-models/sonic-feature.yang index 3ca32ad6a955..6939f0044920 100644 --- a/src/sonic-yang-models/yang-models/sonic-feature.yang +++ b/src/sonic-yang-models/yang-models/sonic-feature.yang @@ -29,6 +29,11 @@ module sonic-feature{ type string; } + typedef feature-delay-status { + description "configuration to set the feature has delay scope as True/False"; + type string; + } + container sonic-feature { container FEATURE { @@ -60,7 +65,7 @@ module sonic-feature{ leaf delayed { description "This configuration identicates if the feature needs to be delayed until system initialization"; - type stypes:boolean_type; + type feature-delay-status; default "false"; } From 3df115472d6f32573296fd034b29fd062f33ed38 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 26 Jul 2024 19:01:05 +0800 Subject: [PATCH 050/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19708) #### Why I did it src/sonic-utilities ``` * 9b24421a - (HEAD -> master, origin/master, origin/HEAD) Add sfputil power enable/disable command (#3418) (2 hours ago) [Anoop Kamath] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index a81321595b1f..9b24421aacaa 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit a81321595b1f2cf34b26255fb6953f304ba2df14 +Subproject commit 9b24421aacaaa496f65fbab39e918283886205e5 From 9ece6c6229c9a178c6384018bdf03423a14b573d Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 26 Jul 2024 19:01:15 +0800 Subject: [PATCH 051/117] [submodule] Update submodule sonic-swss to the latest HEAD automatically (#19706) #### Why I did it src/sonic-swss ``` * 3c9d6b34 - (HEAD -> master, origin/master, origin/HEAD) Support allocate buffer pool based on ratio (#3201) (6 hours ago) [Stephen Sun] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-swss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-swss b/src/sonic-swss index 2367bca143ef..3c9d6b342b53 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 2367bca143effbda954bdc6aa5700b170c5ad65b +Subproject commit 3c9d6b342b539b379cf10317e181c9953f57827c From f528412f65b7dfcf2940d3a34f5871bc7422704d Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 26 Jul 2024 19:01:24 +0800 Subject: [PATCH 052/117] [submodule] Update submodule sonic-platform-common to the latest HEAD automatically (#19704) #### Why I did it src/sonic-platform-common ``` * 30895d1 - (HEAD -> master, origin/master, origin/HEAD) Add set_power api support to xcvr api (#484) (6 hours ago) [Anoop Kamath] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-platform-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-platform-common b/src/sonic-platform-common index 8e673d5cfcb9..30895d1a9809 160000 --- a/src/sonic-platform-common +++ b/src/sonic-platform-common @@ -1 +1 @@ -Subproject commit 8e673d5cfcb9ee184950f4fb1d32f999cbb39735 +Subproject commit 30895d1a98099935852c6aa170acd8ab16262039 From f29ece85cc8159c238a69596d6364fa5d1a29f10 Mon Sep 17 00:00:00 2001 From: Vivek Date: Fri, 26 Jul 2024 06:47:02 -0700 Subject: [PATCH 053/117] [sflow]: Enable linux capabilities on sflow container for kernel 6.1.94 compatibility (#19700) Starting 6.1.94, Kernel mandates the process to have SYS_ADMIN/NET_ADMIN capability to join events/packets multicast group respectively PSAMPLE used packets and DROPMON uses events Ref: https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/commit/?id=e03781879a0d https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/commit/?id=44ec98ea5ea9 Without this, the following error is observed and host-sflow couldn't use psample and NET_DB 2024 Jul 24 22:38:35.140784 r-tigris-04 ERR sflow#hsflowd: error joining PSAMPLE netlink group 20 : Operation not permitted 2024 Jul 24 22:38:35.849822 r-tigris-04 ERR sflow#hsflowd: error joining DROPMON netlink group 1 : Operation not permitted Signed-off-by: Vivek Reddy --- rules/docker-sflow.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/docker-sflow.mk b/rules/docker-sflow.mk index ece35f5cb8d0..cf54436a0910 100644 --- a/rules/docker-sflow.mk +++ b/rules/docker-sflow.mk @@ -30,7 +30,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_SFLOW_DBG) endif $(DOCKER_SFLOW)_CONTAINER_NAME = sflow -$(DOCKER_SFLOW)_RUN_OPT += -t +$(DOCKER_SFLOW)_RUN_OPT += -t --cap-add=NET_ADMIN --cap-add=SYS_ADMIN $(DOCKER_SFLOW)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro $(DOCKER_SFLOW)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro $(DOCKER_SFLOW)_RUN_OPT += -v /host/warmboot:/var/warmboot From 3e3a1b9e61e3d31b99c995d514b99175f10869da Mon Sep 17 00:00:00 2001 From: Ashwin Srinivasan <93744978+assrinivasan@users.noreply.github.com> Date: Fri, 26 Jul 2024 06:52:12 -0700 Subject: [PATCH 054/117] [logrotate]: Separated sort and head commands to prevent broken pipe issues (#19699) Why I did it Currently the logrotate script is susceptible to SIGPIPE issue because of a race condition between the sort and head commands that leads to the following error: Jun 22 03:20:00.331117 sonic-switch INFO logrotate[1494655]: sort: write failed: 'standard output': Broken pipe Jun 22 03:20:00.331207 sonic-switch INFO logrotate[1494655]: sort: write error This is because if the sort command has not yet finished writing to stdout and head has finished executing and closes the pipe. Subsequent writes by the previously issued sort command would fail because of the closed pipe. Work item tracking Microsoft ADO (number only): 28511764 How I did it I refactored the code in a way that removes the call to head after sort. How to verify it I created a bash script that induces a write failed: Broken pipe error on account of a sort | head combination and verified the SIGPIPE error code. I then removed the head command and replaced it with a call to awk and re-ran the script. This time there was no SIGPIPE. The script: #!/usr/bin/bash var0=$(strace -f -e execve,write bash -c 'ls -l /usr/bin/ /var/lib /usr/lib | sort | head -n 20 > /dev/null') echo "" echo "Removed head and modified awk:" echo "" var1=$(strace -f -e execve,write bash -c 'ls -l /usr/bin/ /var/lib /usr/lib | sort | awk "NR == 1 {print $2}"') The output execve("/usr/bin/bash", ["bash", "-c", "ls -l /usr/bin/ /var/lib /usr/li"...], 0x7ffc34b52f98 /* 17 vars */) = 0 strace: Process 137372 attached strace: Process 137373 attached strace: Process 137374 attached [pid 137373] execve("/usr/bin/sort", ["sort"], 0x55be58b00350 /* 17 vars */ [pid 137372] execve("/usr/bin/ls", ["ls", "-l", "/usr/bin/", "/var/lib", "/usr/lib"], 0x55be58b00350 /* 17 vars */ [pid 137373] <... execve resumed>) = 0 [pid 137372] <... execve resumed>) = 0 [pid 137374] execve("/usr/bin/head", ["head", "-n", "20"], 0x55be58b00350 /* 17 vars */) = 0 [pid 137372] write(1, "/usr/bin/:\ntotal 341826\n-rwxr-xr"..., 4096) = 4096 [pid 137372] write(1, " 30960 Jan 20 2022 colrm\n-r"..., 4096) = 4096 [pid 137372] write(1, "-xr-x 1 root root 1866 De"..., 4096) = 4096 [pid 137372] write(1, "2022 gpgv\n-rwxr-xr-x 1 root root"..., 4096) = 4096 [pid 137372] write(1, " 1 root root 315136 Oct 2 "..., 4096) = 4096 [pid 137372] write(1, "ewgrp\n-rwxr-xr-x 1 root root "..., 4096) = 4096 [pid 137372] write(1, "-rwxr-xr-x 1 root root 43"..., 4096) = 4096 [pid 137372] write(1, "eb 27 2021 screen\n-rwxr-xr-x 1 "..., 4096) = 4096 [pid 137372] write(1, "672 Jun 18 2023 systemd-ask-pas"..., 4096) = 4096 [pid 137372] write(1, "zselect\n-rwxr-xr-x 1 root root "..., 4096) = 4096 [pid 137372] write(1, "r-xr-x 1 root root 2081 A"..., 4096) = 4096 [pid 137372] write(1, " 115 Jun 19 08:44 pam\ndrwxr-xr-x"..., 533) = 533 [pid 137372] +++ exited with 0 +++ [pid 137373] write(1, "\n\ndrwx------ 2 root root 4096 J"..., 4096) = 4096 [pid 137373] write(1, "xrwx 1 root root 12 Jul"..., 4096) = 4096 [pid 137374] write(1, "\n\ndrwx------ 2 root root 4096 J"..., 942 [pid 137373] write(1, "Feb 2 2021 ping6 -> ping\nlrwxr"..., 4096 [pid 137374] <... write resumed>) = 942 [pid 137373] <... write resumed>) = -1 EPIPE (Broken pipe) [pid 137373] --- SIGPIPE {si_signo=SIGPIPE, si_code=SI_USER, si_pid=137373, si_uid=1000} --- [pid 137374] +++ exited with 0 +++ [pid 137373] --- SIGPIPE {si_signo=SIGPIPE, si_code=SI_TKILL, si_pid=137373, si_uid=1000} --- [pid 137373] +++ killed by SIGPIPE +++ --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=137372, si_uid=1000, si_status=0, si_utime=0, si_stime=4} --- +++ exited with 0 +++ Removed head and modified awk: execve("/usr/bin/bash", ["bash", "-c", "ls -l /usr/bin/ /var/lib /usr/li"...], 0x7fff94a24d18 /* 17 vars */) = 0 strace: Process 137379 attached strace: Process 137380 attached strace: Process 137381 attached [pid 137379] execve("/usr/bin/ls", ["ls", "-l", "/usr/bin/", "/var/lib", "/usr/lib"], 0x55d437568350 /* 17 vars */ [pid 137380] execve("/usr/bin/sort", ["sort"], 0x55d437568350 /* 17 vars */ [pid 137379] <... execve resumed>) = 0 [pid 137380] <... execve resumed>) = 0 [pid 137381] execve("/usr/bin/awk", ["awk", "NR == 1 {print }"], 0x55d437568350 /* 17 vars */) = 0 [pid 137379] write(1, "/usr/bin/:\ntotal 341826\n-rwxr-xr"..., 4096) = 4096 [pid 137379] write(1, " 30960 Jan 20 2022 colrm\n-r"..., 4096) = 4096 [pid 137379] write(1, "-xr-x 1 root root 1866 De"..., 4096) = 4096 [pid 137379] write(1, "2022 gpgv\n-rwxr-xr-x 1 root root"..., 4096) = 4096 [pid 137379] write(1, " 1 root root 315136 Oct 2 "..., 4096) = 4096 [pid 137379] write(1, "ewgrp\n-rwxr-xr-x 1 root root "..., 4096) = 4096 [pid 137379] write(1, "-rwxr-xr-x 1 root root 43"..., 4096) = 4096 [pid 137379] write(1, "eb 27 2021 screen\n-rwxr-xr-x 1 "..., 4096) = 4096 [pid 137379] write(1, "672 Jun 18 2023 systemd-ask-pas"..., 4096) = 4096 [pid 137379] write(1, "zselect\n-rwxr-xr-x 1 root root "..., 4096) = 4096 [pid 137379] write(1, "r-xr-x 1 root root 2081 A"..., 4096) = 4096 [pid 137379] write(1, " 115 Jun 19 08:44 pam\ndrwxr-xr-x"..., 533) = 533 [pid 137379] +++ exited with 0 +++ [pid 137380] write(1, "\n\ndrwx------ 2 root root 4096 J"..., 4096) = 4096 [pid 137380] write(1, "xrwx 1 root root 12 Jul"..., 4096) = 4096 [pid 137380] write(1, "Feb 2 2021 ping6 -> ping\nlrwxr"..., 4096) = 4096 [pid 137380] write(1, "t 10803 Sep 24 2021 pod2t"..., 4096) = 4096 [pid 137380] write(1, "22 colcrt\n-rwxr-xr-x 1 root root"..., 4096) = 4096 [pid 137380] write(1, " 2022 zmore\n-rwxr-xr-x 1 root r"..., 4096) = 4096 [pid 137380] write(1, "6 Jun 19 08:47 TS\n-rwxr-xr-x 1 r"..., 4096) = 4096 [pid 137380] write(1, "oot 35048 Jan 20 2022 tas"..., 4096) = 4096 [pid 137380] write(1, " 4392 Sep 24 2021 ptargrep\n"..., 4096) = 4096 [pid 137380] write(1, "-xr-x 1 root root 56192 Se"..., 4096) = 4096 [pid 137380] write(1, " 7285 Nov 24 2016 boot-eos\n-"..., 4096) = 4096 [pid 137380] write(1, "ostname-config.sh\n-rwxr-xr-x 2 r"..., 533) = 533 [pid 137381] write(1, "\n", 1) = 1 [pid 137380] +++ exited with 0 +++ [pid 137381] +++ exited with 0 +++ --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=137379, si_uid=1000, si_status=0, si_utime=1, si_stime=5} --- +++ exited with 0 +++ I created 30 dummy archive files in a dev environment and then ran the modified script to verify that the OLDEST_ARCHIVE_FILE is the archive file that was created first: The setup: admin@sonic:~/testpipe/var/log$ pwd /home/admin/testpipe/var/log admin@sonic:~/testpipe/var/log$ ls -alrth total 8.0K drwxr-xr-x 3 admin admin 4.0K Jul 25 17:12 .. -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.1.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.2.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.3.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.5.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.4.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.6.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.7.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.9.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.8.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.10.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.11.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.12.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.13.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.14.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.15.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.16.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.17.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.18.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.19.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.20.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.21.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.22.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.23.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.24.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.25.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.26.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.27.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.28.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.29.gz -rw-r--r-- 1 admin admin 0 Jul 25 17:17 syslog.30.gz drwxr-xr-x 2 admin admin 4.0K Jul 25 17:17 . The script: admin@sonic:~/testpipe$ cat sort_test.sh #!/usr/bin/bash SORTED_ARCHIVE_FILES=$(find ./var/log -type f -printf '%T+ %p\n' | grep -E '.+\.[0-9]+(\.gz)?$' | sort ) OLDEST_ARCHIVE_FILE=$(echo "${SORTED_ARCHIVE_FILES}" | awk 'NR == 1 { print $2; }') echo $OLDEST_ARCHIVE_FILE The output: admin@sonic:~/testpipe$ ./sort_test.sh ./var/log/syslog.1.gz --- files/image_config/logrotate/rsyslog.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/image_config/logrotate/rsyslog.j2 b/files/image_config/logrotate/rsyslog.j2 index 77d950eb4fd4..4c40da24d256 100644 --- a/files/image_config/logrotate/rsyslog.j2 +++ b/files/image_config/logrotate/rsyslog.j2 @@ -85,7 +85,7 @@ if [ $USED_KB -lt $THRESHOLD_KB ]; then break else - OLDEST_ARCHIVE_FILE=$(find /var/log -type f -printf '%T+ %p\n' | grep -E '.+\.[0-9]+(\.gz)?$' | sort | head -n 1 | awk '{ print $2; }') + OLDEST_ARCHIVE_FILE=$(find /var/log -type f -printf '%T+ %p\n' | grep -E '.+\.[0-9]+(\.gz)?$' | sort | awk 'NR == 1 {print $2}') if [ -z "$OLDEST_ARCHIVE_FILE" ]; then logger -p syslog.err -t "logrotate" "No archive file to delete -- potential for filling up /var/log partition!" From 11af27d154598e0390f4c369a96edf2216fef2e3 Mon Sep 17 00:00:00 2001 From: Stephen Sun <5379172+stephenxs@users.noreply.github.com> Date: Sat, 27 Jul 2024 08:34:40 +0800 Subject: [PATCH 055/117] Support yang model for buffer pool percentage (#19358) #### Why I did it Support yang model for `percentage` field in `BUFFER_POOL` table. It is used in dynamic buffer model only and represents the percentage of a buffer pool's size compared to the available memory size #### How I did it #### How to verify it Unit test and manual test --- src/sonic-yang-models/doc/Configuration.md | 4 +- .../tests/files/sample_config_db.json | 6 ++ .../yang_model_tests/tests/buffer_pool.json | 18 ++++ .../tests_config/buffer_pool.json | 85 +++++++++++++++++++ .../yang-models/sonic-buffer-pool.yang | 18 ++++ 5 files changed, 130 insertions(+), 1 deletion(-) diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md index 088b4e545e91..3c2401597cd3 100644 --- a/src/sonic-yang-models/doc/Configuration.md +++ b/src/sonic-yang-models/doc/Configuration.md @@ -573,6 +573,7 @@ When the system is running in traditional buffer model, the size of all of the b ``` When the system is running in dynamic buffer model, the size of some of the buffer pools can be omitted and will be dynamically calculated. +In this case, A percentage can be configured on a pool, representing how many the available buffer can be allloced to the pool. ``` { @@ -584,11 +585,12 @@ When the system is running in dynamic buffer model, the size of some of the buff }, "egress_lossy_pool": { "type": "egress", - "mode": "dynamic", + "mode": "dynamic" }, "ingress_lossless_pool": { "type": "ingress", "mode": "dynamic", + "percentage": "80" } } } diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index 8ebb1d655675..534a0d986480 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -36,6 +36,11 @@ "size": "12766208", "type": "egress", "mode": "dynamic" + }, + "ingress_percentage_pool": { + "type": "ingress", + "mode": "dynamic", + "percentage": "90" } }, "BUFFER_PROFILE": { @@ -351,6 +356,7 @@ }, "DEVICE_METADATA": { "localhost": { + "buffer_model": "dynamic", "type": "ToRRouter", "asic_id": "06:00.0", "mac": "00:11:22:33:dd:5a", diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json b/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json index 974ece55dd79..ff35fc7357d1 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/buffer_pool.json @@ -39,5 +39,23 @@ "BUFFER_POOL_WRONG_SIZE_VALUE": { "desc": "BUFFER_POOL_WRONG_SIZE_VALUE pattern failure.", "eStr": "wrong" + }, + "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE": { + "desc": "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE no failure." + }, + "BUFFER_POOL_CORRECT_LARGE_PERCENTAGE_VALUE": { + "desc": "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE no failure." + }, + "BUFFER_POOL_WRONG_PERCENTAGE_NEGATIVE_VALUE": { + "desc": "BUFFER_POOL_WRONG_PERCENTAGE_NEGATIVE_VALUE pattern failure.", + "eStr": "Invalid value" + }, + "BUFFER_POOL_WRONG_PERCENTAGE_NOT_A_NUMBER_VALUE": { + "desc": "BUFFER_POOL_WRONG_PERCENTAGE_NOT_A_NUMBER_VALUE pattern failure.", + "eStr": "Invalid value" + }, + "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_WITH_SIZE": { + "desc": "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_WITH_SIZE pattern failure.", + "eStr": "Percentage should not be configured along with size" } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json index a2a4d6fc1f0e..47ce26357d4b 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/buffer_pool.json @@ -167,5 +167,90 @@ ] } } + }, + "BUFFER_POOL_CORRECT_PERCENTAGE_VALUE": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "localhost":{ + "buffer_model": "dynamic" + } + } + }, + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "ingress_lossless_pool", + "mode": "dynamic", + "percentage": "99", + "type": "ingress" + } + ] + } + } + }, + "BUFFER_POOL_CORRECT_LARGE_PERCENTAGE_VALUE": { + "sonic-device_metadata:sonic-device_metadata": { + "sonic-device_metadata:DEVICE_METADATA": { + "localhost":{ + "buffer_model": "dynamic" + } + } + }, + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "ingress_lossless_pool", + "mode": "dynamic", + "percentage": "200", + "type": "ingress" + } + ] + } + } + }, + "BUFFER_POOL_WRONG_PERCENTAGE_NEGATIVE_VALUE": { + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "ingress_lossless_pool", + "mode": "static", + "percentage": "-10", + "type": "ingress" + } + ] + } + } + }, + "BUFFER_POOL_WRONG_PERCENTAGE_NOT_A_NUMBER_VALUE": { + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "ingress_lossless_pool", + "mode": "static", + "percentage": "NaN", + "type": "ingress" + } + ] + } + } + }, + "BUFFER_POOL_WRONG_PERCENTAGE_VALUE_WITH_SIZE": { + "sonic-buffer-pool:sonic-buffer-pool": { + "sonic-buffer-pool:BUFFER_POOL": { + "BUFFER_POOL_LIST": [ + { + "name": "ingress_lossless_pool", + "mode": "static", + "percentage": "90", + "size": "12766208", + "type": "ingress" + } + ] + } + } } } diff --git a/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang b/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang index dd8c74c13ab5..174e6b2a0b38 100644 --- a/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang +++ b/src/sonic-yang-models/yang-models/sonic-buffer-pool.yang @@ -2,6 +2,10 @@ module sonic-buffer-pool { namespace "http://github.com/sonic-net/sonic-buffer-pool"; prefix bpl; + import sonic-device_metadata { + prefix device_metadata; + } + organization "SONiC"; @@ -57,6 +61,20 @@ module sonic-buffer-pool { type uint64; description "Buffer Pool Xoff Threshold (in Bytes)"; } + + leaf percentage { + type uint8; + description " + Buffer Pool percentage. + The buffer pool size will be available_buffer * percentage / 100 if percentage is provided. + It is valid in dynamic buffer model only."; + must "(not(current()/../size))" { + error-message "Percentage should not be configured along with size"; + } + must "/device_metadata:sonic-device_metadata/device_metadata:DEVICE_METADATA/device_metadata:localhost/device_metadata:buffer_model = 'dynamic'" { + error-message "Percentage must be configured in dynamic buffer model"; + } + } } } } From fee869234aaf89df1b2f979d8d1e143c067682d9 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:04:06 +0800 Subject: [PATCH 056/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19720) #### Why I did it src/sonic-utilities ``` * 84cb00a4 - (HEAD -> master, origin/master, origin/HEAD) Change the default behavior of show ip bgp network (#3447) (11 hours ago) [Changrong Wu] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index 9b24421aacaa..84cb00a4b2d7 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 9b24421aacaaa496f65fbab39e918283886205e5 +Subproject commit 84cb00a4b2d7e8fb2bcab259367836fa11a17d0a From 9ed57bc1d887fd20e9b9e6b0c92a9110ecdcbc15 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:04:11 +0800 Subject: [PATCH 057/117] [submodule] Update submodule sonic-linux-kernel to the latest HEAD automatically (#19719) #### Why I did it src/sonic-linux-kernel ``` * b9ac5dd - (HEAD -> master, origin/master, origin/HEAD) [Micas] Enable CONFIG_SENSORS_ISL68137 and CONFIG_SENSORS_INA3221 (#417) (4 hours ago) [Philo] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-linux-kernel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-linux-kernel b/src/sonic-linux-kernel index 98e4af96b655..b9ac5ddff682 160000 --- a/src/sonic-linux-kernel +++ b/src/sonic-linux-kernel @@ -1 +1 @@ -Subproject commit 98e4af96b65564b161e1fd66f31323121f56b302 +Subproject commit b9ac5ddff682490432c080562670888128f0a2b6 From 3ff9f4fa06603101605fab64d79e56a722b830ba Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sun, 28 Jul 2024 19:04:40 +0800 Subject: [PATCH 058/117] [submodule] Update submodule sonic-sairedis to the latest HEAD automatically (#19721) #### Why I did it src/sonic-sairedis ``` * 8d0f5ebf - (HEAD -> master, origin/master, origin/HEAD) Moving SAI failure dump handling above the ignore for non temp view (#1402) (14 hours ago) [Sudharsan Dhamal Gopalarathnam] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-sairedis | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-sairedis b/src/sonic-sairedis index a988dd1b7b90..8d0f5ebf0163 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit a988dd1b7b9044fd7ca859ecdfa1eb858cc3ea08 +Subproject commit 8d0f5ebf0163c4d5a68190e9af4ea9ceb7ba987a From 66e491dc60b614c820fbce4f52694daad5d7875c Mon Sep 17 00:00:00 2001 From: Yuanzhe <150663541+yuazhe@users.noreply.github.com> Date: Mon, 29 Jul 2024 14:19:46 +0800 Subject: [PATCH 059/117] [Mellanox] fix sfp eeprom unreadable after switching from SW to FW control mode (#19563) - Why I did it The reading of eeprom instantly after switch the module from sw control to fw control might fail, so add a delay Signed-off-by: Yuanzhe, Liu --- .../sonic_platform/chassis.py | 4 +++- .../mlnx-platform-api/sonic_platform/sfp.py | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py index a616b28e0c02..1db831f586f1 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/chassis.py @@ -499,16 +499,18 @@ def get_change_event_for_module_host_management_mode(self, timeout): s.on_event(event) if s.in_stable_state(): + self.sfp_module.SFP.wait_sfp_eeprom_ready([s], 2) s.fill_change_event(port_dict) s.refresh_poll_obj(self.poll_obj, self.registered_fds) else: logger.log_debug(f'SFP {sfp_index} does not reach stable state, state={s.state}') - + ready_sfp_set = wait_ready_task.get_ready_set() for sfp_index in ready_sfp_set: s = self._sfp_list[sfp_index] s.on_event(sfp.EVENT_RESET_DONE) if s.in_stable_state(): + self.sfp_module.SFP.wait_sfp_eeprom_ready([s], 2) s.fill_change_event(port_dict) s.refresh_poll_obj(self.poll_obj, self.registered_fds) else: diff --git a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py index 8ced4a08dad7..342dff2b603c 100644 --- a/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py +++ b/platform/mellanox/mlnx-platform-api/sonic_platform/sfp.py @@ -500,6 +500,21 @@ def get_presence(self): return False eeprom_raw = self._read_eeprom(0, 1, log_on_error=False) return eeprom_raw is not None + + @classmethod + def wait_sfp_eeprom_ready(cls, sfp_list, wait_time): + not_ready_list = sfp_list + + while wait_time > 0: + not_ready_list = [s for s in not_ready_list if s.state == STATE_FW_CONTROL and s._read_eeprom(0, 2,False) is None] + if not_ready_list: + time.sleep(0.1) + wait_time -= 0.1 + else: + return + + for s in not_ready_list: + logger.log_error(f'SFP {s.sdk_index} eeprom is not ready') # read eeprom specfic bytes beginning from offset with size as num_bytes def read_eeprom(self, offset, num_bytes): @@ -1723,7 +1738,8 @@ def initialize_sfp_modules(cls, sfp_list): logger.log_error(f'SFP {index} is not in stable state after initializing, state={s.state}') logger.log_notice(f'SFP {index} is in state {s.state} after module initialization') - + cls.wait_sfp_eeprom_ready(sfp_list, 2) + class RJ45Port(NvidiaSFPCommon): """class derived from SFP, representing RJ45 ports""" From 02131809b54f043e524a3786f982965d86c397ff Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Mon, 29 Jul 2024 16:01:23 +0800 Subject: [PATCH 060/117] [submodule] Update submodule sonic-host-services to the latest HEAD automatically (#19665) #### Why I did it src/sonic-host-services ``` * ca6b3cd - (HEAD -> master, origin/master, origin/HEAD) Fix security vulnerability in caclmgrd (#139) (5 days ago) [Zhaohui Sun] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-host-services | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-host-services b/src/sonic-host-services index cfb3cb89aff0..ca6b3cdb9a56 160000 --- a/src/sonic-host-services +++ b/src/sonic-host-services @@ -1 +1 @@ -Subproject commit cfb3cb89aff003290db547b78657528d0f20914c +Subproject commit ca6b3cdb9a56604765ada4ac67234c117f0fb5ad From d0d8b9f84083e545857749605ea7cf9a342a1f39 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Wed, 31 Jul 2024 19:00:59 +0800 Subject: [PATCH 061/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19742) #### Why I did it src/sonic-utilities ``` * ff2c73f8 - (HEAD -> master, origin/master, origin/HEAD) Add namespace check for multiasic (#3458) (4 hours ago) [Xincun Li] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index 84cb00a4b2d7..ff2c73f85ca2 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 84cb00a4b2d7e8fb2bcab259367836fa11a17d0a +Subproject commit ff2c73f85ca24dea2634dc5ec83956f27ab9e32b From 4e78b11c96192d3c1e4332d5bca9c415ad7c1c9d Mon Sep 17 00:00:00 2001 From: Vivek Date: Wed, 31 Jul 2024 08:17:46 -0700 Subject: [PATCH 062/117] [Mellanox] Avoid attaching lossless buffer profiles for internal ports (#18978) [Mellanox] Avoid attaching lossless buffer profiles for internal ports (#18978) Signed-off-by: Vivek Reddy --- .../Mellanox-SN4700-O28/buffers.json.j2 | 2 +- .../buffers_defaults_objects.j2 | 436 ++++++- .../buffers_defaults_t0.j2 | 39 +- .../buffers_defaults_t1.j2 | 39 +- .../buffers_dynamic.json.j2 | 2 +- .../Mellanox-SN4700-O28/pg_profile_lookup.ini | 2 +- .../Mellanox-SN4700-O28/port_config.ini | 2 +- files/build_templates/buffers_config.j2 | 9 +- files/build_templates/qos_config.j2 | 27 +- src/sonic-config-engine/tests/common_utils.py | 15 + ...mellanox-4700-t1-minigraph-smartswitch.xml | 1082 +++++++++++++++++ .../qos-mellanox4700-o28-t1-smartswitch.json | 814 +++++++++++++ ...s-mellanox4700-o28-t1-smartswitch_dyn.json | 870 +++++++++++++ src/sonic-config-engine/tests/test_j2files.py | 52 + 14 files changed, 3378 insertions(+), 13 deletions(-) mode change 120000 => 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_objects.j2 mode change 120000 => 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t0.j2 mode change 120000 => 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t1.j2 create mode 100644 src/sonic-config-engine/tests/sample-mellanox-4700-t1-minigraph-smartswitch.xml create mode 100644 src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4700-o28-t1-smartswitch.json create mode 100644 src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4700-o28-t1-smartswitch_dyn.json diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers.json.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers.json.j2 index add8bf8bb7c2..b57f1dc31b43 120000 --- a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers.json.j2 +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers.json.j2 @@ -1 +1 @@ -../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/buffers.json.j2 \ No newline at end of file +../Mellanox-SN4700-O8C48/buffers.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_objects.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_objects.j2 deleted file mode 120000 index 33b6704f9902..000000000000 --- a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_objects.j2 +++ /dev/null @@ -1 +0,0 @@ -../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/buffers_defaults_objects.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_objects.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_objects.j2 new file mode 100644 index 000000000000..20273084f7de --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_objects.j2 @@ -0,0 +1,435 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} + +{% set PORT_DPC = [] %} +{%- for port in PORT %} + {%- if 'role' in PORT[port] and PORT[port]['role'] == 'Dpc' %} + {%- if PORT_DPC.append(port) %}{%- endif %} + {%- endif %} +{%- endfor %} + +{% set PROFILE_PORT_MAP = { + "BUFFER_PORT_INGRESS_PROFILE_LIST": { + "Dpc": { + "active": { + "dynamic": "ingress_lossy_profile", + "static": "ingress_lossy_profile" + }, + "inactive": { + "dynamic": "ingress_lossy_profile", + "static": "ingress_lossy_zero_profile" + } + }, + "Ext": { + "active": { + "dynamic": "ingress_lossless_profile", + "static": "ingress_lossless_profile" + }, + "inactive": { + "dynamic": "ingress_lossless_profile", + "static": "ingress_lossless_zero_profile" + } + } + }, + "BUFFER_PORT_EGRESS_PROFILE_LIST": { + "Dpc": { + "active": { + "dynamic": "egress_lossy_profile", + "static": "egress_lossy_profile" + }, + "inactive": { + "dynamic": "egress_lossy_profile", + "static": "egress_lossy_zero_profile" + } + }, + "Ext": { + "active": { + "dynamic": "egress_lossless_profile,egress_lossy_profile", + "static": "egress_lossless_profile,egress_lossy_profile" + }, + "inactive": { + "dynamic": "egress_lossless_profile,egress_lossy_profile", + "static": "egress_lossless_zero_profile,egress_lossy_zero_profile" + } + } + }, + "BUFFER_QUEUE": { + "Dpc": { + "active": { + "dynamic": "q_lossy_profile", + "static": "q_lossy_profile" + }, + "inactive": { + "dynamic": "q_lossy_profile", + "static": "egress_lossy_zero_profile" + } + }, + "Ext": { + "active": { + "dynamic": "egress_lossless_profile", + "static": "egress_lossless_profile" + }, + "inactive": { + "dynamic": "egress_lossless_profile", + "static": "egress_lossless_zero_profile" + } + } + }, + "BUFFER_PG": { + "Dpc": { + "active": { + "dynamic": "ingress_lossy_profile", + "static": "ingress_lossy_profile" + }, + "inactive": { + "dynamic": "ingress_lossy_profile", + "static": "ingress_lossy_pg_zero_profile" + } + }, + "Ext": { + "active": { + "dynamic": "NULL" + }, + "inactive": { + "dynamic": "ingress_lossy_profile", + "static": "ingress_lossy_pg_zero_profile" + } + } + } +} %} + +{%- macro find_profile_to_attach(table, port, active_status, dynamic_status) -%} +{% if port in PORT_DPC %} +"{{PROFILE_PORT_MAP[table]['Dpc'][active_status][dynamic_status]}}" +{% else %} +"{{PROFILE_PORT_MAP[table]['Ext'][active_status][dynamic_status]}}" +{% endif %} +{%- endmacro %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} + "BUFFER_POOL": { + {% if dynamic_mode is not defined and port_names_inactive|length > 0 -%} + "ingress_zero_pool" : { + "mode": "static", + "type": "ingress", + "size": "0" + }, + {% endif -%} + "ingress_lossless_pool": { + {% if dynamic_mode is not defined -%} + "size": "{{ ingress_lossless_pool_size }}", + "xoff": "{{ ingress_lossless_pool_xoff }}", + {% endif -%} + "type": "ingress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "{{ egress_lossless_pool_size }}", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossy_pool": { + {% if dynamic_mode is not defined -%} + "size": "{{ egress_lossy_pool_size }}", + {% endif -%} + "type": "egress", + "mode": "dynamic" + } + }, + "BUFFER_PROFILE": { + {% if dynamic_mode is not defined and port_names_inactive|length > 0 -%} + "ingress_lossy_pg_zero_profile" : { + "pool":"ingress_zero_pool", + "size":"0", + "static_th":"0" + }, + "ingress_lossless_zero_profile" : { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"-8" + }, + "egress_lossless_zero_profile" : { + "pool":"egress_lossless_pool", + "size":"0", + "dynamic_th":"-8" + }, + "egress_lossy_zero_profile" : { + "pool":"egress_lossy_pool", + "size":"0", + "dynamic_th":"-8" + }, + {% endif -%} + "ingress_lossless_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "ingress_lossy_profile": { + "pool":"ingress_lossless_pool", + "size":"0", + "dynamic_th":"3" + }, + "egress_lossless_profile": { + "pool":"egress_lossless_pool", + "size":"0", + "dynamic_th":"7" + }, + "egress_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"9216", + "dynamic_th":"7" + }, + "q_lossy_profile": { + "pool":"egress_lossy_pool", + "size":"0", + "dynamic_th":"3" + } + }, +{%- endmacro %} + +{%- macro generate_profile_lists(port_names_active, port_names_inactive) %} + "BUFFER_PORT_INGRESS_PROFILE_LIST": { +{% for port in port_names_active.split(',') %} + "{{ port }}": { + "profile_list" : {{find_profile_to_attach('BUFFER_PORT_INGRESS_PROFILE_LIST', port, 'active', 'static')}} + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% if port_names_inactive|length > 0 %} +, +{% for port in port_names_inactive.split(',') %} + "{{ port }}": { +{% if dynamic_mode is defined %} + "profile_list" : {{find_profile_to_attach('BUFFER_PORT_INGRESS_PROFILE_LIST', port, 'inactive', 'dynamic')}} +{% else %} + "profile_list" : {{find_profile_to_attach('BUFFER_PORT_INGRESS_PROFILE_LIST', port, 'inactive', 'static')}} +{% endif %} + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} + }, + "BUFFER_PORT_EGRESS_PROFILE_LIST": { +{% for port in port_names_active.split(',') %} + "{{ port }}": { + "profile_list" : {{find_profile_to_attach('BUFFER_PORT_EGRESS_PROFILE_LIST', port, 'active', 'static')}} + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% if port_names_inactive|length > 0 %} +, +{% for port in port_names_inactive.split(',') %} + "{{ port }}": { +{% if dynamic_mode is defined %} + "profile_list" : {{find_profile_to_attach('BUFFER_PORT_EGRESS_PROFILE_LIST', port, 'inactive', 'dynamic')}} +{% else %} + "profile_list" : {{find_profile_to_attach('BUFFER_PORT_EGRESS_PROFILE_LIST', port, 'inactive', 'static')}} +{% endif %} + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} + } +{%- endmacro %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues(port_names_active, port_names_extra_queues, port_names_inactive) %} + "BUFFER_QUEUE": { +{% set q_loop = namespace(last_valid=false) %} +{% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_queues.split(',') %} + "{{ port }}|3-4": { + "profile" : {{find_profile_to_attach('BUFFER_QUEUE', port, 'active', 'static')}} + }, +{% endif %} +{% endfor %} +{% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_queues.split(',') %} + "{{ port }}|0-2": { + "profile" : "q_lossy_profile" + }, +{% endif %} +{% endfor %} +{% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_queues.split(',') %} +{% if port_names_extra_queues|length > 0 %} + "{{ port }}|5-7": { +{% else %} + "{{ port }}|5-6": { +{% endif %} + "profile" : "q_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% set q_loop.last_valid = true %} +{% else %} +{% set q_loop.last_valid = false %} +{% endif %} +{% endfor %} +{% if port_names_extra_queues|length > 0 %} +{% if q_loop.last_valid %},{% endif %} +{% for port in port_names_extra_queues.split(',') %} + "{{ port }}|0-1": { + "profile" : "q_lossy_profile" + }, + "{{ port }}|2-4": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|5": { + "profile" : "q_lossy_profile" + }, + "{{ port }}|6": { + "profile" : "egress_lossless_profile" + }, + "{{ port }}|7": { + "profile" : "q_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} +{% if port_names_inactive|length > 0 %} +, +{% if dynamic_mode is defined %} +{% for port in port_names_inactive.split(',') %} + "{{ port }}|3-4": { + "profile" : {{find_profile_to_attach('BUFFER_QUEUE', port, 'inactive', 'dynamic')}} + }, +{% endfor %} +{% for port in port_names_inactive.split(',') %} + "{{ port }}|0-2": { + "profile" : "q_lossy_profile" + }, +{% endfor %} +{% for port in port_names_inactive.split(',') %} +{% if port_names_extra_queues|length > 0 %} + "{{ port }}|5-7": { +{% else %} + "{{ port }}|5-6": { +{% endif %} + "profile" : "q_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% else %} +{% for port in port_names_inactive.split(',') %} + "{{ port }}|3-4": { + "profile" : {{find_profile_to_attach('BUFFER_QUEUE', port, 'inactive', 'static')}} + }, +{% endfor %} +{% for port in port_names_inactive.split(',') %} + "{{ port }}|0-2": { + "profile" : "egress_lossy_zero_profile" + }, +{% endfor %} +{% for port in port_names_inactive.split(',') %} +{% if port_names_extra_queues|length > 0 %} + "{{ port }}|5-7": { +{% else %} + "{{ port }}|5-6": { +{% endif %} + "profile" : "egress_lossy_zero_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} +{% endif %} + } +{%- endmacro %} + +{%- macro generate_queue_buffers(port_names_active, port_names_inactive) %} +{{ generate_queue_buffers_with_extra_lossless_queues(port_names_active, "", port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_extra_lossless_pgs(port_names_active, port_names_extra_pgs, port_names_inactive) %} + "BUFFER_PG": { +{% set pg_loop = namespace(last_valid=false) %} +{% for port in port_names_active.split(',') %} +{% if port not in port_names_extra_pgs.split(',') %} +{% if dynamic_mode is defined %} + "{{ port }}|3-4": { + "profile" : {{find_profile_to_attach('BUFFER_PG', port, 'active', 'dynamic')}} + }, +{% else %} +{% if port in PORT_DPC %} + "{{ port }}|3-4": { + "profile" : {{find_profile_to_attach('BUFFER_PG', port, 'active', 'static')}} + }, +{% endif %} +{% endif %} + "{{ port }}|0": { + "profile" : "ingress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% set pg_loop.last_valid = true %} +{% else %} +{% set pg_loop.last_valid = false %} +{% endif %} +{% endfor %} +{% if port_names_extra_pgs|length > 0 %} +{% if pg_loop.last_valid %},{% endif %} +{% for port in port_names_extra_pgs.split(',') %} +{% if dynamic_mode is defined %} + "{{ port }}|2-4": { + "profile" : {{find_profile_to_attach('BUFFER_PG', port, 'active', 'dynamic')}} + }, + "{{ port }}|6": { + "profile" : {{find_profile_to_attach('BUFFER_PG', port, 'active', 'dynamic')}} + }, +{% else %} +{% if port in PORT_DPC %} + "{{ port }}|2-4": { + "profile" : {{find_profile_to_attach('BUFFER_PG', port, 'active', 'static')}} + }, + "{{ port }}|6": { + "profile" : {{find_profile_to_attach('BUFFER_PG', port, 'active', 'static')}} + }, +{% endif %} +{% endif %} + "{{ port }}|0": { + "profile" : "ingress_lossy_profile" + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} +{% if port_names_inactive|length > 0 %} +{%- for port in port_names_inactive.split(',') %} + {%- if loop.first -%},{%- endif -%} +{% if dynamic_mode is defined %} + "{{ port }}|3-4": { + "profile" : {{find_profile_to_attach('BUFFER_PG', port, 'inactive', 'dynamic')}} + }, +{% else %} +{% if port in PORT_DPC %} + "{{ port }}|3-4": { + "profile" : {{find_profile_to_attach('BUFFER_PG', port, 'inactive', 'static')}} + }, +{% endif %} +{% endif %} + "{{ port }}|0": { +{% if dynamic_mode is defined %} + "profile" : "ingress_lossy_profile" +{% else %} + "profile" : "ingress_lossy_pg_zero_profile" +{% endif %} + }{% if not loop.last %},{% endif %} + +{% endfor %} +{% endif %} + } +{%- endmacro %} + +{%- macro generate_pg_profiles(port_names_active, port_names_inactive) %} +{{ generate_pg_profiles_with_extra_lossless_pgs(port_names_active, "", port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t0.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t0.j2 deleted file mode 120000 index 38216fb84301..000000000000 --- a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t0.j2 +++ /dev/null @@ -1 +0,0 @@ -../ACS-MSN4700/buffers_defaults_t0.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t0.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..175618cc95be --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t0.j2 @@ -0,0 +1,38 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '5m' %} +{% set ingress_lossless_pool_size = '52219872' %} +{% set ingress_lossless_pool_xoff = '3305376' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '52219872' %} + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t1.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t1.j2 deleted file mode 120000 index c09ab38502d4..000000000000 --- a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t1.j2 +++ /dev/null @@ -1 +0,0 @@ -../ACS-MSN4700/buffers_defaults_t1.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t1.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..39cee7576e2c --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_defaults_t1.j2 @@ -0,0 +1,38 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '300m' %} +{% set ingress_lossless_pool_size = '49934304' %} +{% set ingress_lossless_pool_xoff = '5590944' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '49934304' %} + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_dynamic.json.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_dynamic.json.j2 index 8c4117c66214..d5a441408f93 120000 --- a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_dynamic.json.j2 +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/buffers_dynamic.json.j2 @@ -1 +1 @@ -../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/buffers_dynamic.json.j2 \ No newline at end of file +../Mellanox-SN4700-O8C48/buffers_dynamic.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/pg_profile_lookup.ini b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/pg_profile_lookup.ini index 7813e1697844..66cab04d2c42 120000 --- a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/pg_profile_lookup.ini +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/pg_profile_lookup.ini @@ -1 +1 @@ -../ACS-MSN4700/pg_profile_lookup.ini \ No newline at end of file +../Mellanox-SN4700-C128/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/port_config.ini b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/port_config.ini index bdc1dc6766f9..3e9701359868 100644 --- a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/port_config.ini +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28/port_config.ini @@ -1,5 +1,5 @@ ## -## Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. +## Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. ## Apache-2.0 ## ## Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/files/build_templates/buffers_config.j2 b/files/build_templates/buffers_config.j2 index d6d89e33be0b..9787bec1bd68 100644 --- a/files/build_templates/buffers_config.j2 +++ b/files/build_templates/buffers_config.j2 @@ -113,6 +113,7 @@ def {%- set PORT_ALL = [] %} {%- set PORT_BP = [] %} +{%- set PORT_DPC = [] %} {%- set SYSTEM_PORT_ALL = [] %} {%- if voq_chassis %} @@ -135,6 +136,9 @@ def {%- for port in PORT %} {%- if not port.startswith('Ethernet-Rec') and not port.startswith('Ethernet-IB') %} {%- if PORT_ALL.append(port) %}{%- endif %} + {%- if 'role' in PORT[port] and PORT[port]['role'] == 'Dpc' %} + {%- if PORT_DPC.append(port) %}{%- endif %} + {%- endif %} {%- endif %} {%- endfor %} {%- if defs.generate_bp_port_list is defined %} @@ -153,8 +157,11 @@ def {%- for port in PORT_BP %} {%- if PORT_ACTIVE.append(port) %}{%- endif %} {%- endfor %} + {%- for port in PORT_DPC %} + {%- if PORT_ACTIVE.append(port) %}{%- endif %} + {%- endfor %} {%- for port in PORT_ALL %} - {%- if port not in DEVICE_NEIGHBOR.keys() %} + {%- if port not in DEVICE_NEIGHBOR.keys() and port not in PORT_DPC %} {%- if PORT_INACTIVE.append(port) %}{%- endif %} {%- endif %} {%- endfor %} diff --git a/files/build_templates/qos_config.j2 b/files/build_templates/qos_config.j2 index a85d4f1e4ee0..bf5007471a48 100644 --- a/files/build_templates/qos_config.j2 +++ b/files/build_templates/qos_config.j2 @@ -1,5 +1,6 @@ {%- set PORT_ALL = [] %} {%- set PORT_BP = [] %} +{%- set PORT_DPC = [] %} {%- set SYSTEM_PORT_ALL = [] %} {%- set voq_chassis = false %} @@ -22,6 +23,9 @@ {%- for port in PORT %} {%- if not port.startswith('Ethernet-Rec') and not port.startswith('Ethernet-IB') %} {%- if PORT_ALL.append(port) %}{% endif %} + {%- if 'role' in PORT[port] and PORT[port]['role'] == 'Dpc' %} + {%- if PORT_DPC.append(port) %}{%- endif %} + {%- endif %} {%- endif %} {%- endfor %} {%- if generate_bp_port_list is defined %} @@ -47,6 +51,9 @@ {%- for port in PORT_BP %} {%- if PORT_ACTIVE.append(port) %}{%- endif %} {%- endfor %} + {%- for port in PORT_DPC %} + {%- if PORT_ACTIVE.append(port) %}{%- endif %} + {%- endfor %} {%- endif %} {%- if PORT_ACTIVE | sort_by_port_index %}{% endif %} @@ -321,8 +328,6 @@ {% else %} "tc_to_queue_map" : "AZURE", {% endif %} - "tc_to_pg_map" : "AZURE", - "pfc_to_queue_map": "AZURE", {% if asic_type in pfc_to_pg_map_supported_asics %} {% if port in port_names_list_extra_queues %} "pfc_to_pg_map" : "AZURE_DUALTOR", @@ -330,12 +335,16 @@ "pfc_to_pg_map" : "AZURE", {% endif %} {% endif %} +{% if port not in PORT_DPC %} {% if port in port_names_list_extra_queues %} "pfc_enable" : "2,3,4,6", {% else %} "pfc_enable" : "3,4", {% endif %} - "pfcwd_sw_enable" : "3,4" + "pfcwd_sw_enable" : "3,4", +{% endif %} + "tc_to_pg_map" : "AZURE", + "pfc_to_queue_map": "AZURE" }{% if not loop.last %},{% endif %} {% endfor %} @@ -426,8 +435,12 @@ {% else %} {% for port in PORT_ACTIVE %} "{{ port }}|3": { +{% if port not in PORT_DPC %} "scheduler" : "scheduler.1", "wred_profile": "AZURE_LOSSLESS" +{% else %} + "scheduler": "scheduler.0" +{% endif %} }, {% endfor %} {% if 'resource_type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['resource_type'] in apollo_resource_types %} @@ -440,8 +453,12 @@ {% else %} {% for port in PORT_ACTIVE %} "{{ port }}|4": { +{% if port not in PORT_DPC %} "scheduler" : "scheduler.1", "wred_profile": "AZURE_LOSSLESS" +{% else %} + "scheduler": "scheduler.0" +{% endif %} }, {% endfor %} {% endif %} @@ -457,7 +474,7 @@ {% endfor %} {% for port in PORT_ACTIVE %} "{{ port }}|2": { -{% if port in port_names_list_extra_queues %} +{% if port in port_names_list_extra_queues and port not in PORT_DPC %} "scheduler" : "scheduler.1", "wred_profile": "AZURE_LOSSLESS" {% else %} @@ -478,7 +495,7 @@ {% endfor %} {% for port in PORT_ACTIVE %} "{{ port }}|6": { -{% if port in port_names_list_extra_queues %} +{% if port in port_names_list_extra_queues and port not in PORT_DPC %} "scheduler" : "scheduler.1", "wred_profile": "AZURE_LOSSLESS" {% else %} diff --git a/src/sonic-config-engine/tests/common_utils.py b/src/sonic-config-engine/tests/common_utils.py index 1a2a36805530..a5a15c45be42 100644 --- a/src/sonic-config-engine/tests/common_utils.py +++ b/src/sonic-config-engine/tests/common_utils.py @@ -97,3 +97,18 @@ def cmp(file1, file2): return obj1 == obj2 except: return filecmp.cmp(file1, file2) + +def cmp_tables(f_rcvd, f_exp): + """ Check if the tables present in rcvd matches with exp """ + try: + with open(f_rcvd, 'r') as f: + rcvd = json.load(f) + with open(f_exp, 'r') as f: + exp = json.load(f) + + for key in rcvd.keys(): + print(key, rcvd[key], exp.get(key,{})) + assert rcvd[key] == exp.get(key,{}) + except Exception as e: + return False + return True diff --git a/src/sonic-config-engine/tests/sample-mellanox-4700-t1-minigraph-smartswitch.xml b/src/sonic-config-engine/tests/sample-mellanox-4700-t1-minigraph-smartswitch.xml new file mode 100644 index 000000000000..6f47baf933b7 --- /dev/null +++ b/src/sonic-config-engine/tests/sample-mellanox-4700-t1-minigraph-smartswitch.xml @@ -0,0 +1,1082 @@ + + + + + + false + mtvr-leopard-01 + 10.0.0.32 + ARISTA01T0 + 10.0.0.33 + 1 + 10 + 3 + + + mtvr-leopard-01 + FC00::8D + ARISTA20T0 + FC00::8E + 1 + 10 + 3 + + + + + 65100 + mtvr-leopard-01 + + +
10.0.0.33
+ + + +
+ +
10.0.0.1
+ + + +
+ +
10.0.0.35
+ + + +
+ +
10.0.0.37
+ + + +
+ +
10.0.0.5
+ + + +
+ +
10.0.0.39
+ + + +
+ +
10.0.0.41
+ + + +
+ +
10.0.0.9
+ + + +
+ +
10.0.0.43
+ + + +
+ +
10.0.0.45
+ + + +
+ +
10.0.0.13
+ + + +
+ +
10.0.0.47
+ + + +
+ +
10.0.0.49
+ + + +
+ +
10.0.0.51
+ + + +
+ +
10.0.0.53
+ + + +
+ +
10.0.0.55
+ + + +
+ +
10.0.0.57
+ + + +
+ +
10.0.0.59
+ + + +
+ +
10.0.0.61
+ + + +
+ +
10.0.0.63
+ + + +
+ +
10.0.0.65
+ + + +
+ +
10.0.0.67
+ + + +
+ +
10.0.0.69
+ + + +
+ +
10.0.0.71
+ + + +
+
+ +
+ + 64001 + ARISTA01T0 + + + + 65200 + ARISTA01T2 + + + + 64002 + ARISTA02T0 + + + + 64003 + ARISTA03T0 + + + + 65200 + ARISTA03T2 + + + + 64004 + ARISTA04T0 + + + + 64005 + ARISTA05T0 + + + + 65200 + ARISTA05T2 + + + + 64006 + ARISTA06T0 + + + + 64007 + ARISTA07T0 + + + + 65200 + ARISTA07T2 + + + + 64008 + ARISTA08T0 + + + + 64009 + ARISTA09T0 + + + + 64010 + ARISTA10T0 + + + + 64011 + ARISTA11T0 + + + + 64012 + ARISTA12T0 + + + + 64013 + ARISTA13T0 + + + + 64014 + ARISTA14T0 + + + + 64015 + ARISTA15T0 + + + + 64016 + ARISTA16T0 + + + + 64017 + ARISTA17T0 + + + + 64018 + ARISTA18T0 + + + + 64019 + ARISTA19T0 + + + + 64020 + ARISTA20T0 + + +
+
+ + + + + HostIP + Loopback0 + + 10.1.0.32/32 + + 10.1.0.32/32 + + + HostIP1 + Loopback0 + + FC00:1::32/128 + + FC00:1::32/128 + + + + + HostIP + eth0 + + 10.210.24.184/22 + + 10.210.24.184/22 + + + + + + + mtvr-leopard-01 + + + PortChannel102 + etp1;etp2 + + + + PortChannel105 + etp3;etp4 + + + + PortChannel108 + etp5;etp6 + + + + PortChannel1011 + etp7;etp8 + + + + + + + + + etp28 + 10.0.0.70/31 + + + + etp28 + FC00::8D/126 + + + + + + NTP_ACL + NTP + NTP + + + SNMP_ACL + SNMP + SNMP + + + VTY_LINE + ssh-only + SSH + + + ERSPAN + Everflow + Everflow + + + ERSPANV6 + EverflowV6 + EverflowV6 + + + PortChannel102;PortChannel105;PortChannel108;PortChannel1011;etp9;etp10;etp11;etp12;etp13;etp14;etp15;etp16;etp17;etp18;etp19;etp20;etp21;etp22;etp23;etp24;etp25;etp26;etp27;etp28 + DataAcl + DataPlane + + + + + + + + + DeviceInterfaceLink + ARISTA20T0 + Ethernet1 + mtvr-leopard-01 + etp28 + 400000 + + + + + mtvr-leopard-01 + Mellanox-SN4700-O28 + + 10.245.20.49 + + + + ARISTA16T0 + + 10.245.32.142 + + Arista-VM + + + ARISTA11T0 + + 10.245.32.137 + + Arista-VM + + + ARISTA10T0 + + 10.245.32.136 + + Arista-VM + + + ARISTA17T0 + + 10.245.32.143 + + Arista-VM + + + ARISTA09T0 + + 10.245.32.135 + + Arista-VM + + + ARISTA20T0 + + 10.245.32.146 + + Arista-VM + + + ARISTA08T0 + + 10.245.32.134 + + Arista-VM + + + ARISTA07T0 + + 10.245.32.133 + + Arista-VM + + + ARISTA07T2 + + 10.245.32.126 + + Arista-VM + + + ARISTA01T2 + + 10.245.32.123 + + Arista-VM + + + ARISTA01T0 + + 10.245.32.127 + + Arista-VM + + + ARISTA05T2 + + 10.245.32.125 + + Arista-VM + + + ARISTA05T0 + + 10.245.32.131 + + Arista-VM + + + ARISTA02T0 + + 10.245.32.128 + + Arista-VM + + + ARISTA03T0 + + 10.245.32.129 + + Arista-VM + + + ARISTA03T2 + + 10.245.32.124 + + Arista-VM + + + ARISTA04T0 + + 10.245.32.130 + + Arista-VM + + + ARISTA18T0 + + 10.245.32.144 + + Arista-VM + + + ARISTA15T0 + + 10.245.32.141 + + Arista-VM + + + ARISTA19T0 + + 10.245.32.145 + + Arista-VM + + + ARISTA14T0 + + 10.245.32.140 + + Arista-VM + + + ARISTA12T0 + + 10.245.32.138 + + Arista-VM + + + ARISTA13T0 + + 10.245.32.139 + + Arista-VM + + + ARISTA06T0 + + 10.245.32.132 + + Arista-VM + + + + + true + + + DeviceInterface + + true + true + 1 + etp1 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp2 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp3 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp4 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp5 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp6 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp7 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp8 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp9 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp10 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp11 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp12 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp13 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp14 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp15 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp16 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp17 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp18 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp19 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp20 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp21 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp22 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp23 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp24 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp25 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp26 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp27 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp28 + + false + 0 + 0 + 400000 + + + DeviceInterface + + true + true + 1 + etp29 + + false + 0 + 0 + 200000 + + + DeviceInterface + + true + true + 1 + etp30 + + false + 0 + 0 + 200000 + + + DeviceInterface + + true + true + 1 + etp31 + + false + 0 + 0 + 200000 + + + DeviceInterface + + true + true + 1 + etp32 + + false + 0 + 0 + 200000 + + + true + 0 + Mellanox-SN4700-O28 + + + + + + mtvr-leopard-01 + + + DeploymentId + + 1 + + + CloudType + + Public + + + QosProfile + + Profile0 + + + DhcpResources + + 192.0.0.1;192.0.0.2;192.0.0.3;192.0.0.4 + + + NtpResources + + 10.210.25.32;10.75.202.2 + + + SnmpResources + + 10.0.0.9 + + + TacacsGroup + + testlab + + + TacacsServer + + 10.7.34.20 + + + ForcedMgmtRoutes + + 10.75.0.0/16;10.213.0.0/16;10.215.0.0/16;10.9.0.0/16;10.212.0.0/16 + + + ErspanDestinationIpv4 + + 10.0.0.7 + + + + + + + mtvr-leopard-01 + Mellanox-SN4700-O28 +
\ No newline at end of file diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4700-o28-t1-smartswitch.json b/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4700-o28-t1-smartswitch.json new file mode 100644 index 000000000000..95add1de513a --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4700-o28-t1-smartswitch.json @@ -0,0 +1,814 @@ +{ + "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map": "AZURE" + }, + "Ethernet216": { + "dscp_to_tc_map": "AZURE", + "tc_to_queue_map": "AZURE", + "pfc_enable": "3,4", + "pfcwd_sw_enable": "3,4", + "tc_to_pg_map": "AZURE", + "pfc_to_queue_map": "AZURE" + }, + "Ethernet224": { + "dscp_to_tc_map": "AZURE", + "tc_to_queue_map": "AZURE", + "tc_to_pg_map": "AZURE", + "pfc_to_queue_map": "AZURE" + }, + "Ethernet232": { + "dscp_to_tc_map": "AZURE", + "tc_to_queue_map": "AZURE", + "tc_to_pg_map": "AZURE", + "pfc_to_queue_map": "AZURE" + }, + "Ethernet240": { + "dscp_to_tc_map": "AZURE", + "tc_to_queue_map": "AZURE", + "tc_to_pg_map": "AZURE", + "pfc_to_queue_map": "AZURE" + }, + "Ethernet248": { + "dscp_to_tc_map": "AZURE", + "tc_to_queue_map": "AZURE", + "tc_to_pg_map": "AZURE", + "pfc_to_queue_map": "AZURE" + } + }, + "QUEUE": { + "Ethernet216|3": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet224|3": { + "scheduler": "scheduler.0" + }, + "Ethernet232|3": { + "scheduler": "scheduler.0" + }, + "Ethernet240|3": { + "scheduler": "scheduler.0" + }, + "Ethernet248|3": { + "scheduler": "scheduler.0" + }, + "Ethernet216|4": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet224|4": { + "scheduler": "scheduler.0" + }, + "Ethernet232|4": { + "scheduler": "scheduler.0" + }, + "Ethernet240|4": { + "scheduler": "scheduler.0" + }, + "Ethernet248|4": { + "scheduler": "scheduler.0" + }, + "Ethernet216|0": { + "scheduler": "scheduler.0" + }, + "Ethernet224|0": { + "scheduler": "scheduler.0" + }, + "Ethernet232|0": { + "scheduler": "scheduler.0" + }, + "Ethernet240|0": { + "scheduler": "scheduler.0" + }, + "Ethernet248|0": { + "scheduler": "scheduler.0" + }, + "Ethernet216|1": { + "scheduler": "scheduler.0" + }, + "Ethernet224|1": { + "scheduler": "scheduler.0" + }, + "Ethernet232|1": { + "scheduler": "scheduler.0" + }, + "Ethernet240|1": { + "scheduler": "scheduler.0" + }, + "Ethernet248|1": { + "scheduler": "scheduler.0" + }, + "Ethernet216|2": { + "scheduler": "scheduler.0" + }, + "Ethernet224|2": { + "scheduler": "scheduler.0" + }, + "Ethernet232|2": { + "scheduler": "scheduler.0" + }, + "Ethernet240|2": { + "scheduler": "scheduler.0" + }, + "Ethernet248|2": { + "scheduler": "scheduler.0" + }, + "Ethernet216|5": { + "scheduler": "scheduler.0" + }, + "Ethernet224|5": { + "scheduler": "scheduler.0" + }, + "Ethernet232|5": { + "scheduler": "scheduler.0" + }, + "Ethernet240|5": { + "scheduler": "scheduler.0" + }, + "Ethernet248|5": { + "scheduler": "scheduler.0" + }, + "Ethernet216|6": { + "scheduler": "scheduler.0" + }, + "Ethernet224|6": { + "scheduler": "scheduler.0" + }, + "Ethernet232|6": { + "scheduler": "scheduler.0" + }, + "Ethernet240|6": { + "scheduler": "scheduler.0" + }, + "Ethernet248|6": { + "scheduler": "scheduler.0" + } + }, + "BUFFER_POOL": { + "ingress_zero_pool": { + "mode": "static", + "type": "ingress", + "size": "0" + }, + "ingress_lossless_pool": { + "size": "49934304", + "xoff": "5590944", + "type": "ingress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "60817392", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossy_pool": { + "size": "49934304", + "type": "egress", + "mode": "dynamic" + } + }, + "BUFFER_PROFILE": { + "ingress_lossy_pg_zero_profile": { + "pool": "ingress_zero_pool", + "size": "0", + "static_th": "0" + }, + "ingress_lossless_zero_profile": { + "pool": "ingress_lossless_pool", + "size": "0", + "dynamic_th": "-8" + }, + "egress_lossless_zero_profile": { + "pool": "egress_lossless_pool", + "size": "0", + "dynamic_th": "-8" + }, + "egress_lossy_zero_profile": { + "pool": "egress_lossy_pool", + "size": "0", + "dynamic_th": "-8" + }, + "ingress_lossless_profile": { + "pool": "ingress_lossless_pool", + "size": "0", + "dynamic_th": "7" + }, + "ingress_lossy_profile": { + "pool": "ingress_lossless_pool", + "size": "0", + "dynamic_th": "3" + }, + "egress_lossless_profile": { + "pool": "egress_lossless_pool", + "size": "0", + "dynamic_th": "7" + }, + "egress_lossy_profile": { + "pool": "egress_lossy_pool", + "size": "9216", + "dynamic_th": "7" + }, + "q_lossy_profile": { + "pool": "egress_lossy_pool", + "size": "0", + "dynamic_th": "3" + } + }, + "BUFFER_PORT_INGRESS_PROFILE_LIST": { + "Ethernet216": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet224": { + "profile_list": "ingress_lossy_profile" + }, + "Ethernet232": { + "profile_list": "ingress_lossy_profile" + }, + "Ethernet240": { + "profile_list": "ingress_lossy_profile" + }, + "Ethernet248": { + "profile_list": "ingress_lossy_profile" + }, + "Ethernet0": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet8": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet16": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet24": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet32": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet40": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet48": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet56": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet64": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet72": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet80": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet88": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet96": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet104": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet112": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet120": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet128": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet136": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet144": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet152": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet160": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet168": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet176": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet184": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet192": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet200": { + "profile_list": "ingress_lossless_zero_profile" + }, + "Ethernet208": { + "profile_list": "ingress_lossless_zero_profile" + } + }, + "BUFFER_PORT_EGRESS_PROFILE_LIST": { + "Ethernet216": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet224": { + "profile_list": "egress_lossy_profile" + }, + "Ethernet232": { + "profile_list": "egress_lossy_profile" + }, + "Ethernet240": { + "profile_list": "egress_lossy_profile" + }, + "Ethernet248": { + "profile_list": "egress_lossy_profile" + }, + "Ethernet0": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet8": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet16": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet24": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet32": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet40": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet48": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet56": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet64": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet72": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet80": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet88": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet96": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet104": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet112": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet120": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet128": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet136": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet144": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet152": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet160": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet168": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet176": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet184": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet192": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet200": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + }, + "Ethernet208": { + "profile_list": "egress_lossless_zero_profile,egress_lossy_zero_profile" + } + }, + "BUFFER_PG": { + "Ethernet216|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet224|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet224|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet232|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet232|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet240|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet240|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet248|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet248|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet0|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet8|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet16|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet24|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet32|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet40|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet48|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet56|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet64|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet72|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet80|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet88|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet96|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet104|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet112|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet120|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet128|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet136|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet144|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet152|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet160|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet168|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet176|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet184|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet192|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet200|0": { + "profile": "ingress_lossy_pg_zero_profile" + }, + "Ethernet208|0": { + "profile": "ingress_lossy_pg_zero_profile" + } + }, + "BUFFER_QUEUE": { + "Ethernet216|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet224|3-4": { + "profile": "q_lossy_profile" + }, + "Ethernet232|3-4": { + "profile": "q_lossy_profile" + }, + "Ethernet240|3-4": { + "profile": "q_lossy_profile" + }, + "Ethernet248|3-4": { + "profile": "q_lossy_profile" + }, + "Ethernet216|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet224|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet232|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet240|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet248|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet216|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet224|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet232|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet240|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet248|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet0|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet8|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet16|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet24|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet32|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet40|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet48|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet56|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet64|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet72|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet80|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet88|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet96|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet104|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet112|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet120|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet128|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet136|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet144|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet152|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet160|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet168|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet176|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet184|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet192|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet200|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet208|3-4": { + "profile": "egress_lossless_zero_profile" + }, + "Ethernet0|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet8|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet16|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet24|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet32|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet40|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet48|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet56|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet64|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet72|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet80|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet88|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet96|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet104|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet112|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet120|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet128|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet136|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet144|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet152|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet160|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet168|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet176|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet184|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet192|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet200|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet208|0-2": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet0|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet8|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet16|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet24|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet32|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet40|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet48|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet56|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet64|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet72|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet80|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet88|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet96|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet104|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet112|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet120|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet128|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet136|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet144|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet152|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet160|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet168|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet176|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet184|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet192|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet200|5-6": { + "profile": "egress_lossy_zero_profile" + }, + "Ethernet208|5-6": { + "profile": "egress_lossy_zero_profile" + } + } +} diff --git a/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4700-o28-t1-smartswitch_dyn.json b/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4700-o28-t1-smartswitch_dyn.json new file mode 100644 index 000000000000..4afe1c8e23cf --- /dev/null +++ b/src/sonic-config-engine/tests/sample_output/py3/qos-mellanox4700-o28-t1-smartswitch_dyn.json @@ -0,0 +1,870 @@ +{ + "PORT_QOS_MAP": { + "global": { + "dscp_to_tc_map": "AZURE" + }, + "Ethernet216": { + "dscp_to_tc_map": "AZURE", + "tc_to_queue_map": "AZURE", + "pfc_enable": "3,4", + "pfcwd_sw_enable": "3,4", + "tc_to_pg_map": "AZURE", + "pfc_to_queue_map": "AZURE" + }, + "Ethernet224": { + "dscp_to_tc_map": "AZURE", + "tc_to_queue_map": "AZURE", + "tc_to_pg_map": "AZURE", + "pfc_to_queue_map": "AZURE" + }, + "Ethernet232": { + "dscp_to_tc_map": "AZURE", + "tc_to_queue_map": "AZURE", + "tc_to_pg_map": "AZURE", + "pfc_to_queue_map": "AZURE" + }, + "Ethernet240": { + "dscp_to_tc_map": "AZURE", + "tc_to_queue_map": "AZURE", + "tc_to_pg_map": "AZURE", + "pfc_to_queue_map": "AZURE" + }, + "Ethernet248": { + "dscp_to_tc_map": "AZURE", + "tc_to_queue_map": "AZURE", + "tc_to_pg_map": "AZURE", + "pfc_to_queue_map": "AZURE" + } + }, + "QUEUE": { + "Ethernet216|3": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet224|3": { + "scheduler": "scheduler.0" + }, + "Ethernet232|3": { + "scheduler": "scheduler.0" + }, + "Ethernet240|3": { + "scheduler": "scheduler.0" + }, + "Ethernet248|3": { + "scheduler": "scheduler.0" + }, + "Ethernet216|4": { + "scheduler": "scheduler.1", + "wred_profile": "AZURE_LOSSLESS" + }, + "Ethernet224|4": { + "scheduler": "scheduler.0" + }, + "Ethernet232|4": { + "scheduler": "scheduler.0" + }, + "Ethernet240|4": { + "scheduler": "scheduler.0" + }, + "Ethernet248|4": { + "scheduler": "scheduler.0" + }, + "Ethernet216|0": { + "scheduler": "scheduler.0" + }, + "Ethernet224|0": { + "scheduler": "scheduler.0" + }, + "Ethernet232|0": { + "scheduler": "scheduler.0" + }, + "Ethernet240|0": { + "scheduler": "scheduler.0" + }, + "Ethernet248|0": { + "scheduler": "scheduler.0" + }, + "Ethernet216|1": { + "scheduler": "scheduler.0" + }, + "Ethernet224|1": { + "scheduler": "scheduler.0" + }, + "Ethernet232|1": { + "scheduler": "scheduler.0" + }, + "Ethernet240|1": { + "scheduler": "scheduler.0" + }, + "Ethernet248|1": { + "scheduler": "scheduler.0" + }, + "Ethernet216|2": { + "scheduler": "scheduler.0" + }, + "Ethernet224|2": { + "scheduler": "scheduler.0" + }, + "Ethernet232|2": { + "scheduler": "scheduler.0" + }, + "Ethernet240|2": { + "scheduler": "scheduler.0" + }, + "Ethernet248|2": { + "scheduler": "scheduler.0" + }, + "Ethernet216|5": { + "scheduler": "scheduler.0" + }, + "Ethernet224|5": { + "scheduler": "scheduler.0" + }, + "Ethernet232|5": { + "scheduler": "scheduler.0" + }, + "Ethernet240|5": { + "scheduler": "scheduler.0" + }, + "Ethernet248|5": { + "scheduler": "scheduler.0" + }, + "Ethernet216|6": { + "scheduler": "scheduler.0" + }, + "Ethernet224|6": { + "scheduler": "scheduler.0" + }, + "Ethernet232|6": { + "scheduler": "scheduler.0" + }, + "Ethernet240|6": { + "scheduler": "scheduler.0" + }, + "Ethernet248|6": { + "scheduler": "scheduler.0" + } + }, + "BUFFER_POOL": { + "ingress_lossless_pool": { + "type": "ingress", + "mode": "dynamic" + }, + "egress_lossless_pool": { + "size": "60817392", + "type": "egress", + "mode": "dynamic" + }, + "egress_lossy_pool": { + "type": "egress", + "mode": "dynamic" + } + }, + "BUFFER_PROFILE": { + "ingress_lossless_profile": { + "pool": "ingress_lossless_pool", + "size": "0", + "dynamic_th": "7" + }, + "ingress_lossy_profile": { + "pool": "ingress_lossless_pool", + "size": "0", + "dynamic_th": "3" + }, + "egress_lossless_profile": { + "pool": "egress_lossless_pool", + "size": "0", + "dynamic_th": "7" + }, + "egress_lossy_profile": { + "pool": "egress_lossy_pool", + "size": "9216", + "dynamic_th": "7" + }, + "q_lossy_profile": { + "pool": "egress_lossy_pool", + "size": "0", + "dynamic_th": "3" + } + }, + "BUFFER_PORT_INGRESS_PROFILE_LIST": { + "Ethernet216": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet224": { + "profile_list": "ingress_lossy_profile" + }, + "Ethernet232": { + "profile_list": "ingress_lossy_profile" + }, + "Ethernet240": { + "profile_list": "ingress_lossy_profile" + }, + "Ethernet248": { + "profile_list": "ingress_lossy_profile" + }, + "Ethernet0": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet8": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet16": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet24": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet32": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet40": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet48": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet56": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet64": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet72": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet80": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet88": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet96": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet104": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet112": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet120": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet128": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet136": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet144": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet152": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet160": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet168": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet176": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet184": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet192": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet200": { + "profile_list": "ingress_lossless_profile" + }, + "Ethernet208": { + "profile_list": "ingress_lossless_profile" + } + }, + "BUFFER_PORT_EGRESS_PROFILE_LIST": { + "Ethernet216": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet224": { + "profile_list": "egress_lossy_profile" + }, + "Ethernet232": { + "profile_list": "egress_lossy_profile" + }, + "Ethernet240": { + "profile_list": "egress_lossy_profile" + }, + "Ethernet248": { + "profile_list": "egress_lossy_profile" + }, + "Ethernet0": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet8": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet16": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet24": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet32": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet40": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet48": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet56": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet64": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet72": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet80": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet88": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet96": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet104": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet112": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet120": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet128": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet136": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet144": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet152": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet160": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet168": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet176": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet184": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet192": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet200": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + }, + "Ethernet208": { + "profile_list": "egress_lossless_profile,egress_lossy_profile" + } + }, + "BUFFER_PG": { + "Ethernet216|3-4": { + "profile": "NULL" + }, + "Ethernet216|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet224|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet224|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet232|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet232|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet240|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet240|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet248|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet248|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet0|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet0|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet8|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet8|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet16|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet16|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet24|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet24|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet32|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet32|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet40|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet40|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet48|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet48|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet56|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet56|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet64|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet64|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet72|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet72|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet80|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet80|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet88|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet88|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet96|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet96|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet104|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet104|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet112|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet112|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet120|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet120|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet128|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet128|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet136|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet136|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet144|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet144|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet152|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet152|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet160|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet160|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet168|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet168|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet176|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet176|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet184|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet184|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet192|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet192|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet200|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet200|0": { + "profile": "ingress_lossy_profile" + }, + "Ethernet208|3-4": { + "profile": "ingress_lossy_profile" + }, + "Ethernet208|0": { + "profile": "ingress_lossy_profile" + } + }, + "BUFFER_QUEUE": { + "Ethernet216|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet224|3-4": { + "profile": "q_lossy_profile" + }, + "Ethernet232|3-4": { + "profile": "q_lossy_profile" + }, + "Ethernet240|3-4": { + "profile": "q_lossy_profile" + }, + "Ethernet248|3-4": { + "profile": "q_lossy_profile" + }, + "Ethernet216|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet224|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet232|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet240|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet248|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet216|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet224|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet232|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet240|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet248|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet0|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet8|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet16|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet24|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet32|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet40|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet48|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet56|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet64|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet72|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet80|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet88|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet96|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet104|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet112|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet120|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet128|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet136|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet144|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet152|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet160|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet168|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet176|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet184|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet192|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet200|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet208|3-4": { + "profile": "egress_lossless_profile" + }, + "Ethernet0|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet8|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet16|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet24|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet32|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet40|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet48|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet56|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet64|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet72|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet80|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet88|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet96|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet104|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet112|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet120|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet128|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet136|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet144|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet152|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet160|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet168|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet176|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet184|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet192|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet200|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet208|0-2": { + "profile": "q_lossy_profile" + }, + "Ethernet0|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet8|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet16|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet24|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet32|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet40|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet48|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet56|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet64|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet72|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet80|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet88|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet96|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet104|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet112|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet120|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet128|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet136|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet144|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet152|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet160|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet168|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet176|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet184|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet192|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet200|5-6": { + "profile": "q_lossy_profile" + }, + "Ethernet208|5-6": { + "profile": "q_lossy_profile" + } + } +} diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py index 5afd6ed0b941..ed8ed58e488a 100644 --- a/src/sonic-config-engine/tests/test_j2files.py +++ b/src/sonic-config-engine/tests/test_j2files.py @@ -506,6 +506,58 @@ def test_qos_dscp_remapping_render_template(self): assert utils.cmp(sample_output_file, test_output) os.remove(test_output) + def test_qos_smartswitch_render_template(self): + if utils.PYvX_DIR != 'py3': + # Skip on python2 as the change will not be backported to previous version + return + + dir_paths = [ + '../../../device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28', + '../../../device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O28' + ] + sample_outputs = [ + 'qos-mellanox4700-o28-t1-smartswitch.json', + 'qos-mellanox4700-o28-t1-smartswitch_dyn.json' + ] + sample_minigraph_files = [ + 'sample-mellanox-4700-t1-minigraph-smartswitch.xml', + 'sample-mellanox-4700-t1-minigraph-smartswitch.xml' + ] + buffer_files = [ + 'buffers.json.j2', # traditional buffer mode + 'buffers_dynamic.json.j2' # dynamic buffer mode + ] + + for i, path in enumerate(dir_paths): + device_template_path = os.path.join(self.test_dir, path) + sample_output = sample_outputs[i] + sample_minigraph_file = os.path.join(self.test_dir,sample_minigraph_files[i]) + qos_file = os.path.join(device_template_path, 'qos.json.j2') + buf_file = os.path.join(device_template_path, buffer_files[i]) + hwsku_json_file = os.path.join(device_template_path, 'hwsku.json') + plat_json_file = os.path.join(device_template_path, '../platform.json') + test_output = os.path.join(self.test_dir, 'output.json') + + # copy qos_config.j2 & buffer_config.j2 to the target directory to have all templates in one directory + qos_config_file = os.path.join(self.test_dir, '..', '..', '..', 'files', 'build_templates', 'qos_config.j2') + shutil.copy2(qos_config_file, device_template_path) + + buf_config_file = os.path.join(self.test_dir, '..', '..', '..', 'files', 'build_templates', 'buffers_config.j2') + shutil.copy2(buf_config_file, device_template_path) + + argument = ['-m', sample_minigraph_file, '-p', plat_json_file, '-S', hwsku_json_file, '-t', "{},config-db".format(qos_file), '-t', "{},config-db".format(buf_file), '--print-data'] + self.run_script(argument, output_file=test_output) + + # cleanup + qos_config_file_new = os.path.join(device_template_path, 'qos_config.j2') + os.remove(qos_config_file_new) + buf_config_file_new = os.path.join(device_template_path, 'buffers_config.j2') + os.remove(buf_config_file_new) + + sample_output_file = os.path.join(self.test_dir, 'sample_output', utils.PYvX_DIR, sample_output) + assert utils.cmp_tables(sample_output_file, test_output) + os.remove(test_output) + def test_config_brcm_render_template(self): if utils.PYvX_DIR != 'py3': #Skip on python2 as the change will not be backported to previous version From fb80d37bfe687ee86286c4db1ef85fabf8d365fa Mon Sep 17 00:00:00 2001 From: abdosi <58047199+abdosi@users.noreply.github.com> Date: Thu, 1 Aug 2024 12:33:23 -0700 Subject: [PATCH 063/117] [VOQ] Fix the parsing of core_port_id and core_id for Inband and Recirc Port. (#19755) [VOQ] Fix the parsing of core_port_id and core_id for Inband and Recirc Port. Signed-off-by: Abhishek Dosi --- src/sonic-config-engine/minigraph.py | 4 ++-- src/sonic-config-engine/tests/test_chassis_cfggen.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py index d6c811552778..ed557d55ebdb 100644 --- a/src/sonic-config-engine/minigraph.py +++ b/src/sonic-config-engine/minigraph.py @@ -127,9 +127,9 @@ def get_voq_intf_attributes(ports): core_port_index = None speed = None for k,v in ports.get(port, {}).items(): - if k.lower() == 'coreid': + if k.lower() == 'core_id': core_id = v - if k.lower() == 'coreportid': + if k.lower() == 'core_port_id': core_port_index = v if k.lower() == 'speed': speed = v diff --git a/src/sonic-config-engine/tests/test_chassis_cfggen.py b/src/sonic-config-engine/tests/test_chassis_cfggen.py index c5f1e148e9f1..83d4be6f3550 100644 --- a/src/sonic-config-engine/tests/test_chassis_cfggen.py +++ b/src/sonic-config-engine/tests/test_chassis_cfggen.py @@ -182,7 +182,7 @@ def test_system_port(self): expected_output_file = os.path.join( self.test_data_dir, 'system_ports.json') self.run_script(argument, output_file=self.output_file) - self.assertTrue(self.run_diff(expected_output_file, self.output_file)) + self.assertFalse(self.run_diff(expected_output_file, self.output_file)) if os.path.exists(self.output_file): os.remove(self.output_file) @@ -479,11 +479,11 @@ def test_system_port(self): argument = ['-m', self.sample_graph, '-p', self.sample_port_config, '-n', 'asic0', - '--var-json', 'DEVICE_METADATA'] + '--var-json', 'SYSTEM_PORT'] expected_output_file = os.path.join( self.test_data_dir, 'system_ports.json') self.run_script(argument, output_file=self.output_file) - self.assertTrue(self.run_diff(expected_output_file, self.output_file)) + self.assertFalse(self.run_diff(expected_output_file, self.output_file)) if os.path.exists(self.output_file): os.remove(self.output_file) From 37f32b1533918ac937c7a5892c3ab4937578ba34 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 2 Aug 2024 19:06:08 +0800 Subject: [PATCH 064/117] [submodule] Update submodule sonic-platform-common to the latest HEAD automatically (#19770) #### Why I did it src/sonic-platform-common ``` * 7f07fa6 - (HEAD -> master, origin/master, origin/HEAD) Parse all VDM advertised fields during DOM monitoring (#486) (4 hours ago) [mihirpat1] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-platform-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-platform-common b/src/sonic-platform-common index 30895d1a9809..7f07fa68eff8 160000 --- a/src/sonic-platform-common +++ b/src/sonic-platform-common @@ -1 +1 @@ -Subproject commit 30895d1a98099935852c6aa170acd8ab16262039 +Subproject commit 7f07fa68eff8954cbd36400d39fd6f3d81b9a850 From 4563c32f5f3e756866706f4c6e056813c3ccdc31 Mon Sep 17 00:00:00 2001 From: Vineet Mittal <46945843+vmittal-msft@users.noreply.github.com> Date: Fri, 2 Aug 2024 23:17:23 -0700 Subject: [PATCH 065/117] Updated MMU settings for ingress lossy profile Nokia and Arista chassis (#19653) Updated lossy PG threshold to be higher than Queue threshold not to allow PFC generation. --- .../Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 | 2 +- .../Arista-7800R3-48CQM2-C48/buffers_defaults_t2.j2 | 2 +- .../Arista-7800R3A-36D2-C36/0/buffers_defaults_t2.j2 | 2 +- .../Arista-7800R3A-36D2-C36/1/buffers_defaults_t2.j2 | 2 +- .../Arista-7800R3A-36D2-C72/0/buffers_defaults_t2.j2 | 2 +- .../Arista-7800R3A-36D2-C72/1/buffers_defaults_t2.j2 | 2 +- .../Arista-7800R3A-36D2-D36/0/buffers_defaults_t2.j2 | 2 +- .../Arista-7800R3A-36D2-D36/1/buffers_defaults_t2.j2 | 2 +- .../Nokia-IXR7250E-36x100G/0/buffers_defaults_t2.j2 | 2 +- .../Nokia-IXR7250E-36x100G/1/buffers_defaults_t2.j2 | 2 +- .../Nokia-IXR7250E-36x400G/0/buffers_defaults_t2.j2 | 2 +- .../Nokia-IXR7250E-36x400G/1/buffers_defaults_t2.j2 | 2 +- .../tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json | 2 +- .../tests/sample_output/py2/buffer-arista7800r3-48cqm2-lc.json | 2 +- .../sample_output/py2/buffer-arista7800r3a-36dm2-c36-lc.json | 2 +- .../sample_output/py2/buffer-arista7800r3a-36dm2-d36-lc.json | 2 +- .../tests/sample_output/py2/buffer-nokia-ixr7250e-36x100g.json | 2 +- .../tests/sample_output/py2/buffer-nokia-ixr7250e-36x400g.json | 2 +- .../tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json | 2 +- .../tests/sample_output/py3/buffer-arista7800r3-48cqm2-lc.json | 2 +- .../sample_output/py3/buffer-arista7800r3a-36dm2-c36-lc.json | 2 +- .../sample_output/py3/buffer-arista7800r3a-36dm2-d36-lc.json | 2 +- .../tests/sample_output/py3/buffer-nokia-ixr7250e-36x100g.json | 2 +- .../tests/sample_output/py3/buffer-nokia-ixr7250e-36x400g.json | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 index 815ebd405f03..efee1fee3e2c 100644 --- a/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 +++ b/device/arista/x86_64-arista_7800r3_48cq2_lc/Arista-7800R3-48CQ2-C48/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/buffers_defaults_t2.j2 index f91b03d4cefa..5825848d4a4e 100644 --- a/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/buffers_defaults_t2.j2 +++ b/device/arista/x86_64-arista_7800r3_48cqm2_lc/Arista-7800R3-48CQM2-C48/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/0/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/0/buffers_defaults_t2.j2 index 101abdf63584..35a7f535744c 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/0/buffers_defaults_t2.j2 +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/0/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/1/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/1/buffers_defaults_t2.j2 index f95714f3aa53..18bf47b013eb 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/1/buffers_defaults_t2.j2 +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C36/1/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers_defaults_t2.j2 index a6315537d73d..b49aea94064b 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers_defaults_t2.j2 +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/0/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0 ", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers_defaults_t2.j2 index 1510e398a2fc..9fa59b61c065 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers_defaults_t2.j2 +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-C72/1/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/0/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/0/buffers_defaults_t2.j2 index 0df82f166ead..615280ab2ecb 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/0/buffers_defaults_t2.j2 +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/0/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-5" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/1/buffers_defaults_t2.j2 b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/1/buffers_defaults_t2.j2 index 4e66dfe0957b..407058909c69 100644 --- a/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/1/buffers_defaults_t2.j2 +++ b/device/arista/x86_64-arista_7800r3a_36d2_lc/Arista-7800R3A-36D2-D36/1/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-5" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers_defaults_t2.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers_defaults_t2.j2 index efa127423e7c..030060d45cf1 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers_defaults_t2.j2 +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/0/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers_defaults_t2.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers_defaults_t2.j2 index efa127423e7c..030060d45cf1 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers_defaults_t2.j2 +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x100G/1/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers_defaults_t2.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers_defaults_t2.j2 index 2b6dd17b6b16..3fb88267afd3 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers_defaults_t2.j2 +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/0/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-5" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers_defaults_t2.j2 b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers_defaults_t2.j2 index 2b6dd17b6b16..3fb88267afd3 100644 --- a/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers_defaults_t2.j2 +++ b/device/nokia/x86_64-nokia_ixr7250e_36x400g-r0/Nokia-IXR7250E-36x400G/1/buffers_defaults_t2.j2 @@ -30,7 +30,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-5" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json index c0d5fcded4ff..35b9c69d424e 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cq2-lc.json @@ -65,7 +65,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset":"0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cqm2-lc.json b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cqm2-lc.json index 880e426c595f..ebca473bc48a 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cqm2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3-48cqm2-lc.json @@ -65,7 +65,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset":"0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3a-36dm2-c36-lc.json b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3a-36dm2-c36-lc.json index fc22a9c48169..6ab0f7c6867d 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3a-36dm2-c36-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3a-36dm2-c36-lc.json @@ -35,7 +35,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3a-36dm2-d36-lc.json b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3a-36dm2-d36-lc.json index 09278e3ef882..ba77ebdcfc64 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3a-36dm2-d36-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffer-arista7800r3a-36dm2-d36-lc.json @@ -35,7 +35,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-5" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffer-nokia-ixr7250e-36x100g.json b/src/sonic-config-engine/tests/sample_output/py2/buffer-nokia-ixr7250e-36x100g.json index 29201518d7b9..4ed219574116 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffer-nokia-ixr7250e-36x100g.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffer-nokia-ixr7250e-36x100g.json @@ -35,7 +35,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py2/buffer-nokia-ixr7250e-36x400g.json b/src/sonic-config-engine/tests/sample_output/py2/buffer-nokia-ixr7250e-36x400g.json index 9e5058ec14bd..7b81862068e8 100644 --- a/src/sonic-config-engine/tests/sample_output/py2/buffer-nokia-ixr7250e-36x400g.json +++ b/src/sonic-config-engine/tests/sample_output/py2/buffer-nokia-ixr7250e-36x400g.json @@ -35,7 +35,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-5" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json index c0d5fcded4ff..35b9c69d424e 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cq2-lc.json @@ -65,7 +65,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset":"0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cqm2-lc.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cqm2-lc.json index 880e426c595f..ebca473bc48a 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cqm2-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3-48cqm2-lc.json @@ -65,7 +65,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset":"0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3a-36dm2-c36-lc.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3a-36dm2-c36-lc.json index fc22a9c48169..6ab0f7c6867d 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3a-36dm2-c36-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3a-36dm2-c36-lc.json @@ -35,7 +35,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3a-36dm2-d36-lc.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3a-36dm2-d36-lc.json index 09278e3ef882..ba77ebdcfc64 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3a-36dm2-d36-lc.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-arista7800r3a-36dm2-d36-lc.json @@ -35,7 +35,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-5" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-nokia-ixr7250e-36x100g.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-nokia-ixr7250e-36x100g.json index 29201518d7b9..4ed219574116 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-nokia-ixr7250e-36x100g.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-nokia-ixr7250e-36x100g.json @@ -35,7 +35,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-6" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", diff --git a/src/sonic-config-engine/tests/sample_output/py3/buffer-nokia-ixr7250e-36x400g.json b/src/sonic-config-engine/tests/sample_output/py3/buffer-nokia-ixr7250e-36x400g.json index 9e5058ec14bd..7b81862068e8 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/buffer-nokia-ixr7250e-36x400g.json +++ b/src/sonic-config-engine/tests/sample_output/py3/buffer-nokia-ixr7250e-36x400g.json @@ -35,7 +35,7 @@ "pool":"ingress_lossless_pool", "size":"0", "xon_offset": "0", - "dynamic_th":"-5" + "dynamic_th":"0" }, "egress_lossless_profile": { "pool":"ingress_lossless_pool", From 16a9e8929d06a8e285e6c17d6da52f6451ae786e Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sat, 3 Aug 2024 19:17:22 +0800 Subject: [PATCH 066/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19803) #### Why I did it src/sonic-utilities ``` * f50587a1 - (HEAD -> master, origin/master, origin/HEAD) Update README.md (#3406) (5 hours ago) [Changrong Wu] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index ff2c73f85ca2..f50587a1ff65 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit ff2c73f85ca24dea2634dc5ec83956f27ab9e32b +Subproject commit f50587a1ff65bb489231bfe45cec805fb32dbf00 From 68fc91b804701a034bd4b69e3dca570c1f0e4f70 Mon Sep 17 00:00:00 2001 From: Kumaresh Perumal Date: Sat, 3 Aug 2024 09:43:08 -0700 Subject: [PATCH 067/117] [Arista]: Update TH5 flex counter configs (#19793) Why I did it Enable pipe mode in TH5 flex counter block to support queue counters for all the ports. Microsoft ADO (number only): 28949528 --- .../th5-a7060x6-64pe.config.bcm | 15 +++++++++++++-- .../th5-a7060x6-64pe.config.bcm | 15 +++++++++++++-- .../th5-a7060x6-64pe.config.bcm | 15 +++++++++++++-- .../th5-a7060x6-64pe.config.bcm | 15 +++++++++++++-- 4 files changed, 52 insertions(+), 8 deletions(-) diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-128x400G/th5-a7060x6-64pe.config.bcm b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-128x400G/th5-a7060x6-64pe.config.bcm index fb8b088822e9..cf48a993b3a3 100644 --- a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-128x400G/th5-a7060x6-64pe.config.bcm +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-128x400G/th5-a7060x6-64pe.config.bcm @@ -1395,14 +1395,25 @@ bcm_device: 0: global: ftem_mem_entries: 65536 + sai_stats_support_mask: 0 + global_flexctr_ing_action_num_reserved: 20 + global_flexctr_ing_pool_num_reserved: 8 + global_flexctr_ing_op_profile_num_reserved: 20 + global_flexctr_ing_group_num_reserved: 2 + global_flexctr_egr_action_num_reserved: 8 + global_flexctr_egr_pool_num_reserved: 5 + global_flexctr_egr_op_profile_num_reserved: 10 + global_flexctr_egr_group_num_reserved: 1 ... --- device: 0: # Per pipe flex counter configuration CTR_EFLEX_CONFIG: - CTR_ING_EFLEX_OPERMODE_PIPEUNIQUE: 0 - CTR_EGR_EFLEX_OPERMODE_PIPEUNIQUE: 0 + CTR_ING_EFLEX_OPERMODE_PIPEUNIQUE: 1 + CTR_ING_EFLEX_OPERMODE_PIPE_INSTANCE_UNIQUE: 1 + CTR_EGR_EFLEX_OPERMODE_PIPEUNIQUE: 1 + CTR_EGR_EFLEX_OPERMODE_PIPE_INSTANCE_UNIQUE: 1 # IFP mode FP_CONFIG: diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm index af2f5f15820f..eecb986fdb45 100644 --- a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-256x200G/th5-a7060x6-64pe.config.bcm @@ -1907,14 +1907,25 @@ bcm_device: 0: global: ftem_mem_entries: 65536 + sai_stats_support_mask: 0 + global_flexctr_ing_action_num_reserved: 20 + global_flexctr_ing_pool_num_reserved: 8 + global_flexctr_ing_op_profile_num_reserved: 20 + global_flexctr_ing_group_num_reserved: 2 + global_flexctr_egr_action_num_reserved: 8 + global_flexctr_egr_pool_num_reserved: 5 + global_flexctr_egr_op_profile_num_reserved: 10 + global_flexctr_egr_group_num_reserved: 1 ... --- device: 0: # Per pipe flex counter configuration CTR_EFLEX_CONFIG: - CTR_ING_EFLEX_OPERMODE_PIPEUNIQUE: 0 - CTR_EGR_EFLEX_OPERMODE_PIPEUNIQUE: 0 + CTR_ING_EFLEX_OPERMODE_PIPEUNIQUE: 1 + CTR_ING_EFLEX_OPERMODE_PIPE_INSTANCE_UNIQUE: 1 + CTR_EGR_EFLEX_OPERMODE_PIPEUNIQUE: 1 + CTR_EGR_EFLEX_OPERMODE_PIPE_INSTANCE_UNIQUE: 1 # IFP mode FP_CONFIG: diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-64x400G/th5-a7060x6-64pe.config.bcm b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-64x400G/th5-a7060x6-64pe.config.bcm index 7f9f846f12b4..425915e05e6b 100644 --- a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-64x400G/th5-a7060x6-64pe.config.bcm +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE-64x400G/th5-a7060x6-64pe.config.bcm @@ -1139,14 +1139,25 @@ bcm_device: 0: global: ftem_mem_entries: 65536 + sai_stats_support_mask: 0 + global_flexctr_ing_action_num_reserved: 20 + global_flexctr_ing_pool_num_reserved: 8 + global_flexctr_ing_op_profile_num_reserved: 20 + global_flexctr_ing_group_num_reserved: 2 + global_flexctr_egr_action_num_reserved: 8 + global_flexctr_egr_pool_num_reserved: 5 + global_flexctr_egr_op_profile_num_reserved: 10 + global_flexctr_egr_group_num_reserved: 1 ... --- device: 0: # Per pipe flex counter configuration CTR_EFLEX_CONFIG: - CTR_ING_EFLEX_OPERMODE_PIPEUNIQUE: 0 - CTR_EGR_EFLEX_OPERMODE_PIPEUNIQUE: 0 + CTR_ING_EFLEX_OPERMODE_PIPEUNIQUE: 1 + CTR_ING_EFLEX_OPERMODE_PIPE_INSTANCE_UNIQUE: 1 + CTR_EGR_EFLEX_OPERMODE_PIPEUNIQUE: 1 + CTR_EGR_EFLEX_OPERMODE_PIPE_INSTANCE_UNIQUE: 1 # IFP mode FP_CONFIG: diff --git a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE/th5-a7060x6-64pe.config.bcm b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE/th5-a7060x6-64pe.config.bcm index b1de8f9e19a9..969e7447420e 100644 --- a/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE/th5-a7060x6-64pe.config.bcm +++ b/device/arista/x86_64-arista_7060x6_64pe/Arista-7060X6-64PE/th5-a7060x6-64pe.config.bcm @@ -1139,14 +1139,25 @@ bcm_device: 0: global: ftem_mem_entries: 65536 + sai_stats_support_mask: 0 + global_flexctr_ing_action_num_reserved: 20 + global_flexctr_ing_pool_num_reserved: 8 + global_flexctr_ing_op_profile_num_reserved: 20 + global_flexctr_ing_group_num_reserved: 2 + global_flexctr_egr_action_num_reserved: 8 + global_flexctr_egr_pool_num_reserved: 5 + global_flexctr_egr_op_profile_num_reserved: 10 + global_flexctr_egr_group_num_reserved: 1 ... --- device: 0: # Per pipe flex counter configuration CTR_EFLEX_CONFIG: - CTR_ING_EFLEX_OPERMODE_PIPEUNIQUE: 0 - CTR_EGR_EFLEX_OPERMODE_PIPEUNIQUE: 0 + CTR_ING_EFLEX_OPERMODE_PIPEUNIQUE: 1 + CTR_ING_EFLEX_OPERMODE_PIPE_INSTANCE_UNIQUE: 1 + CTR_EGR_EFLEX_OPERMODE_PIPEUNIQUE: 1 + CTR_EGR_EFLEX_OPERMODE_PIPE_INSTANCE_UNIQUE: 1 # IFP mode FP_CONFIG: From 0ac8679c33149d8d718abeb8bb6922ea13509a69 Mon Sep 17 00:00:00 2001 From: Sai Kiran <110003254+opcoder0@users.noreply.github.com> Date: Mon, 5 Aug 2024 11:41:45 +1000 Subject: [PATCH 068/117] [docker-ptf] sflowtool requires autoconf 2.71+ (#19761) Why I did it Latest changes to sflowtool source mandates autoconf 2.71+ to build it. Bullseye is at autoconf 2.69. This PR builds autoconf from source in the docker-ptf image. How I did it Modified dockers/docker-ptf/Dockerfile.j2 to - Install dependencies to build autoconf Build and install autoconf How to verify it docker-ptf image is built successfully. --- dockers/docker-ptf/Dockerfile.j2 | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/dockers/docker-ptf/Dockerfile.j2 b/dockers/docker-ptf/Dockerfile.j2 index 95a7cb9eee41..087f49f51f9d 100644 --- a/dockers/docker-ptf/Dockerfile.j2 +++ b/dockers/docker-ptf/Dockerfile.j2 @@ -28,7 +28,6 @@ RUN apt-get update \ && apt-get upgrade -y \ && apt-get dist-upgrade -y \ && apt-get install -y \ - autoconf \ openssh-server \ vim \ telnet \ @@ -97,6 +96,22 @@ RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1 \ && update-alternatives --install /usr/bin/pygettext pygettext /usr/bin/pygettext3 1 {% endif %} +# sflow requires autoconf 2.71; This step builds autoconf from source +RUN apt-get update \ + && apt-get install -y \ + m4 \ + texinfo \ + help2man +# get autoconf, build and install +RUN git clone http://git.sv.gnu.org/r/autoconf.git \ + && cd autoconf \ + && ./bootstrap \ + && ./configure \ + && make \ + && make install \ + && cd .. \ + && rm -rf autoconf + # Install all python modules from pypi. python-scapy is exception, ptf debian package requires python-scapy # TODO: Clean up this step RUN rm -rf /debs \ From 313215d3ec77a908fc008ccee5948c28d7fd6ed6 Mon Sep 17 00:00:00 2001 From: Ze Gan Date: Tue, 6 Aug 2024 00:05:32 +0800 Subject: [PATCH 069/117] [Fixbug][systemctl]: Disable networkd in non-smartswitch platform (#19107) Why I did it Fix #19058 How I did it Marked systemd-networkd.service as /dev/null to disable it by default. systemd-sonic-generator will remove this null link if the target platform is smartswitch. How to verify it According to the issue page, we shouldn't get the error logERR systemd-networkd-wait-online[50532]: Timeout occurred while waiting for network connectivity INFO apt-helper[11911]: E: Sub-process /lib/systemd/systemd-networkd-wait-online returned an error code (1) after systemctl start apt-daily.service Regress test the previous verification: [systemd/systemd-sonic-generator]: Systemd midplane network service of Smart Switch #18178 Signed-off-by: Ze Gan --- .../build_templates/sonic_debian_extension.j2 | 2 +- src/systemd-sonic-generator/ssg-test.cc | 30 +++++++++++++++---- .../systemd-sonic-generator.cpp | 9 ++++++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 40d721220d59..65a9739d9765 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -699,7 +699,7 @@ sudo LANG=C chroot $FILESYSTEM_ROOT systemctl disable midplane-network-dpu.servi # According to the issue: https://github.com/systemd/systemd/issues/19106, To disable ManageForeignRoutingPolicyRules to avoid the ip rules being deleted by systemd-networkd sudo sed -i 's/#ManageForeignRoutingPolicyRules=yes/ManageForeignRoutingPolicyRules=no/g' $FILESYSTEM_ROOT/etc/systemd/networkd.conf -sudo LANG=C chroot $FILESYSTEM_ROOT systemctl enable systemd-networkd +sudo ln -s /dev/null $FILESYSTEM_ROOT/etc/systemd/system/systemd-networkd.service sudo LANG=C chroot $FILESYSTEM_ROOT systemctl disable systemd-networkd-wait-online.service # Copy backend-acl script and service file diff --git a/src/systemd-sonic-generator/ssg-test.cc b/src/systemd-sonic-generator/ssg-test.cc index 99b71b9ba55d..5e336fe2dac6 100644 --- a/src/systemd-sonic-generator/ssg-test.cc +++ b/src/systemd-sonic-generator/ssg-test.cc @@ -53,7 +53,8 @@ const std::string TEST_ASIC_CONF = TEST_PLATFORM_DIR + "asic.conf"; const std::string TEST_PLATFORM_CONF = TEST_PLATFORM_DIR + "platform.json"; const std::string TEST_OUTPUT_DIR = TEST_ROOT_DIR + "generator/"; -const std::string TEST_ETC_NETWORK = TEST_OUTPUT_DIR + "network/"; +const std::string TEST_ETC_NETWORK = TEST_OUTPUT_DIR + "network/"; +const std::string TEST_ETC_SYSTEM = TEST_OUTPUT_DIR + "system/"; const std::string TEST_CONFIG_FILE = TEST_ROOT_DIR + "generated_services.conf"; @@ -167,6 +168,8 @@ class SsgFunctionTest : public SystemdSonicGeneratorFixture { fs::create_directories(path); path = fs::path(TEST_ETC_NETWORK.c_str()); fs::create_directories(path); + path = fs::path(TEST_ETC_SYSTEM.c_str()); + fs::create_directories(path); fp = fopen(TEST_MACHINE_CONF.c_str(), "w"); ASSERT_NE(fp, nullptr); fputs("onie_platform=test_platform", fp); @@ -266,7 +269,8 @@ class SsgMainTest : public SsgFunctionTest { void validate_output_unit_files(std::vector strs, std::string target, bool expected_result, - int num_instances) { + int num_instances, + bool dev_null_as_inexistent = true) { for (std::string str : strs) { bool finished = false; for (int i = 0 ; i < num_instances && !finished; ++i) { @@ -279,9 +283,14 @@ class SsgMainTest : public SsgFunctionTest { finished = true; } fs::path path{TEST_OUTPUT_DIR + target + "/" + str_t}; - char resolved_path[PATH_MAX]; - realpath(path.c_str(), resolved_path); - bool exist = fs::exists(path) && strcmp(resolved_path, "/dev/null") != 0; + bool exist = fs::exists(path); + if (exist) { + char resolved_path[PATH_MAX] = { 0 }; + realpath(path.c_str(), resolved_path); + if (strcmp(resolved_path, "/dev/null") == 0) { + exist = !dev_null_as_inexistent; + } + } EXPECT_EQ(exist, expected_result) << "Failed validation: " << path; } @@ -351,6 +360,8 @@ class SsgMainTest : public SsgFunctionTest { test_target, cfg.is_smart_switch_dpu, cfg.num_dpus); validate_output_unit_files(dpu_network_service_list, "network", cfg.is_smart_switch_dpu, cfg.num_dpus); + validate_output_unit_files(non_smart_switch_service_list, + "system", !cfg.is_smart_switch_npu && !cfg.is_smart_switch_dpu, cfg.num_dpus, false); } /* ssg_main test routine. @@ -432,6 +443,7 @@ class SsgMainTest : public SsgFunctionTest { for (const auto &service : disabled_service) { fs::create_symlink("/dev/null", TEST_ETC_NETWORK + service); } + fs::create_symlink("/dev/null", TEST_ETC_SYSTEM + "systemd-networkd.service"); } /* Restore global vars */ @@ -444,6 +456,7 @@ class SsgMainTest : public SsgFunctionTest { static const std::vector single_asic_service_list; static const std::vector multi_asic_service_list; static const std::vector common_service_list; + static const std::vector non_smart_switch_service_list; static const std::vector npu_service_list; static const std::vector npu_network_service_list; static const std::vector dpu_service_list; @@ -487,6 +500,13 @@ SsgMainTest::common_service_list = { "database.service", }; +/* Systemd service list for non Smart Switch */ +const std::vector +SsgMainTest::non_smart_switch_service_list = { + "systemd-networkd.service" +}; + + /* Systemd service Unit file list for Smart Switch NPU. */ const std::vector SsgMainTest::npu_service_list = { diff --git a/src/systemd-sonic-generator/systemd-sonic-generator.cpp b/src/systemd-sonic-generator/systemd-sonic-generator.cpp index 0569f4dd696e..ffef213cd103 100644 --- a/src/systemd-sonic-generator/systemd-sonic-generator.cpp +++ b/src/systemd-sonic-generator/systemd-sonic-generator.cpp @@ -1076,6 +1076,15 @@ static int install_network_service_for_smart_switch() { network_units++; } + // If the systemd-networkd is masked, unmask it + std::string systemd_networkd = get_etc_systemd() + std::string("/system/systemd-networkd.service"); + if (is_devnull(systemd_networkd.c_str())) { + if (remove(systemd_networkd.c_str()) != 0) { + fprintf(stderr, "Unable to remove existing symlink %s\n", systemd_networkd.c_str()); + return -1; + } + } + return 0; } From 856bef72f51d09aeca09e4e42d492be7ca53200c Mon Sep 17 00:00:00 2001 From: Ze Gan Date: Tue, 6 Aug 2024 00:06:53 +0800 Subject: [PATCH 070/117] [Fixbug][fast-reboot] [ErrLog] Fix database.sh error log for dpu database (#19601) Fix #19331 How I did it Skip the namespace setting if the dev is DPU, because the DPU databases are only in the host namespace How to verify it Check there is no error log after fast-reboot admin@vlab-01:~$ sudo cat /var/log/syslog | grep -i asicdpu Signed-off-by: Ze Gan --- files/scripts/service_mgmt.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/files/scripts/service_mgmt.sh b/files/scripts/service_mgmt.sh index 6a038c0a35ce..8229fd8ece26 100755 --- a/files/scripts/service_mgmt.sh +++ b/files/scripts/service_mgmt.sh @@ -87,7 +87,7 @@ DEV=$2 SCRIPT_NAME=$(basename -- "$0") SERVICE="${SCRIPT_NAME%.*}" NAMESPACE_PREFIX="asic" -if [ "$DEV" ]; then +if [[ "$DEV" && "$DEV" != *"dpu"* ]]; then NET_NS="$NAMESPACE_PREFIX$DEV" #name of the network namespace SONIC_DB_CLI="sonic-db-cli -n $NET_NS" else From 978fb9f56c2cea29a32ba79cf9ac4e47c839543e Mon Sep 17 00:00:00 2001 From: Andriy Yurkiv <70649192+ayurkiv-nvda@users.noreply.github.com> Date: Mon, 5 Aug 2024 19:50:56 +0300 Subject: [PATCH 071/117] [Mellanox]Adding SKU Mellanox-SN4700-O32 and Mellanox-SN4700-V64 (#19681) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A new SKUs for MSN4700 Platform: Mellanox-SN4700-O32 and Mellanox-SN4700-V64 Requirements for Mellanox-SN4700-O32: 8 x 400Gbps uplink to T2 switch (O13 to O20) 24 x 400Gbps downlinks to T0 switch (O1-O12, O21-O32) Breakout mode No breakout mode. All ports working in 400Gb mode. . FEC mode: RS Type of transceiver: 400Gb Optical. warm boot should be supported “No for T1 role” VxLAN source port range set N/A Static Policy Based Hashing supported N/A Cable length “T0-T1 40m default, 300m max; T1-T2 2000m” Tradition buffer model is must “Yes” Shared headroom should be supported “Yes” Over-subscription ratio: “2”. Requirements for Mellanox-SN4700-V64 16 x 200Gbps uplink to T1 switch (V-25&V26 to V-39&40) 48 x 200Gbps downlinks to servers (Left panel downlink ports: V-1&2 to V-23&24; Right panel downlink ports: V-41&42 to V-63&64) Breakout mode split from 400Gbps ports (2x200) FEC mode: RS Type of transceiver: 200Gb AOC between T0 and T1; 200Gb DAC between T0 and host. warm boot should be supported “Yes for T0 role” VxLAN source port range set N/A Static Policy Based Hashing supported N/A Cable length “T0-T1 40m default, 300m max, T0-Server 5m” Tradition buffer model is must “Yes” Shared headroom should be supported “Yes” Over-subscription ratio: “2”. Additional Details: QoS configs for Mellanox-SN4700-V64 updated in order to fulfill Dual-ToR buffer (+DSCP remapping) requirements Support for independent module added for both SKUs, so Auto-negotiation changed to NO Signed-off-by: Andriy Yurkiv --- .../Mellanox-SN4700-O32/buffers.json.j2 | 15 + .../buffers_defaults_objects.j2 | 1 + .../buffers_defaults_t0.j2 | 36 ++ .../buffers_defaults_t1.j2 | 37 ++ .../buffers_dynamic.json.j2 | 16 + .../Mellanox-SN4700-O32/hwsku.json | 132 +++++++ .../Mellanox-SN4700-O32/media_settings.json | 1 + .../optics_si_settings.json | 1 + .../Mellanox-SN4700-O32/pg_profile_lookup.ini | 1 + .../pmon_daemon_control.json | 6 + .../Mellanox-SN4700-O32/port_config.ini | 1 + .../Mellanox-SN4700-O32/qos.json.j2 | 1 + .../Mellanox-SN4700-O32/sai.profile | 2 + .../Mellanox-SN4700-O32/sai_4700_32x400g.xml | 297 ++++++++++++++++ .../Mellanox-SN4700-V64/buffers.json.j2 | 15 + .../buffers_defaults_objects.j2 | 1 + .../buffers_defaults_t0.j2 | 53 +++ .../buffers_defaults_t1.j2 | 56 +++ .../buffers_dynamic.json.j2 | 18 + .../Mellanox-SN4700-V64/hwsku.json | 324 ++++++++++++++++++ .../Mellanox-SN4700-V64/media_settings.json | 1 + .../optics_si_settings.json | 1 + .../Mellanox-SN4700-V64/pg_profile_lookup.ini | 1 + .../pmon_daemon_control.json | 6 + .../Mellanox-SN4700-V64/port_config.ini | 81 +++++ .../Mellanox-SN4700-V64/qos.json.j2 | 1 + .../Mellanox-SN4700-V64/sai.profile | 2 + .../Mellanox-SN4700-V64/sai_4700_64x200g.xml | 297 ++++++++++++++++ 28 files changed, 1404 insertions(+) create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers.json.j2 create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_objects.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_t0.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_t1.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_dynamic.json.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/hwsku.json create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/media_settings.json create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/optics_si_settings.json create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/pg_profile_lookup.ini create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/pmon_daemon_control.json create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/port_config.ini create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/qos.json.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/sai.profile create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/sai_4700_32x400g.xml create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers.json.j2 create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_objects.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_t0.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_t1.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_dynamic.json.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/hwsku.json create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/media_settings.json create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/optics_si_settings.json create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/pg_profile_lookup.ini create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/pmon_daemon_control.json create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/port_config.ini create mode 120000 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/qos.json.j2 create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/sai.profile create mode 100644 device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/sai_4700_64x200g.xml diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers.json.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers.json.j2 new file mode 100644 index 000000000000..dbcb63bdcc06 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers.json.j2 @@ -0,0 +1,15 @@ +{# + Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{%- set default_topo = 't1' %} +{%- include 'buffers_config.j2' %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_objects.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_objects.j2 new file mode 120000 index 000000000000..c01aebb7ae12 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_objects.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/buffers_defaults_objects.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_t0.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..ebce770ec0a0 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_t0.j2 @@ -0,0 +1,36 @@ +{# + Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '5m' %} +{% set ingress_lossless_pool_size = '51806208' %} +{% set ingress_lossless_pool_xoff = '3407872' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '51806208' %} + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_t1.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..9d6fe3da03d1 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_defaults_t1.j2 @@ -0,0 +1,37 @@ +{# + Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '40m' %} +{% set ingress_lossless_pool_size = '45531136' %} +{% set ingress_lossless_pool_xoff = '9682944' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '45531136' %} + + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_dynamic.json.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_dynamic.json.j2 new file mode 100644 index 000000000000..84b330d42dbd --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/buffers_dynamic.json.j2 @@ -0,0 +1,16 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{%- set default_topo = 't1' %} +{%- set dynamic_mode = 'true' %} +{%- include 'buffers_config.j2' %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/hwsku.json b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/hwsku.json new file mode 100644 index 000000000000..e316fc1bb675 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/hwsku.json @@ -0,0 +1,132 @@ +{ + "interfaces": { + "Ethernet0": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet8": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet16": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet24": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet32": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet40": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet48": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet56": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet64": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet72": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet80": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet88": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet96": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet104": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet112": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet120": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet128": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet136": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet144": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet152": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet160": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet168": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet176": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet184": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet192": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet200": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet208": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet216": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet224": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet232": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet240": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + }, + "Ethernet248": { + "default_brkout_mode": "1x400G[200G,100G,50G,40G,25G,10G,1G]", + "autoneg": "off" + } + } +} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/media_settings.json b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/media_settings.json new file mode 120000 index 000000000000..79e88a14f519 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/media_settings.json @@ -0,0 +1 @@ +../Mellanox-SN4700-O8C48/media_settings.json \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/optics_si_settings.json b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/optics_si_settings.json new file mode 120000 index 000000000000..f2f54cb0b7b6 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/optics_si_settings.json @@ -0,0 +1 @@ +../Mellanox-SN4700-O8C48/optics_si_settings.json \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/pg_profile_lookup.ini b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/pg_profile_lookup.ini new file mode 120000 index 000000000000..745cc6e12ca5 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/pg_profile_lookup.ini @@ -0,0 +1 @@ +../../x86_64-nvidia_sn4280-r0/ACS-SN4280/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/pmon_daemon_control.json b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/pmon_daemon_control.json new file mode 100644 index 000000000000..208fa63ca294 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/pmon_daemon_control.json @@ -0,0 +1,6 @@ +{ + "skip_ledd": true, + "skip_fancontrol": true, + "skip_xcvrd_cmis_mgr": false +} + diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/port_config.ini b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/port_config.ini new file mode 120000 index 000000000000..e5ffca0b3e57 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/port_config.ini @@ -0,0 +1 @@ +../ACS-MSN4700/port_config.ini \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/qos.json.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/qos.json.j2 new file mode 120000 index 000000000000..eccf286dc879 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/qos.json.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/ACS-MSN2700/qos.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/sai.profile b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/sai.profile new file mode 100644 index 000000000000..b49fe9c199a4 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/sai.profile @@ -0,0 +1,2 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_4700_32x400g.xml +SAI_INDEPENDENT_MODULE_MODE=1 diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/sai_4700_32x400g.xml b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/sai_4700_32x400g.xml new file mode 100644 index 000000000000..50bf43b1b5da --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-O32/sai_4700_32x400g.xml @@ -0,0 +1,297 @@ + + + + + + + 00:02:03:04:05:00 + + + 1 + + + 32 + + + 1 + + + + + 1 + 8 + 17 + + + 0 + + --> + 32768 + 1 + + + 5 + 8 + 16 + 0 + 32768 + 1 + + + 9 + 8 + 19 + 0 + 32768 + 1 + + + 13 + 8 + 18 + 0 + 32768 + 1 + + + 17 + 8 + 21 + 0 + 32768 + 1 + + + 21 + 8 + 20 + 0 + 32768 + 1 + + + 25 + 8 + 23 + 1 + 32768 + 1 + + + 29 + 8 + 22 + 0 + 32768 + 1 + + + 33 + 8 + 29 + 0 + 32768 + 1 + + + 37 + 8 + 28 + 0 + 32768 + 1 + + + 41 + 8 + 31 + 0 + 32768 + 1 + + + 45 + 8 + 30 + 0 + 32768 + 1 + + + 49 + 8 + 25 + 0 + 32768 + 1 + + + 53 + 8 + 24 + 0 + 32768 + 1 + + + 57 + 8 + 27 + 0 + 32768 + 1 + + + 61 + 8 + 26 + 0 + 32768 + 1 + + + 65 + 8 + 14 + 0 + 32768 + 1 + + + 69 + 8 + 15 + 0 + 32768 + 1 + + + 73 + 8 + 12 + 0 + 32768 + 1 + + + 77 + 8 + 13 + 0 + 32768 + 1 + + + 81 + 8 + 10 + 0 + 32768 + 1 + + + 85 + 8 + 11 + 0 + 32768 + 1 + + + 89 + 8 + 8 + 0 + 32768 + 1 + + + 93 + 8 + 9 + 0 + 32768 + 1 + + + 97 + 8 + 2 + 0 + 32768 + 1 + + + 101 + 8 + 3 + 0 + 32768 + 1 + + + 105 + 8 + 0 + 0 + 32768 + 1 + + + 109 + 8 + 1 + 0 + 32768 + 1 + + + 113 + 8 + 6 + 0 + 32768 + 1 + + + 117 + 8 + 7 + 0 + 32768 + 1 + + + 121 + 8 + 4 + 0 + 32768 + 1 + + + 125 + 8 + 5 + 0 + 32768 + 1 + + + + diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers.json.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers.json.j2 new file mode 100644 index 000000000000..adf9fec9070f --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers.json.j2 @@ -0,0 +1,15 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{%- set default_topo = 't0' %} +{%- include 'buffers_config.j2' %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_objects.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_objects.j2 new file mode 120000 index 000000000000..c01aebb7ae12 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_objects.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn2700-r0/Mellanox-SN2700-D48C8/buffers_defaults_objects.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_t0.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_t0.j2 new file mode 100644 index 000000000000..1d9c616b5dd0 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_t0.j2 @@ -0,0 +1,53 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{% set default_cable = '5m' %} +{%- if ((SYSTEM_DEFAULTS is defined) and ('tunnel_qos_remap' in SYSTEM_DEFAULTS) and (SYSTEM_DEFAULTS['tunnel_qos_remap']['status'] == 'enabled')) -%} +{% set ingress_lossless_pool_size = '47448064' %} +{% set ingress_lossless_pool_xoff = '5537792' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '47448064' %} +{%- else -%} +{% set ingress_lossless_pool_size = '49971200' %} +{% set ingress_lossless_pool_xoff = '3637248' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '49971200' %} +{%- endif -%} + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names_active, port_names_extra_queues, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_extra_lossless_pgs_with_inactive_ports(port_names_active, port_names_extra_pgs, port_names_inactive) %} +{{ defs.generate_pg_profiles_with_extra_lossless_pgs(port_names_active, port_names_extra_pgs, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_t1.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_t1.j2 new file mode 100644 index 000000000000..56ba492c3dc8 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_defaults_t1.j2 @@ -0,0 +1,56 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} + +{% set default_cable = '40m' %} +{%- if ((SYSTEM_DEFAULTS is defined) and ('tunnel_qos_remap' in SYSTEM_DEFAULTS) and (SYSTEM_DEFAULTS['tunnel_qos_remap']['status'] == 'enabled')) -%} +{% set ingress_lossless_pool_size = '31784960' %} +{% set ingress_lossless_pool_xoff = '19955712' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '31784960' %} +{%- else -%} +{% set ingress_lossless_pool_size = '39354368' %} +{% set ingress_lossless_pool_xoff = '14254080' %} +{% set egress_lossless_pool_size = '60817392' %} +{% set egress_lossy_pool_size = '39354368' %} +{%- endif -%} + + + +{% import 'buffers_defaults_objects.j2' as defs with context %} + +{%- macro generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) %} +{{ defs.generate_buffer_pool_and_profiles_with_inactive_ports(port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_profile_lists_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_profile_lists(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_extra_lossless_queues_with_inactive_ports(port_names_active, port_names_extra_queues, port_names_inactive) %} +{{ defs.generate_queue_buffers_with_extra_lossless_queues(port_names_active, port_names_extra_queues, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_queue_buffers_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_queue_buffers(port_names_active, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_extra_lossless_pgs_with_inactive_ports(port_names_active, port_names_extra_pgs, port_names_inactive) %} +{{ defs.generate_pg_profiles_with_extra_lossless_pgs(port_names_active, port_names_extra_pgs, port_names_inactive) }} +{%- endmacro %} + +{%- macro generate_pg_profiles_with_inactive_ports(port_names_active, port_names_inactive) %} +{{ defs.generate_pg_profiles(port_names_active, port_names_inactive) }} +{%- endmacro %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_dynamic.json.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_dynamic.json.j2 new file mode 100644 index 000000000000..008ba6d1ecfd --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/buffers_dynamic.json.j2 @@ -0,0 +1,18 @@ +{# + Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. + Apache-2.0 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +#} +{%- set default_topo = 't0' %} +{%- set dynamic_mode = 'true' %} +{%- include 'buffers_config.j2' %} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/hwsku.json b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/hwsku.json new file mode 100644 index 000000000000..4915aa51b852 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/hwsku.json @@ -0,0 +1,324 @@ +{ + "interfaces": { + "Ethernet0": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet4": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet8": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet12": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet16": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet20": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet24": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet28": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet32": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet36": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet40": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet44": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet48": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet52": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet56": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet60": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet64": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet68": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet72": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet76": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet80": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet84": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet88": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet92": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet96": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet100": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet104": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet108": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet112": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet116": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet120": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet124": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet128": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet132": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet136": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet140": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet144": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet148": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet152": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet156": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet160": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet164": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet168": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet172": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet176": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet180": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet184": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet188": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet192": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet196": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet200": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet204": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet208": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet212": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet216": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet220": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet224": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet228": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet232": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet236": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet240": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet244": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + }, + "Ethernet248": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "1", + "autoneg": "off" + }, + "Ethernet252": { + "default_brkout_mode": "2x200G[100G,50G,40G,25G,10G,1G]", + "subport": "2", + "autoneg": "off" + } + } +} diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/media_settings.json b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/media_settings.json new file mode 120000 index 000000000000..79e88a14f519 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/media_settings.json @@ -0,0 +1 @@ +../Mellanox-SN4700-O8C48/media_settings.json \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/optics_si_settings.json b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/optics_si_settings.json new file mode 120000 index 000000000000..f2f54cb0b7b6 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/optics_si_settings.json @@ -0,0 +1 @@ +../Mellanox-SN4700-O8C48/optics_si_settings.json \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/pg_profile_lookup.ini b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/pg_profile_lookup.ini new file mode 120000 index 000000000000..745cc6e12ca5 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/pg_profile_lookup.ini @@ -0,0 +1 @@ +../../x86_64-nvidia_sn4280-r0/ACS-SN4280/pg_profile_lookup.ini \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/pmon_daemon_control.json b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/pmon_daemon_control.json new file mode 100644 index 000000000000..208fa63ca294 --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/pmon_daemon_control.json @@ -0,0 +1,6 @@ +{ + "skip_ledd": true, + "skip_fancontrol": true, + "skip_xcvrd_cmis_mgr": false +} + diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/port_config.ini b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/port_config.ini new file mode 100644 index 000000000000..b055a95ed15e --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/port_config.ini @@ -0,0 +1,81 @@ +## +## Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. +## Apache-2.0 +## +## Licensed under the Apache License, Version 2.0 (the "License"); +## you may not use this file except in compliance with the License. +## You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## +# name lanes alias index speed +Ethernet0 0,1,2,3 etp1a 1 200000 +Ethernet4 4,5,6,7 etp1b 1 200000 +Ethernet8 8,9,10,11 etp2a 2 200000 +Ethernet12 12,13,14,15 etp2b 2 200000 +Ethernet16 16,17,18,19 etp3a 3 200000 +Ethernet20 20,21,22,23 etp3b 3 200000 +Ethernet24 24,25,26,27 etp4a 4 200000 +Ethernet28 28,29,30,31 etp4b 4 200000 +Ethernet32 32,33,34,35 etp5a 5 200000 +Ethernet36 36,37,38,39 etp5b 5 200000 +Ethernet40 40,41,42,43 etp6a 6 200000 +Ethernet44 44,45,46,47 etp6b 6 200000 +Ethernet48 48,49,50,51 etp7a 7 200000 +Ethernet52 52,53,54,55 etp7b 7 200000 +Ethernet56 56,57,58,59 etp8a 8 200000 +Ethernet60 60,61,62,63 etp8b 8 200000 +Ethernet64 64,65,66,67 etp9a 9 200000 +Ethernet68 68,69,70,71 etp9b 9 200000 +Ethernet72 72,73,74,75 etp10a 10 200000 +Ethernet76 76,77,78,79 etp10b 10 200000 +Ethernet80 80,81,82,83 etp11a 11 200000 +Ethernet84 84,85,86,87 etp11b 11 200000 +Ethernet88 88,89,90,91 etp12a 12 200000 +Ethernet92 92,93,94,95 etp12b 12 200000 +Ethernet96 96,97,98,99 etp13a 13 200000 +Ethernet100 100,101,102,103 etp13b 13 200000 +Ethernet104 104,105,106,107 etp14a 14 200000 +Ethernet108 108,109,110,111 etp14b 14 200000 +Ethernet112 112,113,114,115 etp15a 15 200000 +Ethernet116 116,117,118,119 etp15b 15 200000 +Ethernet120 120,121,122,123 etp16a 16 200000 +Ethernet124 124,125,126,127 etp16b 16 200000 +Ethernet128 128,129,130,131 etp17a 17 200000 +Ethernet132 132,133,134,135 etp17b 17 200000 +Ethernet136 136,137,138,139 etp18a 18 200000 +Ethernet140 140,141,142,143 etp18b 18 200000 +Ethernet144 144,145,146,147 etp19a 19 200000 +Ethernet148 148,149,150,151 etp19b 19 200000 +Ethernet152 152,153,154,155 etp20a 20 200000 +Ethernet156 156,157,158,159 etp20b 20 200000 +Ethernet160 160,161,162,163 etp21a 21 200000 +Ethernet164 164,165,166,167 etp21b 21 200000 +Ethernet168 168,169,170,171 etp22a 22 200000 +Ethernet172 172,173,174,175 etp22b 22 200000 +Ethernet176 176,177,178,179 etp23a 23 200000 +Ethernet180 180,181,182,183 etp23b 23 200000 +Ethernet184 184,185,186,187 etp24a 24 200000 +Ethernet188 188,189,190,191 etp24b 24 200000 +Ethernet192 192,193,194,195 etp25a 25 200000 +Ethernet196 196,197,198,199 etp25b 25 200000 +Ethernet200 200,201,202,203 etp26a 26 200000 +Ethernet204 204,205,206,207 etp26b 26 200000 +Ethernet208 208,209,210,211 etp27a 27 200000 +Ethernet212 212,213,214,215 etp27b 27 200000 +Ethernet216 216,217,218,219 etp28a 28 200000 +Ethernet220 220,221,222,223 etp28b 28 200000 +Ethernet224 224,225,226,227 etp29a 29 200000 +Ethernet228 228,229,230,231 etp29b 29 200000 +Ethernet232 232,233,234,235 etp30a 30 200000 +Ethernet236 236,237,238,239 etp30b 30 200000 +Ethernet240 240,241,242,243 etp31a 31 200000 +Ethernet244 244,245,246,247 etp31b 31 200000 +Ethernet248 248,249,250,251 etp32a 32 200000 +Ethernet252 252,253,254,255 etp32b 32 200000 diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/qos.json.j2 b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/qos.json.j2 new file mode 120000 index 000000000000..48221aa2b3de --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/qos.json.j2 @@ -0,0 +1 @@ +../../x86_64-mlnx_msn4600c-r0/Mellanox-SN4600C-C64/qos.json.j2 \ No newline at end of file diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/sai.profile b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/sai.profile new file mode 100644 index 000000000000..2ba019b874ec --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/sai.profile @@ -0,0 +1,2 @@ +SAI_INIT_CONFIG_FILE=/usr/share/sonic/hwsku/sai_4700_64x200g.xml +SAI_INDEPENDENT_MODULE_MODE=1 diff --git a/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/sai_4700_64x200g.xml b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/sai_4700_64x200g.xml new file mode 100644 index 000000000000..4732b2c28c0d --- /dev/null +++ b/device/mellanox/x86_64-mlnx_msn4700-r0/Mellanox-SN4700-V64/sai_4700_64x200g.xml @@ -0,0 +1,297 @@ + + + + + + + 00:02:03:04:05:00 + + + 1 + + + 32 + + + 1 + + + + + 1 + 8 + 17 + + + 1 + + --> + 4096 + 2 + + + 5 + 8 + 16 + 1 + 4096 + 2 + + + 9 + 8 + 19 + 1 + 4096 + 2 + + + 13 + 8 + 18 + 1 + 4096 + 2 + + + 17 + 8 + 21 + 1 + 4096 + 2 + + + 21 + 8 + 20 + 1 + 4096 + 2 + + + 25 + 8 + 23 + 1 + 4096 + 2 + + + 29 + 8 + 22 + 1 + 4096 + 2 + + + 33 + 8 + 29 + 1 + 4096 + 2 + + + 37 + 8 + 28 + 1 + 4096 + 2 + + + 41 + 8 + 31 + 1 + 4096 + 2 + + + 45 + 8 + 30 + 1 + 4096 + 2 + + + 49 + 8 + 25 + 1 + 4096 + 2 + + + 53 + 8 + 24 + 1 + 4096 + 2 + + + 57 + 8 + 27 + 1 + 4096 + 2 + + + 61 + 8 + 26 + 1 + 4096 + 2 + + + 65 + 8 + 14 + 1 + 4096 + 1 + + + 69 + 8 + 15 + 1 + 4096 + 1 + + + 73 + 8 + 12 + 1 + 4096 + 1 + + + 77 + 8 + 13 + 1 + 4096 + 1 + + + 81 + 8 + 10 + 1 + 4096 + 2 + + + 85 + 8 + 11 + 1 + 4096 + 2 + + + 89 + 8 + 8 + 1 + 4096 + 2 + + + 93 + 8 + 9 + 1 + 4096 + 2 + + + 97 + 8 + 2 + 1 + 4096 + 2 + + + 101 + 8 + 3 + 1 + 4096 + 2 + + + 105 + 8 + 0 + 1 + 4096 + 2 + + + 109 + 8 + 1 + 1 + 4096 + 2 + + + 113 + 8 + 6 + 1 + 4096 + 2 + + + 117 + 8 + 7 + 1 + 4096 + 2 + + + 121 + 8 + 4 + 1 + 4096 + 2 + + + 125 + 8 + 5 + 1 + 4096 + 2 + + + + From 427f91161e361da3ced3466899ef15b61bb7f6b4 Mon Sep 17 00:00:00 2001 From: Gagan Punathil Ellath Date: Mon, 5 Aug 2024 15:41:47 -0700 Subject: [PATCH 072/117] [SmartSwitch] DPU Management Traffic Forwarding script (#19431) [SmartSwitch] DPU Management Traffic Forwarding script --- .../build_templates/sonic_debian_extension.j2 | 1 + files/scripts/sonic-dpu-mgmt-traffic.sh | 85 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100755 files/scripts/sonic-dpu-mgmt-traffic.sh diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 65a9739d9765..f32cd7f224f4 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -1003,6 +1003,7 @@ sudo LANG=C cp $SCRIPTS_DIR/mgmt-framework.sh $FILESYSTEM_ROOT/usr/local/bin/mgm sudo LANG=C cp $SCRIPTS_DIR/asic_status.sh $FILESYSTEM_ROOT/usr/local/bin/asic_status.sh sudo LANG=C cp $SCRIPTS_DIR/asic_status.py $FILESYSTEM_ROOT/usr/local/bin/asic_status.py sudo LANG=C cp $SCRIPTS_DIR/startup_tsa_tsb.py $FILESYSTEM_ROOT/usr/local/bin/startup_tsa_tsb.py +sudo LANG=C cp $SCRIPTS_DIR/sonic-dpu-mgmt-traffic.sh $FILESYSTEM_ROOT/usr/local/bin/sonic-dpu-mgmt-traffic.sh # Copy sonic-netns-exec script sudo LANG=C cp $SCRIPTS_DIR/sonic-netns-exec $FILESYSTEM_ROOT/usr/bin/sonic-netns-exec diff --git a/files/scripts/sonic-dpu-mgmt-traffic.sh b/files/scripts/sonic-dpu-mgmt-traffic.sh new file mode 100755 index 000000000000..71e6ed29b32b --- /dev/null +++ b/files/scripts/sonic-dpu-mgmt-traffic.sh @@ -0,0 +1,85 @@ +#!/bin/bash +#Script to control the DPU management traffic forwarding through the SmartSwitch + +command_name=$0 + +usage(){ + echo "Syntax: $command_name -e|--enable -d|--disable" + echo "Arguments:" + echo "-e Enable dpu management traffic forwarding" + echo "-d Disable dpu management traffic forwarding" +} + +add_rem_valid_iptable(){ + local op=$1 + local table=$2 + local chain=$3 + shift 3 + local rule="$@" + iptables -t $table -C $chain $rule &>/dev/null + local exit_status=$? + local exec_cond=0 + if [ "$op" = "enable" ]; then + exec_command="iptables -t $table -A $chain $rule" + [ "$exit_status" -eq 0 ] || exec_cond=1 # Execute if rule is currently not present + else + exec_command="iptables -t $table -D $chain $rule" + [ "$exit_status" -ne 0 ] || exec_cond=1 # Execute if rule is currently present + fi + if [ "$exec_cond" -eq 1 ]; then + eval "$exec_command" + else + echo "$exec_command not requried, will not be executed" + fi +} + +control_forwarding(){ + local op=$1 + local value=0 + if [ "$op" = "enable" ]; then + value=1 + fi + echo $value > /proc/sys/net/ipv4/ip_forward + echo $value > /proc/sys/net/ipv4/conf/eth0/forwarding +} + +ctrl_dpu_forwarding(){ + local op=$1 + control_forwarding $op + add_rem_valid_iptable $op nat POSTROUTING -o ${mgmt_iface} -j MASQUERADE + add_rem_valid_iptable $op filter FORWARD -i ${mgmt_iface} -o ${midplane_iface} -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT + add_rem_valid_iptable $op filter FORWARD -i ${midplane_iface} -o ${mgmt_iface} -j ACCEPT + if [ "$op" = "enable" ]; then + echo "Enabled DPU management traffic Forwarding" + else + echo "Disabled DPU management traffic Forwarding" + fi +} + +mgmt_iface=eth0 +midplane_iface=bridge-midplane + +if [ "$EUID" -ne 0 ] + then + echo "Permission denied: Please run the script with elevated privileges using sudo" + exit 1 +fi + +if ! ifconfig "$midplane_iface" > /dev/null 2>&1; then + echo "$midplane_iface doesn't exist! Please run on smart switch system" + exit 1 +fi + +case $1 in + -e|--enable) + ctrl_dpu_forwarding enable + ;; + -d|--disable) + ctrl_dpu_forwarding disable + ;; + *) + echo "Incorrect Usage!" + usage + exit 1 + ;; +esac From c0e5b8e34ac01412895a4fd2855a71198d9704c4 Mon Sep 17 00:00:00 2001 From: Sudharsan Dhamal Gopalarathnam Date: Mon, 5 Aug 2024 21:50:23 -0700 Subject: [PATCH 073/117] [FRR] Zebra BGP enhancements to better handle memory during route churns (#19717) Added the below patches which are part of BGP Zebra back pressure feature required to keep the memory usage in check during route churns How I did it New patches that were added: Patch FRR Pull request 0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch FRRouting/frr#15411 0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch FRRouting/frr#15524 0032-bgpd-fix-flushing-ipv6-flowspec-entries-when-peering.patch FRRouting/frr#15326 0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch FRRouting/frr#15524 0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch FRRouting/frr#15524 0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch FRRouting/frr#15624 0036-zebra-backpressure-Fix-Null-ptr-access-Coverity-Issu.patch FRRouting/frr#15728 0037-bgpd-Increase-install-uninstall-speed-of-evpn-vpn-vn.patch FRRouting/frr#15727 0038-zebra-Actually-display-I-O-buffer-sizes.patch FRRouting/frr#15708 0039-zebra-Actually-display-I-O-buffer-sizes-part-2.patch FRRouting/frr#15769 0040-bgpd-backpressure-Fix-to-withdraw-evpn-type-5-routes.patch FRRouting/frr#16034 0041-bgpd-backpressure-Fix-to-avoid-CPU-hog.patch FRRouting/frr#16035 0042-zebra-Use-built-in-data-structure-counter.patch FRRouting/frr#16221 0043-zebra-Use-the-ctx-queue-counters.patch FRRouting/frr#16220 0044-zebra-Modify-dplane-loop-to-allow-backpressure-to-fi.patch FRRouting/frr#16220 0045-zebra-Limit-queue-depth-in-dplane_fpm_nl.patch FRRouting/frr#16220 0046-zebra-Modify-show-zebra-dplane-providers-to-give-mor.patch FRRouting/frr#16220 0047-bgpd-backpressure-fix-evpn-route-sync-to-zebra.patch FRRouting/frr#16234 0048-bgpd-backpressure-fix-to-properly-remove-dest-for-bg.patch FRRouting/frr#16368 0049-bgpd-backpressure-Improve-debuggability.patch FRRouting/frr#16368 0050-bgpd-backpressure-Avoid-use-after-free.patch FRRouting/frr#16437 0051-bgpd-backpressure-fix-ret-value-evpn_route_select_in.patch FRRouting/frr#16416 0052-bgpd-backpressure-log-error-for-evpn-when-route-inst.patch FRRouting/frr#16416 --- ...re-Zebra-push-back-on-Buffer-Stream-.patch | 174 +++ ...e-Add-a-typesafe-list-for-Zebra-Anno.patch | 90 ++ ...g-ipv6-flowspec-entries-when-peering.patch | 158 +++ ...ssure-cleanup-bgp_zebra_XX-func-args.patch | 234 ++++ ...e-Handle-BGP-Zebra-Install-evt-Creat.patch | 512 +++++++++ ...e-Handle-BGP-Zebra-EPVN-Install-evt-.patch | 995 ++++++++++++++++++ ...re-Fix-Null-ptr-access-Coverity-Issu.patch | 29 + ...stall-uninstall-speed-of-evpn-vpn-vn.patch | 116 ++ ...ra-Actually-display-I-O-buffer-sizes.patch | 49 + ...ally-display-I-O-buffer-sizes-part-2.patch | 49 + ...e-Fix-to-withdraw-evpn-type-5-routes.patch | 63 ++ ...pd-backpressure-Fix-to-avoid-CPU-hog.patch | 53 + ...-Use-built-in-data-structure-counter.patch | 156 +++ ...043-zebra-Use-the-ctx-queue-counters.patch | 108 ++ ...ane-loop-to-allow-backpressure-to-fi.patch | 199 ++++ ...a-Limit-queue-depth-in-dplane_fpm_nl.patch | 52 + ...w-zebra-dplane-providers-to-give-mor.patch | 102 ++ ...ressure-fix-evpn-route-sync-to-zebra.patch | 33 + ...e-fix-to-properly-remove-dest-for-bg.patch | 90 ++ ...d-backpressure-Improve-debuggability.patch | 46 + ...pd-backpressure-Avoid-use-after-free.patch | 48 + ...e-fix-ret-value-evpn_route_select_in.patch | 73 ++ ...e-log-error-for-evpn-when-route-inst.patch | 61 ++ src/sonic-frr/patch/series | 23 + 24 files changed, 3513 insertions(+) create mode 100644 src/sonic-frr/patch/0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch create mode 100644 src/sonic-frr/patch/0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch create mode 100644 src/sonic-frr/patch/0032-bgpd-fix-flushing-ipv6-flowspec-entries-when-peering.patch create mode 100644 src/sonic-frr/patch/0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch create mode 100644 src/sonic-frr/patch/0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch create mode 100644 src/sonic-frr/patch/0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch create mode 100644 src/sonic-frr/patch/0036-zebra-backpressure-Fix-Null-ptr-access-Coverity-Issu.patch create mode 100644 src/sonic-frr/patch/0037-bgpd-Increase-install-uninstall-speed-of-evpn-vpn-vn.patch create mode 100644 src/sonic-frr/patch/0038-zebra-Actually-display-I-O-buffer-sizes.patch create mode 100644 src/sonic-frr/patch/0039-zebra-Actually-display-I-O-buffer-sizes-part-2.patch create mode 100644 src/sonic-frr/patch/0040-bgpd-backpressure-Fix-to-withdraw-evpn-type-5-routes.patch create mode 100644 src/sonic-frr/patch/0041-bgpd-backpressure-Fix-to-avoid-CPU-hog.patch create mode 100644 src/sonic-frr/patch/0042-zebra-Use-built-in-data-structure-counter.patch create mode 100644 src/sonic-frr/patch/0043-zebra-Use-the-ctx-queue-counters.patch create mode 100644 src/sonic-frr/patch/0044-zebra-Modify-dplane-loop-to-allow-backpressure-to-fi.patch create mode 100644 src/sonic-frr/patch/0045-zebra-Limit-queue-depth-in-dplane_fpm_nl.patch create mode 100644 src/sonic-frr/patch/0046-zebra-Modify-show-zebra-dplane-providers-to-give-mor.patch create mode 100644 src/sonic-frr/patch/0047-bgpd-backpressure-fix-evpn-route-sync-to-zebra.patch create mode 100644 src/sonic-frr/patch/0048-bgpd-backpressure-fix-to-properly-remove-dest-for-bg.patch create mode 100644 src/sonic-frr/patch/0049-bgpd-backpressure-Improve-debuggability.patch create mode 100644 src/sonic-frr/patch/0050-bgpd-backpressure-Avoid-use-after-free.patch create mode 100644 src/sonic-frr/patch/0051-bgpd-backpressure-fix-ret-value-evpn_route_select_in.patch create mode 100644 src/sonic-frr/patch/0052-bgpd-backpressure-log-error-for-evpn-when-route-inst.patch diff --git a/src/sonic-frr/patch/0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch b/src/sonic-frr/patch/0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch new file mode 100644 index 000000000000..0bebd1ea12ba --- /dev/null +++ b/src/sonic-frr/patch/0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch @@ -0,0 +1,174 @@ +From 7c711ff437985b23a4dd919a98b22b8ea14ef553 Mon Sep 17 00:00:00 2001 +From: Rajasekar Raja +Date: Mon, 12 Feb 2024 10:44:18 -0800 +Subject: [PATCH 02/11] zebra: backpressure - Zebra push back on Buffer/Stream + creation + +Currently, the way zebra works is it creates pthread per client (BGP is +of interest in this case) and this thread loops itself in zserv_read() +to check for any incoming data. If there is one, then it reads, +validates and adds it in the ibuf_fifo signalling the main thread to +process the message. The main thread when it gets a change, processes +the message, and invokes the function pointer registered in the header +command. (Ex: zserv_handlers). + +Finally, if all of this was successful, this task reschedules itself and +loops in zserv_read() again + +However, if there are already items on ibuf FIFO, that means zebra is +slow in processing. And with the current mechanism if Zebra main is +busy, the ibuf FIFO keeps growing holding up the memory. + +Show memory zebra:(Example: 15k streams hoarding ~160 MB of data) +--- qmem libfrr --- +Stream : 44 variable 3432352 15042 161243800 + +Fix: +Client IO Thread: (zserv_read) + - Stop doing the read events when we know there are X number of items + on the FIFO already.(X - zebra zapi-packets <1-10000> (Default-1000) + + - Determine the number of items on the zserv->ibuf_fifo. Subtract this + from the work items and only pull the number of items off that would + take us to X items on the ibuf_fifo again. + + - If the number of items in the ibuf_fifo has reached to the maximum + * Either initially when zserv_read() is called (or) + * when processing the remainders of the incoming buffer + the client IO thread is woken by the the zebra main. + +Main thread: (zserv_process_message) +If the client ibuf always schedules a wakeup to the client IO to read +more items from the socked buffer. This way we ensure + - Client IO thread always tries to read the socket buffer and add more + items to the ibuf_fifo (until max limit) + - hidden config change (zebra zapi-packets <>) is taken into account + +Ticket: #3390099 + +Signed-off-by: Donald Sharp +Signed-off-by: Rajasekar Raja + +diff --git a/zebra/zserv.c b/zebra/zserv.c +index 2024f34534..de6e404fc4 100644 +--- a/zebra/zserv.c ++++ b/zebra/zserv.c +@@ -318,6 +318,14 @@ zwrite_fail: + * this task reschedules itself. + * + * Any failure in any of these actions is handled by terminating the client. ++ * ++ * The client's input buffer ibuf_fifo can have a maximum items as configured ++ * in the packets_to_process. This way we are not filling up the FIFO more ++ * than the maximum when the zebra main is busy. If the fifo has space, we ++ * reschedule ourselves to read more. ++ * ++ * The main thread processes the items in ibuf_fifo and always signals the ++ * client IO thread. + */ + static void zserv_read(struct thread *thread) + { +@@ -325,15 +333,25 @@ static void zserv_read(struct thread *thread) + int sock; + size_t already; + struct stream_fifo *cache; +- uint32_t p2p_orig; +- +- uint32_t p2p; ++ uint32_t p2p; /* Temp p2p used to process */ ++ uint32_t p2p_orig; /* Configured p2p (Default-1000) */ ++ int p2p_avail; /* How much space is available for p2p */ + struct zmsghdr hdr; ++ size_t client_ibuf_fifo_cnt = stream_fifo_count_safe(client->ibuf_fifo); + + p2p_orig = atomic_load_explicit(&zrouter.packets_to_process, + memory_order_relaxed); ++ p2p_avail = p2p_orig - client_ibuf_fifo_cnt; ++ ++ /* ++ * Do nothing if ibuf_fifo count has reached its max limit. Otherwise ++ * proceed and reschedule ourselves if there is space in the ibuf_fifo. ++ */ ++ if (p2p_avail <= 0) ++ return; ++ ++ p2p = p2p_avail; + cache = stream_fifo_new(); +- p2p = p2p_orig; + sock = THREAD_FD(thread); + + while (p2p) { +@@ -433,7 +451,7 @@ static void zserv_read(struct thread *thread) + p2p--; + } + +- if (p2p < p2p_orig) { ++ if (p2p < (uint32_t)p2p_avail) { + uint64_t time_now = monotime(NULL); + + /* update session statistics */ +@@ -447,19 +465,23 @@ static void zserv_read(struct thread *thread) + while (cache->head) + stream_fifo_push(client->ibuf_fifo, + stream_fifo_pop(cache)); ++ /* Need to update count as main thread could have processed few */ ++ client_ibuf_fifo_cnt = ++ stream_fifo_count_safe(client->ibuf_fifo); + } + + /* Schedule job to process those packets */ + zserv_event(client, ZSERV_PROCESS_MESSAGES); +- + } + + if (IS_ZEBRA_DEBUG_PACKET) +- zlog_debug("Read %d packets from client: %s", p2p_orig - p2p, +- zebra_route_string(client->proto)); ++ zlog_debug("Read %d packets from client: %s. Current ibuf fifo count: %zu. Conf P2p %d", ++ p2p_avail - p2p, zebra_route_string(client->proto), ++ client_ibuf_fifo_cnt, p2p_orig); + +- /* Reschedule ourselves */ +- zserv_client_event(client, ZSERV_CLIENT_READ); ++ /* Reschedule ourselves since we have space in ibuf_fifo */ ++ if (client_ibuf_fifo_cnt < p2p_orig) ++ zserv_client_event(client, ZSERV_CLIENT_READ); + + stream_fifo_free(cache); + +@@ -495,14 +517,20 @@ static void zserv_client_event(struct zserv *client, + * as the task argument. + * + * Each message is popped off the client's input queue and the action associated +- * with the message is executed. This proceeds until there are no more messages, +- * an error occurs, or the processing limit is reached. ++ * with the message is executed. This proceeds until an error occurs, or the ++ * processing limit is reached. + * + * The client's I/O thread can push at most zrouter.packets_to_process messages + * onto the input buffer before notifying us there are packets to read. As long + * as we always process zrouter.packets_to_process messages here, then we can + * rely on the read thread to handle queuing this task enough times to process + * everything on the input queue. ++ * ++ * If the client ibuf always schedules a wakeup to the client IO to read more ++ * items from the socked buffer. This way we ensure ++ * - Client IO thread always tries to read the socket buffer and add more ++ * items to the ibuf_fifo (until max limit) ++ * - the hidden config change (zebra zapi-packets <>) is taken into account. + */ + static void zserv_process_messages(struct thread *thread) + { +@@ -538,6 +566,9 @@ static void zserv_process_messages(struct thread *thread) + /* Reschedule ourselves if necessary */ + if (need_resched) + zserv_event(client, ZSERV_PROCESS_MESSAGES); ++ ++ /* Ensure to include the read socket in the select/poll/etc.. */ ++ zserv_client_event(client, ZSERV_CLIENT_READ); + } + + int zserv_send_message(struct zserv *client, struct stream *msg) +-- +2.17.1 + diff --git a/src/sonic-frr/patch/0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch b/src/sonic-frr/patch/0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch new file mode 100644 index 000000000000..21a2b90f44f4 --- /dev/null +++ b/src/sonic-frr/patch/0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch @@ -0,0 +1,90 @@ +From 7796ce2bb6eb1650ae1bec41ab2f270807b33c62 Mon Sep 17 00:00:00 2001 +From: Donald Sharp +Date: Thu, 25 Jan 2024 12:53:24 -0500 +Subject: [PATCH 03/11] bgpd: backpressure - Add a typesafe list for Zebra + Announcement + +Modify the bgp master to hold a type safe list for bgp_dests that need +to be passed to zebra. + +Future commits will use this. + +Ticket: #3390099 + +Signed-off-by: Donald Sharp +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgp_main.c b/bgpd/bgp_main.c +index 90ae580bab..e28dde5d16 100644 +--- a/bgpd/bgp_main.c ++++ b/bgpd/bgp_main.c +@@ -214,6 +214,8 @@ static __attribute__((__noreturn__)) void bgp_exit(int status) + bgp_evpn_mh_finish(); + bgp_l3nhg_finish(); + ++ zebra_announce_fini(&bm->zebra_announce_head); ++ + /* reverse bgp_dump_init */ + bgp_dump_finish(); + +diff --git a/bgpd/bgp_table.h b/bgpd/bgp_table.h +index 121afc481f..d43bf86eb9 100644 +--- a/bgpd/bgp_table.h ++++ b/bgpd/bgp_table.h +@@ -101,6 +101,8 @@ struct bgp_node { + + STAILQ_ENTRY(bgp_dest) pq; + ++ struct zebra_announce_item zai; ++ + uint64_t version; + + mpls_label_t local_label; +@@ -121,6 +123,8 @@ struct bgp_node { + enum bgp_path_selection_reason reason; + }; + ++DECLARE_LIST(zebra_announce, struct bgp_dest, zai); ++ + extern void bgp_delete_listnode(struct bgp_dest *dest); + /* + * bgp_table_iter_t +diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c +index 023047050b..392423e028 100644 +--- a/bgpd/bgpd.c ++++ b/bgpd/bgpd.c +@@ -8017,6 +8017,8 @@ void bgp_master_init(struct thread_master *master, const int buffer_size, + memset(&bgp_master, 0, sizeof(bgp_master)); + + bm = &bgp_master; ++ ++ zebra_announce_init(&bm->zebra_announce_head); + bm->bgp = list_new(); + bm->listen_sockets = list_new(); + bm->port = BGP_PORT_DEFAULT; +diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h +index 72b5b50fb4..55f53bf9d3 100644 +--- a/bgpd/bgpd.h ++++ b/bgpd/bgpd.h +@@ -32,6 +32,8 @@ + #include "srv6.h" + #include "iana_afi.h" + ++PREDECL_LIST(zebra_announce); ++ + /* For union sockunion. */ + #include "queue.h" + #include "sockunion.h" +@@ -180,6 +182,9 @@ struct bgp_master { + uint32_t inq_limit; + uint32_t outq_limit; + ++ /* To preserve ordering of installations into zebra across all Vrfs */ ++ struct zebra_announce_head zebra_announce_head; ++ + QOBJ_FIELDS; + }; + DECLARE_QOBJ_TYPE(bgp_master); +-- +2.17.1 + diff --git a/src/sonic-frr/patch/0032-bgpd-fix-flushing-ipv6-flowspec-entries-when-peering.patch b/src/sonic-frr/patch/0032-bgpd-fix-flushing-ipv6-flowspec-entries-when-peering.patch new file mode 100644 index 000000000000..bfefccceff10 --- /dev/null +++ b/src/sonic-frr/patch/0032-bgpd-fix-flushing-ipv6-flowspec-entries-when-peering.patch @@ -0,0 +1,158 @@ +From 69e38aa82f325129ebad4535be5d834c599b5c0b Mon Sep 17 00:00:00 2001 +From: Philippe Guibert +Date: Wed, 7 Feb 2024 22:34:34 +0100 +Subject: [PATCH 04/11] bgpd: fix flushing ipv6 flowspec entries when peering + stops + +When a BGP flowspec peering stops, the BGP RIB entries for IPv6 +flowspec entries are removed, but not the ZEBRA RIB IPv6 entries. + +Actually, when calling bgp_zebra_withdraw() function call, only +the AFI_IP parameter is passed to the bgp_pbr_update_entry() function +in charge of the Flowspec add/delete in zebra. Fix this by passing +the AFI parameter to the bgp_zebra_withdraw() function. + +Note that using topotest does not show up the problem as the +flowspec driver code is not present and was refused. Without that, +routes are not installed, and can not be uninstalled. + +Fixes: 529efa234655 ("bgpd: allow flowspec entries to be announced to zebra") +Link: https://github.com/FRRouting/frr/pull/2025 + +Signed-off-by: Philippe Guibert + +diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c +index fbff57634a..455cd6cdbb 100644 +--- a/bgpd/bgp_route.c ++++ b/bgpd/bgp_route.c +@@ -3312,7 +3312,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + */ + if (old_select && + is_route_parent_evpn(old_select)) +- bgp_zebra_withdraw(p, old_select, bgp, safi); ++ bgp_zebra_withdraw(p, old_select, bgp, afi, ++ safi); + + bgp_zebra_announce(dest, p, new_select, bgp, afi, safi); + } else { +@@ -3322,7 +3323,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + || old_select->sub_type == BGP_ROUTE_AGGREGATE + || old_select->sub_type == BGP_ROUTE_IMPORTED)) + +- bgp_zebra_withdraw(p, old_select, bgp, safi); ++ bgp_zebra_withdraw(p, old_select, bgp, afi, ++ safi); + } + } + +@@ -4201,7 +4203,7 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, + if (pi && pi->attr->rmap_table_id != new_attr.rmap_table_id) { + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED)) + /* remove from RIB previous entry */ +- bgp_zebra_withdraw(p, pi, bgp, safi); ++ bgp_zebra_withdraw(p, pi, bgp, afi, safi); + } + + if (peer->sort == BGP_PEER_EBGP) { +@@ -5841,7 +5843,7 @@ bool bgp_inbound_policy_exists(struct peer *peer, struct bgp_filter *filter) + } + + static void bgp_cleanup_table(struct bgp *bgp, struct bgp_table *table, +- safi_t safi) ++ afi_t afi, safi_t safi) + { + struct bgp_dest *dest; + struct bgp_path_info *pi; +@@ -5865,7 +5867,8 @@ static void bgp_cleanup_table(struct bgp *bgp, struct bgp_table *table, + || pi->sub_type == BGP_ROUTE_IMPORTED)) { + + if (bgp_fibupd_safi(safi)) +- bgp_zebra_withdraw(p, pi, bgp, safi); ++ bgp_zebra_withdraw(p, pi, bgp, afi, ++ safi); + } + + bgp_path_info_reap(dest, pi); +@@ -5882,7 +5885,7 @@ void bgp_cleanup_routes(struct bgp *bgp) + for (afi = AFI_IP; afi < AFI_MAX; ++afi) { + if (afi == AFI_L2VPN) + continue; +- bgp_cleanup_table(bgp, bgp->rib[afi][SAFI_UNICAST], ++ bgp_cleanup_table(bgp, bgp->rib[afi][SAFI_UNICAST], afi, + SAFI_UNICAST); + /* + * VPN and ENCAP and EVPN tables are two-level (RD is top level) +@@ -5894,7 +5897,7 @@ void bgp_cleanup_routes(struct bgp *bgp) + dest = bgp_route_next(dest)) { + table = bgp_dest_get_bgp_table_info(dest); + if (table != NULL) { +- bgp_cleanup_table(bgp, table, safi); ++ bgp_cleanup_table(bgp, table, afi, safi); + bgp_table_finish(&table); + bgp_dest_set_bgp_table_info(dest, NULL); + bgp_dest_unlock_node(dest); +@@ -5905,7 +5908,7 @@ void bgp_cleanup_routes(struct bgp *bgp) + dest = bgp_route_next(dest)) { + table = bgp_dest_get_bgp_table_info(dest); + if (table != NULL) { +- bgp_cleanup_table(bgp, table, safi); ++ bgp_cleanup_table(bgp, table, afi, safi); + bgp_table_finish(&table); + bgp_dest_set_bgp_table_info(dest, NULL); + bgp_dest_unlock_node(dest); +@@ -5917,7 +5920,7 @@ void bgp_cleanup_routes(struct bgp *bgp) + dest = bgp_route_next(dest)) { + table = bgp_dest_get_bgp_table_info(dest); + if (table != NULL) { +- bgp_cleanup_table(bgp, table, SAFI_EVPN); ++ bgp_cleanup_table(bgp, table, afi, SAFI_EVPN); + bgp_table_finish(&table); + bgp_dest_set_bgp_table_info(dest, NULL); + bgp_dest_unlock_node(dest); +diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c +index ff79746b4c..69240a3b83 100644 +--- a/bgpd/bgp_zebra.c ++++ b/bgpd/bgp_zebra.c +@@ -1761,7 +1761,7 @@ void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, + } + + void bgp_zebra_withdraw(const struct prefix *p, struct bgp_path_info *info, +- struct bgp *bgp, safi_t safi) ++ struct bgp *bgp, afi_t afi, safi_t safi) + { + struct zapi_route api; + struct peer *peer; +@@ -1780,7 +1780,7 @@ void bgp_zebra_withdraw(const struct prefix *p, struct bgp_path_info *info, + + if (safi == SAFI_FLOWSPEC) { + peer = info->peer; +- bgp_pbr_update_entry(peer->bgp, p, info, AFI_IP, safi, false); ++ bgp_pbr_update_entry(peer->bgp, p, info, afi, safi, false); + return; + } + +@@ -1821,7 +1821,7 @@ void bgp_zebra_withdraw_table_all_subtypes(struct bgp *bgp, afi_t afi, safi_t sa + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) + && (pi->type == ZEBRA_ROUTE_BGP)) + bgp_zebra_withdraw(bgp_dest_get_prefix(dest), +- pi, bgp, safi); ++ pi, bgp, afi, safi); + } + } + } +diff --git a/bgpd/bgp_zebra.h b/bgpd/bgp_zebra.h +index 0a41069411..a5fe8d7ace 100644 +--- a/bgpd/bgp_zebra.h ++++ b/bgpd/bgp_zebra.h +@@ -49,7 +49,7 @@ extern void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, + extern void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi); + extern void bgp_zebra_withdraw(const struct prefix *p, + struct bgp_path_info *path, struct bgp *bgp, +- safi_t safi); ++ afi_t afi, safi_t safi); + + /* Announce routes of any bgp subtype of a table to zebra */ + extern void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, +-- +2.17.1 + diff --git a/src/sonic-frr/patch/0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch b/src/sonic-frr/patch/0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch new file mode 100644 index 000000000000..16383dc95caa --- /dev/null +++ b/src/sonic-frr/patch/0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch @@ -0,0 +1,234 @@ +From 679ad9ee5f3c15570d697506183d37aa29f6ebf2 Mon Sep 17 00:00:00 2001 +From: Donald Sharp +Date: Thu, 25 Jan 2024 13:07:37 -0500 +Subject: [PATCH 05/11] bgpd: backpressure - cleanup bgp_zebra_XX func args + +Since installing/withdrawing routes into zebra is going to be changed +around to be dest based in a list, + - Retrieve the afi/safi to use based upon the dest's afi/safi + instead of passing it in. + - Prefix is known by the dest. Remove this arg as well + +Ticket: #3390099 + +Signed-off-by: Donald Sharp +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c +index 455cd6cdbb..d19f27110e 100644 +--- a/bgpd/bgp_route.c ++++ b/bgpd/bgp_route.c +@@ -3214,8 +3214,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + || new_select->sub_type + == BGP_ROUTE_IMPORTED)) + +- bgp_zebra_announce(dest, p, old_select, +- bgp, afi, safi); ++ bgp_zebra_announce(dest, old_select, ++ bgp); + } + } + +@@ -3312,10 +3312,9 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + */ + if (old_select && + is_route_parent_evpn(old_select)) +- bgp_zebra_withdraw(p, old_select, bgp, afi, +- safi); ++ bgp_zebra_withdraw(dest, old_select, bgp); + +- bgp_zebra_announce(dest, p, new_select, bgp, afi, safi); ++ bgp_zebra_announce(dest, new_select, bgp); + } else { + /* Withdraw the route from the kernel. */ + if (old_select && old_select->type == ZEBRA_ROUTE_BGP +@@ -3323,8 +3322,7 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + || old_select->sub_type == BGP_ROUTE_AGGREGATE + || old_select->sub_type == BGP_ROUTE_IMPORTED)) + +- bgp_zebra_withdraw(p, old_select, bgp, afi, +- safi); ++ bgp_zebra_withdraw(dest, old_select, bgp); + } + } + +@@ -4203,7 +4201,7 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, + if (pi && pi->attr->rmap_table_id != new_attr.rmap_table_id) { + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED)) + /* remove from RIB previous entry */ +- bgp_zebra_withdraw(p, pi, bgp, afi, safi); ++ bgp_zebra_withdraw(dest, pi, bgp); + } + + if (peer->sort == BGP_PEER_EBGP) { +@@ -5867,8 +5865,7 @@ static void bgp_cleanup_table(struct bgp *bgp, struct bgp_table *table, + || pi->sub_type == BGP_ROUTE_IMPORTED)) { + + if (bgp_fibupd_safi(safi)) +- bgp_zebra_withdraw(p, pi, bgp, afi, +- safi); ++ bgp_zebra_withdraw(dest, pi, bgp); + } + + bgp_path_info_reap(dest, pi); +diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c +index 69240a3b83..920df835a4 100644 +--- a/bgpd/bgp_zebra.c ++++ b/bgpd/bgp_zebra.c +@@ -1292,9 +1292,8 @@ static bool bgp_zebra_use_nhop_weighted(struct bgp *bgp, struct attr *attr, + return true; + } + +-void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, +- struct bgp_path_info *info, struct bgp *bgp, afi_t afi, +- safi_t safi) ++void bgp_zebra_announce(struct bgp_dest *dest, struct bgp_path_info *info, ++ struct bgp *bgp) + { + struct zapi_route api = { 0 }; + struct zapi_nexthop *api_nh; +@@ -1321,6 +1320,8 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, + uint32_t ttl = 0; + uint32_t bos = 0; + uint32_t exp = 0; ++ struct bgp_table *table = bgp_dest_table(dest); ++ const struct prefix *p = bgp_dest_get_prefix(dest); + + /* + * BGP is installing this route and bgp has been configured +@@ -1339,9 +1340,9 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, + if (bgp->main_zebra_update_hold) + return; + +- if (safi == SAFI_FLOWSPEC) { +- bgp_pbr_update_entry(bgp, bgp_dest_get_prefix(dest), info, afi, +- safi, true); ++ if (table->safi == SAFI_FLOWSPEC) { ++ bgp_pbr_update_entry(bgp, p, info, table->afi, table->safi, ++ true); + return; + } + +@@ -1354,7 +1355,7 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, + /* Make Zebra API structure. */ + api.vrf_id = bgp->vrf_id; + api.type = ZEBRA_ROUTE_BGP; +- api.safi = safi; ++ api.safi = table->safi; + api.prefix = *p; + SET_FLAG(api.message, ZAPI_MESSAGE_NEXTHOP); + +@@ -1458,12 +1459,13 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, + } + } + +- if (bgp->table_map[afi][safi].name) { ++ if (bgp->table_map[table->afi][table->safi].name) { + /* Copy info and attributes, so the route-map + apply doesn't modify the BGP route info. */ + local_attr = *mpinfo->attr; + mpinfo_cp->attr = &local_attr; +- if (!bgp_table_map_apply(bgp->table_map[afi][safi].map, ++ if (!bgp_table_map_apply(bgp->table_map[table->afi] ++ [table->safi].map, + p, mpinfo_cp)) + continue; + +@@ -1619,7 +1621,7 @@ void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, + api.tag = tag; + } + +- distance = bgp_distance_apply(p, info, afi, safi, bgp); ++ distance = bgp_distance_apply(p, info, table->afi, table->safi, bgp); + if (distance) { + SET_FLAG(api.message, ZAPI_MESSAGE_DISTANCE); + api.distance = distance; +@@ -1731,9 +1733,7 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi) + && (pi->sub_type == BGP_ROUTE_NORMAL + || pi->sub_type == BGP_ROUTE_IMPORTED))) + +- bgp_zebra_announce(dest, +- bgp_dest_get_prefix(dest), +- pi, bgp, afi, safi); ++ bgp_zebra_announce(dest, pi, bgp); + } + + /* Announce routes of any bgp subtype of a table to zebra */ +@@ -1755,16 +1755,16 @@ void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, + for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) && + pi->type == ZEBRA_ROUTE_BGP) +- bgp_zebra_announce(dest, +- bgp_dest_get_prefix(dest), +- pi, bgp, afi, safi); ++ bgp_zebra_announce(dest, pi, bgp); + } + +-void bgp_zebra_withdraw(const struct prefix *p, struct bgp_path_info *info, +- struct bgp *bgp, afi_t afi, safi_t safi) ++void bgp_zebra_withdraw(struct bgp_dest *dest, struct bgp_path_info *info, ++ struct bgp *bgp) + { + struct zapi_route api; + struct peer *peer; ++ struct bgp_table *table = bgp_dest_table(dest); ++ const struct prefix *p = bgp_dest_get_prefix(dest); + + /* + * If we are withdrawing the route, we don't need to have this +@@ -1778,16 +1778,17 @@ void bgp_zebra_withdraw(const struct prefix *p, struct bgp_path_info *info, + if (!bgp_install_info_to_zebra(bgp)) + return; + +- if (safi == SAFI_FLOWSPEC) { ++ if (table->safi == SAFI_FLOWSPEC) { + peer = info->peer; +- bgp_pbr_update_entry(peer->bgp, p, info, afi, safi, false); ++ bgp_pbr_update_entry(peer->bgp, p, info, table->afi, ++ table->safi, false); + return; + } + + memset(&api, 0, sizeof(api)); + api.vrf_id = bgp->vrf_id; + api.type = ZEBRA_ROUTE_BGP; +- api.safi = safi; ++ api.safi = table->safi; + api.prefix = *p; + + if (info->attr->rmap_table_id) { +@@ -1820,8 +1821,7 @@ void bgp_zebra_withdraw_table_all_subtypes(struct bgp *bgp, afi_t afi, safi_t sa + for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) { + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) + && (pi->type == ZEBRA_ROUTE_BGP)) +- bgp_zebra_withdraw(bgp_dest_get_prefix(dest), +- pi, bgp, afi, safi); ++ bgp_zebra_withdraw(dest, pi, bgp); + } + } + } +diff --git a/bgpd/bgp_zebra.h b/bgpd/bgp_zebra.h +index a5fe8d7ace..b77e423f8f 100644 +--- a/bgpd/bgp_zebra.h ++++ b/bgpd/bgp_zebra.h +@@ -43,13 +43,11 @@ extern void bgp_zebra_destroy(void); + extern int bgp_zebra_get_table_range(uint32_t chunk_size, + uint32_t *start, uint32_t *end); + extern int bgp_if_update_all(void); +-extern void bgp_zebra_announce(struct bgp_dest *dest, const struct prefix *p, +- struct bgp_path_info *path, struct bgp *bgp, +- afi_t afi, safi_t safi); ++extern void bgp_zebra_announce(struct bgp_dest *dest, ++ struct bgp_path_info *path, struct bgp *bgp); + extern void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi); +-extern void bgp_zebra_withdraw(const struct prefix *p, +- struct bgp_path_info *path, struct bgp *bgp, +- afi_t afi, safi_t safi); ++extern void bgp_zebra_withdraw(struct bgp_dest *dest, ++ struct bgp_path_info *path, struct bgp *bgp); + + /* Announce routes of any bgp subtype of a table to zebra */ + extern void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, +-- +2.17.1 + diff --git a/src/sonic-frr/patch/0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch b/src/sonic-frr/patch/0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch new file mode 100644 index 000000000000..724cf1297a59 --- /dev/null +++ b/src/sonic-frr/patch/0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch @@ -0,0 +1,512 @@ +From 6d5604a9315801e9380c11357d663ad6537ed8ab Mon Sep 17 00:00:00 2001 +From: Donald Sharp +Date: Fri, 26 Jan 2024 14:48:53 -0500 +Subject: [PATCH 06/11] bgpd : backpressure - Handle BGP-Zebra Install evt + Creation + +BGP is now keeping a list of dests with the dest having a pointer +to the bgp_path_info that it will be working on. + +1) When bgp receives a prefix, process it, add the bgp_dest of the +prefix into the new Fifo list if not present, update the flags (Ex: +earlier if the prefix was advertised and now it is a withdrawn), +increment the ref_count and DO NOT advertise the install/withdraw +to zebra yet. + +2) Schedule an event to wake up to invoke the new function which will +walk the list one by one and installs/withdraws the routes into zebra. + a) if BUFFER_EMPTY, process the next item on the list + b) if BUFFER_PENDING, bail out and the callback in + zclient_flush_data() will invoke the same function when BUFFER_EMPTY + +Changes + - rename old bgp_zebra_announce to bgp_zebra_announce_actual + - rename old bgp_zebra_withdrw to bgp_zebra_withdraw_actual + - Handle new fifo list cleanup in bgp_exit() + - New funcs: bgp_handle_route_announcements_to_zebra() and + bgp_zebra_route_install() + - Define a callback function to invoke + bgp_handle_route_announcements_to_zebra() when BUFFER_EMPTY in + zclient_flush_data() + +The current change deals with bgp installing routes via +bgp_process_main_one() + +Ticket: #3390099 + +Signed-off-by: Donald Sharp +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c +index d19f27110e..c29442d96c 100644 +--- a/bgpd/bgp_route.c ++++ b/bgpd/bgp_route.c +@@ -3214,8 +3214,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + || new_select->sub_type + == BGP_ROUTE_IMPORTED)) + +- bgp_zebra_announce(dest, old_select, +- bgp); ++ bgp_zebra_route_install( ++ dest, old_select, bgp, true); + } + } + +@@ -3312,9 +3312,10 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + */ + if (old_select && + is_route_parent_evpn(old_select)) +- bgp_zebra_withdraw(dest, old_select, bgp); ++ bgp_zebra_route_install(dest, old_select, bgp, ++ false); + +- bgp_zebra_announce(dest, new_select, bgp); ++ bgp_zebra_route_install(dest, new_select, bgp, true); + } else { + /* Withdraw the route from the kernel. */ + if (old_select && old_select->type == ZEBRA_ROUTE_BGP +@@ -3322,7 +3323,8 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + || old_select->sub_type == BGP_ROUTE_AGGREGATE + || old_select->sub_type == BGP_ROUTE_IMPORTED)) + +- bgp_zebra_withdraw(dest, old_select, bgp); ++ bgp_zebra_route_install(dest, old_select, bgp, ++ false); + } + } + +@@ -4201,7 +4203,7 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, + if (pi && pi->attr->rmap_table_id != new_attr.rmap_table_id) { + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED)) + /* remove from RIB previous entry */ +- bgp_zebra_withdraw(dest, pi, bgp); ++ bgp_zebra_route_install(dest, pi, bgp, false); + } + + if (peer->sort == BGP_PEER_EBGP) { +@@ -5865,7 +5867,8 @@ static void bgp_cleanup_table(struct bgp *bgp, struct bgp_table *table, + || pi->sub_type == BGP_ROUTE_IMPORTED)) { + + if (bgp_fibupd_safi(safi)) +- bgp_zebra_withdraw(dest, pi, bgp); ++ bgp_zebra_withdraw_actual(dest, pi, ++ bgp); + } + + bgp_path_info_reap(dest, pi); +diff --git a/bgpd/bgp_table.h b/bgpd/bgp_table.h +index d43bf86eb9..45d61f8dfd 100644 +--- a/bgpd/bgp_table.h ++++ b/bgpd/bgp_table.h +@@ -102,6 +102,7 @@ struct bgp_node { + STAILQ_ENTRY(bgp_dest) pq; + + struct zebra_announce_item zai; ++ struct bgp_path_info *za_bgp_pi; + + uint64_t version; + +@@ -117,6 +118,8 @@ struct bgp_node { + #define BGP_NODE_FIB_INSTALLED (1 << 6) + #define BGP_NODE_LABEL_REQUESTED (1 << 7) + #define BGP_NODE_SOFT_RECONFIG (1 << 8) ++#define BGP_NODE_SCHEDULE_FOR_INSTALL (1 << 10) ++#define BGP_NODE_SCHEDULE_FOR_DELETE (1 << 11) + + struct bgp_addpath_node_data tx_addpath; + +diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c +index 920df835a4..1162941ef1 100644 +--- a/bgpd/bgp_zebra.c ++++ b/bgpd/bgp_zebra.c +@@ -1292,8 +1292,9 @@ static bool bgp_zebra_use_nhop_weighted(struct bgp *bgp, struct attr *attr, + return true; + } + +-void bgp_zebra_announce(struct bgp_dest *dest, struct bgp_path_info *info, +- struct bgp *bgp) ++static enum zclient_send_status ++bgp_zebra_announce_actual(struct bgp_dest *dest, struct bgp_path_info *info, ++ struct bgp *bgp) + { + struct zapi_route api = { 0 }; + struct zapi_nexthop *api_nh; +@@ -1323,27 +1324,10 @@ void bgp_zebra_announce(struct bgp_dest *dest, struct bgp_path_info *info, + struct bgp_table *table = bgp_dest_table(dest); + const struct prefix *p = bgp_dest_get_prefix(dest); + +- /* +- * BGP is installing this route and bgp has been configured +- * to suppress announcements until the route has been installed +- * let's set the fact that we expect this route to be installed +- */ +- if (BGP_SUPPRESS_FIB_ENABLED(bgp)) +- SET_FLAG(dest->flags, BGP_NODE_FIB_INSTALL_PENDING); +- +- /* Don't try to install if we're not connected to Zebra or Zebra doesn't +- * know of this instance. +- */ +- if (!bgp_install_info_to_zebra(bgp)) +- return; +- +- if (bgp->main_zebra_update_hold) +- return; +- + if (table->safi == SAFI_FLOWSPEC) { + bgp_pbr_update_entry(bgp, p, info, table->afi, table->safi, + true); +- return; ++ return ZCLIENT_SEND_SUCCESS; + } + + /* +@@ -1704,10 +1688,11 @@ void bgp_zebra_announce(struct bgp_dest *dest, struct bgp_path_info *info, + zlog_debug("%s: %pFX: announcing to zebra (recursion %sset)", + __func__, p, (recursion_flag ? "" : "NOT ")); + } +- zclient_route_send(is_add ? ZEBRA_ROUTE_ADD : ZEBRA_ROUTE_DELETE, +- zclient, &api); ++ return zclient_route_send(is_add ? ZEBRA_ROUTE_ADD : ZEBRA_ROUTE_DELETE, ++ zclient, &api); + } + ++ + /* Announce all routes of a table to zebra */ + void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi) + { +@@ -1733,7 +1718,7 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi) + && (pi->sub_type == BGP_ROUTE_NORMAL + || pi->sub_type == BGP_ROUTE_IMPORTED))) + +- bgp_zebra_announce(dest, pi, bgp); ++ bgp_zebra_route_install(dest, pi, bgp, true); + } + + /* Announce routes of any bgp subtype of a table to zebra */ +@@ -1755,34 +1740,23 @@ void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, + for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) && + pi->type == ZEBRA_ROUTE_BGP) +- bgp_zebra_announce(dest, pi, bgp); ++ bgp_zebra_route_install(dest, pi, bgp, true); + } + +-void bgp_zebra_withdraw(struct bgp_dest *dest, struct bgp_path_info *info, +- struct bgp *bgp) ++enum zclient_send_status bgp_zebra_withdraw_actual(struct bgp_dest *dest, ++ struct bgp_path_info *info, ++ struct bgp *bgp) + { + struct zapi_route api; + struct peer *peer; + struct bgp_table *table = bgp_dest_table(dest); + const struct prefix *p = bgp_dest_get_prefix(dest); + +- /* +- * If we are withdrawing the route, we don't need to have this +- * flag set. So unset it. +- */ +- UNSET_FLAG(info->net->flags, BGP_NODE_FIB_INSTALL_PENDING); +- +- /* Don't try to install if we're not connected to Zebra or Zebra doesn't +- * know of this instance. +- */ +- if (!bgp_install_info_to_zebra(bgp)) +- return; +- + if (table->safi == SAFI_FLOWSPEC) { + peer = info->peer; + bgp_pbr_update_entry(peer->bgp, p, info, table->afi, + table->safi, false); +- return; ++ return ZCLIENT_SEND_SUCCESS; + } + + memset(&api, 0, sizeof(api)); +@@ -1800,7 +1774,172 @@ void bgp_zebra_withdraw(struct bgp_dest *dest, struct bgp_path_info *info, + zlog_debug("Tx route delete VRF %u %pFX", bgp->vrf_id, + &api.prefix); + +- zclient_route_send(ZEBRA_ROUTE_DELETE, zclient, &api); ++ return zclient_route_send(ZEBRA_ROUTE_DELETE, zclient, &api); ++} ++ ++/* ++ * Walk the new Fifo list one by one and invoke bgp_zebra_announce/withdraw ++ * to install/withdraw the routes to zebra. ++ * ++ * If status = ZCLIENT_SEND_SUCCESS (Buffer empt)y i.e. Zebra is free to ++ * receive more incoming data, then pick the next item on the list and ++ * continue processing. ++ * ++ * If status = ZCLIENT_SEND_BUFFERED (Buffer pending) i.e. Zebra is busy, ++ * break and bail out of the function because once at some point when zebra ++ * is free, a callback is triggered which inturn call this same function and ++ * continue processing items on list. ++ */ ++#define ZEBRA_ANNOUNCEMENTS_LIMIT 1000 ++static void bgp_handle_route_announcements_to_zebra(struct thread *e) ++{ ++ uint32_t count = 0; ++ struct bgp_dest *dest = NULL; ++ struct bgp_table *table = NULL; ++ enum zclient_send_status status = ZCLIENT_SEND_SUCCESS; ++ bool install; ++ ++ while (count < ZEBRA_ANNOUNCEMENTS_LIMIT) { ++ dest = zebra_announce_pop(&bm->zebra_announce_head); ++ ++ if (!dest) ++ break; ++ ++ table = bgp_dest_table(dest); ++ install = ++ CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); ++ ++ if (BGP_DEBUG(zebra, ZEBRA)) ++ zlog_debug( ++ "BGP %s route %pBD(%s) with dest %p and flags 0x%x to zebra", ++ install ? "announcing" : "withdrawing", dest, ++ table->bgp->name_pretty, dest, dest->flags); ++ ++ if (install) { ++ status = bgp_zebra_announce_actual( ++ dest, dest->za_bgp_pi, table->bgp); ++ UNSET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); ++ } else { ++ status = bgp_zebra_withdraw_actual( ++ dest, dest->za_bgp_pi, table->bgp); ++ UNSET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE); ++ } ++ ++ bgp_path_info_unlock(dest->za_bgp_pi); ++ dest->za_bgp_pi = NULL; ++ bgp_dest_unlock_node(dest); ++ ++ if (status == ZCLIENT_SEND_BUFFERED) ++ break; ++ ++ count++; ++ } ++ ++ if (status != ZCLIENT_SEND_BUFFERED && ++ zebra_announce_count(&bm->zebra_announce_head)) ++ thread_add_event(bm->master, ++ bgp_handle_route_announcements_to_zebra, NULL, ++ 0, &bm->t_bgp_zebra_route); ++} ++ ++/* ++ * Callback function invoked when zclient_flush_data() receives a BUFFER_EMPTY ++ * i.e. zebra is free to receive more incoming data. ++ */ ++static void bgp_zebra_buffer_write_ready(void) ++{ ++ bgp_handle_route_announcements_to_zebra(NULL); ++} ++ ++/* ++ * BGP is now keeping a list of dests with the dest having a pointer ++ * to the bgp_path_info that it will be working on. ++ * Here is the sequence of events that should happen: ++ * ++ * Current State New State Action ++ * ------------- --------- ------ ++ * ---- Install Place dest on list, save pi, mark ++ * as going to be installed ++ * ---- Withdrawal Place dest on list, save pi, mark ++ * as going to be deleted ++ * ++ * Install Install Leave dest on list, release old pi, ++ * save new pi, mark as going to be ++ * Installed ++ * Install Withdrawal Leave dest on list, release old pi, ++ * save new pi, mark as going to be ++ * withdrawan, remove install flag ++ * ++ * Withdrawal Install Special case, send withdrawal immediately ++ * Leave dest on list, release old pi, ++ * save new pi, mark as going to be ++ * installed. ++ * Withdrawal Withdrawal Leave dest on list, release old pi, ++ * save new pi, mark as going to be ++ * withdrawn. ++ */ ++void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, ++ struct bgp *bgp, bool install) ++{ ++ /* ++ * BGP is installing this route and bgp has been configured ++ * to suppress announcements until the route has been installed ++ * let's set the fact that we expect this route to be installed ++ */ ++ if (install) { ++ if (BGP_SUPPRESS_FIB_ENABLED(bgp)) ++ SET_FLAG(dest->flags, BGP_NODE_FIB_INSTALL_PENDING); ++ ++ if (bgp->main_zebra_update_hold) ++ return; ++ } else { ++ UNSET_FLAG(dest->flags, BGP_NODE_FIB_INSTALL_PENDING); ++ } ++ ++ /* ++ * Don't try to install if we're not connected to Zebra or Zebra doesn't ++ * know of this instance. ++ */ ++ if (!bgp_install_info_to_zebra(bgp)) ++ return; ++ ++ if (!CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL) && ++ !CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE)) { ++ zebra_announce_add_tail(&bm->zebra_announce_head, dest); ++ /* ++ * If neither flag is set and za_bgp_pi is not set then it is a ++ * bug ++ */ ++ assert(!dest->za_bgp_pi); ++ bgp_path_info_lock(info); ++ bgp_dest_lock_node(dest); ++ dest->za_bgp_pi = info; ++ } else if (CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL)) { ++ assert(dest->za_bgp_pi); ++ bgp_path_info_unlock(dest->za_bgp_pi); ++ bgp_path_info_lock(info); ++ dest->za_bgp_pi = info; ++ } else if (CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE)) { ++ assert(dest->za_bgp_pi); ++ if (install) ++ bgp_zebra_withdraw_actual(dest, dest->za_bgp_pi, bgp); ++ ++ bgp_path_info_unlock(dest->za_bgp_pi); ++ bgp_path_info_lock(info); ++ dest->za_bgp_pi = info; ++ } ++ ++ if (install) { ++ UNSET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE); ++ SET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); ++ } else { ++ UNSET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); ++ SET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE); ++ } ++ ++ thread_add_event(bm->master, bgp_handle_route_announcements_to_zebra, ++ NULL, 0, &bm->t_bgp_zebra_route); + } + + /* Withdraw all entries in a BGP instances RIB table from Zebra */ +@@ -1821,7 +1960,7 @@ void bgp_zebra_withdraw_table_all_subtypes(struct bgp *bgp, afi_t afi, safi_t sa + for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) { + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) + && (pi->type == ZEBRA_ROUTE_BGP)) +- bgp_zebra_withdraw(dest, pi, bgp); ++ bgp_zebra_route_install(dest, pi, bgp, false); + } + } + } +@@ -3470,6 +3609,7 @@ void bgp_zebra_init(struct thread_master *master, unsigned short instance) + zclient = zclient_new(master, &zclient_options_default, bgp_handlers, + array_size(bgp_handlers)); + zclient_init(zclient, ZEBRA_ROUTE_BGP, 0, &bgpd_privs); ++ zclient->zebra_buffer_write_ready = bgp_zebra_buffer_write_ready; + zclient->zebra_connected = bgp_zebra_connected; + zclient->instance = instance; + } +diff --git a/bgpd/bgp_zebra.h b/bgpd/bgp_zebra.h +index b77e423f8f..45fcf7f514 100644 +--- a/bgpd/bgp_zebra.h ++++ b/bgpd/bgp_zebra.h +@@ -43,11 +43,10 @@ extern void bgp_zebra_destroy(void); + extern int bgp_zebra_get_table_range(uint32_t chunk_size, + uint32_t *start, uint32_t *end); + extern int bgp_if_update_all(void); +-extern void bgp_zebra_announce(struct bgp_dest *dest, +- struct bgp_path_info *path, struct bgp *bgp); ++extern void bgp_zebra_route_install(struct bgp_dest *dest, ++ struct bgp_path_info *path, struct bgp *bgp, ++ bool install); + extern void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi); +-extern void bgp_zebra_withdraw(struct bgp_dest *dest, +- struct bgp_path_info *path, struct bgp *bgp); + + /* Announce routes of any bgp subtype of a table to zebra */ + extern void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, +@@ -131,4 +130,7 @@ extern int bgp_zebra_update(afi_t afi, safi_t safi, vrf_id_t vrf_id, int type); + extern int bgp_zebra_stale_timer_update(struct bgp *bgp); + extern int bgp_zebra_srv6_manager_get_locator_chunk(const char *name); + extern int bgp_zebra_srv6_manager_release_locator_chunk(const char *name); ++extern enum zclient_send_status ++bgp_zebra_withdraw_actual(struct bgp_dest *dest, struct bgp_path_info *info, ++ struct bgp *bgp); + #endif /* _QUAGGA_BGP_ZEBRA_H */ +diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c +index 392423e028..da133d71c1 100644 +--- a/bgpd/bgpd.c ++++ b/bgpd/bgpd.c +@@ -3688,10 +3688,20 @@ int bgp_delete(struct bgp *bgp) + afi_t afi; + safi_t safi; + int i; ++ struct bgp_dest *dest = NULL; + struct graceful_restart_info *gr_info; + + assert(bgp); + ++ while (zebra_announce_count(&bm->zebra_announce_head)) { ++ dest = zebra_announce_pop(&bm->zebra_announce_head); ++ if (dest->za_bgp_pi->peer->bgp == bgp) { ++ bgp_path_info_unlock(dest->za_bgp_pi); ++ bgp_dest_unlock_node(dest); ++ } else ++ zebra_announce_add_tail(&bm->zebra_announce_head, dest); ++ } ++ + bgp_soft_reconfig_table_task_cancel(bgp, NULL, NULL); + + /* make sure we withdraw any exported routes */ +@@ -8035,6 +8045,7 @@ void bgp_master_init(struct thread_master *master, const int buffer_size, + bm->tcp_dscp = IPTOS_PREC_INTERNETCONTROL; + bm->inq_limit = BM_DEFAULT_Q_LIMIT; + bm->outq_limit = BM_DEFAULT_Q_LIMIT; ++ bm->t_bgp_zebra_route = NULL; + + bgp_mac_init(); + /* init the rd id space. +@@ -8278,6 +8289,7 @@ void bgp_terminate(void) + list_delete(&bm->listen_sockets); + + THREAD_OFF(bm->t_rmap_update); ++ THREAD_OFF(bm->t_bgp_zebra_route); + + bgp_mac_finish(); + } +diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h +index 55f53bf9d3..bdf31f5161 100644 +--- a/bgpd/bgpd.h ++++ b/bgpd/bgpd.h +@@ -182,6 +182,8 @@ struct bgp_master { + uint32_t inq_limit; + uint32_t outq_limit; + ++ struct thread *t_bgp_zebra_route; ++ + /* To preserve ordering of installations into zebra across all Vrfs */ + struct zebra_announce_head zebra_announce_head; + +diff --git a/lib/zclient.c b/lib/zclient.c +index 0082b21485..c48c1c6ee4 100644 +--- a/lib/zclient.c ++++ b/lib/zclient.c +@@ -285,6 +285,7 @@ static void zclient_flush_data(struct thread *thread) + zclient->sock, &zclient->t_write); + break; + case BUFFER_EMPTY: ++ /* Currently only Sharpd and Bgpd has callbacks defined */ + if (zclient->zebra_buffer_write_ready) + (*zclient->zebra_buffer_write_ready)(); + break; +-- +2.17.1 + diff --git a/src/sonic-frr/patch/0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch b/src/sonic-frr/patch/0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch new file mode 100644 index 000000000000..e83526b6e8ef --- /dev/null +++ b/src/sonic-frr/patch/0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch @@ -0,0 +1,995 @@ +From 84f7778808b7fee771f26c3cae46292ef85f06c0 Mon Sep 17 00:00:00 2001 +From: Rajasekar Raja +Date: Thu, 15 Feb 2024 11:23:51 -0800 +Subject: [PATCH 07/11] bgpd : backpressure - Handle BGP-Zebra(EPVN) Install + evt Creation + +Current changes deals with EVPN routes installation to zebra. + +In evpn_route_select_install() we invoke evpn_zebra_install/uninstall +which sends zclient_send_message(). + +This is a continuation of code changes (similar to +ccfe452763d16c432fa81fd20e805bec819b345e) but to handle evpn part +of the code. + +Ticket: #3390099 + +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c +index 2b2cfa0f4c..622fd6afd2 100644 +--- a/bgpd/bgp_evpn.c ++++ b/bgpd/bgp_evpn.c +@@ -863,11 +863,10 @@ struct bgp_dest *bgp_evpn_vni_node_lookup(const struct bgpevpn *vpn, + /* + * Add (update) or delete MACIP from zebra. + */ +-static int bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, +- const struct prefix_evpn *p, +- const struct ethaddr *mac, +- struct in_addr remote_vtep_ip, int add, +- uint8_t flags, uint32_t seq, esi_t *esi) ++static enum zclient_send_status bgp_zebra_send_remote_macip( ++ struct bgp *bgp, struct bgpevpn *vpn, const struct prefix_evpn *p, ++ const struct ethaddr *mac, struct in_addr remote_vtep_ip, int add, ++ uint8_t flags, uint32_t seq, esi_t *esi) + { + struct stream *s; + uint16_t ipa_len; +@@ -875,8 +874,12 @@ static int bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, + bool esi_valid; + + /* Check socket. */ +- if (!zclient || zclient->sock < 0) +- return 0; ++ if (!zclient || zclient->sock < 0) { ++ if (BGP_DEBUG(zebra, ZEBRA)) ++ zlog_debug("%s: No zclient or zclient->sock exists", ++ __func__); ++ return ZCLIENT_SEND_SUCCESS; ++ } + + /* Don't try to register if Zebra doesn't know of this instance. */ + if (!IS_BGP_INST_KNOWN_TO_ZEBRA(bgp)) { +@@ -884,7 +887,7 @@ static int bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, + zlog_debug( + "%s: No zebra instance to talk to, not installing remote macip", + __func__); +- return 0; ++ return ZCLIENT_SEND_SUCCESS; + } + + if (!esi) +@@ -956,15 +959,20 @@ static int bgp_zebra_send_remote_macip(struct bgp *bgp, struct bgpevpn *vpn, + /* + * Add (update) or delete remote VTEP from zebra. + */ +-static int bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, +- const struct prefix_evpn *p, +- int flood_control, int add) ++static enum zclient_send_status ++bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, ++ const struct prefix_evpn *p, int flood_control, ++ int add) + { + struct stream *s; + + /* Check socket. */ +- if (!zclient || zclient->sock < 0) +- return 0; ++ if (!zclient || zclient->sock < 0) { ++ if (BGP_DEBUG(zebra, ZEBRA)) ++ zlog_debug("%s: No zclient or zclient->sock exists", ++ __func__); ++ return ZCLIENT_SEND_SUCCESS; ++ } + + /* Don't try to register if Zebra doesn't know of this instance. */ + if (!IS_BGP_INST_KNOWN_TO_ZEBRA(bgp)) { +@@ -972,7 +980,7 @@ static int bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, + zlog_debug( + "%s: No zebra instance to talk to, not installing remote vtep", + __func__); +- return 0; ++ return ZCLIENT_SEND_SUCCESS; + } + + s = zclient->obuf; +@@ -989,7 +997,7 @@ static int bgp_zebra_send_remote_vtep(struct bgp *bgp, struct bgpevpn *vpn, + EC_BGP_VTEP_INVALID, + "Bad remote IP when trying to %s remote VTEP for VNI %u", + add ? "ADD" : "DEL", vpn->vni); +- return -1; ++ return ZCLIENT_SEND_FAILURE; + } + stream_putl(s, flood_control); + +@@ -1222,14 +1230,15 @@ static void add_mac_mobility_to_attr(uint32_t seq_num, struct attr *attr) + } + + /* Install EVPN route into zebra. */ +-static int evpn_zebra_install(struct bgp *bgp, struct bgpevpn *vpn, +- const struct prefix_evpn *p, +- struct bgp_path_info *pi) ++enum zclient_send_status evpn_zebra_install(struct bgp *bgp, ++ struct bgpevpn *vpn, ++ const struct prefix_evpn *p, ++ struct bgp_path_info *pi) + { +- int ret; + uint8_t flags; + int flood_control; + uint32_t seq; ++ enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; + + if (p->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE) { + flags = 0; +@@ -1302,6 +1311,7 @@ static int evpn_zebra_install(struct bgp *bgp, struct bgpevpn *vpn, + flood_control = VXLAN_FLOOD_DISABLED; + break; + } ++ + ret = bgp_zebra_send_remote_vtep(bgp, vpn, p, flood_control, 1); + } + +@@ -1309,11 +1319,13 @@ static int evpn_zebra_install(struct bgp *bgp, struct bgpevpn *vpn, + } + + /* Uninstall EVPN route from zebra. */ +-static int evpn_zebra_uninstall(struct bgp *bgp, struct bgpevpn *vpn, +- const struct prefix_evpn *p, +- struct bgp_path_info *pi, bool is_sync) ++enum zclient_send_status evpn_zebra_uninstall(struct bgp *bgp, ++ struct bgpevpn *vpn, ++ const struct prefix_evpn *p, ++ struct bgp_path_info *pi, ++ bool is_sync) + { +- int ret; ++ enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; + + if (p->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE) + ret = bgp_zebra_send_remote_macip( +@@ -1328,7 +1340,7 @@ static int evpn_zebra_uninstall(struct bgp *bgp, struct bgpevpn *vpn, + ret = bgp_evpn_remote_es_evi_del(bgp, vpn, p); + else + ret = bgp_zebra_send_remote_vtep(bgp, vpn, p, +- VXLAN_FLOOD_DISABLED, 0); ++ VXLAN_FLOOD_DISABLED, 0); + + return ret; + } +@@ -1419,12 +1431,18 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, + && !CHECK_FLAG(dest->flags, BGP_NODE_USER_CLEAR) + && !CHECK_FLAG(old_select->flags, BGP_PATH_ATTR_CHANGED) + && !bgp_addpath_is_addpath_used(&bgp->tx_addpath, afi, safi)) { +- if (bgp_zebra_has_route_changed(old_select)) +- ret = evpn_zebra_install( +- bgp, vpn, +- (const struct prefix_evpn *)bgp_dest_get_prefix( +- dest), +- old_select); ++ if (bgp_zebra_has_route_changed(old_select)) { ++ if (CHECK_FLAG(bgp->flags, BGP_FLAG_DELETE_IN_PROGRESS)) ++ evpn_zebra_install( ++ bgp, vpn, ++ (const struct prefix_evpn *) ++ bgp_dest_get_prefix(dest), ++ old_select); ++ else ++ bgp_zebra_route_install(dest, old_select, bgp, ++ true, vpn, false); ++ } ++ + UNSET_FLAG(old_select->flags, BGP_PATH_MULTIPATH_CHG); + UNSET_FLAG(old_select->flags, BGP_PATH_LINK_BW_CHG); + bgp_zebra_clear_route_change_flags(dest); +@@ -1456,10 +1474,14 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, + if (new_select && new_select->type == ZEBRA_ROUTE_BGP + && (new_select->sub_type == BGP_ROUTE_IMPORTED || + bgp_evpn_attr_is_sync(new_select->attr))) { +- ret = evpn_zebra_install( +- bgp, vpn, +- (struct prefix_evpn *)bgp_dest_get_prefix(dest), +- new_select); ++ if (CHECK_FLAG(bgp->flags, BGP_FLAG_DELETE_IN_PROGRESS)) ++ evpn_zebra_install(bgp, vpn, ++ (const struct prefix_evpn *) ++ bgp_dest_get_prefix(dest), ++ new_select); ++ else ++ bgp_zebra_route_install(dest, new_select, bgp, true, ++ vpn, false); + + /* If an old best existed and it was a "local" route, the only + * reason +@@ -1476,13 +1498,20 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, + evpn_delete_old_local_route(bgp, vpn, dest, + old_select, new_select); + } else { +- if (old_select && old_select->type == ZEBRA_ROUTE_BGP +- && old_select->sub_type == BGP_ROUTE_IMPORTED) +- ret = evpn_zebra_uninstall( +- bgp, vpn, +- (const struct prefix_evpn *)bgp_dest_get_prefix( +- dest), +- old_select, false); ++ if (old_select && old_select->type == ZEBRA_ROUTE_BGP && ++ old_select->sub_type == BGP_ROUTE_IMPORTED) { ++ if (CHECK_FLAG(bgp->flags, ++ BGP_FLAG_DELETE_IN_PROGRESS) || ++ CHECK_FLAG(bgp->flags, BGP_FLAG_VNI_DOWN)) ++ evpn_zebra_uninstall( ++ bgp, vpn, ++ (const struct prefix_evpn *) ++ bgp_dest_get_prefix(dest), ++ old_select, false); ++ else ++ bgp_zebra_route_install(dest, old_select, bgp, ++ false, vpn, false); ++ } + } + + /* Clear any route change flags. */ +@@ -2012,9 +2041,19 @@ static void evpn_zebra_reinstall_best_route(struct bgp *bgp, + if (curr_select && curr_select->type == ZEBRA_ROUTE_BGP + && (curr_select->sub_type == BGP_ROUTE_IMPORTED || + bgp_evpn_attr_is_sync(curr_select->attr))) +- evpn_zebra_install(bgp, vpn, +- (const struct prefix_evpn *)bgp_dest_get_prefix(dest), +- curr_select); ++ if (curr_select && curr_select->type == ZEBRA_ROUTE_BGP && ++ (curr_select->sub_type == BGP_ROUTE_IMPORTED || ++ bgp_evpn_attr_is_sync(curr_select->attr))) { ++ if (CHECK_FLAG(bgp->flags, BGP_FLAG_DELETE_IN_PROGRESS)) ++ evpn_zebra_install( ++ bgp, vpn, ++ (const struct prefix_evpn *) ++ bgp_dest_get_prefix(dest), ++ curr_select); ++ else ++ bgp_zebra_route_install(dest, curr_select, bgp, ++ true, vpn, false); ++ } + } + + /* +@@ -2189,8 +2228,16 @@ static int update_evpn_route(struct bgp *bgp, struct bgpevpn *vpn, + * has been removed. + */ + new_is_sync = bgp_evpn_attr_is_sync(pi->attr); +- if (!new_is_sync && old_is_sync) +- evpn_zebra_uninstall(bgp, vpn, p, pi, true); ++ if (!new_is_sync && old_is_sync) { ++ if (CHECK_FLAG(bgp->flags, ++ BGP_FLAG_DELETE_IN_PROGRESS)) ++ evpn_zebra_uninstall(bgp, vpn, p, pi, ++ true); ++ else ++ bgp_zebra_route_install(dest, pi, bgp, ++ false, vpn, ++ true); ++ } + } + } + bgp_path_info_unlock(pi); +@@ -2444,8 +2491,16 @@ void bgp_evpn_update_type2_route_entry(struct bgp *bgp, struct bgpevpn *vpn, + * has been removed. + */ + new_is_sync = bgp_evpn_attr_is_sync(pi->attr); +- if (!new_is_sync && old_is_sync) +- evpn_zebra_uninstall(bgp, vpn, &evp, pi, true); ++ if (!new_is_sync && old_is_sync) { ++ if (CHECK_FLAG(bgp->flags, ++ BGP_FLAG_DELETE_IN_PROGRESS)) ++ (void)evpn_zebra_uninstall( ++ bgp, vpn, &evp, pi, true); ++ else ++ bgp_zebra_route_install(dest, pi, bgp, ++ false, vpn, ++ true); ++ } + } + } + +@@ -2701,7 +2756,22 @@ static int delete_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + delete_all_type2_routes(bgp, vpn); + + build_evpn_type3_prefix(&p, vpn->originator_ip); ++ ++ /* ++ * To handle the following scenario: ++ * - Say, the new zebra announce fifo list has few vni Evpn prefixes ++ * yet to be sent to zebra. ++ * - At this point if we have triggers like "no advertise-all-vni" or ++ * "networking restart", where a vni is going down. ++ * ++ * Perform the below ++ * 1) send withdraw routes to zebra immediately in case it is ++ * installed. 2) before we blow up the vni table, we need to walk the ++ * list and pop all the dest whose za_vpn points to this vni. ++ */ ++ SET_FLAG(bgp->flags, BGP_FLAG_VNI_DOWN); + ret = delete_evpn_route(bgp, vpn, &p); ++ UNSET_FLAG(bgp->flags, BGP_FLAG_VNI_DOWN); + if (ret) + return ret; + +@@ -6028,6 +6098,17 @@ struct bgpevpn *bgp_evpn_new(struct bgp *bgp, vni_t vni, + */ + void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn) + { ++ struct bgp_dest *dest = NULL; ++ ++ while (zebra_announce_count(&bm->zebra_announce_head)) { ++ dest = zebra_announce_pop(&bm->zebra_announce_head); ++ if (dest->za_vpn == vpn) { ++ bgp_path_info_unlock(dest->za_bgp_pi); ++ bgp_dest_unlock_node(dest); ++ } else ++ zebra_announce_add_tail(&bm->zebra_announce_head, dest); ++ } ++ + bgp_evpn_remote_ip_hash_destroy(vpn); + bgp_evpn_vni_es_cleanup(vpn); + bgpevpn_unlink_from_l3vni(vpn); +diff --git a/bgpd/bgp_evpn.h b/bgpd/bgp_evpn.h +index 3cbc5af5af..bf1943a2db 100644 +--- a/bgpd/bgp_evpn.h ++++ b/bgpd/bgp_evpn.h +@@ -230,4 +230,12 @@ extern void + bgp_evpn_handle_resolve_overlay_index_unset(struct hash_bucket *bucket, + void *arg); + ++extern enum zclient_send_status evpn_zebra_install(struct bgp *bgp, ++ struct bgpevpn *vpn, ++ const struct prefix_evpn *p, ++ struct bgp_path_info *pi); ++extern enum zclient_send_status ++evpn_zebra_uninstall(struct bgp *bgp, struct bgpevpn *vpn, ++ const struct prefix_evpn *p, struct bgp_path_info *pi, ++ bool is_sync); + #endif /* _QUAGGA_BGP_EVPN_H */ +diff --git a/bgpd/bgp_evpn_mh.c b/bgpd/bgp_evpn_mh.c +index 552365959d..40687c558d 100644 +--- a/bgpd/bgp_evpn_mh.c ++++ b/bgpd/bgp_evpn_mh.c +@@ -56,13 +56,14 @@ static void bgp_evpn_local_es_down(struct bgp *bgp, + struct bgp_evpn_es *es); + static void bgp_evpn_local_type1_evi_route_del(struct bgp *bgp, + struct bgp_evpn_es *es); +-static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_add(struct bgp *bgp, ++static struct bgp_evpn_es_vtep * ++bgp_evpn_es_vtep_add(struct bgp *bgp, struct bgp_evpn_es *es, ++ struct in_addr vtep_ip, bool esr, uint8_t df_alg, ++ uint16_t df_pref, int *zret); ++static enum zclient_send_status bgp_evpn_es_vtep_del(struct bgp *bgp, + struct bgp_evpn_es *es, + struct in_addr vtep_ip, +- bool esr, uint8_t df_alg, +- uint16_t df_pref); +-static void bgp_evpn_es_vtep_del(struct bgp *bgp, +- struct bgp_evpn_es *es, struct in_addr vtep_ip, bool esr); ++ bool esr); + static void bgp_evpn_es_cons_checks_pend_add(struct bgp_evpn_es *es); + static void bgp_evpn_es_cons_checks_pend_del(struct bgp_evpn_es *es); + static struct bgp_evpn_es_evi * +@@ -105,6 +106,7 @@ static int bgp_evpn_es_route_select_install(struct bgp *bgp, + struct bgp_dest *dest) + { + int ret = 0; ++ int zret = 0; + afi_t afi = AFI_L2VPN; + safi_t safi = SAFI_EVPN; + struct bgp_path_info *old_select; /* old best */ +@@ -131,7 +133,7 @@ static int bgp_evpn_es_route_select_install(struct bgp *bgp, + bgp_evpn_es_vtep_add(bgp, es, old_select->attr->nexthop, + true /*esr*/, + old_select->attr->df_alg, +- old_select->attr->df_pref); ++ old_select->attr->df_pref, &zret); + } + UNSET_FLAG(old_select->flags, BGP_PATH_MULTIPATH_CHG); + bgp_zebra_clear_route_change_flags(dest); +@@ -160,7 +162,7 @@ static int bgp_evpn_es_route_select_install(struct bgp *bgp, + && new_select->sub_type == BGP_ROUTE_IMPORTED) { + bgp_evpn_es_vtep_add(bgp, es, new_select->attr->nexthop, + true /*esr */, new_select->attr->df_alg, +- new_select->attr->df_pref); ++ new_select->attr->df_pref, &zret); + } else { + if (old_select && old_select->type == ZEBRA_ROUTE_BGP + && old_select->sub_type == BGP_ROUTE_IMPORTED) +@@ -447,7 +449,7 @@ int bgp_evpn_mh_route_update(struct bgp *bgp, struct bgp_evpn_es *es, + &attr->mp_nexthop_global_in); + } + +- /* Return back the route entry. */ ++ /* Return back th*e route entry. */ + *ri = tmp_pi; + return 0; + } +@@ -1366,23 +1368,28 @@ static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_find(struct bgp_evpn_es *es, + } + + /* Send the remote ES to zebra for NHG programming */ +-static int bgp_zebra_send_remote_es_vtep(struct bgp *bgp, +- struct bgp_evpn_es_vtep *es_vtep, bool add) ++static enum zclient_send_status ++bgp_zebra_send_remote_es_vtep(struct bgp *bgp, struct bgp_evpn_es_vtep *es_vtep, ++ bool add) + { + struct bgp_evpn_es *es = es_vtep->es; + struct stream *s; + uint32_t flags = 0; + + /* Check socket. */ +- if (!zclient || zclient->sock < 0) +- return 0; ++ if (!zclient || zclient->sock < 0) { ++ if (BGP_DEBUG(zebra, ZEBRA)) ++ zlog_debug("%s: No zclient or zclient->sock exists", ++ __func__); ++ return ZCLIENT_SEND_SUCCESS; ++ } + + /* Don't try to register if Zebra doesn't know of this instance. */ + if (!IS_BGP_INST_KNOWN_TO_ZEBRA(bgp)) { + if (BGP_DEBUG(zebra, ZEBRA)) + zlog_debug("No zebra instance, not installing remote es %s", + es->esi_str); +- return 0; ++ return ZCLIENT_SEND_SUCCESS; + } + + if (es_vtep->flags & BGP_EVPNES_VTEP_ESR) +@@ -1413,12 +1420,12 @@ static int bgp_zebra_send_remote_es_vtep(struct bgp *bgp, + return zclient_send_message(zclient); + } + +-static void bgp_evpn_es_vtep_re_eval_active(struct bgp *bgp, +- struct bgp_evpn_es_vtep *es_vtep, +- bool param_change) ++static enum zclient_send_status bgp_evpn_es_vtep_re_eval_active( ++ struct bgp *bgp, struct bgp_evpn_es_vtep *es_vtep, bool param_change) + { + bool old_active; + bool new_active; ++ enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; + + old_active = CHECK_FLAG(es_vtep->flags, BGP_EVPNES_VTEP_ACTIVE); + /* currently we need an active EVI reference to use the VTEP as +@@ -1440,7 +1447,7 @@ static void bgp_evpn_es_vtep_re_eval_active(struct bgp *bgp, + es_vtep->df_alg, es_vtep->df_pref); + + /* send remote ES to zebra */ +- bgp_zebra_send_remote_es_vtep(bgp, es_vtep, new_active); ++ ret = bgp_zebra_send_remote_es_vtep(bgp, es_vtep, new_active); + + /* The NHG is updated first for efficient failover handling. + * Note the NHG can be de-activated while there are bgp +@@ -1452,13 +1459,14 @@ static void bgp_evpn_es_vtep_re_eval_active(struct bgp *bgp, + /* queue up the es for background consistency checks */ + bgp_evpn_es_cons_checks_pend_add(es_vtep->es); + } ++ ++ return ret; + } + +-static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_add(struct bgp *bgp, +- struct bgp_evpn_es *es, +- struct in_addr vtep_ip, +- bool esr, uint8_t df_alg, +- uint16_t df_pref) ++static struct bgp_evpn_es_vtep * ++bgp_evpn_es_vtep_add(struct bgp *bgp, struct bgp_evpn_es *es, ++ struct in_addr vtep_ip, bool esr, uint8_t df_alg, ++ uint16_t df_pref, int *zret) + { + struct bgp_evpn_es_vtep *es_vtep; + bool param_change = false; +@@ -1485,15 +1493,17 @@ static struct bgp_evpn_es_vtep *bgp_evpn_es_vtep_add(struct bgp *bgp, + ++es_vtep->evi_cnt; + } + +- bgp_evpn_es_vtep_re_eval_active(bgp, es_vtep, param_change); ++ *zret = bgp_evpn_es_vtep_re_eval_active(bgp, es_vtep, param_change); + + return es_vtep; + } + +-static void bgp_evpn_es_vtep_do_del(struct bgp *bgp, +- struct bgp_evpn_es_vtep *es_vtep, bool esr) ++static enum zclient_send_status ++bgp_evpn_es_vtep_do_del(struct bgp *bgp, struct bgp_evpn_es_vtep *es_vtep, ++ bool esr) + { + bool param_change = false; ++ enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; + + if (BGP_DEBUG(evpn_mh, EVPN_MH_ES)) + zlog_debug("es %s vtep %pI4 del %s", es_vtep->es->esi_str, +@@ -1510,18 +1520,25 @@ static void bgp_evpn_es_vtep_do_del(struct bgp *bgp, + --es_vtep->evi_cnt; + } + +- bgp_evpn_es_vtep_re_eval_active(bgp, es_vtep, param_change); ++ ret = bgp_evpn_es_vtep_re_eval_active(bgp, es_vtep, param_change); + bgp_evpn_es_vtep_free(es_vtep); ++ ++ return ret; + } + +-static void bgp_evpn_es_vtep_del(struct bgp *bgp, +- struct bgp_evpn_es *es, struct in_addr vtep_ip, bool esr) ++static enum zclient_send_status bgp_evpn_es_vtep_del(struct bgp *bgp, ++ struct bgp_evpn_es *es, ++ struct in_addr vtep_ip, ++ bool esr) + { + struct bgp_evpn_es_vtep *es_vtep; ++ enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; + + es_vtep = bgp_evpn_es_vtep_find(es, vtep_ip); + if (es_vtep) +- bgp_evpn_es_vtep_do_del(bgp, es_vtep, esr); ++ ret = bgp_evpn_es_vtep_do_del(bgp, es_vtep, esr); ++ ++ return ret; + } + + /********************** ES MAC-IP paths ************************************* +@@ -3382,12 +3399,14 @@ static struct bgp_evpn_es_evi_vtep *bgp_evpn_es_evi_vtep_find( + /* A VTEP can be added as "active" attach to an ES if EAD-per-ES and + * EAD-per-EVI routes are rxed from it. + */ +-static void bgp_evpn_es_evi_vtep_re_eval_active(struct bgp *bgp, +- struct bgp_evpn_es_evi_vtep *evi_vtep) ++static enum zclient_send_status ++bgp_evpn_es_evi_vtep_re_eval_active(struct bgp *bgp, ++ struct bgp_evpn_es_evi_vtep *evi_vtep) + { + bool old_active; + bool new_active; + uint32_t ead_activity_flags; ++ enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; + + old_active = CHECK_FLAG(evi_vtep->flags, BGP_EVPN_EVI_VTEP_ACTIVE); + +@@ -3408,7 +3427,7 @@ static void bgp_evpn_es_evi_vtep_re_eval_active(struct bgp *bgp, + new_active = CHECK_FLAG(evi_vtep->flags, BGP_EVPN_EVI_VTEP_ACTIVE); + + if (old_active == new_active) +- return; ++ return ret; + + if (BGP_DEBUG(evpn_mh, EVPN_MH_ES)) + zlog_debug("es %s evi %u vtep %pI4 %s", +@@ -3417,24 +3436,26 @@ static void bgp_evpn_es_evi_vtep_re_eval_active(struct bgp *bgp, + new_active ? "active" : "inactive"); + + /* add VTEP to parent es */ +- if (new_active) ++ if (new_active) { + evi_vtep->es_vtep = bgp_evpn_es_vtep_add( + bgp, evi_vtep->es_evi->es, evi_vtep->vtep_ip, +- false /*esr*/, 0, 0); +- else { ++ false /*esr*/, 0, 0, &ret); ++ } else { + if (evi_vtep->es_vtep) { +- bgp_evpn_es_vtep_do_del(bgp, evi_vtep->es_vtep, +- false /*esr*/); ++ ret = bgp_evpn_es_vtep_do_del(bgp, evi_vtep->es_vtep, ++ false /*esr*/); + evi_vtep->es_vtep = NULL; + } + } + /* queue up the parent es for background consistency checks */ + bgp_evpn_es_cons_checks_pend_add(evi_vtep->es_evi->es); ++ ++ return ret; + } + +-static void bgp_evpn_es_evi_vtep_add(struct bgp *bgp, +- struct bgp_evpn_es_evi *es_evi, struct in_addr vtep_ip, +- bool ead_es) ++static enum zclient_send_status ++bgp_evpn_es_evi_vtep_add(struct bgp *bgp, struct bgp_evpn_es_evi *es_evi, ++ struct in_addr vtep_ip, bool ead_es) + { + struct bgp_evpn_es_evi_vtep *evi_vtep; + +@@ -3454,18 +3475,19 @@ static void bgp_evpn_es_evi_vtep_add(struct bgp *bgp, + else + SET_FLAG(evi_vtep->flags, BGP_EVPN_EVI_VTEP_EAD_PER_EVI); + +- bgp_evpn_es_evi_vtep_re_eval_active(bgp, evi_vtep); ++ return bgp_evpn_es_evi_vtep_re_eval_active(bgp, evi_vtep); + } + +-static void bgp_evpn_es_evi_vtep_del(struct bgp *bgp, +- struct bgp_evpn_es_evi *es_evi, struct in_addr vtep_ip, +- bool ead_es) ++static enum zclient_send_status ++bgp_evpn_es_evi_vtep_del(struct bgp *bgp, struct bgp_evpn_es_evi *es_evi, ++ struct in_addr vtep_ip, bool ead_es) + { + struct bgp_evpn_es_evi_vtep *evi_vtep; ++ enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; + + evi_vtep = bgp_evpn_es_evi_vtep_find(es_evi, vtep_ip); + if (!evi_vtep) +- return; ++ return ret; + + if (BGP_DEBUG(evpn_mh, EVPN_MH_ES)) + zlog_debug("del es %s evi %u vtep %pI4 %s", +@@ -3478,8 +3500,10 @@ static void bgp_evpn_es_evi_vtep_del(struct bgp *bgp, + else + UNSET_FLAG(evi_vtep->flags, BGP_EVPN_EVI_VTEP_EAD_PER_EVI); + +- bgp_evpn_es_evi_vtep_re_eval_active(bgp, evi_vtep); ++ ret = bgp_evpn_es_evi_vtep_re_eval_active(bgp, evi_vtep); + bgp_evpn_es_evi_vtep_free(evi_vtep); ++ ++ return ret; + } + + /* compare ES-IDs for the ES-EVI RB tree maintained per-VNI */ +@@ -3755,18 +3779,20 @@ int bgp_evpn_local_es_evi_add(struct bgp *bgp, esi_t *esi, vni_t vni) + /* Add remote ES-EVI entry. This is actually the remote VTEP add and the + * ES-EVI is implicity created on first VTEP's reference. + */ +-int bgp_evpn_remote_es_evi_add(struct bgp *bgp, struct bgpevpn *vpn, +- const struct prefix_evpn *p) ++enum zclient_send_status bgp_evpn_remote_es_evi_add(struct bgp *bgp, ++ struct bgpevpn *vpn, ++ const struct prefix_evpn *p) + { + char buf[ESI_STR_LEN]; + struct bgp_evpn_es *es; + struct bgp_evpn_es_evi *es_evi; + bool ead_es; + const esi_t *esi = &p->prefix.ead_addr.esi; ++ enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; + + if (!vpn) + /* local EAD-ES need not be sent back to zebra */ +- return 0; ++ return ret; + + if (BGP_DEBUG(evpn_mh, EVPN_MH_ES)) + zlog_debug("add remote %s es %s evi %u vtep %pI4", +@@ -3783,27 +3809,29 @@ int bgp_evpn_remote_es_evi_add(struct bgp *bgp, struct bgpevpn *vpn, + es_evi = bgp_evpn_es_evi_new(es, vpn); + + ead_es = !!p->prefix.ead_addr.eth_tag; +- bgp_evpn_es_evi_vtep_add(bgp, es_evi, p->prefix.ead_addr.ip.ipaddr_v4, +- ead_es); ++ ret = bgp_evpn_es_evi_vtep_add(bgp, es_evi, ++ p->prefix.ead_addr.ip.ipaddr_v4, ead_es); + + bgp_evpn_es_evi_remote_info_re_eval(es_evi); +- return 0; ++ return ret; + } + + /* A remote VTEP has withdrawn. The es-evi-vtep will be deleted and the + * parent es-evi freed up implicitly in last VTEP's deref. + */ +-int bgp_evpn_remote_es_evi_del(struct bgp *bgp, struct bgpevpn *vpn, +- const struct prefix_evpn *p) ++enum zclient_send_status bgp_evpn_remote_es_evi_del(struct bgp *bgp, ++ struct bgpevpn *vpn, ++ const struct prefix_evpn *p) + { + char buf[ESI_STR_LEN]; + struct bgp_evpn_es *es; + struct bgp_evpn_es_evi *es_evi; + bool ead_es; ++ enum zclient_send_status ret = ZCLIENT_SEND_SUCCESS; + + if (!vpn) + /* local EAD-ES need not be sent back to zebra */ +- return 0; ++ return ret; + + if (BGP_DEBUG(evpn_mh, EVPN_MH_ES)) + zlog_debug( +@@ -3822,7 +3850,7 @@ int bgp_evpn_remote_es_evi_del(struct bgp *bgp, struct bgpevpn *vpn, + esi_to_str(&p->prefix.ead_addr.esi, buf, + sizeof(buf)), + vpn->vni, &p->prefix.ead_addr.ip.ipaddr_v4); +- return 0; ++ return ret; + } + es_evi = bgp_evpn_es_evi_find(es, vpn); + if (!es_evi) { +@@ -3835,14 +3863,15 @@ int bgp_evpn_remote_es_evi_del(struct bgp *bgp, struct bgpevpn *vpn, + sizeof(buf)), + vpn->vni, + &p->prefix.ead_addr.ip.ipaddr_v4); +- return 0; ++ return ret; + } + + ead_es = !!p->prefix.ead_addr.eth_tag; +- bgp_evpn_es_evi_vtep_del(bgp, es_evi, p->prefix.ead_addr.ip.ipaddr_v4, +- ead_es); ++ ret = bgp_evpn_es_evi_vtep_del(bgp, es_evi, ++ p->prefix.ead_addr.ip.ipaddr_v4, ead_es); + bgp_evpn_es_evi_remote_info_re_eval(es_evi); +- return 0; ++ ++ return ret; + } + + /* If a VNI is being deleted we need to force del all remote VTEPs */ +diff --git a/bgpd/bgp_evpn_mh.h b/bgpd/bgp_evpn_mh.h +index 11030e323f..d6e77e982f 100644 +--- a/bgpd/bgp_evpn_mh.h ++++ b/bgpd/bgp_evpn_mh.h +@@ -434,10 +434,12 @@ extern int bgp_evpn_local_es_add(struct bgp *bgp, esi_t *esi, + extern int bgp_evpn_local_es_del(struct bgp *bgp, esi_t *esi); + extern int bgp_evpn_local_es_evi_add(struct bgp *bgp, esi_t *esi, vni_t vni); + extern int bgp_evpn_local_es_evi_del(struct bgp *bgp, esi_t *esi, vni_t vni); +-extern int bgp_evpn_remote_es_evi_add(struct bgp *bgp, struct bgpevpn *vpn, +- const struct prefix_evpn *p); +-extern int bgp_evpn_remote_es_evi_del(struct bgp *bgp, struct bgpevpn *vpn, +- const struct prefix_evpn *p); ++extern enum zclient_send_status ++bgp_evpn_remote_es_evi_add(struct bgp *bgp, struct bgpevpn *vpn, ++ const struct prefix_evpn *p); ++extern enum zclient_send_status ++bgp_evpn_remote_es_evi_del(struct bgp *bgp, struct bgpevpn *vpn, ++ const struct prefix_evpn *p); + extern void bgp_evpn_mh_init(void); + extern void bgp_evpn_mh_finish(void); + void bgp_evpn_vni_es_init(struct bgpevpn *vpn); +diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c +index c29442d96c..679abba463 100644 +--- a/bgpd/bgp_route.c ++++ b/bgpd/bgp_route.c +@@ -3213,9 +3213,9 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + && (new_select->sub_type == BGP_ROUTE_NORMAL + || new_select->sub_type + == BGP_ROUTE_IMPORTED)) +- + bgp_zebra_route_install( +- dest, old_select, bgp, true); ++ dest, old_select, bgp, true, ++ NULL, false); + } + } + +@@ -3313,9 +3313,10 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + if (old_select && + is_route_parent_evpn(old_select)) + bgp_zebra_route_install(dest, old_select, bgp, +- false); ++ false, NULL, false); + +- bgp_zebra_route_install(dest, new_select, bgp, true); ++ bgp_zebra_route_install(dest, new_select, bgp, true, ++ NULL, false); + } else { + /* Withdraw the route from the kernel. */ + if (old_select && old_select->type == ZEBRA_ROUTE_BGP +@@ -3324,7 +3325,7 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + || old_select->sub_type == BGP_ROUTE_IMPORTED)) + + bgp_zebra_route_install(dest, old_select, bgp, +- false); ++ false, NULL, false); + } + } + +@@ -4203,7 +4204,8 @@ void bgp_update(struct peer *peer, const struct prefix *p, uint32_t addpath_id, + if (pi && pi->attr->rmap_table_id != new_attr.rmap_table_id) { + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED)) + /* remove from RIB previous entry */ +- bgp_zebra_route_install(dest, pi, bgp, false); ++ bgp_zebra_route_install(dest, pi, bgp, false, NULL, ++ false); + } + + if (peer->sort == BGP_PEER_EBGP) { +diff --git a/bgpd/bgp_table.h b/bgpd/bgp_table.h +index 45d61f8dfd..9eb681ea3f 100644 +--- a/bgpd/bgp_table.h ++++ b/bgpd/bgp_table.h +@@ -103,6 +103,8 @@ struct bgp_node { + + struct zebra_announce_item zai; + struct bgp_path_info *za_bgp_pi; ++ struct bgpevpn *za_vpn; ++ bool za_is_sync; + + uint64_t version; + +diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c +index 1162941ef1..b81acaf8ec 100644 +--- a/bgpd/bgp_zebra.c ++++ b/bgpd/bgp_zebra.c +@@ -1713,12 +1713,11 @@ void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi) + for (dest = bgp_table_top(table); dest; dest = bgp_route_next(dest)) + for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) && +- +- (pi->type == ZEBRA_ROUTE_BGP +- && (pi->sub_type == BGP_ROUTE_NORMAL +- || pi->sub_type == BGP_ROUTE_IMPORTED))) +- +- bgp_zebra_route_install(dest, pi, bgp, true); ++ (pi->type == ZEBRA_ROUTE_BGP && ++ (pi->sub_type == BGP_ROUTE_NORMAL || ++ pi->sub_type == BGP_ROUTE_IMPORTED))) ++ bgp_zebra_route_install(dest, pi, bgp, true, ++ NULL, false); + } + + /* Announce routes of any bgp subtype of a table to zebra */ +@@ -1740,7 +1739,8 @@ void bgp_zebra_announce_table_all_subtypes(struct bgp *bgp, afi_t afi, + for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) && + pi->type == ZEBRA_ROUTE_BGP) +- bgp_zebra_route_install(dest, pi, bgp, true); ++ bgp_zebra_route_install(dest, pi, bgp, true, ++ NULL, false); + } + + enum zclient_send_status bgp_zebra_withdraw_actual(struct bgp_dest *dest, +@@ -1793,6 +1793,7 @@ enum zclient_send_status bgp_zebra_withdraw_actual(struct bgp_dest *dest, + #define ZEBRA_ANNOUNCEMENTS_LIMIT 1000 + static void bgp_handle_route_announcements_to_zebra(struct thread *e) + { ++ bool is_evpn = false; + uint32_t count = 0; + struct bgp_dest *dest = NULL; + struct bgp_table *table = NULL; +@@ -1808,6 +1809,9 @@ static void bgp_handle_route_announcements_to_zebra(struct thread *e) + table = bgp_dest_table(dest); + install = + CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); ++ if (table && table->afi == AFI_L2VPN && ++ table->safi == SAFI_EVPN) ++ is_evpn = true; + + if (BGP_DEBUG(zebra, ZEBRA)) + zlog_debug( +@@ -1816,17 +1820,33 @@ static void bgp_handle_route_announcements_to_zebra(struct thread *e) + table->bgp->name_pretty, dest, dest->flags); + + if (install) { +- status = bgp_zebra_announce_actual( +- dest, dest->za_bgp_pi, table->bgp); ++ if (is_evpn) ++ status = evpn_zebra_install( ++ table->bgp, dest->za_vpn, ++ (const struct prefix_evpn *) ++ bgp_dest_get_prefix(dest), ++ dest->za_bgp_pi); ++ else ++ status = bgp_zebra_announce_actual( ++ dest, dest->za_bgp_pi, table->bgp); + UNSET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); + } else { +- status = bgp_zebra_withdraw_actual( +- dest, dest->za_bgp_pi, table->bgp); ++ if (is_evpn) ++ status = evpn_zebra_uninstall( ++ table->bgp, dest->za_vpn, ++ (const struct prefix_evpn *) ++ bgp_dest_get_prefix(dest), ++ dest->za_bgp_pi, false); ++ else ++ status = bgp_zebra_withdraw_actual( ++ dest, dest->za_bgp_pi, table->bgp); ++ + UNSET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE); + } + + bgp_path_info_unlock(dest->za_bgp_pi); + dest->za_bgp_pi = NULL; ++ dest->za_vpn = NULL; + bgp_dest_unlock_node(dest); + + if (status == ZCLIENT_SEND_BUFFERED) +@@ -1880,8 +1900,16 @@ static void bgp_zebra_buffer_write_ready(void) + * withdrawn. + */ + void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, +- struct bgp *bgp, bool install) ++ struct bgp *bgp, bool install, struct bgpevpn *vpn, ++ bool is_sync) + { ++ bool is_evpn = false; ++ struct bgp_table *table = NULL; ++ ++ table = bgp_dest_table(dest); ++ if (table && table->afi == AFI_L2VPN && table->safi == SAFI_EVPN) ++ is_evpn = true; ++ + /* + * BGP is installing this route and bgp has been configured + * to suppress announcements until the route has been installed +@@ -1891,7 +1919,7 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, + if (BGP_SUPPRESS_FIB_ENABLED(bgp)) + SET_FLAG(dest->flags, BGP_NODE_FIB_INSTALL_PENDING); + +- if (bgp->main_zebra_update_hold) ++ if (bgp->main_zebra_update_hold && !is_evpn) + return; + } else { + UNSET_FLAG(dest->flags, BGP_NODE_FIB_INSTALL_PENDING); +@@ -1901,7 +1929,7 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, + * Don't try to install if we're not connected to Zebra or Zebra doesn't + * know of this instance. + */ +- if (!bgp_install_info_to_zebra(bgp)) ++ if (!bgp_install_info_to_zebra(bgp) && !is_evpn) + return; + + if (!CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL) && +@@ -1922,7 +1950,7 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, + dest->za_bgp_pi = info; + } else if (CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE)) { + assert(dest->za_bgp_pi); +- if (install) ++ if (install & !is_evpn) + bgp_zebra_withdraw_actual(dest, dest->za_bgp_pi, bgp); + + bgp_path_info_unlock(dest->za_bgp_pi); +@@ -1930,6 +1958,11 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, + dest->za_bgp_pi = info; + } + ++ if (is_evpn) { ++ dest->za_vpn = vpn; ++ dest->za_is_sync = is_sync; ++ } ++ + if (install) { + UNSET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE); + SET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); +@@ -1960,7 +1993,8 @@ void bgp_zebra_withdraw_table_all_subtypes(struct bgp *bgp, afi_t afi, safi_t sa + for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next) { + if (CHECK_FLAG(pi->flags, BGP_PATH_SELECTED) + && (pi->type == ZEBRA_ROUTE_BGP)) +- bgp_zebra_route_install(dest, pi, bgp, false); ++ bgp_zebra_route_install(dest, pi, bgp, false, ++ NULL, false); + } + } + } +diff --git a/bgpd/bgp_zebra.h b/bgpd/bgp_zebra.h +index 45fcf7f514..5186b7454e 100644 +--- a/bgpd/bgp_zebra.h ++++ b/bgpd/bgp_zebra.h +@@ -45,7 +45,8 @@ extern int bgp_zebra_get_table_range(uint32_t chunk_size, + extern int bgp_if_update_all(void); + extern void bgp_zebra_route_install(struct bgp_dest *dest, + struct bgp_path_info *path, struct bgp *bgp, +- bool install); ++ bool install, struct bgpevpn *vpn, ++ bool is_sync); + extern void bgp_zebra_announce_table(struct bgp *bgp, afi_t afi, safi_t safi); + + /* Announce routes of any bgp subtype of a table to zebra */ +diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h +index bdf31f5161..dc660fb8f0 100644 +--- a/bgpd/bgpd.h ++++ b/bgpd/bgpd.h +@@ -512,6 +512,7 @@ struct bgp { + #define BGP_FLAG_HARD_ADMIN_RESET (1ULL << 31) + /* Evaluate the AIGP attribute during the best path selection process */ + #define BGP_FLAG_COMPARE_AIGP (1ULL << 32) ++#define BGP_FLAG_VNI_DOWN (1ULL << 38) + + /* BGP default address-families. + * New peers inherit enabled afi/safis from bgp instance. +-- +2.17.1 + diff --git a/src/sonic-frr/patch/0036-zebra-backpressure-Fix-Null-ptr-access-Coverity-Issu.patch b/src/sonic-frr/patch/0036-zebra-backpressure-Fix-Null-ptr-access-Coverity-Issu.patch new file mode 100644 index 000000000000..a3b1fa5fe0da --- /dev/null +++ b/src/sonic-frr/patch/0036-zebra-backpressure-Fix-Null-ptr-access-Coverity-Issu.patch @@ -0,0 +1,29 @@ +From b6caf88bd3bce9673d49435453991c49712287aa Mon Sep 17 00:00:00 2001 +From: Rajasekar Raja +Date: Thu, 11 Apr 2024 22:27:37 -0700 +Subject: [PATCH 08/11] zebra: backpressure - Fix Null ptr access (Coverity + Issue) + +Fix dereferencing NULL ptr making coverity happy. + +Ticket :#3390099 + +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c +index b81acaf8ec..524551b1e0 100644 +--- a/bgpd/bgp_zebra.c ++++ b/bgpd/bgp_zebra.c +@@ -1809,8 +1809,7 @@ static void bgp_handle_route_announcements_to_zebra(struct thread *e) + table = bgp_dest_table(dest); + install = + CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); +- if (table && table->afi == AFI_L2VPN && +- table->safi == SAFI_EVPN) ++ if (table->afi == AFI_L2VPN && table->safi == SAFI_EVPN) + is_evpn = true; + + if (BGP_DEBUG(zebra, ZEBRA)) +-- +2.17.1 + diff --git a/src/sonic-frr/patch/0037-bgpd-Increase-install-uninstall-speed-of-evpn-vpn-vn.patch b/src/sonic-frr/patch/0037-bgpd-Increase-install-uninstall-speed-of-evpn-vpn-vn.patch new file mode 100644 index 000000000000..a360a3101599 --- /dev/null +++ b/src/sonic-frr/patch/0037-bgpd-Increase-install-uninstall-speed-of-evpn-vpn-vn.patch @@ -0,0 +1,116 @@ +From 7166c2222cb82885510c3e8c7906c1d7de950f9b Mon Sep 17 00:00:00 2001 +From: Donald Sharp +Date: Thu, 11 Apr 2024 13:28:30 -0400 +Subject: [PATCH 09/11] bgpd: Increase install/uninstall speed of evpn vpn + vni's + +BGP receives notification from zebra about an vpn that +needs to be installed into the evpn tables. Unfortunately +this function was walking the entirety of evpn tables +3 times. Modify the code to walk the tree 1 time and +to just look for the needed route types as you go. + +This reduces, in a scaled environment, processing +time of the zclient_read function from 130 seconds +to 95 seconds. For a up / down / up interface +scenario. + +Signed-off-by: Rajasekar Raja +Signed-off-by: Donald Sharp + +diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c +index 622fd6afd2..eb5aa9f077 100644 +--- a/bgpd/bgp_evpn.c ++++ b/bgpd/bgp_evpn.c +@@ -3752,9 +3752,7 @@ static int install_uninstall_routes_for_vrf(struct bgp *bgp_vrf, int install) + * particular VNI. + */ + static int install_uninstall_routes_for_vni(struct bgp *bgp, +- struct bgpevpn *vpn, +- bgp_evpn_route_type rtype, +- int install) ++ struct bgpevpn *vpn, int install) + { + afi_t afi; + safi_t safi; +@@ -3785,7 +3783,9 @@ static int install_uninstall_routes_for_vni(struct bgp *bgp, + (const struct prefix_evpn *)bgp_dest_get_prefix( + dest); + +- if (evp->prefix.route_type != rtype) ++ if (evp->prefix.route_type != BGP_EVPN_IMET_ROUTE && ++ evp->prefix.route_type != BGP_EVPN_AD_ROUTE && ++ evp->prefix.route_type != BGP_EVPN_MAC_IP_ROUTE) + continue; + + for (pi = bgp_dest_get_bgp_path_info(dest); pi; +@@ -3812,7 +3812,8 @@ static int install_uninstall_routes_for_vni(struct bgp *bgp, + bgp->vrf_id, + install ? "install" + : "uninstall", +- rtype == BGP_EVPN_MAC_IP_ROUTE ++ evp->prefix.route_type == ++ BGP_EVPN_MAC_IP_ROUTE + ? "MACIP" + : "IMET", + vpn->vni); +@@ -3845,23 +3846,11 @@ static int install_routes_for_vrf(struct bgp *bgp_vrf) + */ + static int install_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + { +- int ret; +- +- /* Install type-3 routes followed by type-2 routes - the ones applicable ++ /* ++ * Install type-3 routes followed by type-2 routes - the ones applicable + * for this VNI. + */ +- ret = install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_IMET_ROUTE, +- 1); +- if (ret) +- return ret; +- +- ret = install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_AD_ROUTE, +- 1); +- if (ret) +- return ret; +- +- return install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_MAC_IP_ROUTE, +- 1); ++ return install_uninstall_routes_for_vni(bgp, vpn, 1); + } + + /* uninstall routes from l3vni vrf. */ +@@ -3877,25 +3866,11 @@ static int uninstall_routes_for_vrf(struct bgp *bgp_vrf) + */ + static int uninstall_routes_for_vni(struct bgp *bgp, struct bgpevpn *vpn) + { +- int ret; +- +- /* Uninstall type-2 routes followed by type-3 routes - the ones +- * applicable +- * for this VNI. ++ /* ++ * Uninstall type-2 routes followed by type-3 routes - the ones ++ * applicable for this VNI. + */ +- ret = install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_MAC_IP_ROUTE, +- 0); +- if (ret) +- return ret; +- +- ret = install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_AD_ROUTE, +- 0); +- if (ret) +- return ret; +- +- +- return install_uninstall_routes_for_vni(bgp, vpn, BGP_EVPN_IMET_ROUTE, +- 0); ++ return install_uninstall_routes_for_vni(bgp, vpn, 0); + } + + /* +-- +2.17.1 + diff --git a/src/sonic-frr/patch/0038-zebra-Actually-display-I-O-buffer-sizes.patch b/src/sonic-frr/patch/0038-zebra-Actually-display-I-O-buffer-sizes.patch new file mode 100644 index 000000000000..904cb169b840 --- /dev/null +++ b/src/sonic-frr/patch/0038-zebra-Actually-display-I-O-buffer-sizes.patch @@ -0,0 +1,49 @@ +From 72781109e5dadafe55f10d72ae2b3505bf0ccb93 Mon Sep 17 00:00:00 2001 +From: Donald Sharp +Date: Mon, 8 Apr 2024 16:24:05 -0400 +Subject: [PATCH 10/11] zebra: Actually display I/O buffer sizes + +An operator found a situation where zebra was +backing up in a significant way towards BGP +with EVPN changes taking up some serious amounts +of memory. The key lines that would have clued +us in on it were behind a dev build. Let's change +this. + +Signed-off-by: Donald Sharp + +diff --git a/lib/stream.h b/lib/stream.h +index a3c148c9c9..7acbbd2dc7 100644 +--- a/lib/stream.h ++++ b/lib/stream.h +@@ -120,9 +120,7 @@ struct stream_fifo { + + /* number of streams in this fifo */ + atomic_size_t count; +-#if defined DEV_BUILD + atomic_size_t max_count; +-#endif + + struct stream *head; + struct stream *tail; +diff --git a/zebra/zserv.c b/zebra/zserv.c +index de6e404fc4..daccfa59d5 100644 +--- a/zebra/zserv.c ++++ b/zebra/zserv.c +@@ -1130,12 +1130,10 @@ static void zebra_show_client_detail(struct vty *vty, struct zserv *client) + vty_out(vty, "ES-EVI %-12u%-12u%-12u\n", + client->local_es_evi_add_cnt, 0, client->local_es_evi_del_cnt); + vty_out(vty, "Errors: %u\n", client->error_cnt); +- +-#if defined DEV_BUILD + vty_out(vty, "Input Fifo: %zu:%zu Output Fifo: %zu:%zu\n", + client->ibuf_fifo->count, client->ibuf_fifo->max_count, + client->obuf_fifo->count, client->obuf_fifo->max_count); +-#endif ++ + vty_out(vty, "\n"); + } + +-- +2.17.1 + diff --git a/src/sonic-frr/patch/0039-zebra-Actually-display-I-O-buffer-sizes-part-2.patch b/src/sonic-frr/patch/0039-zebra-Actually-display-I-O-buffer-sizes-part-2.patch new file mode 100644 index 000000000000..9088bfebbdad --- /dev/null +++ b/src/sonic-frr/patch/0039-zebra-Actually-display-I-O-buffer-sizes-part-2.patch @@ -0,0 +1,49 @@ +From 981bfca72414bfa7a97b6526e4736ea4f6834620 Mon Sep 17 00:00:00 2001 +From: Rajasekar Raja +Date: Mon, 22 Apr 2024 13:50:47 -0400 +Subject: [PATCH] From a88498262d8d88fb3846d1a5c1a373751fe6f381 Mon Sep 17 + 00:00:00 2001 Subject: [PATCH 11/11] zebra: Actually display I/O buffer sizes + (part-2) + +An extension of commit-8d8f12ba8e5cd11c189b8475b05539fa8415ccb9 + +Removing ifdef DEV_BUILD in stream_fifo_push as well to make the 'sh +zebra client' display the current I/O fifo along with max fifo items. + +TICKET :#3390099 + +Signed-off-by: Rajasekar Raja + +diff --git a/lib/stream.c b/lib/stream.c +index 2de3abdf45..3aef70794e 100644 +--- a/lib/stream.c ++++ b/lib/stream.c +@@ -1256,9 +1256,7 @@ void stream_fifo_init(struct stream_fifo *fifo) + /* Add new stream to fifo. */ + void stream_fifo_push(struct stream_fifo *fifo, struct stream *s) + { +-#if defined DEV_BUILD + size_t max, curmax; +-#endif + + if (fifo->tail) + fifo->tail->next = s; +@@ -1267,15 +1265,11 @@ void stream_fifo_push(struct stream_fifo *fifo, struct stream *s) + + fifo->tail = s; + fifo->tail->next = NULL; +-#if !defined DEV_BUILD +- atomic_fetch_add_explicit(&fifo->count, 1, memory_order_release); +-#else + max = atomic_fetch_add_explicit(&fifo->count, 1, memory_order_release); + curmax = atomic_load_explicit(&fifo->max_count, memory_order_relaxed); + if (max > curmax) + atomic_store_explicit(&fifo->max_count, max, + memory_order_relaxed); +-#endif + } + + void stream_fifo_push_safe(struct stream_fifo *fifo, struct stream *s) +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0040-bgpd-backpressure-Fix-to-withdraw-evpn-type-5-routes.patch b/src/sonic-frr/patch/0040-bgpd-backpressure-Fix-to-withdraw-evpn-type-5-routes.patch new file mode 100644 index 000000000000..b74d86881ae5 --- /dev/null +++ b/src/sonic-frr/patch/0040-bgpd-backpressure-Fix-to-withdraw-evpn-type-5-routes.patch @@ -0,0 +1,63 @@ +From f3ec35b461a06f1278383d2347dfbc611b6a91a6 Mon Sep 17 00:00:00 2001 +From: Rajasekar Raja +Date: Fri, 17 May 2024 12:36:31 -0700 +Subject: [PATCH] bgpd: backpressure - Fix to withdraw evpn type-5 routes + immediately + +As part of backpressure changes, there is a bug where immediate withdraw +is to be sent for evpn imported type-5 prefix to clear the nh neigh and +RMAC entry. + +Fixing this by sending withdraw immediately to keep it inline with the +code today + +Ticket: #3905571 + +Signed-off-by: Donald Sharp +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c +index 679abba463..e28069767f 100644 +--- a/bgpd/bgp_route.c ++++ b/bgpd/bgp_route.c +@@ -3312,8 +3312,7 @@ static void bgp_process_main_one(struct bgp *bgp, struct bgp_dest *dest, + */ + if (old_select && + is_route_parent_evpn(old_select)) +- bgp_zebra_route_install(dest, old_select, bgp, +- false, NULL, false); ++ bgp_zebra_withdraw_actual(dest, old_select, bgp); + + bgp_zebra_route_install(dest, new_select, bgp, true, + NULL, false); +diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c +index 524551b1e0..5d5525156b 100644 +--- a/bgpd/bgp_zebra.c ++++ b/bgpd/bgp_zebra.c +@@ -1889,11 +1889,9 @@ static void bgp_zebra_buffer_write_ready(void) + * save new pi, mark as going to be + * withdrawan, remove install flag + * +- * Withdrawal Install Special case, send withdrawal immediately +- * Leave dest on list, release old pi, ++ * Withdrawal Install Leave dest on list, release old pi, + * save new pi, mark as going to be +- * installed. ++ * installed. + * Withdrawal Withdrawal Leave dest on list, release old pi, + * save new pi, mark as going to be + * withdrawn. +@@ -1949,9 +1947,6 @@ void bgp_zebra_route_install(struct bgp_dest *dest, struct bgp_path_info *info, + dest->za_bgp_pi = info; + } else if (CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE)) { + assert(dest->za_bgp_pi); +- if (install & !is_evpn) +- bgp_zebra_withdraw_actual(dest, dest->za_bgp_pi, bgp); +- + bgp_path_info_unlock(dest->za_bgp_pi); + bgp_path_info_lock(info); + dest->za_bgp_pi = info; +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0041-bgpd-backpressure-Fix-to-avoid-CPU-hog.patch b/src/sonic-frr/patch/0041-bgpd-backpressure-Fix-to-avoid-CPU-hog.patch new file mode 100644 index 000000000000..860d928d3247 --- /dev/null +++ b/src/sonic-frr/patch/0041-bgpd-backpressure-Fix-to-avoid-CPU-hog.patch @@ -0,0 +1,53 @@ +From 4775b2b2bf39caa4bc5aed10ef44c6dcf9c7fc80 Mon Sep 17 00:00:00 2001 +From: Rajasekar Raja +Date: Fri, 17 May 2024 15:43:59 -0700 +Subject: [PATCH] bgpd: backpressure - Fix to avoid CPU hog + +In case when bgp_evpn_free or bgp_delete is called and the announce_list +has few items where vpn/bgp does not match, we add the item back to the +list. Because of this the list count is always > 0 thereby hogging CPU or +infinite loop. + +Ticket: #3905624 + +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c +index eb5aa9f077..2243ffdc77 100644 +--- a/bgpd/bgp_evpn.c ++++ b/bgpd/bgp_evpn.c +@@ -6074,9 +6074,11 @@ struct bgpevpn *bgp_evpn_new(struct bgp *bgp, vni_t vni, + void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn) + { + struct bgp_dest *dest = NULL; ++ uint32_t ann_count = zebra_announce_count(&bm->zebra_announce_head); + +- while (zebra_announce_count(&bm->zebra_announce_head)) { ++ while (ann_count) { + dest = zebra_announce_pop(&bm->zebra_announce_head); ++ ann_count--; + if (dest->za_vpn == vpn) { + bgp_path_info_unlock(dest->za_bgp_pi); + bgp_dest_unlock_node(dest); +diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c +index da133d71c1..492566f8c8 100644 +--- a/bgpd/bgpd.c ++++ b/bgpd/bgpd.c +@@ -3690,11 +3690,13 @@ int bgp_delete(struct bgp *bgp) + int i; + struct bgp_dest *dest = NULL; + struct graceful_restart_info *gr_info; ++ uint32_t ann_count = zebra_announce_count(&bm->zebra_announce_head); + + assert(bgp); + +- while (zebra_announce_count(&bm->zebra_announce_head)) { ++ while (ann_count) { + dest = zebra_announce_pop(&bm->zebra_announce_head); ++ ann_count--; + if (dest->za_bgp_pi->peer->bgp == bgp) { + bgp_path_info_unlock(dest->za_bgp_pi); + bgp_dest_unlock_node(dest); +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0042-zebra-Use-built-in-data-structure-counter.patch b/src/sonic-frr/patch/0042-zebra-Use-built-in-data-structure-counter.patch new file mode 100644 index 000000000000..3401dae27158 --- /dev/null +++ b/src/sonic-frr/patch/0042-zebra-Use-built-in-data-structure-counter.patch @@ -0,0 +1,156 @@ +From 529cdfa09065c6c77aff4a96a52f0d3bcb385b6f Mon Sep 17 00:00:00 2001 +From: Donald Sharp +Date: Thu, 13 Jun 2024 15:30:00 -0400 +Subject: [PATCH 1/5] zebra: Use built in data structure counter + +Instead of keeping a counter that is independent +of the queue's data structure. Just use the queue's +built-in counter. Ensure that it's pthread safe by +keeping it wrapped inside the mutex for adding/deleting +to the queue. + +Signed-off-by: Donald Sharp + +diff --git a/zebra/dplane_fpm_nl.c b/zebra/dplane_fpm_nl.c +index caa2f988e2..bc9815bb10 100644 +--- a/zebra/dplane_fpm_nl.c ++++ b/zebra/dplane_fpm_nl.c +@@ -135,8 +135,6 @@ struct fpm_nl_ctx { + + /* Amount of data plane context processed. */ + _Atomic uint32_t dplane_contexts; +- /* Amount of data plane contexts enqueued. */ +- _Atomic uint32_t ctxqueue_len; + /* Peak amount of data plane contexts enqueued. */ + _Atomic uint32_t ctxqueue_len_peak; + +@@ -311,6 +309,12 @@ DEFUN(fpm_show_counters, fpm_show_counters_cmd, + FPM_STR + "FPM statistic counters\n") + { ++ uint32_t curr_queue_len; ++ ++ frr_with_mutex (&gfnc->ctxqueue_mutex) { ++ curr_queue_len = dplane_ctx_queue_count(&gfnc->ctxqueue); ++ } ++ + vty_out(vty, "%30s\n%30s\n", "FPM counters", "============"); + + #define SHOW_COUNTER(label, counter) \ +@@ -324,8 +328,7 @@ DEFUN(fpm_show_counters, fpm_show_counters_cmd, + SHOW_COUNTER("Connection errors", gfnc->counters.connection_errors); + SHOW_COUNTER("Data plane items processed", + gfnc->counters.dplane_contexts); +- SHOW_COUNTER("Data plane items enqueued", +- gfnc->counters.ctxqueue_len); ++ SHOW_COUNTER("Data plane items enqueued", curr_queue_len); + SHOW_COUNTER("Data plane items queue peak", + gfnc->counters.ctxqueue_len_peak); + SHOW_COUNTER("Buffer full hits", gfnc->counters.buffer_full); +@@ -344,6 +347,12 @@ DEFUN(fpm_show_counters_json, fpm_show_counters_json_cmd, + "FPM statistic counters\n" + JSON_STR) + { ++ uint32_t curr_queue_len; ++ ++ frr_with_mutex (&gfnc->ctxqueue_mutex) { ++ curr_queue_len = dplane_ctx_queue_count(&gfnc->ctxqueue); ++ } ++ + struct json_object *jo; + + jo = json_object_new_object(); +@@ -357,8 +366,7 @@ DEFUN(fpm_show_counters_json, fpm_show_counters_json_cmd, + gfnc->counters.connection_errors); + json_object_int_add(jo, "data-plane-contexts", + gfnc->counters.dplane_contexts); +- json_object_int_add(jo, "data-plane-contexts-queue", +- gfnc->counters.ctxqueue_len); ++ json_object_int_add(jo, "data-plane-contexts-queue", curr_queue_len); + json_object_int_add(jo, "data-plane-contexts-queue-peak", + gfnc->counters.ctxqueue_len_peak); + json_object_int_add(jo, "buffer-full-hits", gfnc->counters.buffer_full); +@@ -1380,8 +1388,6 @@ static void fpm_process_queue(struct thread *t) + + /* Account the processed entries. */ + processed_contexts++; +- atomic_fetch_sub_explicit(&fnc->counters.ctxqueue_len, 1, +- memory_order_relaxed); + + dplane_ctx_set_status(ctx, ZEBRA_DPLANE_REQUEST_SUCCESS); + dplane_provider_enqueue_out_ctx(fnc->prov, ctx); +@@ -1550,7 +1556,7 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) + struct zebra_dplane_ctx *ctx; + struct fpm_nl_ctx *fnc; + int counter, limit; +- uint64_t cur_queue, peak_queue = 0, stored_peak_queue; ++ uint64_t cur_queue = 0, peak_queue = 0, stored_peak_queue; + + fnc = dplane_provider_get_data(prov); + limit = dplane_provider_get_work_limit(prov); +@@ -1564,20 +1570,12 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) + * anyway. + */ + if (fnc->socket != -1 && fnc->connecting == false) { +- /* +- * Update the number of queued contexts *before* +- * enqueueing, to ensure counter consistency. +- */ +- atomic_fetch_add_explicit(&fnc->counters.ctxqueue_len, +- 1, memory_order_relaxed); +- + frr_with_mutex (&fnc->ctxqueue_mutex) { + dplane_ctx_enqueue_tail(&fnc->ctxqueue, ctx); ++ cur_queue = ++ dplane_ctx_queue_count(&fnc->ctxqueue); + } + +- cur_queue = atomic_load_explicit( +- &fnc->counters.ctxqueue_len, +- memory_order_relaxed); + if (peak_queue < cur_queue) + peak_queue = cur_queue; + continue; +@@ -1594,9 +1592,7 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) + atomic_store_explicit(&fnc->counters.ctxqueue_len_peak, + peak_queue, memory_order_relaxed); + +- if (atomic_load_explicit(&fnc->counters.ctxqueue_len, +- memory_order_relaxed) +- > 0) ++ if (cur_queue > 0) + thread_add_timer(fnc->fthread->master, fpm_process_queue, + fnc, 0, &fnc->t_dequeue); + +diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c +index 59b8d6cc63..c252a370b8 100644 +--- a/zebra/zebra_dplane.c ++++ b/zebra/zebra_dplane.c +@@ -969,6 +969,11 @@ struct zebra_dplane_ctx *dplane_ctx_dequeue(struct dplane_ctx_list_head *q) + return ctx; + } + ++uint32_t dplane_ctx_queue_count(struct dplane_ctx_list_head *q) ++{ ++ return dplane_ctx_list_count(q); ++} ++ + /* + * Accessors for information from the context object + */ +diff --git a/zebra/zebra_dplane.h b/zebra/zebra_dplane.h +index 9f9496c8f4..c29e05bbc9 100644 +--- a/zebra/zebra_dplane.h ++++ b/zebra/zebra_dplane.h +@@ -324,6 +324,8 @@ struct zebra_dplane_ctx *dplane_ctx_get_head(struct dplane_ctx_list_head *q); + /* Init a list of contexts */ + void dplane_ctx_q_init(struct dplane_ctx_list_head *q); + ++uint32_t dplane_ctx_queue_count(struct dplane_ctx_list_head *q); ++ + /* + * Accessors for information from the context object + */ +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0043-zebra-Use-the-ctx-queue-counters.patch b/src/sonic-frr/patch/0043-zebra-Use-the-ctx-queue-counters.patch new file mode 100644 index 000000000000..e57684aee9a3 --- /dev/null +++ b/src/sonic-frr/patch/0043-zebra-Use-the-ctx-queue-counters.patch @@ -0,0 +1,108 @@ +From 59e2b19d2d08349ef0197b0adcb13d0bd7de2b79 Mon Sep 17 00:00:00 2001 +From: Donald Sharp +Date: Mon, 17 Jun 2024 11:05:28 -0400 +Subject: [PATCH 2/5] zebra: Use the ctx queue counters + +The ctx queue data structures already have a counter +associated with them. Let's just use them instead. + +Signed-off-by: Donald Sharp + +diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c +index c252a370b8..c52e032660 100644 +--- a/zebra/zebra_dplane.c ++++ b/zebra/zebra_dplane.c +@@ -492,10 +492,8 @@ struct zebra_dplane_provider { + int (*dp_fini)(struct zebra_dplane_provider *prov, bool early_p); + + _Atomic uint32_t dp_in_counter; +- _Atomic uint32_t dp_in_queued; + _Atomic uint32_t dp_in_max; + _Atomic uint32_t dp_out_counter; +- _Atomic uint32_t dp_out_queued; + _Atomic uint32_t dp_out_max; + _Atomic uint32_t dp_error_counter; + +@@ -6008,17 +6006,19 @@ int dplane_show_provs_helper(struct vty *vty, bool detailed) + + /* Show counters, useful info from each registered provider */ + while (prov) { ++ dplane_provider_lock(prov); ++ in_q = dplane_ctx_queue_count(&prov->dp_ctx_in_list); ++ out_q = dplane_ctx_queue_count(&prov->dp_ctx_out_list); ++ dplane_provider_unlock(prov); + + in = atomic_load_explicit(&prov->dp_in_counter, + memory_order_relaxed); +- in_q = atomic_load_explicit(&prov->dp_in_queued, +- memory_order_relaxed); ++ + in_max = atomic_load_explicit(&prov->dp_in_max, + memory_order_relaxed); + out = atomic_load_explicit(&prov->dp_out_counter, + memory_order_relaxed); +- out_q = atomic_load_explicit(&prov->dp_out_queued, +- memory_order_relaxed); ++ + out_max = atomic_load_explicit(&prov->dp_out_max, + memory_order_relaxed); + +@@ -6169,10 +6169,6 @@ struct zebra_dplane_ctx *dplane_provider_dequeue_in_ctx( + dplane_provider_lock(prov); + + ctx = dplane_ctx_list_pop(&(prov->dp_ctx_in_list)); +- if (ctx) { +- atomic_fetch_sub_explicit(&prov->dp_in_queued, 1, +- memory_order_relaxed); +- } + + dplane_provider_unlock(prov); + +@@ -6200,10 +6196,6 @@ int dplane_provider_dequeue_in_list(struct zebra_dplane_provider *prov, + break; + } + +- if (ret > 0) +- atomic_fetch_sub_explicit(&prov->dp_in_queued, ret, +- memory_order_relaxed); +- + dplane_provider_unlock(prov); + + return ret; +@@ -6228,10 +6220,7 @@ void dplane_provider_enqueue_out_ctx(struct zebra_dplane_provider *prov, + dplane_ctx_list_add_tail(&(prov->dp_ctx_out_list), ctx); + + /* Maintain out-queue counters */ +- atomic_fetch_add_explicit(&(prov->dp_out_queued), 1, +- memory_order_relaxed); +- curr = atomic_load_explicit(&prov->dp_out_queued, +- memory_order_relaxed); ++ curr = dplane_ctx_queue_count(&prov->dp_ctx_out_list); + high = atomic_load_explicit(&prov->dp_out_max, + memory_order_relaxed); + if (curr > high) +@@ -6253,9 +6242,6 @@ dplane_provider_dequeue_out_ctx(struct zebra_dplane_provider *prov) + if (!ctx) + return NULL; + +- atomic_fetch_sub_explicit(&(prov->dp_out_queued), 1, +- memory_order_relaxed); +- + return ctx; + } + +@@ -7260,10 +7246,7 @@ static void dplane_thread_loop(struct thread *event) + + atomic_fetch_add_explicit(&prov->dp_in_counter, counter, + memory_order_relaxed); +- atomic_fetch_add_explicit(&prov->dp_in_queued, counter, +- memory_order_relaxed); +- curr = atomic_load_explicit(&prov->dp_in_queued, +- memory_order_relaxed); ++ curr = dplane_ctx_queue_count(&prov->dp_ctx_in_list); + high = atomic_load_explicit(&prov->dp_in_max, + memory_order_relaxed); + if (curr > high) +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0044-zebra-Modify-dplane-loop-to-allow-backpressure-to-fi.patch b/src/sonic-frr/patch/0044-zebra-Modify-dplane-loop-to-allow-backpressure-to-fi.patch new file mode 100644 index 000000000000..67b76d03424a --- /dev/null +++ b/src/sonic-frr/patch/0044-zebra-Modify-dplane-loop-to-allow-backpressure-to-fi.patch @@ -0,0 +1,199 @@ +From 4671ddf4920553b663fda129f7c4366839347645 Mon Sep 17 00:00:00 2001 +From: Donald Sharp +Date: Wed, 12 Jun 2024 14:14:48 -0400 +Subject: [PATCH 3/5] zebra: Modify dplane loop to allow backpressure to filter + up + +Currently when the dplane_thread_loop is run, it moves contexts +from the dg_update_list and puts the contexts on the input queue +of the first provider. This provider is given a chance to run +and then the items on the output queue are pulled off and placed +on the input queue of the next provider. Rinse/Repeat down through +the entire list of providers. Now imagine that we have a list +of multiple providers and the last provider is getting backed up. +Contexts will end up sticking in the input Queue of the `slow` +provider. This can grow without bounds. This is a real problem +when you have a situation where an interface is flapping and an +upper level protocol is sending a continous stream of route +updates to reflect the change in ecmp. You can end up with +a very very large backlog of contexts. This is bad because +zebra can easily grow to a very very large memory size and on +restricted systems you can run out of memory. Fortunately +for us, the MetaQ already participates with this process +by not doing more route processing until the dg_update_list +goes below the working limit of dg_updates_per_cycle. Thus +if FRR modifies the behavior of this loop to not move more +contexts onto the input queue if either the input queue +or output queue of the next provider has reached this limit. +FRR will naturaly start auto handling backpressure for the dplane +context system and memory will not go out of control. + +Signed-off-by: Donald Sharp + +diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c +index c52e032660..f0e1ff6f27 100644 +--- a/zebra/zebra_dplane.c ++++ b/zebra/zebra_dplane.c +@@ -7155,10 +7155,10 @@ static void dplane_thread_loop(struct thread *event) + { + struct dplane_ctx_list_head work_list; + struct dplane_ctx_list_head error_list; +- struct zebra_dplane_provider *prov; ++ struct zebra_dplane_provider *prov, *next_prov; + struct zebra_dplane_ctx *ctx; + int limit, counter, error_counter; +- uint64_t curr, high; ++ uint64_t curr, out_curr, high; + bool reschedule = false; + + /* Capture work limit per cycle */ +@@ -7182,18 +7182,48 @@ static void dplane_thread_loop(struct thread *event) + /* Locate initial registered provider */ + prov = dplane_prov_list_first(&zdplane_info.dg_providers); + +- /* Move new work from incoming list to temp list */ +- for (counter = 0; counter < limit; counter++) { +- ctx = dplane_ctx_list_pop(&zdplane_info.dg_update_list); +- if (ctx) { +- ctx->zd_provider = prov->dp_id; ++ curr = dplane_ctx_queue_count(&prov->dp_ctx_in_list); ++ out_curr = dplane_ctx_queue_count(&prov->dp_ctx_out_list); + +- dplane_ctx_list_add_tail(&work_list, ctx); +- } else { +- break; ++ if (curr >= (uint64_t)limit) { ++ if (IS_ZEBRA_DEBUG_DPLANE_DETAIL) ++ zlog_debug("%s: Current first provider(%s) Input queue is %" PRIu64 ++ ", holding off work", ++ __func__, prov->dp_name, curr); ++ counter = 0; ++ } else if (out_curr >= (uint64_t)limit) { ++ if (IS_ZEBRA_DEBUG_DPLANE_DETAIL) ++ zlog_debug("%s: Current first provider(%s) Output queue is %" PRIu64 ++ ", holding off work", ++ __func__, prov->dp_name, out_curr); ++ counter = 0; ++ } else { ++ int tlimit; ++ /* ++ * Let's limit the work to how what can be put on the ++ * in or out queue without going over ++ */ ++ tlimit = limit - MAX(curr, out_curr); ++ /* Move new work from incoming list to temp list */ ++ for (counter = 0; counter < tlimit; counter++) { ++ ctx = dplane_ctx_list_pop(&zdplane_info.dg_update_list); ++ if (ctx) { ++ ctx->zd_provider = prov->dp_id; ++ ++ dplane_ctx_list_add_tail(&work_list, ctx); ++ } else { ++ break; ++ } + } + } + ++ /* ++ * If there is anything still on the two input queues reschedule ++ */ ++ if (dplane_ctx_queue_count(&prov->dp_ctx_in_list) > 0 || ++ dplane_ctx_queue_count(&zdplane_info.dg_update_list) > 0) ++ reschedule = true; ++ + DPLANE_UNLOCK(); + + atomic_fetch_sub_explicit(&zdplane_info.dg_routes_queued, counter, +@@ -7212,8 +7242,9 @@ static void dplane_thread_loop(struct thread *event) + * items. + */ + if (IS_ZEBRA_DEBUG_DPLANE_DETAIL) +- zlog_debug("dplane enqueues %d new work to provider '%s'", +- counter, dplane_provider_get_name(prov)); ++ zlog_debug("dplane enqueues %d new work to provider '%s' curr is %" PRIu64, ++ counter, dplane_provider_get_name(prov), ++ curr); + + /* Capture current provider id in each context; check for + * error status. +@@ -7271,18 +7302,61 @@ static void dplane_thread_loop(struct thread *event) + if (!zdplane_info.dg_run) + break; + ++ /* Locate next provider */ ++ next_prov = dplane_prov_list_next(&zdplane_info.dg_providers, ++ prov); ++ if (next_prov) { ++ curr = dplane_ctx_queue_count( ++ &next_prov->dp_ctx_in_list); ++ out_curr = dplane_ctx_queue_count( ++ &next_prov->dp_ctx_out_list); ++ } else ++ out_curr = curr = 0; ++ + /* Dequeue completed work from the provider */ + dplane_provider_lock(prov); + +- while (counter < limit) { +- ctx = dplane_provider_dequeue_out_ctx(prov); +- if (ctx) { +- dplane_ctx_list_add_tail(&work_list, ctx); +- counter++; +- } else +- break; ++ if (curr >= (uint64_t)limit) { ++ if (IS_ZEBRA_DEBUG_DPLANE_DETAIL) ++ zlog_debug("%s: Next Provider(%s) Input queue is %" PRIu64 ++ ", holding off work", ++ __func__, next_prov->dp_name, curr); ++ counter = 0; ++ } else if (out_curr >= (uint64_t)limit) { ++ if (IS_ZEBRA_DEBUG_DPLANE_DETAIL) ++ zlog_debug("%s: Next Provider(%s) Output queue is %" PRIu64 ++ ", holding off work", ++ __func__, next_prov->dp_name, ++ out_curr); ++ counter = 0; ++ } else { ++ int tlimit; ++ ++ /* ++ * Let's limit the work to how what can be put on the ++ * in or out queue without going over ++ */ ++ tlimit = limit - MAX(curr, out_curr); ++ while (counter < tlimit) { ++ ctx = dplane_provider_dequeue_out_ctx(prov); ++ if (ctx) { ++ dplane_ctx_list_add_tail(&work_list, ++ ctx); ++ counter++; ++ } else ++ break; ++ } + } + ++ /* ++ * Let's check if there are still any items on the ++ * input or output queus of the current provider ++ * if so then we know we need to reschedule. ++ */ ++ if (dplane_ctx_queue_count(&prov->dp_ctx_in_list) > 0 || ++ dplane_ctx_queue_count(&prov->dp_ctx_out_list) > 0) ++ reschedule = true; ++ + dplane_provider_unlock(prov); + + if (counter >= limit) +@@ -7293,7 +7367,7 @@ static void dplane_thread_loop(struct thread *event) + counter, dplane_provider_get_name(prov)); + + /* Locate next provider */ +- prov = dplane_prov_list_next(&zdplane_info.dg_providers, prov); ++ prov = next_prov; + } + + /* +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0045-zebra-Limit-queue-depth-in-dplane_fpm_nl.patch b/src/sonic-frr/patch/0045-zebra-Limit-queue-depth-in-dplane_fpm_nl.patch new file mode 100644 index 000000000000..7f25a773a101 --- /dev/null +++ b/src/sonic-frr/patch/0045-zebra-Limit-queue-depth-in-dplane_fpm_nl.patch @@ -0,0 +1,52 @@ +From 50f606c158f6c89abd0d3f531905005d3a48a5b6 Mon Sep 17 00:00:00 2001 +From: Donald Sharp +Date: Wed, 12 Jun 2024 15:16:08 -0400 +Subject: [PATCH 4/5] zebra: Limit queue depth in dplane_fpm_nl + +The dplane providers have a concept of input queues +and output queues. These queues are chained together +during normal operation. The code in zebra also has +a feedback mechanism where the MetaQ will not run when +the first input queue is backed up. Having the dplane_fpm_nl +code grab all contexts when it is backed up prevents +this system from behaving appropriately. + +Modify the code to not add to the dplane_fpm_nl's internal +queue when it is already full. This will allow the backpressure +to work appropriately in zebra proper. + +Signed-off-by: Donald Sharp + +diff --git a/zebra/dplane_fpm_nl.c b/zebra/dplane_fpm_nl.c +index bc9815bb10..4fd42f64a2 100644 +--- a/zebra/dplane_fpm_nl.c ++++ b/zebra/dplane_fpm_nl.c +@@ -1560,6 +1560,25 @@ static int fpm_nl_process(struct zebra_dplane_provider *prov) + + fnc = dplane_provider_get_data(prov); + limit = dplane_provider_get_work_limit(prov); ++ ++ frr_with_mutex (&fnc->ctxqueue_mutex) { ++ cur_queue = dplane_ctx_queue_count(&fnc->ctxqueue); ++ } ++ ++ if (cur_queue >= (uint64_t)limit) { ++ if (IS_ZEBRA_DEBUG_FPM) ++ zlog_debug("%s: Already at a limit(%" PRIu64 ++ ") of internal work, hold off", ++ __func__, cur_queue); ++ limit = 0; ++ } else { ++ if (IS_ZEBRA_DEBUG_FPM) ++ zlog_debug("%s: current queue is %" PRIu64 ++ ", limiting to lesser amount of %" PRIu64, ++ __func__, cur_queue, limit - cur_queue); ++ limit -= cur_queue; ++ } ++ + for (counter = 0; counter < limit; counter++) { + ctx = dplane_provider_dequeue_in_ctx(prov); + if (ctx == NULL) +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0046-zebra-Modify-show-zebra-dplane-providers-to-give-mor.patch b/src/sonic-frr/patch/0046-zebra-Modify-show-zebra-dplane-providers-to-give-mor.patch new file mode 100644 index 000000000000..e865b861d192 --- /dev/null +++ b/src/sonic-frr/patch/0046-zebra-Modify-show-zebra-dplane-providers-to-give-mor.patch @@ -0,0 +1,102 @@ +From d695dfb88418834f0054255dd4385b293efb5a17 Mon Sep 17 00:00:00 2001 +From: Donald Sharp +Date: Mon, 17 Jun 2024 10:42:41 -0400 +Subject: [PATCH 5/5] zebra: Modify show `zebra dplane providers` to give more + data + +The show zebra dplane provider command was ommitting +the input and output queues to the dplane itself. +It would be nice to have this insight as well. + +New output: +r1# show zebra dplane providers +dataplane Incoming Queue from Zebra: 100 +Zebra dataplane providers: + Kernel (1): in: 6, q: 0, q_max: 3, out: 6, q: 14, q_max: 3 + dplane_fpm_nl (2): in: 6, q: 10, q_max: 3, out: 6, q: 0, q_max: 3 +dataplane Outgoing Queue to Zebra: 43 +r1# + +Signed-off-by: Donald Sharp + +diff --git a/zebra/rib.h b/zebra/rib.h +index 2e62148ea0..b78cd218f6 100644 +--- a/zebra/rib.h ++++ b/zebra/rib.h +@@ -630,6 +630,7 @@ static inline struct nexthop_group *rib_get_fib_backup_nhg( + } + + extern void zebra_vty_init(void); ++extern uint32_t zebra_rib_dplane_results_count(void); + + extern pid_t pid; + +diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c +index f0e1ff6f27..21c73a3796 100644 +--- a/zebra/zebra_dplane.c ++++ b/zebra/zebra_dplane.c +@@ -5998,12 +5998,14 @@ int dplane_show_provs_helper(struct vty *vty, bool detailed) + struct zebra_dplane_provider *prov; + uint64_t in, in_q, in_max, out, out_q, out_max; + +- vty_out(vty, "Zebra dataplane providers:\n"); +- + DPLANE_LOCK(); + prov = dplane_prov_list_first(&zdplane_info.dg_providers); ++ in = dplane_ctx_queue_count(&zdplane_info.dg_update_list); + DPLANE_UNLOCK(); + ++ vty_out(vty, "dataplane Incoming Queue from Zebra: %" PRIu64 "\n", in); ++ vty_out(vty, "Zebra dataplane providers:\n"); ++ + /* Show counters, useful info from each registered provider */ + while (prov) { + dplane_provider_lock(prov); +@@ -6022,13 +6024,19 @@ int dplane_show_provs_helper(struct vty *vty, bool detailed) + out_max = atomic_load_explicit(&prov->dp_out_max, + memory_order_relaxed); + +- vty_out(vty, "%s (%u): in: %"PRIu64", q: %"PRIu64", q_max: %"PRIu64", out: %"PRIu64", q: %"PRIu64", q_max: %"PRIu64"\n", +- prov->dp_name, prov->dp_id, in, in_q, in_max, +- out, out_q, out_max); ++ vty_out(vty, ++ " %s (%u): in: %" PRIu64 ", q: %" PRIu64 ++ ", q_max: %" PRIu64 ", out: %" PRIu64 ", q: %" PRIu64 ++ ", q_max: %" PRIu64 "\n", ++ prov->dp_name, prov->dp_id, in, in_q, in_max, out, ++ out_q, out_max); + + prov = dplane_prov_list_next(&zdplane_info.dg_providers, prov); + } + ++ out = zebra_rib_dplane_results_count(); ++ vty_out(vty, "dataplane Outgoing Queue to Zebra: %" PRIu64 "\n", out); ++ + return CMD_SUCCESS; + } + +diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c +index 1ff3d98545..ae051d37eb 100644 +--- a/zebra/zebra_rib.c ++++ b/zebra/zebra_rib.c +@@ -4874,6 +4874,17 @@ static int rib_dplane_results(struct dplane_ctx_list_head *ctxlist) + return 0; + } + ++uint32_t zebra_rib_dplane_results_count(void) ++{ ++ uint32_t count; ++ ++ frr_with_mutex (&dplane_mutex) { ++ count = dplane_ctx_queue_count(&rib_dplane_q); ++ } ++ ++ return count; ++} ++ + /* + * Ensure there are no empty slots in the route_info array. + * Every route type in zebra should be present there. +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0047-bgpd-backpressure-fix-evpn-route-sync-to-zebra.patch b/src/sonic-frr/patch/0047-bgpd-backpressure-fix-evpn-route-sync-to-zebra.patch new file mode 100644 index 000000000000..c8e3de24ef33 --- /dev/null +++ b/src/sonic-frr/patch/0047-bgpd-backpressure-fix-evpn-route-sync-to-zebra.patch @@ -0,0 +1,33 @@ +From bed7636621589c139ed8d83842df3ce438b8493f Mon Sep 17 00:00:00 2001 +From: Chirag Shah +Date: Mon, 17 Jun 2024 13:58:03 -0700 +Subject: [PATCH] bgpd: backpressure - fix evpn route sync to zebra + +In scaled EVPN + ipv4/ipv6 uni route sync to zebra, +some of the ipv4/ipv6 routes skipped reinstallation +due to incorrect local variable's stale value. + +Once the local variable value reset in each loop +iteration all skipped routes synced to zebra properly. + +Ticket: #3948828 + +Signed-off-by: Rajasekar Raja +Signed-off-by: Chirag Shah + +diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c +index 5d5525156b..278e228d66 100644 +--- a/bgpd/bgp_zebra.c ++++ b/bgpd/bgp_zebra.c +@@ -1801,6 +1801,8 @@ static void bgp_handle_route_announcements_to_zebra(struct thread *e) + bool install; + + while (count < ZEBRA_ANNOUNCEMENTS_LIMIT) { ++ is_evpn = false; ++ + dest = zebra_announce_pop(&bm->zebra_announce_head); + + if (!dest) +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0048-bgpd-backpressure-fix-to-properly-remove-dest-for-bg.patch b/src/sonic-frr/patch/0048-bgpd-backpressure-fix-to-properly-remove-dest-for-bg.patch new file mode 100644 index 000000000000..1731b6d21f31 --- /dev/null +++ b/src/sonic-frr/patch/0048-bgpd-backpressure-fix-to-properly-remove-dest-for-bg.patch @@ -0,0 +1,90 @@ +From 05d2c5b3ba6f83cd42a4dd5f9e40959fc438b0a6 Mon Sep 17 00:00:00 2001 +From: Rajasekar Raja +Date: Wed, 10 Jul 2024 16:46:29 -0700 +Subject: [PATCH 1/2] bgpd: backpressure - fix to properly remove dest for bgp + under deletion + +In case of imported routes (L3vni/vrf leaks), when a bgp instance is +being deleted, the peer->bgp comparision with the incoming bgp to remove +the dest from the pending fifo is wrong. This can lead to the fifo +having stale entries resulting in crash. + +Two changes are done here. + - Instead of pop/push items in list if the struct bgp doesnt match, + simply iterate the list and remove the expected ones. + + - Corrected the way bgp is fetched from dest rather than relying on + path_info->peer so that it works for all kinds of routes. + +Ticket :#3980988 + +Signed-off-by: Chirag Shah +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c +index 2243ffdc77..b1f8f19594 100644 +--- a/bgpd/bgp_evpn.c ++++ b/bgpd/bgp_evpn.c +@@ -6074,16 +6074,16 @@ struct bgpevpn *bgp_evpn_new(struct bgp *bgp, vni_t vni, + void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn) + { + struct bgp_dest *dest = NULL; +- uint32_t ann_count = zebra_announce_count(&bm->zebra_announce_head); ++ struct bgp_dest *dest_next = NULL; + +- while (ann_count) { +- dest = zebra_announce_pop(&bm->zebra_announce_head); +- ann_count--; ++ for (dest = zebra_announce_first(&bm->zebra_announce_head); dest; ++ dest = dest_next) { ++ dest_next = zebra_announce_next(&bm->zebra_announce_head, dest); + if (dest->za_vpn == vpn) { + bgp_path_info_unlock(dest->za_bgp_pi); + bgp_dest_unlock_node(dest); +- } else +- zebra_announce_add_tail(&bm->zebra_announce_head, dest); ++ zebra_announce_del(&bm->zebra_announce_head, dest); ++ } + } + + bgp_evpn_remote_ip_hash_destroy(vpn); +diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c +index 492566f8c8..e16a58b443 100644 +--- a/bgpd/bgpd.c ++++ b/bgpd/bgpd.c +@@ -3689,19 +3689,25 @@ int bgp_delete(struct bgp *bgp) + safi_t safi; + int i; + struct bgp_dest *dest = NULL; ++ struct bgp_dest *dest_next = NULL; ++ struct bgp_table *dest_table = NULL; + struct graceful_restart_info *gr_info; +- uint32_t ann_count = zebra_announce_count(&bm->zebra_announce_head); + + assert(bgp); + +- while (ann_count) { +- dest = zebra_announce_pop(&bm->zebra_announce_head); +- ann_count--; +- if (dest->za_bgp_pi->peer->bgp == bgp) { ++ /* ++ * Iterate the pending dest list and remove all the dest pertaininig to ++ * the bgp under delete. ++ */ ++ for (dest = zebra_announce_first(&bm->zebra_announce_head); dest; ++ dest = dest_next) { ++ dest_next = zebra_announce_next(&bm->zebra_announce_head, dest); ++ dest_table = bgp_dest_table(dest); ++ if (dest_table->bgp == bgp) { + bgp_path_info_unlock(dest->za_bgp_pi); + bgp_dest_unlock_node(dest); +- } else +- zebra_announce_add_tail(&bm->zebra_announce_head, dest); ++ zebra_announce_del(&bm->zebra_announce_head, dest); ++ } + } + + bgp_soft_reconfig_table_task_cancel(bgp, NULL, NULL); +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0049-bgpd-backpressure-Improve-debuggability.patch b/src/sonic-frr/patch/0049-bgpd-backpressure-Improve-debuggability.patch new file mode 100644 index 000000000000..e74a2a7c3114 --- /dev/null +++ b/src/sonic-frr/patch/0049-bgpd-backpressure-Improve-debuggability.patch @@ -0,0 +1,46 @@ +From 0dd44dc0d99b69e6c1853f46dbae4a30fc4b9aed Mon Sep 17 00:00:00 2001 +From: Rajasekar Raja +Date: Wed, 10 Jul 2024 20:17:14 -0700 +Subject: [PATCH 2/2] bgpd: backpressure - Improve debuggability + +Improve debuggability in backpressure code. + +Ticket :#3980988 + +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c +index e16a58b443..2e1c5e555b 100644 +--- a/bgpd/bgpd.c ++++ b/bgpd/bgpd.c +@@ -3692,6 +3692,7 @@ int bgp_delete(struct bgp *bgp) + struct bgp_dest *dest_next = NULL; + struct bgp_table *dest_table = NULL; + struct graceful_restart_info *gr_info; ++ uint32_t cnt_before, cnt_after; + + assert(bgp); + +@@ -3699,6 +3700,7 @@ int bgp_delete(struct bgp *bgp) + * Iterate the pending dest list and remove all the dest pertaininig to + * the bgp under delete. + */ ++ cnt_before = zebra_announce_count(&bm->zebra_announce_head); + for (dest = zebra_announce_first(&bm->zebra_announce_head); dest; + dest = dest_next) { + dest_next = zebra_announce_next(&bm->zebra_announce_head, dest); +@@ -3710,6 +3712,11 @@ int bgp_delete(struct bgp *bgp) + } + } + ++ cnt_after = zebra_announce_count(&bm->zebra_announce_head); ++ if (BGP_DEBUG(zebra, ZEBRA)) ++ zlog_debug("Zebra Announce Fifo cleanup count before %u and after %u during BGP %s deletion", ++ cnt_before, cnt_after, bgp->name_pretty); ++ + bgp_soft_reconfig_table_task_cancel(bgp, NULL, NULL); + + /* make sure we withdraw any exported routes */ +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0050-bgpd-backpressure-Avoid-use-after-free.patch b/src/sonic-frr/patch/0050-bgpd-backpressure-Avoid-use-after-free.patch new file mode 100644 index 000000000000..878d60eb5e37 --- /dev/null +++ b/src/sonic-frr/patch/0050-bgpd-backpressure-Avoid-use-after-free.patch @@ -0,0 +1,48 @@ +From df1d28fcc12d4f5541c9335115887d31e6197b80 Mon Sep 17 00:00:00 2001 +From: Rajasekar Raja +Date: Mon, 22 Jul 2024 10:13:19 -0700 +Subject: [PATCH] bgpd: backpressure - Avoid use after free + +Coverity complains there is a use after free (1598495 and 1598496) +At this point, most likely dest->refcount cannot go 1 and free up +the dest, but there might be some code path where this can happen. + +Fixing this with a simple order change (no harm fix). + +Ticket :#4001204 + +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c +index b1f8f19594..bb3cd62950 100644 +--- a/bgpd/bgp_evpn.c ++++ b/bgpd/bgp_evpn.c +@@ -6080,9 +6080,9 @@ void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn) + dest = dest_next) { + dest_next = zebra_announce_next(&bm->zebra_announce_head, dest); + if (dest->za_vpn == vpn) { ++ zebra_announce_del(&bm->zebra_announce_head, dest); + bgp_path_info_unlock(dest->za_bgp_pi); + bgp_dest_unlock_node(dest); +- zebra_announce_del(&bm->zebra_announce_head, dest); + } + } + +diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c +index 2e1c5e555b..342982069b 100644 +--- a/bgpd/bgpd.c ++++ b/bgpd/bgpd.c +@@ -3706,9 +3706,9 @@ int bgp_delete(struct bgp *bgp) + dest_next = zebra_announce_next(&bm->zebra_announce_head, dest); + dest_table = bgp_dest_table(dest); + if (dest_table->bgp == bgp) { ++ zebra_announce_del(&bm->zebra_announce_head, dest); + bgp_path_info_unlock(dest->za_bgp_pi); + bgp_dest_unlock_node(dest); +- zebra_announce_del(&bm->zebra_announce_head, dest); + } + } + +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0051-bgpd-backpressure-fix-ret-value-evpn_route_select_in.patch b/src/sonic-frr/patch/0051-bgpd-backpressure-fix-ret-value-evpn_route_select_in.patch new file mode 100644 index 000000000000..53d12a6a83d9 --- /dev/null +++ b/src/sonic-frr/patch/0051-bgpd-backpressure-fix-ret-value-evpn_route_select_in.patch @@ -0,0 +1,73 @@ +From cc56963da0e8f0ca606bc9b932e9180ad059f8c5 Mon Sep 17 00:00:00 2001 +From: Rajasekar Raja +Date: Tue, 16 Jul 2024 23:34:15 -0700 +Subject: [PATCH 1/2] bgpd: backpressure - fix ret value + evpn_route_select_install + +The return value of evpn_route_select_install is ignored in all cases +except during vni route table install/uninstall and based on the +returned value, an error is logged. Fixing this. + +Ticket :#3992392 + +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c +index bb3cd62950..34128e7c19 100644 +--- a/bgpd/bgp_evpn.c ++++ b/bgpd/bgp_evpn.c +@@ -1433,11 +1433,12 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, + && !bgp_addpath_is_addpath_used(&bgp->tx_addpath, afi, safi)) { + if (bgp_zebra_has_route_changed(old_select)) { + if (CHECK_FLAG(bgp->flags, BGP_FLAG_DELETE_IN_PROGRESS)) +- evpn_zebra_install( +- bgp, vpn, +- (const struct prefix_evpn *) +- bgp_dest_get_prefix(dest), +- old_select); ++ ret = evpn_zebra_install(bgp, vpn, ++ (const struct prefix_evpn ++ *) ++ bgp_dest_get_prefix( ++ dest), ++ old_select); + else + bgp_zebra_route_install(dest, old_select, bgp, + true, vpn, false); +@@ -1475,10 +1476,11 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, + && (new_select->sub_type == BGP_ROUTE_IMPORTED || + bgp_evpn_attr_is_sync(new_select->attr))) { + if (CHECK_FLAG(bgp->flags, BGP_FLAG_DELETE_IN_PROGRESS)) +- evpn_zebra_install(bgp, vpn, +- (const struct prefix_evpn *) +- bgp_dest_get_prefix(dest), +- new_select); ++ ret = evpn_zebra_install(bgp, vpn, ++ (const struct prefix_evpn *) ++ bgp_dest_get_prefix( ++ dest), ++ new_select); + else + bgp_zebra_route_install(dest, new_select, bgp, true, + vpn, false); +@@ -1503,11 +1505,12 @@ int evpn_route_select_install(struct bgp *bgp, struct bgpevpn *vpn, + if (CHECK_FLAG(bgp->flags, + BGP_FLAG_DELETE_IN_PROGRESS) || + CHECK_FLAG(bgp->flags, BGP_FLAG_VNI_DOWN)) +- evpn_zebra_uninstall( +- bgp, vpn, +- (const struct prefix_evpn *) +- bgp_dest_get_prefix(dest), +- old_select, false); ++ ret = evpn_zebra_uninstall(bgp, vpn, ++ (const struct prefix_evpn ++ *) ++ bgp_dest_get_prefix( ++ dest), ++ old_select, false); + else + bgp_zebra_route_install(dest, old_select, bgp, + false, vpn, false); +-- +2.43.2 + diff --git a/src/sonic-frr/patch/0052-bgpd-backpressure-log-error-for-evpn-when-route-inst.patch b/src/sonic-frr/patch/0052-bgpd-backpressure-log-error-for-evpn-when-route-inst.patch new file mode 100644 index 000000000000..62ba8a3b739e --- /dev/null +++ b/src/sonic-frr/patch/0052-bgpd-backpressure-log-error-for-evpn-when-route-inst.patch @@ -0,0 +1,61 @@ +From dd591de04b0e25c74a9936c854bb6dbe7839bd39 Mon Sep 17 00:00:00 2001 +From: Rajasekar Raja +Date: Thu, 18 Jul 2024 22:23:23 -0700 +Subject: [PATCH 2/2] bgpd: backpressure - log error for evpn when route + install to zebra fails. + +log error for evpn in case route install to zebra fails. + +Ticket :#3992392 + +Signed-off-by: Rajasekar Raja + +diff --git a/bgpd/bgp_zebra.c b/bgpd/bgp_zebra.c +index 278e228d66..038d328a60 100644 +--- a/bgpd/bgp_zebra.c ++++ b/bgpd/bgp_zebra.c +@@ -1799,6 +1799,7 @@ static void bgp_handle_route_announcements_to_zebra(struct thread *e) + struct bgp_table *table = NULL; + enum zclient_send_status status = ZCLIENT_SEND_SUCCESS; + bool install; ++ const struct prefix_evpn *evp = NULL; + + while (count < ZEBRA_ANNOUNCEMENTS_LIMIT) { + is_evpn = false; +@@ -1809,10 +1810,12 @@ static void bgp_handle_route_announcements_to_zebra(struct thread *e) + break; + + table = bgp_dest_table(dest); +- install = +- CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); +- if (table->afi == AFI_L2VPN && table->safi == SAFI_EVPN) ++ install = CHECK_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_INSTALL); ++ if (table->afi == AFI_L2VPN && table->safi == SAFI_EVPN) { + is_evpn = true; ++ evp = (const struct prefix_evpn *)bgp_dest_get_prefix( ++ dest); ++ } + + if (BGP_DEBUG(zebra, ZEBRA)) + zlog_debug( +@@ -1845,6 +1848,17 @@ static void bgp_handle_route_announcements_to_zebra(struct thread *e) + UNSET_FLAG(dest->flags, BGP_NODE_SCHEDULE_FOR_DELETE); + } + ++ if (is_evpn && status == ZCLIENT_SEND_FAILURE) ++ flog_err(EC_BGP_EVPN_FAIL, ++ "%s (%u): Failed to %s EVPN %pFX %s route in VNI %u", ++ vrf_id_to_name(table->bgp->vrf_id), ++ table->bgp->vrf_id, ++ install ? "install" : "uninstall", evp, ++ evp->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE ++ ? "MACIP" ++ : "IMET", ++ dest->za_vpn->vni); ++ + bgp_path_info_unlock(dest->za_bgp_pi); + dest->za_bgp_pi = NULL; + dest->za_vpn = NULL; +-- +2.43.2 + diff --git a/src/sonic-frr/patch/series b/src/sonic-frr/patch/series index 445bc9dd9653..7f1d79d8199d 100644 --- a/src/sonic-frr/patch/series +++ b/src/sonic-frr/patch/series @@ -27,3 +27,26 @@ 0027-lib-Do-not-convert-EVPN-prefixes-into-IPv4-IPv6-if-n.patch 0028-zebra-fix-parse-attr-problems-for-encap.patch 0029-zebra-nhg-fix-on-intf-up.patch +0030-zebra-backpressure-Zebra-push-back-on-Buffer-Stream-.patch +0031-bgpd-backpressure-Add-a-typesafe-list-for-Zebra-Anno.patch +0032-bgpd-fix-flushing-ipv6-flowspec-entries-when-peering.patch +0033-bgpd-backpressure-cleanup-bgp_zebra_XX-func-args.patch +0034-gpd-backpressure-Handle-BGP-Zebra-Install-evt-Creat.patch +0035-bgpd-backpressure-Handle-BGP-Zebra-EPVN-Install-evt-.patch +0036-zebra-backpressure-Fix-Null-ptr-access-Coverity-Issu.patch +0037-bgpd-Increase-install-uninstall-speed-of-evpn-vpn-vn.patch +0038-zebra-Actually-display-I-O-buffer-sizes.patch +0039-zebra-Actually-display-I-O-buffer-sizes-part-2.patch +0040-bgpd-backpressure-Fix-to-withdraw-evpn-type-5-routes.patch +0041-bgpd-backpressure-Fix-to-avoid-CPU-hog.patch +0042-zebra-Use-built-in-data-structure-counter.patch +0043-zebra-Use-the-ctx-queue-counters.patch +0044-zebra-Modify-dplane-loop-to-allow-backpressure-to-fi.patch +0045-zebra-Limit-queue-depth-in-dplane_fpm_nl.patch +0046-zebra-Modify-show-zebra-dplane-providers-to-give-mor.patch +0047-bgpd-backpressure-fix-evpn-route-sync-to-zebra.patch +0048-bgpd-backpressure-fix-to-properly-remove-dest-for-bg.patch +0049-bgpd-backpressure-Improve-debuggability.patch +0050-bgpd-backpressure-Avoid-use-after-free.patch +0051-bgpd-backpressure-fix-ret-value-evpn_route_select_in.patch +0052-bgpd-backpressure-log-error-for-evpn-when-route-inst.patch From a44d532a48a2dedc6f9918861d5ae4583f83733c Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Tue, 6 Aug 2024 19:06:00 +0800 Subject: [PATCH 074/117] [submodule] Update submodule sonic-swss to the latest HEAD automatically (#19831) #### Why I did it src/sonic-swss ``` * 465391d1 - (HEAD -> master, origin/master, origin/HEAD) Reduce log verbosity when the capability is not implemented (#3240) (6 hours ago) [Vivek] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-swss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-swss b/src/sonic-swss index 3c9d6b342b53..465391d1825e 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 3c9d6b342b539b379cf10317e181c9953f57827c +Subproject commit 465391d1825ea3906d27a1285d2da5876f763cd7 From 8bfa0f1c9eab5c9b4697a7253b976cf0a2edf0a0 Mon Sep 17 00:00:00 2001 From: Kumaresh Perumal Date: Tue, 6 Aug 2024 10:04:53 -0700 Subject: [PATCH 075/117] [Broadcom]: Update XGS SAI version to 10.1.37.0 (#19830) Update max queues in BCM SAI for TH5 in alignment with the flex counter blocks Update XGS SAI version to 10.1.37.0 Microsoft ADO (number only): 28967795 --- platform/broadcom/sai.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index 4cfd2849e6c1..477585644c43 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -1,6 +1,6 @@ -LIBSAIBCM_XGS_VERSION = 10.1.35.0 +LIBSAIBCM_XGS_VERSION = 10.1.37.0 LIBSAIBCM_DNX_VERSION = 10.1.25.0 -LIBSAIBCM_XGS_BRANCH_NAME = SAI_10.1.0_GA +LIBSAIBCM_XGS_BRANCH_NAME = SAI_10.1.0_GA_CS00012362288 LIBSAIBCM_DNX_BRANCH_NAME = SAI_10.1.0_GA LIBSAIBCM_XGS_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/sai-broadcom/$(LIBSAIBCM_XGS_BRANCH_NAME)/$(LIBSAIBCM_XGS_VERSION)/xgs" LIBSAIBCM_DNX_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/sai-broadcom/$(LIBSAIBCM_DNX_BRANCH_NAME)/$(LIBSAIBCM_DNX_VERSION)/dnx" From 9dc28587ee2df3e0f19b489d2eb335a0d4d79d14 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Wed, 7 Aug 2024 19:05:55 +0800 Subject: [PATCH 076/117] [submodule] Update submodule sonic-mgmt-common to the latest HEAD automatically (#19845) #### Why I did it src/sonic-mgmt-common ``` * 966adc0 - (HEAD -> master, origin/master, origin/HEAD) Fix https://github.com/sonic-net/sonic-gnmi/issues/266 (#143) (4 hours ago) [Steve Licking] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-mgmt-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-mgmt-common b/src/sonic-mgmt-common index 81bf799d8e34..966adc0d92f7 160000 --- a/src/sonic-mgmt-common +++ b/src/sonic-mgmt-common @@ -1 +1 @@ -Subproject commit 81bf799d8e346817ccd335dcd4da6258f8edd7f1 +Subproject commit 966adc0d92f7c5e2f77636288653489bb97d9deb From 06df23445832a8df4db4692f0e8cfcf2812798f3 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Wed, 7 Aug 2024 19:06:08 +0800 Subject: [PATCH 077/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19832) #### Why I did it src/sonic-utilities ``` * 317e6495 - (HEAD -> master, origin/master, origin/HEAD) Fix kexec_unload failure on secure boot enabled platforms (#3439) (34 hours ago) [Vivek] * 557d6886 - [Mellanox] Add support for Mellanox-SN4700-O32 and Mellanox-SN4700-V64 (#3450) (34 hours ago) [Andriy Yurkiv] * 018eb737 - Fix to use IPv6 linklocal address as snmp agent address (#3215) (35 hours ago) [SuvarnaMeenakshi] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index f50587a1ff65..317e649514c9 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit f50587a1ff65bb489231bfe45cec805fb32dbf00 +Subproject commit 317e649514c9b205849ffb5ea96a6a233e38290c From 2ee63c27288265c19377704cd725fed5335223f5 Mon Sep 17 00:00:00 2001 From: Ashwin Srinivasan <93744978+assrinivasan@users.noreply.github.com> Date: Wed, 7 Aug 2024 18:48:44 -0700 Subject: [PATCH 078/117] Added blkinfo module to host for use by ssdutil (#19362) * Added blkinfo module to host for use by ssdutil * Added blkinfo and psutil (as needed) to the sonic slave dockerfile --- files/build_templates/sonic_debian_extension.j2 | 3 +++ sonic-slave-bookworm/Dockerfile.j2 | 1 + sonic-slave-bullseye/Dockerfile.j2 | 2 ++ sonic-slave-buster/Dockerfile.j2 | 4 ++++ 4 files changed, 10 insertions(+) diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index f32cd7f224f4..cb40986a858b 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -132,6 +132,9 @@ sudo rm -rf $FILESYSTEM_ROOT/$REDIS_DUMP_LOAD_PY3_WHEEL_NAME # Install Python module for psutil sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install psutil +# Install Python module for blkinfo +sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install blkinfo + # Install Python module for ipaddr sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install ipaddr diff --git a/sonic-slave-bookworm/Dockerfile.j2 b/sonic-slave-bookworm/Dockerfile.j2 index a254d3fab308..832580e5334b 100644 --- a/sonic-slave-bookworm/Dockerfile.j2 +++ b/sonic-slave-bookworm/Dockerfile.j2 @@ -565,6 +565,7 @@ RUN pip3 uninstall -y enum34 # For sonic-platform-common testing RUN pip3 install redis RUN pip3 install psutil +RUN pip3 install blkinfo # For sonic-swss-common testing RUN pip3 install Pympler==1.0 diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index ea3cd41ef028..8de9e586cc25 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -587,6 +587,8 @@ RUN pip3 install "lxml==4.9.1" # For sonic-platform-common testing RUN pip3 install redis +RUN pip3 install psutil +RUN pip3 install blkinfo # For vs image build RUN pip3 install pexpect==4.8.0 diff --git a/sonic-slave-buster/Dockerfile.j2 b/sonic-slave-buster/Dockerfile.j2 index 151df8243ed3..dce6daa520a0 100644 --- a/sonic-slave-buster/Dockerfile.j2 +++ b/sonic-slave-buster/Dockerfile.j2 @@ -561,6 +561,10 @@ RUN pip3 install "lxml==4.9.1" # For sonic-platform-common testing RUN pip2 install redis RUN pip3 install redis +RUN pip2 install psutil +RUN pip3 install psutil +RUN pip2 install blkinfo +RUN pip3 install blkinfo # For vs image build RUN pip2 install pexpect==4.6.0 From 2ab00c7ee63dd5a9bb3cb07f9527db825bec97d1 Mon Sep 17 00:00:00 2001 From: Yaqiang Zhu Date: Fri, 9 Aug 2024 00:23:07 +0800 Subject: [PATCH 079/117] [dhcp_server] Fix dhcp_server mk file mistake (#19847) * [dhcp_server] Fix dhcp_serverer mk file mistake * Set include_dhcp_server to y * Revert "Set include_dhcp_server to y" This reverts commit 88f03562745700db32838b038dfe2f10c5e88378. --- rules/docker-dhcp-server.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rules/docker-dhcp-server.mk b/rules/docker-dhcp-server.mk index 94ec1bf0a357..b3960f16a9c6 100644 --- a/rules/docker-dhcp-server.mk +++ b/rules/docker-dhcp-server.mk @@ -38,8 +38,8 @@ $(DOCKER_DHCP_SERVER)_CONTAINER_NAME = dhcp_server $(DOCKER_DHCP_SERVER)_VERSION = 1.0.0 $(DOCKER_DHCP_SERVER)_PACKAGE_NAME = dhcp-server -$(DOCKER_MACSEC)_SERVICE_REQUIRES = config-setup -$(DOCKER_MACSEC)_SERVICE_AFTER = swss syncd +$(DOCKER_DHCP_SERVER)_SERVICE_REQUIRES = config-setup +$(DOCKER_DHCP_SERVER)_SERVICE_AFTER = swss syncd $(DOCKER_DHCP_SERVER)_CONTAINER_PRIVILEGED = false $(DOCKER_DHCP_SERVER)_CONTAINER_VOLUMES += /etc/sonic:/etc/sonic:ro From ddd5460fcc72e326676d43303f66ded9eab122c0 Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Mon, 12 Aug 2024 12:01:37 -0700 Subject: [PATCH 080/117] Update OpenSSH to 9.2p1-2+deb12u3 (#19593) * Update OpenSSH to 9.2p1-2+deb12u3 This brings in CVE/security fixes. Signed-off-by: Saikrishna Arcot --- .../build_templates/sonic_debian_extension.j2 | 2 +- rules/openssh.mk | 11 ++++---- rules/sonic-fips.mk | 4 +-- src/openssh/Makefile | 28 +++++++++++-------- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index cb40986a858b..55511756e119 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -399,7 +399,7 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in sudo cp $IMAGE_CONFIGS/smartmontools/smartmontools $FILESYSTEM_ROOT/etc/default/smartmontools # Install custom-built openssh sshd -sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/openssh-server_${OPENSSH_VERSION}_*.deb $debs_path/openssh-client_${OPENSSH_VERSION}_*.deb $debs_path/openssh-sftp-server_${OPENSSH_VERSION}_*.deb +sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/openssh-server_${OPENSSH_VERSION_FULL}_*.deb $debs_path/openssh-client_${OPENSSH_VERSION_FULL}_*.deb $debs_path/openssh-sftp-server_${OPENSSH_VERSION_FULL}_*.deb {% if sonic_asic_platform == 'broadcom' %} # Install custom-built flashrom diff --git a/rules/openssh.mk b/rules/openssh.mk index 98dda081ec14..87bc2ee5cc02 100644 --- a/rules/openssh.mk +++ b/rules/openssh.mk @@ -1,18 +1,19 @@ # openssh package -OPENSSH_VERSION = 9.2p1-2+deb12u1 +OPENSSH_VERSION := 9.2p1 +OPENSSH_VERSION_FULL := $(OPENSSH_VERSION)-2+deb12u3 -export OPENSSH_VERSION +export OPENSSH_VERSION OPENSSH_VERSION_FULL -OPENSSH_SERVER = openssh-server_$(OPENSSH_VERSION)_$(CONFIGURED_ARCH).deb +OPENSSH_SERVER = openssh-server_$(OPENSSH_VERSION_FULL)_$(CONFIGURED_ARCH).deb $(OPENSSH_SERVER)_SRC_PATH = $(SRC_PATH)/openssh $(OPENSSH_SERVER)_DEPENDS += $(LIBNL3_DEV) $(LIBNL_ROUTE3_DEV) SONIC_MAKE_DEBS += $(OPENSSH_SERVER) -OPENSSH_CLIENT = openssh-client_$(OPENSSH_VERSION)_$(CONFIGURED_ARCH).deb +OPENSSH_CLIENT = openssh-client_$(OPENSSH_VERSION_FULL)_$(CONFIGURED_ARCH).deb $(eval $(call add_derived_package,$(OPENSSH_SERVER),$(OPENSSH_CLIENT))) -OPENSSH_SFTP_SERVER = openssh-sftp-server_$(OPENSSH_VERSION)_$(CONFIGURED_ARCH).deb +OPENSSH_SFTP_SERVER = openssh-sftp-server_$(OPENSSH_VERSION_FULL)_$(CONFIGURED_ARCH).deb $(eval $(call add_derived_package,$(OPENSSH_SERVER),$(OPENSSH_SFTP_SERVER))) # The .c, .cpp, .h & .hpp files under src/{$DBG_SRC_ARCHIVE list} diff --git a/rules/sonic-fips.mk b/rules/sonic-fips.mk index 524da2c61509..5ab8f1a64063 100644 --- a/rules/sonic-fips.mk +++ b/rules/sonic-fips.mk @@ -1,9 +1,9 @@ # fips packages ifeq ($(BLDENV), bookworm) -FIPS_VERSION = 1.4.3-preview +FIPS_VERSION = 1.4.3-1 FIPS_OPENSSL_VERSION = 3.0.11-1~deb12u2+fips -FIPS_OPENSSH_VERSION = 9.2p1-2+deb12u2+fips +FIPS_OPENSSH_VERSION = 9.2p1-2+deb12u3+fips FIPS_PYTHON_MAIN_VERSION = 3.11 FIPS_PYTHON_VERSION = 3.11.2-6+fips FIPS_GOLANG_MAIN_VERSION = 1.19 diff --git a/src/openssh/Makefile b/src/openssh/Makefile index c52a86baf4e2..8ecea0228c14 100644 --- a/src/openssh/Makefile +++ b/src/openssh/Makefile @@ -2,21 +2,25 @@ SHELL = /bin/bash .SHELLFLAGS += -e -MAIN_TARGET = openssh-server_$(OPENSSH_VERSION)_$(CONFIGURED_ARCH).deb -DERIVED_TARGETS = openssh-server-dbgsym_$(OPENSSH_VERSION)_$(CONFIGURED_ARCH).deb \ - openssh-client_$(OPENSSH_VERSION)_$(CONFIGURED_ARCH).deb \ - openssh-client-dbgsym_$(OPENSSH_VERSION)_$(CONFIGURED_ARCH).deb \ - openssh-sftp-server_$(OPENSSH_VERSION)_$(CONFIGURED_ARCH).deb \ - openssh-sftp-server-dbgsym_$(OPENSSH_VERSION)_$(CONFIGURED_ARCH).deb +MAIN_TARGET = openssh-server_$(OPENSSH_VERSION_FULL)_$(CONFIGURED_ARCH).deb +DERIVED_TARGETS = openssh-server-dbgsym_$(OPENSSH_VERSION_FULL)_$(CONFIGURED_ARCH).deb \ + openssh-client_$(OPENSSH_VERSION_FULL)_$(CONFIGURED_ARCH).deb \ + openssh-client-dbgsym_$(OPENSSH_VERSION_FULL)_$(CONFIGURED_ARCH).deb \ + openssh-sftp-server_$(OPENSSH_VERSION_FULL)_$(CONFIGURED_ARCH).deb \ + openssh-sftp-server-dbgsym_$(OPENSSH_VERSION_FULL)_$(CONFIGURED_ARCH).deb $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : - # Obtain openssh: https://salsa.debian.org/ssh-team/openssh/-/tree/debian/1%258.4p1-5 - rm -rf ./openssh-server - git clone https://salsa.debian.org/ssh-team/openssh.git openssh-server - pushd ./openssh-server + # Remove any stale files + rm -rf ./openssh-$(OPENSSH_VERSION) - # Check out tag: debian/1%8.4p1-5 - git checkout -b openssh-src -f debian/1\%$(OPENSSH_VERSION) + # Get openssh release, debian files + dget https://security.debian.org/pool/updates/main/o/openssh/openssh_$(OPENSSH_VERSION_FULL).dsc + pushd ./openssh-$(OPENSSH_VERSION) + + # Create a git repository here for stg to apply patches + git init + git add -f * + git commit -qm "initial commit" # Apply patch series stg init From f728ab2caa66d0ecf6bcff3605949c8da1fed2c9 Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Mon, 12 Aug 2024 12:03:13 -0700 Subject: [PATCH 081/117] Pin version of sflowtool used for the mixed PTF container (#19827) * Pin version of sflowtool used for the mixed PTF container Newer versions of sflowtool require autoconf 2.71, which is not available in Buster. For the py3-only version of the PTF container, this is currently based on Bullseye, which should be fine. Signed-off-by: Saikrishna Arcot * Remove code to build autoconf, and use 6.04 for py3 only PTF as well Signed-off-by: Saikrishna Arcot * Re-add autoconf to list of packages to install Signed-off-by: Saikrishna Arcot --------- Signed-off-by: Saikrishna Arcot --- dockers/docker-ptf/Dockerfile.j2 | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/dockers/docker-ptf/Dockerfile.j2 b/dockers/docker-ptf/Dockerfile.j2 index 087f49f51f9d..45aaec8ecd13 100644 --- a/dockers/docker-ptf/Dockerfile.j2 +++ b/dockers/docker-ptf/Dockerfile.j2 @@ -28,6 +28,7 @@ RUN apt-get update \ && apt-get upgrade -y \ && apt-get dist-upgrade -y \ && apt-get install -y \ + autoconf \ openssh-server \ vim \ telnet \ @@ -96,22 +97,6 @@ RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1 \ && update-alternatives --install /usr/bin/pygettext pygettext /usr/bin/pygettext3 1 {% endif %} -# sflow requires autoconf 2.71; This step builds autoconf from source -RUN apt-get update \ - && apt-get install -y \ - m4 \ - texinfo \ - help2man -# get autoconf, build and install -RUN git clone http://git.sv.gnu.org/r/autoconf.git \ - && cd autoconf \ - && ./bootstrap \ - && ./configure \ - && make \ - && make install \ - && cd .. \ - && rm -rf autoconf - # Install all python modules from pypi. python-scapy is exception, ptf debian package requires python-scapy # TODO: Clean up this step RUN rm -rf /debs \ @@ -137,6 +122,7 @@ RUN rm -rf /debs \ {% endif %} && git clone https://github.com/sflow/sflowtool \ && cd sflowtool \ + && git checkout v6.04 \ && ./boot.sh \ && ./configure \ && make \ From 0efc28de127024c015400bbed2e2d9a507d175e5 Mon Sep 17 00:00:00 2001 From: Saikrishna Arcot Date: Mon, 12 Aug 2024 12:03:51 -0700 Subject: [PATCH 082/117] Pin pip to version 24.2, and update disable-non-manylinux.patch (#19510) * Update disable-non-manylinux.patch due to pip being updated to 24.1.2. The code logic in this area has changed, resulting in patch conflicts. Signed-off-by: Saikrishna Arcot * Update the pinned version for pip to explicitly point to 24.1.2 This is needed because the patch file that has been updated can only be applied to 24.1.2. However, the version pinning for 24.0 will mean that PR checkers and the daily build will try to continue using 24.0, and thus fail to apply the patch. Signed-off-by: Saikrishna Arcot * Revert changes to version files, and pin pip to 24.2 Signed-off-by: Saikrishna Arcot --------- Signed-off-by: Saikrishna Arcot --- sonic-slave-bookworm/Dockerfile.j2 | 2 +- sonic-slave-bookworm/disable-non-manylinux.patch | 16 +++++++++++----- sonic-slave-bullseye/Dockerfile.j2 | 2 +- sonic-slave-bullseye/disable-non-manylinux.patch | 16 +++++++++++----- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/sonic-slave-bookworm/Dockerfile.j2 b/sonic-slave-bookworm/Dockerfile.j2 index 832580e5334b..50b8591e6462 100644 --- a/sonic-slave-bookworm/Dockerfile.j2 +++ b/sonic-slave-bookworm/Dockerfile.j2 @@ -520,7 +520,7 @@ RUN eatmydata apt-get install -y golang-go \ && ln -sf /usr/lib/go-1.19 /usr/local/go {%- endif %} -RUN pip3 install --upgrade pip +RUN pip3 install --upgrade pip==24.2 RUN apt-get purge -y python3-pip {%- if CONFIGURED_ARCH == "armhf" %} diff --git a/sonic-slave-bookworm/disable-non-manylinux.patch b/sonic-slave-bookworm/disable-non-manylinux.patch index 67e81c4e9116..dcdb953581c9 100644 --- a/sonic-slave-bookworm/disable-non-manylinux.patch +++ b/sonic-slave-bookworm/disable-non-manylinux.patch @@ -1,10 +1,16 @@ +Disable any type of wheel besides manylinux wheels. This is to work around an issue where the architecture-specific +wheel might be built with a newer glibc version than what is supported on the system. + +(This patch gets applied only on armhf.) + --- a/tags.py 2022-07-12 00:07:22.710207780 +0000 +++ b/tags.py 2022-07-12 00:07:13.185890659 +0000 -@@ -424,7 +424,6 @@ - _, arch = linux.split("_", 1) - yield from _manylinux.platform_tags(linux, arch) - yield from _musllinux.platform_tags(arch) -- yield linux +@@ -498,8 +498,6 @@ + archs = {"armv8l": ["armv8l", "armv7l"]}.get(arch, [arch]) + yield from _manylinux.platform_tags(archs) + yield from _musllinux.platform_tags(archs) +- for arch in archs: +- yield f"linux_{arch}" def _generic_platforms() -> Iterator[str]: diff --git a/sonic-slave-bullseye/Dockerfile.j2 b/sonic-slave-bullseye/Dockerfile.j2 index 8de9e586cc25..1aca2a0ba5e3 100644 --- a/sonic-slave-bullseye/Dockerfile.j2 +++ b/sonic-slave-bullseye/Dockerfile.j2 @@ -520,7 +520,7 @@ RUN wget -O golang-go.deb 'https://sonicstorage.blob.core.windows.net/public/fip && rm golang-go.deb golang-src.deb {%- endif %} -RUN pip3 install --upgrade pip +RUN pip3 install --upgrade pip==24.2 RUN apt-get purge -y python3-pip python3-yaml # For building Python packages diff --git a/sonic-slave-bullseye/disable-non-manylinux.patch b/sonic-slave-bullseye/disable-non-manylinux.patch index 67e81c4e9116..dcdb953581c9 100644 --- a/sonic-slave-bullseye/disable-non-manylinux.patch +++ b/sonic-slave-bullseye/disable-non-manylinux.patch @@ -1,10 +1,16 @@ +Disable any type of wheel besides manylinux wheels. This is to work around an issue where the architecture-specific +wheel might be built with a newer glibc version than what is supported on the system. + +(This patch gets applied only on armhf.) + --- a/tags.py 2022-07-12 00:07:22.710207780 +0000 +++ b/tags.py 2022-07-12 00:07:13.185890659 +0000 -@@ -424,7 +424,6 @@ - _, arch = linux.split("_", 1) - yield from _manylinux.platform_tags(linux, arch) - yield from _musllinux.platform_tags(arch) -- yield linux +@@ -498,8 +498,6 @@ + archs = {"armv8l": ["armv8l", "armv7l"]}.get(arch, [arch]) + yield from _manylinux.platform_tags(archs) + yield from _musllinux.platform_tags(archs) +- for arch in archs: +- yield f"linux_{arch}" def _generic_platforms() -> Iterator[str]: From bc1da06ed204cd98f7aa44cc1ed5c59fc11204df Mon Sep 17 00:00:00 2001 From: Arun LK <83708154+arunlk-dell@users.noreply.github.com> Date: Tue, 13 Aug 2024 04:17:19 +0530 Subject: [PATCH 083/117] DellEMC: Z9432F platform TD4 config changes (#19749) Why I did it DellEMC Z9432F platform onboarding. How I did it Config changes with respect to Z9432F SAI bring up. Also changes from swss is required for complete bring up of Z9432F platform(TD4) will be followed thru (sonic-net/sonic-swss#3244) How to verify it The following error message is not seen.. sonic CRIT syncd#syncd: [none] SAI_API_SWITCH:brcm_sai_create_switch:3204 setting inter-frame gap failed with error Feature unavailable (0xfffffff0). --- .../td4-z9432f-32x400G.config.yml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/device/dell/x86_64-dellemc_z9432f_c3758-r0/DellEMC-Z9432f-O32/td4-z9432f-32x400G.config.yml b/device/dell/x86_64-dellemc_z9432f_c3758-r0/DellEMC-Z9432f-O32/td4-z9432f-32x400G.config.yml index c93590a022c6..ad17e7e28ff5 100644 --- a/device/dell/x86_64-dellemc_z9432f_c3758-r0/DellEMC-Z9432f-O32/td4-z9432f-32x400G.config.yml +++ b/device/dell/x86_64-dellemc_z9432f_c3758-r0/DellEMC-Z9432f-O32/td4-z9432f-32x400G.config.yml @@ -5,12 +5,12 @@ bcm_device: l2_table_default_view: 1 pktio_mode: 1 vlan_flooding_l2mc_num_reserved: 0 - shared_block_mask_section: uc_mc + shared_block_mask_section: uc_bc ctr_evict_enable: 0 uat_mode: 1 uft_mode: 4 sai_brcm_sonic_acl_enhancements: 1 - sai_tunnel_support: 1 + sai_tunnel_support: 2 multi_network_groups: 1 sai_field_group_auto_prioritize: 1 sai_modify_hash_flexdigest: 1 @@ -24,7 +24,7 @@ device: CORE_CLK_FREQ: CLK_1350MHZ # PP CLOCK FREQUENCY PP_CLK_FREQ: CLK_1350MHZ - VARIANT: DNA_4_9_5_0 + VARIANT: DNA_4_11_4_0 ... --- device: @@ -625,7 +625,7 @@ device: NUM_LANES: 1 MAX_FRAME_SIZE: 9416 SER_CONFIG: - SER_ENABLE: 0 + SER_ENABLE: 1 ... --- device: @@ -690,6 +690,17 @@ device: 0: FP_CONFIG: FP_ING_OPERMODE: GLOBAL_PIPE_AWARE + + TM_ING_PORT_PRI_GRP: + ? + PORT_ID: [ [1, 18], [20, 38], + [40, 57], [60, 78], + [80, 97], [100, 118], + [120, 137], [140, 158] ] + + TM_PRI_GRP_ID: [[3,4]] + : + LOSSLESS: 0 ... --- device: From 72b2f79c75705ccdfc73f6b2a0ab05c375eff400 Mon Sep 17 00:00:00 2001 From: Ze Gan Date: Mon, 12 Aug 2024 20:27:25 -0700 Subject: [PATCH 084/117] Hotfix: bypass saimetadatatest for dash sai (#19882) Why I did it Get the following error due to switch_health_dta size changing ASSERT TRUE FAILED(5085): sizeof(sai_switch_health_data_t) == (SAI_SWITCH_HEALTH_DATA_T_SIZE): wrong size of sai_switch_health_data_t, expected 16, got 4 Work item tracking Microsoft ADO (number only): 29062472 How I did it This PR is just an adhoc fix by disabling saimetadatatest. We should fix the scripts under OCP/SAI/meta How to verify it Check Azp --- src/dash-sai/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/src/dash-sai/Makefile b/src/dash-sai/Makefile index 2a188c49f6c9..927f799f9b72 100644 --- a/src/dash-sai/Makefile +++ b/src/dash-sai/Makefile @@ -37,6 +37,7 @@ $(addprefix $(DEST)/, $(MAIN_TARGET)): $(DEST)/% : sed -i.bak '/checkenumlock.sh/d' SAI/SAI/meta/Makefile sed -i.bak '/checkancestry.sh/d' SAI/SAI/meta/Makefile sed -i.bak '/checkstructs.sh/d' SAI/SAI/meta/Makefile + sed -i.bak "/.\/saimetadatatest >\/dev\/null/d" SAI/SAI/meta/Makefile pushd SAI/SAI/meta/ CFLAGS=-Wdangling-pointer=1 make all libsaimetadata.so popd From b535f285671ee625d057e32b02a686b850d45c18 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Wed, 14 Aug 2024 06:51:35 +0800 Subject: [PATCH 085/117] Support notice level log (#19232) #### Why I did it SysLogger does not support NOTICE level log. The PR is to support it. #### How I did it Add a new log level NOTICE to python logging package. #### How to verify it Manual test ``` Jun 3 03:09:44.353536 sonic NOTICE test[364076]: This is a notice ``` --- .../sonic_py_common/syslogger.py | 11 ++++-- src/sonic-py-common/tests/test_syslogger.py | 34 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/sonic-py-common/tests/test_syslogger.py diff --git a/src/sonic-py-common/sonic_py_common/syslogger.py b/src/sonic-py-common/sonic_py_common/syslogger.py index b3c8f726502c..c45f0cde8425 100644 --- a/src/sonic-py-common/sonic_py_common/syslogger.py +++ b/src/sonic-py-common/sonic_py_common/syslogger.py @@ -4,13 +4,19 @@ import socket import sys +# customize python logging to support notice logger +logging.NOTICE = logging.INFO + 1 +logging.addLevelName(logging.NOTICE, "NOTICE") +SysLogHandler.priority_map['NOTICE'] = 'notice' + + class SysLogger: """ SysLogger class for Python applications using SysLogHandler """ DEFAULT_LOG_FACILITY = SysLogHandler.LOG_USER - DEFAULT_LOG_LEVEL = SysLogHandler.LOG_NOTICE + DEFAULT_LOG_LEVEL = logging.NOTICE def __init__(self, log_identifier=None, log_facility=DEFAULT_LOG_FACILITY, log_level=DEFAULT_LOG_LEVEL): if log_identifier is None: @@ -53,10 +59,11 @@ def log_warning(self, msg, also_print_to_console=False): self.log(logging.WARNING, msg, also_print_to_console) def log_notice(self, msg, also_print_to_console=False): - self.log(logging.INFO, msg, also_print_to_console) + self.log(logging.NOTICE, msg, also_print_to_console) def log_info(self, msg, also_print_to_console=False): self.log(logging.INFO, msg, also_print_to_console) def log_debug(self, msg, also_print_to_console=False): self.log(logging.DEBUG, msg, also_print_to_console) + \ No newline at end of file diff --git a/src/sonic-py-common/tests/test_syslogger.py b/src/sonic-py-common/tests/test_syslogger.py new file mode 100644 index 000000000000..359120163b3f --- /dev/null +++ b/src/sonic-py-common/tests/test_syslogger.py @@ -0,0 +1,34 @@ +import logging +import os +import sys +from io import StringIO +from contextlib import redirect_stdout + +if sys.version_info.major == 3: + from unittest import mock +else: + import mock + +modules_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0, os.path.join(modules_path, 'sonic_py_common')) +from sonic_py_common import syslogger + + +class TestSysLogger: + def test_notice_log(self, capsys): + """NOTICE is a customize log level, added a test case here to make sure it works in future + """ + log = syslogger.SysLogger() + # remove syslog handler, unit test environment has no rsyslogd + for handler in log.logger.handlers[:]: + log.logger.removeHandler(handler) + + # put a stdout log handler + handler = logging.StreamHandler(sys.stdout) + formatter = logging.Formatter('%(name)s[%(process)d] - %(levelname)s : %(message)s') + handler.setFormatter(formatter) + log.logger.addHandler(handler) + + log.log_notice('this is a message') + captured = capsys.readouterr() + assert 'NOTICE' in captured.out From 3ab2b00c5f49bc86e2b9e4fdfb46d270cb5269e6 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox <57339448+Junchao-Mellanox@users.noreply.github.com> Date: Wed, 14 Aug 2024 06:52:12 +0800 Subject: [PATCH 086/117] Install tool xxd to platform monitor container (#19671) #### Why I did it After upgrading from bullseye to bookworm, pmon container no longer default installs tool xxd. The tool is used in mellanox simx platforms. The PR is to install xxd tool in the docker build file. #### How I did it Install xxd in platform monitor docker file. #### How to verify it Manual test --- dockers/docker-platform-monitor/Dockerfile.j2 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dockers/docker-platform-monitor/Dockerfile.j2 b/dockers/docker-platform-monitor/Dockerfile.j2 index 9f44ca004594..1bd0b1b1c082 100755 --- a/dockers/docker-platform-monitor/Dockerfile.j2 +++ b/dockers/docker-platform-monitor/Dockerfile.j2 @@ -27,7 +27,8 @@ RUN apt-get update && \ iputils-ping \ pciutils \ nvme-cli \ - ethtool + ethtool \ + xxd # smartmontools version should match the installed smartmontools in sonic_debian_extension build template RUN apt-get install -y -t bookworm-backports \ From 3a143adda210e015a47e2374d812355f6b8bcc3f Mon Sep 17 00:00:00 2001 From: Oleksandr Ivantsiv Date: Tue, 13 Aug 2024 15:53:02 -0700 Subject: [PATCH 087/117] [Static DNS] Optimize DNS configuration update during interface-config service restart (#19583) #### Why I did it The `resolvconfig` service updates the DNS configuration in the host OS and each running Docker container when a configuration change is detected. The DNS configuration update during the shutdown of the management interface is redundant, as the management interface is going down temporarily and, when it is back online, the DNS configuration will remain the same. The update of the DNS configuration adds a couple of seconds (depending on the CPU) to the interface-config service restart time when the management interface uses a dynamic IP address. This can affect the fast boot. To optimize the flow and execute the service restart faster, the update should be skipped. #### How I did it Do not run DNS configuration update during the shutdown of the management interface. #### How to verify it Measure the execution time of the `service interfaces-config restart` command on the device with the static IP address configuration on the management interface and compare it to the execution time of the same command with the dynamic IP address. The difference should be insignificant. --- .../interfaces/interfaces-config.sh | 21 +++++++++++++++++++ .../resolv-config/update-containers | 7 ++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/files/image_config/interfaces/interfaces-config.sh b/files/image_config/interfaces/interfaces-config.sh index cb2faea91f31..669d12849f10 100755 --- a/files/image_config/interfaces/interfaces-config.sh +++ b/files/image_config/interfaces/interfaces-config.sh @@ -1,4 +1,5 @@ #!/bin/bash +resolvconf_updates=true function wait_networking_service_done() { local -i _WDOG_CNT="1" @@ -23,6 +24,24 @@ function wait_networking_service_done() { systemctl kill networking 2>&1 } +function resolvconf_updates_disable() { + resolvconf --updates-are-enabled + if [[ $? -ne 0 ]]; then + resolvconf_updates=false + fi + resolvconf --disable-updates +} + +function resolvconf_updates_restore() { + if [[ $resolvconf_updates == true ]]; then + resolvconf --enable-updates + fi +} + +# Do not run DNS configuration update during the shutdowning of the management interface. +# This operation is redundant as there will be an update after the start of the interface. +resolvconf_updates_disable + if [[ $(ifquery --running eth0) ]]; then wait_networking_service_done ifdown --force eth0 @@ -61,6 +80,8 @@ for intf_pid in $(ls -1 /var/run/dhclient*.Ethernet*.pid 2> /dev/null); do done /usr/bin/resolv-config.sh cleanup +# Restore DNS configuration update to the previous state. +resolvconf_updates_restore # Read sysctl conf files again sysctl -p /etc/sysctl.d/90-dhcp6-systcl.conf diff --git a/files/image_config/resolv-config/update-containers b/files/image_config/resolv-config/update-containers index 47d8328a80fe..891fd2ea7462 100755 --- a/files/image_config/resolv-config/update-containers +++ b/files/image_config/resolv-config/update-containers @@ -1,6 +1,11 @@ #!/bin/bash -for container in $(docker ps -a --format=" {{ .ID }}"); do +networking_status=$(systemctl is-active networking.service 2>/dev/null) +if [[ $networking_status != "active" ]]; then + exit 0 +fi + +for container in $(docker ps -q); do docker cp -L /etc/resolv.conf ${container}:/_resolv.conf docker exec -t ${container} bash -c "cat /_resolv.conf > /etc/resolv.conf" docker exec -t ${container} bash -c "rm /_resolv.conf" From 6cbdca3209f8bb69db41bb3a171e592a0f268532 Mon Sep 17 00:00:00 2001 From: Lawrence Lee Date: Tue, 13 Aug 2024 22:12:41 -0700 Subject: [PATCH 088/117] [submodule][master] Update sonic-swss and sonic-dash-api submodules (#19900) Why I did it The latest swss and dash-api commits are dependent on each other to build properly, if updated separately they won't build. sonic-swss new commits: * 29cea04a - (HEAD -> master, origin/master, origin/HEAD) [DASH] Remove deprecated 'action_type' refs (#3257) (3 hours ago) [Lawrence Lee] sonic-dash-api new commits: * dbb2d0f - (HEAD -> master, origin/master, origin/HEAD) Update for SAI API changes (3 days ago) [Lawrence Lee] * 7cd1105 - deprecate pl_sip_encoding (6 days ago) [Lawrence Lee] * 0df30ee - Merge branch 'master' of github.com:sonic-net/sonic-dash-api into route-group (6 days ago) [Lawrence Lee] * 2721493 - deprecate privatelinknsg routing type (6 days ago) [Lawrence Lee] * 3260f6a - update unit tests (6 days ago) [Lawrence Lee] * 95fa234 - avoid breaking change (6 days ago) [Lawrence Lee] * ab46204 - EOF newline (6 days ago) [Lawrence Lee] * 2f58861 - add icmp redirection (6 days ago) [Lawrence Lee] * 6e9ad22 - non-breaking route metering update (6 days ago) [Lawrence Lee] * 722b6c2 - Rename action_type to routing type (6 days ago) [Lawrence Lee] * 76ab87a - add newline to EOF (6 days ago) [Lawrence Lee] * 747425a - Keep pl_sip_encoding (6 days ago) [Lawrence Lee] * 597c4b8 - Merge branch 'route-group' of github.com:theasianpianist/sonic-dash-api into route-group (4 months ago) [Lawrence Lee] |\ | * ecec7fb - Merge branch 'master' into route-group (5 months ago) [Lawrence Lee] * | 8b3de2d - update API to match new HLD schema (4 months ago) [Lawrence Lee] |/ * daa54b6 - add new message types to unittest (5 months ago) [Lawrence Lee] * 16ca9f1 - add PA validation table (5 months ago) [Lawrence Lee] * 8f7aaef - add route group table (5 months ago) [Lawrence Lee] Work item tracking Microsoft ADO (number only): How I did it How to verify it --- src/sonic-dash-api | 2 +- src/sonic-swss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sonic-dash-api b/src/sonic-dash-api index 5809048abbc5..dbb2d0fee2fc 160000 --- a/src/sonic-dash-api +++ b/src/sonic-dash-api @@ -1 +1 @@ -Subproject commit 5809048abbc52ce1762f3ed29eb77483051176dd +Subproject commit dbb2d0fee2fcb5cb78bd7c9b0686dc0f8e1db210 diff --git a/src/sonic-swss b/src/sonic-swss index 465391d1825e..29cea04a0b98 160000 --- a/src/sonic-swss +++ b/src/sonic-swss @@ -1 +1 @@ -Subproject commit 465391d1825ea3906d27a1285d2da5876f763cd7 +Subproject commit 29cea04a0b98cc440fd5730c758a9b73ac95362c From 960e27689145c56e96cc99bf8a60fe22398237b7 Mon Sep 17 00:00:00 2001 From: bingwang-ms <66248323+bingwang-ms@users.noreply.github.com> Date: Tue, 13 Aug 2024 22:21:44 -0700 Subject: [PATCH 089/117] Revert "[arista]: Always set sai_tunnel_support on Arista-7260cx3 (#16097)" (#19888) This reverts commit d50ae1fd09c9e1f2f4b736c4e947c1d8e08ac188. --- .../x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 | 4 ++-- .../Arista-7260CX3-D108C10/config.bcm.j2 | 4 ++-- .../Arista-7260CX3-D108C8/config.bcm.j2 | 4 ++-- .../x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 | 4 ++-- src/sonic-config-engine/tests/data/j2_template/config.bcm.j2 | 4 ++-- .../tests/sample_output/py3/arista7260-t1.config.bcm | 1 - 6 files changed, 10 insertions(+), 11 deletions(-) diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 index ee67a684bf77..97040d332ced 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-C64/config.bcm.j2 @@ -14,7 +14,8 @@ {%- set switch_subtype = DEVICE_METADATA['localhost']['subtype'] -%} {%- if 'dualtor' in switch_subtype.lower() %} {%- set IPinIP_sock = -'sai_tunnel_underlay_route_mode=1 +'sai_tunnel_support=1 +sai_tunnel_underlay_route_mode=1 host_as_route_disable=1 l3_ecmp_levels=2' -%} {%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} @@ -1048,6 +1049,5 @@ serdes_preemphasis_116=0x103706 serdes_preemphasis_117=0x133c06 {{ mmu_sock }} -sai_tunnel_support=1 {{ IPinIP_sock }} phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C10/config.bcm.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C10/config.bcm.j2 index 9ba820196e68..019f556edb8f 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C10/config.bcm.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C10/config.bcm.j2 @@ -6,7 +6,8 @@ {%- set switch_subtype = DEVICE_METADATA['localhost']['subtype'] -%} {%- if 'dualtor' in switch_subtype.lower() %} {%- set IPinIP_sock = -'sai_tunnel_underlay_route_mode=1 +'sai_tunnel_support=1 +sai_tunnel_underlay_route_mode=1 host_as_route_disable=1 l3_ecmp_levels=2' -%} {%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} @@ -955,6 +956,5 @@ serdes_preemphasis_130=0x580c serdes_preemphasis_131=0x580c mmu_init_config="MSFT-TH2-Tier0" -sai_tunnel_support=1 {{ IPinIP_sock }} phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 index 70403df33967..1efa8ef69567 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-D108C8/config.bcm.j2 @@ -6,7 +6,8 @@ {%- set switch_subtype = DEVICE_METADATA['localhost']['subtype'] -%} {%- if 'dualtor' in switch_subtype.lower() %} {%- set IPinIP_sock = -'sai_tunnel_underlay_route_mode=1 +'sai_tunnel_support=1 +sai_tunnel_underlay_route_mode=1 host_as_route_disable=1 l3_ecmp_levels=2' -%} {%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} @@ -959,6 +960,5 @@ serdes_preemphasis_130=0x580c serdes_preemphasis_131=0x580c mmu_init_config="MSFT-TH2-Tier0" -sai_tunnel_support=1 {{ IPinIP_sock }} phy_an_lt_msft=1 diff --git a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 index 464796bf4d72..de7cac15435a 100644 --- a/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 +++ b/device/arista/x86_64-arista_7260cx3_64/Arista-7260CX3-Q64/config.bcm.j2 @@ -14,7 +14,8 @@ {%- set switch_subtype = DEVICE_METADATA['localhost']['subtype'] -%} {%- if 'dualtor' in switch_subtype.lower() %} {%- set IPinIP_sock = -'sai_tunnel_underlay_route_mode=1 +'sai_tunnel_support=1 +sai_tunnel_underlay_route_mode=1 host_as_route_disable=1 l3_ecmp_levels=2' -%} {%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} @@ -1047,6 +1048,5 @@ serdes_preemphasis_116=0x105004 serdes_preemphasis_117=0x105004 {{ mmu_sock }} -sai_tunnel_support=1 {{ IPinIP_sock }} phy_an_lt_msft=1 diff --git a/src/sonic-config-engine/tests/data/j2_template/config.bcm.j2 b/src/sonic-config-engine/tests/data/j2_template/config.bcm.j2 index 8a10ddb91936..61aeb0eff901 100644 --- a/src/sonic-config-engine/tests/data/j2_template/config.bcm.j2 +++ b/src/sonic-config-engine/tests/data/j2_template/config.bcm.j2 @@ -14,7 +14,8 @@ {%- set switch_subtype = DEVICE_METADATA['localhost']['subtype'] -%} {%- if 'dualtor' in switch_subtype.lower() %} {%- set IPinIP_sock = -'sai_tunnel_underlay_route_mode=1 +'sai_tunnel_support=1 +sai_tunnel_underlay_route_mode=1 host_as_route_disable=1 l3_ecmp_levels=2' -%} {%- set map_prio = 'sai_remap_prio_on_tnl_egress=1' -%} @@ -32,6 +33,5 @@ sai_pfc_dlr_init_capability=1' -%} l3_alpm_hit_skip=1 {{ map_prio }} {{ mmu_sock }} -sai_tunnel_support=1 {{ IPinIP_sock }} {{ pfcwd_sock }} diff --git a/src/sonic-config-engine/tests/sample_output/py3/arista7260-t1.config.bcm b/src/sonic-config-engine/tests/sample_output/py3/arista7260-t1.config.bcm index c3323f545aa4..a76c2173f436 100644 --- a/src/sonic-config-engine/tests/sample_output/py3/arista7260-t1.config.bcm +++ b/src/sonic-config-engine/tests/sample_output/py3/arista7260-t1.config.bcm @@ -2,7 +2,6 @@ l3_alpm_hit_skip=1 mmu_init_config="MSFT-TH2-Tier1" -sai_tunnel_support=1 hybrid_pfc_deadlock_enable=1 pfc_deadlock_seq_control=1 From 3b27e1ca47b190d24d21a172434bca68fe7c9d1f Mon Sep 17 00:00:00 2001 From: zitingguo-ms Date: Wed, 14 Aug 2024 15:37:49 +0800 Subject: [PATCH 090/117] change xgs SAI branch to SAI_10.1.0_GA (#19858) Why I did it Upgrade xgs SAI version to 10.1.37.0 with official branch. 10.1.37.0: [CS00012362288][TH5] SAI Queue counters are not reported for all the queues Work item tracking Microsoft ADO (number only): How I did it Change back xgs SAI branch to SAI_10.1.0_GA. How to verify it Run SAI release validation pipeline: https://dev.azure.com/mssonic/internal/_build/results?buildId=613625&view=results --- platform/broadcom/sai.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index 477585644c43..86be717e6c58 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -1,6 +1,6 @@ LIBSAIBCM_XGS_VERSION = 10.1.37.0 LIBSAIBCM_DNX_VERSION = 10.1.25.0 -LIBSAIBCM_XGS_BRANCH_NAME = SAI_10.1.0_GA_CS00012362288 +LIBSAIBCM_XGS_BRANCH_NAME = SAI_10.1.0_GA LIBSAIBCM_DNX_BRANCH_NAME = SAI_10.1.0_GA LIBSAIBCM_XGS_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/sai-broadcom/$(LIBSAIBCM_XGS_BRANCH_NAME)/$(LIBSAIBCM_XGS_VERSION)/xgs" LIBSAIBCM_DNX_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/sai-broadcom/$(LIBSAIBCM_DNX_BRANCH_NAME)/$(LIBSAIBCM_DNX_VERSION)/dnx" From 08f8cb6b9c60b8c6c628ff2973e2a9a5ef5032cc Mon Sep 17 00:00:00 2001 From: Liping Xu <108326363+lipxu@users.noreply.github.com> Date: Thu, 15 Aug 2024 14:26:33 +0800 Subject: [PATCH 091/117] check internface status before start bgp (#19189) Why I did it With the following PR, make bgp start after swss. #12381 bgp started after the swss but still ahead of the interface init. Jun 12 04:53:59.768546 bjw-can-7050qx-1 NOTICE root: Starting swss service... ... Jun 12 04:54:12.725418 bjw-can-7050qx-1 NOTICE admin: Starting bgp service... ... Jun 12 04:54:43.036682 bjw-can-7050qx-1 NOTICE swss#orchagent: :- updatePortOperStatus: Port Ethernet0 oper state set from down to up Jun 12 04:54:43.191143 bjw-can-7050qx-1 NOTICE swss#orchagent: :- updatePortOperStatus: Port Ethernet4 oper state set from down to up Jun 12 04:54:43.207343 bjw-can-7050qx-1 NOTICE swss#orchagent: :- updatePortOperStatus: Port Ethernet12 oper state set from down to up Work item tracking Microsoft ADO (number only): 26557087 How I did it Check the interface status before start bgp. waiting timeout is about 60s, will output a warning message if interface still down. How to verify it build debug image, boot the image, check the syslog. and bgp process. syslog:1098:Jun 3 03:10:30.338071 str-a7060cx-acs-10 INFO bgp#root: [bgpd] It took 0.498398 seconds for interface to become ready --- dockers/docker-fpm-frr/Dockerfile.j2 | 1 + .../docker-fpm-frr/bgpd_wait_for_intf.sh.j2 | 70 +++++++++++++++++++ dockers/docker-fpm-frr/docker_init.sh | 3 + .../frr/supervisord/supervisord.conf.j2 | 14 +++- 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100755 dockers/docker-fpm-frr/bgpd_wait_for_intf.sh.j2 diff --git a/dockers/docker-fpm-frr/Dockerfile.j2 b/dockers/docker-fpm-frr/Dockerfile.j2 index 98c4593811f7..7ac3e88397e9 100644 --- a/dockers/docker-fpm-frr/Dockerfile.j2 +++ b/dockers/docker-fpm-frr/Dockerfile.j2 @@ -54,6 +54,7 @@ COPY ["TSC", "/usr/bin/TSC"] COPY ["TS", "/usr/bin/TS"] COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] COPY ["zsocket.sh", "/usr/bin/"] +COPY ["bgpd_wait_for_intf.sh.j2", "/usr/share/sonic/templates/"] RUN chmod a+x /usr/bin/TSA && \ chmod a+x /usr/bin/TSB && \ chmod a+x /usr/bin/TSC && \ diff --git a/dockers/docker-fpm-frr/bgpd_wait_for_intf.sh.j2 b/dockers/docker-fpm-frr/bgpd_wait_for_intf.sh.j2 new file mode 100755 index 000000000000..ef014d10328a --- /dev/null +++ b/dockers/docker-fpm-frr/bgpd_wait_for_intf.sh.j2 @@ -0,0 +1,70 @@ +#!/usr/bin/env bash + +# Define global timeout in seconds +GLOBAL_TIMEOUT=60 +GLOBAL_TIMEOUT_REACHED="false" + +function wait_iface_ready +{ + IFACE_NAME=$1 + IFACE_CIDR=$2 + START_TIME=$3 + + # First phase: wait for all interfaces until the global timeout is reached + while [ "$GLOBAL_TIMEOUT_REACHED" == "false" ]; do + CURRENT_TIME=$(date +%s.%N) + ELAPSED_TIME=$(awk -v current_time=$CURRENT_TIME -v start_time=$START_TIME 'BEGIN {print current_time - start_time}') + + # Check if global timeout is reached + if (( $(awk -v elapsed_time=$ELAPSED_TIME -v global_timeout=$GLOBAL_TIMEOUT 'BEGIN {print (elapsed_time >= global_timeout)}') )); then + GLOBAL_TIMEOUT_REACHED="true" + break + fi + + RESULT=$(sonic-db-cli STATE_DB HGET "INTERFACE_TABLE|${IFACE_NAME}|${IFACE_CIDR}" "state" 2> /dev/null) + if [ x"$RESULT" == x"ok" ]; then + return 0 + fi + sleep 0.5 + done + + # Second phase: apply per-interface timeout + # Counter to track the number of iterations + ITERATION=0 + while [ $ITERATION -lt 3 ]; do + RESULT=$(sonic-db-cli STATE_DB HGET "INTERFACE_TABLE|${IFACE_NAME}|${IFACE_CIDR}" "state" 2> /dev/null) + if [ x"$RESULT" == x"ok" ]; then + return 0 + fi + + sleep 0.5 + ((ITERATION++)) + done + + logger -p warning "[bgpd] warning: Interface ${IFACE_NAME} not ready." + return 1 +} + +start=$(date +%s.%N) + +{% for (name, prefix) in INTERFACE|pfx_filter %} +{% if prefix | ipv4 %} +wait_iface_ready {{ name }} {{ prefix }} $start +{% endif %} +{% endfor %} + +{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %} +{% if prefix | ipv4 %} +wait_iface_ready {{ name }} {{ prefix }} $start +{% endif %} +{% endfor %} + +{% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %} +{% if prefix | ipv4 %} +wait_iface_ready {{ name }} {{ prefix }} $start +{% endif %} +{% endfor %} + +end=$(date +%s.%N) +timespan=$(awk -v start=$start -v end=$end 'BEGIN {print end - start}') +logger -p info "[bgpd] It took ${timespan} seconds for interfaces to become ready" diff --git a/dockers/docker-fpm-frr/docker_init.sh b/dockers/docker-fpm-frr/docker_init.sh index 0ed274ec703f..f60c5327ac2b 100755 --- a/dockers/docker-fpm-frr/docker_init.sh +++ b/dockers/docker-fpm-frr/docker_init.sh @@ -11,6 +11,7 @@ CFGGEN_PARAMS=" \ -t /usr/share/sonic/templates/supervisord/critical_processes.j2,/etc/supervisor/critical_processes \ -t /usr/share/sonic/templates/isolate.j2,/usr/sbin/bgp-isolate \ -t /usr/share/sonic/templates/unisolate.j2,/usr/sbin/bgp-unisolate \ + -t /usr/share/sonic/templates/bgpd_wait_for_intf.sh.j2,/usr/bin/bgpd_wait_for_intf.sh \ " FRR_VARS=$(sonic-cfggen $CFGGEN_PARAMS) @@ -111,4 +112,6 @@ TZ=$(cat /etc/timezone) rm -rf /etc/localtime ln -sf /usr/share/zoneinfo/$TZ /etc/localtime +chmod +x /usr/bin/bgpd_wait_for_intf.sh + exec /usr/local/bin/supervisord diff --git a/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 b/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 index 4ee96cf845c3..0e12fb62b4ba 100644 --- a/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 +++ b/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 @@ -76,6 +76,18 @@ dependent_startup=true dependent_startup_wait_for=zebra:running {% endif %} +[program:bgpd_wait_for_intf] +command=/usr/bin/bgpd_wait_for_intf.sh +priority=5 +stopsignal=KILL +autostart=false +autorestart=false +startsecs=0 +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true +dependent_startup_wait_for=zsocket:exited + [program:bgpd] command=/usr/lib/frr/bgpd -A 127.0.0.1 -M snmp priority=5 @@ -86,7 +98,7 @@ startsecs=0 stdout_logfile=syslog stderr_logfile=syslog dependent_startup=true -dependent_startup_wait_for=zsocket:exited +dependent_startup_wait_for=bgpd_wait_for_intf:exited {% if DEVICE_METADATA.localhost.frr_mgmt_framework_config is defined and DEVICE_METADATA.localhost.frr_mgmt_framework_config == "true" %} [program:ospfd] From ce2988220e545c42e969a2f81790c03bd2cddfe5 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 15 Aug 2024 17:36:09 +0800 Subject: [PATCH 092/117] [submodule] Update submodule sonic-host-services to the latest HEAD automatically (#19897) #### Why I did it src/sonic-host-services ``` * 39e31a9 - (HEAD -> master, origin/master, origin/HEAD) Fix modify_single_file generate empty file issue (#145) (26 hours ago) [Hua Liu] * 1891b0a - Add dbus service to read file stat (#142) (2 days ago) [isabelmsft] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-host-services | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-host-services b/src/sonic-host-services index ca6b3cdb9a56..39e31a95ba96 160000 --- a/src/sonic-host-services +++ b/src/sonic-host-services @@ -1 +1 @@ -Subproject commit ca6b3cdb9a56604765ada4ac67234c117f0fb5ad +Subproject commit 39e31a95ba96d601bae90c54556a27f84691c910 From aeb339797d03918533731be3a07508bdb045c2f3 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 15 Aug 2024 17:36:20 +0800 Subject: [PATCH 093/117] [submodule] Update submodule linkmgrd to the latest HEAD automatically (#19844) #### Why I did it src/linkmgrd ``` * 287dbd7 - (HEAD -> master, origin/master, origin/HEAD) [link prober] print out error code message when `sendHeartbeat` fails (#266) (34 hours ago) [Jing Zhang] * 22f55a7 - Fix state machine handler race conditions introduced by `strand::wrap` (#257) (9 days ago) [Longxiang Lyu] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/linkmgrd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/linkmgrd b/src/linkmgrd index 6fcab4740650..287dbd70298c 160000 --- a/src/linkmgrd +++ b/src/linkmgrd @@ -1 +1 @@ -Subproject commit 6fcab47406502cd41d60267b36dc362555487d7c +Subproject commit 287dbd70298c1743668182913644d2bbe3cdcd5b From 956fc1647feb422566676010448d3f27f7e0398a Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 15 Aug 2024 19:29:50 +0800 Subject: [PATCH 094/117] [submodule] Update submodule sonic-sairedis to the latest HEAD automatically (#19911) #### Why I did it src/sonic-sairedis ``` * 45ff42c3 - (HEAD -> master, origin/master, origin/HEAD) run VS tests in parallel (#1414) (3 hours ago) [Lawrence Lee] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-sairedis | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-sairedis b/src/sonic-sairedis index 8d0f5ebf0163..45ff42c3ca00 160000 --- a/src/sonic-sairedis +++ b/src/sonic-sairedis @@ -1 +1 @@ -Subproject commit 8d0f5ebf0163c4d5a68190e9af4ea9ceb7ba987a +Subproject commit 45ff42c3ca002b4426f6dad1fe8fc132be9dece7 From 11e704bd6ec14147aff5227b72856d2ec1b0f422 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 15 Aug 2024 19:29:55 +0800 Subject: [PATCH 095/117] [submodule] Update submodule sonic-swss-common to the latest HEAD automatically (#19907) #### Why I did it src/sonic-swss-common ``` * aba0f66 - (HEAD -> master, origin/master, origin/HEAD) Add new DASH APPL_DB table names (#897) (2 days ago) [Lawrence Lee] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-swss-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-swss-common b/src/sonic-swss-common index e37bfea64fb9..aba0f66dfe1c 160000 --- a/src/sonic-swss-common +++ b/src/sonic-swss-common @@ -1 +1 @@ -Subproject commit e37bfea64fb9e1f40f7c9b6ad759e92f5f15bec9 +Subproject commit aba0f66dfe1c77c6256cd6be6d2edeefa611efa4 From 74800220d37b5be96de72fe6ebfb2bdb36a4ac09 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 15 Aug 2024 19:30:34 +0800 Subject: [PATCH 096/117] [submodule] Update submodule sonic-snmpagent to the latest HEAD automatically (#19585) #### Why I did it src/sonic-snmpagent ``` * deb7b7c - (HEAD -> master, origin/master, origin/HEAD) Aggregate L3 errors with L2 discards for interfaces with RIF (#325) (3 days ago) [Stepan Blyshchak] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-snmpagent | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-snmpagent b/src/sonic-snmpagent index a281f9ab771a..deb7b7c43c2e 160000 --- a/src/sonic-snmpagent +++ b/src/sonic-snmpagent @@ -1 +1 @@ -Subproject commit a281f9ab771adaa438f01fd5394d7a73ed6bc1d6 +Subproject commit deb7b7c43c2e9fa26acbac9907443b5d6f7310d2 From 084ba1a00f2f9d0197536d20a5cdc6e392e469aa Mon Sep 17 00:00:00 2001 From: zitingguo-ms Date: Fri, 16 Aug 2024 08:54:04 +0800 Subject: [PATCH 097/117] Prioritize configuration from config_db over constants.yml during BBR status initialization (#19590) Why I did it There are two places which we can configure the BBR disabled/enabled, one is constants.yml, the other is by config_db. During run time, config_db win. But at the init stage, constants.yml win. This is a wrong logic, constants.yml only win when there is no such config in the config_db. Work item tracking Microsoft ADO (number only): 28302790 How I did it Initialize BBR status from constants.yml only when config_db doesn't have BBR entry. How to verify it Build image and run the following: # bbr status in constants.yml is set to disabled # change the bbr status in config_db to enabled and reload config admin@str2-7050cx3-acs-01:~$ redis-cli -n 4 hset "BGP_BBR|all" "status" "enabled" (integer) 0 admin@str2-7050cx3-acs-01:~$ redis-cli -n 4 hget "BGP_BBR|all" "status" "enabled" admin@str2-7050cx3-acs-01:~$ vtysh -c 'show run' | grep 'allowas' neighbor PEER_V4 allowas-in 1 neighbor PEER_V6 allowas-in 1 admin@str2-7050cx3-acs-01:~$ sudo config save -y Running command: /usr/local/bin/sonic-cfggen -d --print-data > /etc/sonic/config_db.json admin@str2-7050cx3-acs-01:~$ sudo config reload -y # check bgpcfgd log, bbr default status is enabled 2024 Aug 14 05:42:47.653216 str2-7050cx3-acs-01 INFO bgp#bgpcfgd: BBRMgr::Initialized and enabled from config_db. Default state: 'enabled' --- src/sonic-bgpcfgd/bgpcfgd/managers_bbr.py | 71 ++++++++++++++++++----- src/sonic-bgpcfgd/tests/test_bbr.py | 32 +++++++++- 2 files changed, 85 insertions(+), 18 deletions(-) diff --git a/src/sonic-bgpcfgd/bgpcfgd/managers_bbr.py b/src/sonic-bgpcfgd/bgpcfgd/managers_bbr.py index 0e82d0a4b6d5..6e1a33e8947d 100644 --- a/src/sonic-bgpcfgd/bgpcfgd/managers_bbr.py +++ b/src/sonic-bgpcfgd/bgpcfgd/managers_bbr.py @@ -45,26 +45,38 @@ def del_handler(self, key): def __init(self): """ Initialize BBRMgr. Extracted from constructor """ - if not 'bgp' in self.constants: - log_err("BBRMgr::Disabled: 'bgp' key is not found in constants") - return - if 'bbr' in self.constants['bgp'] \ - and 'enabled' in self.constants['bgp']['bbr'] \ - and self.constants['bgp']['bbr']['enabled']: + # Check BGP_BBR table from config_db first + bbr_status_from_config_db = self.get_bbr_status_from_config_db() + + if bbr_status_from_config_db is None: + if not 'bgp' in self.constants: + log_err("BBRMgr::Disabled: 'bgp' key is not found in constants") + return + if 'bbr' in self.constants['bgp'] \ + and 'enabled' in self.constants['bgp']['bbr'] \ + and self.constants['bgp']['bbr']['enabled']: + self.bbr_enabled_pgs = self.__read_pgs() + if self.bbr_enabled_pgs: + self.enabled = True + if 'default_state' in self.constants['bgp']['bbr'] \ + and self.constants['bgp']['bbr']['default_state'] == 'enabled': + default_status = "enabled" + else: + default_status = "disabled" + self.directory.put(self.db_name, self.table_name, 'status', default_status) + log_info("BBRMgr::Initialized and enabled from constants. Default state: '%s'" % default_status) + else: + log_info("BBRMgr::Disabled: no BBR enabled peers") + else: + log_info("BBRMgr::Disabled: no bgp.bbr.enabled in the constants") + else: self.bbr_enabled_pgs = self.__read_pgs() if self.bbr_enabled_pgs: self.enabled = True - if 'default_state' in self.constants['bgp']['bbr'] \ - and self.constants['bgp']['bbr']['default_state'] == 'enabled': - default_status = "enabled" - else: - default_status = "disabled" - self.directory.put(self.db_name, self.table_name, 'status', default_status) - log_info("BBRMgr::Initialized and enabled. Default state: '%s'" % default_status) + self.directory.put(self.db_name, self.table_name, 'status', bbr_status_from_config_db) + log_info("BBRMgr::Initialized and enabled from config_db. Default state: '%s'" % bbr_status_from_config_db) else: log_info("BBRMgr::Disabled: no BBR enabled peers") - else: - log_info("BBRMgr::Disabled: no bgp.bbr.enabled in the constants") def __read_pgs(self): """ @@ -82,6 +94,35 @@ def __read_pgs(self): res[pg_name] = pg_afs return res + def get_bbr_status_from_config_db(self): + """ + Read BBR status from CONFIG_DB + :return: BBR status from CONFIG_DB or None if not found + """ + try: + config_db = swsscommon.ConfigDBConnector() + if config_db is None: + log_info("BBRMgr::Failed to connect to CONFIG_DB, get BBR default state from constants.yml") + return None + config_db.connect() + except Exception as e: + log_info("BBRMgr::Failed to connect to CONFIG_DB with exception %s, get BBR default state from constants.yml" % str(e)) + return None + + try: + bbr_table_data = config_db.get_table(self.table_name) + if bbr_table_data and 'all' in bbr_table_data and 'status' in bbr_table_data["all"]: + if bbr_table_data["all"]["status"] == "enabled": + return "enabled" + else: + return "disabled" + else: + log_info("BBRMgr::BBR status is not found in CONFIG_DB, get BBR default state from constants.yml") + return None + except Exception as e: + log_info("BBRMgr::Failed to read BBR status from CONFIG_DB with exception %s, get BBR default state from constants.yml" % str(e)) + return None + def __set_validation(self, key, data): """ Validate set-command arguments :param key: key of 'set' command diff --git a/src/sonic-bgpcfgd/tests/test_bbr.py b/src/sonic-bgpcfgd/tests/test_bbr.py index b95b94493af4..554c4acfcd47 100644 --- a/src/sonic-bgpcfgd/tests/test_bbr.py +++ b/src/sonic-bgpcfgd/tests/test_bbr.py @@ -112,6 +112,7 @@ def __init_common(constants, 'tf': TemplateFabric(), 'constants': constants, } + m = BBRMgr(common_objs, "CONFIG_DB", "BGP_BBR") m._BBRMgr__init() assert m.bbr_enabled_pgs == expected_bbr_enabled_pgs @@ -157,7 +158,7 @@ def test___init_6(): "bbr": expected_bbr_entries, } } - __init_common(constants, "BBRMgr::Initialized and enabled. Default state: 'disabled'", None, expected_bbr_entries, "disabled") + __init_common(constants, "BBRMgr::Initialized and enabled from constants. Default state: 'disabled'", None, expected_bbr_entries, "disabled") def test___init_7(): expected_bbr_entries = { @@ -171,7 +172,7 @@ def test___init_7(): "bbr": expected_bbr_entries, } } - __init_common(constants, "BBRMgr::Initialized and enabled. Default state: 'disabled'", None, expected_bbr_entries, "disabled") + __init_common(constants, "BBRMgr::Initialized and enabled from constants. Default state: 'disabled'", None, expected_bbr_entries, "disabled") def test___init_8(): expected_bbr_entries = { @@ -185,7 +186,32 @@ def test___init_8(): "bbr": expected_bbr_entries, } } - __init_common(constants, "BBRMgr::Initialized and enabled. Default state: 'enabled'", None, expected_bbr_entries, "enabled") + __init_common(constants, "BBRMgr::Initialized and enabled from constants. Default state: 'enabled'", None, expected_bbr_entries, "enabled") + +@patch('bgpcfgd.managers_bbr.BBRMgr.get_bbr_status_from_config_db', return_value='disabled') +def test___init_with_config_db_overwirte_constants(mocked_get_bbr_status_from_config_db): + expected_bbr_entries = { + "PEER_V4": ["ipv4"], + "PEER_V6": ["ipv6"], + } + constants = deepcopy(global_constants) + constants["bgp"]["bbr"] = {"enabled": True, "default_state": "enabled"} + constants["bgp"]["peers"] = { + "general": { + "bbr": expected_bbr_entries, + } + } + + # BBR status from config_db should be prioritized over constants + __init_common(constants, "BBRMgr::Initialized and enabled from config_db. Default state: 'disabled'", None, expected_bbr_entries, "disabled") + +@patch('bgpcfgd.managers_bbr.BBRMgr.get_bbr_status_from_config_db', return_value='enabled') +def test___init_with_config_db_no_peers(mocked_get_bbr_status_from_config_db): + + constants = deepcopy(global_constants) + constants["bgp"]["bbr"] = {"enabled": True} + + __init_common(constants, "BBRMgr::Disabled: no BBR enabled peers", None, {}, "disabled") @patch('bgpcfgd.managers_bbr.log_info') def read_pgs_common(constants, expected_log_info, expected_bbr_enabled_pgs, mocked_log_info): From d0f0a61a72ca8f4d26efe29810a23944d3d396e9 Mon Sep 17 00:00:00 2001 From: Liu Shilong Date: Fri, 16 Aug 2024 15:27:46 +0800 Subject: [PATCH 098/117] [build] Add timeout on python target and dpkg helper target. (#19355) Why I did it Some UT cases are not strong. They maybe hangs in some environment. Provide a variable to config timeout on some commands which contains UT. Work item tracking Microsoft ADO (number only): 28624525 How I did it Add a timeout when running UT. How to verify it --- Makefile.work | 1 + rules/config | 3 +++ slave.mk | 12 ++++++------ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Makefile.work b/Makefile.work index 22dbac2ce755..6079906a1005 100644 --- a/Makefile.work +++ b/Makefile.work @@ -567,6 +567,7 @@ SONIC_BUILD_INSTRUCTION := $(MAKE) \ ONIE_IMAGE_PART_SIZE=$(ONIE_IMAGE_PART_SIZE) \ SONIC_OS_VERSION=$(SONIC_OS_VERSION) \ PIP_HTTP_TIMEOUT=$(PIP_HTTP_TIMEOUT) \ + BUILD_PROCESS_TIMEOUT=$(BUILD_PROCESS_TIMEOUT) \ LEGACY_SONIC_MGMT_DOCKER=$(LEGACY_SONIC_MGMT_DOCKER) \ SONIC_PTF_ENV_PY_VER=$(SONIC_PTF_ENV_PY_VER) \ $(SONIC_OVERRIDE_BUILD_VARS) diff --git a/rules/config b/rules/config index 6425005d646b..d2ddcb704fbe 100644 --- a/rules/config +++ b/rules/config @@ -320,3 +320,6 @@ BUILD_REDUCE_IMAGE_SIZE = n # SONIC_PTF_ENV_PY_VER - SONiC PTF test Python version. Set to 'mixed' to build the # image with both Python 2 and 3. Set to 'py3' to build a Python 3 only image SONIC_PTF_ENV_PY_VER = mixed + +# Add timeout on some process which may hangs +BUILD_PROCESS_TIMEOUT ?= 0 diff --git a/slave.mk b/slave.mk index 017a90242499..c90af02ccee4 100644 --- a/slave.mk +++ b/slave.mk @@ -789,8 +789,8 @@ $(addprefix $(DEBS_PATH)/, $(SONIC_DPKG_DEBS)) : $(DEBS_PATH)/% : .platform $$(a if [ -f ./autogen.sh ]; then ./autogen.sh $(LOG); fi $(SETUP_OVERLAYFS_FOR_DPKG_ADMINDIR) $(if $($*_DPKG_TARGET), - ${$*_BUILD_ENV} DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" DEB_BUILD_PROFILES="${$*_DEB_BUILD_PROFILES}" $(ANT_DEB_CONFIG) $(CROSS_COMPILE_FLAGS) dpkg-buildpackage -rfakeroot -b $(ANT_DEB_CROSS_OPT) -us -uc -tc -j$(SONIC_CONFIG_MAKE_JOBS) --as-root -T$($*_DPKG_TARGET) --admindir $$mergedir $(LOG), - ${$*_BUILD_ENV} DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" DEB_BUILD_PROFILES="${$*_DEB_BUILD_PROFILES}" $(ANT_DEB_CONFIG) $(CROSS_COMPILE_FLAGS) dpkg-buildpackage -rfakeroot -b $(ANT_DEB_CROSS_OPT) -us -uc -tc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $$mergedir $(LOG) + ${$*_BUILD_ENV} DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" DEB_BUILD_PROFILES="${$*_DEB_BUILD_PROFILES}" $(ANT_DEB_CONFIG) $(CROSS_COMPILE_FLAGS) timeout --preserve-status -s 9 -k 10 $(BUILD_PROCESS_TIMEOUT) dpkg-buildpackage -rfakeroot -b $(ANT_DEB_CROSS_OPT) -us -uc -tc -j$(SONIC_CONFIG_MAKE_JOBS) --as-root -T$($*_DPKG_TARGET) --admindir $$mergedir $(LOG), + ${$*_BUILD_ENV} DEB_BUILD_OPTIONS="${DEB_BUILD_OPTIONS_GENERIC} ${$*_DEB_BUILD_OPTIONS}" DEB_BUILD_PROFILES="${$*_DEB_BUILD_PROFILES}" $(ANT_DEB_CONFIG) $(CROSS_COMPILE_FLAGS) timeout --preserve-status -s 9 -k 10 $(BUILD_PROCESS_TIMEOUT) dpkg-buildpackage -rfakeroot -b $(ANT_DEB_CROSS_OPT) -us -uc -tc -j$(SONIC_CONFIG_MAKE_JOBS) --admindir $$mergedir $(LOG) ) popd $(LOG_SIMPLE) # Clean up @@ -940,19 +940,19 @@ $(addprefix $(PYTHON_WHEELS_PATH)/, $(SONIC_PYTHON_WHEELS)) : $(PYTHON_WHEELS_PA if [ -f ../$(notdir $($*_SRC_PATH)).patch/series ]; then ( quilt pop -a -f 1>/dev/null 2>&1 || true ) && QUILT_PATCHES=../$(notdir $($*_SRC_PATH)).patch quilt push -a; fi $(LOG) ifneq ($(CROSS_BUILD_ENVIRON),y) # Use pip instead of later setup.py to install dependencies into user home, but uninstall self - pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name` + { pip$($*_PYTHON_VERSION) install . && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name`; } $(LOG) ifeq ($(BLDENV),bookworm) - if [ ! "$($*_TEST)" = "n" ]; then pip$($*_PYTHON_VERSION) install ".[testing]" && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name` && python$($*_PYTHON_VERSION) -m pytest $(LOG); fi + if [ ! "$($*_TEST)" = "n" ]; then pip$($*_PYTHON_VERSION) install ".[testing]" && pip$($*_PYTHON_VERSION) uninstall --yes `python$($*_PYTHON_VERSION) setup.py --name` && timeout --preserve-status -s 9 -k 10 $(BUILD_PROCESS_TIMEOUT) python$($*_PYTHON_VERSION) -m pytest; fi $(LOG) python$($*_PYTHON_VERSION) -m build -n $(LOG) else - if [ ! "$($*_TEST)" = "n" ]; then python$($*_PYTHON_VERSION) setup.py test $(LOG); fi + if [ ! "$($*_TEST)" = "n" ]; then timeout --preserve-status -s 9 -k 10 $(BUILD_PROCESS_TIMEOUT) python$($*_PYTHON_VERSION) setup.py test $(LOG); fi python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) endif else { export PATH=$(VIRTENV_BIN_CROSS_PYTHON$($*_PYTHON_VERSION)):${PATH} python$($*_PYTHON_VERSION) setup.py build $(LOG) - if [ ! "$($*_TEST)" = "n" ]; then python$($*_PYTHON_VERSION) setup.py test $(LOG); fi + if [ ! "$($*_TEST)" = "n" ]; then timeout --preserve-status -s 9 -k 10 $(BUILD_PROCESS_TIMEOUT) python$($*_PYTHON_VERSION) setup.py test $(LOG); fi python$($*_PYTHON_VERSION) setup.py bdist_wheel $(LOG) } endif From 92f937858ac4610c9415adbef1c096da1f3999be Mon Sep 17 00:00:00 2001 From: Wenda Chu <32250288+w1nda@users.noreply.github.com> Date: Sat, 17 Aug 2024 01:25:51 +0800 Subject: [PATCH 099/117] [WOL] Implement wake on LAN command line tool (#19206) Why I did it Implement wake on LAN command line tool to send magic packets to target interface with extra parameters like mac address, password, count and interval. How I did it Setup rust compile environment, write code and test to implement the tool. Set raw socket capacity for wol binary when build image. How to verify it Unit test and manually test with packet capture. --- .../build_templates/sonic_debian_extension.j2 | 5 + rules/sonic-nettools.mk | 7 + slave.mk | 10 + sonic-slave-bookworm/Dockerfile.j2 | 14 + src/sonic-nettools/.gitignore | 3 + src/sonic-nettools/Cargo.lock | 442 +++++++++++ src/sonic-nettools/Cargo.toml | 5 + src/sonic-nettools/Makefile | 17 + src/sonic-nettools/debian/changelog | 5 + src/sonic-nettools/debian/compat | 1 + src/sonic-nettools/debian/control | 9 + src/sonic-nettools/debian/install | 1 + src/sonic-nettools/debian/rules | 3 + src/sonic-nettools/wol/Cargo.toml | 7 + src/sonic-nettools/wol/src/main.rs | 13 + src/sonic-nettools/wol/src/wol.rs | 687 ++++++++++++++++++ 16 files changed, 1229 insertions(+) create mode 100644 rules/sonic-nettools.mk create mode 100644 src/sonic-nettools/.gitignore create mode 100644 src/sonic-nettools/Cargo.lock create mode 100644 src/sonic-nettools/Cargo.toml create mode 100644 src/sonic-nettools/Makefile create mode 100644 src/sonic-nettools/debian/changelog create mode 100644 src/sonic-nettools/debian/compat create mode 100644 src/sonic-nettools/debian/control create mode 100644 src/sonic-nettools/debian/install create mode 100755 src/sonic-nettools/debian/rules create mode 100644 src/sonic-nettools/wol/Cargo.toml create mode 100644 src/sonic-nettools/wol/src/main.rs create mode 100644 src/sonic-nettools/wol/src/wol.rs diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 55511756e119..12c743d9308a 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -99,6 +99,11 @@ sudo mkdir -p $FILESYSTEM_ROOT_USR_SHARE_SONIC_FIRMWARE/ # Keeping it generic. It should not harm anyways. sudo mkdir -p $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_SYSTEM +# Install sonic-nettools +sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/sonic-nettools_*.deb || \ + sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f +sudo setcap 'cap_net_raw=+ep' $FILESYSTEM_ROOT/usr/bin/wol + # Install a patched version of ifupdown2 (and its dependencies via 'apt-get -y install -f') sudo dpkg --root=$FILESYSTEM_ROOT -i $debs_path/ifupdown2_*.deb || \ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install -f diff --git a/rules/sonic-nettools.mk b/rules/sonic-nettools.mk new file mode 100644 index 000000000000..44351ec6be2a --- /dev/null +++ b/rules/sonic-nettools.mk @@ -0,0 +1,7 @@ +SONIC_NETTOOLS_VERSION = 0.0.1-0 + +export SONIC_NETTOOLS_VERSION + +SONIC_NETTOOLS = sonic-nettools_$(SONIC_NETTOOLS_VERSION)_$(CONFIGURED_ARCH).deb +$(SONIC_NETTOOLS)_SRC_PATH = $(SRC_PATH)/sonic-nettools +SONIC_DPKG_DEBS += $(SONIC_NETTOOLS) diff --git a/slave.mk b/slave.mk index c90af02ccee4..15abbc7259d9 100644 --- a/slave.mk +++ b/slave.mk @@ -362,6 +362,15 @@ CROSS_COMPILE_FLAGS := CGO_ENABLED=1 GOOS=linux GOARCH=$(GOARCH) CROSS_COMPILE=$ endif +ifeq ($(CROSS_BUILD_ENVIRON),y) +ifeq ($(CONFIGURED_ARCH),armhf) +RUST_CROSS_COMPILE_TARGET = armv7-unknown-linux-gnueabihf +else ifeq ($(CONFIGURED_ARCH),arm64) +RUST_CROSS_COMPILE_TARGET = aarch64-unknown-linux-gnu +endif +export RUST_CROSS_COMPILE_TARGET +endif + ############################################################################### ## Routing stack related exports ############################################################################### @@ -1368,6 +1377,7 @@ $(addprefix $(TARGET_PATH)/, $(SONIC_INSTALLERS)) : $(TARGET_PATH)/% : \ $(PYTHON_SWSSCOMMON) \ $(PYTHON3_SWSSCOMMON) \ $(SONIC_DB_CLI) \ + $(SONIC_NETTOOLS) \ $(SONIC_RSYSLOG_PLUGIN) \ $(SONIC_UTILITIES_DATA) \ $(SONIC_HOST_SERVICES_DATA) \ diff --git a/sonic-slave-bookworm/Dockerfile.j2 b/sonic-slave-bookworm/Dockerfile.j2 index 50b8591e6462..92a15eaf9972 100644 --- a/sonic-slave-bookworm/Dockerfile.j2 +++ b/sonic-slave-bookworm/Dockerfile.j2 @@ -113,6 +113,7 @@ RUN apt-get update && apt-get install -y eatmydata && eatmydata apt-get install git-buildpackage \ perl-modules \ libclass-accessor-perl \ + libcap2-bin \ libswitch-perl \ libzmq5 \ libzmq3-dev \ @@ -656,6 +657,7 @@ RUN eatmydata apt-get install -y \ pps-tools:$arch \ libpam-cap:$arch \ libcap-dev:$arch \ + libcap2-bin:$arch \ libpam0g-dev:$arch \ libaudit-dev:$arch \ libgtk-3-dev:$arch \ @@ -737,3 +739,15 @@ RUN eatmydata apt install -y python-is-python3 ARG bazelisk_url=https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-{{ CONFIGURED_ARCH }} RUN curl -fsSL -o /usr/local/bin/bazel ${bazelisk_url} && chmod 755 /usr/local/bin/bazel {% endif -%} + +# Install Rust +ARG RUST_ROOT=/usr/.cargo +RUN RUSTUP_HOME=$RUST_ROOT CARGO_HOME=$RUST_ROOT bash -c 'curl --proto "=https" -sSf https://sh.rustup.rs | sh -s -- --default-toolchain 1.79.0 -y' +{% if CROSS_BUILD_ENVIRON == "y" and CONFIGURED_ARCH == "armhf" %} +RUN mkdir -p /.cargo && $RUST_ROOT/bin/rustup target add armv7-unknown-linux-gnueabihf && echo "[target.armv7-unknown-linux-gnueabihf]\nlinker = \"arm-linux-gnueabihf-gcc\"" >> /.cargo/config.toml +{% endif -%} +{% if CROSS_BUILD_ENVIRON == "y" and CONFIGURED_ARCH == "arm64" %} +RUN mkdir -p /.cargo && $RUST_ROOT/bin/rustup target add aarch64-unknown-linux-gnu && echo "[target.aarch64-unknown-linux-gnu]\nlinker = \"aarch64-linux-gnu-gcc\"" >> /.cargo/config.toml +{% endif -%} +ENV RUSTUP_HOME $RUST_ROOT +ENV PATH $PATH:$RUST_ROOT/bin \ No newline at end of file diff --git a/src/sonic-nettools/.gitignore b/src/sonic-nettools/.gitignore new file mode 100644 index 000000000000..046d25633d83 --- /dev/null +++ b/src/sonic-nettools/.gitignore @@ -0,0 +1,3 @@ +target/ +bin/ +.vscode/ \ No newline at end of file diff --git a/src/sonic-nettools/Cargo.lock b/src/sonic-nettools/Cargo.lock new file mode 100644 index 000000000000..695393102228 --- /dev/null +++ b/src/sonic-nettools/Cargo.lock @@ -0,0 +1,442 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "anstream" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" + +[[package]] +name = "anstyle-parse" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "clap" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84b3edb18336f4df585bc9aa31dd99c036dfa5dc5e9a2939a722a188f3a8970d" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1c09dd5ada6c6c78075d6fd0da3f90d8080651e2d6cc8eb2f1aaa4034ced708" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" + +[[package]] +name = "colorchoice" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "ipnetwork" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" +dependencies = [ + "serde", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "no-std-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" + +[[package]] +name = "pnet" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "682396b533413cc2e009fbb48aadf93619a149d3e57defba19ff50ce0201bd0d" +dependencies = [ + "ipnetwork", + "pnet_base", + "pnet_datalink", + "pnet_packet", + "pnet_sys", + "pnet_transport", +] + +[[package]] +name = "pnet_base" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" +dependencies = [ + "no-std-net", +] + +[[package]] +name = "pnet_datalink" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79e70ec0be163102a332e1d2d5586d362ad76b01cec86f830241f2b6452a7b7" +dependencies = [ + "ipnetwork", + "libc", + "pnet_base", + "pnet_sys", + "winapi", +] + +[[package]] +name = "pnet_macros" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn", +] + +[[package]] +name = "pnet_macros_support" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" +dependencies = [ + "pnet_base", +] + +[[package]] +name = "pnet_packet" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" +dependencies = [ + "glob", + "pnet_base", + "pnet_macros", + "pnet_macros_support", +] + +[[package]] +name = "pnet_sys" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d4643d3d4db6b08741050c2f3afa9a892c4244c085a72fcda93c9c2c9a00f4b" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "pnet_transport" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f604d98bc2a6591cf719b58d3203fd882bdd6bf1db696c4ac97978e9f4776bf" +dependencies = [ + "libc", + "pnet_base", + "pnet_packet", + "pnet_sys", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "serde" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.204" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201fcda3845c23e8212cd466bfebf0bd20694490fc0356ae8e428e0824a915a6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wol" +version = "0.0.1" +dependencies = [ + "clap", + "pnet", +] diff --git a/src/sonic-nettools/Cargo.toml b/src/sonic-nettools/Cargo.toml new file mode 100644 index 000000000000..37d4a6460a8e --- /dev/null +++ b/src/sonic-nettools/Cargo.toml @@ -0,0 +1,5 @@ +[workspace] + +members = [ + "wol", +] diff --git a/src/sonic-nettools/Makefile b/src/sonic-nettools/Makefile new file mode 100644 index 000000000000..021b1eb805c6 --- /dev/null +++ b/src/sonic-nettools/Makefile @@ -0,0 +1,17 @@ +include ../../rules/sonic-nettools.mk + +$(addprefix $(DEST)/, $(SONIC_NETTOOLS)): $(DEST)/% : + mkdir -p bin +ifeq ($(CROSS_BUILD_ENVIRON), y) + cargo test --target=$(RUST_CROSS_COMPILE_TARGET) + cargo build --release --target=$(RUST_CROSS_COMPILE_TARGET) + mv -f target/$(RUST_CROSS_COMPILE_TARGET)/release/wol bin/ +else + cargo test + cargo build --release + mv -f target/release/wol bin/ +endif + +clean: + rm -rf target + rm -rf bin \ No newline at end of file diff --git a/src/sonic-nettools/debian/changelog b/src/sonic-nettools/debian/changelog new file mode 100644 index 000000000000..6123545b50b2 --- /dev/null +++ b/src/sonic-nettools/debian/changelog @@ -0,0 +1,5 @@ +sonic-nettools (0.0.1-0) UNRELEASED; urgency=medium + + * Initial release. + + -- Wenda Chu Mon, 10 Jun 2024 12:49:43 -0700 diff --git a/src/sonic-nettools/debian/compat b/src/sonic-nettools/debian/compat new file mode 100644 index 000000000000..48082f72f087 --- /dev/null +++ b/src/sonic-nettools/debian/compat @@ -0,0 +1 @@ +12 diff --git a/src/sonic-nettools/debian/control b/src/sonic-nettools/debian/control new file mode 100644 index 000000000000..b77ec470ea1b --- /dev/null +++ b/src/sonic-nettools/debian/control @@ -0,0 +1,9 @@ +Source: sonic-nettools +Maintainer: Wenda Chu +Standards-Version: 0.0.1 +Section: custom + +Package: sonic-nettools +Priority: optional +Architecture: any +Description: Networking command line tools diff --git a/src/sonic-nettools/debian/install b/src/sonic-nettools/debian/install new file mode 100644 index 000000000000..902a829820b1 --- /dev/null +++ b/src/sonic-nettools/debian/install @@ -0,0 +1 @@ +bin/wol /usr/bin/ diff --git a/src/sonic-nettools/debian/rules b/src/sonic-nettools/debian/rules new file mode 100755 index 000000000000..cbe925d75871 --- /dev/null +++ b/src/sonic-nettools/debian/rules @@ -0,0 +1,3 @@ +#!/usr/bin/make -f +%: + dh $@ diff --git a/src/sonic-nettools/wol/Cargo.toml b/src/sonic-nettools/wol/Cargo.toml new file mode 100644 index 000000000000..6b2276e79724 --- /dev/null +++ b/src/sonic-nettools/wol/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "wol" +version = "0.0.1" + +[dependencies] +pnet = "0.35.0" +clap = { version = "4.5.7", features = ["derive"] } diff --git a/src/sonic-nettools/wol/src/main.rs b/src/sonic-nettools/wol/src/main.rs new file mode 100644 index 000000000000..c04ba9411bcd --- /dev/null +++ b/src/sonic-nettools/wol/src/main.rs @@ -0,0 +1,13 @@ +mod wol; + +extern crate clap; +extern crate pnet; + +fn main() { + if let Err(e) = wol::build_and_send() { + eprintln!("Error: {}", e.msg); + std::process::exit(e.code); + } else { + std::process::exit(0); + } +} diff --git a/src/sonic-nettools/wol/src/wol.rs b/src/sonic-nettools/wol/src/wol.rs new file mode 100644 index 000000000000..b5d598d369f3 --- /dev/null +++ b/src/sonic-nettools/wol/src/wol.rs @@ -0,0 +1,687 @@ +use clap::builder::ArgPredicate; +use clap::Parser; +use pnet::datalink::Channel::Ethernet; +use pnet::datalink::{self, DataLinkSender, MacAddr, NetworkInterface}; +use std::fs::read_to_string; +use std::result::Result; +use std::str::FromStr; +use std::thread; +use std::time::Duration; + +const BROADCAST_MAC: [u8; 6] = [0xff, 0xff, 0xff, 0xff, 0xff, 0xff]; + +#[derive(Parser, Debug)] +#[command( + next_line_help = true, + about = " +This tool can generate and send wake on LAN magic packets with target interface and mac + +Examples: + wol Ethernet10 00:11:22:33:44:55 + wol Ethernet10 00:11:22:33:44:55 -b + wol Vlan1000 00:11:22:33:44:55,11:33:55:77:99:bb -p 00:22:44:66:88:aa + wol Vlan1000 00:11:22:33:44:55,11:33:55:77:99:bb -p 192.168.1.1 -c 3 -i 2000" +)] +struct WolArgs { + /// The name of the network interface to send the magic packet through + interface: String, + + /// The MAC address of the target device, formatted as a colon-separated string (e.g. "00:11:22:33:44:55") + target_mac: String, + + /// The flag to indicate if use broadcast MAC address instead of target device's MAC address as Destination MAC Address in Ethernet Frame Header [default: false] + #[arg(short, long, default_value_t = false)] + broadcast: bool, + + /// An optional 4 or 6 byte password, in ethernet hex format or quad-dotted decimal (e.g. "127.0.0.1" or "00:11:22:33:44:55") + #[arg(short, long, value_parser = parse_password)] + password: Option, + + /// For each target MAC address, the count of magic packets to send. count must between 1 and 5. This param must use with -i. [default: 1] + #[arg( + short, + long, + default_value_t = 1, + requires_if(ArgPredicate::IsPresent, "interval") + )] + count: u8, + + /// Wait interval milliseconds between sending each magic packet. interval must between 0 and 2000. This param must use with -c. [default: 0] + #[arg( + short, + long, + default_value_t = 0, + requires_if(ArgPredicate::IsPresent, "count") + )] + interval: u64, + + /// The flag to indicate if we should print verbose output + #[arg(short, long)] + verbose: bool, +} + +#[derive(Debug, Clone)] +struct Password(Vec); + +impl Password { + fn ref_bytes(&self) -> &Vec { + &self.0 + } +} + +#[derive(Debug)] +pub struct WolErr { + pub msg: String, + pub code: i32, +} + +impl std::error::Error for WolErr {} + +impl std::fmt::Display for WolErr { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "Error: {}", self.msg) + } +} + +enum WolErrCode { + SocketError = 1, + InvalidArguments = 2, + UnknownError = 999, +} + +pub fn build_and_send() -> Result<(), WolErr> { + let args = WolArgs::parse(); + let target_macs = parse_target_macs(&args)?; + valide_arguments(&args)?; + let src_mac = get_interface_mac(&args.interface)?; + let mut tx = open_tx_channel(&args.interface)?; + for target_mac in target_macs { + if args.verbose { + println!( + "Building and sending packet to target mac address {}", + target_mac + .iter() + .map(|b| format!("{:02X}", b)) + .collect::>() + .join(":") + ); + } + let dst_mac = if args.broadcast { + BROADCAST_MAC + } else { + target_mac + }; + let magic_bytes = build_magic_packet(&src_mac, &dst_mac, &target_mac, &args.password)?; + send_magic_packet( + &mut tx, + magic_bytes, + &args.count, + &args.interval, + &args.verbose, + )?; + } + + Ok(()) +} + +fn valide_arguments(args: &WolArgs) -> Result<(), WolErr> { + if !is_operstate_up(&args.interface)? { + return Err(WolErr { + msg: format!( + "Invalid value for \"INTERFACE\": interface {} is not up", + args.interface + ), + code: WolErrCode::InvalidArguments as i32, + }); + } + + if args.interval > 2000 { + return Err(WolErr { + msg: String::from("Invalid value for \"INTERVAL\": interval must between 0 and 2000"), + code: WolErrCode::InvalidArguments as i32, + }); + } + + if args.count == 0 || args.count > 5 { + return Err(WolErr { + msg: String::from("Invalid value for \"COUNT\": count must between 1 and 5"), + code: WolErrCode::InvalidArguments as i32, + }); + } + + Ok(()) +} + +fn parse_mac_addr(mac_str: &str) -> Result<[u8; 6], WolErr> { + MacAddr::from_str(mac_str) + .map(|mac| mac.octets()) + .map_err(|_| WolErr { + msg: String::from("Invalid MAC address"), + code: WolErrCode::InvalidArguments as i32, + }) +} + +fn parse_ipv4_addr(ipv4_str: &str) -> Result, WolErr> { + if !is_ipv4_address_valid(ipv4_str) { + Err(WolErr { + msg: String::from("Invalid IPv4 address"), + code: WolErrCode::InvalidArguments as i32, + }) + } else { + ipv4_str + .split('.') + .map(|octet| octet.parse::()) + .collect::, _>>() + .map_err(|_| WolErr { + msg: String::from("Invalid IPv4 address"), + code: WolErrCode::InvalidArguments as i32, + }) + } +} + +fn parse_password(password: &str) -> Result { + if is_ipv4_address_valid(password) { + Ok(Password(parse_ipv4_addr(password)?)) + } else if is_mac_string_valid(password) { + parse_mac_addr(password).map(|mac| Password(mac.to_vec())) + } else { + Err(WolErr { + msg: String::from("Invalid password"), + code: WolErrCode::InvalidArguments as i32, + }) + } +} + +fn parse_target_macs(args: &WolArgs) -> Result, WolErr> { + let target_macs: Vec<&str> = args.target_mac.split(',').collect(); + let mut macs = Vec::new(); + for mac_str in target_macs { + macs.push(parse_mac_addr(mac_str)?); + } + Ok(macs) +} + +fn is_operstate_up(interface: &str) -> Result { + let state_file_path = format!("/sys/class/net/{}/operstate", interface); + match read_to_string(state_file_path) { + Ok(content) => Ok(content.trim() == "up"), + Err(_) => Err(WolErr { + msg: format!( + "Invalid value for \"INTERFACE\": invalid SONiC interface name {}", + interface + ), + code: WolErrCode::InvalidArguments as i32, + }), + } +} + +fn is_mac_string_valid(mac_str: &str) -> bool { + let mac_str = mac_str.replace(':', ""); + mac_str.len() == 12 && mac_str.chars().all(|c| c.is_ascii_hexdigit()) +} + +fn is_ipv4_address_valid(ipv4_str: &str) -> bool { + ipv4_str.split('.').count() == 4 + && ipv4_str + .split('.') + .all(|octet| octet.parse::().map_or(false, |n| n < 256)) +} + +fn get_interface_mac(interface_name: &String) -> Result<[u8; 6], WolErr> { + if let Some(interface) = datalink::interfaces() + .into_iter() + .find(|iface: &NetworkInterface| iface.name == *interface_name) + { + if let Some(mac) = interface.mac { + Ok(mac.octets()) + } else { + Err(WolErr { + msg: String::from("Could not get MAC address of target interface"), + code: WolErrCode::UnknownError as i32, + }) + } + } else { + Err(WolErr { + msg: String::from("Could not find target interface"), + code: WolErrCode::InvalidArguments as i32, + }) + } +} + +fn build_magic_packet( + src_mac: &[u8; 6], + dst_mac: &[u8; 6], + target_mac: &[u8; 6], + password: &Option, +) -> Result, WolErr> { + let password_len = password.as_ref().map_or(0, |p| p.ref_bytes().len()); + let mut pkt = vec![0u8; 116 + password_len]; + pkt[0..6].copy_from_slice(dst_mac); + pkt[6..12].copy_from_slice(src_mac); + pkt[12..14].copy_from_slice(&[0x08, 0x42]); + pkt[14..20].copy_from_slice(&[0xff; 6]); + pkt[20..116].copy_from_slice(&target_mac.repeat(16)); + if let Some(p) = password { + pkt[116..116 + password_len].copy_from_slice(p.ref_bytes()); + } + Ok(pkt) +} + +fn send_magic_packet( + tx: &mut Box, + packet: Vec, + count: &u8, + interval: &u64, + verbose: &bool, +) -> Result<(), WolErr> { + for nth in 0..*count { + match tx.send_to(&packet, None) { + Some(Ok(_)) => {} + Some(Err(e)) => { + return Err(WolErr { + msg: format!("Network is down: {}", e), + code: WolErrCode::SocketError as i32, + }); + } + None => { + return Err(WolErr { + msg: String::from("Network is down"), + code: WolErrCode::SocketError as i32, + }); + } + } + if *verbose { + println!( + " | -> Sent the {}th packet and sleep for {} seconds", + &nth + 1, + &interval + ); + println!( + " | -> Packet bytes in hex {}", + &packet + .iter() + .fold(String::new(), |acc, b| acc + &format!("{:02X}", b)) + ) + } + thread::sleep(Duration::from_millis(*interval)); + } + Ok(()) +} + +fn open_tx_channel(interface: &str) -> Result, WolErr> { + if let Some(interface) = datalink::interfaces() + .into_iter() + .find(|iface: &NetworkInterface| iface.name == interface) + { + match datalink::channel(&interface, Default::default()) { + Ok(Ethernet(tx, _)) => Ok(tx), + Ok(_) => Err(WolErr { + msg: String::from("Network is down"), + code: WolErrCode::SocketError as i32, + }), + Err(e) => Err(WolErr { + msg: format!("Network is down: {}", e), + code: WolErrCode::SocketError as i32, + }), + } + } else { + Err(WolErr { + msg: format!( + "Invalid value for \"INTERFACE\": interface {} is not up", + interface + ), + code: WolErrCode::InvalidArguments as i32, + }) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_parse_mac_addr() { + let mac_str = "00:11:22:33:44:55"; + let mac = parse_mac_addr(mac_str).unwrap(); + assert_eq!(mac, [0x00, 0x11, 0x22, 0x33, 0x44, 0x55]); + + let mac_str = "00:11:22:33:44:GG"; + assert!(parse_mac_addr(mac_str).is_err()); + assert_eq!( + parse_mac_addr(mac_str).unwrap_err().msg, + "Invalid MAC address" + ); + assert_eq!( + parse_mac_addr(mac_str).unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + + let mac_str = "00-01-22-33-44-55"; + assert!(parse_mac_addr(mac_str).is_err()); + assert_eq!( + parse_mac_addr(mac_str).unwrap_err().msg, + "Invalid MAC address" + ); + assert_eq!( + parse_mac_addr(mac_str).unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + } + + #[test] + fn test_parse_ipv4_addr() { + let ipv4_str = "127.0.0.1"; + let ipv4 = parse_ipv4_addr(ipv4_str).unwrap(); + assert_eq!(ipv4, [127, 0, 0, 1]); + + let ipv4_str = "127.0.0.256"; + assert!(parse_ipv4_addr(ipv4_str).is_err()); + assert_eq!( + parse_ipv4_addr(ipv4_str).unwrap_err().msg, + "Invalid IPv4 address" + ); + assert_eq!( + parse_ipv4_addr(ipv4_str).unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + + let ipv4_str = "127.0.0"; + assert!(parse_ipv4_addr(ipv4_str).is_err()); + assert_eq!( + parse_ipv4_addr(ipv4_str).unwrap_err().msg, + "Invalid IPv4 address" + ); + assert_eq!( + parse_ipv4_addr(ipv4_str).unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + + let ipv4_str = "::1"; + assert!(parse_ipv4_addr(ipv4_str).is_err()); + assert_eq!( + parse_ipv4_addr(ipv4_str).unwrap_err().msg, + "Invalid IPv4 address" + ); + assert_eq!( + parse_ipv4_addr(ipv4_str).unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + } + + #[test] + fn test_parse_password() { + let password_str = "127.0.0.1"; + let password = parse_password(password_str); + assert_eq!(*password.unwrap().ref_bytes(), [127, 0, 0, 1]); + + let password_str = "00:11:22:33:44:55"; + let password = parse_password(password_str); + assert_eq!(*password.unwrap().ref_bytes(), [0, 17, 34, 51, 68, 85]); + + let password_str = "127.0.0.256"; + assert!(parse_password(password_str).is_err()); + assert_eq!( + parse_password(password_str).unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + + let password_str = "127.0.0"; + assert!(parse_password(password_str).is_err()); + assert_eq!( + parse_password(password_str).unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + + let password_str = "::1"; + assert!(parse_password(password_str).is_err()); + assert_eq!( + parse_password(password_str).unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + + let password_str = "00:11:22:33:44:GG"; + assert!(parse_password(password_str).is_err()); + assert_eq!( + parse_password(password_str).unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + + let password_str = "00-01-22-33-44-55"; + assert!(parse_password(password_str).is_err()); + assert_eq!( + parse_password(password_str).unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + } + + #[test] + fn test_parse_target_macs() { + let mut args = WolArgs { + interface: "Ethernet10".to_string(), + target_mac: "00:11:22:33:44:55".to_string(), + broadcast: false, + password: None, + count: 1, + interval: 0, + verbose: false, + }; + let target_macs = parse_target_macs(&args).unwrap(); + assert_eq!(target_macs.len(), 1); + assert_eq!(target_macs[0], [0x00, 0x11, 0x22, 0x33, 0x44, 0x55]); + + args.target_mac = "00:11:22:33:44:55,11:22:33:44:55:66,22:33:44:55:66:77".to_string(); + let target_macs = parse_target_macs(&args).unwrap(); + assert_eq!(target_macs.len(), 3); + assert_eq!(target_macs[0], [0x00, 0x11, 0x22, 0x33, 0x44, 0x55]); + assert_eq!(target_macs[1], [0x11, 0x22, 0x33, 0x44, 0x55, 0x66]); + assert_eq!(target_macs[2], [0x22, 0x33, 0x44, 0x55, 0x66, 0x77]); + + args.target_mac = "00:01".to_string(); + assert!(parse_target_macs(&args).is_err()); + assert_eq!( + parse_target_macs(&args).unwrap_err().msg, + "Invalid MAC address" + ); + assert_eq!( + parse_target_macs(&args).unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + } + + #[test] + fn test_is_mac_string_valid() { + assert!(is_mac_string_valid("00:11:22:33:44:55")); + assert!(!is_mac_string_valid("")); + assert!(!is_mac_string_valid("0:1:2:3:4:G")); + assert!(!is_mac_string_valid("00:11:22:33:44:GG")); + assert!(!is_mac_string_valid("00-11-22-33-44-55")); + assert!(!is_mac_string_valid("00:11:22:33:44:55:66")); + } + + #[test] + fn test_is_ipv4_address_valid() { + assert!(is_ipv4_address_valid("192.168.1.1")); + assert!(!is_ipv4_address_valid("")); + assert!(!is_ipv4_address_valid("0::1")); + assert!(!is_ipv4_address_valid("192.168.1")); + assert!(!is_ipv4_address_valid("192.168.1.256")); + assert!(!is_ipv4_address_valid("192.168.1.1.1")); + } + + #[test] + fn test_build_magic_packet() { + let src_mac = [0x00, 0x11, 0x22, 0x33, 0x44, 0x55]; + let target_mac = [0xff, 0xff, 0xff, 0xff, 0xff, 0xff]; + let four_bytes_password = Some(Password(vec![0x00, 0x11, 0x22, 0x33])); + let magic_packet = + build_magic_packet(&src_mac, &target_mac, &target_mac, &four_bytes_password).unwrap(); + assert_eq!(magic_packet.len(), 120); + assert_eq!(&magic_packet[0..6], &target_mac); + assert_eq!(&magic_packet[6..12], &src_mac); + assert_eq!(&magic_packet[12..14], &[0x08, 0x42]); + assert_eq!(&magic_packet[14..20], &[0xff; 6]); + assert_eq!(&magic_packet[20..116], target_mac.repeat(16)); + assert_eq!(&magic_packet[116..120], &[0x00, 0x11, 0x22, 0x33]); + let six_bytes_password = Some(Password(vec![0x00, 0x11, 0x22, 0x33, 0x44, 0x55])); + let magic_packet = + build_magic_packet(&src_mac, &target_mac, &target_mac, &six_bytes_password).unwrap(); + assert_eq!(magic_packet.len(), 122); + assert_eq!(&magic_packet[0..6], &target_mac); + assert_eq!(&magic_packet[6..12], &src_mac); + assert_eq!(&magic_packet[12..14], &[0x08, 0x42]); + assert_eq!(&magic_packet[14..20], &[0xff; 6]); + assert_eq!(&magic_packet[20..116], target_mac.repeat(16)); + assert_eq!( + &magic_packet[116..122], + &[0x00, 0x11, 0x22, 0x33, 0x44, 0x55] + ); + } + + #[test] + fn test_build_magic_packet_without_password() { + let src_mac = [0x00, 0x11, 0x22, 0x33, 0x44, 0x55]; + let dst_mac = [0xff, 0xff, 0xff, 0xff, 0xff, 0xff]; + let target_mac = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06]; + let magic_packet = build_magic_packet(&src_mac, &dst_mac, &target_mac, &None).unwrap(); + assert_eq!(magic_packet.len(), 116); + assert_eq!(&magic_packet[0..6], &dst_mac); + assert_eq!(&magic_packet[6..12], &src_mac); + assert_eq!(&magic_packet[12..14], &[0x08, 0x42]); + assert_eq!(&magic_packet[14..20], &[0xff; 6]); + assert_eq!(&magic_packet[20..116], target_mac.repeat(16)); + } + + #[test] + fn verify_args_parse() { + // Interface and target mac are required + let result = WolArgs::try_parse_from(&["wol", "eth0", "00:11:22:33:44:55"]); + assert!(result.as_ref().is_ok_and(|a| a.interface == "eth0")); + assert!(result.is_ok_and(|a| a.target_mac == "00:11:22:33:44:55")); + let result = WolArgs::try_parse_from(&["wol"]); + assert!(result.is_err()); + assert_eq!( + result.unwrap_err().to_string(), + "error: the following required arguments were not provided:\n \n \n\nUsage: wol \n\nFor more information, try '--help'.\n" + ); + // Mac address should valid + let args = + WolArgs::try_parse_from(&["wol", "Ethernet10", "00:11:22:33:44:55,00:01:02:03:04:05"]) + .unwrap(); + let macs = parse_target_macs(&args).unwrap(); + assert_eq!(macs.len(), 2); + assert_eq!(macs[0], [0x00, 0x11, 0x22, 0x33, 0x44, 0x55]); + assert_eq!(macs[1], [0x00, 0x01, 0x02, 0x03, 0x04, 0x05]); + let args = WolArgs::try_parse_from(&["wol", "Ethernet10", "00:11:22:33:44:GG"]).unwrap(); + let result: Result, WolErr> = parse_target_macs(&args); + assert!(result.is_err()); + assert_eq!(result.as_ref().unwrap_err().msg, "Invalid MAC address"); + assert_eq!( + result.unwrap_err().code, + WolErrCode::InvalidArguments as i32 + ); + // Password can be set + let args = WolArgs::try_parse_from(&[ + "wol", + "eth0", + "00:01:02:03:04:05", + "-b", + "-p", + "192.168.0.0", + ]) + .unwrap(); + assert_eq!(args.password.unwrap().ref_bytes(), &[192, 168, 0, 0]); + let args = WolArgs::try_parse_from(&[ + "wol", + "eth0", + "00:01:02:03:04:05", + "-b", + "-p", + "00:01:02:03:04:05", + ]) + .unwrap(); + assert_eq!(args.password.unwrap().ref_bytes(), &[0, 1, 2, 3, 4, 5]); + let result = WolArgs::try_parse_from(&["wol", "eth0", "-b", "-p", "xxx"]); + assert!(result.is_err()); + assert_eq!(result.unwrap_err().to_string(), "error: invalid value 'xxx' for '--password ': Error: Invalid password\n\nFor more information, try '--help'.\n"); + // Count should be between 1 and 5 + let args = WolArgs::try_parse_from(&["wol", "eth0", "00:01:02:03:04:05", "-b"]).unwrap(); + assert_eq!(args.count, 1); // default value + let args = WolArgs::try_parse_from(&[ + "wol", + "eth0", + "00:01:02:03:04:05", + "-b", + "-c", + "5", + "-i", + "0", + ]) + .unwrap(); + assert_eq!(args.count, 5); + let args = WolArgs::try_parse_from(&[ + "wol", + "eth0", + "00:01:02:03:04:05", + "-b", + "-c", + "0", + "-i", + "0", + ]); + let result = valide_arguments(&args.unwrap()); + assert!(result.is_err()); + assert_eq!( + result.unwrap_err().to_string(), + "Error: Invalid value for \"COUNT\": count must between 1 and 5" + ); + // Interval should be between 0 and 2000 + let args = WolArgs::try_parse_from(&["wol", "eth0", "00:01:02:03:04:05", "-b"]).unwrap(); + assert_eq!(args.interval, 0); // default value + let args = WolArgs::try_parse_from(&[ + "wol", + "eth0", + "00:01:02:03:04:05", + "-b", + "-i", + "2000", + "-c", + "0", + ]) + .unwrap(); + assert_eq!(args.interval, 2000); + let args = WolArgs::try_parse_from(&[ + "wol", + "eth0", + "00:01:02:03:04:05", + "-b", + "-i", + "2001", + "-c", + "0", + ]); + let result = valide_arguments(&args.unwrap()); + assert!(result.is_err()); + assert_eq!( + result.unwrap_err().to_string(), + "Error: Invalid value for \"INTERVAL\": interval must between 0 and 2000" + ); + // Interval and count should specified together + let result = WolArgs::try_parse_from(&["wol", "eth0", "00:01:02:03:04:05", "-i", "2000"]); + assert!(result.is_err()); + assert_eq!( + result.unwrap_err().to_string(), + "error: the following required arguments were not provided:\n --count \n\nUsage: wol --interval --count \n\nFor more information, try '--help'.\n" + ); + let result = WolArgs::try_parse_from(&["wol", "eth0", "00:01:02:03:04:05", "-c", "1"]); + assert!(result.is_err()); + assert_eq!( + result.unwrap_err().to_string(), + "error: the following required arguments were not provided:\n --interval \n\nUsage: wol --count --interval \n\nFor more information, try '--help'.\n" + ); + // Verbose can be set + let args = + WolArgs::try_parse_from(&["wol", "eth0", "00:01:02:03:04:05", "-b", "--verbose"]) + .unwrap(); + assert_eq!(args.verbose, true); + } +} From 7919c4f0a45b821050e0c220d4ffecc1a37e90d4 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sat, 17 Aug 2024 16:01:17 +0800 Subject: [PATCH 100/117] [submodule] Update submodule sonic-platform-daemons to the latest HEAD automatically (#19922) #### Why I did it src/sonic-platform-daemons ``` * b3189e3 - (HEAD -> master, origin/master, origin/HEAD) [chassis][pmon][chassid] Enhance the chassid module on-line or off-line log messages with physical slot number (#530) (30 hours ago) [Marty Y. Lok] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-platform-daemons | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-platform-daemons b/src/sonic-platform-daemons index bf865c6b7118..b3189e32dcc0 160000 --- a/src/sonic-platform-daemons +++ b/src/sonic-platform-daemons @@ -1 +1 @@ -Subproject commit bf865c6b711833347d3c57e9d84cd366bcd1b776 +Subproject commit b3189e32dcc070c09bf575ed7366b6930c50d9ef From 7e063f791cc846ad0529dd8ba196082a5740897a Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Sun, 18 Aug 2024 19:42:05 +0800 Subject: [PATCH 101/117] [submodule] Update submodule sonic-gnmi to the latest HEAD automatically (#19896) #### Why I did it src/sonic-gnmi ``` * 64ed32b - (HEAD -> master, origin/master, origin/HEAD) Merge pull request #274 from isabelmsft/file_stat_gnoi (5 days ago) [isabelmsft] * 46df786 - fix spacing (8 days ago) [isabelmsft] * 894ffe6 - fix spacing (8 days ago) [isabelmsft] * 6fe7d32 - fix formatting (8 days ago) [isabelmsft] * 6b435c9 - uncomment check (2 weeks ago) [isabelmsft] * 302ca17 - increase coverage (2 weeks ago) [isabelmsft] * 0b2cb90 - fix local test (2 weeks ago) [isabelmsft] * 7c392c8 - fix syntax (2 weeks ago) [isabelmsft] * e06641d - inc cov atmpt (2 weeks ago) [isabelmsft] * 328e631 - Merge branch 'file_stat_gnoi' of https://github.com/isabelmsft/sonic-gnmi into file_stat_gnoi (3 weeks ago) [isabelmsft] |\ | failure_prs.log 8944bb1 - Merge branch 'master' into file_stat_gnoi (3 weeks ago) [isabelmsft] * | 14bf34a - update test (3 weeks ago) [isabelmsft] |/ * ad0e226 - add UT, clean error (3 weeks ago) [isabelmsft] * 34a94d6 - update (3 weeks ago) [isabelmsft] * d860f28 - update file system (3 weeks ago) [isabelmsft] * 36ec608 - update (3 weeks ago) [isabelmsft] * 3430dd2 - update (3 weeks ago) [isabelmsft] * 0b70222 - update (3 weeks ago) [isabelmsft] * 5236768 - update (3 weeks ago) [isabelmsft] * 0fe0971 - feature change (3 weeks ago) [isabelmsft] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-gnmi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-gnmi b/src/sonic-gnmi index 015de9423ae8..64ed32b715e1 160000 --- a/src/sonic-gnmi +++ b/src/sonic-gnmi @@ -1 +1 @@ -Subproject commit 015de9423ae81a0d4c6db9fa4b69f89c631d8862 +Subproject commit 64ed32b715e1673c3376701ee192d6292f5ec0ec From fdc6fb608cb667267f232587543ee7f55f52b3ea Mon Sep 17 00:00:00 2001 From: jingwenxie Date: Mon, 19 Aug 2024 10:34:33 +0000 Subject: [PATCH 102/117] Revert "check internface status before start bgp (#19189)" (#19939) This reverts commit 08f8cb6b9c60b8c6c628ff2973e2a9a5ef5032cc. --- dockers/docker-fpm-frr/Dockerfile.j2 | 1 - .../docker-fpm-frr/bgpd_wait_for_intf.sh.j2 | 70 ------------------- dockers/docker-fpm-frr/docker_init.sh | 3 - .../frr/supervisord/supervisord.conf.j2 | 14 +--- 4 files changed, 1 insertion(+), 87 deletions(-) delete mode 100755 dockers/docker-fpm-frr/bgpd_wait_for_intf.sh.j2 diff --git a/dockers/docker-fpm-frr/Dockerfile.j2 b/dockers/docker-fpm-frr/Dockerfile.j2 index 7ac3e88397e9..98c4593811f7 100644 --- a/dockers/docker-fpm-frr/Dockerfile.j2 +++ b/dockers/docker-fpm-frr/Dockerfile.j2 @@ -54,7 +54,6 @@ COPY ["TSC", "/usr/bin/TSC"] COPY ["TS", "/usr/bin/TS"] COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] COPY ["zsocket.sh", "/usr/bin/"] -COPY ["bgpd_wait_for_intf.sh.j2", "/usr/share/sonic/templates/"] RUN chmod a+x /usr/bin/TSA && \ chmod a+x /usr/bin/TSB && \ chmod a+x /usr/bin/TSC && \ diff --git a/dockers/docker-fpm-frr/bgpd_wait_for_intf.sh.j2 b/dockers/docker-fpm-frr/bgpd_wait_for_intf.sh.j2 deleted file mode 100755 index ef014d10328a..000000000000 --- a/dockers/docker-fpm-frr/bgpd_wait_for_intf.sh.j2 +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env bash - -# Define global timeout in seconds -GLOBAL_TIMEOUT=60 -GLOBAL_TIMEOUT_REACHED="false" - -function wait_iface_ready -{ - IFACE_NAME=$1 - IFACE_CIDR=$2 - START_TIME=$3 - - # First phase: wait for all interfaces until the global timeout is reached - while [ "$GLOBAL_TIMEOUT_REACHED" == "false" ]; do - CURRENT_TIME=$(date +%s.%N) - ELAPSED_TIME=$(awk -v current_time=$CURRENT_TIME -v start_time=$START_TIME 'BEGIN {print current_time - start_time}') - - # Check if global timeout is reached - if (( $(awk -v elapsed_time=$ELAPSED_TIME -v global_timeout=$GLOBAL_TIMEOUT 'BEGIN {print (elapsed_time >= global_timeout)}') )); then - GLOBAL_TIMEOUT_REACHED="true" - break - fi - - RESULT=$(sonic-db-cli STATE_DB HGET "INTERFACE_TABLE|${IFACE_NAME}|${IFACE_CIDR}" "state" 2> /dev/null) - if [ x"$RESULT" == x"ok" ]; then - return 0 - fi - sleep 0.5 - done - - # Second phase: apply per-interface timeout - # Counter to track the number of iterations - ITERATION=0 - while [ $ITERATION -lt 3 ]; do - RESULT=$(sonic-db-cli STATE_DB HGET "INTERFACE_TABLE|${IFACE_NAME}|${IFACE_CIDR}" "state" 2> /dev/null) - if [ x"$RESULT" == x"ok" ]; then - return 0 - fi - - sleep 0.5 - ((ITERATION++)) - done - - logger -p warning "[bgpd] warning: Interface ${IFACE_NAME} not ready." - return 1 -} - -start=$(date +%s.%N) - -{% for (name, prefix) in INTERFACE|pfx_filter %} -{% if prefix | ipv4 %} -wait_iface_ready {{ name }} {{ prefix }} $start -{% endif %} -{% endfor %} - -{% for (name, prefix) in VLAN_INTERFACE|pfx_filter %} -{% if prefix | ipv4 %} -wait_iface_ready {{ name }} {{ prefix }} $start -{% endif %} -{% endfor %} - -{% for (name, prefix) in PORTCHANNEL_INTERFACE|pfx_filter %} -{% if prefix | ipv4 %} -wait_iface_ready {{ name }} {{ prefix }} $start -{% endif %} -{% endfor %} - -end=$(date +%s.%N) -timespan=$(awk -v start=$start -v end=$end 'BEGIN {print end - start}') -logger -p info "[bgpd] It took ${timespan} seconds for interfaces to become ready" diff --git a/dockers/docker-fpm-frr/docker_init.sh b/dockers/docker-fpm-frr/docker_init.sh index f60c5327ac2b..0ed274ec703f 100755 --- a/dockers/docker-fpm-frr/docker_init.sh +++ b/dockers/docker-fpm-frr/docker_init.sh @@ -11,7 +11,6 @@ CFGGEN_PARAMS=" \ -t /usr/share/sonic/templates/supervisord/critical_processes.j2,/etc/supervisor/critical_processes \ -t /usr/share/sonic/templates/isolate.j2,/usr/sbin/bgp-isolate \ -t /usr/share/sonic/templates/unisolate.j2,/usr/sbin/bgp-unisolate \ - -t /usr/share/sonic/templates/bgpd_wait_for_intf.sh.j2,/usr/bin/bgpd_wait_for_intf.sh \ " FRR_VARS=$(sonic-cfggen $CFGGEN_PARAMS) @@ -112,6 +111,4 @@ TZ=$(cat /etc/timezone) rm -rf /etc/localtime ln -sf /usr/share/zoneinfo/$TZ /etc/localtime -chmod +x /usr/bin/bgpd_wait_for_intf.sh - exec /usr/local/bin/supervisord diff --git a/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 b/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 index 0e12fb62b4ba..4ee96cf845c3 100644 --- a/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 +++ b/dockers/docker-fpm-frr/frr/supervisord/supervisord.conf.j2 @@ -76,18 +76,6 @@ dependent_startup=true dependent_startup_wait_for=zebra:running {% endif %} -[program:bgpd_wait_for_intf] -command=/usr/bin/bgpd_wait_for_intf.sh -priority=5 -stopsignal=KILL -autostart=false -autorestart=false -startsecs=0 -stdout_logfile=syslog -stderr_logfile=syslog -dependent_startup=true -dependent_startup_wait_for=zsocket:exited - [program:bgpd] command=/usr/lib/frr/bgpd -A 127.0.0.1 -M snmp priority=5 @@ -98,7 +86,7 @@ startsecs=0 stdout_logfile=syslog stderr_logfile=syslog dependent_startup=true -dependent_startup_wait_for=bgpd_wait_for_intf:exited +dependent_startup_wait_for=zsocket:exited {% if DEVICE_METADATA.localhost.frr_mgmt_framework_config is defined and DEVICE_METADATA.localhost.frr_mgmt_framework_config == "true" %} [program:ospfd] From 544eb2ab0cbd0120909b4a6cb8c62abadcab79e9 Mon Sep 17 00:00:00 2001 From: Arun Saravanan Balachandran <52521751+ArunSaravananBalachandran@users.noreply.github.com> Date: Mon, 19 Aug 2024 23:13:26 +0530 Subject: [PATCH 103/117] [Dell] S6100 - Do not modify reboot-cause.txt (#19908) --- .../s6100/scripts/track_reboot_reason.sh | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/track_reboot_reason.sh b/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/track_reboot_reason.sh index 5dbb3e4c9e90..d6b768ff783e 100755 --- a/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/track_reboot_reason.sh +++ b/platform/broadcom/sonic-platform-modules-dell/s6100/scripts/track_reboot_reason.sh @@ -5,7 +5,6 @@ reboot_file_found=false smf_dir_missing=0 nvram_missing=0 -REBOOT_CAUSE_FILE=/host/reboot-cause/reboot-cause.txt REBOOT_REASON_FILE=/host/reboot-cause/platform/reboot_reason BIOS_VERSION_FILE=/host/reboot-cause/platform/bios_minor_version SMF_MSS_VERSION_FILE=/sys/devices/platform/SMF.512/hwmon/*/smf_firmware_ver @@ -134,20 +133,6 @@ _is_watchdog_reset(){ return } -_is_unknown_reset(){ - if [[ -f $REBOOT_CAUSE_FILE ]]; then - if [[ $1 = 0 ]]; then - echo "Unknown software reboot" > $REBOOT_CAUSE_FILE - return - fi - curr_poweron_reason=$(cat $SMF_POWERON_REASON) - curr_reset_reason=$SMF_RESET - mb_poweron_reason=$(cat $MAILBOX_POWERON_REASON) - echo "Unknown POR: $curr_poweron_reason RST: $curr_reset_reason MBR: $mb_poweron_reason" > $REBOOT_CAUSE_FILE - fi - -} - _is_software_reboot(){ SMF_STATUS=`io_rd_wr.py --set --val 06 --offset 210; io_rd_wr.py --set --val 0B --offset 211; io_rd_wr.py --get --offset 212` SMF_STATUS=$(echo "$SMF_STATUS" | awk '{print $NF}') @@ -206,7 +191,6 @@ update_mailbox_register(){ elif [[ $SMF_RESET = "33" ]]; then echo 0xdd > $MAILBOX_POWERON_REASON else - echo "Unknown software reboot" > $REBOOT_CAUSE_FILE echo 0x99 > $MAILBOX_POWERON_REASON fi @@ -227,7 +211,6 @@ update_mailbox_register(){ elif [[ $reason = "cc" ]]; then _is_software_reboot else - _is_unknown_reset $is_thermal_reboot echo 0x99 > $MAILBOX_POWERON_REASON fi fi From 674a92fb666b00d90db37666064a58620e70ccb4 Mon Sep 17 00:00:00 2001 From: wenyiz2021 <91497961+wenyiz2021@users.noreply.github.com> Date: Mon, 19 Aug 2024 11:54:16 -0700 Subject: [PATCH 104/117] [DNX SAI] [master] [202405] update to SAI 11 (#19854) Microsoft ADO (number only): 28738133 How I did it - update gpl module 6.5.30 version in saibcm-modules - build SAI 11.2 with hsdk-all 6.5.30 version - build master image with SAI 11.2, sdk 6.5.30 --- platform/broadcom/sai-modules.mk | 2 +- platform/broadcom/sai.mk | 4 ++-- platform/broadcom/saibcm-modules-dnx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/platform/broadcom/sai-modules.mk b/platform/broadcom/sai-modules.mk index f9fcef135d75..dd0c05ed48c6 100644 --- a/platform/broadcom/sai-modules.mk +++ b/platform/broadcom/sai-modules.mk @@ -10,7 +10,7 @@ $(BRCM_OPENNSL_KERNEL)_MACHINE = broadcom SONIC_DPKG_DEBS += $(BRCM_OPENNSL_KERNEL) # SAI bcm modules for DNX family ASIC -BRCM_DNX_OPENNSL_KERNEL_VERSION = 10.1.21.0 +BRCM_DNX_OPENNSL_KERNEL_VERSION = 11.2.4.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 diff --git a/platform/broadcom/sai.mk b/platform/broadcom/sai.mk index 86be717e6c58..bae4bf67ded3 100644 --- a/platform/broadcom/sai.mk +++ b/platform/broadcom/sai.mk @@ -1,7 +1,7 @@ LIBSAIBCM_XGS_VERSION = 10.1.37.0 -LIBSAIBCM_DNX_VERSION = 10.1.25.0 +LIBSAIBCM_DNX_VERSION = 11.2.4.1 LIBSAIBCM_XGS_BRANCH_NAME = SAI_10.1.0_GA -LIBSAIBCM_DNX_BRANCH_NAME = SAI_10.1.0_GA +LIBSAIBCM_DNX_BRANCH_NAME = SAI_11.2.0_GA LIBSAIBCM_XGS_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/sai-broadcom/$(LIBSAIBCM_XGS_BRANCH_NAME)/$(LIBSAIBCM_XGS_VERSION)/xgs" LIBSAIBCM_DNX_URL_PREFIX = "https://sonicstorage.blob.core.windows.net/public/sai/sai-broadcom/$(LIBSAIBCM_DNX_BRANCH_NAME)/$(LIBSAIBCM_DNX_VERSION)/dnx" diff --git a/platform/broadcom/saibcm-modules-dnx b/platform/broadcom/saibcm-modules-dnx index 231e9683199f..6d2b735f5c6b 160000 --- a/platform/broadcom/saibcm-modules-dnx +++ b/platform/broadcom/saibcm-modules-dnx @@ -1 +1 @@ -Subproject commit 231e9683199fec974cf71311b9ba47b3f48b6e7a +Subproject commit 6d2b735f5c6b66867e01b423f3343ca4119c83b2 From 2acfeab945e8e5f86fa496ad3b554d9574c61d05 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Tue, 20 Aug 2024 17:37:20 +0800 Subject: [PATCH 105/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19933) #### Why I did it src/sonic-utilities ``` * 1c4300f3 - (HEAD -> master, origin/master, origin/HEAD) Skip default lanes dup check (#3489) (3 days ago) [Xincun Li] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index 317e649514c9..1c4300f309be 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 317e649514c9b205849ffb5ea96a6a233e38290c +Subproject commit 1c4300f309be95d3b182a490032b3af2de95a89b From 5b5804dbbbd313b61615f41d0fedc9858cd4ad65 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Tue, 20 Aug 2024 17:37:35 +0800 Subject: [PATCH 106/117] [submodule] Update submodule sonic-dash-api to the latest HEAD automatically (#19872) #### Why I did it src/sonic-dash-api ``` * 39e4a63 - (HEAD -> master, origin/master, origin/HEAD) Add privatelink underlay_sip field for route table (#25) (24 hours ago) [Lawrence Lee] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-dash-api | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-dash-api b/src/sonic-dash-api index dbb2d0fee2fc..39e4a6319542 160000 --- a/src/sonic-dash-api +++ b/src/sonic-dash-api @@ -1 +1 @@ -Subproject commit dbb2d0fee2fcb5cb78bd7c9b0686dc0f8e1db210 +Subproject commit 39e4a63195423a18789a209bbec0cb8531215d3a From ea2020a603fe3c87dbf758bb7aee8e43463655c2 Mon Sep 17 00:00:00 2001 From: wenyiz2021 <91497961+wenyiz2021@users.noreply.github.com> Date: Tue, 20 Aug 2024 12:21:25 -0700 Subject: [PATCH 107/117] [SAI 11] [Arista] Update phy-credo.mk (#19958) it's needed for Arista CW2 linecard for SAI11. There is system side mechanism in phy-credo.py to work around the links down issue on CW2 linecard. This PR is changing $(PHY_CREDO)_URL to point to phy-credo_1.0_amd64.deb that is already merged with the fix in aristanetworks/sonic-firmware#2 Verified links are all up with credo debian update, without this change, 1 portchannel is down on Arista CL2 LC. --- rules/phy-credo.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rules/phy-credo.mk b/rules/phy-credo.mk index cfc62e77ebb9..3d11475cf152 100644 --- a/rules/phy-credo.mk +++ b/rules/phy-credo.mk @@ -1,3 +1,3 @@ PHY_CREDO = phy-credo_1.0_amd64.deb -$(PHY_CREDO)_URL = "https://github.com/aristanetworks/sonic-firmware/raw/9e34da2a2d2d1e7e972cda3064b7b73c0558b322/phy/phy-credo_1.0_amd64.deb" +$(PHY_CREDO)_URL = "https://github.com/aristanetworks/sonic-firmware/raw/24716c4e03f223d8e18afff786ac427f6ac77fe0/phy/phy-credo_1.0_amd64.deb" SONIC_ONLINE_DEBS += $(PHY_CREDO) From c5a620bedc4dab73b4d210f28fc6f790204c7720 Mon Sep 17 00:00:00 2001 From: "Marty Y. Lok" <76118573+mlok-nokia@users.noreply.github.com> Date: Wed, 21 Aug 2024 02:43:54 -0400 Subject: [PATCH 108/117] [voq][chassis][dhcp_relay] swss.sh try to start the dhcp_relay service although it is masked (#18829) * [voq][chassis][dhcp_relay] swss.sh try to start the dhcp_relay service althoug it is masked Signed-off-by: mlok --- files/scripts/swss.sh | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/files/scripts/swss.sh b/files/scripts/swss.sh index cb51c0bb0021..e00cc752ea04 100755 --- a/files/scripts/swss.sh +++ b/files/scripts/swss.sh @@ -242,6 +242,17 @@ function clean_up_chassis_db_tables() } +is_feature_enabled() +{ + s=$1 + service=${s%@*} + state=$(sonic-db-cli CONFIG_DB hget "FEATURE|${service}" "state") + if [[ $state == "enabled" ]]; then + echo "true" + else + echo "false" + fi +} start_peer_and_dependent_services() { check_warm_boot @@ -254,7 +265,14 @@ start_peer_and_dependent_services() { fi done for dep in ${DEPENDENT}; do - /bin/systemctl start ${dep} + if [[ $dep == "dhcp_relay" ]]; then + state=$(is_feature_enabled $dep) + if [[ $state == "true" ]]; then + /bin/systemctl start ${dep} + fi + else + /bin/systemctl start ${dep} + fi done for dep in ${MULTI_INST_DEPENDENT}; do if [[ ! -z $DEV ]]; then From 3d143066d6675f02456f15bef39ad9ee0c589272 Mon Sep 17 00:00:00 2001 From: sophiek Date: Wed, 21 Aug 2024 11:27:09 +0300 Subject: [PATCH 109/117] [Mellanox] Fixed sai xml name format bug (#19967) - Why I did it Fixed the name that the script looks for when checking sai_*.xml - How I did it Instead of searching with a general regex, the name of sai*.xml is taken from a variable in sai.profile. --- .../mellanox/cmis_host_mgmt/cmis_host_mgmt.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/platform/mellanox/cmis_host_mgmt/cmis_host_mgmt.py b/platform/mellanox/cmis_host_mgmt/cmis_host_mgmt.py index aaedbe4a57ba..a1011d244b94 100644 --- a/platform/mellanox/cmis_host_mgmt/cmis_host_mgmt.py +++ b/platform/mellanox/cmis_host_mgmt/cmis_host_mgmt.py @@ -21,6 +21,8 @@ import re import os import subprocess +import glob +from pathlib import Path class CMISHostMgmtActivator: @@ -60,7 +62,7 @@ def change_param(param, path, action): if param == "sai_profile" and not re.search(CMISHostMgmtActivator.PARAMS[param]["disabled_param"], lines): if not re.search(CMISHostMgmtActivator.PARAMS[param]["enabled_param"], lines): with open(file_path, 'a') as param_file: - param_file.write(CMISHostMgmtActivator.PARAMS[param]["enabled_param"]) + param_file.write(CMISHostMgmtActivator.PARAMS[param]["enabled_param"] + '\n') return lines = re.sub(CMISHostMgmtActivator.PARAMS[param]["disabled_param"], @@ -137,8 +139,19 @@ def enable(args): if not CMISHostMgmtActivator.is_spc_supported(sku_num): print("Error: unsupported platform - feature is supported on SPC3 and higher.") - - CMISHostMgmtActivator.PARAMS["sai_xml"]["file_name"] = "sai_{0}.xml".format(sku_num) + + sai_profile_file = '{}/{}'.format(sku_path, CMISHostMgmtActivator.PARAMS["sai_profile"]["file_name"]) + lines = None + with open(sai_profile_file, 'r') as saiprofile: + lines = saiprofile.read() + + sai_xml_path = re.search("SAI_INIT_CONFIG_FILE.*", lines).group() + + if sai_xml_path: + sai_xml_name = Path(sai_xml_path).name + CMISHostMgmtActivator.PARAMS["sai_xml"]["file_name"] = sai_xml_name + else: + print("Error: no sai_*.xml file present") CMISHostMgmtActivator.copy_file(args[0], sku_path) CMISHostMgmtActivator.copy_file(args[1], sku_path) From ee0aac528e2c22dfef4eb6f77545f422a95e0340 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Wed, 21 Aug 2024 19:21:41 +0800 Subject: [PATCH 110/117] [submodule] Update submodule sonic-platform-common to the latest HEAD automatically (#19970) #### Why I did it src/sonic-platform-common ``` * e55eebf - (HEAD -> master, origin/master, origin/HEAD) Added new APIs and enhanced the required APIs in "module_base.py and (#454) (7 hours ago) [rameshraghupathy] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-platform-common | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-platform-common b/src/sonic-platform-common index 7f07fa68eff8..e55eebf00382 160000 --- a/src/sonic-platform-common +++ b/src/sonic-platform-common @@ -1 +1 @@ -Subproject commit 7f07fa68eff8954cbd36400d39fd6f3d81b9a850 +Subproject commit e55eebf00382642db43026bf39594da7b158dad2 From 7799357fee3727d0c3c75aa00572279e44d97ffc Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Wed, 21 Aug 2024 23:41:52 +0800 Subject: [PATCH 111/117] [ci/build]: Upgrade SONiC package versions (#19347) --- .../versions-deb-bookworm | 60 +-- .../build-sonic-slave-bookworm/versions-git | 1 + .../build-sonic-slave-bookworm/versions-py3 | 18 +- .../build-sonic-slave-bullseye/versions-git | 1 + .../build-sonic-slave-bullseye/versions-py3 | 15 +- files/build/versions/default/versions-docker | 28 +- files/build/versions/default/versions-git | 21 +- files/build/versions/default/versions-mirror | 38 +- files/build/versions/default/versions-web | 407 +++++++++--------- .../versions-deb-bookworm | 20 +- .../dockers/docker-base-bookworm/versions-py3 | 4 +- .../versions-deb-bullseye | 8 +- .../dockers/docker-base-bullseye/versions-py3 | 4 +- .../versions-deb-bookworm | 5 +- .../versions-py3 | 4 +- .../versions-deb-bullseye | 2 +- .../versions-py3 | 4 +- .../docker-dash-engine/versions-deb-focal | 16 +- .../docker-database/versions-deb-bookworm | 9 +- .../docker-dhcp-relay/versions-deb-bookworm | 9 +- .../dockers/docker-dhcp-relay/versions-py3 | 2 +- .../docker-eventd/versions-deb-bookworm | 9 +- .../docker-fpm-frr/versions-deb-bookworm | 9 +- .../versions-deb-bullseye | 6 +- .../versions-deb-bullseye | 4 +- .../docker-gbsyncd-vs/versions-deb-bookworm | 30 +- .../dockers/docker-lldp/versions-deb-bookworm | 9 +- .../docker-macsec/versions-deb-bookworm | 9 +- .../dockers/docker-mux/versions-deb-bookworm | 9 +- .../dockers/docker-nat/versions-deb-bookworm | 9 +- .../docker-orchagent/versions-deb-bookworm | 9 +- .../versions-deb-bookworm | 34 +- .../docker-platform-monitor/versions-py3 | 11 +- .../dockers/docker-ptf-sai/versions-py3 | 4 +- .../dockers/docker-ptf/versions-deb-buster | 20 +- .../versions-deb-bookworm | 9 +- .../docker-sflow/versions-deb-bookworm | 9 +- .../dockers/docker-snmp/versions-deb-bookworm | 9 +- .../versions/dockers/docker-snmp/versions-py3 | 4 +- .../docker-sonic-gnmi/versions-deb-bookworm | 9 +- .../versions-deb-bookworm | 15 +- .../docker-sonic-mgmt-framework/versions-py3 | 4 +- .../docker-sonic-vs/versions-deb-bullseye | 30 +- .../dockers/docker-sonic-vs/versions-py3 | 25 +- .../versions-deb-bookworm | 24 +- .../versions-deb-bullseye | 10 +- .../versions-deb-bullseye | 4 +- .../versions-deb-bullseye | 10 +- .../docker-syncd-brcm/versions-deb-bullseye | 4 +- .../versions-deb-bullseye | 10 +- .../docker-syncd-centec/versions-deb-bullseye | 4 +- .../versions-deb-bookworm | 10 +- .../docker-syncd-mlnx/versions-deb-bookworm | 53 +-- .../dockers/docker-syncd-mlnx/versions-py3 | 2 +- .../versions-deb-bookworm-arm64 | 4 +- .../versions-deb-bookworm-armhf | 4 +- .../docker-syncd-vs/versions-deb-bookworm | 30 +- .../docker-teamd/versions-deb-bookworm | 9 +- .../versions-deb-bookworm | 252 +++++------ .../versions-deb-bookworm-armhf | 6 +- .../dockers/sonic-slave-bookworm/versions-py3 | 9 +- .../versions-py3-all-arm64 | 4 +- .../versions-py3-all-armhf | 4 +- .../versions-deb-bullseye | 159 ++++--- .../versions-deb-bullseye-armhf | 6 +- .../dockers/sonic-slave-bullseye/versions-py3 | 11 +- .../versions-py3-all-arm64 | 1 + .../versions-py3-all-armhf | 1 + .../sonic-slave-buster/versions-deb-buster | 59 +-- .../versions-deb-buster-armhf | 2 +- .../dockers/sonic-slave-buster/versions-py2 | 2 + .../dockers/sonic-slave-buster/versions-py3 | 8 +- .../host-base-image/versions-deb-bookworm | 32 +- .../versions/host-image/versions-deb-bookworm | 85 ++-- files/build/versions/host-image/versions-py3 | 26 +- 75 files changed, 938 insertions(+), 869 deletions(-) create mode 100644 files/build/versions/build/build-sonic-slave-bookworm/versions-git create mode 100644 files/build/versions/build/build-sonic-slave-bullseye/versions-git create mode 100644 files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-arm64 create mode 100644 files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-armhf diff --git a/files/build/versions/build/build-sonic-slave-bookworm/versions-deb-bookworm b/files/build/versions/build/build-sonic-slave-bookworm/versions-deb-bookworm index 97bc192b067e..4c337ee0aab7 100644 --- a/files/build/versions/build/build-sonic-slave-bookworm/versions-deb-bookworm +++ b/files/build/versions/build/build-sonic-slave-bookworm/versions-deb-bookworm @@ -1,15 +1,15 @@ -applibs==1.mlnx.4.6.3064 -applibs-dev==1.mlnx.4.6.3064 -bfscripts==4.6.0-13035 -doca-cx-libs==2.7.0034-1 -ibverbs-providers==2307mlnx47-1.2310036 +applibs==1.mlnx.4.6.4072 +applibs-dev==1.mlnx.4.6.4072 +bfscripts==4.7.0-13127 +doca-cx-libs==2.8.0005-1 +ibverbs-providers==2404mlnx51-1.2404066 kernel-mft-dkms==4.28.0-96 -kernel-mft-dkms-modules-6.1.0-11-2-arm64==4.26.1 +kernel-mft-dkms-modules-6.1.0-11-2-arm64==4.28.0 libdashapi==1.0.0 -libdoca-cx-libs-dev==2.7.0034-1 +libdoca-cx-libs-dev==2.8.0005-1 libgrpc-dev==1.39.0-1 -libibverbs-dev==2307mlnx47-1.2310036 -libibverbs1==2307mlnx47-1.2310036 +libibverbs-dev==2404mlnx51-1.2404066 +libibverbs1==2404mlnx51-1.2404066 libnl-3-200==3.5.0-1 libnl-3-dev==3.5.0-1 libnl-cli-3-200==3.5.0-1 @@ -42,38 +42,38 @@ libyang-dev==1.0.73 linux-headers-6.1.0-11-2-amd64==6.1.38-4 linux-headers-6.1.0-11-2-arm64==6.1.38-4 linux-headers-6.1.0-11-2-common==6.1.38-4 -mft==4.26.1-3 +mft==4.28.0-96 mlnx-dpdk==22.11.0-2404.0.2 mlnx-dpdk-dev==22.11.0-2404.0.2 -mlnx-iproute2==6.4.0-1.2310036 -mlnx-ofed-kernel-utils==23.10.OFED.23.10.0.3.6.1-1 -mlnx-tools==23.10.0-1.2310036 +mlnx-iproute2==6.7.0-1.2404066 +mlnx-ofed-kernel-utils==24.04.OFED.24.04.0.6.6.1-1 +mlnx-tools==24.04.0-1.2404066 mlxbf-bootctl==2.1 -mlxbf-bootimages==4.6.0-13035 +mlxbf-bootimages==4.7.0-13127 p4lang-bmv2==1.15.0-7 p4lang-p4c==1.2.4.2-2 p4lang-pi==0.1.0-15 python3-swsscommon==1.0.0 python3-yang==1.0.73 -rdma-core==2307mlnx47-1.2310036 +rdma-core==2404mlnx51-1.2404066 rxp-compiler==22.05.1 sdn-appliance==1.5-1mlnx1 sonic-mgmt-common==1.0.0 sonic-mgmt-common-codegen==1.0.0 sonic-platform-pddf==1.1 sonic-platform-pddf-sym==1.1 -sx-acl-helper==1.mlnx.4.6.3064 -sx-acl-helper-dev==1.mlnx.4.6.3064 -sx-complib==1.mlnx.4.6.3064 -sx-complib-dev==1.mlnx.4.6.3064 -sx-examples==1.mlnx.4.6.3064 -sx-examples-dev==1.mlnx.4.6.3064 -sx-gen-utils==1.mlnx.4.6.3064 -sx-gen-utils-dev==1.mlnx.4.6.3064 -sx-hash-calc==1.mlnx.4.6.3064 -sx-obj-desc-lib==1.mlnx.4.6.3064 -sx-obj-desc-lib-dev==1.mlnx.4.6.3064 -sxd-libs==1.mlnx.4.6.3064 -sxd-libs-dev==1.mlnx.4.6.3064 -wjh-libs==1.mlnx.4.6.3064 -wjh-libs-dev==1.mlnx.4.6.3064 +sx-acl-helper==1.mlnx.4.6.4072 +sx-acl-helper-dev==1.mlnx.4.6.4072 +sx-complib==1.mlnx.4.6.4072 +sx-complib-dev==1.mlnx.4.6.4072 +sx-examples==1.mlnx.4.6.4072 +sx-examples-dev==1.mlnx.4.6.4072 +sx-gen-utils==1.mlnx.4.6.4072 +sx-gen-utils-dev==1.mlnx.4.6.4072 +sx-hash-calc==1.mlnx.4.6.4072 +sx-obj-desc-lib==1.mlnx.4.6.4072 +sx-obj-desc-lib-dev==1.mlnx.4.6.4072 +sxd-libs==1.mlnx.4.6.4072 +sxd-libs-dev==1.mlnx.4.6.4072 +wjh-libs==1.mlnx.4.6.4072 +wjh-libs-dev==1.mlnx.4.6.4072 diff --git a/files/build/versions/build/build-sonic-slave-bookworm/versions-git b/files/build/versions/build/build-sonic-slave-bookworm/versions-git new file mode 100644 index 000000000000..5ba32e1f336e --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-bookworm/versions-git @@ -0,0 +1 @@ +https://github.com/thom311/libnl==fa05d58ebef426a545b4170b35214492b401c8af diff --git a/files/build/versions/build/build-sonic-slave-bookworm/versions-py3 b/files/build/versions/build/build-sonic-slave-bookworm/versions-py3 index cabe3e8db4cd..b73981a6f034 100644 --- a/files/build/versions/build/build-sonic-slave-bookworm/versions-py3 +++ b/files/build/versions/build/build-sonic-slave-bookworm/versions-py3 @@ -1,20 +1,21 @@ bitarray==2.8.1 blessed==1.20.0 -cffi==1.16.0 +cffi==1.17.0 click==7.0 click-log==0.4.0 colorful==0.5.6 deepdiff==6.2.2 docker==7.1.0 -docker-image-py==0.1.12 +docker-image-py==0.1.13 enlighten==1.12.4 -filelock==3.14.0 +enum34==1.1.10 +filelock==3.15.4 freezegun==1.5.1 ijson==3.2.3 ipaddress==1.0.23 -jsondiff==2.0.0 +jsondiff==2.2.0 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==2.6.0 lxml==4.9.1 natsort==6.2.1 @@ -23,20 +24,21 @@ netifaces==0.11.0 ordered-set==4.1.0 paramiko==2.11.0 pexpect==4.9.0 -prefixed==0.7.1 +prefixed==0.8.0 prettyprinter==0.18.0 ptyprocess==0.7.0 -pycairo==1.26.0 +pycairo==1.26.1 pycparser==2.22 pynacl==1.5.0 pyroute2==0.5.19 python-arptable==0.0.2 pyyaml==6.0.1 +scp==0.14.5 semantic-version==2.10.0 systemd-python==235 tabulate==0.9.0 toposort==1.6 -urllib3==2.2.1 +urllib3==2.2.2 wcwidth==0.2.13 www-authenticate==0.9.2 xmltodict==0.12.0 diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-git b/files/build/versions/build/build-sonic-slave-bullseye/versions-git new file mode 100644 index 000000000000..5ba32e1f336e --- /dev/null +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-git @@ -0,0 +1 @@ +https://github.com/thom311/libnl==fa05d58ebef426a545b4170b35214492b401c8af diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 index ab8c14a49c65..8b7f603785e3 100644 --- a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 +++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3 @@ -1,28 +1,29 @@ bitarray==2.8.1 blessed==1.20.0 -cffi==1.16.0 +cffi==1.17.0 charset-normalizer==3.3.2 click-log==0.4.0 colorful==0.5.6 docker==7.1.0 -docker-image-py==0.1.12 +docker-image-py==0.1.13 enlighten==1.12.4 -filelock==3.14.0 +filelock==3.15.4 ijson==3.2.3 ipaddress==1.0.23 -jsondiff==2.0.0 +jsondiff==2.2.0 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 natsort==6.2.1 netaddr==0.8.0 netifaces==0.11.0 paramiko==2.11.0 -prefixed==0.7.1 +prefixed==0.8.0 prettyprinter==0.18.0 -pycairo==1.26.0 +pycairo==1.26.1 pycparser==2.22 pynacl==1.5.0 pyyaml==6.0.1 +scp==0.14.5 semantic-version==2.10.0 systemd-python==235 tabulate==0.9.0 diff --git a/files/build/versions/default/versions-docker b/files/build/versions/default/versions-docker index 0a183990093f..0a4ed7b06419 100644 --- a/files/build/versions/default/versions-docker +++ b/files/build/versions/default/versions-docker @@ -1,15 +1,15 @@ -amd64:amd64/debian:bookworm==sha256:08f76151d500d9e021b9f793364a3e9e534433297d16ba0152d69d1914b64d17 -amd64:amd64/debian:bullseye==sha256:5f2875f43c30349791f096598cbc96a774c422eeb2405e09ac4a7fc97492b623 -amd64:debian:bookworm==sha256:fac2c0fd33e88dfd3bc88a872cfb78dcb167e74af6162d31724df69e482f886c -amd64:debian:bullseye==sha256:2c7a92a41cb814c00e7d455b2bc0c90ccdb9a4ced2ffdc10e562c7a84a186032 -amd64:debian:buster==sha256:6e7bd55a5705914837aad8db01b349f4617510c11e47ccae8e87f6f14e489626 +amd64:amd64/debian:bookworm==sha256:69af26f9843be43dc53ec473972fb9176a1d50551c1dc0a80662ddeb1cb809f7 +amd64:amd64/debian:bullseye==sha256:49f482896ab298ec24b8b6e51aa835e9ae71cffb3c03bb4f7c21303a8b371564 +amd64:debian:bookworm==sha256:aadf411dc9ed5199bc7dab48b3e6ce18f8bbee4f170127f5ff1b75cd8035eb36 +amd64:debian:bullseye==sha256:0bb606aad3307370c8b4502eff11fde298e5b7721e59a0da3ce9b30cb92045ed +amd64:debian:buster==sha256:58ce6f1271ae1c8a2006ff7d3e54e9874d839f573d8009c20154ad0f2fb0a225 amd64:p4lang/behavioral-model@sha256:ce45720e28a96a50f275c1b511cd84c2558b62f2cf7a7e506765183bc3fb2e32==sha256:ce45720e28a96a50f275c1b511cd84c2558b62f2cf7a7e506765183bc3fb2e32 -arm64:arm64v8/debian:bookworm==sha256:3d67cec2f6aa8a4d6aa496ae8097747f216fe850aebc8db99548cb8a85e73181 -arm64:arm64v8/debian:bullseye==sha256:2fcb4b943d3c026dff3bb55f470140bea8c1ce2e05a03e62185d6f12dd131ac2 -arm64:debian:bookworm==sha256:fac2c0fd33e88dfd3bc88a872cfb78dcb167e74af6162d31724df69e482f886c -arm64:debian:bullseye==sha256:2c7a92a41cb814c00e7d455b2bc0c90ccdb9a4ced2ffdc10e562c7a84a186032 -arm64:debian:buster==sha256:6e7bd55a5705914837aad8db01b349f4617510c11e47ccae8e87f6f14e489626 -armhf:arm32v7/debian:bookworm==sha256:c5f29bcdb75f6a394c94d3f57daa79503870d45a3cd48b4a04fda725e9bd45db -armhf:debian:bookworm==sha256:fac2c0fd33e88dfd3bc88a872cfb78dcb167e74af6162d31724df69e482f886c -armhf:debian:bullseye==sha256:2c7a92a41cb814c00e7d455b2bc0c90ccdb9a4ced2ffdc10e562c7a84a186032 -armhf:debian:buster==sha256:6e7bd55a5705914837aad8db01b349f4617510c11e47ccae8e87f6f14e489626 +arm64:arm64v8/debian:bookworm==sha256:67b8fe57fcc540f94cf89327ba06e120fdd0ca6637b1f7e5fb003269c49be6fc +arm64:arm64v8/debian:bullseye==sha256:fdad84a235716d4f605a279cd34fa47d88789f24939cdbdc2e0ecdbc1e525a79 +arm64:debian:bookworm==sha256:aadf411dc9ed5199bc7dab48b3e6ce18f8bbee4f170127f5ff1b75cd8035eb36 +arm64:debian:bullseye==sha256:0bb606aad3307370c8b4502eff11fde298e5b7721e59a0da3ce9b30cb92045ed +arm64:debian:buster==sha256:58ce6f1271ae1c8a2006ff7d3e54e9874d839f573d8009c20154ad0f2fb0a225 +armhf:arm32v7/debian:bookworm==sha256:f8b683ce2fc0be935a1dd1e531d4fd3ecf56419876dfb1d46f674a972f95aab6 +armhf:debian:bookworm==sha256:aadf411dc9ed5199bc7dab48b3e6ce18f8bbee4f170127f5ff1b75cd8035eb36 +armhf:debian:bullseye==sha256:0bb606aad3307370c8b4502eff11fde298e5b7721e59a0da3ce9b30cb92045ed +armhf:debian:buster==sha256:58ce6f1271ae1c8a2006ff7d3e54e9874d839f573d8009c20154ad0f2fb0a225 diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git index 7ac0b5c3bc23..0306db65f1b5 100644 --- a/files/build/versions/default/versions-git +++ b/files/build/versions/default/versions-git @@ -1,23 +1,22 @@ -https://chromium.googlesource.com/chromium/tools/depot_tools.git==ada9211999786073eb44acab46e596311523e0df +https://chromium.googlesource.com/chromium/tools/depot_tools.git==0bc7c4832e4f2d453e4826c9a2e1197e11bd6ec7 https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f -https://github.com/CESNET/libyang.git==4c733412e7173219166be7053940326a92699765 +https://github.com/CESNET/libyang.git==fba28260f382d81cf8f4b91b24cd717b52324fc2 https://github.com/daveolson53/audisp-tacplus.git==559c9f22edd4f2dea0ecedffb3ad9502b12a75b6 https://github.com/daveolson53/libnss-tacplus.git==19008ab68d9d504aa58eb34d5f564755a1613b8b https://github.com/dyninc/OpenBFDD.git==e35f43ad8d2b3f084e96a84c392528a90d05a287 -https://github.com/flashrom/flashrom.git==e25129d9b6cf5bc39fed03cbf60af2378a3e745f -https://github.com/FreeRADIUS/freeradius-server.git==3eb4a4b01e4b33a44b07a6ae6b50071fe09ad1f8 -https://github.com/FreeRADIUS/pam_radius.git==d802da75cbfc3062ae1b18d0bf26ac2a030ffdaa +https://github.com/flashrom/flashrom.git==8685230caa03940772358db6927c6076397a6d78 +https://github.com/FreeRADIUS/freeradius-server.git==da410bd1698ffce69486a94558d61bc13bac9dbc +https://github.com/FreeRADIUS/pam_radius.git==b6442c3e0147f1019990520483fa3a30e4ccf059 https://github.com/jeroennijhof/pam_tacplus.git==b839c440e33c36eced9dcbc287fcfe6237c4c4ce https://github.com/lguohan/gnxi.git==3adf8b97755b49947e465b5a14645f11e79fa0cd https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74e774 https://github.com/openconfig/oc-pyang.git==4607fd1987d4f586aba03b40f222015cb3ef8161 https://github.com/p4lang/ptf.git==c554f83685186be4cfa9387eb5d6d700d2bbd7c0 https://github.com/p4lang/scapy-vxlan.git==85ffe83da156568ee47a0750f638227e6e1d7479 -https://github.com/sflow/host-sflow==a3ce4814bb6673a314142183e22c0e710cd21292 -https://github.com/sflow/sflowtool==c42c49cb80b927a4c02e54fc26430417f18f4833 -https://github.com/sonic-net/DASH.git==b3d7a6a61bb1d9322718e3e289603512a692b31f -https://github.com/thom311/libnl==5248e1a45576617b349465997822cef34cbc5053 -https://salsa.debian.org/kernel-team/initramfs-tools.git==84e5c0f7dac1a17e980ed8dfb0e0e8729d9388db +https://github.com/sflow/host-sflow==2893b4808608233da0c26531dff942a960445006 +https://github.com/sflow/sflowtool==c350bc8a6c5ef73d5b6b6529329391be4a2f5543 +https://github.com/sonic-net/DASH.git==173f1c79e7b549bcf1ad038f3a8eadcd3b309de8 +https://github.com/thom311/libnl==fa05d58ebef426a545b4170b35214492b401c8af +https://salsa.debian.org/kernel-team/initramfs-tools.git==18b98fa239af9b8a02dd009091b2085193681c64 https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d -https://salsa.debian.org/ssh-team/openssh.git==096572ea878f93fe2c85d8e86e43e2281f3f46d7 https://salsa.debian.org/tai271828/rasdaemon.git==51a7f485f8b2e2ae43e613f19c5a387595174132 diff --git a/files/build/versions/default/versions-mirror b/files/build/versions/default/versions-mirror index 8fbce29f2a86..291de46fbe2f 100644 --- a/files/build/versions/default/versions-mirror +++ b/files/build/versions/default/versions-mirror @@ -1,24 +1,24 @@ archive.ubuntu.com_ubuntu_dists_focal==2020-04-23T17:33:17Z archive.ubuntu.com_ubuntu_dists_focal-backports==2024-05-31T11:48:10Z -archive.ubuntu.com_ubuntu_dists_focal-updates==2024-06-05T02:25:09Z +archive.ubuntu.com_ubuntu_dists_focal-updates==2024-08-19T02:41:01Z deb.nodesource.com_node%5f14.x_dists_bookworm==2023-02-17T00:35:29Z deb.nodesource.com_node%5f14.x_dists_bullseye==2023-02-17T00:35:28Z deb.nodesource.com_node%5f14.x_dists_buster==2023-02-17T00:35:28Z -debian==20240605T000248Z -debian-security==20240605T000248Z -download.docker.com_linux_debian_dists_bookworm==2024-05-28T14:05:22Z -download.docker.com_linux_debian_dists_bullseye==2024-05-28T14:05:22Z -download.docker.com_linux_debian_dists_buster==2024-05-23T13:29:25Z -packages.trafficmanager.net_snapshot_debian-security_20240605T000248Z_dists_bookworm-security==2024-06-02T16:19:05Z -packages.trafficmanager.net_snapshot_debian-security_20240605T000248Z_dists_bullseye-security==2024-06-02T16:19:06Z -packages.trafficmanager.net_snapshot_debian-security_20240605T000248Z_dists_buster_updates==2024-06-02T16:19:05Z -packages.trafficmanager.net_snapshot_debian_20240605T000248Z_dists_bookworm==2024-02-10T11:07:25Z -packages.trafficmanager.net_snapshot_debian_20240605T000248Z_dists_bookworm-backports==2024-06-04T20:13:32Z -packages.trafficmanager.net_snapshot_debian_20240605T000248Z_dists_bookworm-updates==2024-06-04T20:13:32Z -packages.trafficmanager.net_snapshot_debian_20240605T000248Z_dists_bullseye==2024-02-10T12:40:37Z -packages.trafficmanager.net_snapshot_debian_20240605T000248Z_dists_bullseye-backports==2024-06-04T20:13:32Z -packages.trafficmanager.net_snapshot_debian_20240605T000248Z_dists_bullseye-updates==2024-06-04T20:13:32Z -packages.trafficmanager.net_snapshot_debian_20240605T000248Z_dists_buster==2023-06-10T08:53:33Z -packages.trafficmanager.net_snapshot_debian_20240605T000248Z_dists_buster-backports==2024-03-09T20:54:54Z -packages.trafficmanager.net_snapshot_debian_20240605T000248Z_dists_buster-updates==2023-06-10T08:55:10Z -security.ubuntu.com_ubuntu_dists_focal-security==2024-05-31T18:15:07Z +debian==20240801T000314Z +debian-security==20240801T000306Z +download.docker.com_linux_debian_dists_bookworm==2024-08-16T23:21:06Z +download.docker.com_linux_debian_dists_bullseye==2024-08-16T23:21:06Z +download.docker.com_linux_debian_dists_buster==2024-06-17T16:53:50Z +packages.trafficmanager.net_snapshot_debian-security_20240801T000306Z_dists_bookworm-security==2024-07-31T23:24:08Z +packages.trafficmanager.net_snapshot_debian-security_20240801T000306Z_dists_bullseye-security==2024-07-31T23:24:07Z +packages.trafficmanager.net_snapshot_debian-security_20240801T000306Z_dists_buster_updates==2024-07-31T23:24:08Z +packages.trafficmanager.net_snapshot_debian_20240801T000314Z_dists_bookworm==2024-06-29T09:06:14Z +packages.trafficmanager.net_snapshot_debian_20240801T000314Z_dists_bookworm-backports==2024-07-31T20:23:42Z +packages.trafficmanager.net_snapshot_debian_20240801T000314Z_dists_bookworm-updates==2024-07-31T20:23:42Z +packages.trafficmanager.net_snapshot_debian_20240801T000314Z_dists_bullseye==2024-06-29T10:26:51Z +packages.trafficmanager.net_snapshot_debian_20240801T000314Z_dists_bullseye-backports==2024-07-31T20:23:42Z +packages.trafficmanager.net_snapshot_debian_20240801T000314Z_dists_bullseye-updates==2024-07-31T20:23:42Z +packages.trafficmanager.net_snapshot_debian_20240801T000314Z_dists_buster==2023-06-10T08:53:33Z +packages.trafficmanager.net_snapshot_debian_20240801T000314Z_dists_buster-backports==2024-03-09T20:54:54Z +packages.trafficmanager.net_snapshot_debian_20240801T000314Z_dists_buster-updates==2023-06-10T08:55:10Z +security.ubuntu.com_ubuntu_dists_focal-security==2024-08-15T23:58:16Z diff --git a/files/build/versions/default/versions-web b/files/build/versions/default/versions-web index 1147fa6e5dec..788d0ac5b72c 100644 --- a/files/build/versions/default/versions-web +++ b/files/build/versions/default/versions-web @@ -15,16 +15,16 @@ http://deb.debian.org/debian/pool/main/p/protobuf/protobuf_3.21.12-3.debian.tar. http://deb.debian.org/debian/pool/main/p/protobuf/protobuf_3.21.12-3.dsc==d8e34e7b07473c6903f9d245934524fb http://deb.debian.org/debian/pool/main/p/protobuf/protobuf_3.21.12.orig.tar.gz==d38562490234d8080bdbe8eb7baf937a http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-bmv2_1.15.0-7.debian.tar.xz==f4d249b77d4f8d120b229834aac02df5 -http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-bmv2_1.15.0-7.dsc==6882841200ce58acc8db7f3e6a15e91d +http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-bmv2_1.15.0-7.dsc==c5856f30948b33bb0a9f6b1e3247c851 http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-bmv2_1.15.0.orig.tar.gz==cbbb4a0d5b1e17dca0532c3ca761e05c http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-p4c_1.2.4.2-2.debian.tar.xz==7ea7d64c9147bd93a790af57693ce36f -http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-p4c_1.2.4.2-2.dsc==49a4c37e4030348958320e7d95a08209 +http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-p4c_1.2.4.2-2.dsc==982a0f257dba812dfcfa329c91b9dcfe http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-p4c_1.2.4.2.orig.tar.gz==b1008dffbe236d065c5557f2d4629aa9 http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-pi_0.1.0-15.debian.tar.xz==b9d8e4ce4cb66385250cf6dded0ef57a -http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-pi_0.1.0-15.dsc==9bfdfc3b6bf96e4e8c3a6a72fc56fded +http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-pi_0.1.0-15.dsc==03154ab52843ee9efa380febb8053c06 http://download.opensuse.org/repositories/home:/p4lang/Debian_11/p4lang-pi_0.1.0.orig.tar.gz==551d3780d615557674e93fa11210499d -http://www.iana.org/assignments/enterprise-numbers.txt==63fa3879db4888f790293029f63dbac6 -http://www.mellanox.com/downloads/MFT/mft-4.26.1-3-arm64-deb.tgz==0dda58196e4a303be1b7d570d3c25e68 +http://www.iana.org/assignments/enterprise-numbers.txt==a1246c0137a93741b1a68322f3c473c2 +http://www.mellanox.com/downloads/MFT/mft-4.28.0-96-arm64-deb.tgz==39b3244a00029f97734ee75e5a321065 http://www.mellanox.com/downloads/MFT/mft-4.28.0-96-x86_64-deb.tgz==f552e1faddc8f76fe4eb0b8902606c2a https://archive.apache.org/dist/thrift/0.14.1/thrift-0.14.1.tar.gz==c64434548438df2cb1e53fb27c600e85 https://bootstrap.pypa.io/pip/2.7/get-pip.py==60e8267eb1b7bc71dc4843eb7bd294d3 @@ -52,69 +52,61 @@ https://github.com/CentecNetworks/sonic-binaries/raw/master/amd64/third_party/ad https://github.com/CentecNetworks/sonic-binaries/raw/master/arm64/sai/libsaictc-dev_1.13.0-1_arm64.deb==1162131e154bba573bf7502d743f1d81 https://github.com/CentecNetworks/sonic-binaries/raw/master/arm64/sai/libsaictc_1.13.0-1_arm64.deb==b8b25694a1dc9b4d8dffc2f2c04ddaed https://github.com/CumulusNetworks/ifupdown2/archive/3.0.0-1.tar.gz==755459b3a58fbc11625336846cea7420 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/bfscripts_4.6.0-13035_all.deb==232bdd3dcdf705530b82d1079a4bcd60 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/gpio-mlxbf3.ko==0397c082e8127d7d529e4f1dc1551855 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/mlx-bootctl.ko==addf7a88f10e8bc3278d222437aefdbb -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/mlxbf-bootctl_2.1_arm64.deb==aa521424ae27f4ec6e3348143ff1087a -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/mlxbf-bootimages-signed_4.6.0-13035_arm64.deb==4a91c6143375cf4a8bb7cfecf961c16d -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/mlxbf-gige.ko==4a439c3b2fb924f4fce5ba4293bb962e -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/mlxbf-pka.ko==7cfa549ce77aa57698864b9b3fe81ae2 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/mlxbf-ptm.ko==7e642ebab66631ff9b4bbb47fd83c32c -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/mlxbf-tmfifo.ko==5ea4e550f189dd9df5c3ef405e2e6136 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/pinctrl-mlxbf3.ko==91322cde339d51eee234c430e84cd2e3 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/pwr-mlxbf.ko==64be93a5e2b03816cb67f1a40105d6d9 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.6.0-13035-bookworm/sdhci-of-dwcmshc.ko==41d47a5ec7062fb28f444f393685b9f9 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-fw-32.39.1002/fw-BlueField-3-rel-32_39_1002.mfa==4c47ee2fc6f7a368617f6bc216f3ddb0 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sai-SAIBuild0.0.30.0-bookworm/mlnx-sai-dbgsym_1.mlnx.SAIBuild0.0.30.0_arm64.deb==938914ad288c4093bbee065e9836554b -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sai-SAIBuild0.0.30.0-bookworm/mlnx-sai_1.mlnx.SAIBuild0.0.30.0_arm64.deb==f5a05290490f9db067e31519a680c2e6 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//doca-cx-libs-dbgsym_2.7.0034-1_arm64.deb==ce958227fddc4527b8b86472b42ec2d5 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//doca-cx-libs_2.7.0034-1_arm64.deb==bcda8fe15d490fbf2fc9d198b1b9bcb1 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//ibverbs-providers_2307mlnx47-1.2310036_arm64.deb==1eabbdc70e0b0be9543560f672d22486 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//libdoca-cx-libs-dev_2.7.0034-1_arm64.deb==440aa546e7a7a4c546b8ca3b43592aa0 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//libgrpc-dev-dbgsym_1.39.0-1_arm64.deb==fd2d91dabc8904a504dc6e26b96305d9 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//libgrpc-dev_1.39.0-1_arm64.deb==efefb0ac891143cfb50e3848ada265ee -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//libibumad-dev_2307mlnx47-1.2310036_arm64.deb==53fc07764e6730c25f15cde8e06d526d -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//libibumad3_2307mlnx47-1.2310036_arm64.deb==083f1b171039174844ffa538913b5ce3 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//libibverbs-dev_2307mlnx47-1.2310036_arm64.deb==cbacf0ebac5035f16e073c7f62487f67 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//libibverbs1_2307mlnx47-1.2310036_arm64.deb==d4d1361e418f3da5a6d52eafd589a8e4 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//librdmacm-dev_2307mlnx47-1.2310036_arm64.deb==e46272ac390f3df672e24abdb34092dd -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//librdmacm1_2307mlnx47-1.2310036_arm64.deb==d2d588e7c568ad283a0a5429a719c099 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//librxpcompiler-dev_22.05.1_arm64.deb==ec65d50661b6ae02c3ae60bd500f21b7 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//mlnx-dpdk-dev_22.11.0-2404.0.2_arm64.deb==f0dcdd56441d15ab47a73dcf00a2716c -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//mlnx-dpdk_22.11.0-2404.0.2_arm64.deb==c915b634f08cd056d09c7605ab1167bc -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//mlnx-iproute2_6.4.0-1.2310036_arm64.deb==2ceff828edfd36ecc102dabdc762de67 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//mlnx-ofed-kernel-modules-6.1.0-11-2-arm64_23.10.OFED.23.10.0.3.6.1_arm64.deb==06713b207281fdd723b94302a481bf53 -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//mlnx-ofed-kernel-utils_23.10.OFED.23.10.0.3.6.1-1_arm64.deb==b6f2c43c9ae7a3e05a0712eae06e47ff -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//mlnx-tools_23.10.0-1.2310036_arm64.deb==b1c46f7bbadce251d7bd02054aefb1fc -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//rdma-core_2307mlnx47-1.2310036_arm64.deb==2f9e98f0e381dbcebcc25c808e3f257a -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//rxp-compiler_22.05.1_arm64.deb==dd7265c708beffaf4a1dc4cdeac28c6e -https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.4-RC2-bookworm//sdn-appliance_1.5-1mlnx1_arm64.deb==21ddb6583872579ee2d282117bb8d043 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.7.0-13127-bookworm/bfscripts_4.7.0-13127_all.deb==2660c84cfebc322dad4ac3a23aa2bcba +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.7.0-13127-bookworm/bluefield-platform-modules_1.0_arm64.deb==cce3dd6570e9c68225ed886e0fa21a86 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.7.0-13127-bookworm/mlxbf-bootctl_2.1_arm64.deb==6fb5c94b06abae4089f7d3e6b5f7db54 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-bfsoc-4.7.0-13127-bookworm/mlxbf-bootimages-signed_4.7.0-13127_arm64.deb==60d202c7b62734fe362b0c4cea88d890 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-fw-32.41.1000/fw-BlueField-3-rel-32_41_1000.mfa==98559af97962815fd638f170d455b3f7 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sai-SAIBuild0.0.32.0-bookworm/mlnx-sai-dbgsym_1.mlnx.SAIBuild0.0.32.0_arm64.deb==7646292e23167382c4ce4f8863de3c7f +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sai-SAIBuild0.0.32.0-bookworm/mlnx-sai_1.mlnx.SAIBuild0.0.32.0_arm64.deb==8ab7ae8eb9b93d41712bd1d42c32e01d +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//doca-cx-libs-dbgsym_2.8.0005-1_arm64.deb==27af1518c0d60218040bc89fe78198c2 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//doca-cx-libs_2.8.0005-1_arm64.deb==44b1cbdc89fb3b35c7914ea86f9d40c7 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//ibverbs-providers_2404mlnx51-1.2404066_arm64.deb==6b5357693dac809404b2fa53c79f7aa0 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//libdoca-cx-libs-dev_2.8.0005-1_arm64.deb==90d7b8a41ad570ecf2f411ca27d4ee1a +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//libgrpc-dev-dbgsym_1.39.0-1_arm64.deb==fd2d91dabc8904a504dc6e26b96305d9 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//libgrpc-dev_1.39.0-1_arm64.deb==efefb0ac891143cfb50e3848ada265ee +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//libibumad-dev_2404mlnx51-1.2404066_arm64.deb==f64f0f76f7f72d5e544ce22b0022b536 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//libibumad3_2404mlnx51-1.2404066_arm64.deb==caa3c83381f40aa962c1285368788cb7 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//libibverbs-dev_2404mlnx51-1.2404066_arm64.deb==81f2fcfd9d318c33f443cbfde6d502a5 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//libibverbs1_2404mlnx51-1.2404066_arm64.deb==35b02285ba3c4ff5fce455410e0a1561 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//librdmacm-dev_2404mlnx51-1.2404066_arm64.deb==ed4160950bda7d9a69f4a9c2046d67bc +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//librdmacm1_2404mlnx51-1.2404066_arm64.deb==e62f91e8a57db880ad78fd9d3d980a6e +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//librxpcompiler-dev_22.05.1_arm64.deb==ec65d50661b6ae02c3ae60bd500f21b7 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//mlnx-dpdk-dev_22.11.0-2404.0.2_arm64.deb==1910f292c5229203be72ebcdc26b436e +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//mlnx-dpdk_22.11.0-2404.0.2_arm64.deb==4a56b9d70bec4e76d1694142fdbf9e46 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//mlnx-iproute2_6.7.0-1.2404066_arm64.deb==8648fcae244f8a4cd20c25be5c515fa2 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//mlnx-ofed-kernel-modules-6.1.0-11-2-arm64_24.04.OFED.24.04.0.6.6.1_arm64.deb==164dcd4ea8eef326f72c4a775597968f +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//mlnx-ofed-kernel-utils_24.04.OFED.24.04.0.6.6.1-1_arm64.deb==bcf3f9bf0068233e7032e564660f2768 +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//mlnx-tools_24.04.0-1.2404066_arm64.deb==37ac907537dc61139384c8e1c8e961ea +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//rdma-core_2404mlnx51-1.2404066_arm64.deb==fc1135a6c64cc4402732261f12c64bfe +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//rxp-compiler_22.05.1_arm64.deb==dd7265c708beffaf4a1dc4cdeac28c6e +https://github.com/Mellanox/sonic-bluefield-packages/releases/download/dpu-sdk-24.7-RC4-bookworm//sdn-appliance_1.5-1mlnx1_arm64.deb==75c91f2efe5b452b4751e45f666e1daf https://github.com/Mellanox/sonic-bluefield-packages/releases/download/rshim-2.0.19-bookworm-amd64/rshim_2.0.19_amd64.deb==8128219b0328704b67def640a356df1f -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/fw-2012.3064/fw-SPC-rel-13_2012_3064-EVB.mfa==55a6024132fb9192fe4a5a1804b4526c -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/fw-2012.3064/fw-SPC2-rel-29_2012_3064-EVB.mfa==093179eb16f8f2e296369015d627af14 -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/fw-2012.3064/fw-SPC3-rel-30_2012_3064-EVB.mfa==551440f0027386cf6046df54349a262f -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/fw-2012.3064/fw-SPC4-rel-34_2012_3064-EVB.mfa==e7273975f2dbda83e270f6cc88ebd7aa -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sai-SAIBuild2311.27.0.16-bookworm-amd64/mlnx-sai-dbgsym_1.mlnx.SAIBuild2311.27.0.16_amd64.deb==351569aa94d7fe2295af2e014572afbd -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sai-SAIBuild2311.27.0.16-bookworm-amd64/mlnx-sai_1.mlnx.SAIBuild2311.27.0.16_amd64.deb==cc89e15c7c7bbdcb36a158d2c944612a -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/applibs-dev_1.mlnx.4.6.3064_amd64.deb==4afd853865eac1d4451116b450732ef6 -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/applibs_1.mlnx.4.6.3064_amd64.deb==eaa46b143a2e695cdf06fec59b5f0d19 -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/python-sdk-api_1.mlnx.4.6.3064_amd64.deb==7aaa3d3262cc29cd8578d9a9f715bf9b -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sx-acl-helper-dev_1.mlnx.4.6.3064_amd64.deb==295f02bccd4f80073813deb5ec93e0b9 -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sx-acl-helper_1.mlnx.4.6.3064_amd64.deb==65873768b4d6d01b67e5b0c78bb09e45 -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sx-complib-dev_1.mlnx.4.6.3064_amd64.deb==5aa39735e958c3680f0affca56fc789f -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sx-complib_1.mlnx.4.6.3064_amd64.deb==9dea90a36971b7acdb1dc7d728bfa58a -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sx-examples-dev_1.mlnx.4.6.3064_amd64.deb==1915fbb41d1f624b9559fd07f9af7a5d -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sx-examples_1.mlnx.4.6.3064_amd64.deb==839a814c914b5c56e6eccf6903921250 -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sx-gen-utils-dev_1.mlnx.4.6.3064_amd64.deb==1b3595cef9ec3e516b5bd9ce7d136c80 -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sx-gen-utils_1.mlnx.4.6.3064_amd64.deb==a459df151f33b83946b99ad7041f7957 -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sx-hash-calc_1.mlnx.4.6.3064_amd64.deb==6f3030a1a88ca5373b0d75ae95d8d9da -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sx-obj-desc-lib-dev_1.mlnx.4.6.3064_amd64.deb==1a8f5bbf2453c12176ae513c95f2e056 -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sx-obj-desc-lib_1.mlnx.4.6.3064_amd64.deb==8b4f006c73574b7a572c6e3aa330a4ea -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sxd-libs-dev_1.mlnx.4.6.3064_amd64.deb==16fcc34bec3389592acd2d9e9ce6fd50 -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/sxd-libs_1.mlnx.4.6.3064_amd64.deb==5728c901f56fb8b9de36e7384b17986c -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/wjh-libs-dev_1.mlnx.4.6.3064_amd64.deb==197da637515976dc561a8b11e39df40f -https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.3064-bookworm-amd64/wjh-libs_1.mlnx.4.6.3064_amd64.deb==a6a703cd188ee26e1f75d432971995b5 -https://github.com/Mellanox/Spectrum-SDK-Drivers/archive/refs/heads/4.6.3064.zip==358cd7bbec9e481663addb798517848d +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/fw-2012.4072/fw-SPC-rel-13_2012_4072-EVB.mfa==fbcd5f1192855031a6f4b678474fa2d4 +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/fw-2012.4072/fw-SPC2-rel-29_2012_4072-EVB.mfa==857c07996d406a7130b2a422dff44d7c +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/fw-2012.4072/fw-SPC3-rel-30_2012_4072-EVB.mfa==c040593a9eb8927d85b5394e246ca2d4 +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/fw-2012.4072/fw-SPC4-rel-34_2012_4072-EVB.mfa==e0ad3cdce4a6023c1f3d95e96fdb6bf9 +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sai-SAIBuild2405.28.0.33-bookworm-amd64/mlnx-sai-dbgsym_1.mlnx.SAIBuild2405.28.0.33_amd64.deb==eede8d979af5217b33428c4593caa3a8 +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sai-SAIBuild2405.28.0.33-bookworm-amd64/mlnx-sai_1.mlnx.SAIBuild2405.28.0.33_amd64.deb==3660c52815318841d74da9ad474ff63c +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/applibs-dev_1.mlnx.4.6.4072_amd64.deb==e489cc8f6362713e6768a82c91815cbb +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/applibs_1.mlnx.4.6.4072_amd64.deb==c177252e47d54cec4581db76b5b80f4e +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/python-sdk-api_1.mlnx.4.6.4072_amd64.deb==382f550c12ff7dfc1731a2585de54a5d +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sx-acl-helper-dev_1.mlnx.4.6.4072_amd64.deb==36af999a18c7b5926e6e2c95841c664e +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sx-acl-helper_1.mlnx.4.6.4072_amd64.deb==d472874d0ed322d7f5245e569e10bc08 +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sx-complib-dev_1.mlnx.4.6.4072_amd64.deb==7a64e01cf1ba022d2707f7a675169499 +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sx-complib_1.mlnx.4.6.4072_amd64.deb==7bc95e394616839afc217f2a1d2ac03b +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sx-examples-dev_1.mlnx.4.6.4072_amd64.deb==ea83758bd6b4969fffcc969681468193 +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sx-examples_1.mlnx.4.6.4072_amd64.deb==9da9afa88616eb98e03acacd24027127 +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sx-gen-utils-dev_1.mlnx.4.6.4072_amd64.deb==d29de4da3c48e5b484e0247428b4618d +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sx-gen-utils_1.mlnx.4.6.4072_amd64.deb==ed5bd1dc2ec0063e0c79617c15f05ea3 +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sx-hash-calc_1.mlnx.4.6.4072_amd64.deb==a8a92789c6ce24da6d786de9754554ad +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sx-obj-desc-lib-dev_1.mlnx.4.6.4072_amd64.deb==c1ddfa889017bccb7d8ec0011d2786dd +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sx-obj-desc-lib_1.mlnx.4.6.4072_amd64.deb==37b8a34bf28a6c4593371aa4494cfedd +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sxd-libs-dev_1.mlnx.4.6.4072_amd64.deb==579ac7857f464e9f349e0cc5af832bf1 +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/sxd-libs_1.mlnx.4.6.4072_amd64.deb==816be9fa487e49af97de64b32c98dc2e +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/wjh-libs-dev_1.mlnx.4.6.4072_amd64.deb==5e713b8aae4e9787eafb88d3f8ca94eb +https://github.com/Mellanox/Spectrum-SDK-Drivers-SONiC-Bins/releases/download/sdk-4.6.4072-bookworm-amd64/wjh-libs_1.mlnx.4.6.4072_amd64.deb==60fa0ac8a517fe4ef6e2e8d6bc75492b +https://github.com/Mellanox/Spectrum-SDK-Drivers/archive/refs/heads/4.6.4072.zip==658a0d547feb1bfa95f1ddf80b3d8b52 https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz==6f56ef28c93cee644e8c4aaaef7cfb55 https://github.com/pensando/dsc-artifacts/blob/main/docker-dpu-base.gz?raw=true==26caa959af69bc5f895dce0cd02557a8 https://github.com/pensando/dsc-artifacts/blob/main/libsai_1.10.1-0_arm64.deb?raw=true==f6f9619ecb727c0491431f3f019ac5b3 @@ -123,6 +115,10 @@ https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1-2 https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1.orig.tar.xz==6ddb13b6111f601db08fc7c72afa0263 https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py==b16e05ede6aed78f7abadae1185f487d https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/4.2.3/openapi-generator-cli-4.2.3.jar==cda48eb414c8b4585e280c3fb2656e24 +https://security.debian.org/pool/updates/main/o/openssh/openssh_9.2p1-2+deb12u3.debian.tar.xz==d964cfd6d26adb608cd507af3007831a +https://security.debian.org/pool/updates/main/o/openssh/openssh_9.2p1-2+deb12u3.dsc==d72fe6644fab4225d7ca09c4e43446a3 +https://security.debian.org/pool/updates/main/o/openssh/openssh_9.2p1.orig.tar.gz==f78b2acac4bb299629a8c58ddc3fac63 +https://sh.rustup.rs==803438f3247334c786f7ad7efebf662e https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_6.1.38-4.debian.tar.xz==c8f198a6081fd0986cfb4e602991d8e6 https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_6.1.38-4.dsc==963b0628e1019bcdefaac537de9c3505 https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_6.1.38.orig.tar.xz==ac1b8c9b011c057362e5a228d1268517 @@ -153,147 +149,150 @@ https://sonicstorage.blob.core.windows.net/public/debian/socat_1.7.4.1.orig.tar. https://sonicstorage.blob.core.windows.net/public/debian/thrift_0.11.0-4.debian.tar.xz==52ad383b97ad051f4d1d25b54aaad569 https://sonicstorage.blob.core.windows.net/public/debian/thrift_0.11.0-4.dsc==6917fe7b3ada9313be94713dd50fee7b https://sonicstorage.blob.core.windows.net/public/debian/thrift_0.11.0.orig.tar.gz==0be59730ebce071eceaf6bfdb8d3a20e -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/golang-1.19-doc_1.19.8-2+fips_all.deb==8d04d49c27e4e66fdeed7f332d5fa1fb -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/golang-1.19-go_1.19.8-2+fips_amd64.deb==0dfdcc063eab209c229a210311d40fcd -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/golang-1.19-src_1.19.8-2+fips_all.deb==b30c2fbe20c2e9308ab07cbaec0733c4 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/golang-1.19_1.19.8-2+fips_all.deb==f9f022be39abe8dd4311ed7fc6444b23 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/krb5-multidev_1.20.1-2+deb12u1+fips_amd64.deb==89be2bb2c171185756935fca6d1e1bae -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libgssapi-krb5-2_1.20.1-2+deb12u1+fips_amd64.deb==2db580ce5d076a60661fc9b0d389592d -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libgssrpc4_1.20.1-2+deb12u1+fips_amd64.deb==23755dc4befcb6c104ef72eb1458dcbd -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libk5crypto3_1.20.1-2+deb12u1+fips_amd64.deb==8ee1850d5e215a1f97133a051d2e7e01 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libkadm5clnt-mit12_1.20.1-2+deb12u1+fips_amd64.deb==bf24d179a8ee26686e0c555b064b6357 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libkadm5srv-mit12_1.20.1-2+deb12u1+fips_amd64.deb==57bc0414beffb0949801cc5fab146cce -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libkrb5-3_1.20.1-2+deb12u1+fips_amd64.deb==e89320500326e18ac97654ca91cae326 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libkrb5-dev_1.20.1-2+deb12u1+fips_amd64.deb==7bf44b5d4f0dbdd91a14d80a82176c2c -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libkrb5support0_1.20.1-2+deb12u1+fips_amd64.deb==6cad2b8416f023cee7909ab1c6744d2c -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libpython3.11-minimal_3.11.2-6+fips_amd64.deb==909774035df21141f431696d3bbf5f45 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libpython3.11-stdlib_3.11.2-6+fips_amd64.deb==dfc53d8c5da74cc8227ec0ee8f480e97 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libpython3.11_3.11.2-6+fips_amd64.deb==f0a6b4cf3dcd9be3621b55e6f099afea -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libssl-dev_3.0.11-1~deb12u2+fips_amd64.deb==d734db125775314f7c68a1f055e199f8 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libssl-doc_3.0.11-1~deb12u2+fips_all.deb==8d8f1e277a3ca66f8c0c2ec6d78c91dc -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/libssl3_3.0.11-1~deb12u2+fips_amd64.deb==8de66ba66c98883f9ff16f61a01f51eb -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/openssh-client_9.2p1-2+deb12u2+fips_amd64.deb==fe2d301a5ba39447a48d3dcbbebf4159 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/openssh-server_9.2p1-2+deb12u2+fips_amd64.deb==cd95a06d60b481259ee2f5b554d4e019 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/openssh-sftp-server_9.2p1-2+deb12u2+fips_amd64.deb==277053c92320de72968220cd2130d784 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/openssl_3.0.11-1~deb12u2+fips_amd64.deb==f3dbff5ad9c169b20ab8a806f5fd1c19 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/python3.11-minimal_3.11.2-6+fips_amd64.deb==c67134ebefa1226540880151936d2efe -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/python3.11_3.11.2-6+fips_amd64.deb==03e9bd8c303e27a5d0c879bc49ea7b5e -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/ssh_9.2p1-2+deb12u2+fips_all.deb==8edc4ee2d712151ca237166087b37565 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/amd64/symcrypt-openssl_1.4.3-preview_amd64.deb==b16eaf86673e3b7efc1dc8b5c44c154f -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/golang-1.19-doc_1.19.8-2+fips_all.deb==8d04d49c27e4e66fdeed7f332d5fa1fb -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/golang-1.19-go_1.19.8-2+fips_arm64.deb==52a872e19f52398ce5eb11d7be896b23 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/golang-1.19-src_1.19.8-2+fips_all.deb==b30c2fbe20c2e9308ab07cbaec0733c4 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/golang-1.19_1.19.8-2+fips_all.deb==f9f022be39abe8dd4311ed7fc6444b23 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/krb5-multidev_1.20.1-2+deb12u1+fips_arm64.deb==8341ce97f8bd2f7f9d2432fd3cdc5947 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libgssapi-krb5-2_1.20.1-2+deb12u1+fips_arm64.deb==b33ceccd4a8db188195c58cd6d6e4c07 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libgssrpc4_1.20.1-2+deb12u1+fips_arm64.deb==2d2ba73fc2d923b448910b28a08271e1 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libk5crypto3_1.20.1-2+deb12u1+fips_arm64.deb==64be0c39eeca71710ede0506da03a8b9 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libkadm5clnt-mit12_1.20.1-2+deb12u1+fips_arm64.deb==d78e0160dcadd47b8e1d0bc71b85ba60 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libkadm5srv-mit12_1.20.1-2+deb12u1+fips_arm64.deb==e975f668a37b70b5affa10d80da9ffed -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libkrb5-3_1.20.1-2+deb12u1+fips_arm64.deb==4d95fc32169a32fdd3b9daf7fb4cb4e3 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libkrb5-dev_1.20.1-2+deb12u1+fips_arm64.deb==ace9bf091b269f6e511f672aa2a9981d -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libkrb5support0_1.20.1-2+deb12u1+fips_arm64.deb==3aa024e10ae78c3635b869a18336dcc4 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libpython3.11-minimal_3.11.2-6+fips_arm64.deb==2cea19de4dcf96a9a64d39978ed6e12f -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libpython3.11-stdlib_3.11.2-6+fips_arm64.deb==4119c3e03ccb6d495405de4d70f487a3 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libpython3.11_3.11.2-6+fips_arm64.deb==70c9319b6fe8aa424fe9de72b72808e5 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libssl-dev_3.0.11-1~deb12u2+fips_arm64.deb==9e92e45ec063264e97aefa7608d70484 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libssl-doc_3.0.11-1~deb12u2+fips_all.deb==8d8f1e277a3ca66f8c0c2ec6d78c91dc -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/libssl3_3.0.11-1~deb12u2+fips_arm64.deb==df22ed972e763554d025984fe62c3eec -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/openssh-client_9.2p1-2+deb12u2+fips_arm64.deb==d9321471e3259c44d11846463e740e66 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/openssh-server_9.2p1-2+deb12u2+fips_arm64.deb==10639408656db910f50748e92e53d59e -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/openssh-sftp-server_9.2p1-2+deb12u2+fips_arm64.deb==7418c3551510535292b5ec0f3c26f3a5 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/openssl_3.0.11-1~deb12u2+fips_arm64.deb==51d631c0d1c328bf22b57b4ae36ccf97 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/python3.11-minimal_3.11.2-6+fips_arm64.deb==2af762681ef81bb6fc4ad8aed438aa1c -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/python3.11_3.11.2-6+fips_arm64.deb==78386bb5b012dc8eb57781be41a0bd3e -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/ssh_9.2p1-2+deb12u2+fips_all.deb==8edc4ee2d712151ca237166087b37565 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/arm64/symcrypt-openssl_1.4.3-preview_arm64.deb==c737cb3251c3e59042e48b6687359aca -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/golang-1.19-doc_1.19.8-2+fips_all.deb==8d04d49c27e4e66fdeed7f332d5fa1fb -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/golang-1.19-go_1.19.8-2+fips_armhf.deb==f365e2ec1ec60abebee33eb9b3dcd380 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/golang-1.19-src_1.19.8-2+fips_all.deb==b30c2fbe20c2e9308ab07cbaec0733c4 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/golang-1.19_1.19.8-2+fips_all.deb==f9f022be39abe8dd4311ed7fc6444b23 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/krb5-multidev_1.20.1-2+deb12u1+fips_armhf.deb==b295653312b2abc93989aeb7dbb7f39d -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libgssapi-krb5-2_1.20.1-2+deb12u1+fips_armhf.deb==56bddcc75e0f5a1cff534f57afb55af8 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libgssrpc4_1.20.1-2+deb12u1+fips_armhf.deb==4863c8b91418c0f54b9a90a3d59323ff -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libk5crypto3_1.20.1-2+deb12u1+fips_armhf.deb==d9e70bcd1c510df543bb95ed4acf9e2a -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libkadm5clnt-mit12_1.20.1-2+deb12u1+fips_armhf.deb==16255322d48b422191e7c2819882db19 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libkadm5srv-mit12_1.20.1-2+deb12u1+fips_armhf.deb==65f3fd49882d9675e41089ff2783c9eb -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libkrb5-3_1.20.1-2+deb12u1+fips_armhf.deb==c8b14969303da2ae486b724a87b10ad9 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libkrb5-dev_1.20.1-2+deb12u1+fips_armhf.deb==f6a3a165388d1781152c2bc8dfdf71fd -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libkrb5support0_1.20.1-2+deb12u1+fips_armhf.deb==afadb629c44242b2d4b90f5c2f0fd2f1 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libpython3.11-minimal_3.11.2-6+fips_armhf.deb==a107f4d8fe43dfd63c71ff349fa2613b -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libpython3.11-stdlib_3.11.2-6+fips_armhf.deb==c4d9f764b0bfc283169e713d9de38a78 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libpython3.11_3.11.2-6+fips_armhf.deb==b10ed820e4cf9f89b33e61d798c082f6 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libssl-dev_3.0.11-1~deb12u2+fips_armhf.deb==76e7ec8db99b3d7ec9edb1f10c1929a4 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libssl-doc_3.0.11-1~deb12u2+fips_all.deb==8d8f1e277a3ca66f8c0c2ec6d78c91dc -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/libssl3_3.0.11-1~deb12u2+fips_armhf.deb==beeb04ed1d387a81f3117bc05d896d98 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/openssh-client_9.2p1-2+deb12u2+fips_armhf.deb==7ad8166f4835be8e6489fdbac5a310a6 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/openssh-server_9.2p1-2+deb12u2+fips_armhf.deb==eb2f8f7e9d8c47e065a6a877625f071a -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/openssh-sftp-server_9.2p1-2+deb12u2+fips_armhf.deb==2c70ed3d0423bf442a53f09e6404884b -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/openssl_3.0.11-1~deb12u2+fips_armhf.deb==ff644075bc7408984b1218e718951d02 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/python3.11-minimal_3.11.2-6+fips_armhf.deb==7aa42c9564c7be0776d1f7c532e5a15c -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/python3.11_3.11.2-6+fips_armhf.deb==d173b9f1e9f49f40b637e13ee9ba9b5a -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/ssh_9.2p1-2+deb12u2+fips_all.deb==8edc4ee2d712151ca237166087b37565 -https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-preview/armhf/symcrypt-openssl_1.4.3-preview_armhf.deb==ba82be158901a4165210587b335e4ca8 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==72ead09139135d4ecd91b76c89128567 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/golang-1.15-go_1.15.15-1~deb11u4+fips_amd64.deb==145e103357a915cc759cc93de602b631 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/golang-1.15-src_1.15.15-1~deb11u4+fips_amd64.deb==1c1a46d5599be92777702643c37d5751 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==847bc1fc5ce9c8ebae5176947ab34d30 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/krb5-multidev_1.18.3-6+deb11u4+fips_amd64.deb==41c7aecaf738ceb8e0348b9420d0aa3f -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libgssapi-krb5-2_1.18.3-6+deb11u4+fips_amd64.deb==9ab263ae9192bf4c964ea3ad86012c9a -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libgssrpc4_1.18.3-6+deb11u4+fips_amd64.deb==4913523ed341663cd9a8bd2ea0e5c64a -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libk5crypto3_1.18.3-6+deb11u4+fips_amd64.deb==5c89f642c4265a2f53d8788f93b37aaf -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libkadm5clnt-mit12_1.18.3-6+deb11u4+fips_amd64.deb==19a7a6eeae8387d4114a6b76ff5fc7c8 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libkadm5srv-mit12_1.18.3-6+deb11u4+fips_amd64.deb==2bdb2e358091302bb66f9208cf082807 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libkrb5-3_1.18.3-6+deb11u4+fips_amd64.deb==ba2b9c93e084c442cb1495eef5979b05 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libkrb5-dev_1.18.3-6+deb11u4+fips_amd64.deb==6ffd25f46089ad674fe20f074454297c -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libkrb5support0_1.18.3-6+deb11u4+fips_amd64.deb==851abebe415c61f98bfc5024ef2e54fb -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libpython3.9-minimal_3.9.2-1+fips_amd64.deb==411d2092cd614dd187bdc0ec0bb9598f -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libpython3.9-stdlib_3.9.2-1+fips_amd64.deb==050267fce1204d8accd8b551a30a66e6 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libpython3.9_3.9.2-1+fips_amd64.deb==c405132eacaf059c7c903f853d48be7e -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libssl-dev_1.1.1n-0+deb11u5+fips_amd64.deb==7deccb6cb0197bd9dc257d54505533cf -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libssl-doc_1.1.1n-0+deb11u5+fips_all.deb==3ac7462c370d85e42c03b11d26f35016 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/libssl1.1_1.1.1n-0+deb11u5+fips_amd64.deb==6a4505b82957d711e983e03364275521 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/openssh-client_8.4p1-5+deb11u2+fips_amd64.deb==1fb734b040398b0fb9c674385253b993 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/openssh-server_8.4p1-5+deb11u2+fips_amd64.deb==8ec9f1fbfedd6c36312c5181d9950b58 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/openssh-sftp-server_8.4p1-5+deb11u2+fips_amd64.deb==02e8be0633aff33497655261256eadca -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/openssl_1.1.1n-0+deb11u5+fips_amd64.deb==ee086d7e1fb0cfd36513ec242381af53 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==b6a0f0d84c8bec43fe49b12092bf3209 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/python3.9_3.9.2-1+fips_amd64.deb==30be224443931a2a3428aa270b87384a -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/ssh_8.4p1-5+deb11u2+fips_all.deb==d1f50482046b4b4e39fd2a0273f5ecef -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/amd64/symcrypt-openssl_0.12_amd64.deb==46411c8f45a1382af5d3ee8ef7f150aa -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==72ead09139135d4ecd91b76c89128567 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/golang-1.15-go_1.15.15-1~deb11u4+fips_arm64.deb==b59f315800ca2ec31de79136dfb8979d -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/golang-1.15-src_1.15.15-1~deb11u4+fips_arm64.deb==0038c68ed1e3adb1b43434af81cff678 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==847bc1fc5ce9c8ebae5176947ab34d30 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/krb5-multidev_1.18.3-6+deb11u4+fips_arm64.deb==53130dd865aeedf3f99cc0deca4ae50a -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libgssapi-krb5-2_1.18.3-6+deb11u4+fips_arm64.deb==49255677e3c149d29d059aa2af18747a -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libgssrpc4_1.18.3-6+deb11u4+fips_arm64.deb==1f939eb23261667a9e920d1acb08969c -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libk5crypto3_1.18.3-6+deb11u4+fips_arm64.deb==5b7eb6aa93b20949d7422ad25fe73549 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libkadm5clnt-mit12_1.18.3-6+deb11u4+fips_arm64.deb==c5d5a81770b64a33d6d87f288fdb974c -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libkadm5srv-mit12_1.18.3-6+deb11u4+fips_arm64.deb==267114332521c5de4c88de464fc098de -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libkrb5-3_1.18.3-6+deb11u4+fips_arm64.deb==ce88c2527f79baa4cd29c71580e57807 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libkrb5-dev_1.18.3-6+deb11u4+fips_arm64.deb==6af1cfd53e8e55b5619365d4a462ee35 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libkrb5support0_1.18.3-6+deb11u4+fips_arm64.deb==86768f22a3d883d9d19a814e075a9a1b -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libpython3.9-minimal_3.9.2-1+fips_arm64.deb==7e6ac5f9bce1ecd59532ed669040436d -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libpython3.9-stdlib_3.9.2-1+fips_arm64.deb==60615729bf2eada00dab3245c986bb4a -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libpython3.9_3.9.2-1+fips_arm64.deb==edae5c269e2c401873e7cff3d4f93a7a -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libssl-dev_1.1.1n-0+deb11u5+fips_arm64.deb==2116b0e949a521b02098f01aee5a33d4 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libssl-doc_1.1.1n-0+deb11u5+fips_all.deb==3ac7462c370d85e42c03b11d26f35016 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/libssl1.1_1.1.1n-0+deb11u5+fips_arm64.deb==a6a6a6f2d23d91398f44570da6e2e80c -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/openssh-client_8.4p1-5+deb11u2+fips_arm64.deb==b30c745ca94e392740c67225802e9068 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/openssh-server_8.4p1-5+deb11u2+fips_arm64.deb==8ab6d9e3bac9d486bda5664e40f634ef -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/openssh-sftp-server_8.4p1-5+deb11u2+fips_arm64.deb==73c51fa8f165a014571c2bdbd843c517 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/openssl_1.1.1n-0+deb11u5+fips_arm64.deb==5c16b501e97678e7f55c616afa6423bb -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/python3.9-minimal_3.9.2-1+fips_arm64.deb==846cdb2b1b7a5677699128021c4a40f3 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/python3.9_3.9.2-1+fips_arm64.deb==4d6307dabcd3060235d6188cfa0346b8 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/ssh_8.4p1-5+deb11u2+fips_all.deb==d1f50482046b4b4e39fd2a0273f5ecef -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/arm64/symcrypt-openssl_0.12_arm64.deb==d59b59b4d157feedeaa27a23b35007b4 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/armhf/golang-1.15-go_1.15.15-1~deb11u4+fips_armhf.deb==62c200bd7bf79df11cfdace12a351a73 -https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.12/armhf/golang-1.15-src_1.15.15-1~deb11u4+fips_armhf.deb==644145b4473d863edc1aaf98dfc92acf +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/golang-1.19-doc_1.19.8-2+fips_all.deb==8d04d49c27e4e66fdeed7f332d5fa1fb +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/golang-1.19-go_1.19.8-2+fips_amd64.deb==0dfdcc063eab209c229a210311d40fcd +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/golang-1.19-src_1.19.8-2+fips_all.deb==b30c2fbe20c2e9308ab07cbaec0733c4 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/golang-1.19_1.19.8-2+fips_all.deb==f9f022be39abe8dd4311ed7fc6444b23 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/krb5-multidev_1.20.1-2+deb12u1+fips_amd64.deb==89be2bb2c171185756935fca6d1e1bae +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libgssapi-krb5-2_1.20.1-2+deb12u1+fips_amd64.deb==2db580ce5d076a60661fc9b0d389592d +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libgssrpc4_1.20.1-2+deb12u1+fips_amd64.deb==23755dc4befcb6c104ef72eb1458dcbd +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libk5crypto3_1.20.1-2+deb12u1+fips_amd64.deb==8ee1850d5e215a1f97133a051d2e7e01 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libkadm5clnt-mit12_1.20.1-2+deb12u1+fips_amd64.deb==bf24d179a8ee26686e0c555b064b6357 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libkadm5srv-mit12_1.20.1-2+deb12u1+fips_amd64.deb==57bc0414beffb0949801cc5fab146cce +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libkrb5-3_1.20.1-2+deb12u1+fips_amd64.deb==e89320500326e18ac97654ca91cae326 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libkrb5-dev_1.20.1-2+deb12u1+fips_amd64.deb==7bf44b5d4f0dbdd91a14d80a82176c2c +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libkrb5support0_1.20.1-2+deb12u1+fips_amd64.deb==6cad2b8416f023cee7909ab1c6744d2c +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libpython3.11-minimal_3.11.2-6+fips_amd64.deb==9e21b46a8529b51bc97dd2b1f2c2e2c0 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libpython3.11-stdlib_3.11.2-6+fips_amd64.deb==17cb4e5d76965eb21fbc244ca302323a +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libpython3.11_3.11.2-6+fips_amd64.deb==9395b784a77eb8b442ed7d5f606835c1 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libssl-dev_3.0.11-1~deb12u2+fips_amd64.deb==d4bf4601aee5d87dc82b22f302df4e55 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libssl-doc_3.0.11-1~deb12u2+fips_all.deb==8d8f1e277a3ca66f8c0c2ec6d78c91dc +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/libssl3_3.0.11-1~deb12u2+fips_amd64.deb==c33312c391c848902c3b94cb233c24e7 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/openssh-client_9.2p1-2+deb12u3+fips_amd64.deb==17f8f159c38c46b31cd40cca40add430 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/openssh-server_9.2p1-2+deb12u3+fips_amd64.deb==45913cd320a3f01016155b78c94ccc79 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/openssh-sftp-server_9.2p1-2+deb12u3+fips_amd64.deb==4002b8e22427146692eb311c1232e46b +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/openssl_3.0.11-1~deb12u2+fips_amd64.deb==f3dbff5ad9c169b20ab8a806f5fd1c19 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/python3.11-minimal_3.11.2-6+fips_amd64.deb==3341692466af26c7d08eac898e6963ec +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/python3.11_3.11.2-6+fips_amd64.deb==03e9bd8c303e27a5d0c879bc49ea7b5e +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/ssh_9.2p1-2+deb12u3+fips_all.deb==bced861a53845b3d3a45e48a032a3ca1 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/amd64/symcrypt-openssl_1.4.3-1_amd64.deb==938f05d226189822a9987bafff12065b +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/golang-1.19-doc_1.19.8-2+fips_all.deb==8d04d49c27e4e66fdeed7f332d5fa1fb +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/golang-1.19-go_1.19.8-2+fips_arm64.deb==52a872e19f52398ce5eb11d7be896b23 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/golang-1.19-src_1.19.8-2+fips_all.deb==b30c2fbe20c2e9308ab07cbaec0733c4 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/golang-1.19_1.19.8-2+fips_all.deb==f9f022be39abe8dd4311ed7fc6444b23 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/krb5-multidev_1.20.1-2+deb12u1+fips_arm64.deb==8341ce97f8bd2f7f9d2432fd3cdc5947 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libgssapi-krb5-2_1.20.1-2+deb12u1+fips_arm64.deb==b33ceccd4a8db188195c58cd6d6e4c07 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libgssrpc4_1.20.1-2+deb12u1+fips_arm64.deb==2d2ba73fc2d923b448910b28a08271e1 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libk5crypto3_1.20.1-2+deb12u1+fips_arm64.deb==64be0c39eeca71710ede0506da03a8b9 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libkadm5clnt-mit12_1.20.1-2+deb12u1+fips_arm64.deb==d78e0160dcadd47b8e1d0bc71b85ba60 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libkadm5srv-mit12_1.20.1-2+deb12u1+fips_arm64.deb==e975f668a37b70b5affa10d80da9ffed +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libkrb5-3_1.20.1-2+deb12u1+fips_arm64.deb==4d95fc32169a32fdd3b9daf7fb4cb4e3 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libkrb5-dev_1.20.1-2+deb12u1+fips_arm64.deb==ace9bf091b269f6e511f672aa2a9981d +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libkrb5support0_1.20.1-2+deb12u1+fips_arm64.deb==3aa024e10ae78c3635b869a18336dcc4 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libpython3.11-minimal_3.11.2-6+fips_arm64.deb==2cea19de4dcf96a9a64d39978ed6e12f +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libpython3.11-stdlib_3.11.2-6+fips_arm64.deb==d534986d1529f01a3d4fabf89164d428 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libpython3.11_3.11.2-6+fips_arm64.deb==70c9319b6fe8aa424fe9de72b72808e5 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libssl-dev_3.0.11-1~deb12u2+fips_arm64.deb==9e92e45ec063264e97aefa7608d70484 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libssl-doc_3.0.11-1~deb12u2+fips_all.deb==8d8f1e277a3ca66f8c0c2ec6d78c91dc +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/libssl3_3.0.11-1~deb12u2+fips_arm64.deb==df22ed972e763554d025984fe62c3eec +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/openssh-client_9.2p1-2+deb12u3+fips_arm64.deb==3cedf147d5f14f1d726a68c7c8c12aed +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/openssh-server_9.2p1-2+deb12u3+fips_arm64.deb==b179289a8b277c83b8bd4acc5567e400 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/openssh-sftp-server_9.2p1-2+deb12u3+fips_arm64.deb==90094a4b34aec266f8f826c7de44a3c9 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/openssl_3.0.11-1~deb12u2+fips_arm64.deb==51d631c0d1c328bf22b57b4ae36ccf97 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/python3.11-minimal_3.11.2-6+fips_arm64.deb==1ad48f592250cf70070e7103e5b01543 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/python3.11_3.11.2-6+fips_arm64.deb==78386bb5b012dc8eb57781be41a0bd3e +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/ssh_9.2p1-2+deb12u3+fips_all.deb==bced861a53845b3d3a45e48a032a3ca1 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/arm64/symcrypt-openssl_1.4.3-1_arm64.deb==5b3b272a2b0730252bc822bda0e0dc19 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/golang-1.19-doc_1.19.8-2+fips_all.deb==8d04d49c27e4e66fdeed7f332d5fa1fb +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/golang-1.19-go_1.19.8-2+fips_armhf.deb==f365e2ec1ec60abebee33eb9b3dcd380 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/golang-1.19-src_1.19.8-2+fips_all.deb==b30c2fbe20c2e9308ab07cbaec0733c4 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/golang-1.19_1.19.8-2+fips_all.deb==f9f022be39abe8dd4311ed7fc6444b23 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/krb5-multidev_1.20.1-2+deb12u1+fips_armhf.deb==b295653312b2abc93989aeb7dbb7f39d +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libgssapi-krb5-2_1.20.1-2+deb12u1+fips_armhf.deb==56bddcc75e0f5a1cff534f57afb55af8 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libgssrpc4_1.20.1-2+deb12u1+fips_armhf.deb==4863c8b91418c0f54b9a90a3d59323ff +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libk5crypto3_1.20.1-2+deb12u1+fips_armhf.deb==d9e70bcd1c510df543bb95ed4acf9e2a +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libkadm5clnt-mit12_1.20.1-2+deb12u1+fips_armhf.deb==16255322d48b422191e7c2819882db19 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libkadm5srv-mit12_1.20.1-2+deb12u1+fips_armhf.deb==65f3fd49882d9675e41089ff2783c9eb +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libkrb5-3_1.20.1-2+deb12u1+fips_armhf.deb==c8b14969303da2ae486b724a87b10ad9 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libkrb5-dev_1.20.1-2+deb12u1+fips_armhf.deb==f6a3a165388d1781152c2bc8dfdf71fd +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libkrb5support0_1.20.1-2+deb12u1+fips_armhf.deb==afadb629c44242b2d4b90f5c2f0fd2f1 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libpython3.11-minimal_3.11.2-6+fips_armhf.deb==a107f4d8fe43dfd63c71ff349fa2613b +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libpython3.11-stdlib_3.11.2-6+fips_armhf.deb==30e5328605c4ff12e3195f8e85bf03b9 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libpython3.11_3.11.2-6+fips_armhf.deb==b10ed820e4cf9f89b33e61d798c082f6 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libssl-dev_3.0.11-1~deb12u2+fips_armhf.deb==76e7ec8db99b3d7ec9edb1f10c1929a4 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libssl-doc_3.0.11-1~deb12u2+fips_all.deb==8d8f1e277a3ca66f8c0c2ec6d78c91dc +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/libssl3_3.0.11-1~deb12u2+fips_armhf.deb==beeb04ed1d387a81f3117bc05d896d98 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/openssh-client_9.2p1-2+deb12u3+fips_armhf.deb==0e28eea092a25e4068a1b4ce02af3a07 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/openssh-server_9.2p1-2+deb12u3+fips_armhf.deb==24d6015db88f333ceaf9841febc44b05 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/openssh-sftp-server_9.2p1-2+deb12u3+fips_armhf.deb==c0625ca5434dc6c3a305c387784647f4 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/openssl_3.0.11-1~deb12u2+fips_armhf.deb==ff644075bc7408984b1218e718951d02 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/python3.11-minimal_3.11.2-6+fips_armhf.deb==91a59eebe0f96dec260bdf19dfb420a5 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/python3.11_3.11.2-6+fips_armhf.deb==d173b9f1e9f49f40b637e13ee9ba9b5a +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/ssh_9.2p1-2+deb12u3+fips_all.deb==bced861a53845b3d3a45e48a032a3ca1 +https://sonicstorage.blob.core.windows.net/public/fips/bookworm/1.4.3-1/armhf/symcrypt-openssl_1.4.3-1_armhf.deb==f21b5e0ac121b94933fb8f39c4cd20b2 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==72ead09139135d4ecd91b76c89128567 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/golang-1.15-go_1.15.15-1~deb11u4+fips_amd64.deb==145e103357a915cc759cc93de602b631 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/golang-1.15-src_1.15.15-1~deb11u4+fips_amd64.deb==1c1a46d5599be92777702643c37d5751 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==847bc1fc5ce9c8ebae5176947ab34d30 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/krb5-multidev_1.18.3-6+deb11u5+fips_amd64.deb==9eb0c26c9c7bd9eec9add9ddb6a57bf1 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libgssapi-krb5-2_1.18.3-6+deb11u5+fips_amd64.deb==d0d9c85b296b5563a429ed064e1cc257 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libgssrpc4_1.18.3-6+deb11u5+fips_amd64.deb==67f3f55fdd10e5a624bb5a845c33b1cb +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libk5crypto3_1.18.3-6+deb11u5+fips_amd64.deb==2ed232b59a46f7b6738e025a65b8c010 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libkadm5clnt-mit12_1.18.3-6+deb11u5+fips_amd64.deb==86acef261636d537fd8ebf6ce28f7dc0 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libkadm5srv-mit12_1.18.3-6+deb11u5+fips_amd64.deb==646b68e63a5b6f8330b04fab114f99cd +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libkrb5-3_1.18.3-6+deb11u5+fips_amd64.deb==ea7e4a309d6ed97ca1c4a48d5ddfb9a3 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libkrb5-dev_1.18.3-6+deb11u5+fips_amd64.deb==401f015291cd9e3a2c345eebddf34721 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libkrb5support0_1.18.3-6+deb11u5+fips_amd64.deb==b71b54d0955d6c80a50b003b72361bb5 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libpython3.9-minimal_3.9.2-1+fips_amd64.deb==12667ba9da299c70ee70b77a3a64abe9 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libpython3.9-stdlib_3.9.2-1+fips_amd64.deb==e4210ec6ad5c77c135963476e4ca987b +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libpython3.9_3.9.2-1+fips_amd64.deb==c405132eacaf059c7c903f853d48be7e +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libssl-dev_1.1.1n-0+deb11u5+fips_amd64.deb==7deccb6cb0197bd9dc257d54505533cf +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libssl-doc_1.1.1n-0+deb11u5+fips_all.deb==3ac7462c370d85e42c03b11d26f35016 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/libssl1.1_1.1.1n-0+deb11u5+fips_amd64.deb==6a4505b82957d711e983e03364275521 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/openssh-client_8.4p1-5+deb11u2+fips_amd64.deb==1fb734b040398b0fb9c674385253b993 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/openssh-server_8.4p1-5+deb11u2+fips_amd64.deb==8ec9f1fbfedd6c36312c5181d9950b58 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/openssh-sftp-server_8.4p1-5+deb11u2+fips_amd64.deb==02e8be0633aff33497655261256eadca +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/openssl_1.1.1n-0+deb11u5+fips_amd64.deb==ee086d7e1fb0cfd36513ec242381af53 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==f32fecabfdf2fd63a089af8a369d6595 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/python3.9_3.9.2-1+fips_amd64.deb==30be224443931a2a3428aa270b87384a +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/ssh_8.4p1-5+deb11u2+fips_all.deb==d1f50482046b4b4e39fd2a0273f5ecef +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/amd64/symcrypt-openssl_0.13_amd64.deb==e834c681609b5cf1ab4707083185831d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==72ead09139135d4ecd91b76c89128567 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/golang-1.15-go_1.15.15-1~deb11u4+fips_arm64.deb==b59f315800ca2ec31de79136dfb8979d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/golang-1.15-src_1.15.15-1~deb11u4+fips_arm64.deb==0038c68ed1e3adb1b43434af81cff678 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==847bc1fc5ce9c8ebae5176947ab34d30 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/krb5-multidev_1.18.3-6+deb11u5+fips_arm64.deb==d43272032d876de0b89b46733d2c3175 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libgssapi-krb5-2_1.18.3-6+deb11u5+fips_arm64.deb==4ed07c27af219c18252afb76edc29f71 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libgssrpc4_1.18.3-6+deb11u5+fips_arm64.deb==97103b9f05d5146716a2daaee86a0630 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libk5crypto3_1.18.3-6+deb11u5+fips_arm64.deb==e91928ddd8a6a421977bc2795d51e18a +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libkadm5clnt-mit12_1.18.3-6+deb11u5+fips_arm64.deb==9804ba8c37b4c19f010f8098c25fab31 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libkadm5srv-mit12_1.18.3-6+deb11u5+fips_arm64.deb==5a8c6911a733213c525ce53259f2c9c6 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libkrb5-3_1.18.3-6+deb11u5+fips_arm64.deb==8a58b2ea63935c87c1d2002704288f90 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libkrb5-dev_1.18.3-6+deb11u5+fips_arm64.deb==ace98b760ba3dda467c8d9c82f8c1226 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libkrb5support0_1.18.3-6+deb11u5+fips_arm64.deb==53b0013f0dd89dd9b5a5fa06ff260dbc +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libpython3.9-minimal_3.9.2-1+fips_arm64.deb==c6f2c45ed249e385993bd173ba1da5ed +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libpython3.9-stdlib_3.9.2-1+fips_arm64.deb==848ac1cd3b379f99da90da095a98212d +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libpython3.9_3.9.2-1+fips_arm64.deb==edae5c269e2c401873e7cff3d4f93a7a +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libssl-dev_1.1.1n-0+deb11u5+fips_arm64.deb==2116b0e949a521b02098f01aee5a33d4 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libssl-doc_1.1.1n-0+deb11u5+fips_all.deb==3ac7462c370d85e42c03b11d26f35016 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/libssl1.1_1.1.1n-0+deb11u5+fips_arm64.deb==a6a6a6f2d23d91398f44570da6e2e80c +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/openssh-client_8.4p1-5+deb11u2+fips_arm64.deb==b30c745ca94e392740c67225802e9068 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/openssh-server_8.4p1-5+deb11u2+fips_arm64.deb==8ab6d9e3bac9d486bda5664e40f634ef +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/openssh-sftp-server_8.4p1-5+deb11u2+fips_arm64.deb==73c51fa8f165a014571c2bdbd843c517 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/openssl_1.1.1n-0+deb11u5+fips_arm64.deb==5c16b501e97678e7f55c616afa6423bb +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/python3.9-minimal_3.9.2-1+fips_arm64.deb==146da01b9364f54ec022b77f2502cb1c +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/python3.9_3.9.2-1+fips_arm64.deb==4d6307dabcd3060235d6188cfa0346b8 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/ssh_8.4p1-5+deb11u2+fips_all.deb==d1f50482046b4b4e39fd2a0273f5ecef +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/arm64/symcrypt-openssl_0.13_arm64.deb==596652c7d5df5981844f5236d5615d40 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/armhf/golang-1.15-go_1.15.15-1~deb11u4+fips_armhf.deb==62c200bd7bf79df11cfdace12a351a73 +https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.13/armhf/golang-1.15-src_1.15.15-1~deb11u4+fips_armhf.deb==644145b4473d863edc1aaf98dfc92acf https://sonicstorage.blob.core.windows.net/public/onie/onie-recovery-x86_64-kvm_x86_64-r0.iso==54e11e450a461b1f4ae39c3ce3f15eff https://sonicstorage.blob.core.windows.net/public/onie/onie-recovery-x86_64-kvm_x86_64_4_asic-r0.iso==1d8b8d3fa37f842d0184b5205be22be9 https://sonicstorage.blob.core.windows.net/public/onie/onie-recovery-x86_64-kvm_x86_64_6_asic-r0.iso==58494305d4ac201daedf9364a1018a1b https://sonicstorage.blob.core.windows.net/public/sai/bcmpai/REL_3.11/3.11/libsaibroncos_3.11_amd64.deb==6e21a16126e833516a9659d4c35c284e +https://static.rust-lang.org/rustup/dist/aarch64-unknown-linux-gnu/rustup-init==21b27f4a24c066ff3c4158998d4f794b +https://static.rust-lang.org/rustup/dist/armv7-unknown-linux-gnueabihf/rustup-init==13b8d6e5edef35414c2e28db31576656 +https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init==eedd8a5a6ebbc921301660acb99646a5 https://storage.googleapis.com/golang/go1.15.15.linux-amd64.tar.gz==b75227438c6129b5013da053b3aa3f38 https://storage.googleapis.com/golang/go1.15.15.linux-arm64.tar.gz==6d721146a9195592d92a80cf27d475f9 https://storage.googleapis.com/golang/go1.15.15.linux-armv6l.tar.gz==23d140bbeedc978b954de1a199a22bdb diff --git a/files/build/versions/dockers/docker-base-bookworm/versions-deb-bookworm b/files/build/versions/dockers/docker-base-bookworm/versions-deb-bookworm index 023141a8fb42..dcf93868ad9f 100644 --- a/files/build/versions/dockers/docker-base-bookworm/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-base-bookworm/versions-deb-bookworm @@ -1,5 +1,5 @@ ca-certificates==20230311 -curl==7.88.1-10+deb12u5 +curl==7.88.1-10+deb12u6 iproute2==6.1.0-3 jq==1.6-2.1 less==590-2.1~deb12u2 @@ -8,7 +8,7 @@ libbpf1==1:1.1.0-1 libbrotli1==1.0.9-2+b6 libbsd0==0.11.7-2 libcap2-bin==1:2.66-4 -libcurl4==7.88.1-10+deb12u5 +libcurl4==7.88.1-10+deb12u6 libdaemon0==0.14-7.1 libdbus-1-3==1.14.10-1~deb12u1 libelf1==0.188-2.1 @@ -17,14 +17,14 @@ libexpat1==2.5.0-1 libfastjson4==1.2304.0-1 libgdbm-compat4==1.23-3 libgdbm6==1.23-3 -libgssapi-krb5-2==1.20.1-2+deb12u1 +libgssapi-krb5-2==1.20.1-2+deb12u2 libjansson4==2.14-2 libjemalloc2==5.3.0-1 libjq1==1.6-2.1 libk5crypto3==1.20.1-2+deb12u1+fips libkeyutils1==1.6.3-2 -libkrb5-3==1.20.1-2+deb12u1 -libkrb5support0==1.20.1-2+deb12u1 +libkrb5-3==1.20.1-2+deb12u2 +libkrb5support0==1.20.1-2+deb12u2 libldap-2.5-0==2.5.13+dfsg-5 liblognorm5==2.0.6-4 liblzf1==3.6-3 @@ -39,8 +39,8 @@ libpgm-5.3-0==5.3.128~dfsg-2 libproc2-0==2:4.0.2-3 libpsl5==0.21.2-1 libpython3-stdlib==3.11.2-1+b1 -libpython3.11-minimal==3.11.2-6 -libpython3.11-stdlib==3.11.2-6 +libpython3.11-minimal==3.11.2-6+deb12u2 +libpython3.11-stdlib==3.11.2-6+deb12u2 libreadline8==8.2-1.3 librtmp1==2.4+20151223.gitfa8646d.1-2+b2 libsasl2-2==2.1.28+dfsg-10 @@ -61,7 +61,7 @@ openssl==3.0.11-1~deb12u2+fips perl==5.36.0-7+deb12u1 perl-modules-5.36==5.36.0-7+deb12u1 procps==2:4.0.2-3 -python-is-python3==3.11.1-3 +python-is-python3==3.11.2-1+deb12u1 python3==3.11.2-1+b1 python3-distutils==3.11.2-3 python3-lib2to3==3.11.2-3 @@ -69,8 +69,8 @@ python3-minimal==3.11.2-1+b1 python3-pkg-resources==66.1.1-1 python3-setuptools==66.1.1-1 python3-wheel==0.38.4-2 -python3.11==3.11.2-6 -python3.11-minimal==3.11.2-6 +python3.11==3.11.2-6+deb12u2 +python3.11-minimal==3.11.2-6+deb12u2 readline-common==8.2-1.3 redis-tools==5:7.0.15-1~deb12u1 rsyslog==8.2302.0-1 diff --git a/files/build/versions/dockers/docker-base-bookworm/versions-py3 b/files/build/versions/dockers/docker-base-bookworm/versions-py3 index 13275869ad3c..0b0379415118 100644 --- a/files/build/versions/dockers/docker-base-bookworm/versions-py3 +++ b/files/build/versions/dockers/docker-base-bookworm/versions-py3 @@ -2,10 +2,10 @@ async-timeout==4.0.3 j2cli==0.3.10 jinja2==3.1.4 markupsafe==2.1.5 -pip==24.0 +pip==24.2 python-lzf==0.2.4 rdbtools==0.1.15 -redis==5.0.4 +redis==5.0.8 setuptools==66.1.1 supervisor==4.2.5 supervisord-dependent-startup==1.4.0 diff --git a/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye index f27b2dcab27a..2195c07ddbef 100644 --- a/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-base-bullseye/versions-deb-bullseye @@ -1,5 +1,5 @@ ca-certificates==20210119 -curl==7.74.0-1.3+deb11u11 +curl==7.74.0-1.3+deb11u12 iproute2==5.10.0-4 jq==1.6-2.1 less==551-2+deb11u2 @@ -9,7 +9,7 @@ libbrotli1==1.0.9-2+b2 libbsd0==0.11.3-1+deb11u1 libcap2==1:2.44-1 libcap2-bin==1:2.44-1 -libcurl4==7.74.0-1.3+deb11u11 +libcurl4==7.74.0-1.3+deb11u12 libdaemon0==0.14-7.1 libdbus-1-3==1.12.28-0+deb11u1 libelf1==0.183-1 @@ -21,7 +21,7 @@ libgdbm6==1.19-2 libjansson4==2.13.1-1.1 libjemalloc2==5.2.1-3 libjq1==1.6-2.1 -libk5crypto3==1.18.3-6+deb11u4+fips +libk5crypto3==1.18.3-6+deb11u5+fips libldap-2.4-2==2.4.57+dfsg-3+deb11u1 liblognorm5==2.0.5-1.1 liblua5.1-0==5.1.5-8.1+b3 @@ -47,7 +47,7 @@ libsasl2-2==2.1.27+dfsg-2.1+deb11u1 libsasl2-modules-db==2.1.27+dfsg-2.1+deb11u1 libsodium23==1.0.18-1 libsqlite3-0==3.34.1-3 -libssh2-1==1.9.0-2 +libssh2-1==1.9.0-2+deb11u1 libssl-dev==1.1.1n-0+deb11u5+fips libssl1.1==1.1.1n-0+deb11u5+fips libwrap0==7.6.q-31 diff --git a/files/build/versions/dockers/docker-base-bullseye/versions-py3 b/files/build/versions/dockers/docker-base-bullseye/versions-py3 index c927d101229d..2b94f59fbdd4 100644 --- a/files/build/versions/dockers/docker-base-bullseye/versions-py3 +++ b/files/build/versions/dockers/docker-base-bullseye/versions-py3 @@ -2,10 +2,10 @@ async-timeout==4.0.3 j2cli==0.3.10 jinja2==3.1.4 markupsafe==2.1.5 -pip==24.0 +pip==24.2 python-lzf==0.2.4 rdbtools==0.1.15 -redis==5.0.4 +redis==5.0.8 setuptools==49.6.0 supervisor==4.2.1 supervisord-dependent-startup==1.4.0 diff --git a/files/build/versions/dockers/docker-config-engine-bookworm/versions-deb-bookworm b/files/build/versions/dockers/docker-config-engine-bookworm/versions-deb-bookworm index 4cbe81273067..0455e42e34d6 100644 --- a/files/build/versions/dockers/docker-config-engine-bookworm/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-config-engine-bookworm/versions-deb-bookworm @@ -10,6 +10,7 @@ libhiredis0.14==0.14.1-3 libicu-dev==72.1-3 libicu72==72.1-3 libjs-jquery==3.6.1+dfsg+~3.5.14-1 +libk5crypto3==1.20.1-2+deb12u2 libnl-3-200==3.5.0-1 libnl-cli-3-200==3.5.0-1 libnl-genl-3-200==3.5.0-1 @@ -17,7 +18,7 @@ libnl-nf-3-200==3.5.0-1 libnl-route-3-200==3.5.0-1 libnsl-dev==1.3.0-2 libpcre3==2:8.39-15 -libpython3.11==3.11.2-6 +libpython3.11==3.11.2-6+deb12u2 libswsscommon==1.0.0 libtirpc-dev==1.3.3+ds-1 libxml2==2.9.14+dfsg-1.3~deb12u1 @@ -27,7 +28,7 @@ libxslt1.1==1.1.35-1 libyaml-0-2==0.2.5-1 libyang==1.0.73 libyang-cpp==1.0.73 -linux-libc-dev==6.1.90-1 +linux-libc-dev==6.1.99-1 python3-swsscommon==1.0.0 python3-yaml==6.0-3+b2 python3-yang==1.0.73 diff --git a/files/build/versions/dockers/docker-config-engine-bookworm/versions-py3 b/files/build/versions/dockers/docker-config-engine-bookworm/versions-py3 index 22c19f5eb583..87add86ead31 100644 --- a/files/build/versions/dockers/docker-config-engine-bookworm/versions-py3 +++ b/files/build/versions/dockers/docker-config-engine-bookworm/versions-py3 @@ -1,7 +1,7 @@ bitarray==2.8.1 ijson==3.2.3 ipaddress==1.0.23 -jsondiff==2.0.0 +jsondiff==2.2.0 lxml==4.9.1 natsort==6.2.1 netaddr==0.8.0 @@ -10,7 +10,7 @@ pyangbind==0.8.2 pyyaml==6.0.1 redis==5.0.1 redis-dump-load==1.1 -regex==2024.5.15 +regex==2024.7.24 six==1.16.0 tabulate==0.9.0 xmltodict==0.12.0 diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye index e1c0445e1539..5e5f371abe21 100644 --- a/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-deb-bullseye @@ -24,7 +24,7 @@ libxslt1-dev==1.1.34-4+deb11u1 libxslt1.1==1.1.34-4+deb11u1 libyang==1.0.73 libyang-cpp==1.0.73 -linux-libc-dev==5.10.218-1 +linux-libc-dev==5.10.221-1 python3-swsscommon==1.0.0 python3-yang==1.0.73 sonic-db-cli==1.0.0 diff --git a/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 b/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 index 4ee744daedb7..1a1c9250903f 100644 --- a/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 +++ b/files/build/versions/dockers/docker-config-engine-bullseye/versions-py3 @@ -1,7 +1,7 @@ bitarray==2.8.1 ijson==3.2.3 ipaddress==1.0.23 -jsondiff==2.0.0 +jsondiff==2.2.0 lxml==4.9.1 natsort==6.2.1 netaddr==0.8.0 @@ -10,7 +10,7 @@ pyangbind==0.8.1 pyyaml==6.0.1 redis==4.5.4 redis-dump-load==1.1 -regex==2024.5.15 +regex==2024.7.24 six==1.16.0 tabulate==0.9.0 xmltodict==0.12.0 diff --git a/files/build/versions/dockers/docker-dash-engine/versions-deb-focal b/files/build/versions/dockers/docker-dash-engine/versions-deb-focal index 723eaaedd005..e85f77f6c294 100644 --- a/files/build/versions/dockers/docker-dash-engine/versions-deb-focal +++ b/files/build/versions/dockers/docker-dash-engine/versions-deb-focal @@ -67,10 +67,10 @@ libnpth0==1.6-1 libperl5.30==5.30.0-9ubuntu0.5 libpopt0==1.16-14 libpython3-dev==3.8.2-0ubuntu2 -libpython3.8==3.8.10-0ubuntu1~20.04.9 -libpython3.8-dev==3.8.10-0ubuntu1~20.04.9 -libpython3.8-minimal==3.8.10-0ubuntu1~20.04.9 -libpython3.8-stdlib==3.8.10-0ubuntu1~20.04.9 +libpython3.8==3.8.10-0ubuntu1~20.04.11 +libpython3.8-dev==3.8.10-0ubuntu1~20.04.11 +libpython3.8-minimal==3.8.10-0ubuntu1~20.04.11 +libpython3.8-stdlib==3.8.10-0ubuntu1~20.04.11 libquadmath0==10.5.0-1ubuntu1~20.04 libroken18-heimdal==7.7.0+dfsg-1ubuntu1.4 libstdc++-9-dev==9.4.0-1ubuntu1~20.04.2 @@ -81,7 +81,7 @@ libwind0-heimdal==7.7.0+dfsg-1ubuntu1.4 logrotate==3.14.0-4ubuntu3 make==4.2.1-1.2 netbase==6.1 -openssl==1.1.1f-1ubuntu2.22 +openssl==1.1.1f-1ubuntu2.23 patch==2.7.6-6 perl==5.30.0-9ubuntu0.5 perl-base==5.30.0-9ubuntu0.5 @@ -91,9 +91,9 @@ python-pip-whl==20.0.2-5ubuntu1.10 python3-dev==3.8.2-0ubuntu2 python3-pip==20.0.2-5ubuntu1.10 python3-wheel==0.34.2-1ubuntu0.1 -python3.8==3.8.10-0ubuntu1~20.04.9 -python3.8-dev==3.8.10-0ubuntu1~20.04.9 -python3.8-minimal==3.8.10-0ubuntu1~20.04.9 +python3.8==3.8.10-0ubuntu1~20.04.11 +python3.8-dev==3.8.10-0ubuntu1~20.04.11 +python3.8-minimal==3.8.10-0ubuntu1~20.04.11 rsyslog==8.2001.0-1ubuntu1.3 supervisor==4.1.0-1ubuntu1 ucf==3.0038+nmu1 diff --git a/files/build/versions/dockers/docker-database/versions-deb-bookworm b/files/build/versions/dockers/docker-database/versions-deb-bookworm index d4a0316f6cd4..252f970eb514 100644 --- a/files/build/versions/dockers/docker-database/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-database/versions-deb-bookworm @@ -3,14 +3,14 @@ gdbserver==13.1-3 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdashapi==1.0.0 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 @@ -19,9 +19,12 @@ libprotobuf-lite32==3.21.12-3 libprotobuf32==3.21.12-3 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 redis-server==5:7.0.15-1~deb12u1 sensible-utils==0.0.17+nmu1 sshpass==1.09-1+b1 diff --git a/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bookworm b/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bookworm index 3da29ccd3fdb..c89c3cb30ac6 100644 --- a/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bookworm @@ -5,7 +5,7 @@ isc-dhcp-relay-dbgsym==4.4.3-P1-2 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 @@ -13,7 +13,7 @@ libedit2==3.1-20221030-2 libevent-2.1-7==2.1.12-stable-8 libexplain51==1.4.D001-12+b1 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 @@ -23,10 +23,13 @@ liblua5.1-0==5.1.5-9 libmpfr6==4.2.0-1 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 lsof==4.95.0-1 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 sensible-utils==0.0.17+nmu1 sonic-dhcp6relay==1.0.0-0 sonic-dhcp6relay-dbgsym==1.0.0-0 diff --git a/files/build/versions/dockers/docker-dhcp-relay/versions-py3 b/files/build/versions/dockers/docker-dhcp-relay/versions-py3 index 7d60ac8db299..3ba2e7a2c6b5 100644 --- a/files/build/versions/dockers/docker-dhcp-relay/versions-py3 +++ b/files/build/versions/dockers/docker-dhcp-relay/versions-py3 @@ -1,3 +1,3 @@ freezegun==1.5.1 -psutil==5.9.8 +psutil==6.0.0 python-dateutil==2.9.0.post0 diff --git a/files/build/versions/dockers/docker-eventd/versions-deb-bookworm b/files/build/versions/dockers/docker-eventd/versions-deb-bookworm index f865853059e8..7b13519ae379 100644 --- a/files/build/versions/dockers/docker-eventd/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-eventd/versions-deb-bookworm @@ -3,22 +3,25 @@ gdbserver==13.1-3 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 libmpfr6==4.2.0-1 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 sensible-utils==0.0.17+nmu1 sonic-eventd-dbgsym==1.0.0-0 sshpass==1.09-1+b1 diff --git a/files/build/versions/dockers/docker-fpm-frr/versions-deb-bookworm b/files/build/versions/dockers/docker-fpm-frr/versions-deb-bookworm index 0da31e794f37..d994e066d58a 100644 --- a/files/build/versions/dockers/docker-fpm-frr/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-fpm-frr/versions-deb-bookworm @@ -10,13 +10,13 @@ libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libc-ares2==1.18.1-3 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 @@ -31,13 +31,16 @@ libsnmp-base==5.9.3+dfsg-2 libsnmp40==5.9.3+dfsg-2 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 libyang2==2.0.112-6 libyang2-dbgsym==2.0.112-6 logrotate==3.21.0-1 lsof==4.95.0-1 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 pci.ids==0.0~2023.04.11-1 sensible-utils==0.0.17+nmu1 sonic-rsyslog-plugin==1.0.0-0 diff --git a/files/build/versions/dockers/docker-gbsyncd-broncos/versions-deb-bullseye b/files/build/versions/dockers/docker-gbsyncd-broncos/versions-deb-bullseye index 5c4d5df38329..1b81a742370b 100644 --- a/files/build/versions/dockers/docker-gbsyncd-broncos/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-gbsyncd-broncos/versions-deb-bullseye @@ -6,12 +6,12 @@ libc-dev-bin==2.31-13+deb11u10 libc6-dev==2.31-13+deb11u10 libcbor0==0.5.0+dfsg-2 libcrypt-dev==1:4.4.18-4 -libcurl3-gnutls==7.74.0-1.3+deb11u11 +libcurl3-gnutls==7.74.0-1.3+deb11u12 libdebuginfod1==0.183-1 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 libfido2-1==1.6.0-2 -libglib2.0-0==2.66.8-1+deb11u3 +libglib2.0-0==2.66.8-1+deb11u4 libgpm2==1.20.7-8 libicu67==67.1-7 libipt2==2.0.3-1 @@ -28,7 +28,7 @@ libsource-highlight4v5==3.1.9-3+b1 libswsscommon-dbgsym==1.0.0 libtirpc-dev==1.3.1-1+deb11u1 libunwind8==1.3.2-2 -linux-libc-dev==5.10.218-1 +linux-libc-dev==5.10.221-1 openssh-client==1:8.4p1-5+deb11u3 sshpass==1.09-1+b1 strace==5.10-1 diff --git a/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-bullseye b/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-bullseye index d61c9bbe5283..2060d9bc5d30 100644 --- a/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-bullseye @@ -3,12 +3,12 @@ gdbserver==10.1-1.7 libbabeltrace1==1.5.8-1+b3 libboost-regex1.74.0==1.74.0-9 libcbor0==0.5.0+dfsg-2 -libcurl3-gnutls==7.74.0-1.3+deb11u11 +libcurl3-gnutls==7.74.0-1.3+deb11u12 libdebuginfod1==0.183-1 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 libfido2-1==1.6.0-2 -libglib2.0-0==2.66.8-1+deb11u3 +libglib2.0-0==2.66.8-1+deb11u4 libgpm2==1.20.7-8 libicu67==67.1-7 libipt2==2.0.3-1 diff --git a/files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-bookworm b/files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-bookworm index 616dcecd80a9..826787858cec 100644 --- a/files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-bookworm @@ -129,8 +129,8 @@ libclang-cpp14==1:14.0.6-12 libclang1-14==1:14.0.6-12 libctf-nobfd0==2.40-2 libctf0==2.40-2 -libcurl3-gnutls==7.88.1-10+deb12u5 -libcurl3-nss==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 +libcurl3-nss==7.88.1-10+deb12u6 libdbus-1-dev==1.14.10-1~deb12u1 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 @@ -154,7 +154,7 @@ libgc1==1:8.2.2-3 libgcc-12-dev==12.2.0-14 libgfortran-12-dev==12.2.0-14 libgfortran5==12.2.0-14 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgmp-dev==2:6.2.1+dfsg1-1.1 libgmpxx4ldbl==2:6.2.1+dfsg1-1.1 libgomp1==12.2.0-14 @@ -179,8 +179,8 @@ libjs-sphinxdoc==5.3.0-4 libjs-underscore==1.13.4~dfsg+~1.11.4-3 libllvm14==1:14.0.6-12 liblsan0==12.2.0-14 -libltdl-dev==2.4.7-5 -libltdl7==2.4.7-5 +libltdl-dev==2.4.7-7~deb12u1 +libltdl7==2.4.7-7~deb12u1 libmagic-mgc==1:5.44-3 libmagic1==1:5.44-3 libmpc3==1.3.1-1 @@ -216,10 +216,10 @@ libprotoc32==3.21.12-3 libpsm-infinipath1==3.3+20.604758e7-6.2 libpsm2-2==11.2.185-2 libpython3-dev==3.11.2-1+b1 -libpython3.11-dev==3.11.2-6 -libqt5core5a==5.15.8+dfsg-11 -libqt5dbus5==5.15.8+dfsg-11 -libqt5network5==5.15.8+dfsg-11 +libpython3.11-dev==3.11.2-6+deb12u2 +libqt5core5a==5.15.8+dfsg-11+deb12u2 +libqt5dbus5==5.15.8+dfsg-11+deb12u2 +libqt5network5==5.15.8+dfsg-11+deb12u2 libquadmath0==12.2.0-14 librdmacm1==44.0-2 libre2-9==20220601+dfsg-1+b1 @@ -233,13 +233,14 @@ libsaivs==1.0.0 libsaivs-dbgsym==1.0.0 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 -libssl-dev==3.0.11-1~deb12u2 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libstdc++-12-dev==12.2.0-14 libswsscommon-dbgsym==1.0.0 libthrift-0.17.0==0.17.0-2+b2 libthrift-dev==0.17.0-2+b2 libtirpc-dev==1.3.3+ds-1 -libtool==2.4.7-5 +libtool==2.4.7-7~deb12u1 libtsan2==12.2.0-14 libubsan1==12.2.0-14 libucx0==1.13.1-1 @@ -253,7 +254,7 @@ libxext6==2:1.3.4-1+b1 libxml2==2.9.14+dfsg-1.3~deb12u1 libxnvctrl0==525.85.05-3~deb12u1 libz3-4==4.8.12-3.1 -linux-libc-dev==6.1.90-1 +linux-libc-dev==6.1.99-1 llvm==1:14.0-55.7~deb12u1 llvm-14==1:14.0.6-12 llvm-14-linker-tools==1:14.0.6-12 @@ -267,7 +268,8 @@ nss-plugin-pem==1.0.8+1-1 ocl-icd-libopencl1==2.3.1-1 openmpi-bin==4.1.4-3+b1 openmpi-common==4.1.4-3 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 p4lang-bmv2==1.15.0-7 p4lang-p4c==1.2.4.2-2 p4lang-pi==0.1.0-15 @@ -285,7 +287,7 @@ python3-pyroute2==0.7.2-2 python3-scapy==2.5.0+dfsg-2 python3-six==1.16.0-4 python3-thrift==0.17.0-2+b2 -python3.11-dev==3.11.2-6 +python3.11-dev==3.11.2-6+deb12u2 rpcsvc-proto==1.4.3-1 sensible-utils==0.0.17+nmu1 sgml-base==1.31 diff --git a/files/build/versions/dockers/docker-lldp/versions-deb-bookworm b/files/build/versions/dockers/docker-lldp/versions-deb-bookworm index 3c52fb813cd5..dc68ecce9890 100644 --- a/files/build/versions/dockers/docker-lldp/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-lldp/versions-deb-bookworm @@ -3,14 +3,14 @@ gdbserver==13.1-3 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libevent-2.1-7==2.1.12-stable-8 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 @@ -22,12 +22,15 @@ libsnmp-base==5.9.3+dfsg-2 libsnmp40==5.9.3+dfsg-2 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 libxml2==2.9.14+dfsg-1.3~deb12u1 lldpd==1.0.16-1+deb12u1 lldpd-dbgsym==1.0.16-1+deb12u1 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 pci.ids==0.0~2023.04.11-1 sensible-utils==0.0.17+nmu1 sshpass==1.09-1+b1 diff --git a/files/build/versions/dockers/docker-macsec/versions-deb-bookworm b/files/build/versions/dockers/docker-macsec/versions-deb-bookworm index ecadea5a6d95..f94e72cd0856 100644 --- a/files/build/versions/dockers/docker-macsec/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-macsec/versions-deb-bookworm @@ -3,13 +3,13 @@ gdbserver==13.1-3 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 @@ -17,9 +17,12 @@ libmpfr6==4.2.0-1 libpcsclite1==1.9.9-2 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 sensible-utils==0.0.17+nmu1 sshpass==1.09-1+b1 strace==6.1-0.1 diff --git a/files/build/versions/dockers/docker-mux/versions-deb-bookworm b/files/build/versions/dockers/docker-mux/versions-deb-bookworm index 0838f42f982d..b5f48ce47f59 100644 --- a/files/build/versions/dockers/docker-mux/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-mux/versions-deb-bookworm @@ -7,22 +7,25 @@ libboost-program-options1.74.0==1.74.0+ds1-21 libboost-regex1.74.0==1.74.0+ds1-21 libboost-thread1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 libmpfr6==4.2.0-1 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 sensible-utils==0.0.17+nmu1 sonic-linkmgrd==1.0.0-1 sonic-linkmgrd-dbgsym==1.0.0-1 diff --git a/files/build/versions/dockers/docker-nat/versions-deb-bookworm b/files/build/versions/dockers/docker-nat/versions-deb-bookworm index 6e0af0d6e2d1..d0b5bd2e6aa1 100644 --- a/files/build/versions/dockers/docker-nat/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-nat/versions-deb-bookworm @@ -6,13 +6,13 @@ iptables==1.8.9-2 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libip4tc2==1.8.9-2 @@ -25,10 +25,13 @@ libnfnetlink0==1.0.2-2 libnftnl11==1.2.4-2 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 netbase==6.4 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 sensible-utils==0.0.17+nmu1 sshpass==1.09-1+b1 strace==6.1-0.1 diff --git a/files/build/versions/dockers/docker-orchagent/versions-deb-bookworm b/files/build/versions/dockers/docker-orchagent/versions-deb-bookworm index f606f8ca6820..ea57df30136a 100644 --- a/files/build/versions/dockers/docker-orchagent/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-orchagent/versions-deb-bookworm @@ -7,13 +7,13 @@ ifupdown==0.8.41 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 @@ -28,11 +28,14 @@ libpci3==1:3.9.0-4 libsairedis-dbgsym==1.0.0 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 ndisc6==1.0.5-1+b2 ndppd==0.2.5-6 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 pci.ids==0.0~2023.04.11-1 pciutils==1:3.9.0-4 python3-protobuf==3.21.12-3 diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bookworm b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bookworm index 293dabbf967b..4e20b15fc7dd 100644 --- a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bookworm @@ -1,5 +1,5 @@ -applibs==1.mlnx.4.6.3064 -applibs-dev==1.mlnx.4.6.3064 +applibs==1.mlnx.4.6.4072 +applibs-dev==1.mlnx.4.6.4072 dmidecode==3.4-1 ethtool==1:6.1-1 fancontrol==1:3.6.0-7.1 @@ -16,7 +16,7 @@ libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcairo2==1.16.0-7 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdatrie1==0.2.13-2+b1 libdbi1==0.9.0-6 libdebuginfod-common==0.188-2.1 @@ -25,9 +25,9 @@ libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 libfontconfig1==2.14.1-4 -libfreetype6==2.12.1+dfsg-5 +libfreetype6==2.12.1+dfsg-5+deb12u3 libfribidi0==1.0.8-2.1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libgraphite2-3==1.3.14-1 libharfbuzz0b==6.0.0+dfsg-3 @@ -51,6 +51,8 @@ libsensors5==1:3.6.0-7.1 libsensors5-dbgsym==1:3.6.0-7.1 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libthai-data==0.1.29-1 libthai0==0.1.29-1 @@ -67,13 +69,14 @@ libxml2==2.9.14+dfsg-1.3~deb12u1 libxrender1==1:0.9.10-1.1 lm-sensors==1:3.6.0-7.1 lm-sensors-dbgsym==1:3.6.0-7.1 -mft==4.26.1-3 +mft==4.28.0-96 nvme-cli==2.4+really2.3-3 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 pci.ids==0.0~2023.04.11-1 pciutils==1:3.9.0-4 psmisc==23.6-1 -python-sdk-api==1.mlnx.4.6.3064 +python-sdk-api==1.mlnx.4.6.4072 python3-attr==22.2.0-1 python3-jsonschema==4.10.3-1 python3-pyrsistent==0.18.1-1+b3 @@ -85,14 +88,15 @@ sensord-dbgsym==1:3.6.0-7.1 smartmontools==7.4-2~bpo12+1 sshpass==1.09-1+b1 strace==6.1-0.1 -sx-complib==1.mlnx.4.6.3064 -sx-complib-dev==1.mlnx.4.6.3064 -sx-gen-utils==1.mlnx.4.6.3064 -sx-gen-utils-dev==1.mlnx.4.6.3064 -sxd-libs==1.mlnx.4.6.3064 -sxd-libs-dev==1.mlnx.4.6.3064 +sx-complib==1.mlnx.4.6.4072 +sx-complib-dev==1.mlnx.4.6.4072 +sx-gen-utils==1.mlnx.4.6.4072 +sx-gen-utils-dev==1.mlnx.4.6.4072 +sxd-libs==1.mlnx.4.6.4072 +sxd-libs-dev==1.mlnx.4.6.4072 ucf==3.0043+nmu1 -udev==252.22-1~deb12u1 +udev==252.26-1~deb12u2 uuid-runtime==2.38.1-5+deb12u1 vim==2:9.0.1378-2 vim-runtime==2:9.0.1378-2 +xxd==2:9.0.1378-2 diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-py3 b/files/build/versions/dockers/docker-platform-monitor/versions-py3 index 62d7ff68a570..960078b051ef 100644 --- a/files/build/versions/dockers/docker-platform-monitor/versions-py3 +++ b/files/build/versions/dockers/docker-platform-monitor/versions-py3 @@ -1,6 +1,7 @@ attrs==22.2.0 -certifi==2024.6.2 +certifi==2024.7.4 charset-normalizer==3.3.2 +enum34==1.1.10 grpcio==1.51.1 grpcio-tools==1.51.1 guacamole==0.9.2 @@ -8,10 +9,10 @@ idna==3.7 jsonschema==2.6.0 libpci==0.2 netifaces==0.11.0 -protobuf==4.25.3 -psutil==5.9.8 +protobuf==4.25.4 +psutil==6.0.0 pyrsistent==0.18.1 -python-sdk-api==4.6.3064 +python-sdk-api==4.6.4072 requests==2.32.3 thrift==0.13.0 -urllib3==2.2.1 +urllib3==2.2.2 diff --git a/files/build/versions/dockers/docker-ptf-sai/versions-py3 b/files/build/versions/dockers/docker-ptf-sai/versions-py3 index 08550dfeb0ac..cd3358c161fd 100644 --- a/files/build/versions/dockers/docker-ptf-sai/versions-py3 +++ b/files/build/versions/dockers/docker-ptf-sai/versions-py3 @@ -1,10 +1,10 @@ crc16==0.1.1 -getmac==0.9.4 +getmac==0.9.5 importlib-metadata==6.7.0 netifaces==0.11.0 packaging==24.0 packet-helper==0.0.1 -psutil==5.9.8 +psutil==6.0.0 ptf==0.0.0 pyperclip==1.8.2 pysubnettree==0.37 diff --git a/files/build/versions/dockers/docker-ptf/versions-deb-buster b/files/build/versions/dockers/docker-ptf/versions-deb-buster index 529178c9cb97..225391ea8be4 100644 --- a/files/build/versions/dockers/docker-ptf/versions-deb-buster +++ b/files/build/versions/dockers/docker-ptf/versions-deb-buster @@ -47,8 +47,8 @@ gcc==4:8.3.0-1 gcc-8==8.3.0-6 gdb==8.2.1-2+b3 gir1.2-glib-2.0==1.58.3-2 -git==1:2.20.1-2+deb10u8 -git-man==1:2.20.1-2+deb10u8 +git==1:2.20.1-2+deb10u9 +git-man==1:2.20.1-2+deb10u9 glib-networking==2.58.0-2+deb10u2 glib-networking-common==2.58.0-2+deb10u2 glib-networking-services==2.58.0-2+deb10u2 @@ -99,11 +99,11 @@ libboost-atomic1.71.0==1.71.0-6~bpo10+1 libbrotli1==1.0.7-2+deb10u1 libbsd0==0.9.1-2+deb10u1 libc-ares2==1.14.0-1+deb10u4 -libc-bin==2.28-10+deb10u3 -libc-dev-bin==2.28-10+deb10u3 -libc6==2.28-10+deb10u3 -libc6-dbg==2.28-10+deb10u3 -libc6-dev==2.28-10+deb10u3 +libc-bin==2.28-10+deb10u4 +libc-dev-bin==2.28-10+deb10u4 +libc6==2.28-10+deb10u4 +libc6-dbg==2.28-10+deb10u4 +libc6-dev==2.28-10+deb10u4 libcairo-gobject2==1.16.0-4+deb10u1 libcairo2==1.16.0-4+deb10u1 libcc1-0==8.3.0-6 @@ -113,9 +113,9 @@ libcgraph6==2.40.1-6+deb10u1 libcolord2==1.4.3-4 libcroco3==0.6.12-3 libcryptsetup12==2:2.1.0-5+deb10u2 -libcups2==2.2.10-6+deb10u9 +libcups2==2.2.10-6+deb10u10 libcupsfilters1==1.21.6-5+deb10u1 -libcupsimage2==2.2.10-6+deb10u9 +libcupsimage2==2.2.10-6+deb10u10 libcurl3-gnutls==7.64.0-4+deb10u9 libcurl4==7.64.0-4+deb10u9 libdaemon0==0.14-7 @@ -464,7 +464,7 @@ libxxf86dga1==2:1.1.4-1+b3 libxxf86vm1==1:1.1.4-1+b2 libxxhash0==0.6.5-2 libzzip-0-13==0.13.62-3.2+deb10u1 -linux-libc-dev==4.19.304-1 +linux-libc-dev==4.19.316-1 lmodern==2.004.5-6 logrotate==3.14.0-4 lsb-base==10.2019051400 diff --git a/files/build/versions/dockers/docker-router-advertiser/versions-deb-bookworm b/files/build/versions/dockers/docker-router-advertiser/versions-deb-bookworm index 2c7500156d98..97713014158c 100644 --- a/files/build/versions/dockers/docker-router-advertiser/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-router-advertiser/versions-deb-bookworm @@ -3,22 +3,25 @@ gdbserver==13.1-3 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 libmpfr6==4.2.0-1 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 radvd==1:2.19-1+b1 sensible-utils==0.0.17+nmu1 sshpass==1.09-1+b1 diff --git a/files/build/versions/dockers/docker-sflow/versions-deb-bookworm b/files/build/versions/dockers/docker-sflow/versions-deb-bookworm index d4868ac3d886..cd199d006d70 100644 --- a/files/build/versions/dockers/docker-sflow/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-sflow/versions-deb-bookworm @@ -6,22 +6,25 @@ hsflowd-dbgsym==2.0.51-26 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 libmpfr6==4.2.0-1 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 psample==1.1-1 sensible-utils==0.0.17+nmu1 sflowtool==5.04 diff --git a/files/build/versions/dockers/docker-snmp/versions-deb-bookworm b/files/build/versions/dockers/docker-snmp/versions-deb-bookworm index 80548bf4227b..32f17d672d24 100644 --- a/files/build/versions/dockers/docker-snmp/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-snmp/versions-deb-bookworm @@ -6,14 +6,14 @@ libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libc-l10n==2.36-9+deb12u7 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 libfreeipmi17==1.6.10-1+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 @@ -26,10 +26,13 @@ libsnmp40==5.9.3+dfsg-2 libsnmp40-dbgsym==5.9.3+dfsg-2 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 locales==2.36-9+deb12u7 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 pci.ids==0.0~2023.04.11-1 sensible-utils==0.0.17+nmu1 snmp==5.9.3+dfsg-2 diff --git a/files/build/versions/dockers/docker-snmp/versions-py3 b/files/build/versions/dockers/docker-snmp/versions-py3 index 6578258d1527..2d2c196bb3b5 100644 --- a/files/build/versions/dockers/docker-snmp/versions-py3 +++ b/files/build/versions/dockers/docker-snmp/versions-py3 @@ -1,4 +1,4 @@ -hiredis==2.3.2 -psutil==5.9.8 +hiredis==3.0.0 +psutil==6.0.0 python-arptable==0.0.2 smbus==1.1.post2 diff --git a/files/build/versions/dockers/docker-sonic-gnmi/versions-deb-bookworm b/files/build/versions/dockers/docker-sonic-gnmi/versions-deb-bookworm index 78de7f716989..9f7ac26c38b7 100644 --- a/files/build/versions/dockers/docker-sonic-gnmi/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-sonic-gnmi/versions-deb-bookworm @@ -3,22 +3,25 @@ gdbserver==13.1-3 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 libmpfr6==4.2.0-1 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 sensible-utils==0.0.17+nmu1 sonic-gnmi==0.1 sonic-mgmt-common==1.0.0 diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-bookworm b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-bookworm index 4ac805e33146..c01376c3ddde 100644 --- a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-bookworm @@ -3,26 +3,29 @@ gdbserver==13.1-3 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcjson-dev==1.7.15-1 -libcjson1==1.7.15-1 -libcurl3-gnutls==7.88.1-10+deb12u5 -libcurl4-openssl-dev==7.88.1-10+deb12u5 +libcjson-dev==1.7.15-1+deb12u1 +libcjson1==1.7.15-1+deb12u1 +libcurl3-gnutls==7.88.1-10+deb12u6 +libcurl4-openssl-dev==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 libmpfr6==4.2.0-1 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libunwind8==1.6.2-3 libxml2==2.9.14+dfsg-1.3~deb12u1 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 sensible-utils==0.0.17+nmu1 sonic-mgmt-common==1.0.0 sonic-mgmt-framework==1.0-01 diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 index fd8654bb5b14..8fbb76d5fd8b 100644 --- a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3 @@ -1,5 +1,5 @@ -certifi==2024.6.2 +certifi==2024.7.4 charset-normalizer==3.3.2 idna==3.7 requests==2.32.3 -urllib3==2.2.1 +urllib3==2.2.2 diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-deb-bullseye b/files/build/versions/dockers/docker-sonic-vs/versions-deb-bullseye index c8b815af33ab..9086a97ef363 100644 --- a/files/build/versions/dockers/docker-sonic-vs/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-sonic-vs/versions-deb-bullseye @@ -31,7 +31,7 @@ icu-devtools==67.1-7 ifupdown==0.8.36 iproute2==6.1.0-3~bpo11+1 iptables==1.8.7-1 -krb5-multidev==1.18.3-6+deb11u4+fips +krb5-multidev==1.18.3-6+deb11u5+fips libapparmor1==2.13.6-10 libassuan0==2.5.3-7.1 libblkid-dev==2.36.1-8+deb11u2 @@ -52,10 +52,10 @@ libfreetype6==2.10.4+dfsg-1+deb11u1 libfreetype6-dev==2.10.4+dfsg-1+deb11u1 libfuse2==2.9.9-5 libgirepository-1.0-1==1.66.1-1+b1 -libglib2.0-0==2.66.8-1+deb11u3 -libglib2.0-data==2.66.8-1+deb11u3 -libgssapi-krb5-2==1.18.3-6+deb11u4+fips -libgssrpc4==1.18.3-6+deb11u4+fips +libglib2.0-0==2.66.8-1+deb11u4 +libglib2.0-data==2.66.8-1+deb11u4 +libgssapi-krb5-2==1.18.3-6+deb11u5+fips +libgssrpc4==1.18.3-6+deb11u5+fips libicu-dev==67.1-7 libicu67==67.1-7 libip4tc2==1.8.7-1 @@ -65,12 +65,12 @@ libjs-underscore==1.9.1~dfsg-3 libjson-c5==0.15-2+deb11u1 libjudydebian1==1.0.5-5+b2 libk5crypto3==1.18.3-6+deb11u4 -libkadm5clnt-mit12==1.18.3-6+deb11u4+fips -libkadm5srv-mit12==1.18.3-6+deb11u4+fips -libkdb5-10==1.18.3-6+deb11u4 -libkrb5-3==1.18.3-6+deb11u4+fips -libkrb5-dev==1.18.3-6+deb11u4+fips -libkrb5support0==1.18.3-6+deb11u4+fips +libkadm5clnt-mit12==1.18.3-6+deb11u5+fips +libkadm5srv-mit12==1.18.3-6+deb11u5+fips +libkdb5-10==1.18.3-6+deb11u5 +libkrb5-3==1.18.3-6+deb11u5+fips +libkrb5-dev==1.18.3-6+deb11u5+fips +libkrb5support0==1.18.3-6+deb11u5+fips libksba8==1.5.0-3+deb11u2 libmd-dev==1.0.3-3 libmount1==2.36.1-8+deb11u2 @@ -89,9 +89,9 @@ libpopt0==1.18-2 libpython2-stdlib==2.7.18-3 libpython2.7-minimal==2.7.18-8+deb11u1 libpython2.7-stdlib==2.7.18-8+deb11u1 -libqt5core5a==5.15.2+dfsg-9 -libqt5dbus5==5.15.2+dfsg-9 -libqt5network5==5.15.2+dfsg-9 +libqt5core5a==5.15.2+dfsg-9+deb11u1 +libqt5dbus5==5.15.2+dfsg-9+deb11u1 +libqt5network5==5.15.2+dfsg-9+deb11u1 libsaivs==1.0.0 libsodium-dev==1.0.18-1 libssl1.1==1.1.1w-0+deb11u1 @@ -104,7 +104,7 @@ libxml2==2.9.10+dfsg-6.7+deb11u4 libxml2-dev==2.9.10+dfsg-6.7+deb11u4 libyang2==2.0.112-6 libzmq3-dev==4.3.4-1+deb11u1 -linux-libc-dev==5.10.218-1 +linux-libc-dev==5.10.221-1 logrotate==3.18.0-2+deb11u2 lsof==4.93.2+dfsg-1.1 mailcap==3.69 diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-py3 b/files/build/versions/dockers/docker-sonic-vs/versions-py3 index 72e3c60d5bee..a7d5f91d9b2a 100644 --- a/files/build/versions/dockers/docker-sonic-vs/versions-py3 +++ b/files/build/versions/dockers/docker-sonic-vs/versions-py3 @@ -1,46 +1,47 @@ async-timeout==4.0.2 bcrypt==3.2.2 blessed==1.20.0 -certifi==2024.6.2 -cffi==1.16.0 +certifi==2024.7.4 +cffi==1.17.0 charset-normalizer==3.3.2 click==7.0 click-log==0.4.0 colorful==0.5.6 -cryptography==42.0.8 +cryptography==43.0.0 dbus-python==1.3.2 docker==7.1.0 -docker-image-py==0.1.12 +docker-image-py==0.1.13 enlighten==1.12.4 -filelock==3.14.0 +filelock==3.15.4 idna==3.7 importlib-metadata==6.1.0 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 lazy-object-proxy==1.10.0 -m2crypto==0.41.0 +m2crypto==0.42.0 netifaces==0.10.9 packaging==24.0 paramiko==2.11.0 pexpect==4.9.0 -prefixed==0.7.1 +prefixed==0.8.0 prettyprinter==0.18.0 -psutil==5.9.8 +psutil==6.0.0 ptyprocess==0.7.0 -pycairo==1.26.0 +pycairo==1.26.1 pycparser==2.22 pygments==2.18.0 pygobject==3.48.2 pynacl==1.5.0 pyroute2==0.5.14 redis==4.5.2 -requests==2.32.3 +requests==2.31.0 scapy==2.4.4 +scp==0.14.5 semantic-version==2.10.0 systemd-python==235 toposort==1.6 typing_extensions==4.7.1 -urllib3==2.2.1 +urllib3==2.2.2 wcwidth==0.2.13 websocket-client==1.6.3 www-authenticate==0.9.2 diff --git a/files/build/versions/dockers/docker-syncd-bluefield/versions-deb-bookworm b/files/build/versions/dockers/docker-syncd-bluefield/versions-deb-bookworm index 15f6df1d437d..623e589a699d 100644 --- a/files/build/versions/dockers/docker-syncd-bluefield/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-syncd-bluefield/versions-deb-bookworm @@ -1,10 +1,10 @@ binutils==2.40-2 binutils-aarch64-linux-gnu==2.40-2 binutils-dev==2.40-2 -doca-cx-libs==2.7.0034-1 +doca-cx-libs==2.8.0005-1 ethtool==1:6.1-1 hwdata==0.368-1 -ibverbs-providers==2307mlnx47-1.2310036 +ibverbs-providers==2404mlnx51-1.2404066 kmod==30+20221128-1 libatm1==1:2.5.1-4+b2 libbinutils==2.40-2 @@ -13,8 +13,8 @@ libctf0==2.40-2 libexpat1-dev==2.5.0-1 libgprofng0==2.40-2 libgrpc-dev==1.39.0-1 -libibverbs-dev==2307mlnx47-1.2310036 -libibverbs1==2307mlnx47-1.2310036 +libibverbs-dev==2404mlnx51-1.2404066 +libibverbs1==2404mlnx51-1.2404066 libjs-sphinxdoc==5.3.0-4 libjs-underscore==1.13.4~dfsg+~1.11.4-3 libjson-c5==0.16-2 @@ -30,24 +30,24 @@ libnuma1==2.0.16-1 libpcap0.8==1.10.3-1 libpci3==1:3.9.0-4 libpython3-dev==3.11.2-1+b1 -libpython3.11-dev==3.11.2-6 +libpython3.11-dev==3.11.2-6+deb12u2 librxpcompiler-dev==22.05.1 libsaimetadata==1.0.0 libsairedis==1.0.0 lsof==4.95.0-1 -mft==4.26.1-3 +mft==4.28.0-96 mlnx-dpdk==22.11.0-2404.0.2 -mlnx-iproute2==6.4.0-1.2310036 -mlnx-ofed-kernel-utils==23.10.OFED.23.10.0.3.6.1-1 -mlnx-sai==1.mlnx.SAIBuild0.0.30.0 -mlnx-tools==23.10.0-1.2310036 +mlnx-iproute2==6.7.0-1.2404066 +mlnx-ofed-kernel-utils==24.04.OFED.24.04.0.6.6.1-1 +mlnx-sai==1.mlnx.SAIBuild0.0.32.0 +mlnx-tools==24.04.0-1.2404066 pci.ids==0.0~2023.04.11-1 pciutils==1:3.9.0-4 python3-dev==3.11.2-1+b1 python3-pip==23.0.1+dfsg-1 -python3.11-dev==3.11.2-6 +python3.11-dev==3.11.2-6+deb12u2 rxp-compiler==22.05.1 sdn-appliance==1.5-1mlnx1 syncd==1.0.0 -udev==252.22-1~deb12u1 +udev==252.26-1~deb12u2 usb.ids==2024.01.20-0+deb12u1 diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-bullseye index 200b0c679d5e..6983b871f817 100644 --- a/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx-rpc/versions-deb-bullseye @@ -26,7 +26,7 @@ libdpkg-perl==1.20.13 libexpat1-dev==2.2.10-2+deb11u5 libffi-dev==3.3-6 libgcc-10-dev==10.2.1-6 -libglib2.0-0==2.66.8-1+deb11u3 +libglib2.0-0==2.66.8-1+deb11u4 libgomp1==10.2.1-6 libicu67==67.1-7 libisl23==0.23-1 @@ -43,9 +43,9 @@ libpython2.7==2.7.18-8+deb11u1 libpython2.7-dev==2.7.18-8+deb11u1 libpython2.7-minimal==2.7.18-8+deb11u1 libpython2.7-stdlib==2.7.18-8+deb11u1 -libqt5core5a==5.15.2+dfsg-9 -libqt5dbus5==5.15.2+dfsg-9 -libqt5network5==5.15.2+dfsg-9 +libqt5core5a==5.15.2+dfsg-9+deb11u1 +libqt5dbus5==5.15.2+dfsg-9+deb11u1 +libqt5network5==5.15.2+dfsg-9+deb11u1 libquadmath0==10.2.1-6 librhash0==1.4.1-2 libssl-dev==1.1.1w-0+deb11u1 @@ -57,7 +57,7 @@ libtsan0==10.2.1-6 libubsan1==10.2.1-6 libuv1==1.40.0-2+deb11u1 libxml2==2.9.10+dfsg-6.7+deb11u4 -linux-libc-dev==5.10.218-1 +linux-libc-dev==5.10.221-1 mailcap==3.69 make==4.3-4.1 mime-support==3.66 diff --git a/files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-bullseye index 72bbb5739dfb..b5e8fd335b12 100644 --- a/files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-brcm-dnx/versions-deb-bullseye @@ -5,12 +5,12 @@ kmod==28-1 libbabeltrace1==1.5.8-1+b3 libboost-regex1.74.0==1.74.0-9 libcbor0==0.5.0+dfsg-2 -libcurl3-gnutls==7.74.0-1.3+deb11u11 +libcurl3-gnutls==7.74.0-1.3+deb11u12 libdebuginfod1==0.183-1 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 libfido2-1==1.6.0-2 -libglib2.0-0==2.66.8-1+deb11u3 +libglib2.0-0==2.66.8-1+deb11u4 libgpm2==1.20.7-8 libicu67==67.1-7 libipt2==2.0.3-1 diff --git a/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-bullseye index 200b0c679d5e..6983b871f817 100644 --- a/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-brcm-rpc/versions-deb-bullseye @@ -26,7 +26,7 @@ libdpkg-perl==1.20.13 libexpat1-dev==2.2.10-2+deb11u5 libffi-dev==3.3-6 libgcc-10-dev==10.2.1-6 -libglib2.0-0==2.66.8-1+deb11u3 +libglib2.0-0==2.66.8-1+deb11u4 libgomp1==10.2.1-6 libicu67==67.1-7 libisl23==0.23-1 @@ -43,9 +43,9 @@ libpython2.7==2.7.18-8+deb11u1 libpython2.7-dev==2.7.18-8+deb11u1 libpython2.7-minimal==2.7.18-8+deb11u1 libpython2.7-stdlib==2.7.18-8+deb11u1 -libqt5core5a==5.15.2+dfsg-9 -libqt5dbus5==5.15.2+dfsg-9 -libqt5network5==5.15.2+dfsg-9 +libqt5core5a==5.15.2+dfsg-9+deb11u1 +libqt5dbus5==5.15.2+dfsg-9+deb11u1 +libqt5network5==5.15.2+dfsg-9+deb11u1 libquadmath0==10.2.1-6 librhash0==1.4.1-2 libssl-dev==1.1.1w-0+deb11u1 @@ -57,7 +57,7 @@ libtsan0==10.2.1-6 libubsan1==10.2.1-6 libuv1==1.40.0-2+deb11u1 libxml2==2.9.10+dfsg-6.7+deb11u4 -linux-libc-dev==5.10.218-1 +linux-libc-dev==5.10.221-1 mailcap==3.69 make==4.3-4.1 mime-support==3.66 diff --git a/files/build/versions/dockers/docker-syncd-brcm/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-brcm/versions-deb-bullseye index 1c5b66ad5b5c..dcc9f95ecce0 100644 --- a/files/build/versions/dockers/docker-syncd-brcm/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-brcm/versions-deb-bullseye @@ -5,12 +5,12 @@ kmod==28-1 libbabeltrace1==1.5.8-1+b3 libboost-regex1.74.0==1.74.0-9 libcbor0==0.5.0+dfsg-2 -libcurl3-gnutls==7.74.0-1.3+deb11u11 +libcurl3-gnutls==7.74.0-1.3+deb11u12 libdebuginfod1==0.183-1 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 libfido2-1==1.6.0-2 -libglib2.0-0==2.66.8-1+deb11u3 +libglib2.0-0==2.66.8-1+deb11u4 libgpm2==1.20.7-8 libicu67==67.1-7 libipt2==2.0.3-1 diff --git a/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-bullseye index 200b0c679d5e..6983b871f817 100644 --- a/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-centec-rpc/versions-deb-bullseye @@ -26,7 +26,7 @@ libdpkg-perl==1.20.13 libexpat1-dev==2.2.10-2+deb11u5 libffi-dev==3.3-6 libgcc-10-dev==10.2.1-6 -libglib2.0-0==2.66.8-1+deb11u3 +libglib2.0-0==2.66.8-1+deb11u4 libgomp1==10.2.1-6 libicu67==67.1-7 libisl23==0.23-1 @@ -43,9 +43,9 @@ libpython2.7==2.7.18-8+deb11u1 libpython2.7-dev==2.7.18-8+deb11u1 libpython2.7-minimal==2.7.18-8+deb11u1 libpython2.7-stdlib==2.7.18-8+deb11u1 -libqt5core5a==5.15.2+dfsg-9 -libqt5dbus5==5.15.2+dfsg-9 -libqt5network5==5.15.2+dfsg-9 +libqt5core5a==5.15.2+dfsg-9+deb11u1 +libqt5dbus5==5.15.2+dfsg-9+deb11u1 +libqt5network5==5.15.2+dfsg-9+deb11u1 libquadmath0==10.2.1-6 librhash0==1.4.1-2 libssl-dev==1.1.1w-0+deb11u1 @@ -57,7 +57,7 @@ libtsan0==10.2.1-6 libubsan1==10.2.1-6 libuv1==1.40.0-2+deb11u1 libxml2==2.9.10+dfsg-6.7+deb11u4 -linux-libc-dev==5.10.218-1 +linux-libc-dev==5.10.221-1 mailcap==3.69 make==4.3-4.1 mime-support==3.66 diff --git a/files/build/versions/dockers/docker-syncd-centec/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-centec/versions-deb-bullseye index f9547ecf807d..e2a04839dc68 100644 --- a/files/build/versions/dockers/docker-syncd-centec/versions-deb-bullseye +++ b/files/build/versions/dockers/docker-syncd-centec/versions-deb-bullseye @@ -4,12 +4,12 @@ kmod==28-1 libbabeltrace1==1.5.8-1+b3 libboost-regex1.74.0==1.74.0-9 libcbor0==0.5.0+dfsg-2 -libcurl3-gnutls==7.74.0-1.3+deb11u11 +libcurl3-gnutls==7.74.0-1.3+deb11u12 libdebuginfod1==0.183-1 libdw1==0.183-1 libedit2==3.1-20191231-2+b1 libfido2-1==1.6.0-2 -libglib2.0-0==2.66.8-1+deb11u3 +libglib2.0-0==2.66.8-1+deb11u4 libgpm2==1.20.7-8 libhiredis0.14-dbgsym==0.14.1-1 libicu67==67.1-7 diff --git a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bookworm b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bookworm index 5fa2d43ee267..55db77737d3d 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-syncd-mlnx-rpc/versions-deb-bookworm @@ -1,15 +1,17 @@ cmake-data==3.25.1-1 libboost-atomic1.74.0==1.74.0+ds1-21 libdouble-conversion3==3.2.1-1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libnanomsg-dev==1.1.5+dfsg-1.1+b1 libnanomsg5==1.1.5+dfsg-1.1+b1 libpcre2-16-0==10.42-1 -libqt5core5a==5.15.8+dfsg-11 -libqt5dbus5==5.15.8+dfsg-11 -libqt5network5==5.15.8+dfsg-11 +libqt5core5a==5.15.8+dfsg-11+deb12u2 +libqt5dbus5==5.15.8+dfsg-11+deb12u2 +libqt5network5==5.15.8+dfsg-11+deb12u2 +libssl3==3.0.13-1~deb12u1 libthrift-0.17.0==0.17.0-2+b2 netbase==6.4 +openssl==3.0.13-1~deb12u1 python3-scapy==2.5.0+dfsg-2 python3-thrift==0.17.0-2+b2 shared-mime-info==2.2-1 diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bookworm b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bookworm index f0be6ba0d45c..d9ef40d54b94 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bookworm @@ -1,5 +1,5 @@ -applibs==1.mlnx.4.6.3064 -applibs-dev==1.mlnx.4.6.3064 +applibs==1.mlnx.4.6.4072 +applibs-dev==1.mlnx.4.6.4072 gdb==13.1-3 gdbserver==13.1-3 iproute2-mlnx==6.1.0-3 @@ -8,14 +8,14 @@ libboost-regex1.74.0==1.74.0+ds1-21 libc-dev-bin==2.36-9+deb12u7 libc6-dev==2.36-9+deb12u7 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libexpat1-dev==2.5.0-1 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 @@ -24,51 +24,54 @@ libjs-underscore==1.13.4~dfsg+~1.11.4-3 libmpfr6==4.2.0-1 libnsl-dev==1.3.0-2 libpython3-dev==3.11.2-1+b1 -libpython3.11-dev==3.11.2-6 +libpython3.11-dev==3.11.2-6+deb12u2 libsaimetadata==1.0.0 libsaimetadata-dbgsym==1.0.0 libsairedis==1.0.0 libsairedis-dbgsym==1.0.0 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libtirpc-dev==1.3.3+ds-1 libunwind8==1.6.2-3 libxml2==2.9.14+dfsg-1.3~deb12u1 -linux-libc-dev==6.1.90-1 +linux-libc-dev==6.1.99-1 mft==4.28.0-96 mft-fwtrace-cfg==1.0.0 -mlnx-sai==1.mlnx.SAIBuild2311.27.0.16 -openssh-client==1:9.2p1-2+deb12u2 -python-sdk-api==1.mlnx.4.6.3064 +mlnx-sai==1.mlnx.SAIBuild2405.28.0.33 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 +python-sdk-api==1.mlnx.4.6.4072 python3-attr==22.2.0-1 python3-dev==3.11.2-1+b1 python3-jsonschema==4.10.3-1 python3-pip==23.0.1+dfsg-1 python3-pyrsistent==0.18.1-1+b3 -python3.11-dev==3.11.2-6 +python3.11-dev==3.11.2-6+deb12u2 rpcsvc-proto==1.4.3-1 sensible-utils==0.0.17+nmu1 sshpass==1.09-1+b1 strace==6.1-0.1 -sx-acl-helper==1.mlnx.4.6.3064 -sx-acl-helper-dev==1.mlnx.4.6.3064 -sx-complib==1.mlnx.4.6.3064 -sx-complib-dev==1.mlnx.4.6.3064 -sx-examples==1.mlnx.4.6.3064 -sx-examples-dev==1.mlnx.4.6.3064 -sx-gen-utils==1.mlnx.4.6.3064 -sx-gen-utils-dev==1.mlnx.4.6.3064 -sx-hash-calc==1.mlnx.4.6.3064 -sx-obj-desc-lib==1.mlnx.4.6.3064 -sx-obj-desc-lib-dev==1.mlnx.4.6.3064 -sxd-libs==1.mlnx.4.6.3064 -sxd-libs-dev==1.mlnx.4.6.3064 +sx-acl-helper==1.mlnx.4.6.4072 +sx-acl-helper-dev==1.mlnx.4.6.4072 +sx-complib==1.mlnx.4.6.4072 +sx-complib-dev==1.mlnx.4.6.4072 +sx-examples==1.mlnx.4.6.4072 +sx-examples-dev==1.mlnx.4.6.4072 +sx-gen-utils==1.mlnx.4.6.4072 +sx-gen-utils-dev==1.mlnx.4.6.4072 +sx-hash-calc==1.mlnx.4.6.4072 +sx-obj-desc-lib==1.mlnx.4.6.4072 +sx-obj-desc-lib-dev==1.mlnx.4.6.4072 +sxd-libs==1.mlnx.4.6.4072 +sxd-libs-dev==1.mlnx.4.6.4072 syncd==1.0.0 syncd-dbgsym==1.0.0 ucf==3.0043+nmu1 vim==2:9.0.1378-2 vim-runtime==2:9.0.1378-2 -wjh-libs==1.mlnx.4.6.3064 -wjh-libs-dev==1.mlnx.4.6.3064 +wjh-libs==1.mlnx.4.6.4072 +wjh-libs-dev==1.mlnx.4.6.4072 zlib1g-dev==1:1.2.13.dfsg-1 diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 b/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 index 9330926a786d..3ba6921c8800 100644 --- a/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 +++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-py3 @@ -3,6 +3,6 @@ importlib-metadata==1.6.0 jsonschema==4.10.3 more-itertools==4.2.0 pyrsistent==0.18.1 -python-sdk-api==4.6.3064 +python-sdk-api==4.6.4072 python_sdk_api==4.6.3064 zipp==1.0.0 diff --git a/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-bookworm-arm64 b/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-bookworm-arm64 index 86b1a2416211..9b956a86a33f 100644 --- a/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-bookworm-arm64 +++ b/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-bookworm-arm64 @@ -8,7 +8,7 @@ libpcap0.8==1.10.3-1 libpcap0.8-dev==1.10.3-1 libpkgconf3==1.8.1-1 libpython3-dev==3.11.2-1+b1 -libpython3.11-dev==3.11.2-6 +libpython3.11-dev==3.11.2-6+deb12u2 libsaimetadata==1.0.0 libsairedis==1.0.0 mrvllibsai==1.13.0-1 @@ -16,7 +16,7 @@ pkg-config==1.8.1-1 pkgconf==1.8.1-1 pkgconf-bin==1.8.1-1 python3-dev==3.11.2-1+b1 -python3.11-dev==3.11.2-6 +python3.11-dev==3.11.2-6+deb12u2 sgml-base==1.31 swig==4.1.0-0.2 swig4.0==4.1.0-0.2 diff --git a/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-bookworm-armhf b/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-bookworm-armhf index 0cc251c1f8d0..637e2933d58f 100644 --- a/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-bookworm-armhf +++ b/files/build/versions/dockers/docker-syncd-mrvl/versions-deb-bookworm-armhf @@ -8,7 +8,7 @@ libpcap0.8==1.10.3-1 libpcap0.8-dev==1.10.3-1 libpkgconf3==1.8.1-1 libpython3-dev==3.11.2-1+b1 -libpython3.11-dev==3.11.2-6 +libpython3.11-dev==3.11.2-6+deb12u2 libsaimetadata==1.0.0 libsairedis==1.0.0 mrvllibsai==1.13.0-3 @@ -16,7 +16,7 @@ pkg-config==1.8.1-1 pkgconf==1.8.1-1 pkgconf-bin==1.8.1-1 python3-dev==3.11.2-1+b1 -python3.11-dev==3.11.2-6 +python3.11-dev==3.11.2-6+deb12u2 sgml-base==1.31 swig==4.1.0-0.2 swig4.0==4.1.0-0.2 diff --git a/files/build/versions/dockers/docker-syncd-vs/versions-deb-bookworm b/files/build/versions/dockers/docker-syncd-vs/versions-deb-bookworm index 616dcecd80a9..826787858cec 100644 --- a/files/build/versions/dockers/docker-syncd-vs/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-syncd-vs/versions-deb-bookworm @@ -129,8 +129,8 @@ libclang-cpp14==1:14.0.6-12 libclang1-14==1:14.0.6-12 libctf-nobfd0==2.40-2 libctf0==2.40-2 -libcurl3-gnutls==7.88.1-10+deb12u5 -libcurl3-nss==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 +libcurl3-nss==7.88.1-10+deb12u6 libdbus-1-dev==1.14.10-1~deb12u1 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 @@ -154,7 +154,7 @@ libgc1==1:8.2.2-3 libgcc-12-dev==12.2.0-14 libgfortran-12-dev==12.2.0-14 libgfortran5==12.2.0-14 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgmp-dev==2:6.2.1+dfsg1-1.1 libgmpxx4ldbl==2:6.2.1+dfsg1-1.1 libgomp1==12.2.0-14 @@ -179,8 +179,8 @@ libjs-sphinxdoc==5.3.0-4 libjs-underscore==1.13.4~dfsg+~1.11.4-3 libllvm14==1:14.0.6-12 liblsan0==12.2.0-14 -libltdl-dev==2.4.7-5 -libltdl7==2.4.7-5 +libltdl-dev==2.4.7-7~deb12u1 +libltdl7==2.4.7-7~deb12u1 libmagic-mgc==1:5.44-3 libmagic1==1:5.44-3 libmpc3==1.3.1-1 @@ -216,10 +216,10 @@ libprotoc32==3.21.12-3 libpsm-infinipath1==3.3+20.604758e7-6.2 libpsm2-2==11.2.185-2 libpython3-dev==3.11.2-1+b1 -libpython3.11-dev==3.11.2-6 -libqt5core5a==5.15.8+dfsg-11 -libqt5dbus5==5.15.8+dfsg-11 -libqt5network5==5.15.8+dfsg-11 +libpython3.11-dev==3.11.2-6+deb12u2 +libqt5core5a==5.15.8+dfsg-11+deb12u2 +libqt5dbus5==5.15.8+dfsg-11+deb12u2 +libqt5network5==5.15.8+dfsg-11+deb12u2 libquadmath0==12.2.0-14 librdmacm1==44.0-2 libre2-9==20220601+dfsg-1+b1 @@ -233,13 +233,14 @@ libsaivs==1.0.0 libsaivs-dbgsym==1.0.0 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 -libssl-dev==3.0.11-1~deb12u2 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libstdc++-12-dev==12.2.0-14 libswsscommon-dbgsym==1.0.0 libthrift-0.17.0==0.17.0-2+b2 libthrift-dev==0.17.0-2+b2 libtirpc-dev==1.3.3+ds-1 -libtool==2.4.7-5 +libtool==2.4.7-7~deb12u1 libtsan2==12.2.0-14 libubsan1==12.2.0-14 libucx0==1.13.1-1 @@ -253,7 +254,7 @@ libxext6==2:1.3.4-1+b1 libxml2==2.9.14+dfsg-1.3~deb12u1 libxnvctrl0==525.85.05-3~deb12u1 libz3-4==4.8.12-3.1 -linux-libc-dev==6.1.90-1 +linux-libc-dev==6.1.99-1 llvm==1:14.0-55.7~deb12u1 llvm-14==1:14.0.6-12 llvm-14-linker-tools==1:14.0.6-12 @@ -267,7 +268,8 @@ nss-plugin-pem==1.0.8+1-1 ocl-icd-libopencl1==2.3.1-1 openmpi-bin==4.1.4-3+b1 openmpi-common==4.1.4-3 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 p4lang-bmv2==1.15.0-7 p4lang-p4c==1.2.4.2-2 p4lang-pi==0.1.0-15 @@ -285,7 +287,7 @@ python3-pyroute2==0.7.2-2 python3-scapy==2.5.0+dfsg-2 python3-six==1.16.0-4 python3-thrift==0.17.0-2+b2 -python3.11-dev==3.11.2-6 +python3.11-dev==3.11.2-6+deb12u2 rpcsvc-proto==1.4.3-1 sensible-utils==0.0.17+nmu1 sgml-base==1.31 diff --git a/files/build/versions/dockers/docker-teamd/versions-deb-bookworm b/files/build/versions/dockers/docker-teamd/versions-deb-bookworm index b2369562d25c..a14f3b886845 100644 --- a/files/build/versions/dockers/docker-teamd/versions-deb-bookworm +++ b/files/build/versions/dockers/docker-teamd/versions-deb-bookworm @@ -3,25 +3,28 @@ gdbserver==13.1-3 libbabeltrace1==1.5.11-1+b2 libboost-regex1.74.0==1.74.0+ds1-21 libcbor0.8==0.8.0-2+b1 -libcurl3-gnutls==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 libdebuginfod-common==0.188-2.1 libdebuginfod1==0.188-2.1 libdw1==0.188-2.1 libedit2==3.1-20221030-2 libfido2-1==1.12.0-2+b1 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgpm2==1.20.7-10+b1 libicu72==72.1-3 libipt2==2.0.5-1 libmpfr6==4.2.0-1 libsource-highlight-common==3.1.9-4.2 libsource-highlight4v5==3.1.9-4.2+b3 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libswsscommon-dbgsym==1.0.0 libteam-utils==1.31-1 libteam-utils-dbgsym==1.31-1 libteamdctl0-dbgsym==1.31-1 libunwind8==1.6.2-3 -openssh-client==1:9.2p1-2+deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 sensible-utils==0.0.17+nmu1 sshpass==1.09-1+b1 strace==6.1-0.1 diff --git a/files/build/versions/dockers/sonic-slave-bookworm/versions-deb-bookworm b/files/build/versions/dockers/sonic-slave-bookworm/versions-deb-bookworm index dabe98c5ae2f..902ef9de3424 100644 --- a/files/build/versions/dockers/sonic-slave-bookworm/versions-deb-bookworm +++ b/files/build/versions/dockers/sonic-slave-bookworm/versions-deb-bookworm @@ -26,9 +26,9 @@ autopoint==0.21-12 autotools-dev==20220109.1 bash-completion==1:2.11-6 bc==1.07.1-3+b1 -bind9-dnsutils==1:9.18.24-1 -bind9-host==1:9.18.24-1 -bind9-libs==1:9.18.24-1 +bind9-dnsutils==1:9.18.28-1~deb12u2 +bind9-host==1:9.18.28-1~deb12u2 +bind9-libs==1:9.18.28-1~deb12u2 binutils==2.40-2 binutils-aarch64-linux-gnu==2.40-2 binutils-arm-linux-gnueabihf==2.40-2 @@ -66,7 +66,7 @@ cppcheck==2.10-2 cppzmq-dev==4.9.0-1 cron==3.0pl1-162 cron-daemon-common==3.0pl1-162 -curl==7.88.1-10+deb12u5 +curl==7.88.1-10+deb12u6 cython3==0.29.32-2+b1 dbus==1.14.10-1~deb12u1 dbus-bin==1.14.10-1~deb12u1 @@ -97,11 +97,11 @@ dh-strip-nondeterminism==1.13.1-1 dictionaries-common==1.29.5 diffstat==1.65-1 dirmngr==2.2.40-1.1 -distro-info-data==0.58+deb12u1 +distro-info-data==0.58+deb12u2 dkms==3.0.10-8+deb12u1 dmidecode==3.4-1 dmsetup==2:1.02.185-2 -dnsutils==1:9.18.24-1 +dnsutils==1:9.18.28-1~deb12u2 docbook==4.5-10 docbook-dsssl==1.79-10 docbook-to-man==1:2.0.0-45 @@ -110,7 +110,7 @@ docbook-xml==4.5-12 docker-buildx-plugin==0.10.5-1~debian.12~bookworm docker-ce==5:24.0.2-1~debian.12~bookworm docker-ce-cli==5:24.0.2-1~debian.12~bookworm -docker-ce-rootless-extras==5:26.1.3-1~debian.12~bookworm +docker-ce-rootless-extras==5:27.1.2-1~debian.12~bookworm docker-compose-plugin==2.18.1-1~debian.12~bookworm docutils-common==0.19+dfsg-6 dosfstools==4.2-1 @@ -126,9 +126,9 @@ efibootmgr==17-2 emacsen-common==3.0.5 enchant-2==2.3.3-2 equivs==2.3.1 -exim4-base==4.96-15+deb12u4 -exim4-config==4.96-15+deb12u4 -exim4-daemon-light==4.96-15+deb12u4 +exim4-base==4.96-15+deb12u5 +exim4-config==4.96-15+deb12u5 +exim4-daemon-light==4.96-15+deb12u5 expat==2.5.0-1 fakeroot==1.31-1.2 fig2dev==1:3.2.8b-3 @@ -171,7 +171,7 @@ ghostscript==10.0.0~dfsg-11+deb12u4 gir1.2-atk-1.0==2.46.0-5 gir1.2-atspi-2.0==2.46.0-5 gir1.2-freedesktop==1.74.0-3 -gir1.2-gdkpixbuf-2.0==2.42.10+dfsg-1+b1 +gir1.2-gdkpixbuf-2.0==2.42.10+dfsg-1+deb12u1 gir1.2-glib-2.0==1.74.0-3 gir1.2-gtk-3.0==3.24.38-2~deb12u1 gir1.2-harfbuzz-0.0==6.0.0+dfsg-3 @@ -250,8 +250,8 @@ junit4==4.13.2-3 junit5==5.9.2-1 kernel-wedge==2.104 kmod==30+20221128-1 -krb5-locales==1.20.1-2+deb12u1 -krb5-multidev==1.20.1-2+deb12u1 +krb5-locales==1.20.1-2+deb12u2 +krb5-multidev==1.20.1-2+deb12u2 lcov==1.16-1 less==590-2.1~deb12u2 lib2geom1.2.0==1.2.2-3 @@ -286,7 +286,7 @@ libappstream4==0.16.1-2 libapt-pkg-perl==0.1.40+b2 libarchive-cpio-perl==0.10-3 libarchive-zip-perl==1.68-1 -libarchive13==3.6.2-1 +libarchive13==3.6.2-1+deb12u1 libargon2-1==0~20171227-0.3+deb12u1 libarray-intspan-perl==2.004-2 libasan8==12.2.0-14 @@ -322,11 +322,11 @@ libavahi-client3==0.8-10 libavahi-common-data==0.8-10 libavahi-common3==0.8-10 libavc1394-0==0.5.4-5 -libavcodec59==7:5.1.4-0+deb12u1 -libavfilter8==7:5.1.4-0+deb12u1 -libavformat59==7:5.1.4-0+deb12u1 +libavcodec59==7:5.1.5-0+deb12u1 +libavfilter8==7:5.1.5-0+deb12u1 +libavformat59==7:5.1.5-0+deb12u1 libavif15==0.11.1-1 -libavutil57==7:5.1.4-0+deb12u1 +libavutil57==7:5.1.5-0+deb12u1 libb-hooks-endofscope-perl==0.26-1 libb-hooks-op-check-perl==0.22-2+b1 libbabeltrace-dev==1.5.11-1+b2 @@ -485,8 +485,8 @@ libcgi-fast-perl==1:2.15-1 libcgi-pm-perl==4.55-1 libcgraph6==2.42.2-7+b3 libchromaprint1==1.5.1-2+b1 -libcjson-dev==1.7.15-1 -libcjson1==1.7.15-1 +libcjson-dev==1.7.15-1+deb12u1 +libcjson1==1.7.15-1+deb12u1 libclang-common-14-dev==1:14.0.6-12 libclang-cpp14==1:14.0.6-12 libclang-rt-14-dev==1:14.0.6-12 @@ -536,10 +536,10 @@ libctf0==2.40-2 libcunit1==2.1-3-dfsg-2.6 libcunit1-dev==2.1-3-dfsg-2.6 libcups2==2.4.2-3+deb12u5 -libcurl3-gnutls==7.88.1-10+deb12u5 -libcurl3-nss==7.88.1-10+deb12u5 -libcurl4==7.88.1-10+deb12u5 -libcurl4-openssl-dev==7.88.1-10+deb12u5 +libcurl3-gnutls==7.88.1-10+deb12u6 +libcurl3-nss==7.88.1-10+deb12u6 +libcurl4==7.88.1-10+deb12u6 +libcurl4-openssl-dev==7.88.1-10+deb12u6 libdaemon-dev==0.14-7.1 libdaemon0==0.14-7.1 libdata-dpath-perl==0.58-2 @@ -680,8 +680,8 @@ libfontconfig-dev==2.14.1-4 libfontconfig1==2.14.1-4 libfontenc1==1:1.1.4-1 libfop-java==1:2.8-2 -libfreetype-dev==2.12.1+dfsg-5 -libfreetype6==2.12.1+dfsg-5 +libfreetype-dev==2.12.1+dfsg-5+deb12u3 +libfreetype6==2.12.1+dfsg-5+deb12u3 libfreezethaw-perl==0.5001-3 libfribidi-dev==1.0.8-2.1 libfribidi0==1.0.8-2.1 @@ -702,10 +702,10 @@ libgd-perl==2.76-4+b1 libgd3==2.3.3-9 libgdbm-compat4==1.23-3 libgdbm6==1.23-3 -libgdk-pixbuf-2.0-0==2.42.10+dfsg-1+b1 -libgdk-pixbuf-2.0-dev==2.42.10+dfsg-1+b1 -libgdk-pixbuf2.0-bin==2.42.10+dfsg-1+b1 -libgdk-pixbuf2.0-common==2.42.10+dfsg-1 +libgdk-pixbuf-2.0-0==2.42.10+dfsg-1+deb12u1 +libgdk-pixbuf-2.0-dev==2.42.10+dfsg-1+deb12u1 +libgdk-pixbuf2.0-bin==2.42.10+dfsg-1+deb12u1 +libgdk-pixbuf2.0-common==2.42.10+dfsg-1+deb12u1 libgeronimo-annotation-1.3-spec-java==1.3-1 libgeronimo-interceptor-3.0-spec-java==1.0.1-4 libgetopt-long-descriptive-perl==0.111-1 @@ -728,11 +728,11 @@ libglapi-mesa==22.3.6-1+deb12u1 libgles-dev==1.6.0-1 libgles1==1.6.0-1 libgles2==1.6.0-1 -libglib2.0-0==2.74.6-2+deb12u2 -libglib2.0-bin==2.74.6-2+deb12u2 -libglib2.0-data==2.74.6-2+deb12u2 -libglib2.0-dev==2.74.6-2+deb12u2 -libglib2.0-dev-bin==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 +libglib2.0-bin==2.74.6-2+deb12u3 +libglib2.0-data==2.74.6-2+deb12u3 +libglib2.0-dev==2.74.6-2+deb12u3 +libglib2.0-dev-bin==2.74.6-2+deb12u3 libglibmm-2.4-1v5==2.66.5-2 libglu1-mesa==9.0.2-1.1 libglu1-mesa-dev==9.0.2-1.1 @@ -747,7 +747,7 @@ libgme0==0.6.3-6 libgmock-dev==1.12.1-0.2 libgmp-dev==2:6.2.1+dfsg1-1.1 libgmpxx4ldbl==2:6.2.1+dfsg1-1.1 -libgnutls-dane0==3.7.9-2+deb12u2 +libgnutls-dane0==3.7.9-2+deb12u3 libgomp1==12.2.0-14 libgomp1-armhf-cross==12.2.0-14cross1 libgoogle-perftools4==2.10-1 @@ -768,8 +768,8 @@ libgslcblas0==2.7.1+dfsg-5 libgsm1==1.0.22-1 libgspell-1-2==1.12.0-1+b2 libgspell-1-common==1.12.0-1 -libgssapi-krb5-2==1.20.1-2+deb12u1 -libgssrpc4==1.20.1-2+deb12u1 +libgssapi-krb5-2==1.20.1-2+deb12u2 +libgssrpc4==1.20.1-2+deb12u2 libgstreamer-plugins-base1.0-0==1.22.0-3+deb12u2 libgstreamer1.0-0==1.22.0-2 libgtest-dev==1.12.1-0.2 @@ -907,16 +907,16 @@ libjudydebian1==1.0.5-5+b2 libjxl0.7==0.7.0-10 libjxr-tools==1.2~git20170615.f752187-5 libjxr0==1.2~git20170615.f752187-5 -libk5crypto3==1.20.1-2+deb12u1 -libkadm5clnt-mit12==1.20.1-2+deb12u1 -libkadm5srv-mit12==1.20.1-2+deb12u1 -libkdb5-10==1.20.1-2+deb12u1 +libk5crypto3==1.20.1-2+deb12u2 +libkadm5clnt-mit12==1.20.1-2+deb12u2 +libkadm5srv-mit12==1.20.1-2+deb12u2 +libkdb5-10==1.20.1-2+deb12u2 libkeyutils1==1.6.3-2 libkmod2==30+20221128-1 libkpathsea6==2022.20220321.62855-5.1+deb12u1 -libkrb5-3==1.20.1-2+deb12u1 -libkrb5-dev==1.20.1-2+deb12u1 -libkrb5support0==1.20.1-2+deb12u1 +libkrb5-3==1.20.1-2+deb12u2 +libkrb5-dev==1.20.1-2+deb12u2 +libkrb5support0==1.20.1-2+deb12u2 libksba8==1.6.3-2 liblab-gamut1==2.42.2-7+b3 liblapack3==3.11.0-2 @@ -944,8 +944,8 @@ liblog-any-perl==1.713-1 liblognorm5==2.0.6-4 liblqr-1-0==0.4.2-2.1 liblsan0==12.2.0-14 -libltdl-dev==2.4.7-5 -libltdl7==2.4.7-5 +libltdl-dev==2.4.7-7~deb12u1 +libltdl7==2.4.7-7~deb12u1 liblua5.1-0==5.1.5-9 liblua5.1-0-dev==5.1.5-9 liblua5.3-0==5.3.6-2 @@ -1048,14 +1048,14 @@ libnl-3-200==3.7.0-0.2+b1 libnl-3-dev==3.7.0-0.2+b1 libnl-route-3-200==3.7.0-0.2+b1 libnl-route-3-dev==3.7.0-0.2+b1 -libnode108==18.19.0+dfsg-6~deb12u1 +libnode108==18.19.0+dfsg-6~deb12u2 libnorm-dev==1.5.9+dfsg-2 libnorm1==1.5.9+dfsg-2 libnpth0==1.6-3 libnsl-dev==1.3.0-2 libnsl2==1.3.0-2 libnspr4==2:4.35-1 -libnss-systemd==252.22-1~deb12u1 +libnss-systemd==252.26-1~deb12u2 libnss3==2:3.87.1-1 libnuma-dev==2.0.16-1 libnuma1==2.0.16-1 @@ -1094,7 +1094,7 @@ libpackage-stash-xs-perl==0.30-1+b1 libpackagekit-glib2-18==1.2.6-5 libpadwalker-perl==2.5-1+b3 libpam-cap==1:2.66-4 -libpam-systemd==252.22-1~deb12u1 +libpam-systemd==252.26-1~deb12u2 libpam0g-dev==1.5.2-6+deb12u1 libpango-1.0-0==1.50.12+ds-1 libpango1.0-dev==1.50.12+ds-1 @@ -1174,7 +1174,7 @@ libpoppler-glib8==22.12.0-2+b1 libpoppler126==22.12.0-2+b1 libpopt-dev==1.19+dfsg-1 libpopt0==1.19+dfsg-1 -libpostproc56==7:5.1.4-0+deb12u1 +libpostproc56==7:5.1.5-0+deb12u1 libpotrace0==1.16-2 libproc-processtable-perl==0.634-1+b2 libproc2-0==2:4.0.2-3 @@ -1196,33 +1196,33 @@ libpython3-all-dev==3.11.2-1+b1 libpython3-dbg==3.11.2-1+b1 libpython3-dev==3.11.2-1+b1 libpython3-stdlib==3.11.2-1+b1 -libpython3.11==3.11.2-6 -libpython3.11-dbg==3.11.2-6 -libpython3.11-dev==3.11.2-6 -libpython3.11-minimal==3.11.2-6 -libpython3.11-stdlib==3.11.2-6 +libpython3.11==3.11.2-6+deb12u2 +libpython3.11-dbg==3.11.2-6+deb12u2 +libpython3.11-dev==3.11.2-6+deb12u2 +libpython3.11-minimal==3.11.2-6+deb12u2 +libpython3.11-stdlib==3.11.2-6+deb12u2 libqdox-java==1.12.1-3 libqdox2-java==2.0.3-1 libqhull-r8.0==2020.2-5 -libqt5concurrent5==5.15.8+dfsg-11 -libqt5core5a==5.15.8+dfsg-11 -libqt5dbus5==5.15.8+dfsg-11 -libqt5gui5==5.15.8+dfsg-11 -libqt5network5==5.15.8+dfsg-11 -libqt5opengl5==5.15.8+dfsg-11 -libqt5opengl5-dev==5.15.8+dfsg-11 -libqt5printsupport5==5.15.8+dfsg-11 +libqt5concurrent5==5.15.8+dfsg-11+deb12u2 +libqt5core5a==5.15.8+dfsg-11+deb12u2 +libqt5dbus5==5.15.8+dfsg-11+deb12u2 +libqt5gui5==5.15.8+dfsg-11+deb12u2 +libqt5network5==5.15.8+dfsg-11+deb12u2 +libqt5opengl5==5.15.8+dfsg-11+deb12u2 +libqt5opengl5-dev==5.15.8+dfsg-11+deb12u2 +libqt5printsupport5==5.15.8+dfsg-11+deb12u2 libqt5qml5==5.15.8+dfsg-3 libqt5qmlmodels5==5.15.8+dfsg-3 libqt5quick5==5.15.8+dfsg-3 -libqt5sql5==5.15.8+dfsg-11 -libqt5sql5-sqlite==5.15.8+dfsg-11 +libqt5sql5==5.15.8+dfsg-11+deb12u2 +libqt5sql5-sqlite==5.15.8+dfsg-11+deb12u2 libqt5svg5==5.15.8-3 -libqt5test5==5.15.8+dfsg-11 +libqt5test5==5.15.8+dfsg-11+deb12u2 libqt5waylandclient5==5.15.8-2 libqt5waylandcompositor5==5.15.8-2 -libqt5widgets5==5.15.8+dfsg-11 -libqt5xml5==5.15.8+dfsg-11 +libqt5widgets5==5.15.8+dfsg-11+deb12u2 +libqt5xml5==5.15.8+dfsg-11+deb12u2 libquadmath0==12.2.0-14 librabbitmq4==0.11.0-1+b1 librados2==16.2.11+ds-2 @@ -1321,8 +1321,8 @@ libsrt1.5-gnutls==1.5.1-1 libssh-4==0.10.6-0+deb12u1 libssh-gcrypt-4==0.10.6-0+deb12u1 libssh2-1==1.10.0-3+b1 -libssl-dev==3.0.11-1~deb12u2 -libssl3==3.0.11-1~deb12u2 +libssl-dev==3.0.13-1~deb12u1 +libssl3==3.0.13-1~deb12u1 libstdc++-12-dev==12.2.0-14 libstdc++6-armhf-cross==12.2.0-14cross1 libstemmer0d==2.2.0-2 @@ -1343,14 +1343,14 @@ libsubunit0==1.4.0-3 libsurefire-java==2.22.3-2 libsvtav1enc1==1.4.1+dfsg-1 libswitch-perl==2.17-3 -libswresample4==7:5.1.4-0+deb12u1 -libswscale6==7:5.1.4-0+deb12u1 +libswresample4==7:5.1.5-0+deb12u1 +libswscale6==7:5.1.5-0+deb12u1 libsynctex2==2022.20220321.62855-5.1+deb12u1 libsyntax-keyword-try-perl==0.28-1 libsys-cpuaffinity-perl==1.13~03-2+b1 libsys-hostname-long-perl==1.5-3 -libsystemd-dev==252.22-1~deb12u1 -libsystemd-shared==252.22-1~deb12u1 +libsystemd-dev==252.26-1~deb12u2 +libsystemd-shared==252.26-1~deb12u2 libtag1v5==1.13-2 libtag1v5-vanilla==1.13-2 libtask-weaken-perl==1.06-2 @@ -1390,8 +1390,8 @@ libtirpc-common==1.3.3+ds-1 libtirpc-dev==1.3.3+ds-1 libtirpc3==1.3.3+ds-1 libtk8.6==8.6.13-2 -libtool==2.4.7-5 -libtool-bin==2.4.7-5 +libtool==2.4.7-7~deb12u1 +libtool-bin==2.4.7-7~deb12u1 libtraceevent-dev==1:1.7.1-1 libtraceevent1==1:1.7.1-1 libtracefs-dev==1.6.4-1 @@ -1406,7 +1406,7 @@ libubsan1==12.2.0-14 libubsan1-armhf-cross==12.2.0-14cross1 libuchardet0==0.0.7-1 libucx0==1.13.1-1 -libudev-dev==252.22-1~deb12u1 +libudev-dev==252.26-1~deb12u2 libudfread0==1.1.2-1 libunbound8==1.17.1-2+deb12u2 libunicode-map-perl==0.112-13+b1 @@ -1443,7 +1443,7 @@ libvisual-0.4-0==0.4.0-19 libvorbis0a==1.3.7-1 libvorbisenc2==1.3.7-1 libvorbisfile3==1.3.7-1 -libvpx7==1.12.0-1+deb12u2 +libvpx7==1.12.0-1+deb12u3 libvte-2.91-0==0.70.6-2~deb12u1 libvte-2.91-common==0.70.6-2~deb12u1 libvulkan-dev==1.3.239.0-1 @@ -1607,14 +1607,14 @@ libzvbi0==0.2.41-1 libzzip-0-13==0.13.72+dfsg.1-1.1 licensecheck==3.3.5-1 lintian==2.116.3 -linux-compiler-gcc-12-x86==6.1.90-1 -linux-headers-6.1.0-21-amd64==6.1.90-1 -linux-headers-6.1.0-21-arm64==6.1.90-1 -linux-headers-6.1.0-21-common==6.1.90-1 -linux-headers-amd64==6.1.90-1 -linux-headers-arm64==6.1.90-1 -linux-kbuild-6.1==6.1.90-1 -linux-libc-dev==6.1.90-1 +linux-compiler-gcc-12-x86==6.1.99-1 +linux-headers-6.1.0-23-amd64==6.1.99-1 +linux-headers-6.1.0-23-arm64==6.1.99-1 +linux-headers-6.1.0-23-common==6.1.99-1 +linux-headers-amd64==6.1.99-1 +linux-headers-arm64==6.1.99-1 +linux-kbuild-6.1==6.1.99-1 +linux-libc-dev==6.1.99-1 linuxdoc-tools==0.9.82-1 llvm==1:14.0-55.7~deb12u1 llvm-14==1:14.0.6-12 @@ -1670,10 +1670,10 @@ node-acorn==8.8.1+ds+~cs25.17.7-2 node-busboy==1.6.0+~cs2.6.0-2 node-cjs-module-lexer==1.2.2+dfsg-5 node-jquery==3.6.1+dfsg+~3.5.14-1 -node-undici==5.15.0+dfsg1+~cs20.10.9.3-1+deb12u3 +node-undici==5.15.0+dfsg1+~cs20.10.9.3-1+deb12u4 node-xtend==4.0.2-3 -nodejs==18.19.0+dfsg-6~deb12u1 -nodejs-doc==18.19.0+dfsg-6~deb12u1 +nodejs==18.19.0+dfsg-6~deb12u2 +nodejs-doc==18.19.0+dfsg-6~deb12u2 nss-plugin-pem==1.0.8+1-1 ocl-icd-libopencl1==2.3.1-1 openjade==1.4devel1-22 @@ -1684,10 +1684,10 @@ openjdk-17-jre-headless==17.0.11+9-1~deb12u1 openmpi-bin==4.1.4-3+b1 openmpi-common==4.1.4-3 opensp==1.5.2-13+b2 -openssh-client==1:9.2p1-2+deb12u2 -openssh-server==1:9.2p1-2+deb12u2 -openssh-sftp-server==1:9.2p1-2+deb12u2 -openssl==3.0.11-1~deb12u2 +openssh-client==1:9.2p1-2+deb12u3 +openssh-server==1:9.2p1-2+deb12u3 +openssh-sftp-server==1:9.2p1-2+deb12u3 +openssl==3.0.13-1~deb12u1 os-prober==1.81 ovmf==2022.11-6+deb12u1 packagekit==1.2.6-5 @@ -1721,12 +1721,12 @@ php-text-template==2.0.4-2 php-timer==5.0.3-3 php-tokenizer==1.2.1-1 php-xml==2:8.2+93 -php8.2-cli==8.2.18-1~deb12u1 -php8.2-common==8.2.18-1~deb12u1 -php8.2-mbstring==8.2.18-1~deb12u1 -php8.2-opcache==8.2.18-1~deb12u1 -php8.2-readline==8.2.18-1~deb12u1 -php8.2-xml==8.2.18-1~deb12u1 +php8.2-cli==8.2.20-1~deb12u1 +php8.2-common==8.2.20-1~deb12u1 +php8.2-mbstring==8.2.20-1~deb12u1 +php8.2-opcache==8.2.20-1~deb12u1 +php8.2-readline==8.2.20-1~deb12u1 +php8.2-xml==8.2.20-1~deb12u1 phpunit==9.6.7-1 phpunit-cli-parser==1.0.1-3 phpunit-code-unit==1.0.8-3 @@ -1769,7 +1769,7 @@ publicsuffix==20230209.2326-1 pylint==2.16.2-2 python-apt-common==2.6.0 python-babel-localedata==2.10.3-1 -python-is-python3==3.11.1-3 +python-is-python3==3.11.2-1+deb12u1 python-matplotlib-data==3.6.3-1 python3==3.11.2-1+b1 python3-alabaster==0.7.12-1 @@ -1823,7 +1823,7 @@ python3-hamcrest==2.0.3-2 python3-html5lib==1.1-3 python3-httplib2==0.20.4-3 python3-hyperlink==21.0.0-5 -python3-idna==3.3-1 +python3-idna==3.3-1+deb12u1 python3-imagesize==1.4.1-1 python3-importlib-metadata==4.12.0-1 python3-incremental==21.3.0-2 @@ -1865,8 +1865,8 @@ python3-parso==0.8.3-1 python3-pep517==0.13.0-2 python3-pexpect==4.8.0-4 python3-pickleshare==0.7.5-5 -python3-pil==9.4.0-1.1+b1 -python3-pil.imagetk==9.4.0-1.1+b1 +python3-pil==9.4.0-1.1+deb12u1 +python3-pil.imagetk==9.4.0-1.1+deb12u1 python3-pip-whl==23.0.1+dfsg-1 python3-pkg-resources==66.1.1-1 python3-platformdirs==2.6.0-1 @@ -1897,7 +1897,7 @@ python3-setuptools==66.1.1-1 python3-setuptools-whl==66.1.1-1 python3-six==1.16.0-4 python3-snowballstemmer==2.2.0-2 -python3-software-properties==0.99.30-4 +python3-software-properties==0.99.30-4.1~deb12u1 python3-soupsieve==2.3.2-1 python3-sphinx==5.3.0-4 python3-sphinx-rtd-theme==1.2.0+dfsg-1 @@ -1926,22 +1926,22 @@ python3-xdg==0.28-2 python3-yaml==6.0-3+b2 python3-zipp==1.0.0-6 python3-zope.interface==5.5.2-1+b1 -python3.11==3.11.2-6 -python3.11-dbg==3.11.2-6 -python3.11-dev==3.11.2-6 -python3.11-minimal==3.11.2-6 -python3.11-venv==3.11.2-6 -qemu-block-extra==1:7.2+dfsg-7+deb12u5 -qemu-system-common==1:7.2+dfsg-7+deb12u5 -qemu-system-data==1:7.2+dfsg-7+deb12u5 -qemu-system-gui==1:7.2+dfsg-7+deb12u5 -qemu-system-x86==1:7.2+dfsg-7+deb12u5 -qemu-utils==1:7.2+dfsg-7+deb12u5 -qt5-gtk-platformtheme==5.15.8+dfsg-11 -qt5-qmake==5.15.8+dfsg-11 -qt5-qmake-bin==5.15.8+dfsg-11 -qtbase5-dev==5.15.8+dfsg-11 -qtbase5-dev-tools==5.15.8+dfsg-11 +python3.11==3.11.2-6+deb12u2 +python3.11-dbg==3.11.2-6+deb12u2 +python3.11-dev==3.11.2-6+deb12u2 +python3.11-minimal==3.11.2-6+deb12u2 +python3.11-venv==3.11.2-6+deb12u2 +qemu-block-extra==1:7.2+dfsg-7+deb12u6 +qemu-system-common==1:7.2+dfsg-7+deb12u6 +qemu-system-data==1:7.2+dfsg-7+deb12u6 +qemu-system-gui==1:7.2+dfsg-7+deb12u6 +qemu-system-x86==1:7.2+dfsg-7+deb12u6 +qemu-utils==1:7.2+dfsg-7+deb12u6 +qt5-gtk-platformtheme==5.15.8+dfsg-11+deb12u2 +qt5-qmake==5.15.8+dfsg-11+deb12u2 +qt5-qmake-bin==5.15.8+dfsg-11+deb12u2 +qtbase5-dev==5.15.8+dfsg-11+deb12u2 +qtbase5-dev-tools==5.15.8+dfsg-11+deb12u2 qtchooser==66-2 qttranslations5-l10n==5.15.8-2 qtwayland5==5.15.8-2 @@ -1983,7 +1983,7 @@ shim-signed==1.39+15.7-1 shim-signed-common==1.39+15.7-1 shim-unsigned==15.7-1 slirp4netns==1.2.0-1 -software-properties-common==0.99.30-4 +software-properties-common==0.99.30-4.1~deb12u1 sphinx-common==5.3.0-4 sphinx-rtd-theme-common==1.2.0+dfsg-1 squashfs-tools==1:4.5.1-1 @@ -1992,9 +1992,9 @@ strace==6.1-0.1 sudo==1.9.13p3-1+deb12u1 swig==4.1.0-0.2 swig4.0==4.1.0-0.2 -systemd==252.22-1~deb12u1 -systemd-sysv==252.22-1~deb12u1 -systemd-timesyncd==252.22-1~deb12u1 +systemd==252.26-1~deb12u2 +systemd-sysv==252.26-1~deb12u2 +systemd-timesyncd==252.26-1~deb12u2 t1utils==1.41-4 tcl==8.6.13 tcl8.6==8.6.13+dfsg-2 @@ -2022,7 +2022,7 @@ tk==8.6.13 tk8.6==8.6.13-2 tk8.6-blt2.5==2.5.3+dfsg-4.1 ucf==3.0043+nmu1 -udev==252.22-1~deb12u1 +udev==252.26-1~deb12u2 unicode-data==15.0.0-1 unzip==6.0-28 usb.ids==2024.01.20-0+deb12u1 diff --git a/files/build/versions/dockers/sonic-slave-bookworm/versions-deb-bookworm-armhf b/files/build/versions/dockers/sonic-slave-bookworm/versions-deb-bookworm-armhf index 17485c2a2f9a..5a56eb851a10 100644 --- a/files/build/versions/dockers/sonic-slave-bookworm/versions-deb-bookworm-armhf +++ b/files/build/versions/dockers/sonic-slave-bookworm/versions-deb-bookworm-armhf @@ -3,8 +3,8 @@ dctrl-tools==2.24-3 dvipng==1.15-1.1 libnanomsg-dev==1.1.5+dfsg-1.1 libnanomsg5==1.1.5+dfsg-1.1 -linux-compiler-gcc-12-arm==6.1.90-1 -linux-headers-6.1.0-21-armmp==6.1.90-1 -linux-headers-armmp==6.1.90-1 +linux-compiler-gcc-12-arm==6.1.99-1 +linux-headers-6.1.0-23-armmp==6.1.99-1 +linux-headers-armmp==6.1.99-1 watchdog==5.16-1+b1 wget==1.21.3-1+b1 diff --git a/files/build/versions/dockers/sonic-slave-bookworm/versions-py3 b/files/build/versions/dockers/sonic-slave-bookworm/versions-py3 index 97db75c96ebf..402f9445a9f9 100644 --- a/files/build/versions/dockers/sonic-slave-bookworm/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-bookworm/versions-py3 @@ -12,6 +12,7 @@ beautifulsoup4==4.11.2 beniget==0.4.1 bitarray==2.9.2 blinker==1.5 +blkinfo==0.2.0 brotli==1.0.9 build==0.9.0 certifi==2022.9.24 @@ -91,7 +92,7 @@ pep517==0.13.0 pexpect==4.8.0 pickleshare==0.7.5 pillow==10.0.0 -pip==24.0 +pip==24.2 platformdirs==2.6.0 pluggy==1.0.0+repack ply==3.11 @@ -106,7 +107,7 @@ pyangbind==0.8.2 pyasn1==0.4.8 pyasn1-modules==0.2.8 pyelftools==0.29 -pyfakefs==5.5.0 +pyfakefs==5.6.0 pygments==2.14.0 pygobject==3.42.2 pyhamcrest==2.0.3 @@ -127,8 +128,8 @@ pythran==0.11.0 pytz==2022.7.1 pyxdg==0.28 pyyaml==6.0 -redis==5.0.4 -regex==2024.5.15 +redis==5.0.8 +regex==2024.7.24 requests==2.28.1 roman==3.3 scapy==2.5.0 diff --git a/files/build/versions/dockers/sonic-slave-bookworm/versions-py3-all-arm64 b/files/build/versions/dockers/sonic-slave-bookworm/versions-py3-all-arm64 index 980b0b50f9ca..5206c39a50f7 100644 --- a/files/build/versions/dockers/sonic-slave-bookworm/versions-py3-all-arm64 +++ b/files/build/versions/dockers/sonic-slave-bookworm/versions-py3-all-arm64 @@ -1,2 +1,2 @@ -protobuf==4.25.3 -psutil==5.9.8 +protobuf==4.25.4 +psutil==6.0.0 diff --git a/files/build/versions/dockers/sonic-slave-bookworm/versions-py3-all-armhf b/files/build/versions/dockers/sonic-slave-bookworm/versions-py3-all-armhf index 980b0b50f9ca..5206c39a50f7 100644 --- a/files/build/versions/dockers/sonic-slave-bookworm/versions-py3-all-armhf +++ b/files/build/versions/dockers/sonic-slave-bookworm/versions-py3-all-armhf @@ -1,2 +1,2 @@ -protobuf==4.25.3 -psutil==5.9.8 +protobuf==4.25.4 +psutil==6.0.0 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye index 055af05f9698..8f0505d04b21 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye @@ -24,9 +24,9 @@ autopoint==0.21-4 autotools-dev==20180224.1+nmu1 bash-completion==1:2.11-2 bc==1.07.1-2+b2 -bind9-dnsutils==1:9.16.48-1 -bind9-host==1:9.16.48-1 -bind9-libs==1:9.16.48-1 +bind9-dnsutils==1:9.16.50-1~deb11u1 +bind9-host==1:9.16.50-1~deb11u1 +bind9-libs==1:9.16.50-1~deb11u1 binfmt-support==2.2.1-1+deb11u1 binutils==2.35.2-2 binutils-aarch64-linux-gnu==2.35.2-2 @@ -62,7 +62,7 @@ cpp-10-arm-linux-gnueabihf==10.2.1-6cross1 cpp-arm-linux-gnueabihf==4:10.2.1-1 cppcheck==2.3-1 cron==3.0pl1-137 -curl==7.74.0-1.3+deb11u11 +curl==7.74.0-1.3+deb11u12 cython3==0.29.21-3+b1 dblatex==0.3.12py3-1 dblatex-doc==0.3.12py3-1 @@ -92,11 +92,11 @@ dh-strip-nondeterminism==1.12.0-1 dictionaries-common==1.28.4 diffstat==1.64-1 dirmngr==2.2.27-2+deb11u2 -distro-info-data==0.51+deb11u5 +distro-info-data==0.51+deb11u6 dkms==2.8.4-3 dmeventd==2:1.02.175-2.1 dmsetup==2:1.02.175-2.1 -dnsutils==1:9.16.48-1 +dnsutils==1:9.16.50-1~deb11u1 docbook==4.5-6 docbook-dsssl==1.79-9.2 docbook-to-man==1:2.0.0-45 @@ -106,7 +106,7 @@ docbook-xsl==1.79.2+dfsg-1 docker-buildx-plugin==0.10.5-1~debian.11~bullseye docker-ce==5:24.0.2-1~debian.11~bullseye docker-ce-cli==5:24.0.2-1~debian.11~bullseye -docker-ce-rootless-extras==5:26.1.3-1~debian.11~bullseye +docker-ce-rootless-extras==5:27.1.2-1~debian.11~bullseye docker-compose-plugin==2.18.1-1~debian.11~bullseye docutils-common==0.16+dfsg-4 dosfstools==4.2-1 @@ -120,15 +120,15 @@ dwarves==1.20-1 dwz==0.13+20210201-1 eatmydata==105-9 ed==1.17-1 -emacs-bin-common==1:27.1+1-3.1+deb11u2 -emacs-common==1:27.1+1-3.1+deb11u2 -emacs-el==1:27.1+1-3.1+deb11u2 -emacs-nox==1:27.1+1-3.1+deb11u2 +emacs-bin-common==1:27.1+1-3.1+deb11u5 +emacs-common==1:27.1+1-3.1+deb11u5 +emacs-el==1:27.1+1-3.1+deb11u5 +emacs-nox==1:27.1+1-3.1+deb11u5 emacsen-common==3.0.4 equivs==2.3.1 -exim4-base==4.94.2-7+deb11u2 -exim4-config==4.94.2-7+deb11u2 -exim4-daemon-light==4.94.2-7+deb11u2 +exim4-base==4.94.2-7+deb11u3 +exim4-config==4.94.2-7+deb11u3 +exim4-daemon-light==4.94.2-7+deb11u3 expat==2.2.10-2+deb11u5 fakeroot==1.25.3-1.1 file==1:5.39-3+deb11u1 @@ -170,7 +170,7 @@ ghostscript==9.53.3~dfsg-7+deb11u7 gir1.2-atk-1.0==2.36.0-2 gir1.2-atspi-2.0==2.38.0-4+deb11u1 gir1.2-freedesktop==1.66.1-1+b1 -gir1.2-gdkpixbuf-2.0==2.42.2+dfsg-1+deb11u1 +gir1.2-gdkpixbuf-2.0==2.42.2+dfsg-1+deb11u2 gir1.2-glib-2.0==1.66.1-1+b1 gir1.2-gtk-3.0==3.24.24-4+deb11u3 gir1.2-harfbuzz-0.0==2.7.4-1 @@ -235,7 +235,7 @@ jq==1.6-2.1 junit5==5.3.2-4 kernel-wedge==2.104 kmod==28-1 -krb5-multidev==1.18.3-6+deb11u4 +krb5-multidev==1.18.3-6+deb11u5 lcov==1.14-2 less==551-2+deb11u2 lib32asan6==10.2.1-6 @@ -307,10 +307,10 @@ libavahi-client3==0.8-5+deb11u2 libavahi-common-data==0.8-5+deb11u2 libavahi-common3==0.8-5+deb11u2 libavc1394-0==0.5.4-5 -libavcodec58==7:4.3.6-0+deb11u1 -libavfilter7==7:4.3.6-0+deb11u1 -libavformat58==7:4.3.6-0+deb11u1 -libavutil56==7:4.3.6-0+deb11u1 +libavcodec58==7:4.3.7-0+deb11u1 +libavfilter7==7:4.3.7-0+deb11u1 +libavformat58==7:4.3.7-0+deb11u1 +libavutil56==7:4.3.7-0+deb11u1 libb-hooks-endofscope-perl==0.24-1.1 libb-hooks-op-check-perl==0.22-1+b3 libbabeltrace-dev==1.5.8-1+b3 @@ -516,9 +516,9 @@ libctf0==2.35.2-2 libcunit1==2.1-3-dfsg-2.3 libcunit1-dev==2.1-3-dfsg-2.3 libcups2==2.3.3op2-3+deb11u6 -libcurl3-gnutls==7.74.0-1.3+deb11u11 -libcurl4==7.74.0-1.3+deb11u11 -libcurl4-openssl-dev==7.74.0-1.3+deb11u11 +libcurl3-gnutls==7.74.0-1.3+deb11u12 +libcurl4==7.74.0-1.3+deb11u12 +libcurl4-openssl-dev==7.74.0-1.3+deb11u12 libdaemon-dev==0.14-7.1 libdaemon0==0.14-7.1 libdata-dpath-perl==0.58-1 @@ -662,10 +662,10 @@ libgd-perl==2.73-1+b1 libgd3==2.3.0-2 libgdbm-compat4==1.19-2 libgdbm6==1.19-2 -libgdk-pixbuf-2.0-0==2.42.2+dfsg-1+deb11u1 -libgdk-pixbuf-2.0-dev==2.42.2+dfsg-1+deb11u1 -libgdk-pixbuf2.0-bin==2.42.2+dfsg-1+deb11u1 -libgdk-pixbuf2.0-common==2.42.2+dfsg-1+deb11u1 +libgdk-pixbuf-2.0-0==2.42.2+dfsg-1+deb11u2 +libgdk-pixbuf-2.0-dev==2.42.2+dfsg-1+deb11u2 +libgdk-pixbuf2.0-bin==2.42.2+dfsg-1+deb11u2 +libgdk-pixbuf2.0-common==2.42.2+dfsg-1+deb11u2 libgeronimo-annotation-1.3-spec-java==1.3-1 libgeronimo-interceptor-3.0-spec-java==1.0.1-4 libgetopt-long-descriptive-perl==0.105-1 @@ -685,11 +685,11 @@ libglapi-mesa==20.3.5-1 libgles-dev==1.3.2-1 libgles1==1.3.2-1 libgles2==1.3.2-1 -libglib2.0-0==2.66.8-1+deb11u3 -libglib2.0-bin==2.66.8-1+deb11u3 -libglib2.0-data==2.66.8-1+deb11u3 -libglib2.0-dev==2.66.8-1+deb11u3 -libglib2.0-dev-bin==2.66.8-1+deb11u3 +libglib2.0-0==2.66.8-1+deb11u4 +libglib2.0-bin==2.66.8-1+deb11u4 +libglib2.0-data==2.66.8-1+deb11u4 +libglib2.0-dev==2.66.8-1+deb11u4 +libglib2.0-dev-bin==2.66.8-1+deb11u4 libglu1-mesa==9.0.1-1 libglu1-mesa-dev==9.0.1-1 libglvnd-dev==1.3.2-1 @@ -701,7 +701,7 @@ libgme0==0.6.3-2 libgmock-dev==1.10.0.20201025-1.1 libgmp-dev==2:6.2.1+dfsg-1+deb11u1 libgmpxx4ldbl==2:6.2.1+dfsg-1+deb11u1 -libgnutls-dane0==3.7.1-5+deb11u4 +libgnutls-dane0==3.7.1-5+deb11u5 libgomp1==10.2.1-6 libgomp1-armhf-cross==10.2.1-6cross1 libgoogle-gson-java==2.8.6-1+deb11u1 @@ -717,7 +717,7 @@ libgs9==9.53.3~dfsg-7+deb11u7 libgs9-common==9.53.3~dfsg-7+deb11u7 libgsasl7==1.10.0-4+deb11u1 libgsm1==1.0.18-2 -libgssrpc4==1.18.3-6+deb11u4 +libgssrpc4==1.18.3-6+deb11u5 libgstreamer-plugins-base1.0-0==1.18.4-2+deb11u2 libgstreamer1.0-0==1.18.4-2.1 libgtest-dev==1.10.0.20201025-1.1 @@ -838,7 +838,6 @@ libjson-glib-1.0-common==1.6.2-1 libjson-maybexs-perl==1.004003-1 libjson-perl==4.03000-1 libjson-xs-perl==4.030-1+b1 -libjsoncpp-dev==1.9.4-4 libjsoncpp24==1.9.4-4 libjsp-api-java==2.3.4-3 libjsr305-java==0.1~+svn49-11 @@ -847,12 +846,12 @@ libjudy-dev==1.0.5-5+b2 libjudydebian1==1.0.5-5+b2 libjxr-tools==1.1-6+b1 libjxr0==1.1-6+b1 -libkadm5clnt-mit12==1.18.3-6+deb11u4 -libkadm5srv-mit12==1.18.3-6+deb11u4 -libkdb5-10==1.18.3-6+deb11u4 +libkadm5clnt-mit12==1.18.3-6+deb11u5 +libkadm5srv-mit12==1.18.3-6+deb11u5 +libkdb5-10==1.18.3-6+deb11u5 libkmod2==28-1 libkpathsea6==2020.20200327.54578-7+deb11u1 -libkrb5-dev==1.18.3-6+deb11u4 +libkrb5-dev==1.18.3-6+deb11u5 libksba8==1.5.0-3+deb11u2 liblab-gamut1==2.42.2-5 liblapack3==3.9.0-3+deb11u1 @@ -984,7 +983,7 @@ libnorm1==1.5.9+dfsg-2 libnpth0==1.6-3 libnsl-dev==1.3.0-2 libnspr4==2:4.29-1 -libnss-systemd==247.3-7+deb11u4 +libnss-systemd==247.3-7+deb11u5 libnss3==2:3.61-1+deb11u3 libntlm0==1.6-3 libnuma-dev==2.0.12-1+b1 @@ -1023,7 +1022,7 @@ libpackage-stash-xs-perl==0.29-1+b2 libpackagekit-glib2-18==1.2.2-2 libpadwalker-perl==2.5-1+b1 libpam-cap==1:2.44-1 -libpam-systemd==247.3-7+deb11u4 +libpam-systemd==247.3-7+deb11u5 libpam0g-dev==1.4.0-9+deb11u1 libpango-1.0-0==1.46.2-3 libpango1.0-dev==1.46.2-3 @@ -1097,7 +1096,7 @@ libpod-parser-perl==1.63-2 libpolkit-agent-1-0==0.105-31+deb11u1 libpolkit-gobject-1-0==0.105-31+deb11u1 libpopt0==1.18-2 -libpostproc55==7:4.3.6-0+deb11u1 +libpostproc55==7:4.3.7-0+deb11u1 libproc-processtable-perl==0.59-2+b1 libprocps8==2:3.3.17-5 libprotobuf-c1==1.3.3-1+b2 @@ -1127,20 +1126,20 @@ libpython3.9-minimal==3.9.2-1 libpython3.9-stdlib==3.9.2-1 libqdox-java==1.12.1-3 libqdox2-java==2.0.0-1 -libqt5concurrent5==5.15.2+dfsg-9 -libqt5core5a==5.15.2+dfsg-9 -libqt5dbus5==5.15.2+dfsg-9 -libqt5gui5==5.15.2+dfsg-9 -libqt5network5==5.15.2+dfsg-9 -libqt5opengl5==5.15.2+dfsg-9 -libqt5opengl5-dev==5.15.2+dfsg-9 -libqt5printsupport5==5.15.2+dfsg-9 -libqt5sql5==5.15.2+dfsg-9 -libqt5sql5-sqlite==5.15.2+dfsg-9 +libqt5concurrent5==5.15.2+dfsg-9+deb11u1 +libqt5core5a==5.15.2+dfsg-9+deb11u1 +libqt5dbus5==5.15.2+dfsg-9+deb11u1 +libqt5gui5==5.15.2+dfsg-9+deb11u1 +libqt5network5==5.15.2+dfsg-9+deb11u1 +libqt5opengl5==5.15.2+dfsg-9+deb11u1 +libqt5opengl5-dev==5.15.2+dfsg-9+deb11u1 +libqt5printsupport5==5.15.2+dfsg-9+deb11u1 +libqt5sql5==5.15.2+dfsg-9+deb11u1 +libqt5sql5-sqlite==5.15.2+dfsg-9+deb11u1 libqt5svg5==5.15.2-3 -libqt5test5==5.15.2+dfsg-9 -libqt5widgets5==5.15.2+dfsg-9 -libqt5xml5==5.15.2+dfsg-9 +libqt5test5==5.15.2+dfsg-9+deb11u1 +libqt5widgets5==5.15.2+dfsg-9+deb11u1 +libqt5xml5==5.15.2+dfsg-9+deb11u1 libquadmath0==10.2.1-6 librabbitmq4==0.10.0-1 libraw1394-11==2.1.2-2 @@ -1220,7 +1219,7 @@ libsqlite3-0==3.34.1-3 libsratom-0-0==0.6.8-1 libsrt1.4-gnutls==1.4.2-1.3 libssh-gcrypt-4==0.9.8-0+deb11u1 -libssh2-1==1.9.0-2 +libssh2-1==1.9.0-2+deb11u1 libssl-dev==1.1.1w-0+deb11u1 libstdc++-10-dev==10.2.1-6 libstdc++6-armhf-cross==10.2.1-6cross1 @@ -1240,12 +1239,12 @@ libsubunit-dev==1.4.0-3 libsubunit0==1.4.0-3 libsurefire-java==2.22.3-1 libswitch-perl==2.17-2.1 -libswresample3==7:4.3.6-0+deb11u1 -libswscale5==7:4.3.6-0+deb11u1 +libswresample3==7:4.3.7-0+deb11u1 +libswscale5==7:4.3.7-0+deb11u1 libsynctex2==2020.20200327.54578-7+deb11u1 libsys-cpuaffinity-perl==1.13~03-1 libsys-hostname-long-perl==1.5-2 -libsystemd-dev==247.3-7+deb11u4 +libsystemd-dev==247.3-7+deb11u5 libtag1v5==1.11.1+dfsg.1-3 libtag1v5-vanilla==1.11.1+dfsg.1-3 libtask-weaken-perl==1.06-1 @@ -1293,7 +1292,7 @@ libubsan1==10.2.1-6 libubsan1-armhf-cross==10.2.1-6cross1 libuchardet0==0.0.7-1 libucx0==1.10.1~rc1+really.1.10.0-1 -libudev-dev==247.3-7+deb11u4 +libudev-dev==247.3-7+deb11u5 libudfread0==1.1.1-1 libunbound8==1.13.1-1+deb11u2 libunicode-linebreak-perl==0.0.20190101-1+b3 @@ -1328,7 +1327,7 @@ libvisual-0.4-0==0.4.0-17 libvorbis0a==1.3.7-1 libvorbisenc2==1.3.7-1 libvorbisfile3==1.3.7-1 -libvpx6==1.9.0-1+deb11u2 +libvpx6==1.9.0-1+deb11u3 libvte-2.91-0==0.62.3-1 libvte-2.91-common==0.62.3-1 libvulkan-dev==1.2.162.0-1 @@ -1454,7 +1453,7 @@ libxmlgraphics-commons-java==2.4-2~deb11u1 libxmlrpc-lite-perl==0.717-4 libxmu6==2:1.1.2-2+b3 libxmuu1==2:1.1.2-2+b3 -libxnvctrl0==470.141.03-1~deb11u1 +libxnvctrl0==470.239.06-1 libxpm4==1:3.5.12-1.1+deb11u1 libxrandr-dev==2:1.5.1-1 libxrandr2==2:1.5.1-1 @@ -1490,14 +1489,14 @@ libzvbi0==0.2.35-18 libzzip-0-13==0.13.62-3.3+deb11u1 licensecheck==3.1.1-2 lintian==2.104.0 -linux-compiler-gcc-10-x86==5.10.218-1 -linux-headers-5.10.0-30-amd64==5.10.218-1 -linux-headers-5.10.0-30-arm64==5.10.218-1 -linux-headers-5.10.0-30-common==5.10.218-1 -linux-headers-amd64==5.10.218-1 -linux-headers-arm64==5.10.218-1 -linux-kbuild-5.10==5.10.218-1 -linux-libc-dev==5.10.218-1 +linux-compiler-gcc-10-x86==5.10.221-1 +linux-headers-5.10.0-31-amd64==5.10.221-1 +linux-headers-5.10.0-31-arm64==5.10.221-1 +linux-headers-5.10.0-31-common==5.10.221-1 +linux-headers-amd64==5.10.221-1 +linux-headers-arm64==5.10.221-1 +linux-kbuild-5.10==5.10.221-1 +linux-libc-dev==5.10.221-1 linuxdoc-tools==0.9.82-1 llvm==1:11.0-51+nmu5 llvm-11==1:11.0.1-2 @@ -1685,7 +1684,7 @@ python3-gpg==1.14.0-1+b2 python3-hamcrest==1.9.0-3 python3-html5lib==1.1-3 python3-hyperlink==19.0.0-2 -python3-idna==2.10-1 +python3-idna==2.10-1+deb11u1 python3-imagesize==1.2.0-2 python3-importlib-metadata==1.6.0-2 python3-incremental==17.5.0-1 @@ -1716,7 +1715,7 @@ python3-parse==1.6.6-0.2 python3-parso==0.8.1-1 python3-pexpect==4.8.0-2 python3-pickleshare==0.7.5-3 -python3-pil==8.1.2+dfsg-0.3+deb11u1 +python3-pil==8.1.2+dfsg-0.3+deb11u2 python3-pkg-resources==52.0.0-4 python3-pluggy==0.13.0-6 python3-ply==3.11-4 @@ -1772,11 +1771,11 @@ qemu-system-data==1:5.2+dfsg-11+deb11u3 qemu-system-gui==1:5.2+dfsg-11+deb11u3 qemu-system-x86==1:5.2+dfsg-11+deb11u3 qemu-utils==1:5.2+dfsg-11+deb11u3 -qt5-gtk-platformtheme==5.15.2+dfsg-9 -qt5-qmake==5.15.2+dfsg-9 -qt5-qmake-bin==5.15.2+dfsg-9 -qtbase5-dev==5.15.2+dfsg-9 -qtbase5-dev-tools==5.15.2+dfsg-9 +qt5-gtk-platformtheme==5.15.2+dfsg-9+deb11u1 +qt5-qmake==5.15.2+dfsg-9+deb11u1 +qt5-qmake-bin==5.15.2+dfsg-9+deb11u1 +qtbase5-dev==5.15.2+dfsg-9+deb11u1 +qtbase5-dev-tools==5.15.2+dfsg-9+deb11u1 qtchooser==66-2 qttranslations5-l10n==5.15.2-2 quilt==0.66-2.1 @@ -1845,9 +1844,9 @@ strace==5.10-1 sudo==1.9.5p2-3+deb11u1 swig==4.0.2-1 swig4.0==4.0.2-1 -systemd==247.3-7+deb11u4 -systemd-sysv==247.3-7+deb11u4 -systemd-timesyncd==247.3-7+deb11u4 +systemd==247.3-7+deb11u5 +systemd-sysv==247.3-7+deb11u5 +systemd-timesyncd==247.3-7+deb11u5 t1utils==1.41-4 tcl==8.6.11+1 tcl8.6==8.6.11+dfsg-1 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf index bd29040d6542..eef585c8b7b8 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye-armhf @@ -3,7 +3,7 @@ dvipng==1.15-1.1 libjpeg-dev==1:2.0.6-4 libjpeg62-turbo-dev==1:2.0.6-4 libunicode-linebreak-perl==0.0.20190101-1+b2 -linux-compiler-gcc-10-arm==5.10.218-1 -linux-headers-5.10.0-30-armmp==5.10.218-1 -linux-headers-armmp==5.10.218-1 +linux-compiler-gcc-10-arm==5.10.221-1 +linux-headers-5.10.0-31-armmp==5.10.221-1 +linux-headers-armmp==5.10.221-1 nasm==2.15.05-1 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 index 4bfb6d46bc44..19ed5b0197fe 100644 --- a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 @@ -8,6 +8,7 @@ backcall==0.2.0 bcrypt==3.1.7 beautifulsoup4==4.9.3 bitarray==2.9.2 +blkinfo==0.2.0 certifi==2020.6.20 chardet==4.0.0 click==7.1.2 @@ -69,11 +70,11 @@ parso==0.8.1 pexpect==4.8.0 pickleshare==0.7.5 pillow==9.4.0 -pip==24.0 +pip==24.2 pluggy==0.13.0 ply==3.11 prompt-toolkit==3.0.14 -protobuf==4.25.3 +protobuf==4.25.4 psutil==5.8.0 ptyprocess==0.7.0 py==1.10.0 @@ -82,7 +83,7 @@ pyangbind==0.8.1 pyasn1==0.4.8 pyasn1-modules==0.2.1 pycurl==7.43.0.6 -pyfakefs==5.5.0 +pyfakefs==5.6.0 pygments==2.7.1 pygobject==3.38.0 pyhamcrest==1.9.0 @@ -101,8 +102,8 @@ python-magic==0.4.20 pytz==2021.1 pyxdg==0.27 pyyaml==5.4.1 -redis==5.0.4 -regex==2024.5.15 +redis==5.0.8 +regex==2024.7.24 requests==2.25.1 roman==2.0.0 scapy==2.4.4 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-arm64 b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-arm64 new file mode 100644 index 000000000000..84f3d20c064b --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-arm64 @@ -0,0 +1 @@ +psutil==6.0.0 diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-armhf b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-armhf new file mode 100644 index 000000000000..84f3d20c064b --- /dev/null +++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3-all-armhf @@ -0,0 +1 @@ +psutil==6.0.0 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster index c51600950891..4469ca16b14d 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster @@ -95,7 +95,7 @@ docbook-xml==4.5-8 docker-buildx-plugin==0.10.5-1~debian.10~buster docker-ce==5:24.0.2-1~debian.10~buster docker-ce-cli==5:24.0.2-1~debian.10~buster -docker-ce-rootless-extras==5:26.1.3-1~debian.10~buster +docker-ce-rootless-extras==5:26.1.4-1~debian.10~buster docker-compose-plugin==2.18.1-1~debian.10~buster docutils-common==0.14+dfsg-4 docutils-doc==0.14+dfsg-4 @@ -156,9 +156,9 @@ gir1.2-gtk-3.0==3.24.5-1 gir1.2-harfbuzz-0.0==2.3.1-1 gir1.2-packagekitglib-1.0==1.1.12-5 gir1.2-pango-1.0==1.42.4-8~deb10u1 -git==1:2.20.1-2+deb10u8 +git==1:2.20.1-2+deb10u9 git-buildpackage==0.9.14 -git-man==1:2.20.1-2+deb10u8 +git-man==1:2.20.1-2+deb10u9 glib-networking==2.58.0-2+deb10u2 glib-networking-common==2.58.0-2+deb10u2 glib-networking-services==2.58.0-2+deb10u2 @@ -342,14 +342,15 @@ libbsh-java==2.0b4-19 libbz2-dev==1.0.6-9.2~deb10u2 libc-ares-dev==1.14.0-1+deb10u4 libc-ares2==1.14.0-1+deb10u4 -libc-dev-bin==2.28-10+deb10u3 -libc-l10n==2.28-10+deb10u3 -libc6-dbg==2.28-10+deb10u3 -libc6-dev==2.28-10+deb10u3 -libc6-dev-i386==2.28-10+deb10u3 -libc6-dev-x32==2.28-10+deb10u3 -libc6-i386==2.28-10+deb10u3 -libc6-x32==2.28-10+deb10u3 +libc-dev-bin==2.28-10+deb10u4 +libc-l10n==2.28-10+deb10u4 +libc6==2.28-10+deb10u4 +libc6-dbg==2.28-10+deb10u4 +libc6-dev==2.28-10+deb10u4 +libc6-dev-i386==2.28-10+deb10u4 +libc6-dev-x32==2.28-10+deb10u4 +libc6-i386==2.28-10+deb10u4 +libc6-x32==2.28-10+deb10u4 libcaca0==0.99.beta19-2.1+deb10u1 libcacard0==1:2.6.1-1 libcaf-openmpi-3==2.4.0-2 @@ -415,9 +416,9 @@ libcryptsetup12==2:2.1.0-5+deb10u2 libcrystalhd3==1:0.0~git20110715.fdd2f19-13 libcunit1==2.1-3-dfsg-2+b12 libcunit1-dev==2.1-3-dfsg-2+b12 -libcups2==2.2.10-6+deb10u9 +libcups2==2.2.10-6+deb10u10 libcupsfilters1==1.21.6-5+deb10u1 -libcupsimage2==2.2.10-6+deb10u9 +libcupsimage2==2.2.10-6+deb10u10 libcurl3-gnutls==7.64.0-4+deb10u9 libcurl4==7.64.0-4+deb10u9 libcurl4-openssl-dev==7.64.0-4+deb10u9 @@ -1194,7 +1195,7 @@ libvisual-0.4-0==0.4.0-15 libvorbis0a==1.3.6-2 libvorbisenc2==1.3.6-2 libvorbisfile3==1.3.6-2 -libvpx5==1.7.0-3+deb10u2 +libvpx5==1.7.0-3+deb10u3 libvte-2.91-0==0.54.2-2 libvte-2.91-common==0.54.2-2 libvulkan-dev==1.1.97-2 @@ -1359,18 +1360,18 @@ libzvbi0==0.2.35-16 libzzip-0-13==0.13.62-3.2+deb10u1 licensecheck==3.0.31-3 lintian==2.15.0 -linux-compiler-gcc-8-x86==4.19.304-1 -linux-headers-4.19.0-26-amd64==4.19.304-1 -linux-headers-4.19.0-26-common==4.19.304-1 -linux-headers-amd64==4.19+105+deb10u21 -linux-kbuild-4.19==4.19.304-1 -linux-libc-dev==4.19.304-1 +linux-compiler-gcc-8-x86==4.19.316-1 +linux-headers-4.19.0-27-amd64==4.19.316-1 +linux-headers-4.19.0-27-common==4.19.316-1 +linux-headers-amd64==4.19+105+deb10u22 +linux-kbuild-4.19==4.19.316-1 +linux-libc-dev==4.19.316-1 linuxdoc-tools==0.9.73-2 llvm-7==1:7.0.1-8+deb10u2 llvm-7-dev==1:7.0.1-8+deb10u2 llvm-7-runtime==1:7.0.1-8+deb10u2 lmodern==2.004.5-6 -locales==2.28-10+deb10u3 +locales==2.28-10+deb10u4 logrotate==3.14.0-4 lsb-base==10.2019051400 lsb-release==10.2019051400 @@ -1418,7 +1419,7 @@ openssh-client==1:7.9p1-10+deb10u4 openssh-server==1:7.9p1-10+deb10u4 openssh-sftp-server==1:7.9p1-10+deb10u4 openssl==1.1.1n-0+deb10u6 -ovmf==0~20181115.85588389-3+deb10u3 +ovmf==0~20181115.85588389-3+deb10u4 packagekit==1.1.12-5 packagekit-tools==1.1.12-5 pango1.0-tools==1.42.4-8~deb10u1 @@ -1449,13 +1450,13 @@ php-token-stream==3.0.1-1 php-tokenizer==1.1.0-1 php-webmozart-assert==1.4.0-3 php-xml==2:7.3+69 -php7.3-cli==7.3.31-1~deb10u6 -php7.3-common==7.3.31-1~deb10u6 -php7.3-json==7.3.31-1~deb10u6 -php7.3-mbstring==7.3.31-1~deb10u6 -php7.3-opcache==7.3.31-1~deb10u6 -php7.3-readline==7.3.31-1~deb10u6 -php7.3-xml==7.3.31-1~deb10u6 +php7.3-cli==7.3.31-1~deb10u7 +php7.3-common==7.3.31-1~deb10u7 +php7.3-json==7.3.31-1~deb10u7 +php7.3-mbstring==7.3.31-1~deb10u7 +php7.3-opcache==7.3.31-1~deb10u7 +php7.3-readline==7.3.31-1~deb10u7 +php7.3-xml==7.3.31-1~deb10u7 phpunit==7.5.6-1 phpunit-code-unit-reverse-lookup==1.0.1-1 phpunit-comparator==3.0.2-1 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf index fc8b535d026f..4db6ea2c4dcf 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf +++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster-armhf @@ -17,7 +17,7 @@ libqt5sql5-sqlite==5.11.3+dfsg1-1+deb10u5 libqt5test5==5.11.3+dfsg1-1+deb10u5 libqt5widgets5==5.11.3+dfsg1-1+deb10u5 libqt5xml5==5.11.3+dfsg1-1+deb10u5 -linux-compiler-gcc-8-arm==4.19.304-1 +linux-compiler-gcc-8-arm==4.19.316-1 nasm==2.14-1 qt5-default==5.11.3+dfsg1-1+deb10u5 qt5-gtk-platformtheme==5.11.3+dfsg1-1+deb10u5 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-py2 b/files/build/versions/dockers/sonic-slave-buster/versions-py2 index b981e77dd5db..d043b8e5bed5 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-py2 +++ b/files/build/versions/dockers/sonic-slave-buster/versions-py2 @@ -7,6 +7,7 @@ automat==0.6.0 babel==2.6.0 backports.functools-lru-cache==1.5 beautifulsoup4==4.7.1 +blkinfo==0.2.0 certifi==2018.8.24 chardet==3.0.4 click==7.0 @@ -57,6 +58,7 @@ pexpect==4.6.0 pillow==5.4.1 pip==20.3.4 pluggy==0.8.0 +psutil==6.0.0 ptyprocess==0.7.0 py==1.7.0 pyasn1==0.4.2 diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-py3 b/files/build/versions/dockers/sonic-slave-buster/versions-py3 index 169a0f62a0fe..8274e14ba665 100644 --- a/files/build/versions/dockers/sonic-slave-buster/versions-py3 +++ b/files/build/versions/dockers/sonic-slave-buster/versions-py3 @@ -5,6 +5,7 @@ atomicwrites==1.1.5 attrs==18.2.0 babel==2.6.0 bitarray==2.9.2 +blkinfo==0.2.0 certifi==2018.8.24 chardet==3.0.4 cov-core==1.15.0 @@ -25,7 +26,7 @@ jinja2==3.0.3 keyring==17.1.1 keyrings.alt==3.1.1 lxml==4.9.1 -m2crypto==0.41.0 +m2crypto==0.42.0 mako==1.0.7 markdown==3.0.1 markupsafe==2.0.1 @@ -43,13 +44,14 @@ pexpect==4.8.0 pillow==9.4.0 pip==24.0 pluggy==0.8.0 +psutil==6.0.0 ptyprocess==0.7.0 py==1.7.0 pyang==2.4.0 pyangbind==0.8.1 pycrypto==2.6.1 pycurl==7.43.0.2 -pyfakefs==5.5.0 +pyfakefs==5.6.0 pygments==2.3.1 pygobject==3.30.4 pympler==0.8 @@ -64,7 +66,7 @@ python-magic==0.4.16 pytz==2019.1 pyxdg==0.25 pyyaml==5.4.1 -redis==5.0.4 +redis==5.0.8 regex==2024.4.16 requests==2.21.0 roman==2.0.0 diff --git a/files/build/versions/host-base-image/versions-deb-bookworm b/files/build/versions/host-base-image/versions-deb-bookworm index 6d97d65c7f1b..d14312af2f5e 100644 --- a/files/build/versions/host-base-image/versions-deb-bookworm +++ b/files/build/versions/host-base-image/versions-deb-bookworm @@ -1,9 +1,9 @@ adduser==3.134 apt==2.6.1 -base-files==12.4+deb12u5 +base-files==12.4+deb12u6 base-passwd==3.6.1 -bash==5.2.15-2+b2 -bsdutils==1:2.38.1-5+b1 +bash==5.2.15-2+b7 +bsdutils==1:2.38.1-5+deb12u1 coreutils==9.1-1 dash==0.5.12-2 debconf==1.5.82 @@ -24,10 +24,10 @@ libapt-pkg6.0==2.6.1 libattr1==1:2.5.1-4 libaudit-common==1:3.0.9-1 libaudit1==1:3.0.9-1 -libblkid1==2.38.1-5+b1 +libblkid1==2.38.1-5+deb12u1 libbz2-1.0==1.0.8-5+b1 -libc-bin==2.36-9+deb12u4 -libc6==2.36-9+deb12u4 +libc-bin==2.36-9+deb12u7 +libc6==2.36-9+deb12u7 libcap-ng0==0.8.3-1+b3 libcap2==1:2.66-4 libcom-err2==1.47.0-2 @@ -39,14 +39,14 @@ libffi8==3.4.4-1 libgcc-s1==12.2.0-14 libgcrypt20==1.10.1-3 libgmp10==2:6.2.1+dfsg1-1.1 -libgnutls30==3.7.9-2+deb12u2 +libgnutls30==3.7.9-2+deb12u3 libgpg-error0==1.46-1 libhogweed6==3.8.1-2 libidn2-0==2.3.3-1+b1 liblz4-1==1.9.4-1 liblzma5==5.4.1-0.2 libmd0==1.0.4-2 -libmount1==2.38.1-5+b1 +libmount1==2.38.1-5+deb12u1 libnettle8==3.8.1-2 libp11-kit0==0.24.1-2 libpam-modules==1.5.2-6+deb12u1 @@ -54,26 +54,26 @@ libpam-modules-bin==1.5.2-6+deb12u1 libpam-runtime==1.5.2-6+deb12u1 libpam0g==1.5.2-6+deb12u1 libpcre2-8-0==10.42-1 -libseccomp2==2.5.4-1+b3 +libseccomp2==2.5.4-1+deb12u1 libselinux1==3.4-1+b6 libsemanage-common==3.4-1 libsemanage2==3.4-1+b5 libsepol2==3.4-2.1 -libsmartcols1==2.38.1-5+b1 +libsmartcols1==2.38.1-5+deb12u1 libss2==1.47.0-2 libstdc++6==12.2.0-14 -libsystemd0==252.22-1~deb12u1 +libsystemd0==252.26-1~deb12u2 libtasn1-6==4.19.0-2 libtinfo6==6.4-4 -libudev1==252.22-1~deb12u1 +libudev1==252.26-1~deb12u2 libunistring2==1.0-2 -libuuid1==2.38.1-5+b1 +libuuid1==2.38.1-5+deb12u1 libxxhash0==0.8.1-1 libzstd1==1.5.4+dfsg2-5 login==1:4.13+dfsg1-1+b1 logsave==1.47.0-2 mawk==1.3.4.20200120-3.1 -mount==2.38.1-5+b1 +mount==2.38.1-5+deb12u1 ncurses-base==6.4-4 ncurses-bin==6.4-4 passwd==1:4.13+dfsg1-1+b1 @@ -83,6 +83,6 @@ sysvinit-utils==3.06-4 tar==1.34+dfsg-1.2+deb12u1 tzdata==2024a-0+deb12u1 usr-is-merged==37~deb12u1 -util-linux==2.38.1-5+b1 -util-linux-extra==2.38.1-5+b1 +util-linux==2.38.1-5+deb12u1 +util-linux-extra==2.38.1-5+deb12u1 zlib1g==1:1.2.13.dfsg-1 diff --git a/files/build/versions/host-image/versions-deb-bookworm b/files/build/versions/host-image/versions-deb-bookworm index b3d1df0f77df..820dfc3ab34b 100644 --- a/files/build/versions/host-image/versions-deb-bookworm +++ b/files/build/versions/host-image/versions-deb-bookworm @@ -7,7 +7,7 @@ auditd==1:3.0.9-1 bash==5.1-2 bash-completion==1:2.11-6 bash-tacplus==1.0.0 -bfscripts==4.6.0-13035 +bfscripts==4.7.0-13127 binutils==2.40-2 binutils-aarch64-linux-gnu==2.40-2 binutils-common==2.40-2 @@ -16,7 +16,6 @@ bluefield-platform-modules==1.0 bridge-utils==1.7.1-1 bsdextrautils==2.38.1-5+deb12u1 bsdmainutils==12.1.8 -bsdutils==1:2.38.1-5+deb12u1 busybox==1:1.35.0-4+b3 ca-certificates==20230311 cgroup-tools==2.0.2-2 @@ -27,14 +26,14 @@ cpp==4:12.2.0-3 cpp-12==12.2.0-14 cron==3.0pl1-162 cron-daemon-common==3.0pl1-162 -curl==7.88.1-10+deb12u5 +curl==7.88.1-10+deb12u6 dbus==1.14.10-1~deb12u1 dbus-bin==1.14.10-1~deb12u1 dbus-daemon==1.14.10-1~deb12u1 dbus-session-bus-common==1.14.10-1~deb12u1 dbus-system-bus-common==1.14.10-1~deb12u1 device-tree-compiler==1.6.1-4+b1 -distro-info-data==0.58+deb12u1 +distro-info-data==0.58+deb12u2 dmidecode==3.4-1 dmsetup==2:1.02.185-2 docker-ce==5:24.0.2-1~debian.12~bookworm @@ -65,7 +64,7 @@ grub2-common==2.06-13+deb12u1 haveged==1.9.14-1+b1 hdparm==9.65+ds-1 hping3==3.a2.ds2-10 -hw-management==1.mlnx.7.0030.3008 +hw-management==1.mlnx.7.0030.4003 i2c-tools==4.3-2+b3 icu-devtools==72.1-3 ifmetric==0.3-5 @@ -83,7 +82,7 @@ j2cli==0.3.12b-4 jq==1.6-2.1 kdump-tools==1:1.8.1 kernel-mft-dkms-modules-6.1.0-11-2-amd64==4.28.0 -kernel-mft-dkms-modules-6.1.0-11-2-arm64==4.26.1 +kernel-mft-dkms-modules-6.1.0-11-2-arm64==4.28.0 kexec-tools==1:2.0.25-3+b1 klibc-utils==2.0.12-1 kmod==30+20221128-1 @@ -94,21 +93,20 @@ libapparmor1==3.0.8-3 libargon2-1==0~20171227-0.3+deb12u1 libasan8==12.2.0-14 libassuan0==2.5.5-5 -libatm1==1:2.5.1-4+b2 libatomic1==12.2.0-14 libauparse0==1:3.0.9-1 +libavahi-client3==0.8-10 +libavahi-common-data==0.8-10 +libavahi-common3==0.8-10 libbabeltrace1==1.5.11-1+b2 libbinutils==2.40-2 -libblkid1==2.38.1-5+deb12u1 libboost-serialization1.74.0==1.74.0+ds1-21 libbpf1==1:1.1.0-1 libbrotli1==1.0.9-2+b6 libbsd0==0.11.7-2 libc-ares2==1.18.1-3 -libc-bin==2.36-9+deb12u7 libc-dev-bin==2.36-9+deb12u7 libc-l10n==2.36-9+deb12u7 -libc6==2.36-9+deb12u7 libc6-dev==2.36-9+deb12u7 libcap2-bin==1:2.66-4 libcbor0.8==0.8.0-2+b1 @@ -119,7 +117,7 @@ libcrypt-dev==1:4.4.33-2 libcryptsetup12==2:2.6.1-4~deb12u2 libctf-nobfd0==2.40-2 libctf0==2.40-2 -libcurl4==7.88.1-10+deb12u5 +libcurl4==7.88.1-10+deb12u6 libdbd-sqlite3-perl==1.72-1 libdbi-perl==1.643-4 libdbus-1-3==1.14.10-1~deb12u1 @@ -137,25 +135,27 @@ libfdisk1==2.38.1-5+deb12u1 libfdt1==1.6.1-4+b1 libffi-dev==3.4.4-1 libfido2-1==1.12.0-2+b1 -libfreetype6==2.12.1+dfsg-5 +libfreetype6==2.12.1+dfsg-5+deb12u3 libfuse2==2.9.9-6+b1 libgcc-12-dev==12.2.0-14 libgdbm-compat4==1.23-3 libgdbm6==1.23-3 libgirepository-1.0-1==1.74.0-3 -libglib2.0-0==2.74.6-2+deb12u2 +libglib2.0-0==2.74.6-2+deb12u3 libgomp1==12.2.0-14 libgpm2==1.20.7-10+b1 libgprofng0==2.40-2 libgrpc++1.51==1.51.1-3+b1 libgrpc29==1.51.1-3+b1 -libgssapi-krb5-2==1.20.1-2+deb12u1 +libgssapi-krb5-2==1.20.1-2+deb12u2 libhavege2==1.9.14-1+b1 libhiredis0.14==0.14.1-3 libhwasan0==12.2.0-14 libi2c0==4.3-2+b3 libicu-dev==72.1-3 libicu72==72.1-3 +libiio-utils==0.24-4 +libiio0==0.24-4 libiniparser1==4.1-6 libip4tc2==1.8.9-2 libip6tc2==1.8.9-2 @@ -165,12 +165,12 @@ libjansson4==2.14-2 libjq1==1.6-2.1 libjs-jquery==3.6.1+dfsg+~3.5.14-1 libjson-c5==0.16-2 -libk5crypto3==1.20.1-2+deb12u1+fips +libk5crypto3==1.20.1-2+deb12u2 libkeyutils1==1.6.3-2 libklibc==2.0.12-1 libkmod2==30+20221128-1 -libkrb5-3==1.20.1-2+deb12u1 -libkrb5support0==1.20.1-2+deb12u1 +libkrb5-3==1.20.1-2+deb12u2 +libkrb5support0==1.20.1-2+deb12u2 libldap-2.5-0==2.5.13+dfsg-5 liblognorm5==2.0.6-4 liblsan0==12.2.0-14 @@ -179,7 +179,6 @@ liblzo2-2==2.10-2 libmagic-mgc==1:5.44-3 libmagic1==1:5.44-3 libmnl0==1.0.4-3 -libmount1==2.38.1-5+deb12u1 libmpc3==1.3.1-1 libmpfr6==4.2.0-1 libncurses6==6.4-4 @@ -222,9 +221,9 @@ libpsl5==0.21.2-1 libpwquality-common==1.4.5-1 libpwquality1==1.4.5-1+b1 libpython3-stdlib==3.11.2-1+b1 -libpython3.11==3.11.2-6 -libpython3.11-minimal==3.11.2-6 -libpython3.11-stdlib==3.11.2-6 +libpython3.11==3.11.2-6+deb12u2 +libpython3.11-minimal==3.11.2-6+deb12u2 +libpython3.11-stdlib==3.11.2-6+deb12u2 libquadmath0==12.2.0-14 libre2-9==20220601+dfsg-1+b1 libreadline8==8.2-1.3 @@ -234,7 +233,6 @@ libsasl2-modules-db==2.1.28+dfsg-10 libsensors-config==1:3.6.0-7.1 libsensors5==1:3.6.0-7.1 libslang2==2.3.3-3 -libsmartcols1==2.38.1-5+deb12u1 libsodium23==1.0.18-1 libsqlite3-0==3.40.1-2 libssh2-1==1.10.0-3+b1 @@ -242,7 +240,7 @@ libssl-dev==3.0.11-1~deb12u2+fips libssl3==3.0.11-1~deb12u2+fips libswsscommon==1.0.0 libsysfs2==2.1.1-4 -libsystemd-shared==252.22-1~deb12u1 +libsystemd-shared==252.26-1~deb12u2 libtac2==1.4.1-1 libtcl8.6==8.6.13+dfsg-2 libtirpc-common==1.3.3+ds-1 @@ -255,7 +253,6 @@ libubsan1==12.2.0-14 libunwind8==1.6.2-3 libusb-1.0-0==2:1.0.26-1 libutempter0==1.2.1-3 -libuuid1==2.38.1-5+deb12u1 libwrap0==7.6.q-32 libxencall1==4.17.3+10-g091466ba55-1~deb12u1 libxendevicemodel1==4.17.3+10-g091466ba55-1~deb12u1 @@ -280,8 +277,8 @@ libzmq5==4.3.4-6 linux-base==4.9 linux-image-6.1.0-11-2-amd64-unsigned==6.1.38-4 linux-image-6.1.0-11-2-arm64-unsigned==6.1.38-4 -linux-libc-dev==6.1.90-1 -linux-perf==6.1.90-1 +linux-libc-dev==6.1.99-1 +linux-perf==6.1.99-1 locales==2.36-9+deb12u7 logrotate==3.21.0-1 lsof==4.95.0-1 @@ -292,15 +289,14 @@ mft==4.28.0-96 mft-fwtrace-cfg==1.0.0 mft-oem==4.28.0-96 minicom==2.8-2 -mlnx-iproute2==6.4.0-1.2310036 -mlnx-ofed-kernel-modules-6.1.0-11-2-arm64==23.10.OFED.23.10.0.3.6.1 -mlnx-ofed-kernel-utils==23.10.OFED.23.10.0.3.6.1-1 -mlnx-tools==23.10.0-1.2310036 +mlnx-iproute2==6.7.0-1.2404066 +mlnx-ofed-kernel-modules-6.1.0-11-2-arm64==24.04.OFED.24.04.0.6.6.1 +mlnx-ofed-kernel-utils==24.04.OFED.24.04.0.6.6.1-1 +mlnx-tools==24.04.0-1.2404066 mlxbf-bootctl==2.1 -mlxbf-bootimages==4.6.0-13035 +mlxbf-bootimages==4.7.0-13127 mokutil==0.6.0-2 monit==1:5.20.0-6 -mount==2.38.1-5+deb12u1 mtd-utils==1:2.1.5-1 mtr-tiny==0.95-1 ncal==12.1.8 @@ -317,9 +313,9 @@ ntpsec-ntpdig==1.2.2+dfsg1-1+deb12u1 ntpstat==0.0.0.1-2+b1 nvme-cli==2.4+really2.3-3 opennsl-modules==7.1.0.0 -openssh-client==1:9.2p1-2+deb12u2+fips -openssh-server==1:9.2p1-2+deb12u2+fips -openssh-sftp-server==1:9.2p1-2+deb12u2+fips +openssh-client==1:9.2p1-2+deb12u3+fips +openssh-server==1:9.2p1-2+deb12u3+fips +openssh-sftp-server==1:9.2p1-2+deb12u3+fips openssl==3.0.11-1~deb12u2+fips pci.ids==0.0~2023.04.11-1 pciutils==1:3.9.0-4 @@ -331,7 +327,7 @@ pkgconf==1.8.1-1 procps==2:4.0.2-3 psmisc==23.6-1 python-apt-common==2.6.0 -python-is-python3==3.11.1-3 +python-is-python3==3.11.2-1+deb12u1 python3==3.11.2-1+b1 python3-apt==2.6.0 python3-cffi==1.15.1-5 @@ -355,8 +351,8 @@ python3-swsscommon==1.0.0 python3-wheel==0.38.4-2 python3-yaml==6.0-3+b2 python3-yang==1.0.73 -python3.11==3.11.2-6 -python3.11-minimal==3.11.2-6 +python3.11==3.11.2-6+deb12u2 +python3.11-minimal==3.11.2-6+deb12u2 rasdaemon==0.6.8-1 readline-common==8.2-1.3 resolvconf==1.91+nmu1 @@ -372,30 +368,29 @@ smartmontools==7.4-2~bpo12+1 sonic-db-cli==1.0.0 sonic-device-data==1.0-1 sonic-host-services-data==1.0-1 +sonic-nettools==0.0.1-0 sonic-platform-pddf==1.1 sonic-rsyslog-plugin==1.0.0-0 sonic-utilities-data==1.0-1 sqlite3==3.40.1-2 squashfs-tools==1:4.5.1-1 sudo==1.9.13p3-1+deb12u1 -sx-kernel==1.mlnx.4.6.3064 +sx-kernel==1.mlnx.4.6.4072 symcrypt-openssl==0.1 sysfsutils==2.1.1-4 sysstat==12.6.1-1 -systemd==252.22-1~deb12u1 +systemd==252.26-1~deb12u2 systemd-bootchart==234-2+b1 systemd-sonic-generator==1.0.0 -systemd-sysv==252.22-1~deb12u1 +systemd-sysv==252.26-1~deb12u2 tcpdump==4.99.3-1 tcptraceroute==1.5beta7+debian-4.1+b1 traceroute==1:2.1.2-1 -u-boot-tools==2023.01+dfsg-2 +u-boot-tools==2023.01+dfsg-2+deb12u1 ucf==3.0043+nmu1 -udev==252.22-1~deb12u1 +udev==252.26-1~deb12u2 unzip==6.0-28 usbutils==1:014-1+deb12u1 -util-linux==2.38.1-5+deb12u1 -util-linux-extra==2.38.1-5+deb12u1 uuid-runtime==2.38.1-5+deb12u1 vim==2:9.0.1378-2 vim-common==2:9.0.1378-2 diff --git a/files/build/versions/host-image/versions-py3 b/files/build/versions/host-image/versions-py3 index 34011efb42e6..548519d7cdfe 100644 --- a/files/build/versions/host-image/versions-py3 +++ b/files/build/versions/host-image/versions-py3 @@ -4,7 +4,8 @@ azure-storage==0.36.0 bcrypt==3.2.2 bitarray==2.8.1 blessed==1.20.0 -certifi==2024.6.2 +blkinfo==0.2.0 +certifi==2024.7.4 cffi==1.15.1 charset-normalizer==3.3.2 click==7.0 @@ -13,9 +14,9 @@ colorful==0.5.6 cryptography==38.0.4 dbus-python==1.3.2 docker==7.1.0 -docker-image-py==0.1.12 +docker-image-py==0.1.13 enlighten==1.12.4 -filelock==3.14.0 +filelock==3.15.4 grpcio==1.51.1 grpcio-tools==1.51.1 idna==3.7 @@ -24,9 +25,9 @@ ipaddr==2.2.0 ipaddress==1.0.23 j2cli==0.3.12b0 jinja2==3.1.2 -jsondiff==2.0.0 +jsondiff==2.2.0 jsonpatch==1.33 -jsonpointer==2.4 +jsonpointer==3.0.0 jsonschema==2.6.0 lazy-object-proxy==1.10.0 lxml==4.9.1 @@ -42,14 +43,14 @@ perf==0.1 pexpect==4.9.0 pip==23.0.1 ply==3.11 -prefixed==0.7.1 +prefixed==0.8.0 prettyprinter==0.18.0 -protobuf==4.25.3 -psutil==5.9.8 +protobuf==4.25.4 +psutil==6.0.0 ptyprocess==0.7.0 pyang==2.6.1 pyangbind==0.8.2 -pycairo==1.26.0 +pycairo==1.26.1 pycparser==2.21 pygments==2.18.0 pygobject==3.48.2 @@ -59,16 +60,17 @@ python-apt==2.6.0 python-dateutil==2.9.0.post0 pyyaml==6.0.1 redis==3.5.3 -regex==2024.5.15 -requests==2.32.3 +regex==2024.7.24 +requests==2.31.0 scapy==2.4.4 +scp==0.14.5 semantic-version==2.10.0 setuptools==66.1.1 six==1.16.0 systemd-python==235 tabulate==0.9.0 toposort==1.6 -urllib3==2.2.1 +urllib3==2.2.2 watchdog==0.10.3 wcwidth==0.2.13 wheel==0.38.4 From 80e5153f70d3c780dc9aaf4a7f874c9abcfefa50 Mon Sep 17 00:00:00 2001 From: Tejaswini Chadaga <85581939+tjchadaga@users.noreply.github.com> Date: Wed, 21 Aug 2024 10:08:39 -0700 Subject: [PATCH 112/117] Fixed switch role check for IDF isolation configuration (#19543) Fixed switch role check for IDF isolation configuration --- src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py | 1 + .../bgpcfgd/managers_device_global.py | 24 +++++++++---------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py b/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py index ce3f60fad144..cb47d1976493 100644 --- a/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py +++ b/src/sonic-bgpcfgd/bgpcfgd/managers_bgp.py @@ -107,6 +107,7 @@ def __init__(self, common_objs, db_name, table_name, peer_type, check_neig_meta) deps = [ ("CONFIG_DB", swsscommon.CFG_DEVICE_METADATA_TABLE_NAME, "localhost/bgp_asn"), + ("CONFIG_DB", swsscommon.CFG_DEVICE_METADATA_TABLE_NAME, "localhost/type"), ("CONFIG_DB", swsscommon.CFG_LOOPBACK_INTERFACE_TABLE_NAME, "Loopback0"), ("CONFIG_DB", swsscommon.CFG_BGP_DEVICE_GLOBAL_TABLE_NAME, "tsa_enabled"), ("CONFIG_DB", swsscommon.CFG_BGP_DEVICE_GLOBAL_TABLE_NAME, "idf_isolation_state"), diff --git a/src/sonic-bgpcfgd/bgpcfgd/managers_device_global.py b/src/sonic-bgpcfgd/bgpcfgd/managers_device_global.py index 26c0a1ee69fc..30ff726cb597 100644 --- a/src/sonic-bgpcfgd/bgpcfgd/managers_device_global.py +++ b/src/sonic-bgpcfgd/bgpcfgd/managers_device_global.py @@ -19,8 +19,8 @@ def __init__(self, common_objs, db, table): :param common_objs: common object dictionary :param db: name of the db :param table: name of the table in the db - """ - self.switch_type = "" + """ + self.switch_role = "" self.chassis_tsa = "" self.directory = common_objs['directory'] self.cfg_mgr = common_objs['cfg_mgr'] @@ -29,8 +29,8 @@ def __init__(self, common_objs, db, table): self.tsb_template = common_objs['tf'].from_file("bgpd/tsa/bgpd.tsa.unisolate.conf.j2") self.wcmp_template = common_objs['tf'].from_file("bgpd/wcmp/bgpd.wcmp.conf.j2") self.idf_isolate_template = common_objs['tf'].from_file("bgpd/idf_isolate/idf_isolate.conf.j2") - self.idf_unisolate_template = common_objs['tf'].from_file("bgpd/idf_isolate/idf_unisolate.conf.j2") - self.directory.subscribe([("CONFIG_DB", swsscommon.CFG_DEVICE_METADATA_TABLE_NAME, "localhost/switch_type"),], self.on_switch_type_change) + self.idf_unisolate_template = common_objs['tf'].from_file("bgpd/idf_isolate/idf_unisolate.conf.j2") + self.directory.subscribe([("CONFIG_DB", swsscommon.CFG_DEVICE_METADATA_TABLE_NAME, "localhost/type"),], self.handle_type_update) super(DeviceGlobalCfgMgr, self).__init__( common_objs, [], @@ -48,18 +48,16 @@ def __init__(self, common_objs, db, table): if not self.directory.path_exist(self.db_name, self.table_name, "idf_isolation_state"): self.directory.put(self.db_name, self.table_name, "idf_isolation_state", self.IDF_DEFAULTS) - def on_switch_type_change(self): - log_debug("DeviceGlobalCfgMgr:: Switch type update handler") - if self.directory.path_exist("CONFIG_DB", swsscommon.CFG_DEVICE_METADATA_TABLE_NAME, "localhost/switch_type"): - self.switch_type = self.directory.get_slot("CONFIG_DB", swsscommon.CFG_DEVICE_METADATA_TABLE_NAME)["localhost"]["switch_type"] - log_debug("DeviceGlobalCfgMgr:: Switch type: %s" % self.switch_type) + def handle_type_update(self): + log_debug("DeviceGlobalCfgMgr:: Switch role update handler") + if self.directory.path_exist("CONFIG_DB", swsscommon.CFG_DEVICE_METADATA_TABLE_NAME, "localhost/type"): + self.switch_role = self.directory.get_slot("CONFIG_DB", swsscommon.CFG_DEVICE_METADATA_TABLE_NAME)["localhost"]["type"] + log_debug("DeviceGlobalCfgMgr:: Switch role: %s" % self.switch_role) def set_handler(self, key, data): """ Handle device TSA/W-ECMP state change """ log_debug("DeviceGlobalCfgMgr:: set handler") - if self.switch_type: - log_debug("DeviceGlobalCfgMgr:: Switch type: %s" % self.switch_type) if not data: log_err("DeviceGlobalCfgMgr:: data is None") return False @@ -259,8 +257,8 @@ def downstream_isolate_unisolate(self, idf_isolation_state): log_err("IDF: invalid value({}) is provided".format(idf_isolation_state)) return False - if self.switch_type and self.switch_type != "SpineRouter": - log_debug("DeviceGlobalCfgMgr:: Skipping IDF isolation configuration on Switch type: %s" % self.switch_type) + if self.switch_role and self.switch_role != "SpineRouter": + log_debug("DeviceGlobalCfgMgr:: Skipping IDF isolation configuration on %s" % self.switch_role) return True cmd = "\n" From 106c38d391cb245030cfbf8cd356c88da360c7e5 Mon Sep 17 00:00:00 2001 From: Hua Liu <58683130+liuh-80@users.noreply.github.com> Date: Thu, 22 Aug 2024 08:05:45 +0800 Subject: [PATCH 113/117] Add GNMI client cert cname check support. (#18709) Add GNMI client cert cname list to yang model. #### Why I did it Allow gnmi service authentication client cert by cname. ### How I did it Add GNMI client cert cname list to yang model. #### How to verify it Pass all UT. ### Description for the changelog Add GNMI client cert cname list to yang model. --- dockers/docker-sonic-gnmi/gnmi-native.sh | 2 ++ dockers/docker-sonic-telemetry/telemetry.sh | 3 +++ .../tests/files/sample_config_db.json | 8 ++++++ .../tests/yang_model_tests/tests/gnmi.json | 7 +++++ .../yang_model_tests/tests_config/gnmi.json | 27 +++++++++++++++++++ .../yang-models/sonic-gnmi.yang | 21 +++++++++++++++ 6 files changed, 68 insertions(+) diff --git a/dockers/docker-sonic-gnmi/gnmi-native.sh b/dockers/docker-sonic-gnmi/gnmi-native.sh index d9bab2700e4b..e9f15810a226 100755 --- a/dockers/docker-sonic-gnmi/gnmi-native.sh +++ b/dockers/docker-sonic-gnmi/gnmi-native.sh @@ -33,6 +33,8 @@ if [ -n "$CERTS" ]; then if [ ! -z $CA_CRT ]; then TELEMETRY_ARGS+=" --ca_crt $CA_CRT" fi + + TELEMETRY_ARGS+=" --config_table_name GNMI_CLIENT_CERT" elif [ -n "$X509" ]; then SERVER_CRT=$(echo $X509 | jq -r '.server_crt') SERVER_KEY=$(echo $X509 | jq -r '.server_key') diff --git a/dockers/docker-sonic-telemetry/telemetry.sh b/dockers/docker-sonic-telemetry/telemetry.sh index 061046d2594f..d1c9216d4195 100755 --- a/dockers/docker-sonic-telemetry/telemetry.sh +++ b/dockers/docker-sonic-telemetry/telemetry.sh @@ -34,6 +34,9 @@ if [ -n "$CERTS" ]; then if [ ! -z $CA_CRT ]; then TELEMETRY_ARGS+=" --ca_crt $CA_CRT" fi + + # Reuse GNMI_CLIENT_CERT for telemetry service + TELEMETRY_ARGS+=" --config_table_name GNMI_CLIENT_CERT" elif [ -n "$X509" ]; then SERVER_CRT=$(echo $X509 | jq -r '.server_crt') SERVER_KEY=$(echo $X509 | jq -r '.server_key') diff --git a/src/sonic-yang-models/tests/files/sample_config_db.json b/src/sonic-yang-models/tests/files/sample_config_db.json index 534a0d986480..05f64029b69a 100644 --- a/src/sonic-yang-models/tests/files/sample_config_db.json +++ b/src/sonic-yang-models/tests/files/sample_config_db.json @@ -1329,6 +1329,14 @@ "port": "50052" } }, + "GNMI_CLIENT_CERT": { + "testcert1": { + "role": "RW" + }, + "testcert2": { + "role": "RO" + } + }, "TUNNEL": { "MuxTunnel0": { "dscp_mode": "uniform", diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/gnmi.json b/src/sonic-yang-models/tests/yang_model_tests/tests/gnmi.json index 0d99fe09779e..56f855eac9a3 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests/gnmi.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests/gnmi.json @@ -17,5 +17,12 @@ }, "GNMI_TABLE_WITH_VALID_CONFIG": { "desc": "TABLE WITH VALID CONFIG." + }, + "GNMI_CLIENT_CERT_LIST_TABLE_WITH_MISSING_ROLE": { + "desc": "CLIENT_CERT_LIST_TABLE_WITH_MISSING_ROLE failure.", + "eStrKey": "Mandatory" + }, + "GNMI_CLIENT_CERT_LIST_TABLE_WITH_VALID_CONFIG": { + "desc": "TABLE WITH VALID CONFIG." } } diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json index 62b09a2d5b01..cdad6fe31f53 100644 --- a/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json +++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/gnmi.json @@ -80,5 +80,32 @@ } } } + }, + "GNMI_CLIENT_CERT_LIST_TABLE_WITH_MISSING_ROLE": { + "sonic-gnmi:sonic-gnmi": { + "sonic-gnmi:GNMI_CLIENT_CERT": { + "GNMI_CLIENT_CERT_LIST": [ + { + "cert_cname": "testcert1" + } + ] + } + } + }, + "GNMI_CLIENT_CERT_LIST_TABLE_WITH_VALID_CONFIG": { + "sonic-gnmi:sonic-gnmi": { + "sonic-gnmi:GNMI_CLIENT_CERT": { + "GNMI_CLIENT_CERT_LIST": [ + { + "cert_cname": "testcert1", + "role": "RW" + }, + { + "cert_cname": "testcert2", + "role": "RO" + } + ] + } + } } } diff --git a/src/sonic-yang-models/yang-models/sonic-gnmi.yang b/src/sonic-yang-models/yang-models/sonic-gnmi.yang index eb573e3ffe77..f7c4fef33c53 100644 --- a/src/sonic-yang-models/yang-models/sonic-gnmi.yang +++ b/src/sonic-yang-models/yang-models/sonic-gnmi.yang @@ -77,7 +77,28 @@ module sonic-gnmi { } } + } + + container GNMI_CLIENT_CERT { + description "GNMI client cert list"; + list GNMI_CLIENT_CERT_LIST { + max-elements 8; + key "cert_cname"; + + leaf cert_cname { + type string; + description + "client cert common name"; + } + + leaf role { + type string; + mandatory true; + description + "role of client cert common name"; + } + } } } } From f9ec341492a846acb8ee802eb5cd28dcd014c1e0 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 22 Aug 2024 16:42:44 +0800 Subject: [PATCH 114/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19971) #### Why I did it src/sonic-utilities ``` * 9a3f359e - (HEAD -> master, origin/master, origin/HEAD) Add timeout for rexec's get_password (#3484) (29 hours ago) [Changrong Wu] * 4372ced5 - Add lock to config reload/load_minigraph (#3475) (2 days ago) [Longxiang Lyu] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index 1c4300f309be..9a3f359ee8bd 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 1c4300f309be95d3b182a490032b3af2de95a89b +Subproject commit 9a3f359ee8bd4034b191506eb3a6dd203734cbfe From a3416200b821f5b02218d865b8061b885aa0ba34 Mon Sep 17 00:00:00 2001 From: Sai Kiran <110003254+opcoder0@users.noreply.github.com> Date: Fri, 23 Aug 2024 11:56:15 +1000 Subject: [PATCH 115/117] [docker-ptf] create symlinks for py3-only image (#19813) Why I did it The mix of docker-ptf with Python 2 + Python 3 (in virtual-env) and Python 3 images only across branches (with possibly some test scripts in sonic-mgmt not migrated to Python 3 in older branches) causes different path references to Python and PTF binaries. This can cause backporting a hassle. To prevent this the PR creates virtual environment (/root/env-python3) path to the real python 3 and PTF binaries. This keeps the paths same across docker-ptf images. How I did it Created symlinks for python and PTF from /root/env-python3/bin to /usr/bin. How to verify it Image built successfully and manually verified the existence of the links. --- dockers/docker-ptf/Dockerfile.j2 | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/dockers/docker-ptf/Dockerfile.j2 b/dockers/docker-ptf/Dockerfile.j2 index 45aaec8ecd13..d19c1441825b 100644 --- a/dockers/docker-ptf/Dockerfile.j2 +++ b/dockers/docker-ptf/Dockerfile.j2 @@ -18,6 +18,7 @@ LABEL maintainer="Pavel Shirshov" COPY ["sources.list.{{ CONFIGURED_ARCH }}", "/etc/apt/sources.list"] COPY ["no-check-valid-until", "/etc/apt/apt.conf.d"] +COPY ["apt-retries-count", "/etc/apt/apt.conf.d"] ## Make apt-get non-interactive ENV DEBIAN_FRONTEND=noninteractive @@ -266,6 +267,18 @@ RUN dpkg -i \ debs/{{ deb }}{{' '}} {%- endfor %} +{% if PTF_ENV_PY_VER == "py3" %} +# Create symlink so that test scripts and ptf_runner invocation path +# is same across python 2 and python 3 envs. Note that for virtual-env +# ptf is under /root/env-python3/bin. +# TODO - cleanup when the supported PTF image is py3only across all branches +RUN mkdir -p /root/env-python3/bin \ + && ln -s /usr/local/bin/ptf /usr/bin/ptf \ + && ln -s /usr/bin/python /root/env-python3/bin/python3 \ + && ln -s /usr/bin/python /root/env-python3/bin/python \ + && ln -s /usr/local/bin/ptf /root/env-python3/bin/ptf +{% endif %} + COPY ["*.ini", "/etc/ptf/"] EXPOSE 22 8009 From 4913faba20902647956b5b6835a7490f07180b05 Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Fri, 23 Aug 2024 19:05:47 +0800 Subject: [PATCH 116/117] [submodule] Update submodule sonic-utilities to the latest HEAD automatically (#19990) #### Why I did it src/sonic-utilities ``` * e4df80a5 - (HEAD -> master, origin/master, origin/HEAD) Fix multi-asic behaviour for ecnconfig (#3062) (23 hours ago) [bktsim] ``` #### How I did it #### How to verify it #### Description for the changelog --- src/sonic-utilities | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-utilities b/src/sonic-utilities index 9a3f359ee8bd..e4df80a5c89c 160000 --- a/src/sonic-utilities +++ b/src/sonic-utilities @@ -1 +1 @@ -Subproject commit 9a3f359ee8bd4034b191506eb3a6dd203734cbfe +Subproject commit e4df80a5c89c570dfe6580d91ac25c99e425c02d From 10f0fe8d8c22f41ae24a264a6e0298864c8eb755 Mon Sep 17 00:00:00 2001 From: bhaveshdell <55215495+bhaveshdell@users.noreply.github.com> Date: Fri, 23 Aug 2024 15:18:07 -0700 Subject: [PATCH 117/117] Event and alarm management (#17949) * Support for event persistence in redis-db. * Updates * Updates including fix to eventdb in test enviroment. * Add sonic yang to model event and alarm table. remove ack, noack from sonic-common-event yang. * Add event/alarm persistence related testscases * Remove file eventdb_ut.cpp. * Updates to eventdb testsuite. * Revert changes to existing eventd UT. Set eventdb testcases as separate test binary. Skip testcase execution if DB connection failure. * Commit test related config files. --- .../docker-database/database_config.json.j2 | 6 + dockers/docker-eventd/supervisord.conf | 10 + files/build_templates/docker_image_ctl.j2 | 13 +- src/sonic-eventd/Makefile | 17 +- src/sonic-eventd/debian/sonic-eventd.install | 3 + src/sonic-eventd/etc/eventd.json | 5 + src/sonic-eventd/src/eventconsume.cpp | 662 ++++++++++++++++++ src/sonic-eventd/src/eventconsume.h | 54 ++ src/sonic-eventd/src/eventdb.cpp | 30 + src/sonic-eventd/src/eventutils.cpp | 76 ++ src/sonic-eventd/src/eventutils.h | 43 ++ src/sonic-eventd/src/loghandler.cpp | 37 + src/sonic-eventd/src/loghandler.h | 5 + src/sonic-eventd/src/subdir.mk | 6 +- src/sonic-eventd/tests/default.json | 24 + src/sonic-eventd/tests/eventd.json | 5 + .../tests/eventdb_database_config.json | 107 +++ .../tests/eventdb_database_config_global.json | 8 + src/sonic-eventd/tests/eventdb_ut.cpp | 434 ++++++++++++ src/sonic-eventd/tests/subdir.mk | 7 +- src/sonic-eventd/var/evprofile/default.json | 7 + .../yang-models/sonic-alarm.yang | 142 ++++ .../yang-models/sonic-event.yang | 134 ++++ .../yang-models/sonic-events-common.yang | 41 ++ 24 files changed, 1866 insertions(+), 10 deletions(-) create mode 100644 src/sonic-eventd/etc/eventd.json create mode 100644 src/sonic-eventd/src/eventconsume.cpp create mode 100644 src/sonic-eventd/src/eventconsume.h create mode 100644 src/sonic-eventd/src/eventdb.cpp create mode 100644 src/sonic-eventd/src/eventutils.cpp create mode 100644 src/sonic-eventd/src/eventutils.h create mode 100755 src/sonic-eventd/src/loghandler.cpp create mode 100644 src/sonic-eventd/src/loghandler.h create mode 100755 src/sonic-eventd/tests/default.json create mode 100755 src/sonic-eventd/tests/eventd.json create mode 100644 src/sonic-eventd/tests/eventdb_database_config.json create mode 100644 src/sonic-eventd/tests/eventdb_database_config_global.json create mode 100644 src/sonic-eventd/tests/eventdb_ut.cpp create mode 100644 src/sonic-eventd/var/evprofile/default.json create mode 100644 src/sonic-yang-models/yang-models/sonic-alarm.yang create mode 100644 src/sonic-yang-models/yang-models/sonic-event.yang diff --git a/dockers/docker-database/database_config.json.j2 b/dockers/docker-database/database_config.json.j2 index 65db6cb72641..0e772cc0661f 100644 --- a/dockers/docker-database/database_config.json.j2 +++ b/dockers/docker-database/database_config.json.j2 @@ -130,6 +130,12 @@ "instance" : {% if include_remote_db %} "remote_redis" {% else %} "redis" {% endif %} } {% endif %} + , + "EVENT_DB" : { + "id" : 19, + "separator": "|", + "instance" : "redis" + } }, "VERSION" : "1.0" } diff --git a/dockers/docker-eventd/supervisord.conf b/dockers/docker-eventd/supervisord.conf index be51f922c120..ef8411545513 100644 --- a/dockers/docker-eventd/supervisord.conf +++ b/dockers/docker-eventd/supervisord.conf @@ -50,3 +50,13 @@ stderr_logfile=syslog dependent_startup=true dependent_startup_wait_for=start:exited +[program:eventdb] +command=/usr/bin/eventdb +priority=3 +autostart=false +autorestart=false +stdout_logfile=syslog +stderr_logfile=syslog +dependent_startup=true +dependent_startup_wait_for=start:exited + diff --git a/files/build_templates/docker_image_ctl.j2 b/files/build_templates/docker_image_ctl.j2 index 7e64845c8097..56e5dc913c2e 100644 --- a/files/build_templates/docker_image_ctl.j2 +++ b/files/build_templates/docker_image_ctl.j2 @@ -91,9 +91,16 @@ function preStartAction() # Load redis content from /host/warmboot/dump.rdb docker cp $WARM_DIR/dump.rdb database$DEV:/var/lib/redis/dump.rdb else - # Create an emtpy file and overwrite any RDB if already there - echo -n > /tmp/dump.rdb - docker cp /tmp/dump.rdb database$DEV:/var/lib/redis/ + COLD_DIR=/host/coldboot + #In case of cold reboot, load redis content from /host/coldboot/dump.rdb + if [[ -f $COLD_DIR/dump.rdb ]]; then + #Load redis content from /host/coldboot/dump.rdb + docker cp $COLD_DIR/dump.rdb database$DEV:/var/lib/redis/dump.rdb + else + # Create an emtpy file and overwrite any RDB if already there + echo -n > /tmp/dump.rdb + docker cp /tmp/dump.rdb database$DEV:/var/lib/redis/ + fi fi fi {%- elif docker_container_name == "pde" %} diff --git a/src/sonic-eventd/Makefile b/src/sonic-eventd/Makefile index 835d0732a0cd..73adf10ca5f3 100644 --- a/src/sonic-eventd/Makefile +++ b/src/sonic-eventd/Makefile @@ -1,12 +1,16 @@ RM := rm -rf EVENTD_TARGET := eventd EVENTD_TEST := tests/tests +EVENTDB_TEST := tests/eventdb EVENTD_TOOL := tools/events_tool EVENTD_PUBLISH_TOOL := tools/events_publish_tool.py RSYSLOG-PLUGIN_TARGET := rsyslog_plugin/rsyslog_plugin RSYSLOG-PLUGIN_TEST := rsyslog_plugin_tests/tests EVENTD_MONIT := tools/events_monit_test.py EVENTD_MONIT_CONF := tools/monit_events +EVENTDB_TARGET := eventdb +EVENTDB_DEFAULT_PROFILE := var/evprofile/default.json +EVENTDB_PROF := etc/eventd.json CP := cp MKDIR := mkdir @@ -19,7 +23,7 @@ PWD := $(shell pwd) ifneq ($(MAKECMDGOALS),clean) ifneq ($(strip $(C_DEPS)),) --include $(C_DEPS) $(OBJS) +-include $(C_DEPS) $(OBJS) $(EVENTDB_OBJS) endif endif @@ -31,10 +35,11 @@ endif all: sonic-eventd eventd-tests eventd-tool rsyslog-plugin rsyslog-plugin-tests -sonic-eventd: $(OBJS) +sonic-eventd: $(OBJS) $(EVENTDB_OBJS) @echo 'Building target: $@' @echo 'Invoking: G++ Linker' $(CC) $(LDFLAGS) -o $(EVENTD_TARGET) $(OBJS) $(LIBS) + $(CC) $(LDFLAGS) -o $(EVENTDB_TARGET) $(EVENTDB_OBJS) $(LIBS) @echo 'Finished building target: $@' @echo ' ' @@ -52,12 +57,14 @@ rsyslog-plugin: $(RSYSLOG-PLUGIN_OBJS) @echo 'Finished building target: $@' @echo ' ' -eventd-tests: $(TEST_OBJS) +eventd-tests: $(TEST_OBJS) $(EVENTDB_TEST_OBJS) @echo 'Building target: $@' @echo 'Invoking: G++ Linker' $(CC) $(LDFLAGS) -o $(EVENTD_TEST) $(TEST_OBJS) $(LIBS) $(TEST_LIBS) + $(CC) $(LDFLAGS) -o $(EVENTDB_TEST) $(EVENTDB_TEST_OBJS) $(LIBS) $(TEST_LIBS) @echo 'Finished building target: $@' $(EVENTD_TEST) + $(EVENTDB_TEST) @echo 'Finished running tests' @echo ' ' @@ -73,12 +80,16 @@ rsyslog-plugin-tests: $(RSYSLOG-PLUGIN-TEST_OBJS) install: $(MKDIR) -p $(DESTDIR)/usr/bin $(MKDIR) -p $(DESTDIR)/etc/monit/conf.d + $(MKDIR) -p $(DESTDIR)/etc/evprofile $(CP) $(EVENTD_TARGET) $(DESTDIR)/usr/bin $(CP) $(EVENTD_TOOL) $(DESTDIR)/usr/bin $(CP) $(EVENTD_PUBLISH_TOOL) $(DESTDIR)/usr/bin $(CP) $(RSYSLOG-PLUGIN_TARGET) $(DESTDIR)/usr/bin $(CP) $(EVENTD_MONIT) $(DESTDIR)/usr/bin $(CP) $(EVENTD_MONIT_CONF) $(DESTDIR)/etc/monit/conf.d + $(CP) $(EVENTDB_TARGET) $(DESTDIR)/usr/bin + $(CP) $(EVENTDB_PROF) $(DESTDIR)/etc/eventd.json + $(CP) $(EVENTDB_DEFAULT_PROFILE) $(DESTDIR)/etc/evprofile/default.json deinstall: $(RM) -rf $(DESTDIR)/usr diff --git a/src/sonic-eventd/debian/sonic-eventd.install b/src/sonic-eventd/debian/sonic-eventd.install index bdba566c77b3..273b07adf186 100644 --- a/src/sonic-eventd/debian/sonic-eventd.install +++ b/src/sonic-eventd/debian/sonic-eventd.install @@ -1,3 +1,6 @@ usr/bin/eventd +usr/bin/eventdb usr/bin/events_tool usr/bin/events_publish_tool.py +etc/evprofile/default.json +etc/eventd.json diff --git a/src/sonic-eventd/etc/eventd.json b/src/sonic-eventd/etc/eventd.json new file mode 100644 index 000000000000..ee441eb329f8 --- /dev/null +++ b/src/sonic-eventd/etc/eventd.json @@ -0,0 +1,5 @@ +{ + "__README__": "Specify size of event history table. Whichever limit is hit first, eventd wraps event history table around and deletes older records.", + "max-records": 40000, + "max-days": 30 +} diff --git a/src/sonic-eventd/src/eventconsume.cpp b/src/sonic-eventd/src/eventconsume.cpp new file mode 100644 index 000000000000..5ef249e27619 --- /dev/null +++ b/src/sonic-eventd/src/eventconsume.cpp @@ -0,0 +1,662 @@ + +#include +#include +#include +#include +#include +#include "eventconsume.h" +#include "loghandler.h" +#include "eventutils.h" +#include "events_common.h" + + +using namespace std::chrono; + +// map to store sequence-id for alarms +unordered_map cal_lookup_map; + +// temporary map to hold merge of default map of events and any event profile +EventMap static_event_table; + +bool g_run = true; +uint64_t seq_id = 0; +uint64_t PURGE_SECONDS = 86400; + +typedef pair pi; +priority_queue, greater > event_history_list; + +map SYSLOG_SEVERITY = { + {EVENT_SEVERITY_CRITICAL_STR, LOG_ALERT}, + {EVENT_SEVERITY_MAJOR_STR, LOG_CRIT}, + {EVENT_SEVERITY_MINOR_STR, LOG_ERR}, + {EVENT_SEVERITY_WARNING_STR, LOG_WARNING}, + {EVENT_SEVERITY_INFORMATIONAL_STR, LOG_NOTICE} +}; + +map SYSLOG_SEVERITY_STR = { + {LOG_ALERT , EVENT_SEVERITY_CRITICAL_STR}, + {LOG_CRIT , EVENT_SEVERITY_MAJOR_STR}, + {LOG_ERR , EVENT_SEVERITY_MINOR_STR}, + {LOG_WARNING , EVENT_SEVERITY_WARNING_STR}, + {LOG_NOTICE , EVENT_SEVERITY_INFORMATIONAL_STR} +}; + +static string flood_ev_id; +static string flood_ev_action; +static string flood_ev_resource; +static string flood_ev_msg; + +EventConsume::EventConsume(DBConnector* dbConn, + string evProfile, + string dbProfile): + m_eventTable(dbConn, EVENT_HISTORY_TABLE_NAME), + m_alarmTable(dbConn, EVENT_CURRENT_ALARM_TABLE_NAME), + m_eventStatsTable(dbConn, EVENT_STATS_TABLE_NAME), + m_alarmStatsTable(dbConn, EVENT_ALARM_STATS_TABLE_NAME), + m_evProfile(evProfile), + m_dbProfile(dbProfile) { + + // open syslog connection + openSyslog(); + + // init stats + initStats(); + + // populate local queue of event histor table + read_events(); + + // read and apply eventd configuration files + // read eventd.json and apply it on history table. + // read default and custom profiles, build static_event_table + read_eventd_config(); + + SWSS_LOG_NOTICE("DONE WITH EventConsume constructor"); +} + +EventConsume::~EventConsume() { +} + +void EventConsume::run() +{ + + SWSS_LOG_ENTER(); + event_handle_t hsub; + hsub = events_init_subscriber(); + + while (g_run) { + event_receive_op_t evt; + map_str_str_t evtOp; + int rc = event_receive(hsub, evt); + if (rc != 0) { + SWSS_LOG_ERROR("Failed to receive rc=%d", rc); + continue; + } + handle_notification(evt); + } + events_deinit_subscriber(hsub); +} + +void EventConsume::read_eventd_config(bool read_all) { + // read manifest file for config options + if (read_all) { + read_config_and_purge(); + } + + // read from default map + static_event_table.clear(); + if (!parse(m_evProfile.c_str(), static_event_table)) { + SWSS_LOG_ERROR("Can not initialize event map"); + closeSyslog(); + exit(0); + } + + SWSS_LOG_NOTICE("Event map is built as follows:"); + for (auto& x: static_event_table) { + SWSS_LOG_NOTICE(" %s (%s %s %s)", x.first.c_str(), x.second.severity.c_str(), x.second.enable.c_str(), x.second.static_event_msg.c_str()); + } +} + + +void EventConsume::handle_notification(const event_receive_op_t& evt) +{ + SWSS_LOG_ENTER(); + + string ev_id, ev_msg, ev_src, ev_act, ev_timestamp, ev_type("EVENT"), + ev_static_msg(""), ev_reckey; + string ev_sev = string(EVENT_SEVERITY_INFORMATIONAL_STR); + bool is_raise = false; + bool is_clear = false; + bool is_ack = false; + vector vec; + + fetchFieldValues(evt, vec, ev_id, ev_msg, ev_src, ev_act, ev_timestamp); + + // flood protection. If a rogue application sends same event repeatedly, throttle repeated instances of that event + if (isFloodedEvent(ev_src, ev_act, ev_id, ev_msg)) { + return; + } + + // get static info + if (!staticInfoExists(ev_id, ev_act, ev_sev, ev_static_msg, vec)) { + return; + } + + // increment save seq-id for the newly received event + uint64_t new_seq_id = seq_id + 1; + + FieldValueTuple seqfv("id", to_string(new_seq_id)); + vec.push_back(seqfv); + + if (ev_act.length() > 0) { + SWSS_LOG_DEBUG("ev_act %s", ev_act.c_str()); + ev_type = "ALARM"; + string almkey = ev_id; + if (!ev_src.empty()) { + almkey += "|" + ev_src; + } + + if (ev_act.compare(EVENT_ACTION_RAISE_STR) == 0) { + is_raise = true; + // add entry to the lookup map + cal_lookup_map.insert(make_pair(almkey, new_seq_id)); + + // add acknowledged field intializing it to false + FieldValueTuple seqfv1("acknowledged", "false"); + vec.push_back(seqfv1); + m_alarmTable.set(to_string(new_seq_id), vec); + + // update alarm counters + updateAlarmStatistics(ev_sev, ev_act); + } else if (ev_act.compare(EVENT_ACTION_CLEAR_STR) == 0) { + is_clear = true; + SWSS_LOG_DEBUG(" Received clear alarm for %s", almkey.c_str()); + + bool ack_flag = false; + // remove entry from local cache, alarm table + if (!udpateLocalCacheAndAlarmTable(almkey, ack_flag)) { + SWSS_LOG_ERROR("Received clear for non-existent alarm %s", almkey.c_str()); + return; + } + + // update alarm counters ONLY if it has not been ack'd before. + // This is because when alarm is ack'd, alarms/severity counter is reduced already. + if (!ack_flag) { + updateAlarmStatistics(ev_sev, ev_act); + } else { + // if it has been ack'd before, ack counter would have been incremented for this alrm. + // Now is the time reduce it. + clearAckAlarmStatistic(); + } + } else { + // ack/unack events comes with seq-id of raised alarm as resource field. + // fetch details of "raised" alarm record + string raise_act; + string raise_ack_flag; + string raise_ts; + + // fetch information from raised event record + if (!fetchRaiseInfo(vec, ev_src, ev_id, ev_sev, raise_act, raise_ack_flag, raise_ts)) + { + SWSS_LOG_ERROR("Action %s on a non-existent Alarm id %s", ev_act.c_str(), ev_src.c_str()); + return; + } + + if (ev_act.compare(EVENT_ACTION_ACK_STR) == 0) { + if (raise_ack_flag.compare("true") == 0) { + SWSS_LOG_INFO("%s/%s is already acknowledged", ev_id.c_str(), ev_src.c_str()); + return; + } + if (raise_act.compare(EVENT_ACTION_RAISE_STR) == 0) { + is_ack = true; + SWSS_LOG_DEBUG("Received acknowledge event - %s/%s", ev_id.c_str(), ev_src.c_str()); + + // update the record with ack flag and ack-time and stats + updateAckInfo(is_ack, ev_timestamp, ev_sev, ev_act, ev_src); + } else { + SWSS_LOG_ERROR("Alarm %s/%s not in RAISE state", ev_id.c_str(), ev_src.c_str()); + return; + } + } else if (ev_act.compare(EVENT_ACTION_UNACK_STR) == 0) { + if (raise_ack_flag.compare("true") == 0) { + SWSS_LOG_DEBUG(" received un-ACKnowledge event - %s/%s", ev_id.c_str(), ev_src.c_str()); + + // update the record with ack flag and ack-time and stats + updateAckInfo(is_ack, ev_timestamp, ev_sev, ev_act, ev_src); + } else { + SWSS_LOG_INFO(" %s/%s is already un-acknowledged", ev_id.c_str(), ev_src.c_str()); + return; + } + } + } + } + // verify the size of history table; delete older entry; add new entry + seq_id = new_seq_id; + update_events(to_string(seq_id), ev_timestamp, vec); + + updateEventStatistics(true, is_raise, is_ack, is_clear); + + // raise a syslog message + writeToSyslog(ev_id, (int)(SYSLOG_SEVERITY.find(ev_sev)->second), ev_type, ev_act, ev_msg, ev_static_msg); + + return; +} + +void EventConsume::read_events() { + vector tuples; + m_eventTable.getContent(tuples); + + SWSS_LOG_ENTER(); + // find out last sequence-id; build local history list + for (auto tuple: tuples) { + for (auto fv: kfvFieldsValues(tuple)) { + if (fvField(fv) == "time-created") { + char* end; + uint64_t seq = strtoull(kfvKey(tuple).c_str(), &end,10); + if (seq > seq_id) { + seq_id = seq; + } + uint64_t val = strtoull(fvValue(fv).c_str(), &end,10); + event_history_list.push(make_pair( seq, val )); + } + } + } + SWSS_LOG_NOTICE("eventd sequence-id intialized to %lu", seq_id); +} + +void EventConsume::updateAlarmStatistics(string ev_sev, string ev_act) { + vector vec; + vector temp; + + // severity counter names are of lower case + transform(ev_sev.begin(), ev_sev.end(), ev_sev.begin(), ::tolower); + + if (m_alarmStatsTable.get("state", vec)) { + for (auto fv: vec) { + if (!fv.first.compare("alarms")) { + if ((ev_act.compare(EVENT_ACTION_RAISE_STR) == 0) || (ev_act.compare(EVENT_ACTION_UNACK_STR) == 0)) { + fv.second = to_string(stoi(fv.second.c_str())+1); + } else { + fv.second = to_string(stoi(fv.second.c_str())-1); + } + temp.push_back(fv); + } else if (!fv.first.compare(ev_sev)) { + if ((ev_act.compare(EVENT_ACTION_RAISE_STR) == 0) || (ev_act.compare(EVENT_ACTION_UNACK_STR) == 0)) { + fv.second = to_string(stoi(fv.second.c_str())+1); + } else { + fv.second = to_string(stoi(fv.second.c_str())-1); + } + temp.push_back(fv); + } else if (!fv.first.compare("acknowledged")) { + if (ev_act.compare(EVENT_ACTION_ACK_STR) == 0) { + fv.second = to_string(stoi(fv.second.c_str())+1); + } else if (ev_act.compare(EVENT_ACTION_UNACK_STR) == 0) { + fv.second = to_string(stoi(fv.second.c_str())-1); + } + temp.push_back(fv); + } + } + m_alarmStatsTable.set("state", temp); + } else { + SWSS_LOG_ERROR("Can not update alarm statistics (table does not exist)"); + } +} + +void EventConsume::updateEventStatistics(bool is_add, bool is_raise, bool is_ack, bool is_clear) { + vector vec; + vector temp; + + if (m_eventStatsTable.get("state", vec)) { + for (auto fv: vec) { + if (!fv.first.compare("events")) { + if (is_add) { + fv.second = to_string(stoi(fv.second.c_str())+1); + } else { + fv.second = to_string(stoi(fv.second.c_str())-1); + } + temp.push_back(fv); + } else if (!fv.first.compare("raised")) { + if (is_raise) { + if (is_add) { + fv.second = to_string(stoi(fv.second.c_str())+1); + } else { + fv.second = to_string(stoi(fv.second.c_str())-1); + } + temp.push_back(fv); + } + } else if (!fv.first.compare("cleared")) { + if (is_clear) { + if (is_add) { + fv.second = to_string(stoi(fv.second.c_str())+1); + } else { + fv.second = to_string(stoi(fv.second.c_str())-1); + } + temp.push_back(fv); + } + } else if (!fv.first.compare("acked")) { + if (is_ack) { + if (is_add) { + fv.second = to_string(stoi(fv.second.c_str())+1); + } else { + fv.second = to_string(stoi(fv.second.c_str())-1); + } + temp.push_back(fv); + } + } + } + + m_eventStatsTable.set("state", temp); + } else { + SWSS_LOG_ERROR("Can not update event statistics (table does not exist)"); + } +} + +void EventConsume::modifyEventStats(string seq_id) { + vector rec; + m_eventTable.get(seq_id, rec); + bool is_raise = false; + bool is_clear = false; + bool is_ack = false; + for (auto fvr: rec) { + if (!fvr.first.compare("action")) { + if (!fvr.second.compare(EVENT_ACTION_RAISE_STR)) { + is_raise = true; + } else if (!fvr.second.compare(EVENT_ACTION_CLEAR_STR)) { + is_clear = true; + } + } + if (!fvr.first.compare("acknowledged")) { + if (!fvr.second.compare("true")) { + is_ack = true; + } + } + } + updateEventStatistics(false, is_raise, is_ack, is_clear); +} + +void EventConsume::purge_events() { + SWSS_LOG_ENTER(); + uint32_t size = event_history_list.size(); + + while (size >= m_count) { + pair oldest_entry = event_history_list.top(); + SWSS_LOG_NOTICE("Rollover based on count(%d/%d). Deleting %lu", size, m_count, oldest_entry.first); + m_eventTable.del(to_string(oldest_entry.first)); + modifyEventStats(to_string(oldest_entry.first)); + event_history_list.pop(); + --size; + } + + const auto p1 = system_clock::now(); + unsigned tnow_seconds = duration_cast(p1.time_since_epoch()).count(); + + while (!event_history_list.empty()) { + pair oldest_entry = event_history_list.top(); + unsigned old_seconds = oldest_entry.second / 1000000000ULL; + + if ((tnow_seconds - old_seconds) > PURGE_SECONDS) { + SWSS_LOG_NOTICE("Rollover based on time (%lu days). Deleting %lu.. now %u old %u", (PURGE_SECONDS/m_days), oldest_entry.second, tnow_seconds, old_seconds); + m_eventTable.del(to_string(oldest_entry.first)); + modifyEventStats(to_string(oldest_entry.first)); + event_history_list.pop(); + } else { + return; + } + } + return; +} + +void EventConsume::read_config_and_purge() { + m_days = 0; + m_count = 0; + // read from the manifest file + parse_config(m_dbProfile.c_str(), m_days, m_count); + SWSS_LOG_NOTICE("max-days %d max-records %d", m_days, m_count); + + // update the nanosecond limit + PURGE_SECONDS *= m_days; + + // purge events based on # of days + purge_events(); +} + +void EventConsume::update_events(string seq_id, string ts, vector vec) { + // purge events based on # of days + purge_events(); + + // now add the event to the event table + m_eventTable.set(seq_id, vec); + + // store it into the event history list + char* end; + uint64_t seq = strtoull(seq_id.c_str(), &end, 10); + uint64_t val = strtoull(ts.c_str(), &end, 10); + event_history_list.push(make_pair( seq, val )); +} + +void EventConsume::resetAlarmStats(int alarms, int critical, int major, int minor, int warning, int acknowledged) { + vector temp; + FieldValueTuple fv; + map::iterator it; + for (it = SYSLOG_SEVERITY_STR.begin(); it != SYSLOG_SEVERITY_STR.end(); it++) { + // there wont be any informational alarms + if (it->second.compare(EVENT_SEVERITY_CRITICAL_STR) == 0) { + fv = FieldValueTuple("critical", to_string(critical)); + temp.push_back(fv); + } else if (it->second.compare(EVENT_SEVERITY_MAJOR_STR) == 0) { + fv = FieldValueTuple("major", to_string(major)); + temp.push_back(fv); + } else if (it->second.compare(EVENT_SEVERITY_MINOR_STR) == 0) { + fv = FieldValueTuple("minor", to_string(minor)); + temp.push_back(fv); + } else if (it->second.compare(EVENT_SEVERITY_WARNING_STR) == 0) { + fv = FieldValueTuple("warning", to_string(warning)); + temp.push_back(fv); + } + } + fv = FieldValueTuple("alarms", to_string(alarms)); + temp.push_back(fv); + fv = FieldValueTuple("acknowledged", to_string(acknowledged)); + temp.push_back(fv); + m_alarmStatsTable.set("state", temp); +} + +void EventConsume::clearAckAlarmStatistic() { + vector vec; + vector temp; + + if (m_alarmStatsTable.get("state", vec)) { + for (auto fv: vec) { + if (!fv.first.compare("acknowledged")) { + fv.second = to_string(stoi(fv.second.c_str())-1); + temp.push_back(fv); + m_alarmStatsTable.set("state", temp); + return; + } + } + } +} + + +void EventConsume::fetchFieldValues(const event_receive_op_t& evt, + vector& vec, + string& ev_id, + string& ev_msg, + string& ev_src, + string& ev_act, + string &ev_timestamp) { + + ev_timestamp = to_string(evt.publish_epoch_ms); + vec.push_back(FieldValueTuple("time-created", ev_timestamp)); + for (const auto& idx : evt.params) { + if (idx.first == "type-id") { + ev_id = idx.second; + vec.push_back(FieldValueTuple("type-id", ev_id)); + SWSS_LOG_DEBUG("type-id: <%s> ", ev_id.c_str()); + } else if (idx.first == "text") { + ev_msg = idx.second; + vec.push_back(FieldValueTuple("text", ev_msg)); + SWSS_LOG_DEBUG("text: <%s> ", ev_msg.c_str()); + } else if (idx.first == "resource") { + ev_src = idx.second; + vec.push_back(idx); + SWSS_LOG_DEBUG("resource: <%s> ", ev_src.c_str()); + } else if (idx.first == "action") { + ev_act = idx.second; + // for events, action is empty + if (!ev_act.empty()) { + vec.push_back(FieldValueTuple("action", ev_act)); + } + } + } +} + +bool EventConsume::isFloodedEvent(string ev_src, string ev_act, string ev_id, string ev_msg) { + // flood protection. If a rogue application sends same event repeatedly, throttle repeated instances of that event + if (!flood_ev_resource.compare(ev_src) && + !flood_ev_action.compare(ev_act) && + !flood_ev_id.compare(ev_id) && + !(flood_ev_msg.compare(ev_msg))) { + SWSS_LOG_INFO("Ignoring the event %s from %s action %s msg %s as it is repeated", ev_id.c_str(), ev_src.c_str(), ev_act.c_str(), ev_msg.c_str()); + return true; + } + + flood_ev_resource = ev_src; + flood_ev_action = ev_act; + flood_ev_id = ev_id; + flood_ev_msg = ev_msg; + return false; +} + +bool EventConsume::staticInfoExists(string &ev_id, string &ev_act, string &ev_sev, string &ev_static_msg, vector &vec) { + auto it = static_event_table.find(ev_id); + if (it != static_event_table.end()) { + EventInfo tmp = (EventInfo) (it->second); + // discard the event as event_static_map shows enable is false for this event + if (tmp.enable == EVENT_ENABLE_FALSE_STR) { + SWSS_LOG_NOTICE("Discarding event <%s> as it is set to disabled", ev_id.c_str()); + return false;; + } + + // get severity in the map and store it in the db + ev_sev = tmp.severity; + ev_static_msg = tmp.static_event_msg; + SWSS_LOG_DEBUG("static info: <%s> <%s> ", tmp.severity.c_str(), tmp.static_event_msg.c_str()); + + FieldValueTuple seqfv1("severity", tmp.severity); + vec.push_back(seqfv1); + return true; + } else { + // dont process the incoming alarms if action is neither raise nor clear + // for ack/unack, no need for this check + if ((ev_act.compare(EVENT_ACTION_ACK_STR) && ev_act.compare(EVENT_ACTION_UNACK_STR))) { + // TODO currently, applications may raise events but default evprofile doesnt contain + // ID info. This is planned for later. + // Change it back to SWSS_LOG_ERROR once event profile contains event-ids + SWSS_LOG_DEBUG("static info NOT FOUND for <%s> ", ev_id.c_str()); + return false; + } + } + return true; +} + +bool EventConsume::udpateLocalCacheAndAlarmTable(string almkey, bool &ack_flag) { + // find and remove the raised alarm + uint64_t lookup_seq_id = 0; + auto it = cal_lookup_map.find(almkey); + if (it != cal_lookup_map.end()) { + lookup_seq_id = (uint64_t) (it->second); + cal_lookup_map.erase(almkey); + + // get status of is_aknowledged flag so that we dont decrement counters twice + vector alm_rec; + m_alarmTable.get(to_string(lookup_seq_id), alm_rec); + for (auto fvr: alm_rec) { + if (!fvr.first.compare("acknowledged")) { + ack_flag = (fvr.second.compare("true") == 0) ? true : false; + break; + } + } + + // delete the record from alarm table + m_alarmTable.del(to_string(lookup_seq_id)); + } else { + // possible - when event profile removes alarms for which enable is false and application cleared them later. + // ignore by logging a debug message.. + SWSS_LOG_INFO("Received alarm-clear for non-existing alarm %s", almkey.c_str()); + return false; + } + return true; +} + +void EventConsume::initStats() { + vector vec; + // possible after a cold-boot or very first time + if (! m_eventStatsTable.get("state", vec)) { + FieldValueTuple fv; + vector temp; + + SWSS_LOG_DEBUG("resetting Event Statistics table"); + fv = FieldValueTuple("events", to_string(0)); + temp.push_back(fv); + fv = FieldValueTuple("raised", to_string(0)); + temp.push_back(fv); + fv = FieldValueTuple("cleared", to_string(0)); + temp.push_back(fv); + fv = FieldValueTuple("acked", to_string(0)); + temp.push_back(fv); + m_eventStatsTable.set("state", temp); + } + if (! m_alarmStatsTable.get("state", vec)) { + SWSS_LOG_DEBUG("resetting Alarm Statistics table"); + resetAlarmStats(0, 0, 0, 0, 0, 0); + } +} + +void EventConsume::updateAckInfo(bool is_ack, string ev_timestamp, string ev_sev, string ev_act, string ev_src) { + vector ack_vec; + + FieldValueTuple seqfv1("acknowledged", (is_ack ? "true" : "false")); + ack_vec.push_back(seqfv1); + + FieldValueTuple seqfv2("acknowledge-time", ev_timestamp); + ack_vec.push_back(seqfv2); + + // update alarm stats + updateAlarmStatistics(ev_sev, ev_act); + + // update alarm/event tables for the "raise" record with ack flag and ack timestamp + // for ack/unack, ev_src contains the "seq-id" + m_alarmTable.set(ev_src, ack_vec); + m_eventTable.set(ev_src, ack_vec); +} + + +bool EventConsume::fetchRaiseInfo(vector &vec, string ev_src, string &ev_id, string &ev_sev, string &raise_act, + string &raise_ack_flag, string &raise_ts) { + vector raise_vec; + if (!m_alarmTable.get(ev_src, raise_vec)) { + return false; + } + for (auto fv: raise_vec) { + if (!fv.first.compare("type-id")) { + ev_id = fv.second; + vec.push_back(fv); + } + if (!fv.first.compare("severity")) { + ev_sev = fv.second; + vec.push_back(fv); + } + if (!fv.first.compare("action")) { + raise_act = fv.second; + } + if (!fv.first.compare("acknowledged")) { + raise_ack_flag = fv.second; + } + if (!fv.first.compare("time-created")) { + raise_ts = fv.second; + } + } + return true; +} + + diff --git a/src/sonic-eventd/src/eventconsume.h b/src/sonic-eventd/src/eventconsume.h new file mode 100644 index 000000000000..36e75f7dac98 --- /dev/null +++ b/src/sonic-eventd/src/eventconsume.h @@ -0,0 +1,54 @@ +#ifndef __EVENTCONSUME_H__ +#define __EVENTCONSUME_H__ + +#include +#include +#include "events.h" +#include "eventutils.h" +#include "dbconnector.h" +#include "subscriberstatetable.h" + +using namespace swss; +using namespace std; + +class EventConsume +{ +public: + EventConsume(DBConnector *dbConn, + string evProfile =EVENTD_DEFAULT_MAP_FILE, + string dbProfile =EVENTD_CONF_FILE); + ~EventConsume(); + void read_eventd_config(bool read_all=true); + void run(); + +private: + Table m_eventTable; + Table m_alarmTable; + Table m_eventStatsTable; + Table m_alarmStatsTable; + u_int32_t m_days, m_count; + string m_evProfile; + string m_dbProfile; + + void handle_notification(const event_receive_op_t& evt); + void read_events(); + void updateAlarmStatistics(string ev_sev, string ev_act); + void updateEventStatistics(bool is_add, bool is_alarm, bool is_ack, bool is_clear); + void read_config_and_purge(); + void update_events(string seq_id, string ts, vector vec); + void purge_events(); + void modifyEventStats(string seq_id); + void clearAckAlarmStatistic(); + void resetAlarmStats(int, int, int, int, int, int); + void fetchFieldValues(const event_receive_op_t& evt , vector &, string &, string &, string &, string &, string &); + bool isFloodedEvent(string, string, string, string); + bool staticInfoExists(string &, string &, string &, string &, vector &); + bool udpateLocalCacheAndAlarmTable(string, bool &); + void initStats(); + void updateAckInfo(bool, string, string, string, string); + bool fetchRaiseInfo(vector &, string, string &, string &, string &, string &, string &); +}; + + +#endif /* __EVENTCONSUME_H__ */ + diff --git a/src/sonic-eventd/src/eventdb.cpp b/src/sonic-eventd/src/eventdb.cpp new file mode 100644 index 000000000000..9b162416bf31 --- /dev/null +++ b/src/sonic-eventd/src/eventdb.cpp @@ -0,0 +1,30 @@ +#include "eventconsume.h" +#include + +static EventConsume *evtd_instance = NULL; + +void signalHandler(const int signal) { + SWSS_LOG_NOTICE("in signalHandler"); + + if (signal == SIGINT) { + evtd_instance->read_eventd_config(); + } +} + +int main() +{ + swss::Logger::getInstance().setMinPrio(swss::Logger::SWSS_DEBUG); + + swss::DBConnector eventDb("EVENT_DB", 0); + + // register signal SIGINT and signal handler + signal(SIGINT, signalHandler); + + EventConsume evtd(&eventDb); + evtd_instance = &evtd; + + evtd.run(); + + return 0; +} + diff --git a/src/sonic-eventd/src/eventutils.cpp b/src/sonic-eventd/src/eventutils.cpp new file mode 100644 index 000000000000..0a977b4475af --- /dev/null +++ b/src/sonic-eventd/src/eventutils.cpp @@ -0,0 +1,76 @@ +#include "eventutils.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +using namespace swss; +using json = nlohmann::json; + +bool isValidSeverity(string severityStr) { + transform(severityStr.begin(), severityStr.end(), severityStr.begin(), ::toupper); + if (severityStr == EVENT_SEVERITY_MAJOR_STR) return true; + if (severityStr == EVENT_SEVERITY_CRITICAL_STR) return true; + if (severityStr == EVENT_SEVERITY_MINOR_STR) return true; + if (severityStr == EVENT_SEVERITY_WARNING_STR) return true; + if (severityStr == EVENT_SEVERITY_INFORMATIONAL_STR) return true; + return false; +} + +bool isValidEnable(string enableStr) { + if (enableStr == EVENT_ENABLE_TRUE_STR) return true; + if (enableStr == EVENT_ENABLE_FALSE_STR) return true; + return false; +} + +bool parse_config(const char *filename, unsigned int& days, unsigned int& count) { + days = EHT_MAX_DAYS; + count = EHT_MAX_ELEMS; + std::ifstream ifs(filename); + json j = json::parse(ifs); + for (json::iterator it = j.begin(); it != j.end(); ++it) { + if(it.key() == "max-days") { + days = it.value(); + } + if(it.key() == "max-records") { + count = it.value(); + } + } + return true; +} + +bool parse(const char *filename, EventMap& tmp_event_table) { + ifstream fs(filename); + if (!fs.is_open()) { + return false; + } + + fstream file(filename, fstream::in); + json j; + file >> j; + + if (j["events"].size() == 0) { + SWSS_LOG_ERROR("No entries in 'events' field in %s", filename); + return false; + } + + for (size_t i = 0; i < j["events"].size(); i++) { + auto elem = j["events"][i]; + struct EventInfo_t ev_info; + string ev_name = elem["name"]; + ev_info.severity = elem["severity"]; + ev_info.enable = elem["enable"]; + ev_info.static_event_msg = elem["message"]; + tmp_event_table.emplace(ev_name, ev_info); + } + + return true; +} + diff --git a/src/sonic-eventd/src/eventutils.h b/src/sonic-eventd/src/eventutils.h new file mode 100644 index 000000000000..8ec6d39558b9 --- /dev/null +++ b/src/sonic-eventd/src/eventutils.h @@ -0,0 +1,43 @@ +#ifndef __EVENTUTILS_H__ +#define __EVENTUTILS_H__ + +#include +#include + +using namespace std; + +const string EVENT_SEVERITY_CRITICAL_STR = "CRITICAL"; +const string EVENT_SEVERITY_MAJOR_STR = "MAJOR"; +const string EVENT_SEVERITY_MINOR_STR = "MINOR"; +const string EVENT_SEVERITY_WARNING_STR = "WARNING"; +const string EVENT_SEVERITY_INFORMATIONAL_STR = "INFORMATIONAL"; + +const string EVENT_ENABLE_TRUE_STR = "true"; +const string EVENT_ENABLE_FALSE_STR = "false"; + +const string EVENT_ACTION_RAISE_STR = "RAISE"; +const string EVENT_ACTION_CLEAR_STR = "CLEAR"; +const string EVENT_ACTION_ACK_STR = "ACKNOWLEDGE"; +const string EVENT_ACTION_UNACK_STR = "UNACKNOWLEDGE"; + +constexpr char EVENTD_DEFAULT_MAP_FILE[] = "/etc/evprofile/default.json"; + +constexpr size_t EHT_MAX_ELEMS = 40000; +constexpr size_t EHT_MAX_DAYS = 30; +constexpr char EVENTD_CONF_FILE[] = "/etc/eventd.json"; + +typedef struct EventInfo_t { + string severity; + string enable; + string static_event_msg; +} EventInfo; + +//unordered_map static_event_table; +typedef unordered_map EventMap; + +bool isValidSeverity(string severityStr); +bool isValidEnable(string enableStr); +bool parse_config(const char *filename, unsigned int& days, unsigned int& count); +bool parse(const char *filename, EventMap& tmp_event_table); + +#endif diff --git a/src/sonic-eventd/src/loghandler.cpp b/src/sonic-eventd/src/loghandler.cpp new file mode 100755 index 000000000000..d560ccc2e0e3 --- /dev/null +++ b/src/sonic-eventd/src/loghandler.cpp @@ -0,0 +1,37 @@ +#include +#include + +extern "C" void openSyslog() { + openlog (NULL, LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL4); +} + +extern "C" void writeToSyslog(std::string ev_id, int ev_sev, std::string ev_type, std::string ev_act, std::string ev_msg, std::string ev_static_msg) { + int SYSLOG_FACILITY = LOG_LOCAL4; + if (ev_act.empty()) { + const char LOG_FORMAT[] = "[%s], %%%s: %s %s"; + // event Type + // Event Name + // Static Desc + // Dynamic Desc + + // raise a syslog message + syslog(LOG_MAKEPRI(ev_sev, SYSLOG_FACILITY), LOG_FORMAT, + ev_type.c_str(), + ev_id.c_str(), ev_static_msg.c_str(), ev_msg.c_str()); + } else { + const char LOG_FORMAT[] = "[%s] (%s), %%%s: %s %s"; + // event Type + // event action + // Event Name + // Static Desc + // Dynamic Desc + // raise a syslog message + syslog(LOG_MAKEPRI(ev_sev, SYSLOG_FACILITY), LOG_FORMAT, + ev_type.c_str(), ev_act.c_str(), + ev_id.c_str(), ev_static_msg.c_str(), ev_msg.c_str()); + } +} + +extern "C" void closeSyslog() { + closelog (); +} diff --git a/src/sonic-eventd/src/loghandler.h b/src/sonic-eventd/src/loghandler.h new file mode 100644 index 000000000000..1e98a940152f --- /dev/null +++ b/src/sonic-eventd/src/loghandler.h @@ -0,0 +1,5 @@ +#include +extern "C" void openSyslog(); +extern "C" void writeToSyslog(std::string ev_id, int ev_sev, std::string ev_type, std::string ev_act, std::string ev_msg, std::string ev_static_msg); +extern "C" void closeSyslog(); + diff --git a/src/sonic-eventd/src/subdir.mk b/src/sonic-eventd/src/subdir.mk index eb067fd6e86c..1b03f3d4b040 100644 --- a/src/sonic-eventd/src/subdir.mk +++ b/src/sonic-eventd/src/subdir.mk @@ -1,9 +1,11 @@ CC := g++ -TEST_OBJS += ./src/eventd.o +TEST_OBJS += ./src/eventd.o ./src/eventconsume.o ./src/eventutils.o ./src/loghandler.o +EVENTDB_TEST_OBJS += ./src/eventd.o ./src/eventconsume.o ./src/eventutils.o ./src/loghandler.o OBJS += ./src/eventd.o ./src/main.o +EVENTDB_OBJS += ./src/eventdb.o ./src/eventconsume.o ./src/loghandler.o ./src/eventutils.o -C_DEPS += ./src/eventd.d ./src/main.d +C_DEPS += ./src/eventd.d ./src/main.d ./src/eventdb.d ./src/eventconsume.d ./src/loghandler.d ./src/eventutils.d src/%.o: src/%.cpp @echo 'Building file: $<' diff --git a/src/sonic-eventd/tests/default.json b/src/sonic-eventd/tests/default.json new file mode 100755 index 000000000000..9a1511188513 --- /dev/null +++ b/src/sonic-eventd/tests/default.json @@ -0,0 +1,24 @@ +{ + "__README__" : "This is default map of events that eventd uses. Developer can modify this file and send SIGINT to eventd to make it read and use the updated file. Alternatively developer can test the new event by adding it to a custom event profile and use 'event profile ' command to apply that profile without having to send SIGINT to eventd. Developer need to commit default.json file with the new event after testing it out. Supported severities are: CRITICAL, MAJOR, MINOR, WARNING and INFORMATIONAL. Supported enable flag values are: true and false.", + "events":[ + { + "name": "SYSTEM_STATE", + "severity": "INFORMATIONAL", + "enable": "true", + "message" : "" + }, + { + "name": "SENSOR_TEMP_HIGH", + "severity": "WARNING", + "enable": "true", + "message" : "" + }, + { + "name": "USER_LOGIN", + "severity": "INFORMATIONAL", + "enable": "true", + "message" : "" + } + ] +} + diff --git a/src/sonic-eventd/tests/eventd.json b/src/sonic-eventd/tests/eventd.json new file mode 100755 index 000000000000..2236e0c6a9e6 --- /dev/null +++ b/src/sonic-eventd/tests/eventd.json @@ -0,0 +1,5 @@ +{ + "__README__": "Specify size of event history table. Whichever limit is hit first, eventd wraps event history table around and deletes older records.", + "max-records": 200, + "max-days": 30 +} diff --git a/src/sonic-eventd/tests/eventdb_database_config.json b/src/sonic-eventd/tests/eventdb_database_config.json new file mode 100644 index 000000000000..3fb6d6339af1 --- /dev/null +++ b/src/sonic-eventd/tests/eventdb_database_config.json @@ -0,0 +1,107 @@ +{ + "INSTANCES": { + "redis":{ + "hostname" : "127.0.0.1", + "port": 6379, + "unix_socket_path": "/var/run/redis/redis.sock" + }, + "redis1":{ + "hostname" : "127.0.0.1", + "port": 6380, + "unix_socket_path": "/var/run/redis/redis1.sock" + }, + "redis2":{ + "hostname" : "127.0.0.1", + "port": 6381, + "unix_socket_path": "/var/run/redis/redis2.sock" + }, + "redis3":{ + "hostname" : "127.0.0.1", + "port": 6382, + "unix_socket_path": "/var/run/redis/redis3.sock" + }, + "redis4":{ + "hostname" : "127.0.0.1", + "port": 6383, + "unix_socket_path": "/var/run/redis/redis4.sock" + } + }, + "DATABASES" : { + "APPL_DB" : { + "id" : 0, + "separator": ":", + "instance" : "redis" + }, + "ASIC_DB" : { + "id" : 1, + "separator": ":", + "instance" : "redis" + }, + "COUNTERS_DB" : { + "id" : 2, + "separator": ":", + "instance" : "redis" + }, + "CONFIG_DB" : { + "id" : 4, + "separator": "|", + "instance" : "redis" + }, + "PFC_WD_DB" : { + "id" : 5, + "separator": ":", + "instance" : "redis" + }, + "FLEX_COUNTER_DB" : { + "id" : 5, + "separator": ":", + "instance" : "redis" + }, + "STATE_DB" : { + "id" : 6, + "separator": "|", + "instance" : "redis" + }, + "SNMP_OVERLAY_DB" : { + "id" : 7, + "separator": "|", + "instance" : "redis" + }, + "RESTAPI_DB": { + "id": 8, + "separator": "|", + "instance": "redis" + }, + "GB_ASIC_DB": { + "id": 9, + "separator": ":", + "instance": "redis" + }, + "GB_COUNTERS_DB": { + "id": 10, + "separator": ":", + "instance": "redis" + }, + "GB_FLEX_COUNTER_DB": { + "id": 11, + "separator": ":", + "instance": "redis" + }, + "STATE_DB2" : { + "id" : 13, + "separator": "|", + "instance" : "redis" + }, + "APPL_STATE_DB" : { + "id" : 14, + "separator": ":", + "instance" : "redis" + }, + "EVENT_DB" : { + "id" : 15, + "separator": ":", + "instance" : "redis" + } + }, + "VERSION" : "1.0" +} diff --git a/src/sonic-eventd/tests/eventdb_database_config_global.json b/src/sonic-eventd/tests/eventdb_database_config_global.json new file mode 100644 index 000000000000..e55e1ab1b181 --- /dev/null +++ b/src/sonic-eventd/tests/eventdb_database_config_global.json @@ -0,0 +1,8 @@ +{ + "INCLUDES" : [ + { + "include" : "eventdb_database_config.json" + } + ], + "VERSION" : "1.0" +} diff --git a/src/sonic-eventd/tests/eventdb_ut.cpp b/src/sonic-eventd/tests/eventdb_ut.cpp new file mode 100644 index 000000000000..a3e9e4aba8f6 --- /dev/null +++ b/src/sonic-eventd/tests/eventdb_ut.cpp @@ -0,0 +1,434 @@ +#include +#include "gtest/gtest.h" +#include "events_common.h" +#include "events.h" +#include +#include "dbconnector.h" +#include + +#include +#include "../src/eventd.h" +#include "../src/eventconsume.h" + +using namespace std; +using namespace swss; + +extern volatile bool g_run; +extern uint64_t seq_id; +extern uint64_t PURGE_SECONDS; +extern unordered_map cal_lookup_map; +typedef pair pi; +extern priority_queue, greater > event_history_list; +extern EventMap static_event_table; + + +#define TEST_DB "APPL_DB" +#define TEST_NAMESPACE "asic0" +#define INVALID_NAMESPACE "invalid" + +//extern void run_pub(void *mock_pub, const string wr_source, internal_events_lst_t &lst); + +string existing_file = "./tests//eventdb_database_config.json"; +string nonexisting_file = "./tests//database_config_nonexisting.json"; +string global_existing_file = "./tests//eventdb_database_global.json"; + + + +typedef struct { + map ev_data; + string severity; +} ev_data_struct; +map, ev_data_struct> event_data_t = { + {{"SYSTEM_STATE","NOTIFY"}, + {{{"type-id","SYSTEM_STATE"}, {"resource", "system-state"}, {"text", "System Ready"}}, + "INFORMATIONAL"}}, + {{"INTERFACE_OPER_STATE", "NOTIFY"}, + {{{"type-id", "INTERFACE_OPER_STATE"}, {"resource", "Ethernet1"}, {"text", "Operational Down"}, {"state", "up"}}, + "INFORMATIONAL"}}, + {{"SENSOR_TEMP_HIGH", "RAISE"}, + {{{"type-id", "SENSOR_TEMP_HIGH"}, {"resource", "cpu_sensor"}, {"action", "RAISE"}, {"text", "sensor temp 55C, threshold temp 52C"}}, + "WARNING"}}, + {{"SENSOR_TEMP_HIGH", "CLEAR"}, + {{{"type-id", "SENSOR_TEMP_HIGH"}, {"resource", "cpu_sensor"}, {"action", "CLEAR"}, {"text", "sensor temp 50C, threshold temp 52C"}}, + "WARNING"}} +}; + + +typedef struct { + int id; + string source; + string tag; + string rid; + string seq; +} test_data_t; + +const string event_profile = "tests/default.json"; +const string event_db_profile = "tests/eventd.json"; + +void delete_evdb(DBConnector& dbConn) +{ + auto keys = dbConn.keys("*"); + for (const auto& key : keys) + { + dbConn.del(key); + } +} + +void clear_eventdb_data() +{ + g_run = true; + seq_id =0; + cal_lookup_map.clear(); + PURGE_SECONDS = 86400; + event_history_list = priority_queue, greater >(); + static_event_table.clear(); +} + +void run_pub(void *mock_pub, const string wr_source, internal_events_lst_t &lst) +{ + for(internal_events_lst_t::const_iterator itc = lst.begin(); itc != lst.end(); ++itc) { + EXPECT_EQ(0, zmq_message_send(mock_pub, wr_source, *itc)); + } +} + +class EventDbFixture : public ::testing::Test { + protected: + void SetUp() override { + zctx = zmq_ctx_new(); + EXPECT_TRUE(NULL != zctx); + + /* Run proxy to enable receive as capture test needs to receive */ + pxy = new eventd_proxy(zctx); + EXPECT_TRUE(NULL != pxy); + + /* Starting proxy */ + EXPECT_EQ(0, pxy->init()); + DBConnector eventDb("EVENT_DB", 0, true); + //delete any entries in the EVENT_DB + delete_evdb(eventDb); + + try + { + /* Start Eventdb in a separate thread*/ + evtConsume= new EventConsume(&eventDb, event_profile, event_db_profile); + thread thr(&EventConsume::run, evtConsume); + thr.detach(); + } + catch (exception &e) + { + printf("EventDbFixture::SetUP: Unable to get DB Connector, e=(%s)\n", e.what()); + } + } + + void TearDown() override { + delete evtConsume; + evtConsume = NULL; + delete pxy; + pxy= NULL; + zmq_ctx_term(zctx); + zctx = NULL; + clear_eventdb_data(); + } + EventConsume *evtConsume; + void *zctx; + eventd_proxy *pxy; +}; + + +void *init_publish(void *zctx) +{ + void *mock_pub = zmq_socket (zctx, ZMQ_PUB); + EXPECT_TRUE(NULL != mock_pub); + EXPECT_EQ(0, zmq_connect(mock_pub, get_config(XSUB_END_KEY).c_str())); + + /* Provide time for async connect to complete */ + this_thread::sleep_for(chrono::milliseconds(200)); + + return mock_pub; +} + +internal_event_t create_ev(const int id, const int ev_id, const string& event, + const string& action, + map> &verify_data) +{ + internal_event_t event_data; + stringstream ss; + + test_data_t data; + data.id = id; + data.source = "source" + to_string(id); + data.tag = "tag" + to_string(id); + data.rid = "guid-" + to_string(id); + data.seq = to_string(id); + + event_data[EVENT_STR_DATA] = convert_to_json( + data.source + ":" + data.tag, map(event_data_t[make_pair(event, action)].ev_data)); + event_data[EVENT_RUNTIME_ID] = data.rid; + event_data[EVENT_SEQUENCE] = data.seq; + auto timepoint = system_clock::now(); + ss << duration_cast(timepoint.time_since_epoch()).count(); + + event_data[EVENT_EPOCH] = ss.str(); + unordered_map ev_val(event_data_t[make_pair(event, action)].ev_data.begin(), + event_data_t[make_pair(event, action)].ev_data.end()); + ev_val.insert({{"id", to_string(ev_id)}}); + ev_val.insert({{"time-created", ss.str()}}); + ev_val.insert({{"severity", event_data_t[make_pair(event, action)].severity}}); + + if (action == "RAISE") { + ev_val.insert({{"acknowledged", "false"}}); + ev_val.insert({{"action", action}}); + } + verify_data.insert({to_string(ev_id), ev_val}); + + return event_data; +} + + +void verify_events(map> verifyData) +{ + DBConnector eventDb("EVENT_DB", 0, true); + auto dbKeys = eventDb.keys("EVENT:*"); + EXPECT_EQ(verifyData.size(), dbKeys.size()); + + for (const auto& vKey : verifyData) + { + string evtKey = "EVENT:" + vKey.first; + EXPECT_TRUE(count(dbKeys.begin(), dbKeys.end(), evtKey) == 1); + auto ev = eventDb.hgetall(evtKey); + EXPECT_TRUE(ev == verifyData[vKey.first]); + } +} + + +void verify_alarms_clear(map> verifyData) +{ + DBConnector eventDb("EVENT_DB", 0, true); + auto dbKeys = eventDb.keys("ALARM:*"); + EXPECT_EQ(0, dbKeys.size()); +} + +void verify_alarms_raise(map> verifyData) +{ + DBConnector eventDb("EVENT_DB", 0, true); + auto dbKeys = eventDb.keys("ALARM:*"); + EXPECT_EQ(verifyData.size(), dbKeys.size()); + + for (const auto& vKey : verifyData) + { + string almKey = "ALARM:" + vKey.first; + EXPECT_TRUE(count(dbKeys.begin(), dbKeys.end(), almKey) == 1); + auto ev = eventDb.hgetall(almKey); + EXPECT_TRUE(ev == verifyData[vKey.first]); + } +} + +TEST_F(EventDbFixture, validate_events) +{ + printf("Validate events TEST started\n"); + + internal_events_lst_t wr_evts; + string wr_source("eventd-test"); + + void *mock_pub = init_publish(zctx); + + map> verify_data; + + wr_evts.push_back(create_ev(1, 1, "SENSOR_TEMP_HIGH", "RAISE", verify_data)); + wr_evts.push_back(create_ev(2, 2, "SYSTEM_STATE", "NOTIFY", verify_data)); + + run_pub(mock_pub, wr_source, wr_evts); + + this_thread::sleep_for(chrono::milliseconds(2000)); + + // verify events logged in DB. + verify_events(verify_data); + + //send events to close eventdb task + g_run = false; + wr_evts.clear(); + wr_evts.push_back(create_ev(301, 3, "SYSTEM_STATE", "NOTIFY", verify_data)); + run_pub(mock_pub, wr_source, wr_evts); + this_thread::sleep_for(chrono::milliseconds(2000)); + zmq_close(mock_pub); + + printf("Validate events TEST completed\n"); + +} + + +TEST_F(EventDbFixture, validate_alarms) +{ + printf("Validate alarms TEST started\n"); + internal_events_lst_t wr_evts; + string wr_source("eventd-test"); + void *mock_pub = init_publish(zctx); + + map> verify_data; + wr_evts.push_back(create_ev(3, 1, "SENSOR_TEMP_HIGH", "RAISE", verify_data)); + + run_pub(mock_pub, wr_source, wr_evts); + + this_thread::sleep_for(chrono::milliseconds(2000)); + + // verify events logged in DB. + verify_events(verify_data); + verify_alarms_raise(verify_data); + + wr_evts.clear(); + wr_evts.push_back(create_ev(4, 2, "SENSOR_TEMP_HIGH", "CLEAR", verify_data)); + + run_pub(mock_pub, wr_source, wr_evts); + this_thread::sleep_for(chrono::milliseconds(2000)); + verify_events(verify_data); + verify_alarms_clear(verify_data); + g_run = false; + wr_evts.clear(); + wr_evts.push_back(create_ev(302, 3, "SYSTEM_STATE", "NOTIFY", verify_data)); + run_pub(mock_pub, wr_source, wr_evts); + this_thread::sleep_for(chrono::milliseconds(2000)); + zmq_close(mock_pub); + printf("Validate alarms TEST completed\n"); +} + + +TEST_F(EventDbFixture, expiry_purge) +{ + printf("Expiry purge TEST started\n"); + internal_events_lst_t wr_evts; + string wr_source("eventd-test"); + void *mock_pub = init_publish(zctx); + map> verify_data; + //set epoch time back to 31 days + auto timepoint = system_clock::now(); + auto epochTimeNs = duration_cast(timepoint.time_since_epoch()).count(); + epochTimeNs = epochTimeNs - (32UL * 24 * 60 * 60 * 1000 * 1000 * 1000); + auto ev_data = create_ev(5, 1, "SENSOR_TEMP_HIGH", "RAISE", verify_data); + + ev_data[EVENT_EPOCH] = to_string(epochTimeNs); + verify_data["1"]["time-created"] = ev_data[EVENT_EPOCH]; + wr_evts.push_back(ev_data); + + run_pub(mock_pub, wr_source, wr_evts); + this_thread::sleep_for(chrono::milliseconds(2000)); + + // verify events logged in DB. + verify_events(verify_data); + verify_alarms_raise(verify_data); + + wr_evts.clear(); + verify_data.clear(); + wr_evts.push_back(create_ev(6, 2, "SENSOR_TEMP_HIGH", "CLEAR", verify_data)); + run_pub(mock_pub, wr_source, wr_evts); + this_thread::sleep_for(chrono::milliseconds(2000)); + + verify_events(verify_data); + verify_alarms_clear(verify_data); + wr_evts.clear(); + g_run = false; + wr_evts.push_back(create_ev(303, 3, "SYSTEM_STATE", "NOTIFY", verify_data)); + run_pub(mock_pub, wr_source, wr_evts); + this_thread::sleep_for(chrono::milliseconds(2000)); + zmq_close(mock_pub); + printf("Expiry purge TEST completed\n"); +} + + +TEST_F(EventDbFixture, rollover_purge) +{ + printf("Rollover purge TEST started\n"); + internal_events_lst_t wr_evts; + string wr_source("eventd-test"); + void *mock_pub = init_publish(zctx); + map> verify_data; + int i=0,j=6; + + for (; i <= 198; i+=2, j+=2) + { + wr_evts.push_back(create_ev(j+1, i+1, "SENSOR_TEMP_HIGH", "RAISE", verify_data)); + wr_evts.push_back(create_ev(j+2, i+2, "SENSOR_TEMP_HIGH", "CLEAR", verify_data)); + } + + run_pub(mock_pub, wr_source, wr_evts); + + this_thread::sleep_for(chrono::milliseconds(5000)); + + // verify events logged in DB. + verify_events(verify_data); + // This will make it out of limit + wr_evts.push_back(create_ev(j+1, i+1, "SENSOR_TEMP_HIGH", "RAISE", verify_data)); + run_pub(mock_pub, wr_source, wr_evts); + + this_thread::sleep_for(chrono::milliseconds(2000)); + + DBConnector eventDb("EVENT_DB", 0, true); + auto dbKeys = eventDb.keys("EVENT:*"); + EXPECT_EQ(200, dbKeys.size()); + EXPECT_TRUE(count(dbKeys.begin(), dbKeys.end(), "EVENT:1") == 0); + EXPECT_TRUE(count(dbKeys.begin(), dbKeys.end(), "EVENT:2") == 1); + EXPECT_TRUE(count(dbKeys.begin(), dbKeys.end(), "EVENT:" + to_string(i+1)) == 1); + g_run = false; + wr_evts.push_back(create_ev(303, 3, "SYSTEM_STATE", "NOTIFY", verify_data)); + run_pub(mock_pub, wr_source, wr_evts); + this_thread::sleep_for(chrono::milliseconds(2000)); + zmq_close(mock_pub); + printf("Rollover purge TEST completed\n"); +} + +class SwsscommonEnvironment : public ::testing::Environment { +public: + // Override this to define how to set up the environment + void SetUp() override { + // by default , init should be false + cout << "Default : isInit = " << SonicDBConfig::isInit() << endl; + EXPECT_FALSE(SonicDBConfig::isInit()); + EXPECT_THROW(SonicDBConfig::initialize(nonexisting_file), runtime_error); + + EXPECT_FALSE(SonicDBConfig::isInit()); + + // load local config file, init should be true + SonicDBConfig::initialize(existing_file); + cout << "INIT: load local db config file, isInit = " << SonicDBConfig::isInit() << endl; + EXPECT_TRUE(SonicDBConfig::isInit()); + + // Test the database_global.json file + // by default , global_init should be false + cout << "Default : isGlobalInit = " << SonicDBConfig::isGlobalInit() << endl; + EXPECT_FALSE(SonicDBConfig::isGlobalInit()); + + // Call an API which actually needs the data populated by SonicDBConfig::initializeGlobalConfig +// EXPECT_THROW(SonicDBConfig::getDbId(EVENT_DB, TEST_NAMESPACE), runtime_error); + + // load local global file, init should be true + SonicDBConfig::initializeGlobalConfig(global_existing_file); + cout<<"INIT: load global db config file, isInit = "<' command to apply that profile without having to send SIGINT to eventd. Developer need to commit default.json file with the new event after testing it out. Supported severities are: CRITICAL, MAJOR, MINOR, WARNING and INFORMATIONAL. Supported enable flag values are: true and false.", + "events":[ + + ] +} + \ No newline at end of file diff --git a/src/sonic-yang-models/yang-models/sonic-alarm.yang b/src/sonic-yang-models/yang-models/sonic-alarm.yang new file mode 100644 index 000000000000..e54ad69858dd --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-alarm.yang @@ -0,0 +1,142 @@ + module sonic-alarm { + + namespace "http://github.com/sonic-net/sonic-alarm"; + prefix salarm; + yang-version 1.1; + + import sonic-event { + prefix event; + } + + // meta + organization + "SONiC"; + + contact + "SONiC"; + + description + "This module defines operational state data for SONiC alarms."; + + revision "2024-01-30" { + description + "Initial revision."; + } + + + grouping alarm-state { + + leaf id { + type string; + description "Sequence identifier for an alarm."; + } + + leaf resource { + type string; + description "The item that is under alarm within the device."; + } + + leaf text { + type string; + description "Dynamic message raised with the alarm."; + } + + leaf time-created { + type uint64; + description + "The time at which the alarm was raised by the system. + Expressed in nanoseconds since Unix epoch."; + } + + leaf type-id { + type string; + description "Type of the alarm raised"; + } + + leaf severity { + type event:severity-type; + description + "Severity of a raised condition."; + } + + leaf acknowledged { + type boolean; + description + "This denotes whether an alarm is acknowledged by the operator. + An acknowledged alarm is not considered in determining the + health of the system."; + } + + leaf acknowledge-time { + type uint64; + description + "The time at which alarm is acknowledged by the system. + This value is expressed as nanoseconds since the Unix Epoch."; + } + + } + + container sonic-alarm { + + container ALARM { + + list ALARM_LIST { + key "id"; + uses alarm-state; + } + } + + container ALARM_STATS { + + + list ALARM_STATS_LIST { + + key "id"; + leaf id { + type enumeration { + enum state; + } + description + "Table identifier value defined as state."; + } + + leaf alarms { + type uint64; + description + "Total alarms in the system."; + } + + leaf critical { + type uint64; + description + "Total critical alarms in the system."; + } + + leaf major { + type uint64; + description + "Total major alarms in the system."; + } + + leaf minor { + type uint64; + description + "Total minor alarms in the system."; + } + + leaf warning { + type uint64; + description + "Total warnings in the system."; + } + + leaf acknowledged { + type uint64; + description + "Total acknowledged alarms in the system."; + } + + } + } + } +} diff --git a/src/sonic-yang-models/yang-models/sonic-event.yang b/src/sonic-yang-models/yang-models/sonic-event.yang new file mode 100644 index 000000000000..f5bb27782ec0 --- /dev/null +++ b/src/sonic-yang-models/yang-models/sonic-event.yang @@ -0,0 +1,134 @@ + module sonic-event { + namespace "http://github.com/sonic-net/sonic-event"; + prefix sevents; + yang-version 1.1; + + organization + "SONiC"; + + contact + "SONiC"; + + description + "This module defines operational state data for SONiC events."; + + revision "2024-01-30" { + description + "Initial revision."; + } + + typedef severity-type { + type enumeration { + enum CRITICAL; + enum MAJOR; + enum MINOR; + enum WARNING; + enum INFORMATIONAL; + } + description + "Severity of a raised condition."; + } + + typedef action-type { + type enumeration { + enum RAISE; + enum CLEAR; + enum ACKNOWLEDGE; + enum UNACKNOWLEDGE; + } + description + "Action on a raised condition."; + } + + grouping event-state { + + leaf id { + type string; + description "Sequence identifier for events."; + } + + leaf resource { + type string; + description "The item in the device that raised the event."; + } + + leaf text { + type string; + description "Dynamic message raised with the event."; + } + + leaf time-created { + type uint64; + description + "The time at which the event was raised by the system. + Expressed in epoch time."; + } + + leaf type-id { + type string; + description "Type of event raised by the device."; + } + + leaf severity { + type severity-type; + description + "Severity of the event."; + } + + leaf action { + type action-type; + description "Action on the event."; + } + } + + container sonic-event { + + container EVENT { + + list EVENT_LIST { + key "id"; + uses event-state; + } + } + + container EVENT_STATS { + + + list EVENT_STATS_LIST { + + key "id"; + leaf id { + type enumeration { + enum state; + } + description + "Table identifier value defined as state."; + } + + leaf events { + type uint64; + description + "Total number of events in the system store."; + } + + leaf raised { + type uint64; + description + "Total number of events for raise operation in system store."; + } + + leaf acked { + type uint64; + description + "Total number of events for ack operation in system store."; + } + + leaf cleared { + type uint64; + description + "Total number of events for clear operation in system store."; + } + } + } + } + } diff --git a/src/sonic-yang-models/yang-models/sonic-events-common.yang b/src/sonic-yang-models/yang-models/sonic-events-common.yang index ed6c81a7b908..cac93a69c810 100644 --- a/src/sonic-yang-models/yang-models/sonic-events-common.yang +++ b/src/sonic-yang-models/yang-models/sonic-events-common.yang @@ -21,11 +21,52 @@ module sonic-events-common { "Common reusable definitions"; } + typedef action-type { + type enumeration { + enum RAISE { + description "Event with raise alarm action."; + } + enum CLEAR { + description "Event with clear alarm action."; + } + } + description + "This type defines the actions associated with an event notification."; + } + grouping sonic-events-cmn { leaf timestamp { type yang:date-and-time; description "time of the event"; } + leaf type-id { + type string; + description + "The abbreviated name of the event, for example FAN_SPEED_STATUS, + SYSTEM_STATUS, or PSU_FAULTY."; + } + + leaf resource { + type string; + description + "The item generating the event. for example eth1, cpu_sensor"; + } + + leaf text { + type string; + description + "The string used to inform operators about the event. This + MUST contain enough information for an operator to be able + to understand the problem. If this string contains structure, + this format should be clearly documented for programs to be + able to parse that information"; + } + + leaf action { + type action-type; + description + "This denotes the action associated with the event."; + } } grouping sonic-events-usage {