diff --git a/.azure-pipelines/run-test-scheduler-template.yml b/.azure-pipelines/run-test-scheduler-template.yml
index e48dafcedf50..1f8a5a142817 100644
--- a/.azure-pipelines/run-test-scheduler-template.yml
+++ b/.azure-pipelines/run-test-scheduler-template.yml
@@ -34,10 +34,6 @@ parameters:
type: string
default: "ceos"
-- name: SPECIFIED_PARAMS
- type: string
- default: "{}"
-
- name: MGMT_BRANCH
type: string
default: internal
@@ -61,7 +57,7 @@ steps:
--min-worker ${{ parameters.MIN_WORKER }} --max-worker ${{ parameters.MAX_WORKER }} \
--test-set ${{ parameters.TEST_SET }} --kvm-build-id $(KVM_BUILD_ID) \
--deploy-mg-extra-params "${{ parameters.DEPLOY_MG_EXTRA_PARAMS }}" --common-extra-params "${{ parameters.COMMON_EXTRA_PARAMS }}" \
- --mgmt-branch ${{ parameters.MGMT_BRANCH }} --vm-type ${{ parameters.VM_TYPE }} --specified-params "${{ parameters.SPECIFIED_PARAMS }}" \
+ --mgmt-branch ${{ parameters.MGMT_BRANCH }} --vm-type ${{ parameters.VM_TYPE }} \
--num-asic ${{ parameters.NUM_ASIC }} --azp-access-token ":$(System.AccessToken)" --azp-repo-access-token $(AZP_REPO_ACCESS_TOKEN) \
--azp-pr-id $(System.PullRequest.PullRequestId)
TEST_PLAN_ID=`cat new_test_plan_id.txt`
diff --git a/README.md b/README.md
index c99c9fbe19d0..551e3af5f0d8 100644
--- a/README.md
+++ b/README.md
@@ -7,9 +7,34 @@
[![Innovium](https://dev.azure.com/mssonic/build/_apis/build/status/innovium/Azure.sonic-buildimage.official.innovium?branchName=master&label=Innovium)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=148&branchName=master)
[![Mellanox](https://dev.azure.com/mssonic/build/_apis/build/status/mellanox/Azure.sonic-buildimage.official.mellanox?branchName=master&label=Mellanox)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=139&branchName=master)
[![Marvell(armhf)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-armhf?branchName=master&label=Marvell-armhf)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=141&branchName=master)
+[![Marvell(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-arm64?branchName=master&label=Marvell-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=999&branchName=master)
[![Nephos](https://dev.azure.com/mssonic/build/_apis/build/status/nephos/Azure.sonic-buildimage.official.nephos?branchName=master&label=Nephos)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=149&branchName=master)
[![VS](https://dev.azure.com/mssonic/build/_apis/build/status/vs/Azure.sonic-buildimage.official.vs?branchName=master&label=VS)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=142&branchName=master)
+*202305 builds*:
+
+[![Barefoot](https://dev.azure.com/mssonic/build/_apis/build/status/barefoot/Azure.sonic-buildimage.official.barefoot?branchName=202205&label=Barefoot)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=146&branchName=202305)
+[![Broadcom](https://dev.azure.com/mssonic/build/_apis/build/status/broadcom/Azure.sonic-buildimage.official.broadcom?branchName=202305&label=Broadcom)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=138&branchName=202305)
+[![Centec](https://dev.azure.com/mssonic/build/_apis/build/status/centec/Azure.sonic-buildimage.official.centec?branchName=202305&label=Centec)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=143&branchName=202305)
+[![Centec(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/centec/Azure.sonic-buildimage.official.centec-arm64?branchName=202305&label=Centec-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=140&branchName=202305)
+[![Innovium](https://dev.azure.com/mssonic/build/_apis/build/status/innovium/Azure.sonic-buildimage.official.innovium?branchName=202305&label=Innovium)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=148&branchName=202305)
+[![Mellanox](https://dev.azure.com/mssonic/build/_apis/build/status/mellanox/Azure.sonic-buildimage.official.mellanox?branchName=202305&label=Mellanox)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=139&branchName=202305)
+[![Marvell(armhf)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-armhf?branchName=202305&label=Marvell-armhf)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=141&branchName=202305)
+[![Nephos](https://dev.azure.com/mssonic/build/_apis/build/status/nephos/Azure.sonic-buildimage.official.nephos?branchName=202305&label=Nephos)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=149&branchName=202305)
+[![VS](https://dev.azure.com/mssonic/build/_apis/build/status/vs/Azure.sonic-buildimage.official.vs?branchName=202305&label=VS)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=142&branchName=202305)
+
+*202211 builds*:
+
+[![Barefoot](https://dev.azure.com/mssonic/build/_apis/build/status/barefoot/Azure.sonic-buildimage.official.barefoot?branchName=202205&label=Barefoot)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=146&branchName=202211)
+[![Broadcom](https://dev.azure.com/mssonic/build/_apis/build/status/broadcom/Azure.sonic-buildimage.official.broadcom?branchName=202211&label=Broadcom)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=138&branchName=202211)
+[![Centec](https://dev.azure.com/mssonic/build/_apis/build/status/centec/Azure.sonic-buildimage.official.centec?branchName=202211&label=Centec)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=143&branchName=202211)
+[![Centec(arm64)](https://dev.azure.com/mssonic/build/_apis/build/status/centec/Azure.sonic-buildimage.official.centec-arm64?branchName=202211&label=Centec-arm64)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=140&branchName=202211)
+[![Innovium](https://dev.azure.com/mssonic/build/_apis/build/status/innovium/Azure.sonic-buildimage.official.innovium?branchName=202211&label=Innovium)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=148&branchName=202211)
+[![Mellanox](https://dev.azure.com/mssonic/build/_apis/build/status/mellanox/Azure.sonic-buildimage.official.mellanox?branchName=202211&label=Mellanox)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=139&branchName=202211)
+[![Marvell(armhf)](https://dev.azure.com/mssonic/build/_apis/build/status/marvell/Azure.sonic-buildimage.official.marvell-armhf?branchName=202211&label=Marvell-armhf)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=141&branchName=202211)
+[![Nephos](https://dev.azure.com/mssonic/build/_apis/build/status/nephos/Azure.sonic-buildimage.official.nephos?branchName=202211&label=Nephos)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=149&branchName=202211)
+[![VS](https://dev.azure.com/mssonic/build/_apis/build/status/vs/Azure.sonic-buildimage.official.vs?branchName=202211&label=VS)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=142&branchName=202211)
+
*202205 builds*:
[![Barefoot](https://dev.azure.com/mssonic/build/_apis/build/status/barefoot/Azure.sonic-buildimage.official.barefoot?branchName=202205&label=Barefoot)](https://dev.azure.com/mssonic/build/_build/latest?definitionId=146&branchName=202205)
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index f64c710cbe88..6a5af16bc75b 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -108,27 +108,26 @@ stages:
sudo rm -rf ../*.deb
displayName: "Cleanup"
- - task: DownloadPipelineArtifact@2
- inputs:
- source: specific
- project: build
- pipeline: 9
- artifact: sonic-swss-common.amd64.ubuntu20_04
- runVersion: 'latestFromBranch'
- runBranch: 'refs/heads/master'
- displayName: "Download sonic swss common deb packages"
-
- task: DownloadPipelineArtifact@2
inputs:
artifact: sonic-buildimage.vs
displayName: "Download sonic-buildimage.vs artifact"
- script: |
- set -x
sudo apt-get update
- sudo apt-get install libyang0.16 -y
- sudo dpkg -i --force-confask,confnew ../libswsscommon_1.0.0_amd64.deb
- sudo dpkg -i ../python3-swsscommon_1.0.0_amd64.deb
+ sudo apt-get install -y make libtool m4 autoconf dh-exec debhelper cmake pkg-config \
+ libhiredis-dev libnl-3-dev libnl-genl-3-dev libnl-route-3-dev libnl-nf-3-dev swig3.0 \
+ libpython2.7-dev libboost-dev libboost-serialization-dev uuid-dev libzmq5 libzmq3-dev python3-pip \
+ cmake libgtest-dev libgmock-dev libyang-dev
+ sudo pip3 install pytest
+ cd src/sonic-swss-common
+ ./autogen.sh
+ dpkg-buildpackage -rfakeroot -us -uc -b -j$(nproc)
+ sudo dpkg -i --force-confask,confnew ../libswsscommon_*.deb
+ sudo dpkg -i ../python3-swsscommon_*.deb
+ displayName: "Compile sonic swss common"
+
+ - script: |
sudo docker load -i ../target/docker-sonic-vs.gz
docker tag docker-sonic-vs:latest docker-sonic-vs:$(Build.BuildNumber)
username=$(id -un)
@@ -224,9 +223,8 @@ stages:
MIN_WORKER: $(T0_SONIC_INSTANCE_NUM)
MAX_WORKER: $(T0_SONIC_INSTANCE_NUM)
TEST_SET: t0-sonic
- COMMON_EXTRA_PARAMS: "--neighbor_type=sonic --enable_macsec --macsec_profile=128_SCI,256_XPN_SCI"
+ COMMON_EXTRA_PARAMS: "--neighbor_type=sonic "
VM_TYPE: vsonic
- SPECIFIED_PARAMS: '{\"test_pretest.py\":[\"--completeness_level=confident\",\"--allow_recover\"],\"test_posttest.py\":[\"--completeness_level=confident\",\"--allow_recover\"]}'
- job: wan_elastictest
displayName: "kvmtest-wan by Elastictest"
diff --git a/build_debian.sh b/build_debian.sh
index 0a014f35063e..9e36299b9c18 100755
--- a/build_debian.sh
+++ b/build_debian.sh
@@ -111,7 +111,7 @@ sudo LANG=C chroot $FILESYSTEM_ROOT mount
[ -d $TRUSTED_GPG_DIR ] && [ ! -z "$(ls $TRUSTED_GPG_DIR)" ] && sudo cp $TRUSTED_GPG_DIR/* ${FILESYSTEM_ROOT}/etc/apt/trusted.gpg.d/
## Pointing apt to public apt mirrors and getting latest packages, needed for latest security updates
-scripts/build_mirror_config.sh files/apt $CONFIGURED_ARCH $IMAGE_DISTRO
+scripts/build_mirror_config.sh files/apt $CONFIGURED_ARCH $IMAGE_DISTRO
sudo cp files/apt/sources.list.$CONFIGURED_ARCH $FILESYSTEM_ROOT/etc/apt/sources.list
sudo cp files/apt/apt.conf.d/{81norecommends,apt-{clean,gzip-indexes,no-languages},no-check-valid-until,apt-multiple-retries} $FILESYSTEM_ROOT/etc/apt/apt.conf.d/
@@ -294,7 +294,7 @@ then
## Install Kubernetes master
echo '[INFO] Install kubernetes master'
install_kubernetes ${MASTER_KUBERNETES_VERSION}
-
+
sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT curl -fsSL \
https://packages.microsoft.com/keys/microsoft.asc | \
sudo LANG=C chroot $FILESYSTEM_ROOT apt-key add -
@@ -309,7 +309,7 @@ then
sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y remove gnupg
sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT curl -o /tmp/cri-dockerd.deb -fsSL \
https://github.com/Mirantis/cri-dockerd/releases/download/v${MASTER_CRI_DOCKERD}/cri-dockerd_${MASTER_CRI_DOCKERD}.3-0.debian-${IMAGE_DISTRO}_amd64.deb
- sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install -f /tmp/cri-dockerd.deb
+ sudo LANG=C chroot $FILESYSTEM_ROOT apt-get -y install -f /tmp/cri-dockerd.deb
sudo LANG=C chroot $FILESYSTEM_ROOT rm -f /tmp/cri-dockerd.deb
else
echo '[INFO] Skipping Install kubernetes master'
@@ -400,6 +400,7 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in
jq \
auditd \
linux-perf \
+ resolvconf \
lsof \
sysstat
@@ -447,6 +448,14 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in
systemd-sysv \
ntp
+# Workaround for issue: The udev rule may fail to be executed because the
+# daemon-reload command is executed in parallel
+# Github issue: https://github.com/systemd/systemd/issues/24668
+# Github PR: https://github.com/systemd/systemd/pull/24673
+# This workaround should be removed after a upstream already contains the fixes
+sudo patch $FILESYSTEM_ROOT/lib/systemd/system/systemd-udevd.service \
+ files/image_config/systemd/systemd-udevd/fix-udev-rule-may-fail-if-daemon-reload-command-runs.patch
+
if [[ $TARGET_BOOTLOADER == grub ]]; then
if [[ $CONFIGURED_ARCH == amd64 ]]; then
GRUB_PKG=grub-pc-bin
@@ -651,10 +660,10 @@ then
fi
# #################
-# secure boot
+# secure boot
# #################
if [[ $SECURE_UPGRADE_MODE == 'dev' || $SECURE_UPGRADE_MODE == "prod" && $SONIC_ENABLE_SECUREBOOT_SIGNATURE != 'y' ]]; then
- # note: SONIC_ENABLE_SECUREBOOT_SIGNATURE is a feature that signing just kernel,
+ # note: SONIC_ENABLE_SECUREBOOT_SIGNATURE is a feature that signing just kernel,
# SECURE_UPGRADE_MODE is signing all the boot component including kernel.
# its required to do not enable both features together to avoid conflicts.
echo "Secure Boot support build stage: Starting .."
@@ -663,14 +672,14 @@ if [[ $SECURE_UPGRADE_MODE == 'dev' || $SECURE_UPGRADE_MODE == "prod" && $SONIC_
sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install \
shim-unsigned \
grub-efi
-
+
if [ ! -f $SECURE_UPGRADE_SIGNING_CERT ]; then
echo "Error: SONiC SECURE_UPGRADE_SIGNING_CERT=$SECURE_UPGRADE_SIGNING_CERT key missing"
exit 1
fi
if [[ $SECURE_UPGRADE_MODE == 'dev' ]]; then
- # development signing & verification
+ # development signing & verification
if [ ! -f $SECURE_UPGRADE_DEV_SIGNING_KEY ]; then
echo "Error: SONiC SECURE_UPGRADE_DEV_SIGNING_KEY=$SECURE_UPGRADE_DEV_SIGNING_KEY key missing"
@@ -782,7 +791,11 @@ sudo rm -f $ONIE_INSTALLER_PAYLOAD $FILESYSTEM_SQUASHFS
## Note: -x to skip directories on different file systems, such as /proc
sudo du -hsx $FILESYSTEM_ROOT
sudo mkdir -p $FILESYSTEM_ROOT/var/lib/docker
-sudo cp files/image_config/resolv-config/resolv.conf $FILESYSTEM_ROOT/etc/resolv.conf
+
+## Clear DNS configuration inherited from the build server
+sudo rm -f $FILESYSTEM_ROOT/etc/resolvconf/resolv.conf.d/original
+sudo cp files/image_config/resolv-config/resolv.conf.head $FILESYSTEM_ROOT/etc/resolvconf/resolv.conf.d/head
+
sudo mksquashfs $FILESYSTEM_ROOT $FILESYSTEM_SQUASHFS -comp zstd -b 1M -e boot -e var/lib/docker -e $PLATFORM_DIR
# Ensure admin gid is 1000
diff --git a/build_image.sh b/build_image.sh
index 4b1dfc9582ee..62d03296020e 100755
--- a/build_image.sh
+++ b/build_image.sh
@@ -86,7 +86,7 @@ generate_onie_installer_image()
## Note: Don't leave blank between lines. It is single line command.
./onie-mk-demo.sh $CONFIGURED_ARCH $TARGET_MACHINE $TARGET_PLATFORM-$TARGET_MACHINE-$ONIEIMAGE_VERSION \
installer platform/$TARGET_MACHINE/platform.conf $output_file OS $IMAGE_VERSION $ONIE_IMAGE_PART_SIZE \
- $ONIE_INSTALLER_PAYLOAD
+ $ONIE_INSTALLER_PAYLOAD $SECURE_UPGRADE_SIGNING_CERT $SECURE_UPGRADE_DEV_SIGNING_KEY
}
# Generate asic-specific device list
diff --git a/device/arista/x86_64-arista_7050_qx32/platform.json b/device/arista/x86_64-arista_7050_qx32/platform.json
index 8772ce8b23db..ccce2079a29d 100644
--- a/device/arista/x86_64-arista_7050_qx32/platform.json
+++ b/device/arista/x86_64-arista_7050_qx32/platform.json
@@ -1,7 +1,17 @@
{
"chassis": {
"name": "DCS-7050QX-32",
- "components": [],
+ "components": [
+ {
+ "name": "Scd(addr=0000:04:00.0)"
+ },
+ {
+ "name": "Ucd90120A(addr=6-004e)"
+ },
+ {
+ "name": "Ucd90160(addr=10-004e)"
+ }
+ ],
"fans": [
{
"name": "fan1"
diff --git a/device/arista/x86_64-arista_7050_qx32s/platform.json b/device/arista/x86_64-arista_7050_qx32s/platform.json
index 70fbf749b22b..4309fe656947 100644
--- a/device/arista/x86_64-arista_7050_qx32s/platform.json
+++ b/device/arista/x86_64-arista_7050_qx32s/platform.json
@@ -1,7 +1,23 @@
{
"chassis": {
"name": "DCS-7050QX-32S",
- "components": [],
+ "components": [
+ {
+ "name": "Aboot()"
+ },
+ {
+ "name": "Scd(addr=0000:02:00.0)"
+ },
+ {
+ "name": "Ucd90120A(addr=4-004e)"
+ },
+ {
+ "name": "Ucd90120A(addr=8-004e)"
+ },
+ {
+ "name": "CrowSysCpld(addr=2-0023)"
+ }
+ ],
"fans": [],
"fan_drawers": [
{
diff --git a/device/dell/x86_64-dell_s6100_c2538-r0/installer.conf b/device/dell/x86_64-dell_s6100_c2538-r0/installer.conf
index 87ea9d31bb18..be208a15c691 100644
--- a/device/dell/x86_64-dell_s6100_c2538-r0/installer.conf
+++ b/device/dell/x86_64-dell_s6100_c2538-r0/installer.conf
@@ -1,3 +1,3 @@
CONSOLE_PORT=0x2f8
CONSOLE_DEV=1
-ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="module_blacklist=gpio_ich,wdat_wdt acpi_no_watchdog=1 nos-config-part=/dev/sda12"
+ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="module_blacklist=gpio_ich,wdat_wdt acpi_no_watchdog=1 nos-config-part=/dev/sda12 logs_inram=on"
\ No newline at end of file
diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/installer.conf b/device/mellanox/x86_64-mlnx_msn2700-r0/installer.conf
index c9c9493a5404..eb12e734bb90 100644
--- a/device/mellanox/x86_64-mlnx_msn2700-r0/installer.conf
+++ b/device/mellanox/x86_64-mlnx_msn2700-r0/installer.conf
@@ -1 +1 @@
-ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="acpi_enforce_resources=lax acpi=noirq"
+ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="acpi_enforce_resources=lax acpi=noirq logs_inram=on"
diff --git a/device/nokia/armhf-nokia_ixs7215_52x-r0/installer.conf b/device/nokia/armhf-nokia_ixs7215_52x-r0/installer.conf
index b138f294e1ea..36696d270385 100644
--- a/device/nokia/armhf-nokia_ixs7215_52x-r0/installer.conf
+++ b/device/nokia/armhf-nokia_ixs7215_52x-r0/installer.conf
@@ -1 +1,2 @@
VAR_LOG_SIZE=4096
+ONIE_PLATFORM_EXTRA_CMDLINE_LINUX="logs_inram=on"
diff --git a/device/virtual/x86_64-kvm_x86_64-r0/NPU/sai_npu.profile b/device/virtual/x86_64-kvm_x86_64-r0/NPU/sai_npu.profile
new file mode 100644
index 000000000000..ffc5d7a21103
--- /dev/null
+++ b/device/virtual/x86_64-kvm_x86_64-r0/NPU/sai_npu.profile
@@ -0,0 +1,5 @@
+SAI_VS_SWITCH_TYPE=SAI_VS_SWITCH_TYPE_NPU
+SAI_VS_HOSTIF_USE_TAP_DEVICE=true
+SAI_VS_INTERFACE_LANE_MAP_FILE=/usr/share/sonic/hwsku/lanemap.ini
+SAI_VS_CORE_PORT_INDEX_MAP_FILE=/usr/share/sonic/hwsku/coreportindexmap.ini
+SAI_VS_INTERFACE_FABRIC_LANE_MAP_FILE=/usr/share/sonic/hwsku/fabriclanemap.ini
diff --git a/dockers/docker-database/docker-database-init.sh b/dockers/docker-database/docker-database-init.sh
index e2c3fcb727d2..cee131b402d4 100755
--- a/dockers/docker-database/docker-database-init.sh
+++ b/dockers/docker-database/docker-database-init.sh
@@ -95,4 +95,8 @@ do
fi
done
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
+
exec /usr/local/bin/supervisord
diff --git a/dockers/docker-dhcp-relay/start.sh b/dockers/docker-dhcp-relay/start.sh
index 87a9e5711f2f..ce0dce10ed3c 100755
--- a/dockers/docker-dhcp-relay/start.sh
+++ b/dockers/docker-dhcp-relay/start.sh
@@ -10,6 +10,10 @@ then
${CTR_SCRIPT} -f dhcp_relay -o ${RUNTIME_OWNER} -v ${IMAGE_VERSION}
fi
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
+
# If our supervisor config has entries in the "dhcp-relay" group...
if [ $(supervisorctl status | grep -c "^dhcp-relay:") -gt 0 ]; then
# Wait for all interfaces to come up and be assigned IPv4 addresses before
diff --git a/dockers/docker-eventd/start.sh b/dockers/docker-eventd/start.sh
index 60cd6a00aecb..2c357a857436 100755
--- a/dockers/docker-eventd/start.sh
+++ b/dockers/docker-eventd/start.sh
@@ -4,3 +4,6 @@ if [ "${RUNTIME_OWNER}" == "" ]; then
RUNTIME_OWNER="kube"
fi
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
diff --git a/dockers/docker-fpm-frr/docker_init.sh b/dockers/docker-fpm-frr/docker_init.sh
index d8058e9b5d8d..5e25739b219e 100755
--- a/dockers/docker-fpm-frr/docker_init.sh
+++ b/dockers/docker-fpm-frr/docker_init.sh
@@ -106,4 +106,8 @@ chmod 0755 /usr/sbin/bgp-unisolate
mkdir -p /var/sonic
echo "# Config files managed by sonic-config-engine" > /var/sonic/config_status
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
+
exec /usr/local/bin/supervisord
diff --git a/dockers/docker-iccpd/start.sh b/dockers/docker-iccpd/start.sh
index bba5e490c466..cb36ce69cfff 100644
--- a/dockers/docker-iccpd/start.sh
+++ b/dockers/docker-iccpd/start.sh
@@ -10,3 +10,7 @@ sonic-cfggen -d -t /usr/share/sonic/templates/iccpd.j2 > $ICCPD_CONF_PATH/iccpd.
mkdir -p /var/sonic
echo "# Config files managed by sonic-config-engine" > /var/sonic/config_status
+
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
diff --git a/dockers/docker-lldp/lldpmgrd b/dockers/docker-lldp/lldpmgrd
index 6d8540bf2613..2dad02f8794c 100755
--- a/dockers/docker-lldp/lldpmgrd
+++ b/dockers/docker-lldp/lldpmgrd
@@ -23,6 +23,8 @@ try:
from sonic_py_common import daemon_base
from swsscommon import swsscommon
from sonic_py_common.interface import inband_prefix, recirc_prefix
+ from sonic_py_common import device_info
+
except ImportError as err:
raise ImportError("%s - required module not found" % str(err))
@@ -357,7 +359,8 @@ def run_cmd(self, cmd):
def check_timeout(self, start_time):
if time.time() - start_time > PORT_INIT_TIMEOUT:
- self.log_error("Port init timeout reached ({} seconds), resuming lldpd...".format(PORT_INIT_TIMEOUT))
+ if device_info.is_frontend_port_present_in_host():
+ self.log_error("Port init timeout reached ({} seconds), resuming lldpd...".format(PORT_INIT_TIMEOUT))
return True
return False
diff --git a/dockers/docker-lldp/start.sh b/dockers/docker-lldp/start.sh
index 5a489884aea9..51057ae4ec79 100755
--- a/dockers/docker-lldp/start.sh
+++ b/dockers/docker-lldp/start.sh
@@ -22,3 +22,7 @@ mkdir -p /var/sonic
echo "# Config files managed by sonic-config-engine" > /var/sonic/config_status
rm -f /var/run/lldpd.socket
+
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
diff --git a/dockers/docker-macsec/start.sh b/dockers/docker-macsec/start.sh
index 20d602bdd370..bfb684eecadd 100644
--- a/dockers/docker-macsec/start.sh
+++ b/dockers/docker-macsec/start.sh
@@ -1,2 +1,6 @@
#!/usr/bin/env bash
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
+
diff --git a/dockers/docker-macsec/supervisord.conf b/dockers/docker-macsec/supervisord.conf
index fb88f17049b2..3ab4f372f101 100644
--- a/dockers/docker-macsec/supervisord.conf
+++ b/dockers/docker-macsec/supervisord.conf
@@ -28,6 +28,17 @@ stdout_logfile=syslog
stderr_logfile=syslog
dependent_startup=true
+[program:start]
+command=/usr/bin/start.sh
+priority=2
+autostart=false
+autorestart=false
+startsecs=0
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=rsyslogd:running
+
[program:macsecmgrd]
command=/usr/bin/macsecmgrd
priority=2
diff --git a/dockers/docker-mux/docker-init.sh b/dockers/docker-mux/docker-init.sh
index bea1686132a1..1679ec5d9f8f 100755
--- a/dockers/docker-mux/docker-init.sh
+++ b/dockers/docker-mux/docker-init.sh
@@ -3,6 +3,10 @@
# Generate supervisord config file
mkdir -p /etc/supervisor/conf.d/
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
+
# The docker container should start this script as PID 1, so now that supervisord is
# properly configured, we exec supervisord so that it runs as PID 1 for the
# duration of the container's lifetime
diff --git a/dockers/docker-nat/start.sh b/dockers/docker-nat/start.sh
index 68603d007a51..74912ce01485 100755
--- a/dockers/docker-nat/start.sh
+++ b/dockers/docker-nat/start.sh
@@ -3,3 +3,7 @@
rm -f /var/run/nat/*
mkdir -p /var/warmboot/nat
+
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
diff --git a/dockers/docker-orchagent/docker-init.j2 b/dockers/docker-orchagent/docker-init.j2
index d8064b9b88bd..415dce638c1a 100755
--- a/dockers/docker-orchagent/docker-init.j2
+++ b/dockers/docker-orchagent/docker-init.j2
@@ -71,4 +71,8 @@ if [ -f "$IS_SUPERVISOR" ]; then
fi
fi
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
+
exec /usr/local/bin/supervisord
diff --git a/dockers/docker-platform-monitor/docker_init.j2 b/dockers/docker-platform-monitor/docker_init.j2
index c93d1790bd00..d8667296efae 100755
--- a/dockers/docker-platform-monitor/docker_init.j2
+++ b/dockers/docker-platform-monitor/docker_init.j2
@@ -110,4 +110,8 @@ else
sonic-cfggen -d -a "$confvar" -t $SUPERVISOR_CONF_TEMPLATE > $SUPERVISOR_CONF_FILE
fi
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
+
exec /usr/local/bin/supervisord
diff --git a/dockers/docker-router-advertiser/docker-init.sh b/dockers/docker-router-advertiser/docker-init.sh
index 6e1bb5545f82..02c5a8c72be1 100755
--- a/dockers/docker-router-advertiser/docker-init.sh
+++ b/dockers/docker-router-advertiser/docker-init.sh
@@ -14,4 +14,8 @@ sonic-cfggen $CFGGEN_PARAMS
chmod +x /usr/bin/wait_for_link.sh
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
+
exec /usr/local/bin/supervisord
diff --git a/dockers/docker-sflow/Dockerfile.j2 b/dockers/docker-sflow/Dockerfile.j2
index 7399be80eed2..e8aee5fe6bed 100644
--- a/dockers/docker-sflow/Dockerfile.j2
+++ b/dockers/docker-sflow/Dockerfile.j2
@@ -26,6 +26,7 @@ RUN apt-get clean -y && \
RUN sed -ri '/^DAEMON_ARGS=""/c DAEMON_ARGS="-c /var/log/hsflowd.crash"' /etc/init.d/hsflowd
+COPY ["start.sh", "/usr/bin/"]
COPY ["supervisord.conf", "/etc/supervisor/conf.d/"]
COPY ["files/supervisor-proc-exit-listener", "/usr/bin"]
COPY ["critical_processes", "/etc/supervisor"]
diff --git a/dockers/docker-sflow/start.sh b/dockers/docker-sflow/start.sh
new file mode 100644
index 000000000000..8996769c4c5e
--- /dev/null
+++ b/dockers/docker-sflow/start.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
diff --git a/dockers/docker-sflow/supervisord.conf b/dockers/docker-sflow/supervisord.conf
index 2c8b006df917..d6cd5092e53d 100644
--- a/dockers/docker-sflow/supervisord.conf
+++ b/dockers/docker-sflow/supervisord.conf
@@ -28,6 +28,17 @@ stdout_logfile=syslog
stderr_logfile=syslog
dependent_startup=true
+[program:start]
+command=/usr/bin/start.sh
+priority=2
+autostart=false
+autorestart=false
+startsecs=0
+stdout_logfile=syslog
+stderr_logfile=syslog
+dependent_startup=true
+dependent_startup_wait_for=rsyslogd:running
+
[program:sflowmgrd]
command=/usr/bin/sflowmgrd
priority=2
diff --git a/dockers/docker-snmp/start.sh b/dockers/docker-snmp/start.sh
index aefd0bfc3db6..6de6f740b0ad 100755
--- a/dockers/docker-snmp/start.sh
+++ b/dockers/docker-snmp/start.sh
@@ -27,3 +27,7 @@ sonic-cfggen $SONIC_CFGGEN_ARGS
mkdir -p /var/sonic
echo "# Config files managed by sonic-config-engine" > /var/sonic/config_status
+
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
diff --git a/dockers/docker-sonic-mgmt-framework/start.sh b/dockers/docker-sonic-mgmt-framework/start.sh
index d6722a27fc77..2fefbb349cb5 100755
--- a/dockers/docker-sonic-mgmt-framework/start.sh
+++ b/dockers/docker-sonic-mgmt-framework/start.sh
@@ -2,3 +2,7 @@
mkdir -p /var/sonic
echo "# Config files managed by sonic-config-engine" > /var/sonic/config_status
+
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
diff --git a/dockers/docker-sonic-mgmt/Dockerfile.j2 b/dockers/docker-sonic-mgmt/Dockerfile.j2
index bcb13b570ccf..5534d3112a41 100755
--- a/dockers/docker-sonic-mgmt/Dockerfile.j2
+++ b/dockers/docker-sonic-mgmt/Dockerfile.j2
@@ -5,13 +5,14 @@ ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y apt-transport-https \
apt-utils \
- azure-cli \
build-essential \
ca-certificates \
cmake \
curl \
default-jre \
git \
+ gnupg \
+ gnupg-agent \
iproute2 \
iputils-ping \
isc-dhcp-client \
@@ -122,16 +123,18 @@ RUN pip install allure-pytest==2.8.22 \
&& pip install scapy==2.4.5 --upgrade --ignore-installed
# Install docker-ce-cli
-RUN apt-get update \
- && apt-get install -y \
- apt-transport-https \
- ca-certificates \
- gnupg-agent \
- && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \
+RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \
&& add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
&& apt-get update \
&& apt-get install -y docker-ce-cli
+# Install Azure CLI, following https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt#option-2-step-by-step-installation-instructions
+RUN mkdir -p /etc/apt/keyrings \
+ && curl -sLS https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/keyrings/microsoft.gpg > /dev/null \
+ && chmod go+r /etc/apt/keyrings/microsoft.gpg \
+ && echo "deb [arch=`dpkg --print-architecture` signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/azure-cli/ `lsb_release -cs` main" | tee /etc/apt/sources.list.d/azure-cli.list \
+ && apt-get update && apt-get install -y azure-cli
+
## Copy and install sonic-mgmt docker dependencies
COPY \
{% for deb in docker_sonic_mgmt_debs.split(' ') -%}
diff --git a/dockers/docker-sonic-p4rt/start.sh b/dockers/docker-sonic-p4rt/start.sh
index d6722a27fc77..2fefbb349cb5 100755
--- a/dockers/docker-sonic-p4rt/start.sh
+++ b/dockers/docker-sonic-p4rt/start.sh
@@ -2,3 +2,7 @@
mkdir -p /var/sonic
echo "# Config files managed by sonic-config-engine" > /var/sonic/config_status
+
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
diff --git a/dockers/docker-sonic-telemetry/start.sh b/dockers/docker-sonic-telemetry/start.sh
index 08f7292f55ba..8d36f740fa38 100755
--- a/dockers/docker-sonic-telemetry/start.sh
+++ b/dockers/docker-sonic-telemetry/start.sh
@@ -12,3 +12,7 @@ fi
mkdir -p /var/sonic
echo "# Config files managed by sonic-config-engine" > /var/sonic/config_status
+
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
diff --git a/dockers/docker-teamd/start.sh b/dockers/docker-teamd/start.sh
index d67bc4e925c8..0b45239355ee 100755
--- a/dockers/docker-teamd/start.sh
+++ b/dockers/docker-teamd/start.sh
@@ -3,3 +3,7 @@
rm -f /var/run/teamd/*
mkdir -p /var/warmboot/teamd
+
+TZ=$(cat /etc/timezone)
+rm -rf /etc/localtime
+ln -sf /usr/share/zoneinfo/$TZ /etc/localtime
diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye
index 886bca9f8d23..5142c35ba426 100644
--- a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye
+++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye
@@ -3,8 +3,8 @@ applibs-dev==1.mlnx.4.5.5142
bfnplatform==1.0.0
isc-dhcp-relay==4.4.1-2.3+deb11u2
kernel-mft-dkms==4.22.1-15
-libhiredis-dev==0.14.0-3~bpo9+1
-libhiredis0.14==0.14.0-3~bpo9+1
+libhiredis-dev==0.14.1-1
+libhiredis0.14==0.14.1-1
libnl-3-dev==3.5.0-1
libnl-cli-3-200==3.5.0-1
libnl-cli-3-dev==3.5.0-1
@@ -19,6 +19,7 @@ libsairedis==1.0.0
libsairedis-dev==1.0.0
libsaithrift-dev==0.9.4
libsaivs==1.0.0
+libsaivs-dev==1.0.0
libswsscommon==1.0.0
libswsscommon-dev==1.0.0
libtac-dev==1.4.1-1
diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64 b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64
index 90f712515be3..3bad5a5352bd 100644
--- a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64
+++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-arm64
@@ -1,3 +1 @@
-libnl-3-200==3.5.0-1
-libnl-route-3-200==3.5.0-1
linux-headers-5.10.0-18-2-arm64==5.10.140-1
diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf
index b6df7939876f..ea31993a2e6b 100644
--- a/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf
+++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-deb-bullseye-armhf
@@ -1,4 +1,3 @@
libnl-3-200==3.5.0-1
libnl-route-3-200==3.5.0-1
linux-headers-5.10.0-18-2-armmp==5.10.140-1
-mrvllibsai==1.11.0-1
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 e22b015f7c34..c7bad22e6156 100644
--- a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3
+++ b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3
@@ -6,12 +6,12 @@ colorful==0.5.5
docker==6.1.3
docker-image-py==0.1.12
enlighten==1.11.2
-filelock==3.12.1
+filelock==3.12.2
ijson==2.6.1
ipaddress==1.0.23
jsondiff==2.0.0
-jsonpatch==1.32
-jsonpointer==2.3
+jsonpatch==1.33
+jsonpointer==2.4
jsonschema==2.6.0
natsort==6.2.1
netaddr==0.8.0
@@ -21,7 +21,7 @@ pddf-platform==1.0
prefixed==0.7.0
prettyprinter==0.18.0
psutil==5.9.5
-pycairo==1.23.0
+pycairo==1.24.0
pycparser==2.21
pynacl==1.5.0
pyroute2==0.5.19
@@ -32,6 +32,6 @@ tabulate==0.8.2
thrift==0.14.1
toposort==1.6
wcwidth==0.2.6
-websocket-client==1.5.3
+websocket-client==1.6.1
www-authenticate==0.9.2
xmltodict==0.12.0
diff --git a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64 b/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64
deleted file mode 100644
index 46df813bf748..000000000000
--- a/files/build/versions/build/build-sonic-slave-bullseye/versions-py3-all-arm64
+++ /dev/null
@@ -1,5 +0,0 @@
-bcrypt==3.2.2
-bitarray==1.5.3
-click==7.0
-requests==2.31.0
-zipp==1.2.0
diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64 b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64
index 2f592dd8dbbc..7d6eef0555e9 100644
--- a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64
+++ b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-arm64
@@ -1,5 +1,5 @@
-libhiredis-dev==0.14.0-3~bpo9+1
-libhiredis0.14==0.14.0-3~bpo9+1
+libhiredis-dev==0.14.1-1
+libhiredis0.14==0.14.1-1
libnl-3-200==3.5.0-1
libnl-3-dev==3.5.0-1
libnl-route-3-200==3.5.0-1
diff --git a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf
index 2f592dd8dbbc..7d6eef0555e9 100644
--- a/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf
+++ b/files/build/versions/build/build-sonic-slave-buster/versions-deb-buster-armhf
@@ -1,5 +1,5 @@
-libhiredis-dev==0.14.0-3~bpo9+1
-libhiredis0.14==0.14.0-3~bpo9+1
+libhiredis-dev==0.14.1-1
+libhiredis0.14==0.14.1-1
libnl-3-200==3.5.0-1
libnl-3-dev==3.5.0-1
libnl-route-3-200==3.5.0-1
diff --git a/files/build/versions/default/versions-docker b/files/build/versions/default/versions-docker
index 8d2c6413a76c..9ed0e3d08b1b 100644
--- a/files/build/versions/default/versions-docker
+++ b/files/build/versions/default/versions-docker
@@ -1,12 +1,12 @@
-amd64:amd64/debian:bullseye==sha256:1bf0e24813ee8306c3fba1fe074793eb91c15ee580b61fff7f3f41662bc0031d
-amd64:amd64/debian:buster==sha256:a067a9e8b39d5f19659b3bc9fd4348f6319afabd0d6ba1fe3b43df108926ea92
-amd64:debian:bullseye==sha256:432f545c6ba13b79e2681f4cc4858788b0ab099fc1cca799cc0fae4687c69070
-amd64:debian:buster==sha256:322859539526a04978dee1a2575b515295f6706f17d280f877a634299a7c1414
-arm64:arm64v8/debian:bullseye==sha256:0d1881fd981442bd6721e0e4ff40eb0ba705475c3a8469482ccee9029af56ebf
-arm64:arm64v8/debian:buster==sha256:62a3eb2f5ace2f8415171855a84375616cb3cdb60b799d1811c3fda923b8dfbc
-arm64:debian:bullseye==sha256:432f545c6ba13b79e2681f4cc4858788b0ab099fc1cca799cc0fae4687c69070
-arm64:debian:buster==sha256:322859539526a04978dee1a2575b515295f6706f17d280f877a634299a7c1414
-armhf:arm32v7/debian:bullseye==sha256:16aa677e45937a8c9f2e5a932ff1a611bc85b6416e47ab66532e05af2c08e066
-armhf:arm32v7/debian:buster==sha256:5340ee96c308b59f4590ec929adeeaf61ffe5a0758adcba09d0595a6619c3462
-armhf:debian:bullseye==sha256:432f545c6ba13b79e2681f4cc4858788b0ab099fc1cca799cc0fae4687c69070
-armhf:debian:buster==sha256:322859539526a04978dee1a2575b515295f6706f17d280f877a634299a7c1414
+amd64:amd64/debian:bullseye==sha256:1e8185ca8683c04e6c23cc7bb21b564d54faeb7e20852a6068c85cbdd7bac531
+amd64:amd64/debian:buster==sha256:108052254277ea53cd807d2782ed3cbe4b9242256af5c7519c6e5692ae2b5d97
+amd64:debian:bullseye==sha256:1e5f2d70c9441c971607727f56d0776fb9eecf23cd37b595b26db7a974b2301d
+amd64:debian:buster==sha256:28842e4895d36e67c49015c0b41089fa3248e865c76994b19f706ab91e800b95
+arm64:arm64v8/debian:bullseye==sha256:0f56dd5a1687619972eeb539b273b4f3ec04431db69d4b569c2ce6ef48478538
+arm64:arm64v8/debian:buster==sha256:25bb297f257d6422b3aa44891469abc07e63096ea721da57002f0297ddcc599c
+arm64:debian:bullseye==sha256:1e5f2d70c9441c971607727f56d0776fb9eecf23cd37b595b26db7a974b2301d
+arm64:debian:buster==sha256:28842e4895d36e67c49015c0b41089fa3248e865c76994b19f706ab91e800b95
+armhf:arm32v7/debian:bullseye==sha256:93effc32fdca33aebfcef7225219dde573daebd3e1ddd09ab21e635887271096
+armhf:arm32v7/debian:buster==sha256:626ee3ce3a78f7a900fc5a99bfdbb44297f1c943a4fe261de4ec3fb4a23266bd
+armhf:debian:bullseye==sha256:1e5f2d70c9441c971607727f56d0776fb9eecf23cd37b595b26db7a974b2301d
+armhf:debian:buster==sha256:28842e4895d36e67c49015c0b41089fa3248e865c76994b19f706ab91e800b95
diff --git a/files/build/versions/default/versions-git b/files/build/versions/default/versions-git
index 9b9b9452af5c..bf87b6ba4461 100644
--- a/files/build/versions/default/versions-git
+++ b/files/build/versions/default/versions-git
@@ -1,24 +1,24 @@
-https://chromium.googlesource.com/chromium/tools/depot_tools.git==6eaeb04ac1fb53c19cdb18f666a4c054da037f08
+https://chromium.googlesource.com/chromium/tools/depot_tools.git==90fed308660fd53ac4247b7242f280b01731b1c7
https://github.com/aristanetworks/swi-tools.git==b5f087e4774168bf536360d43c9c509c8f14ad9f
https://github.com/CESNET/libyang.git==ea94c8b9f513f8a6ddc6ce1540fa41eaf4c8922a
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==3239be535d16b10881513c0e97500cbd110426ab
-https://github.com/FreeRADIUS/freeradius-server.git==3cedb9b2588b334d37d1eae957eb811b5de45412
+https://github.com/flashrom/flashrom.git==1ee04cd5ac8bb636182d9d7c259110638b83c8b1
+https://github.com/FreeRADIUS/freeradius-server.git==14ddc663bc17ccdc6a7c860cfb188c58fb5536d1
https://github.com/FreeRADIUS/pam_radius.git==8d373539bb9f13b0abfe8bcae0095a930a00fad0
https://github.com/jeroennijhof/pam_tacplus.git==4284d9016e64def2bb81d5f50f96dc3b59bfdc39
-https://github.com/jpirko/libteam.git==61e27812c1074a865d7e1a778c0ce442837c28d7
-https://github.com/lguohan/gnxi.git==f2b11e45b16ab13485ae14933f30c18ee6336499
-https://github.com/Marvell-switching/mrvl-prestera.git==9dbae444204a2c27b33be698ce497d55926b8893
+https://github.com/jpirko/libteam.git==7cb5de8b01be132bd4150eff460bfd83296414b6
+https://github.com/lguohan/gnxi.git==b85e4ab565df4472fdcfcded2a53e6bf57aa493f
+https://github.com/Marvell-switching/mrvl-prestera.git==179c08b0544db0b3a95a843e31266e00a68fb4b0
https://github.com/Mellanox/libpsample.git==62bb27d9a49424e45191eee81df7ce0d8c74e774
-https://github.com/p4lang/ptf.git==b33f54b9a97f834be1c8522217d445b6b1cad2df
+https://github.com/p4lang/ptf.git==d2e2d8ad005a451ad11f9d21af50079a0552921a
https://github.com/p4lang/scapy-vxlan.git==85ffe83da156568ee47a0750f638227e6e1d7479
-https://github.com/sflow/host-sflow==b9b61bc037aed4d3d0fac6b0b4d88bc78b7b485d
+https://github.com/sflow/host-sflow==4dc68a95fa57758119d76e42965b32493ffd7094
https://github.com/sflow/sflowtool==4ce1223bb4c2cd0cbb1dd688dc0914561fcbb6c4
https://github.com/thom311/libnl==cbafad9ddf24caef5230fef715d34f0539603be0
https://salsa.debian.org/debian/libteam.git==48142125234a665ad5367b724af36a58fb484d3d
-https://salsa.debian.org/kernel-team/ethtool/==532e36ef02837c78df47f8d561aa04b5cfed438f
+https://salsa.debian.org/kernel-team/ethtool/==581ffbde5b349852a56fa581f7b512a755c33e26
https://salsa.debian.org/kernel-team/initramfs-tools.git==193dfbb7929e518976f89f6c8dd9201982e56f80
https://salsa.debian.org/sk-guest/monit.git==c9da7ebb1f35dfba17b50b5969a6e75e29cbec0d
-https://salsa.debian.org/ssh-team/openssh.git==4cb9ac54235e8f90a590a976e1404480fb521930
+https://salsa.debian.org/ssh-team/openssh.git==74d15e80b8730335a9b13469ca6cafe4c1c8e485
diff --git a/files/build/versions/default/versions-mirror b/files/build/versions/default/versions-mirror
index 903c0dffb4c0..81b26f1d331e 100644
--- a/files/build/versions/default/versions-mirror
+++ b/files/build/versions/default/versions-mirror
@@ -1,15 +1,15 @@
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==20230611T000219Z
-debian-security==20230611T000221Z
+debian==20230625T000121Z
+debian-security==20230625T000122Z
download.docker.com_linux_debian_dists_bullseye==2023-06-09T17:17:20Z
download.docker.com_linux_debian_dists_buster==2023-05-26T07:49:38Z
packages.microsoft.com_repos_sonic-dev_dists_jessie==2022-10-31T19:34:29Z
-packages.trafficmanager.net_snapshot_debian-security_20230611T000221Z_dists_bullseye-security==2023-06-10T19:38:13Z
-packages.trafficmanager.net_snapshot_debian-security_20230611T000221Z_dists_buster_updates==2023-06-10T19:38:13Z
-packages.trafficmanager.net_snapshot_debian_20230611T000219Z_dists_bullseye==2023-06-10T08:52:21Z
-packages.trafficmanager.net_snapshot_debian_20230611T000219Z_dists_bullseye-backports==2023-06-10T11:24:09Z
-packages.trafficmanager.net_snapshot_debian_20230611T000219Z_dists_bullseye-updates==2023-06-10T11:24:09Z
-packages.trafficmanager.net_snapshot_debian_20230611T000219Z_dists_buster==2023-06-10T08:53:33Z
-packages.trafficmanager.net_snapshot_debian_20230611T000219Z_dists_buster-backports==2023-06-10T11:24:09Z
-packages.trafficmanager.net_snapshot_debian_20230611T000219Z_dists_buster-updates==2023-06-10T08:55:10Z
+packages.trafficmanager.net_snapshot_debian-security_20230625T000122Z_dists_bullseye-security==2023-06-22T22:43:03Z
+packages.trafficmanager.net_snapshot_debian-security_20230625T000122Z_dists_buster_updates==2023-06-22T22:43:03Z
+packages.trafficmanager.net_snapshot_debian_20230625T000121Z_dists_bullseye==2023-06-10T08:52:21Z
+packages.trafficmanager.net_snapshot_debian_20230625T000121Z_dists_bullseye-backports==2023-06-24T20:43:09Z
+packages.trafficmanager.net_snapshot_debian_20230625T000121Z_dists_bullseye-updates==2023-06-24T20:43:09Z
+packages.trafficmanager.net_snapshot_debian_20230625T000121Z_dists_buster==2023-06-10T08:53:33Z
+packages.trafficmanager.net_snapshot_debian_20230625T000121Z_dists_buster-backports==2023-06-24T20:43:09Z
+packages.trafficmanager.net_snapshot_debian_20230625T000121Z_dists_buster-updates==2023-06-10T08:55:10Z
diff --git a/files/build/versions/default/versions-web b/files/build/versions/default/versions-web
index 3081ec12689e..0ead0b68cbae 100644
--- a/files/build/versions/default/versions-web
+++ b/files/build/versions/default/versions-web
@@ -15,9 +15,9 @@ http://deb.debian.org/debian/pool/main/l/lm-sensors/lm-sensors_3.6.0.orig.tar.gz
http://deb.debian.org/debian/pool/main/n/ntp/ntp_4.2.8p15+dfsg-1.debian.tar.xz==896c9b6679f379d8967b012a0cc792c2
http://deb.debian.org/debian/pool/main/n/ntp/ntp_4.2.8p15+dfsg.orig.tar.xz==c1c557036197188a22ec285fa53149d8
http://ftp.us.debian.org/debian/pool/main/s/scapy/python-scapy_2.4.0-2_all.deb==d87d7b22de51937b1e706e4751b86251
-http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.debian.tar.xz==ef340aedc6fd42c549cd503bffb498b2
-http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0-3~bpo9+1.dsc==be4ce11ef67268e59e4b6be587327c40
-http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.0.orig.tar.gz==6d565680a4af0d2e261abbc3e3431b2b
+http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.1-1.debian.tar.xz==d0ef92c6f301ac5023f7953cf7816ff0
+http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.1-1.dsc==ef9e33d036c6dbb74a4ed12fefe2de8a
+http://http.debian.net/debian/pool/main/h/hiredis/hiredis_0.14.1.orig.tar.gz==3e1c541f9df28becb82a611e63e3e939
http://www.mellanox.com/downloads/MFT/mft-4.22.1-15-x86_64-deb.tgz==fb58cd1a7dafef062a7c3ec8a398b5fd
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
@@ -69,7 +69,7 @@ https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz==6f56ef28c93cee644e8c4aa
https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1-2.debian.tar.xz==9d0cbd5f463f461c840c95f62a64d61b
https://launchpad.net/debian/+archive/primary/+sourcefiles/bash/5.1-2/bash_5.1-2.dsc==be44c5a9fc12fb567a486f54b842dd9e
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==628956b660575965429cec84b1778816
+https://raw.githubusercontent.com/p4lang/ptf/master/ptf_nn/ptf_nn_agent.py==963c345c75fe5c5bdedc05ed98a5fd1f
https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.5/swagger-codegen-cli-2.4.5.jar==219f1453ff22482d9e080effbfa7fa81
https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_5.10.140-1.debian.tar.xz==9813a002af43da3a5be05f3d31e85328
https://sonicstorage.blob.core.windows.net/debian-security/pool/updates/main/l/linux/linux_5.10.140-1.dsc==84ab224b073f97978802d9f998248fcc
@@ -106,42 +106,42 @@ https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang
https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/amd64/golang-1.15-src_1.15.15-1~deb11u4%2Bfips_amd64.deb==1c920937aa49b602a1bfec3c49747131
https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-go_1.15.15-1~deb11u4%2Bfips_arm64.deb==0b70c104b907db13ff2fe5d52b3d0008
https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.1/arm64/golang-1.15-src_1.15.15-1~deb11u4%2Bfips_arm64.deb==1d06900f03424fa5ce34a782605983fe
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==72ead09139135d4ecd91b76c89128567
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/golang-1.15-go_1.15.15-1~deb11u4+fips_amd64.deb==145e103357a915cc759cc93de602b631
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/golang-1.15-src_1.15.15-1~deb11u4+fips_amd64.deb==1c1a46d5599be92777702643c37d5751
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==847bc1fc5ce9c8ebae5176947ab34d30
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/libk5crypto3_1.18.3-6+deb11u1+fips_amd64.deb==5e8de29d5f6844f71f15cbf0c3993f1c
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/libpython3.9-minimal_3.9.2-1+fips_amd64.deb==411d2092cd614dd187bdc0ec0bb9598f
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/libpython3.9-stdlib_3.9.2-1+fips_amd64.deb==521dd7170cb9519fac3aa492ff3dd1ea
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/libpython3.9_3.9.2-1+fips_amd64.deb==c405132eacaf059c7c903f853d48be7e
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/libssl-dev_1.1.1n-0+deb11u4+fips_amd64.deb==a1833ecb83cddb66ce30bf4b28e48856
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/libssl-doc_1.1.1n-0+deb11u4+fips_all.deb==52925c4fd9932ffe78798dd55bdb077e
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/libssl1.1_1.1.1n-0+deb11u4+fips_amd64.deb==65000162eac58235fbf1acab52047ca9
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/openssh-client_8.4p1-5+deb11u1+fips_amd64.deb==bee0e4f52cf8dedd6dac78be18b02400
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/openssh-server_8.4p1-5+deb11u1+fips_amd64.deb==8ac4a8397c8e62d554718f1c8c6f5896
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/openssh-sftp-server_8.4p1-5+deb11u1+fips_amd64.deb==94740a01d5d025df8d99d3e5b7a0b0e9
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/openssl_1.1.1n-0+deb11u4+fips_amd64.deb==2f3040c1dc6230c5dd09994eeaace905
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==27559fec65ac317419222fd19bcf5150
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/python3.9_3.9.2-1+fips_amd64.deb==30be224443931a2a3428aa270b87384a
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/amd64/symcrypt-openssl_0.7_amd64.deb==6d909de22cf4f44879b27a4fc2697cac
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==72ead09139135d4ecd91b76c89128567
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/golang-1.15-go_1.15.15-1~deb11u4+fips_arm64.deb==b59f315800ca2ec31de79136dfb8979d
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/golang-1.15-src_1.15.15-1~deb11u4+fips_arm64.deb==0038c68ed1e3adb1b43434af81cff678
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==847bc1fc5ce9c8ebae5176947ab34d30
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/libk5crypto3_1.18.3-6+deb11u1+fips_arm64.deb==0bb2a2d23f73e882d91b2e256aad08f6
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/libpython3.9-minimal_3.9.2-1+fips_arm64.deb==870a96b0d9d7fe753d495ad6574e4c03
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/libpython3.9-stdlib_3.9.2-1+fips_arm64.deb==eb8bb0d3806adbc987ec300e221a3baf
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/libpython3.9_3.9.2-1+fips_arm64.deb==edae5c269e2c401873e7cff3d4f93a7a
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/libssl-dev_1.1.1n-0+deb11u4+fips_arm64.deb==56aed9e3cef3692a36129598bd9871d6
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/libssl-doc_1.1.1n-0+deb11u4+fips_all.deb==52925c4fd9932ffe78798dd55bdb077e
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/libssl1.1_1.1.1n-0+deb11u4+fips_arm64.deb==5c760faf80f6f4efc71e255b2e0774fc
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/openssh-client_8.4p1-5+deb11u1+fips_arm64.deb==ce762b1730871a72bc423c97444342ad
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/openssh-server_8.4p1-5+deb11u1+fips_arm64.deb==c943526cf7317d4c0d05005db47b6992
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/openssh-sftp-server_8.4p1-5+deb11u1+fips_arm64.deb==4e360e97ed3f0eaead7a8ef79fa4f3d7
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/openssl_1.1.1n-0+deb11u4+fips_arm64.deb==68e32a58e12f960ce163decc0f756906
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/python3.9-minimal_3.9.2-1+fips_arm64.deb==add04c26a72788957951d8581b5c8e2a
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/python3.9_3.9.2-1+fips_arm64.deb==4d6307dabcd3060235d6188cfa0346b8
-https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.7/arm64/symcrypt-openssl_0.7_arm64.deb==f25f73823a0f22805b8e0be43bef190f
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==72ead09139135d4ecd91b76c89128567
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/golang-1.15-go_1.15.15-1~deb11u4+fips_amd64.deb==145e103357a915cc759cc93de602b631
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/golang-1.15-src_1.15.15-1~deb11u4+fips_amd64.deb==1c1a46d5599be92777702643c37d5751
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==847bc1fc5ce9c8ebae5176947ab34d30
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/libk5crypto3_1.18.3-6+deb11u1+fips_amd64.deb==5e8de29d5f6844f71f15cbf0c3993f1c
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/libpython3.9-minimal_3.9.2-1+fips_amd64.deb==71b75222c8bcd5ede55693a9223a3246
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/libpython3.9-stdlib_3.9.2-1+fips_amd64.deb==565cce5ca6e6a31a53b7a9e2faa4b7d9
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/libpython3.9_3.9.2-1+fips_amd64.deb==c405132eacaf059c7c903f853d48be7e
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/libssl-dev_1.1.1n-0+deb11u4+fips_amd64.deb==a1833ecb83cddb66ce30bf4b28e48856
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/libssl-doc_1.1.1n-0+deb11u4+fips_all.deb==52925c4fd9932ffe78798dd55bdb077e
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/libssl1.1_1.1.1n-0+deb11u4+fips_amd64.deb==65000162eac58235fbf1acab52047ca9
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/openssh-client_8.4p1-5+deb11u1+fips_amd64.deb==bee0e4f52cf8dedd6dac78be18b02400
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/openssh-server_8.4p1-5+deb11u1+fips_amd64.deb==8ac4a8397c8e62d554718f1c8c6f5896
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/openssh-sftp-server_8.4p1-5+deb11u1+fips_amd64.deb==94740a01d5d025df8d99d3e5b7a0b0e9
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/openssl_1.1.1n-0+deb11u4+fips_amd64.deb==2f3040c1dc6230c5dd09994eeaace905
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/python3.9-minimal_3.9.2-1+fips_amd64.deb==66511f65e2873cda108e6bb3911abbf5
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/python3.9_3.9.2-1+fips_amd64.deb==30be224443931a2a3428aa270b87384a
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/amd64/symcrypt-openssl_0.8_amd64.deb==0b838c07c4625a593cd914e414b656ea
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/golang-1.15-doc_1.15.15-1~deb11u4+fips_all.deb==72ead09139135d4ecd91b76c89128567
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/golang-1.15-go_1.15.15-1~deb11u4+fips_arm64.deb==b59f315800ca2ec31de79136dfb8979d
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/golang-1.15-src_1.15.15-1~deb11u4+fips_arm64.deb==0038c68ed1e3adb1b43434af81cff678
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/golang-1.15_1.15.15-1~deb11u4+fips_all.deb==847bc1fc5ce9c8ebae5176947ab34d30
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/libk5crypto3_1.18.3-6+deb11u1+fips_arm64.deb==0bb2a2d23f73e882d91b2e256aad08f6
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/libpython3.9-minimal_3.9.2-1+fips_arm64.deb==870a96b0d9d7fe753d495ad6574e4c03
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/libpython3.9-stdlib_3.9.2-1+fips_arm64.deb==df2b4d1672a297f855d0e85b382629cc
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/libpython3.9_3.9.2-1+fips_arm64.deb==edae5c269e2c401873e7cff3d4f93a7a
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/libssl-dev_1.1.1n-0+deb11u4+fips_arm64.deb==56aed9e3cef3692a36129598bd9871d6
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/libssl-doc_1.1.1n-0+deb11u4+fips_all.deb==52925c4fd9932ffe78798dd55bdb077e
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/libssl1.1_1.1.1n-0+deb11u4+fips_arm64.deb==5c760faf80f6f4efc71e255b2e0774fc
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/openssh-client_8.4p1-5+deb11u1+fips_arm64.deb==ce762b1730871a72bc423c97444342ad
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/openssh-server_8.4p1-5+deb11u1+fips_arm64.deb==c943526cf7317d4c0d05005db47b6992
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/openssh-sftp-server_8.4p1-5+deb11u1+fips_arm64.deb==4e360e97ed3f0eaead7a8ef79fa4f3d7
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/openssl_1.1.1n-0+deb11u4+fips_arm64.deb==68e32a58e12f960ce163decc0f756906
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/python3.9-minimal_3.9.2-1+fips_arm64.deb==71935b5d5780014e0048f0e9d84acdb9
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/python3.9_3.9.2-1+fips_arm64.deb==4d6307dabcd3060235d6188cfa0346b8
+https://sonicstorage.blob.core.windows.net/public/fips/bullseye/0.8/arm64/symcrypt-openssl_0.8_arm64.deb==0ab2a6b1c621508eb5b39da92fd69060
https://sonicstorage.blob.core.windows.net/public/sai/bcmpai/REL_3.8/3.8/libsaibroncos_3.8_amd64.deb==f7c3f0ed8c97c2572e3c2e59faaae4a8
https://sonicstorage.blob.core.windows.net/public/sai/bcmsai/REL_7.0_SAI_1.11/7.1.111.1/libsaibcm_dnx_7.1.111.1_amd64.deb==458f404279c3f30ec71de6bad7373323
https://sonicstorage.blob.core.windows.net/public/sai/sai-broadcom/SAI_8.4.0_GA/8.4.0.2/xgs/libsaibcm-dev_8.4.0.2_amd64.deb==50bc5321ebdf6c3f065ba53509a742e4
diff --git a/files/build/versions/dockers/docker-base-buster/versions-deb-buster b/files/build/versions/dockers/docker-base-buster/versions-deb-buster
index f7aaa91c60a0..73cdf27b1c74 100644
--- a/files/build/versions/dockers/docker-base-buster/versions-deb-buster
+++ b/files/build/versions/dockers/docker-base-buster/versions-deb-buster
@@ -8,7 +8,7 @@ libdaemon0==0.14-7
libdbus-1-3==1.12.24-0+deb10u1
libestr0==0.1.10-2.1
libexpat1==2.2.6-2+deb10u6
-libfastjson4==0.99.8-2
+libfastjson4==0.99.8-2+deb10u1
libgdbm-compat4==1.18.1-4
libgdbm6==1.18.1-4
libgssapi-krb5-2==1.17-3+deb10u5
@@ -64,6 +64,6 @@ readline-common==7.0-5
redis-tools==5:6.0.6-1~bpo10+1
rsyslog==8.1901.0-1+deb10u2
socat==1.7.4.1-3
-vim-common==2:8.1.0875-5+deb10u4
-vim-tiny==2:8.1.0875-5+deb10u4
-xxd==2:8.1.0875-5+deb10u4
+vim-common==2:8.1.0875-5+deb10u5
+vim-tiny==2:8.1.0875-5+deb10u5
+xxd==2:8.1.0875-5+deb10u5
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 39e3e32b2dd2..d686852ba6d6 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
@@ -1,7 +1,7 @@
apt-utils==2.2.4
dpkg-dev==1.20.12
libboost-serialization1.74.0==1.74.0-9
-libhiredis0.14==0.14.0-3~bpo9+1
+libhiredis0.14==0.14.1-1
libjs-jquery==3.5.1+dfsg+~3.5.5-7
libnl-3-200==3.5.0-1
libnl-cli-3-200==3.5.0-1
diff --git a/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster
index 47ee62bb348e..67de9912f7b7 100644
--- a/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster
+++ b/files/build/versions/dockers/docker-config-engine-buster/versions-deb-buster
@@ -3,7 +3,7 @@ bzip2==1.0.6-9.2~deb10u2
dpkg-dev==1.19.8
libapt-inst2.0==1.8.2.3
libboost-serialization1.71.0==1.71.0-6~bpo10+1
-libhiredis0.14==0.14.0-3~bpo9+1
+libhiredis0.14==0.14.1-1
libnl-3-200==3.5.0-1
libnl-cli-3-200==3.5.0-1
libnl-genl-3-200==3.5.0-1
diff --git a/files/build/versions/dockers/docker-config-engine-buster/versions-py3 b/files/build/versions/dockers/docker-config-engine-buster/versions-py3
index 34bf99a18dc4..70d81e6f2d3f 100644
--- a/files/build/versions/dockers/docker-config-engine-buster/versions-py3
+++ b/files/build/versions/dockers/docker-config-engine-buster/versions-py3
@@ -1,7 +1,7 @@
async-timeout==4.0.2
bitarray==1.5.3
ijson==2.6.1
-importlib-metadata==6.6.0
+importlib-metadata==6.7.0
ipaddress==1.0.23
jsondiff==2.0.0
lxml==4.9.1
diff --git a/files/build/versions/dockers/docker-database/versions-deb-bullseye b/files/build/versions/dockers/docker-database/versions-deb-bullseye
index 8493b0e6aa5a..76ad9de84898 100644
--- a/files/build/versions/dockers/docker-database/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-database/versions-deb-bullseye
@@ -10,7 +10,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
diff --git a/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye b/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye
index dc43b1434163..76db9967cbe8 100644
--- a/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-dhcp-relay/versions-deb-bullseye
@@ -15,7 +15,7 @@ libexplain51==1.4.D001-11+deb11u1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libirs-export161==1:9.11.19+dfsg-2.1
diff --git a/files/build/versions/dockers/docker-eventd/versions-deb-bullseye b/files/build/versions/dockers/docker-eventd/versions-deb-bullseye
index 36188a31e892..20265004b97a 100644
--- a/files/build/versions/dockers/docker-eventd/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-eventd/versions-deb-bullseye
@@ -10,7 +10,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
diff --git a/files/build/versions/dockers/docker-fpm-frr/versions-deb-bullseye b/files/build/versions/dockers/docker-fpm-frr/versions-deb-bullseye
index 06b58d24b24c..8e9306966088 100644
--- a/files/build/versions/dockers/docker-fpm-frr/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-fpm-frr/versions-deb-bullseye
@@ -16,7 +16,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libjson-c5==0.15-2
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 c3d7b718ba51..d3cbca6be966 100644
--- a/files/build/versions/dockers/docker-gbsyncd-broncos/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-gbsyncd-broncos/versions-deb-bullseye
@@ -13,7 +13,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
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 45618871230d..67ade6f8b5a3 100644
--- a/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-gbsyncd-credo/versions-deb-bullseye
@@ -10,7 +10,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
diff --git a/files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-bullseye b/files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-bullseye
index c8f39651ff40..8f1853a7df3f 100644
--- a/files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-gbsyncd-vs/versions-deb-bullseye
@@ -10,7 +10,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
diff --git a/files/build/versions/dockers/docker-lldp/versions-deb-bullseye b/files/build/versions/dockers/docker-lldp/versions-deb-bullseye
index 6f1dbf3e3a74..36e584830d4f 100644
--- a/files/build/versions/dockers/docker-lldp/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-lldp/versions-deb-bullseye
@@ -11,7 +11,7 @@ libevent-2.1-7==2.1.12-stable-1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
diff --git a/files/build/versions/dockers/docker-macsec/versions-deb-bullseye b/files/build/versions/dockers/docker-macsec/versions-deb-bullseye
index cce9e68611e7..33d136604062 100644
--- a/files/build/versions/dockers/docker-macsec/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-macsec/versions-deb-bullseye
@@ -10,7 +10,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
diff --git a/files/build/versions/dockers/docker-mux/versions-deb-bullseye b/files/build/versions/dockers/docker-mux/versions-deb-bullseye
index bb0de019fcfd..74f70ebc0f01 100644
--- a/files/build/versions/dockers/docker-mux/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-mux/versions-deb-bullseye
@@ -14,7 +14,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
diff --git a/files/build/versions/dockers/docker-nat/versions-deb-bullseye b/files/build/versions/dockers/docker-nat/versions-deb-bullseye
index bdce4fce5990..79665247db1d 100644
--- a/files/build/versions/dockers/docker-nat/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-nat/versions-deb-bullseye
@@ -13,7 +13,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libip4tc2==1.8.7-1
libip6tc2==1.8.7-1
diff --git a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye
index 3747c20b0f65..552e796dc122 100644
--- a/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-orchagent/versions-deb-bullseye
@@ -14,7 +14,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libkmod2==28-1
diff --git a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye
index 8e9e9c1b400b..ea571f6d9037 100644
--- a/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-platform-monitor/versions-deb-bullseye
@@ -31,7 +31,7 @@ libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
libgraphite2-3==1.3.14-1
libharfbuzz0b==2.7.4-1
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libi2c0==4.2-1+b1
libicu67==67.1-7
libipt2==2.0.3-1
@@ -54,8 +54,8 @@ libswsscommon-dbgsym==1.0.0
libthai-data==0.1.28-3
libthai0==0.1.28-3
libunwind8==1.3.2-2
-libx11-6==2:1.7.2-1
-libx11-data==2:1.7.2-1
+libx11-6==2:1.7.2-1+deb11u1
+libx11-data==2:1.7.2-1+deb11u1
libxau6==1:1.0.9-1
libxcb-render0==1.14-3
libxcb-shm0==1.14-3
diff --git a/files/build/versions/dockers/docker-ptf-sai/versions-py3 b/files/build/versions/dockers/docker-ptf-sai/versions-py3
index 3ac7ddd9c461..4454071cb0f1 100644
--- a/files/build/versions/dockers/docker-ptf-sai/versions-py3
+++ b/files/build/versions/dockers/docker-ptf-sai/versions-py3
@@ -3,7 +3,7 @@ getmac==0.9.4
netifaces==0.11.0
packet-helper==0.0.1
psutil==5.9.5
-ptf==0.9.3
+ptf==0.0.0
pyperclip==1.8.2
pysubnettree==0.35
scapy-helper==0.14.8
diff --git a/files/build/versions/dockers/docker-ptf/versions-deb-buster b/files/build/versions/dockers/docker-ptf/versions-deb-buster
index ec72d61333c5..149586560650 100644
--- a/files/build/versions/dockers/docker-ptf/versions-deb-buster
+++ b/files/build/versions/dockers/docker-ptf/versions-deb-buster
@@ -88,9 +88,9 @@ libatk1.0-data==2.30.0-2
libatomic1==8.3.0-6
libatspi2.0-0==2.30.0-7
libauthen-sasl-perl==2.1600-1
-libavahi-client3==0.7-4+deb10u2
-libavahi-common-data==0.7-4+deb10u2
-libavahi-common3==0.7-4+deb10u2
+libavahi-client3==0.7-4+deb10u3
+libavahi-common-data==0.7-4+deb10u3
+libavahi-common3==0.7-4+deb10u3
libbabeltrace1==1.5.6-2+deb10u1
libbinutils==2.31.1-16
libblas3==3.8.0-2
@@ -144,7 +144,7 @@ libevent-pthreads-2.1-6==2.1.8-stable-4
libexpat1==2.2.6-2+deb10u6
libexpat1-dev==2.2.6-2+deb10u6
libfakeroot==1.23-1
-libfastjson4==0.99.8-2
+libfastjson4==0.99.8-2+deb10u1
libffi-dev==3.2.1-9
libfile-basedir-perl==0.08-1
libfile-desktopentry-perl==0.22-1
@@ -448,7 +448,7 @@ libxml-xpathengine-perl==0.14-1
libxml2==2.9.4+dfsg1-7+deb10u6
libxmu6==2:1.1.2-2+b3
libxmuu1==2:1.1.2-2+b3
-libxpm4==1:3.5.12-1
+libxpm4==1:3.5.12-1+deb10u1
libxrandr2==2:1.5.1-1
libxrender1==1:0.9.10-1
libxshmfence1==1.3-1
@@ -580,9 +580,9 @@ ttf-bitstream-vera==1.10-8
tzdata==2021a-0+deb10u11
ucf==3.0038+nmu1
unzip==6.0-23+deb10u3
-vim==2:8.1.0875-5+deb10u4
-vim-common==2:8.1.0875-5+deb10u4
-vim-runtime==2:8.1.0875-5+deb10u4
+vim==2:8.1.0875-5+deb10u5
+vim-common==2:8.1.0875-5+deb10u5
+vim-runtime==2:8.1.0875-5+deb10u5
wget==1.20.1-1.1
wireshark==2.6.20-0+deb10u7
wireshark-common==2.6.20-0+deb10u7
@@ -596,5 +596,5 @@ xdg-utils==1.1.3-1+deb10u1
xfonts-encodings==1:1.0.4-2
xfonts-utils==1:7.7+6
xkb-data==2.26-2
-xxd==2:8.1.0875-5+deb10u4
+xxd==2:8.1.0875-5+deb10u5
xz-utils==5.2.4-1+deb10u1
diff --git a/files/build/versions/dockers/docker-ptf/versions-py2 b/files/build/versions/dockers/docker-ptf/versions-py2
index 6eef6d0d23ba..ab45c6a42cce 100644
--- a/files/build/versions/dockers/docker-ptf/versions-py2
+++ b/files/build/versions/dockers/docker-ptf/versions-py2
@@ -1,4 +1,4 @@
-backports.functools-lru-cache==1.6.4
+backports.functools-lru-cache==1.6.5
backports.shutil-get-terminal-size==1.0.0
bcrypt==3.1.7
cffi==1.15.1
diff --git a/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye b/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye
index a516e0f0fec0..defd23f2a500 100644
--- a/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-router-advertiser/versions-deb-bullseye
@@ -10,7 +10,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
diff --git a/files/build/versions/dockers/docker-sflow/versions-deb-bullseye b/files/build/versions/dockers/docker-sflow/versions-deb-bullseye
index aa9aa0ce60e7..53e145fe6a77 100644
--- a/files/build/versions/dockers/docker-sflow/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-sflow/versions-deb-bullseye
@@ -12,7 +12,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
diff --git a/files/build/versions/dockers/docker-snmp/versions-deb-bullseye b/files/build/versions/dockers/docker-snmp/versions-deb-bullseye
index 93d1a8f0011e..00564bd6ba83 100644
--- a/files/build/versions/dockers/docker-snmp/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-snmp/versions-deb-bullseye
@@ -14,7 +14,7 @@ libfido2-1==1.6.0-2
libfreeipmi17==1.6.6-4+deb11u1
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
diff --git a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-buster b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-buster
index 7d4c38cbba18..e24e68194311 100644
--- a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-buster
+++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-deb-buster
@@ -9,7 +9,7 @@ libdw1==0.176-1.1
libedit2==3.1-20181209-1
libglib2.0-0==2.58.3-2+deb10u4
libgpm2==1.20.7-5
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu63==63.1-6+deb10u3
libipt2==2.0-2
libpopt0==1.16-12
@@ -22,5 +22,5 @@ sonic-mgmt-framework==1.0-01
sonic-mgmt-framework-dbg==1.0-01
sshpass==1.06-1
strace==4.26-0.2
-vim==2:8.1.0875-5+deb10u4
-vim-runtime==2:8.1.0875-5+deb10u4
+vim==2:8.1.0875-5+deb10u5
+vim-runtime==2:8.1.0875-5+deb10u5
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 416b6173c410..272991b8d277 100644
--- a/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3
+++ b/files/build/versions/dockers/docker-sonic-mgmt-framework/versions-py3
@@ -5,7 +5,7 @@ click==8.1.3
clickclick==20.10.2
connexion==2.7.0
flask==2.2.5
-grpcio==1.54.2
+grpcio==1.56.0
grpcio-tools==1.20.0
idna==3.4
importlib-resources==5.12.0
@@ -18,7 +18,7 @@ openapi-schema-validator==0.4.4
openapi-spec-validator==0.5.7
pathable==0.4.3
pkgutil_resolve_name==1.3.10
-protobuf==4.23.2
+protobuf==4.23.3
pyrsistent==0.19.3
python-dateutil==2.6.0
requests==2.31.0
diff --git a/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye b/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye
index 363275ebac84..8390c1ad927b 100644
--- a/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-sonic-telemetry/versions-deb-bullseye
@@ -18,7 +18,7 @@ libgcc-10-dev==10.2.1-6
libglib2.0-0==2.66.8-1
libgomp1==10.2.1-6
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libitm1==10.2.1-6
diff --git a/files/build/versions/dockers/docker-sonic-vs/versions-py3 b/files/build/versions/dockers/docker-sonic-vs/versions-py3
index cd2773ac5c01..eea043b5daac 100644
--- a/files/build/versions/dockers/docker-sonic-vs/versions-py3
+++ b/files/build/versions/dockers/docker-sonic-vs/versions-py3
@@ -12,11 +12,11 @@ dbus-python==1.3.2
docker==6.1.3
docker-image-py==0.1.12
enlighten==1.11.2
-filelock==3.12.1
+filelock==3.12.2
idna==3.4
importlib-metadata==6.1.0
-jsonpatch==1.32
-jsonpointer==2.3
+jsonpatch==1.33
+jsonpointer==2.4
lazy-object-proxy==1.9.0
m2crypto==0.38.0
netifaces==0.10.9
@@ -26,7 +26,7 @@ pexpect==4.8.0
prefixed==0.7.0
prettyprinter==0.18.0
ptyprocess==0.7.0
-pycairo==1.23.0
+pycairo==1.24.0
pycparser==2.21
pygments==2.15.1
pygobject==3.44.1
@@ -41,6 +41,6 @@ toposort==1.6
typing_extensions==4.5.0
urllib3==1.26.16
wcwidth==0.2.6
-websocket-client==1.5.3
+websocket-client==1.6.1
www-authenticate==0.9.2
zipp==3.15.0
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 cab91b0efaa5..938b3739f297 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
@@ -12,7 +12,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libkmod2==28-1
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 3059a6370577..6bdbf3b6b2f8 100644
--- a/files/build/versions/dockers/docker-syncd-brcm/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-syncd-brcm/versions-deb-bullseye
@@ -12,7 +12,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libkmod2==28-1
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 149de54ea5a1..542e98ea6633 100644
--- a/files/build/versions/dockers/docker-syncd-centec/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-syncd-centec/versions-deb-bullseye
@@ -11,7 +11,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libkmod2==28-1
diff --git a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye
index 6e6e17770e5c..92530838ec0e 100644
--- a/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-syncd-mlnx/versions-deb-bullseye
@@ -20,7 +20,7 @@ libexpat1-dev==2.2.10-2+deb11u5
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libjs-sphinxdoc==3.4.3-2
diff --git a/files/build/versions/dockers/docker-syncd-vs/versions-deb-bullseye b/files/build/versions/dockers/docker-syncd-vs/versions-deb-bullseye
index ce44d532911e..5491e98c301b 100644
--- a/files/build/versions/dockers/docker-syncd-vs/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-syncd-vs/versions-deb-bullseye
@@ -11,7 +11,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
diff --git a/files/build/versions/dockers/docker-teamd/versions-deb-bullseye b/files/build/versions/dockers/docker-teamd/versions-deb-bullseye
index 5de49809ff56..d7ad2c7caf6a 100644
--- a/files/build/versions/dockers/docker-teamd/versions-deb-bullseye
+++ b/files/build/versions/dockers/docker-teamd/versions-deb-bullseye
@@ -10,7 +10,7 @@ libedit2==3.1-20191231-2+b1
libfido2-1==1.6.0-2
libglib2.0-0==2.66.8-1
libgpm2==1.20.7-8
-libhiredis0.14-dbgsym==0.14.0-3~bpo9+1
+libhiredis0.14-dbgsym==0.14.1-1
libicu67==67.1-7
libipt2==2.0.3-1
libmpfr6==4.1.0-3
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 1222f554f884..16db332eb677 100644
--- a/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye
+++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-deb-bullseye
@@ -1106,7 +1106,6 @@ libsrt1.4-gnutls==1.4.2-1.3
libssh-gcrypt-4==0.9.7-0+deb11u1
libssh2-1==1.9.0-2
libssl-dev==1.1.1n-0+deb11u5
-libssl1.1==1.1.1n-0+deb11u5
libstdc++-10-dev==10.2.1-6
libstemmer0d==2.1.0-1
libstrictures-perl==2.000006-1
@@ -1237,11 +1236,11 @@ libwrap0==7.6.q-31
libwrap0-dev==7.6.q-31
libwww-perl==6.52-1
libwww-robotrules-perl==6.02-1
-libx11-6==2:1.7.2-1
-libx11-data==2:1.7.2-1
-libx11-dev==2:1.7.2-1
+libx11-6==2:1.7.2-1+deb11u1
+libx11-data==2:1.7.2-1+deb11u1
+libx11-dev==2:1.7.2-1+deb11u1
libx11-protocol-perl==0.56-7.1
-libx11-xcb1==2:1.7.2-1
+libx11-xcb1==2:1.7.2-1+deb11u1
libx264-160==2:0.160.3011+gitcde9a93-2.1
libx265-192==3.4-2
libx32asan6==10.2.1-6
@@ -1459,13 +1458,13 @@ php-timer==5.0.3-2
php-tokenizer==1.2.0-1
php-webmozart-assert==1.9.1-2
php-xml==2:7.4+76
-php7.4-cli==7.4.33-1+deb11u3
-php7.4-common==7.4.33-1+deb11u3
-php7.4-json==7.4.33-1+deb11u3
-php7.4-mbstring==7.4.33-1+deb11u3
-php7.4-opcache==7.4.33-1+deb11u3
-php7.4-readline==7.4.33-1+deb11u3
-php7.4-xml==7.4.33-1+deb11u3
+php7.4-cli==7.4.33-1+deb11u4
+php7.4-common==7.4.33-1+deb11u4
+php7.4-json==7.4.33-1+deb11u4
+php7.4-mbstring==7.4.33-1+deb11u4
+php7.4-opcache==7.4.33-1+deb11u4
+php7.4-readline==7.4.33-1+deb11u4
+php7.4-xml==7.4.33-1+deb11u4
phpunit==9.5.2-1
phpunit-cli-parser==1.0.1-1
phpunit-code-unit==1.0.8-1
diff --git a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3 b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3
index 71fdfeaa458a..aab91a4138ef 100644
--- a/files/build/versions/dockers/sonic-slave-bullseye/versions-py3
+++ b/files/build/versions/dockers/sonic-slave-bullseye/versions-py3
@@ -6,7 +6,7 @@ automat==20.2.0
babel==2.8.0
bcrypt==3.1.7
beautifulsoup4==4.9.3
-bitarray==2.7.5
+bitarray==2.7.6
certifi==2020.6.20
chardet==4.0.0
click==7.1.2
@@ -84,7 +84,7 @@ python-magic==0.4.20
pytz==2021.1
pyxdg==0.27
pyyaml==5.4.1
-redis==4.5.5
+redis==4.6.0
regex==2023.6.3
requests==2.25.1
roman==2.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 253478a6bec3..0ef357e93936 100644
--- a/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster
+++ b/files/build/versions/dockers/sonic-slave-buster/versions-deb-buster
@@ -270,15 +270,15 @@ libaugeas0==1.11.0-3
libauparse-dev==1:2.8.4-3
libauparse0==1:2.8.4-3
libauthen-sasl-perl==2.1600-1
-libavahi-client3==0.7-4+deb10u2
-libavahi-common-data==0.7-4+deb10u2
-libavahi-common3==0.7-4+deb10u2
+libavahi-client3==0.7-4+deb10u3
+libavahi-common-data==0.7-4+deb10u3
+libavahi-common3==0.7-4+deb10u3
libavalon-framework-java==4.2.0-10
libavc1394-0==0.5.4-5
-libavcodec58==7:4.1.10-0+deb10u1
-libavfilter7==7:4.1.10-0+deb10u1
-libavformat58==7:4.1.10-0+deb10u1
-libavutil56==7:4.1.10-0+deb10u1
+libavcodec58==7:4.1.11-0+deb10u1
+libavfilter7==7:4.1.11-0+deb10u1
+libavformat58==7:4.1.11-0+deb10u1
+libavutil56==7:4.1.11-0+deb10u1
libb-hooks-endofscope-perl==0.24-1
libb-hooks-op-check-perl==0.22-1+b1
libbabeltrace-dev==1.5.6-2+deb10u1
@@ -500,7 +500,7 @@ libexplain51==1.4.D001-8
libexporter-tiny-perl==1.002001-1
libfabric1==1.6.2-3
libfakeroot==1.23-1
-libfastjson4==0.99.8-2
+libfastjson4==0.99.8-2+deb10u1
libfcgi-perl==0.78-2+b3
libfdt1==1.4.7-4
libffi-dev==3.2.1-9
@@ -947,7 +947,7 @@ libpolkit-agent-1-0==0.105-25+deb10u1
libpolkit-backend-1-0==0.105-25+deb10u1
libpolkit-gobject-1-0==0.105-25+deb10u1
libpopt0==1.16-12
-libpostproc55==7:4.1.10-0+deb10u1
+libpostproc55==7:4.1.11-0+deb10u1
libpotrace0==1.15-1
libprocps7==2:3.3.15-2
libprotobuf-c1==1.3.1-1+b1
@@ -1110,8 +1110,8 @@ libsubunit-dev==1.3.0-1
libsubunit0==1.3.0-1
libsurefire-java==2.22.1-1
libswitch-perl==2.17-2
-libswresample3==7:4.1.10-0+deb10u1
-libswscale5==7:4.1.10-0+deb10u1
+libswresample3==7:4.1.11-0+deb10u1
+libswscale5==7:4.1.11-0+deb10u1
libsynctex2==2018.20181218.49446-1+deb10u2
libsys-hostname-long-perl==1.5-1
libsystemd-dev==241-7~deb10u9
@@ -1319,7 +1319,7 @@ libxmlgraphics-commons-java==2.3-1+deb10u1
libxmlrpc-lite-perl==0.717-2
libxmu6==2:1.1.2-2+b3
libxmuu1==2:1.1.2-2+b3
-libxpm4==1:3.5.12-1
+libxpm4==1:3.5.12-1+deb10u1
libxrandr-dev==2:1.5.1-1
libxrandr2==2:1.5.1-1
libxrender-dev==1:0.9.10-1
@@ -1439,13 +1439,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~deb10u3
-php7.3-common==7.3.31-1~deb10u3
-php7.3-json==7.3.31-1~deb10u3
-php7.3-mbstring==7.3.31-1~deb10u3
-php7.3-opcache==7.3.31-1~deb10u3
-php7.3-readline==7.3.31-1~deb10u3
-php7.3-xml==7.3.31-1~deb10u3
+php7.3-cli==7.3.31-1~deb10u4
+php7.3-common==7.3.31-1~deb10u4
+php7.3-json==7.3.31-1~deb10u4
+php7.3-mbstring==7.3.31-1~deb10u4
+php7.3-opcache==7.3.31-1~deb10u4
+php7.3-readline==7.3.31-1~deb10u4
+php7.3-xml==7.3.31-1~deb10u4
phpunit==7.5.6-1
phpunit-code-unit-reverse-lookup==1.0.1-1
phpunit-comparator==3.0.2-1
@@ -1547,7 +1547,7 @@ python-pygments==2.3.1+dfsg-1+deb10u2
python-pyparsing==2.2.0+dfsg1-2
python-pytest==3.10.1-2
python-pytest-cov==2.6.0-1
-python-requests==2.21.0-1
+python-requests==2.21.0-1+deb10u1
python-roman==2.0.0-3
python-scandir==1.9.0-2
python-secretstorage==2.3.1-2
@@ -1630,7 +1630,7 @@ python3-pygments==2.3.1+dfsg-1+deb10u2
python3-pyparsing==2.2.0+dfsg1-2
python3-pytest==3.10.1-2
python3-pytest-cov==2.6.0-1
-python3-requests==2.21.0-1
+python3-requests==2.21.0-1+deb10u1
python3-roman==2.0.0-3
python3-secretstorage==2.3.1-2
python3-setuptools==40.8.0-1
@@ -1739,9 +1739,9 @@ uuid-dev==2.33.1-0.1
va-driver-all==2.4.0-1
vdpau-driver-all==1.1.1-10
velocity==1.7-5+deb10u1
-vim==2:8.1.0875-5+deb10u4
-vim-common==2:8.1.0875-5+deb10u4
-vim-runtime==2:8.1.0875-5+deb10u4
+vim==2:8.1.0875-5+deb10u5
+vim-common==2:8.1.0875-5+deb10u5
+vim-runtime==2:8.1.0875-5+deb10u5
wayland-protocols==1.17-1
wdiff==1.2.2-2+b1
wget==1.20.1-1.1
@@ -1773,7 +1773,7 @@ xorg-sgml-doctools==1:1.11-1
xsltproc==1.1.32-2.2~deb10u2
xterm==344-1+deb10u2
xtrans-dev==1.3.5-1
-xxd==2:8.1.0875-5+deb10u4
+xxd==2:8.1.0875-5+deb10u5
xz-utils==5.2.4-1+deb10u1
zip==3.0-11+b1
zlib1g-dev==1:1.2.11.dfsg-1+deb10u2
diff --git a/files/build/versions/dockers/sonic-slave-buster/versions-py3 b/files/build/versions/dockers/sonic-slave-buster/versions-py3
index 4ad4461e66c8..db0d9fcfdbfa 100644
--- a/files/build/versions/dockers/sonic-slave-buster/versions-py3
+++ b/files/build/versions/dockers/sonic-slave-buster/versions-py3
@@ -4,7 +4,7 @@ async-timeout==4.0.2
atomicwrites==1.1.5
attrs==18.2.0
babel==2.6.0
-bitarray==2.7.5
+bitarray==2.7.6
certifi==2018.8.24
chardet==3.0.4
cov-core==1.15.0
@@ -20,7 +20,7 @@ gcovr==4.1
gpg==1.12.0
idna==2.6
imagesize==1.0.0
-importlib-metadata==6.6.0
+importlib-metadata==6.7.0
jinja2==3.0.3
keyring==17.1.1
keyrings.alt==3.1.1
@@ -64,7 +64,7 @@ python-magic==0.4.16
pytz==2019.1
pyxdg==0.25
pyyaml==5.4.1
-redis==4.5.5
+redis==4.6.0
regex==2023.6.3
requests==2.21.0
roman==2.0.0
diff --git a/files/build/versions/host-image/versions-deb-bullseye b/files/build/versions/host-image/versions-deb-bullseye
index 42d400d5b19e..84673f52d380 100644
--- a/files/build/versions/host-image/versions-deb-bullseye
+++ b/files/build/versions/host-image/versions-deb-bullseye
@@ -146,7 +146,7 @@ libgpm2==1.20.7-8
libgrpc++1==1.30.2-3
libgrpc10==1.30.2-3
libhavege2==1.9.14-1
-libhiredis0.14==0.14.0-3~bpo9+1
+libhiredis0.14==0.14.1-1
libi2c0==4.2-1+b1
libiniparser1==4.1-4
libip4tc2==1.8.7-1
@@ -297,6 +297,7 @@ python3.9==3.9.2-1
python3.9-minimal==3.9.2-1
rasdaemon==0.6.6-2
readline-common==8.1-1
+resolvconf==1.87
rsyslog==8.2302.0-1~bpo11+1
runit-helper==2.10.3
sbsigntool==0.9.2-2
diff --git a/files/build/versions/host-image/versions-py3 b/files/build/versions/host-image/versions-py3
index cd669752ee12..216ceea00ae1 100644
--- a/files/build/versions/host-image/versions-py3
+++ b/files/build/versions/host-image/versions-py3
@@ -15,7 +15,7 @@ dbus-python==1.2.16
docker==6.1.1
docker-image-py==0.1.12
enlighten==1.11.2
-filelock==3.12.1
+filelock==3.12.2
grpcio==1.39.0
grpcio-tools==1.39.0
idna==3.4
@@ -25,8 +25,8 @@ ipaddress==1.0.23
j2cli==0.3.10
jinja2==3.1.2
jsondiff==2.0.0
-jsonpatch==1.32
-jsonpointer==2.3
+jsonpatch==1.33
+jsonpointer==2.4
jsonschema==2.6.0
lazy-object-proxy==1.9.0
lxml==4.9.1
@@ -48,7 +48,7 @@ psutil==5.9.5
ptyprocess==0.7.0
pyang==2.5.3
pyangbind==0.8.1
-pycairo==1.23.0
+pycairo==1.24.0
pycparser==2.21
pycurl==7.43.0.6
pygments==2.15.1
@@ -72,7 +72,7 @@ toposort==1.6
urllib3==1.26.16
watchdog==0.10.3
wcwidth==0.2.6
-websocket-client==1.5.3
+websocket-client==1.6.1
wheel==0.35.1
www-authenticate==0.9.2
xmltodict==0.12.0
diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2
index 81b147655887..049f1c04ca41 100644
--- a/files/build_templates/sonic_debian_extension.j2
+++ b/files/build_templates/sonic_debian_extension.j2
@@ -430,6 +430,15 @@ j2 files/dhcp/dhclient.conf.j2 | sudo tee $FILESYSTEM_ROOT/etc/dhcp/dhclient.con
sudo cp files/dhcp/ifupdown2_policy.json $FILESYSTEM_ROOT/etc/network/ifupdown2/policy.d
sudo cp files/dhcp/90-dhcp6-systcl.conf.j2 $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/
+# Copy DNS configuration files and templates
+sudo cp $IMAGE_CONFIGS/resolv-config/resolv-config.service $FILESYSTEM_ROOT_USR_LIB_SYSTEMD_SYSTEM
+sudo cp $IMAGE_CONFIGS/resolv-config/resolv-config.sh $FILESYSTEM_ROOT/usr/bin/
+sudo cp $IMAGE_CONFIGS/resolv-config/resolv.conf.j2 $FILESYSTEM_ROOT_USR_SHARE_SONIC_TEMPLATES/
+echo "resolv-config.service" | sudo tee -a $GENERATED_SERVICE_FILE
+sudo LANG=C chroot $FILESYSTEM_ROOT systemctl disable resolvconf.service
+sudo mkdir -p $FILESYSTEM_ROOT/etc/resolvconf/update-libc.d/
+sudo cp $IMAGE_CONFIGS/resolv-config/update-containers $FILESYSTEM_ROOT/etc/resolvconf/update-libc.d/
+
# Copy initial interfaces configuration file, will be overwritten on first boot
sudo cp $IMAGE_CONFIGS/interfaces/init_interfaces $FILESYSTEM_ROOT/etc/network/interfaces
sudo mkdir -p $FILESYSTEM_ROOT/etc/network/interfaces.d
diff --git a/files/image_config/interfaces/interfaces-config.sh b/files/image_config/interfaces/interfaces-config.sh
index f6aa4147a4e4..cb2faea91f31 100755
--- a/files/image_config/interfaces/interfaces-config.sh
+++ b/files/image_config/interfaces/interfaces-config.sh
@@ -60,6 +60,8 @@ for intf_pid in $(ls -1 /var/run/dhclient*.Ethernet*.pid 2> /dev/null); do
[[ -f ${intf_pid} ]] && kill `cat ${intf_pid}` && rm -f ${intf_pid}
done
+/usr/bin/resolv-config.sh cleanup
+
# Read sysctl conf files again
sysctl -p /etc/sysctl.d/90-dhcp6-systcl.conf
diff --git a/files/image_config/resolv-config/resolv-config.service b/files/image_config/resolv-config/resolv-config.service
new file mode 100644
index 000000000000..18a261dcf5d0
--- /dev/null
+++ b/files/image_config/resolv-config/resolv-config.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Update DNS configuration
+Requires=updategraph.service
+After=updategraph.service
+BindsTo=sonic.target
+After=sonic.target
+StartLimitIntervalSec=0
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/bin/resolv-config.sh start
+
+[Install]
+WantedBy=sonic.target
diff --git a/files/image_config/resolv-config/resolv-config.sh b/files/image_config/resolv-config/resolv-config.sh
new file mode 100755
index 000000000000..cffda6acb54b
--- /dev/null
+++ b/files/image_config/resolv-config/resolv-config.sh
@@ -0,0 +1,61 @@
+#!/bin/bash
+
+WD=/var/run/resolvconf/
+CONFIG_DIR=${WD}/interface/
+STATIC_CONFIG_FILE=mgmt.static
+DYNAMIC_CONFIG_FILE_TEMPLATE=*.dhclient
+
+update_symlink()
+{
+ ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf
+}
+
+start()
+{
+ update_symlink
+
+ redis-dump -d 4 -k "DNS_NAMESERVER*" -y > /tmp/dns.json
+ if [[ $? -eq 0 && "$(cat /tmp/dns.json)" != "{}" ]]; then
+ # Apply static DNS configuration and disable updates
+ /sbin/resolvconf --disable-updates
+ pushd ${CONFIG_DIR}
+ # Backup dynamic configuration to restore it when the static configuration is removed
+ mv ${DYNAMIC_CONFIG_FILE_TEMPLATE} ${WD} || true
+
+ sonic-cfggen -d -t /usr/share/sonic/templates/resolv.conf.j2,${STATIC_CONFIG_FILE}
+
+ /sbin/resolvconf --enable-updates
+ /sbin/resolvconf -u
+ /sbin/resolvconf --disable-updates
+ popd
+ else
+ # Dynamic DNS configuration. Enable updates. It is expected to receive configuraution for DHCP server
+ /sbin/resolvconf --disable-updates
+ pushd ${CONFIG_DIR}
+ rm -f ${STATIC_CONFIG_FILE}
+ # Restore dynamic configuration if it exists
+ mv ${WD}/${DYNAMIC_CONFIG_FILE_TEMPLATE} ${CONFIG_DIR} || true
+
+ /sbin/resolvconf --enable-updates
+ /sbin/resolvconf -u
+ fi
+}
+
+clean-dynamic-conf()
+{
+ rm -f ${WD}/${DYNAMIC_CONFIG_FILE_TEMPLATE}
+ rm -f ${WD}/postponed-update
+}
+
+case $1 in
+ start)
+ start
+ ;;
+ cleanup)
+ clean-dynamic-conf
+ ;;
+ *)
+ echo "Usage: $0 {start|clean-dynamic-conf}"
+ exit 2
+ ;;
+esac
diff --git a/files/image_config/resolv-config/resolv.conf b/files/image_config/resolv-config/resolv.conf
deleted file mode 100644
index 6d6da27c7304..000000000000
--- a/files/image_config/resolv-config/resolv.conf
+++ /dev/null
@@ -1 +0,0 @@
-nameserver 10.64.5.5
diff --git a/files/image_config/resolv-config/resolv.conf.head b/files/image_config/resolv-config/resolv.conf.head
new file mode 100644
index 000000000000..db81bded75e9
--- /dev/null
+++ b/files/image_config/resolv-config/resolv.conf.head
@@ -0,0 +1,2 @@
+# Dynamic resolv.conf(5) file generated by resolvconf(8)
+# The content of this file may be overwritten during a config reload.
diff --git a/files/image_config/resolv-config/resolv.conf.j2 b/files/image_config/resolv-config/resolv.conf.j2
new file mode 100644
index 000000000000..4887d2e01d45
--- /dev/null
+++ b/files/image_config/resolv-config/resolv.conf.j2
@@ -0,0 +1,3 @@
+{% for ip in DNS_NAMESERVER|sort %}
+nameserver {{ ip }}
+{% endfor -%}
diff --git a/files/image_config/resolv-config/update-containers b/files/image_config/resolv-config/update-containers
new file mode 100755
index 000000000000..47d8328a80fe
--- /dev/null
+++ b/files/image_config/resolv-config/update-containers
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+for container in $(docker ps -a --format=" {{ .ID }}"); 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"
+done
diff --git a/files/image_config/systemd/systemd-udevd/fix-udev-rule-may-fail-if-daemon-reload-command-runs.patch b/files/image_config/systemd/systemd-udevd/fix-udev-rule-may-fail-if-daemon-reload-command-runs.patch
new file mode 100644
index 000000000000..960efcbde6fe
--- /dev/null
+++ b/files/image_config/systemd/systemd-udevd/fix-udev-rule-may-fail-if-daemon-reload-command-runs.patch
@@ -0,0 +1,24 @@
+# -------------------------------------------------------------------
+# Patch for /lib/systemd/system/systemd-udevd.service
+# Fix issue: The udev rule may fail to be executed because the
+# daemon-reload command is executed in parallel
+# Github issue: https://github.com/systemd/systemd/issues/24668
+# Github PR: https://github.com/systemd/systemd/pull/24673
+# -------------------------------------------------------------------
+@@ -16,8 +16,6 @@
+ ConditionPathIsReadWrite=/sys
+
+ [Service]
+-DeviceAllow=block-* rwm
+-DeviceAllow=char-* rwm
+ Type=notify
+ # Note that udev will reset the value internally for its workers
+ OOMScoreAdjust=-1000
+@@ -29,7 +27,6 @@
+ KillMode=mixed
+ TasksMax=infinity
+ PrivateMounts=yes
+-ProtectClock=yes
+ ProtectHostname=yes
+ MemoryDenyWriteExecute=yes
+ RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6
\ No newline at end of file
diff --git a/files/scripts/swss.sh b/files/scripts/swss.sh
index c0c9b1952b05..0e37fe1376cd 100755
--- a/files/scripts/swss.sh
+++ b/files/scripts/swss.sh
@@ -175,7 +175,7 @@ start() {
$SONIC_DB_CLI GB_ASIC_DB FLUSHDB
$SONIC_DB_CLI GB_COUNTERS_DB FLUSHDB
$SONIC_DB_CLI RESTAPI_DB FLUSHDB
- clean_up_tables STATE_DB "'PORT_TABLE*', 'MGMT_PORT_TABLE*', 'VLAN_TABLE*', 'VLAN_MEMBER_TABLE*', 'LAG_TABLE*', 'LAG_MEMBER_TABLE*', 'INTERFACE_TABLE*', 'MIRROR_SESSION*', 'VRF_TABLE*', 'FDB_TABLE*', 'FG_ROUTE_TABLE*', 'BUFFER_POOL*', 'BUFFER_PROFILE*', 'MUX_CABLE_TABLE*', 'ADVERTISE_NETWORK_TABLE*', 'VXLAN_TUNNEL_TABLE*', 'MACSEC_PORT_TABLE*', 'MACSEC_INGRESS_SA_TABLE*', 'MACSEC_EGRESS_SA_TABLE*', 'MACSEC_INGRESS_SC_TABLE*', 'MACSEC_EGRESS_SC_TABLE*', 'VRF_OBJECT_TABLE*', 'VNET_MONITOR_TABLE*', 'BFD_SESSION_TABLE*', 'VNET_ROUTE_TUNNEL_TABLE*'"
+ clean_up_tables STATE_DB "'PORT_TABLE*', 'MGMT_PORT_TABLE*', 'VLAN_TABLE*', 'VLAN_MEMBER_TABLE*', 'LAG_TABLE*', 'LAG_MEMBER_TABLE*', 'INTERFACE_TABLE*', 'MIRROR_SESSION*', 'VRF_TABLE*', 'FDB_TABLE*', 'FG_ROUTE_TABLE*', 'BUFFER_POOL*', 'BUFFER_PROFILE*', 'MUX_CABLE_TABLE*', 'ADVERTISE_NETWORK_TABLE*', 'VXLAN_TUNNEL_TABLE*', 'VNET_ROUTE*', 'MACSEC_PORT_TABLE*', 'MACSEC_INGRESS_SA_TABLE*', 'MACSEC_EGRESS_SA_TABLE*', 'MACSEC_INGRESS_SC_TABLE*', 'MACSEC_EGRESS_SC_TABLE*', 'VRF_OBJECT_TABLE*', 'VNET_MONITOR_TABLE*', 'BFD_SESSION_TABLE*'"
$SONIC_DB_CLI APPL_STATE_DB FLUSHDB
rm -rf /tmp/cache
fi
diff --git a/installer/sharch_body.sh b/installer/sharch_body.sh
index e6289371cd58..9683b4692dca 100644
--- a/installer/sharch_body.sh
+++ b/installer/sharch_body.sh
@@ -11,7 +11,9 @@
##
echo -n "Verifying image checksum ..."
-sha1=$(sed -e '1,/^exit_marker$/d' "$0" | sha1sum | awk '{ print $1 }')
+payload_image_size=%%PAYLOAD_IMAGE_SIZE%%
+
+sha1=$(sed -e '1,/^exit_marker$/d' "$0" | head -c $payload_image_size | sha1sum | awk '{ print $1 }')
payload_sha1=%%IMAGE_SHA1%%
@@ -45,7 +47,9 @@ if [ "$(id -u)" = "0" ] ; then
fi
cd $tmp_dir
echo -n "Preparing image archive ..."
-sed -e '1,/^exit_marker$/d' $archive_path | tar xf - || exit 1
+
+sed -e '1,/^exit_marker$/d' $archive_path | head -c $payload_image_size | tar xf - || exit 1
+
echo " OK."
cd $cur_wd
if [ -n "$extract" ] ; then
diff --git a/onie-mk-demo.sh b/onie-mk-demo.sh
index 0905673d42cb..b466441ca31b 100755
--- a/onie-mk-demo.sh
+++ b/onie-mk-demo.sh
@@ -14,6 +14,9 @@ output_file=$6
demo_type=$7
image_version=$8
onie_image_part_size=$9
+onie_installer_payload=${10}
+cert_file=${11}
+key_file=${12}
shift 9
@@ -100,7 +103,7 @@ sed -i -e "s/%%DEMO_TYPE%%/$demo_type/g" \
-e "s@%%OUTPUT_RAW_IMAGE%%@$output_raw_image@" \
$tmp_installdir/install.sh || clean_up 1
echo -n "."
-cp -r $* $tmp_installdir || clean_up 1
+cp -r $onie_installer_payload $tmp_installdir || clean_up 1
echo -n "."
[ -r "$platform_conf" ] && {
cp $platform_conf $tmp_installdir || clean_up 1
@@ -130,7 +133,50 @@ cp $installer_dir/sharch_body.sh $output_file || {
# Replace variables in the sharch template
sed -i -e "s/%%IMAGE_SHA1%%/$sha1/" $output_file
echo -n "."
+tar_size="$(wc -c < "${sharch}")"
+sed -i -e "s|%%PAYLOAD_IMAGE_SIZE%%|${tar_size}|" ${output_file}
cat $sharch >> $output_file
+echo "secure upgrade flags: SECURE_UPGRADE_MODE = $SECURE_UPGRADE_MODE, \
+SECURE_UPGRADE_DEV_SIGNING_KEY = $SECURE_UPGRADE_DEV_SIGNING_KEY, SECURE_UPGRADE_SIGNING_CERT = $SECURE_UPGRADE_SIGNING_CERT"
+
+if [ "$SECURE_UPGRADE_MODE" = "dev" -o "$SECURE_UPGRADE_MODE" = "prod" ]; then
+ CMS_SIG="${tmp_dir}/signature.sig"
+ DIR="$(dirname "$0")"
+ scripts_dir="${DIR}/scripts"
+ echo "$0 $SECURE_UPGRADE_MODE signing - creating CMS signature for ${output_file}. Output file ${CMS_SIG}"
+
+ if [ "$SECURE_UPGRADE_MODE" = "dev" ]; then
+ echo "$0 dev keyfile location: ${key_file}."
+ [ -f ${scripts_dir}/sign_image_dev.sh ] || {
+ echo "dev sign script ${scripts_dir}/sign_image_dev.sh not found"
+ rm -rf ${output_file}
+ }
+ (${scripts_dir}/sign_image_dev.sh ${cert_file} ${key_file} ${output_file} ${CMS_SIG}) || {
+ echo "CMS sign error $?"
+ rm -rf ${CMS_SIG} ${output_file}
+ }
+ else # "$SECURE_UPGRADE_MODE" has to be equal to "prod"
+ [ -f ${scripts_dir}/sign_image_${machine}.sh ] || {
+ echo "prod sign script ${scripts_dir}/sign_image_${machine}.sh not found"
+ rm -rf ${output_file}
+ }
+ (${scripts_dir}/sign_image_${machine}.sh ${output_file} ${CMS_SIG} ${SECURE_UPGRADE_MODE}) || {
+ echo "CMS sign error $?"
+ rm -rf ${CMS_SIG} ${output_file}
+ }
+ fi
+
+ [ -f "$CMS_SIG" ] || {
+ echo "Error: CMS signature not created - exiting without signing"
+ clean_up 1
+ }
+ # append signature to binary
+ cat ${CMS_SIG} >> ${output_file}
+ sudo rm -rf ${CMS_SIG}
+elif [ "$SECURE_UPGRADE_MODE" -ne "no_sign" ]; then
+ echo "SECURE_UPGRADE_MODE not defined or defined as $SECURE_UPGRADE_MODE - build without signing"
+fi
+
rm -rf $tmp_dir
echo " Done."
diff --git a/platform/barefoot/sonic-platform-modules-arista b/platform/barefoot/sonic-platform-modules-arista
index 1c036127fd4a..cca827843c05 160000
--- a/platform/barefoot/sonic-platform-modules-arista
+++ b/platform/barefoot/sonic-platform-modules-arista
@@ -1 +1 @@
-Subproject commit 1c036127fd4a0512a36ac0fc489a619fe87280ba
+Subproject commit cca827843c0528347b996aedd5790558c5d6a656
diff --git a/platform/broadcom/sonic-platform-modules-arista b/platform/broadcom/sonic-platform-modules-arista
index 1c036127fd4a..cca827843c05 160000
--- a/platform/broadcom/sonic-platform-modules-arista
+++ b/platform/broadcom/sonic-platform-modules-arista
@@ -1 +1 @@
-Subproject commit 1c036127fd4a0512a36ac0fc489a619fe87280ba
+Subproject commit cca827843c0528347b996aedd5790558c5d6a656
diff --git a/platform/marvell-arm64/sai.mk b/platform/marvell-arm64/sai.mk
index f6372ca683c0..c6d84fa10db5 100644
--- a/platform/marvell-arm64/sai.mk
+++ b/platform/marvell-arm64/sai.mk
@@ -1,6 +1,6 @@
# Marvell SAI
-export MRVL_SAI_VERSION = 1.11.0-1
+export MRVL_SAI_VERSION = 1.12.0-1
export MRVL_SAI = mrvllibsai_$(MRVL_SAI_VERSION)_$(PLATFORM_ARCH).deb
$(MRVL_SAI)_SRC_PATH = $(PLATFORM_PATH)/sai
diff --git a/platform/marvell-armhf/platform.conf b/platform/marvell-armhf/platform.conf
index 0113c6a05ac0..9bfd495ed388 100644
--- a/platform/marvell-armhf/platform.conf
+++ b/platform/marvell-armhf/platform.conf
@@ -176,8 +176,7 @@ prepare_boot_menu() {
fi
BORDER='echo "---------------------------------------------------";echo;'
fw_setenv ${FW_ARG} print_menu "$BORDER $BOOT1 $BOOT2 $BOOT3 $BORDER" > /dev/null
-
- fw_setenv ${FW_ARG} linuxargs "net.ifnames=0 loopfstype=squashfs loop=$image_dir/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG_SIZE loglevel=4 ${extra_cmdline_linux}" > /dev/null
+ fw_setenv ${FW_ARG} linuxargs "net.ifnames=0 loopfstype=squashfs loop=$image_dir/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG_SIZE loglevel=4 ${extra_cmdline_linux} ${ONIE_PLATFORM_EXTRA_CMDLINE_LINUX}" > /dev/null
fw_setenv ${FW_ARG} linuxargs_old "net.ifnames=0 loopfstype=squashfs loop=$image_dir_old/$FILESYSTEM_SQUASHFS systemd.unified_cgroup_hierarchy=0 varlog_size=$VAR_LOG_SIZE loglevel=4" > /dev/null
# Set boot configs
diff --git a/platform/p4/docker-sonic-p4/Dockerfile.j2 b/platform/p4/docker-sonic-p4/Dockerfile.j2
index 80503b910e84..11e34ff1f88a 100644
--- a/platform/p4/docker-sonic-p4/Dockerfile.j2
+++ b/platform/p4/docker-sonic-p4/Dockerfile.j2
@@ -81,7 +81,7 @@ RUN sed -ri 's/^(save .*$)/# \1/g;
s/^client-output-buffer-limit pubsub [0-9]+mb [0-9]+mb [0-9]+/client-output-buffer-limit pubsub 0 0 0/ \
' /etc/redis/redis.conf
-ADD port_config.ini /port_config.ini
+COPY ["port_config.ini", "/port_config.ini"]
COPY ["start.sh", "orchagent.sh", "config_bm.sh", "/usr/bin/"]
COPY ["supervisord.conf", "/etc/supervisor/conf.d/"]
COPY ["files/configdb-load.sh", "/usr/bin/"]
diff --git a/platform/vs/docker-sonic-vs/Dockerfile.j2 b/platform/vs/docker-sonic-vs/Dockerfile.j2
index 4b356fa1a17a..bbff022601c9 100644
--- a/platform/vs/docker-sonic-vs/Dockerfile.j2
+++ b/platform/vs/docker-sonic-vs/Dockerfile.j2
@@ -147,6 +147,7 @@ COPY ["zero_profiles.json", "/etc/sonic"]
COPY ["buffermgrd.sh", "/usr/bin/"]
COPY ["platform.json", "/usr/share/sonic/device/x86_64-kvm_x86_64-r0/"]
+COPY ["platform-npu-2p.json", "/usr/share/sonic/device/x86_64-kvm_x86_64-r0/"]
COPY ["hwsku.json", "/usr/share/sonic/device/x86_64-kvm_x86_64-r0/Force10-S6000/"]
COPY ["hwsku.json", "/usr/share/sonic/device/x86_64-kvm_x86_64-r0/brcm_gearbox_vs/"]
COPY ["hwsku.json", "/usr/share/sonic/device/x86_64-kvm_x86_64-r0/Mellanox-SN2700/"]
diff --git a/platform/vs/docker-sonic-vs/platform-npu-2p.json b/platform/vs/docker-sonic-vs/platform-npu-2p.json
new file mode 100644
index 000000000000..718582b1a283
--- /dev/null
+++ b/platform/vs/docker-sonic-vs/platform-npu-2p.json
@@ -0,0 +1,23 @@
+{
+ "interfaces": {
+ "Ethernet0": {
+ "index": "1,1,1,1",
+ "lanes": "0,1,2,3",
+ "breakout_modes": {
+ "1x100G": ["etp1"],
+ "1x100G[50G,40G,25G,10G]": ["etp1"],
+ "2x50G[25G,10G]": ["etp1a", "etp1b"],
+ "4x10G[25G]": ["etp1a", "etp1b", "etp1c", "etp1d"]
+ }
+ },
+ "Ethernet4": {
+ "index": "2,2,2,2",
+ "lanes": "4,5,6,7",
+ "breakout_modes": {
+ "1x100G": ["etp2"],
+ "1x100G[50G,40G,25G,10G]": ["etp2"],
+ "2x50G[25G,10G]": ["etp2a", "etp2b"]
+ }
+ }
+ }
+}
diff --git a/platform/vs/docker-sonic-vs/start.sh b/platform/vs/docker-sonic-vs/start.sh
index 9911c1bfe011..59c05ed4eabf 100755
--- a/platform/vs/docker-sonic-vs/start.sh
+++ b/platform/vs/docker-sonic-vs/start.sh
@@ -8,6 +8,11 @@
ln -sf /usr/share/sonic/device/$PLATFORM /usr/share/sonic/platform
ln -sf /usr/share/sonic/device/$PLATFORM/$HWSKU /usr/share/sonic/hwsku
+PLATFORM_CONF=platform.json
+if [[ $HWSKU == "NPU-2P" ]]; then
+ PLATFORM_CONF=platform-npu-2p.json
+fi
+
pushd /usr/share/sonic/hwsku
# filter available front panel ports in lanemap.ini
@@ -45,9 +50,14 @@ if [ -f /etc/sonic/config_db.json ]; then
mv /tmp/config_db.json /etc/sonic/config_db.json
else
# generate and merge buffers configuration into config file
- sonic-cfggen -k $HWSKU -p /usr/share/sonic/device/$PLATFORM/platform.json -t /usr/share/sonic/hwsku/buffers.json.j2 > /tmp/buffers.json
- sonic-cfggen -j /etc/sonic/init_cfg.json -t /usr/share/sonic/hwsku/qos.json.j2 > /tmp/qos.json
- sonic-cfggen -p /usr/share/sonic/device/$PLATFORM/platform.json -k $HWSKU --print-data > /tmp/ports.json
+ if [ -f /usr/share/sonic/hwsku/buffers.json.j2 ]; then
+ sonic-cfggen -k $HWSKU -p /usr/share/sonic/device/$PLATFORM/$PLATFORM_CONF -t /usr/share/sonic/hwsku/buffers.json.j2 > /tmp/buffers.json
+ fi
+ if [ -f /usr/share/sonic/hwsku/qos.json.j2 ]; then
+ sonic-cfggen -j /etc/sonic/init_cfg.json -t /usr/share/sonic/hwsku/qos.json.j2 > /tmp/qos.json
+ fi
+
+ sonic-cfggen -p /usr/share/sonic/device/$PLATFORM/$PLATFORM_CONF -k $HWSKU --print-data > /tmp/ports.json
# change admin_status from up to down; Test cases dependent
sed -i "s/up/down/g" /tmp/ports.json
sonic-cfggen -j /etc/sonic/init_cfg.json -j /tmp/buffers.json -j /tmp/qos.json -j /tmp/ports.json --print-data > /etc/sonic/config_db.json
@@ -56,6 +66,8 @@ sonic-cfggen -t /usr/share/sonic/templates/copp_cfg.j2 > /etc/sonic/copp_cfg.jso
if [ "$HWSKU" == "Mellanox-SN2700" ]; then
cp /usr/share/sonic/hwsku/sai_mlnx.profile /usr/share/sonic/hwsku/sai.profile
+elif [ "$HWSKU" == "NPU" ]; then
+ cp /usr/share/sonic/hwsku/sai_npu.profile /usr/share/sonic/hwsku/sai.profile
fi
mkdir -p /etc/swss/config.d/
diff --git a/rules/docker-database.mk b/rules/docker-database.mk
index b66583b9bd2c..a10609933c35 100644
--- a/rules/docker-database.mk
+++ b/rules/docker-database.mk
@@ -27,6 +27,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_DATABASE_DBG)
$(DOCKER_DATABASE)_CONTAINER_NAME = database
$(DOCKER_DATABASE)_RUN_OPT += --privileged -t
$(DOCKER_DATABASE)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_DATABASE)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_DATABASE)_BASE_IMAGE_FILES += redis-cli:/usr/bin/redis-cli
$(DOCKER_DATABASE)_FILES += $(SYSCTL_NET_CONFIG) $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT)
diff --git a/rules/docker-dhcp-relay.mk b/rules/docker-dhcp-relay.mk
index c26995ad143b..f5d58f2de45b 100644
--- a/rules/docker-dhcp-relay.mk
+++ b/rules/docker-dhcp-relay.mk
@@ -47,6 +47,7 @@ endif
$(DOCKER_DHCP_RELAY)_CONTAINER_NAME = dhcp_relay
$(DOCKER_DHCP_RELAY)_CONTAINER_PRIVILEGED = true
$(DOCKER_DHCP_RELAY)_CONTAINER_VOLUMES += /etc/sonic:/etc/sonic:ro
+$(DOCKER_DHCP_RELAY)_CONTAINER_VOLUMES += /etc/timezone:/etc/timezone:ro
$(DOCKER_DHCP_RELAY)_CONTAINER_VOLUMES += /usr/share/sonic/scripts:/usr/share/sonic/scripts:ro
$(DOCKER_DHCP_RELAY)_CONTAINER_TMPFS += /tmp/
$(DOCKER_DHCP_RELAY)_CONTAINER_TMPFS += /var/tmp/
diff --git a/rules/docker-eventd.mk b/rules/docker-eventd.mk
index 304f295e2a4b..367b0abecccd 100644
--- a/rules/docker-eventd.mk
+++ b/rules/docker-eventd.mk
@@ -33,6 +33,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_EVENTD_DBG)
$(DOCKER_EVENTD)_CONTAINER_NAME = eventd
$(DOCKER_EVENTD)_RUN_OPT += --privileged -t
$(DOCKER_EVENTD)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_EVENTD)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
SONIC_BULLSEYE_DOCKERS += $(DOCKER_EVENTD)
SONIC_BULLSEYE_DBG_DOCKERS += $(DOCKER_EVENTD_DBG)
diff --git a/rules/docker-fpm-frr.mk b/rules/docker-fpm-frr.mk
index 59d645362886..13e8d346fca5 100644
--- a/rules/docker-fpm-frr.mk
+++ b/rules/docker-fpm-frr.mk
@@ -30,6 +30,7 @@ SONIC_DOCKER_DBG_IMAGES += $(DOCKER_FPM_FRR_DBG)
$(DOCKER_FPM_FRR)_CONTAINER_NAME = bgp
$(DOCKER_FPM_FRR)_RUN_OPT += --privileged -t
$(DOCKER_FPM_FRR)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_FPM_FRR)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_FPM_FRR)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT)
diff --git a/rules/docker-iccpd.mk b/rules/docker-iccpd.mk
index eb58ee755cdc..e9f280499847 100644
--- a/rules/docker-iccpd.mk
+++ b/rules/docker-iccpd.mk
@@ -23,6 +23,7 @@ endif
$(DOCKER_ICCPD)_CONTAINER_NAME = iccpd
$(DOCKER_ICCPD)_RUN_OPT += --privileged -t
$(DOCKER_ICCPD)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_ICCPD)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_ICCPD)_BASE_IMAGE_FILES += mclagdctl:/usr/bin/mclagdctl
diff --git a/rules/docker-lldp.mk b/rules/docker-lldp.mk
index b2e7b350f3bb..9f6a4d2e711d 100644
--- a/rules/docker-lldp.mk
+++ b/rules/docker-lldp.mk
@@ -30,6 +30,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_LLDP_DBG)
$(DOCKER_LLDP)_CONTAINER_NAME = lldp
$(DOCKER_LLDP)_RUN_OPT += --privileged -t
$(DOCKER_LLDP)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_LLDP)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_LLDP)_RUN_OPT += -v /usr/share/sonic/scripts:/usr/share/sonic/scripts:ro
$(DOCKER_LLDP)_BASE_IMAGE_FILES += lldpctl:/usr/bin/lldpctl
diff --git a/rules/docker-macsec.mk b/rules/docker-macsec.mk
index d4cce3ecfcb7..49f80133b9bd 100644
--- a/rules/docker-macsec.mk
+++ b/rules/docker-macsec.mk
@@ -40,6 +40,7 @@ $(DOCKER_MACSEC)_VERSION = 1.0.0
$(DOCKER_MACSEC)_PACKAGE_NAME = macsec
$(DOCKER_MACSEC)_RUN_OPT += --privileged -t
$(DOCKER_MACSEC)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_MACSEC)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_MACSEC)_RUN_OPT += -v /host/warmboot:/var/warmboot
$(DOCKER_MACSEC)_SERVICE_REQUIRES = updategraph
diff --git a/rules/docker-mux.mk b/rules/docker-mux.mk
index cbdc1c06510d..2f9f93a9b890 100644
--- a/rules/docker-mux.mk
+++ b/rules/docker-mux.mk
@@ -32,4 +32,5 @@ endif
$(DOCKER_MUX)_CONTAINER_NAME = mux
$(DOCKER_MUX)_RUN_OPT += --privileged -t
$(DOCKER_MUX)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_MUX)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_MUX)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT)
diff --git a/rules/docker-nat.mk b/rules/docker-nat.mk
index 3d2f2b011968..f4022547ffef 100644
--- a/rules/docker-nat.mk
+++ b/rules/docker-nat.mk
@@ -31,6 +31,7 @@ endif
$(DOCKER_NAT)_CONTAINER_NAME = nat
$(DOCKER_NAT)_RUN_OPT += --privileged -t
$(DOCKER_NAT)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_NAT)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_NAT)_RUN_OPT += -v /host/warmboot:/var/warmboot
$(DOCKER_NAT)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT)
diff --git a/rules/docker-orchagent.mk b/rules/docker-orchagent.mk
index eae484ccc5f7..1e877aef4bdc 100644
--- a/rules/docker-orchagent.mk
+++ b/rules/docker-orchagent.mk
@@ -37,6 +37,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_ORCHAGENT_DBG)
$(DOCKER_ORCHAGENT)_CONTAINER_NAME = swss
$(DOCKER_ORCHAGENT)_RUN_OPT += --privileged -t
$(DOCKER_ORCHAGENT)_RUN_OPT += -v /etc/network/interfaces:/etc/network/interfaces:ro
+$(DOCKER_ORCHAGENT)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_ORCHAGENT)_RUN_OPT += -v /etc/network/interfaces.d/:/etc/network/interfaces.d/:ro
$(DOCKER_ORCHAGENT)_RUN_OPT += -v /host/machine.conf:/host/machine.conf:ro
$(DOCKER_ORCHAGENT)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
diff --git a/rules/docker-p4rt.mk b/rules/docker-p4rt.mk
index 172346742ce1..865bf9fee861 100644
--- a/rules/docker-p4rt.mk
+++ b/rules/docker-p4rt.mk
@@ -31,6 +31,7 @@ endif
$(DOCKER_P4RT)_CONTAINER_NAME = p4rt
$(DOCKER_P4RT)_RUN_OPT += --privileged -t
$(DOCKER_P4RT)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_P4RT)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_P4RT)_GIT_COMMIT = $(shell cd "$($(SONIC_P4RT)_SRC_PATH)" && git log -n 1 --format=format:"%H %s" || echo "Unable to fetch git log for p4rt")
$(DOCKER_P4RT)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT)
diff --git a/rules/docker-platform-monitor.mk b/rules/docker-platform-monitor.mk
index a87a30247337..daa19336fb6f 100644
--- a/rules/docker-platform-monitor.mk
+++ b/rules/docker-platform-monitor.mk
@@ -50,6 +50,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_PLATFORM_MONITOR_DBG)
$(DOCKER_PLATFORM_MONITOR)_CONTAINER_NAME = pmon
$(DOCKER_PLATFORM_MONITOR)_RUN_OPT += --privileged -t
$(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /usr/share/sonic/scripts:/usr/share/sonic/scripts:ro
$(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /var/run/platform_cache:/var/run/platform_cache:ro
$(DOCKER_PLATFORM_MONITOR)_RUN_OPT += -v /usr/share/sonic/device/pddf:/usr/share/sonic/device/pddf:ro
diff --git a/rules/docker-router-advertiser.mk b/rules/docker-router-advertiser.mk
index 255ca00c01c7..e3f561be93dc 100644
--- a/rules/docker-router-advertiser.mk
+++ b/rules/docker-router-advertiser.mk
@@ -31,5 +31,6 @@ endif
$(DOCKER_ROUTER_ADVERTISER)_CONTAINER_NAME = radv
$(DOCKER_ROUTER_ADVERTISER)_RUN_OPT += --privileged -t
$(DOCKER_ROUTER_ADVERTISER)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_ROUTER_ADVERTISER)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_ROUTER_ADVERTISER)_RUN_OPT += -v /usr/share/sonic/scripts:/usr/share/sonic/scripts:ro
$(DOCKER_ROUTER_ADVERTISER)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT)
diff --git a/rules/docker-sflow.mk b/rules/docker-sflow.mk
index 285264dcb0b1..c5ca661f72c1 100644
--- a/rules/docker-sflow.mk
+++ b/rules/docker-sflow.mk
@@ -31,6 +31,7 @@ endif
$(DOCKER_SFLOW)_CONTAINER_NAME = sflow
$(DOCKER_SFLOW)_RUN_OPT += --privileged -t
$(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
$(DOCKER_SFLOW)_BASE_IMAGE_FILES += psample:/usr/bin/psample
diff --git a/rules/docker-snmp.mk b/rules/docker-snmp.mk
index 037d58936170..085eadf7eab3 100644
--- a/rules/docker-snmp.mk
+++ b/rules/docker-snmp.mk
@@ -30,6 +30,7 @@ SONIC_INSTALL_DOCKER_DBG_IMAGES += $(DOCKER_SNMP_DBG)
$(DOCKER_SNMP)_CONTAINER_NAME = snmp
$(DOCKER_SNMP)_RUN_OPT += --privileged -t
$(DOCKER_SNMP)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_SNMP)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_SNMP)_RUN_OPT += -v /usr/share/sonic/scripts:/usr/share/sonic/scripts:ro
$(DOCKER_SNMP)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT)
$(DOCKER_SNMP)_BASE_IMAGE_FILES += monit_snmp:/etc/monit/conf.d
diff --git a/rules/docker-sonic-mgmt-framework.mk b/rules/docker-sonic-mgmt-framework.mk
index b0986e12d14e..7985f8e9be9d 100644
--- a/rules/docker-sonic-mgmt-framework.mk
+++ b/rules/docker-sonic-mgmt-framework.mk
@@ -31,6 +31,7 @@ endif
$(DOCKER_MGMT_FRAMEWORK)_CONTAINER_NAME = mgmt-framework
$(DOCKER_MGMT_FRAMEWORK)_RUN_OPT += --privileged -t
$(DOCKER_MGMT_FRAMEWORK)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_MGMT_FRAMEWORK)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_MGMT_FRAMEWORK)_RUN_OPT += -v /etc:/host_etc:ro
$(DOCKER_MGMT_FRAMEWORK)_RUN_OPT += -v /var/run/dbus:/var/run/dbus:rw
$(DOCKER_MGMT_FRAMEWORK)_RUN_OPT += --mount type=bind,source="/var/platform/",target="/mnt/platform/"
diff --git a/rules/docker-teamd.mk b/rules/docker-teamd.mk
index 8d92cd2533f4..ae5cc838450d 100644
--- a/rules/docker-teamd.mk
+++ b/rules/docker-teamd.mk
@@ -35,6 +35,7 @@ endif
$(DOCKER_TEAMD)_CONTAINER_NAME = teamd
$(DOCKER_TEAMD)_RUN_OPT += --privileged -t
$(DOCKER_TEAMD)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_TEAMD)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_TEAMD)_RUN_OPT += -v /host/warmboot:/var/warmboot
$(DOCKER_TEAMD)_BASE_IMAGE_FILES += teamdctl:/usr/bin/teamdctl
diff --git a/rules/docker-telemetry.mk b/rules/docker-telemetry.mk
index 30e11d925195..5b66ff588b64 100644
--- a/rules/docker-telemetry.mk
+++ b/rules/docker-telemetry.mk
@@ -30,6 +30,7 @@ endif
$(DOCKER_TELEMETRY)_CONTAINER_NAME = telemetry
$(DOCKER_TELEMETRY)_RUN_OPT += --privileged -t
$(DOCKER_TELEMETRY)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
+$(DOCKER_TELEMETRY)_RUN_OPT += -v /etc/timezone:/etc/timezone:ro
$(DOCKER_TELEMETRY)_RUN_OPT += -v /usr/share/sonic/scripts:/usr/share/sonic/scripts:ro
ifneq ($(INCLUDE_SYSTEM_GNMI), y)
$(DOCKER_TELEMETRY)_RUN_OPT += -v /var/run/dbus:/var/run/dbus:rw
diff --git a/scripts/sign_image_dev.sh b/scripts/sign_image_dev.sh
new file mode 100755
index 000000000000..668672f49378
--- /dev/null
+++ b/scripts/sign_image_dev.sh
@@ -0,0 +1,11 @@
+cert_file=$1
+key_file=$2
+image_to_sign=$3
+cms_sig_out=$4
+openssl cms -sign -nosmimecap -signer ${cert_file} -inkey ${key_file} -binary -in $image_to_sign -outform pem -out ${cms_sig_out} || {
+ echo "$?: CMS sign error"
+ sudo rm -rf ${cms_sig_out}
+ exit 1
+}
+echo "CMS sign OK"
+exit 0
diff --git a/src/dhcpmon b/src/dhcpmon
index 3c16c8c4ded2..824a1448b9cb 160000
--- a/src/dhcpmon
+++ b/src/dhcpmon
@@ -1 +1 @@
-Subproject commit 3c16c8c4ded29c193695d0acc7693f9cada3dfcb
+Subproject commit 824a1448b9cbe685664f94c25aa00c37e3e3c058
diff --git a/src/sonic-config-engine/minigraph.py b/src/sonic-config-engine/minigraph.py
index 0f883773f776..5bb7a23c82ad 100644
--- a/src/sonic-config-engine/minigraph.py
+++ b/src/sonic-config-engine/minigraph.py
@@ -994,6 +994,7 @@ def parse_meta(meta, hname):
dhcp_servers = []
dhcpv6_servers = []
ntp_servers = []
+ dns_nameservers = []
tacacs_servers = []
mgmt_routes = []
erspan_dst = []
@@ -1024,6 +1025,8 @@ def parse_meta(meta, hname):
dhcp_servers = value_group
elif name == "NtpResources":
ntp_servers = value_group
+ elif name == "DnsNameserverResources":
+ dns_nameservers = value_group
elif name == "SyslogResources":
syslog_servers = value_group
elif name == "TacacsServer":
@@ -1063,7 +1066,7 @@ def parse_meta(meta, hname):
qos_profile = value
elif name == "RackMgmtMap":
rack_mgmt_map = value
- return syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, downstream_redundancy_types, redundancy_type, qos_profile, rack_mgmt_map
+ return syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, dns_nameservers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, downstream_redundancy_types, redundancy_type, qos_profile, rack_mgmt_map
def parse_linkmeta(meta, hname):
@@ -1490,6 +1493,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
dhcp_servers = []
dhcpv6_servers = []
ntp_servers = []
+ dns_nameservers = []
tacacs_servers = []
mgmt_routes = []
erspan_dst = []
@@ -1545,7 +1549,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
elif child.tag == str(QName(ns, "UngDec")):
(u_neighbors, u_devices, _, _, _, _, _, _) = parse_png(child, hostname, None)
elif child.tag == str(QName(ns, "MetadataDeclaration")):
- (syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, downstream_redundancy_types, redundancy_type, qos_profile, rack_mgmt_map) = parse_meta(child, hostname)
+ (syslog_servers, dhcp_servers, dhcpv6_servers, ntp_servers, dns_nameservers, tacacs_servers, mgmt_routes, erspan_dst, deployment_id, region, cloudtype, resource_type, downstream_subrole, switch_id, switch_type, max_cores, kube_data, macsec_profile, downstream_redundancy_types, redundancy_type, qos_profile, rack_mgmt_map) = parse_meta(child, hostname)
elif child.tag == str(QName(ns, "LinkMetadataDeclaration")):
linkmetas = parse_linkmeta(child, hostname)
elif child.tag == str(QName(ns, "DeviceInfos")):
@@ -1997,6 +2001,7 @@ def parse_xml(filename, platform=None, port_config_file=None, asic_name=None, hw
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['DNS_NAMESERVER'] = dict((item, {}) for item in dns_nameservers)
results['TACPLUS_SERVER'] = dict((item, {'priority': '1', 'tcp_port': '49'}) for item in tacacs_servers)
if len(acl_table_types) > 0:
results['ACL_TABLE_TYPE'] = acl_table_types
diff --git a/src/sonic-config-engine/tests/data/dns/resolv.conf b/src/sonic-config-engine/tests/data/dns/resolv.conf
new file mode 100644
index 000000000000..b90cade8f92d
--- /dev/null
+++ b/src/sonic-config-engine/tests/data/dns/resolv.conf
@@ -0,0 +1,3 @@
+nameserver 1.1.1.1
+nameserver 2001:4860:4860::8888
+
diff --git a/src/sonic-config-engine/tests/data/dns/static_dns.json b/src/sonic-config-engine/tests/data/dns/static_dns.json
new file mode 100644
index 000000000000..0d2cf1804317
--- /dev/null
+++ b/src/sonic-config-engine/tests/data/dns/static_dns.json
@@ -0,0 +1,6 @@
+{
+ "DNS_NAMESERVER": {
+ "1.1.1.1": {},
+ "2001:4860:4860::8888": {}
+ }
+}
diff --git a/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph.xml b/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph.xml
index be3938f24bc4..0adcec5c8420 100644
--- a/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph.xml
+++ b/src/sonic-config-engine/tests/multi_npu_data/sample-minigraph.xml
@@ -1425,6 +1425,11 @@
17.39.1.129;17.39.1.130
+
+ DnsNameserverResources
+
+ 1.1.1.1;8.8.8.8
+
SnmpResources
diff --git a/src/sonic-config-engine/tests/simple-sample-graph-case.xml b/src/sonic-config-engine/tests/simple-sample-graph-case.xml
index 69b27c33e7b4..7e8f1579cdf4 100644
--- a/src/sonic-config-engine/tests/simple-sample-graph-case.xml
+++ b/src/sonic-config-engine/tests/simple-sample-graph-case.xml
@@ -500,6 +500,12 @@
10.0.10.1;10.0.10.2
+
+ DnsNameserverResources
+
+ 1.1.1.1;8.8.8.8
+
+
SnmpResources
diff --git a/src/sonic-config-engine/tests/simple-sample-graph-metadata.xml b/src/sonic-config-engine/tests/simple-sample-graph-metadata.xml
index fbc33b49862a..c841ff8d1a9f 100644
--- a/src/sonic-config-engine/tests/simple-sample-graph-metadata.xml
+++ b/src/sonic-config-engine/tests/simple-sample-graph-metadata.xml
@@ -236,6 +236,12 @@
10.0.10.1;10.0.10.2
+
+ DnsNameserverResources
+
+ 20.2.2.2;30.3.3.3
+
+
SnmpResources
diff --git a/src/sonic-config-engine/tests/test_cfggen.py b/src/sonic-config-engine/tests/test_cfggen.py
index c1b22995ca5c..8f8eba759ca8 100644
--- a/src/sonic-config-engine/tests/test_cfggen.py
+++ b/src/sonic-config-engine/tests/test_cfggen.py
@@ -697,6 +697,11 @@ def test_metadata_ntp(self):
output = self.run_script(argument)
self.assertEqual(utils.to_dict(output.strip()), utils.to_dict("{'10.0.10.1': {}, '10.0.10.2': {}}"))
+ def test_metadata_dns_nameserver(self):
+ argument = ['-m', self.sample_graph_metadata, '-p', self.port_config, '-v', "DNS_NAMESERVER"]
+ output = self.run_script(argument)
+ self.assertEqual(utils.to_dict(output.strip()), utils.to_dict("{'20.2.2.2': {}, '30.3.3.3': {}}"))
+
def test_minigraph_vnet(self, **kwargs):
graph_file = kwargs.get('graph_file', self.sample_graph_simple)
argument = ['-m', graph_file, '-p', self.port_config, '-v', "VNET"]
diff --git a/src/sonic-config-engine/tests/test_j2files.py b/src/sonic-config-engine/tests/test_j2files.py
index 59264a2e0c31..225246aa1e81 100644
--- a/src/sonic-config-engine/tests/test_j2files.py
+++ b/src/sonic-config-engine/tests/test_j2files.py
@@ -695,6 +695,14 @@ def test_backend_acl_template_render(self):
self.run_script(argument, output_file=self.output_file)
assert utils.cmp(sample_output_file, self.output_file), self.run_diff(sample_output_file, self.output_file)
+ def test_dns_template_render(self):
+ conf_template = os.path.join(self.test_dir, '..', '..', '..', 'files', 'image_config', 'resolv-config', 'resolv.conf.j2')
+ static_dns_conf = os.path.join(self.test_dir, "data", "dns", "static_dns.json")
+ expected = os.path.join(self.test_dir, "data", "dns", "resolv.conf")
+
+ argument = ['-j', static_dns_conf, '-t', conf_template]
+ self.run_script(argument, output_file=self.output_file)
+ assert utils.cmp(expected, self.output_file), self.run_diff(expected, self.output_file)
def test_buffers_edgezone_aggregator_render_template(self):
self._test_buffers_render_template('arista', 'x86_64-arista_7060_cx32s', 'Arista-7060CX-32S-D48C8', 'sample-arista-7060-t0-minigraph.xml', 'buffers.json.j2', 'buffer-arista7060-t0.json')
diff --git a/src/sonic-config-engine/tests/test_minigraph_case.py b/src/sonic-config-engine/tests/test_minigraph_case.py
index 826c92f44ed8..b9617fb7dce2 100644
--- a/src/sonic-config-engine/tests/test_minigraph_case.py
+++ b/src/sonic-config-engine/tests/test_minigraph_case.py
@@ -276,6 +276,11 @@ def test_metadata_ntp(self):
output = self.run_script(argument)
self.assertEqual(output.strip(), "{'10.0.10.1': {}, '10.0.10.2': {}}")
+ def test_metadata_dns_nameserver(self):
+ argument = ['-m', self.sample_graph, '-p', self.port_config, '-v', "DNS_NAMESERVER"]
+ output = self.run_script(argument)
+ self.assertEqual(output.strip(), "{'1.1.1.1': {}, '8.8.8.8': {}}")
+
def test_minigraph_vnet(self):
argument = ['-m', self.sample_graph, '-p', self.port_config, '-v', "VNET"]
output = self.run_script(argument)
diff --git a/src/sonic-config-engine/tests/test_multinpu_cfggen.py b/src/sonic-config-engine/tests/test_multinpu_cfggen.py
index bc4227f85d52..7026dfa84a61 100644
--- a/src/sonic-config-engine/tests/test_multinpu_cfggen.py
+++ b/src/sonic-config-engine/tests/test_multinpu_cfggen.py
@@ -150,6 +150,17 @@ def test_metadata_ntp(self):
print("Log:asic{} sku {}".format(asic,output))
self.assertDictEqual(output, {})
+ def test_metadata_dns_nameserver(self):
+ argument = ['-m', self.sample_graph, '-p', self.sample_port_config, '--var-json', "DNS_NAMESERVER"]
+ output = json.loads(self.run_script(argument))
+ self.assertDictEqual(output, {'1.1.1.1': {}, '8.8.8.8': {}})
+ #DNS_NAMESERVER data is present only in the host config
+ argument = ['-m', self.sample_graph, '--var-json', "DNS_NAMESERVER"]
+ for asic in range(NUM_ASIC):
+ output = json.loads(self.run_script_for_asic(argument, asic, self.port_config[asic]))
+ print("Log:asic{} sku {}".format(asic,output))
+ self.assertDictEqual(output, {})
+
def test_mgmt_port(self):
argument = ['-m', self.sample_graph, '-p', self.sample_port_config, '--var-json', "MGMT_PORT"]
output = json.loads(self.run_script(argument))
diff --git a/src/sonic-host-services b/src/sonic-host-services
index 508d642f5866..eab4a9ee30be 160000
--- a/src/sonic-host-services
+++ b/src/sonic-host-services
@@ -1 +1 @@
-Subproject commit 508d642f58665dd1925fe2a1eb6e9d7b368c7dda
+Subproject commit eab4a9ee30be81da70d38f1320c37caef261e7e3
diff --git a/src/sonic-pit/pit-sysdiag/cases/cpu_tc/config.json b/src/sonic-pit/pit-sysdiag/cases/cpu_tc/config.json
new file mode 100644
index 000000000000..b17842944328
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/cases/cpu_tc/config.json
@@ -0,0 +1,6 @@
+{
+ "name": "cpu-test",
+ "description": "Check CPU information",
+ "type": "auto",
+ "tags": ["manufacture", "delivery", "pa", "power", "emc"]
+}
diff --git a/src/sonic-pit/pit-sysdiag/cases/memory_tc/config.json b/src/sonic-pit/pit-sysdiag/cases/memory_tc/config.json
new file mode 100644
index 000000000000..f079c826a1c8
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/cases/memory_tc/config.json
@@ -0,0 +1,6 @@
+{
+ "name": "memory-test",
+ "description": "Check memory and pattern test",
+ "type": "auto",
+ "tags": ["manufacture", "delivery", "pa", "power", "emc"]
+}
diff --git a/src/sonic-pit/pit-sysdiag/cases/oob_tc/config.json b/src/sonic-pit/pit-sysdiag/cases/oob_tc/config.json
new file mode 100644
index 000000000000..a16c01512d35
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/cases/oob_tc/config.json
@@ -0,0 +1,6 @@
+{
+ "name": "oob-test",
+ "description": "l2 mgmt switch test",
+ "type": "auto",
+ "tags": ["manufacture", "delivery", "pa"]
+}
diff --git a/src/sonic-pit/pit-sysdiag/cases/rtc_tc/config.json b/src/sonic-pit/pit-sysdiag/cases/rtc_tc/config.json
new file mode 100644
index 000000000000..baa81c1841fe
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/cases/rtc_tc/config.json
@@ -0,0 +1,6 @@
+{
+ "name": "rtc-test",
+ "description": "Check RTC function",
+ "type": "auto",
+ "tags": ["manufacture", "delivery", "pa", "emc"]
+}
diff --git a/src/sonic-pit/pit-sysdiag/cases/sensor_tc/config.json b/src/sonic-pit/pit-sysdiag/cases/sensor_tc/config.json
new file mode 100644
index 000000000000..9da2d1d588dc
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/cases/sensor_tc/config.json
@@ -0,0 +1,6 @@
+{
+ "name": "sensor-test",
+ "description": "Check sensors health",
+ "type": "auto",
+ "tags": ["manufacture", "delivery", "pa", "power", "emc"]
+}
diff --git a/src/sonic-pit/pit-sysdiag/cases/ssd_tc/config.json b/src/sonic-pit/pit-sysdiag/cases/ssd_tc/config.json
new file mode 100644
index 000000000000..a7f83ca9694a
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/cases/ssd_tc/config.json
@@ -0,0 +1,6 @@
+{
+ "name": "ssd-test",
+ "description": "Check SSD capacity",
+ "type": "auto",
+ "tags": ["manufacture", "delivery", "pa", "emc", "power"]
+}
diff --git a/src/sonic-pit/pit-sysdiag/config/platform/x86_64-alibaba_as14-40d-cl-r0/case_config.json b/src/sonic-pit/pit-sysdiag/config/platform/x86_64-alibaba_as14-40d-cl-r0/case_config.json
new file mode 100644
index 000000000000..00e765bf6f8f
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/config/platform/x86_64-alibaba_as14-40d-cl-r0/case_config.json
@@ -0,0 +1,52 @@
+{
+ "fan_info":{
+ "position": "bmc",
+ "count": 6,
+ "direction": "in",
+ "ratio_target": [10, 80, 20],
+ "speed_tolerance": 1000,
+ "speed_max": 20000,
+ "speed_min": 0,
+ "motor_count": 2
+ },
+ "psu_info":{
+ "position": "bmc",
+ "count": 2,
+ "in_power_min": 0,
+ "in_power_max": 0,
+ "in_vol_min": 0,
+ "in_vol_max": 0,
+ "in_curr_min": 0,
+ "in_curr_max": 0,
+ "out_power_min": 0,
+ "out_power_max": 0,
+ "out_vol_min": 0,
+ "out_vol_max": 0,
+ "out_curr_min": 0,
+ "out_curr_max": 0
+ },
+ "cpu_info": {
+ "Model name": "Intel(R) Xeon(R) CPU D-1533N @ 2.10GHz",
+ "BogoMIPS": 4189.0,
+ "CPU(s)": 6,
+ "CPU MHz": 2100.0
+ },
+ "memory_free_size": 100,
+ "rtc_info":{
+ "delay_time": 5,
+ "max_time_diff": 1
+ },
+ "ssd_test_size": "100M",
+ "ssd_bom": [
+ {
+ "model": "AF2MA31DTDLT240A",
+ "size": "240 GB"
+ },
+ {
+ "model": "MTFDDAV240TDS",
+ "size": "240 GB"
+ }
+ ],
+ "server_ip": "192.0.0.3",
+ "bmc_ip": "240.1.1.1"
+}
diff --git a/src/sonic-pit/pit-sysdiag/config/platform/x86_64-alibaba_as14-40d-cl-r0/platform_config.json b/src/sonic-pit/pit-sysdiag/config/platform/x86_64-alibaba_as14-40d-cl-r0/platform_config.json
new file mode 100644
index 000000000000..7e3768d00daf
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/config/platform/x86_64-alibaba_as14-40d-cl-r0/platform_config.json
@@ -0,0 +1,10 @@
+{
+ "test_cases": [
+ "fan_tc",
+ "psu_tc",
+ "cpu_tc",
+ "memory_tc",
+ "rtc_tc",
+ "sensor_tc"
+ ]
+}
diff --git a/src/sonic-pit/pit-sysdiag/src/cpu_tc.py b/src/sonic-pit/pit-sysdiag/src/cpu_tc.py
new file mode 100644
index 000000000000..f7f3e139232a
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/src/cpu_tc.py
@@ -0,0 +1,107 @@
+from function import run_command
+from test_case import TestCaseCommon
+from errcode import E
+import traceback
+
+
+# CPU test class
+class CPUTC(TestCaseCommon):
+ def __init__(self, index, logger, platform_cfg_file, case_cfg_file=None):
+ MODULE_NAME = "cpu_tc"
+ TestCaseCommon.__init__(self, index, MODULE_NAME, logger, platform_cfg_file, case_cfg_file)
+ self.cpu_info_dict = None
+ try:
+ if self.platform_cfg_json and 'cpu_info' in self.platform_cfg_json.keys():
+ self.cpu_info_dict = self.platform_cfg_json['cpu_info']
+ except Exception as e:
+ self.logger.log_err(str(e), True)
+ self.logger.log_err(traceback.format_exc())
+
+ def test_cpu_info(self, also_print_console=False):
+ ret = E.OK
+ self.logger.log_info("check_cpu_info start", also_print_console)
+
+ cmd = "lscpu | head -n25"
+ status, log = run_command(cmd)
+ if status != 0 or len(log) <= 0:
+ reason = "Failed, get cpu info failed, command {}, status {}, log {}".format( \
+ cmd, status, log)
+ self.log_reason(reason)
+ ret = E.ECPU3005
+ else:
+ lines = log.splitlines()
+ expected_cpu_model = self.cpu_info_dict.get('Model name')
+ expected_bogomips = self.cpu_info_dict.get('BogoMIPS')
+ expected_cpu_num = self.cpu_info_dict.get('CPU(s)')
+ expected_cpu_mhz = self.cpu_info_dict.get('CPU MHz')
+ self.logger.log_dbg("Expected value: {}, {}, {}, {}".format(expected_cpu_model, \
+ expected_bogomips, expected_cpu_num, expected_cpu_mhz))
+ for line in lines:
+ cols = line.strip().split(":")
+ if len(cols) < 2:
+ continue
+
+ if expected_cpu_model and cols[0] == "Model name":
+ if cols[1].strip() != expected_cpu_model:
+ reason = "Failed, CPU model name {}(expected {})".format( \
+ cols[1].strip(), expected_cpu_model)
+ self.log_reason(reason)
+ ret = E.ECPU3001
+ else:
+ msg = "Model name {} =======> OK".format(cols[1].strip())
+ self.logger.log_info(msg)
+
+ if expected_bogomips and cols[0] == 'BogoMIPS':
+ read_bogomips = float(cols[1].strip())
+ conf_bogomips = float(expected_bogomips)
+ if read_bogomips <= (conf_bogomips * 0.99) or \
+ read_bogomips >= conf_bogomips * 1.01:
+ reason = "Failed, BogoMIPS {}(expected {})".format( \
+ read_bogomips, expected_bogomips)
+ self.log_reason(reason)
+ ret = E.ECPU3001
+ else:
+ msg = "BogoMIPS {} ===== OK".format(read_bogomips)
+ self.logger.log_info(msg)
+
+ if expected_cpu_num and cols[0] == 'CPU(s)':
+ num_cpus = int(cols[1].strip())
+ if num_cpus != self.cpu_info_dict.get('CPU(s)'):
+ reason = "Failed, CPU number {}(expected {})".format( \
+ num_cpus, expected_cpu_num)
+ self.fail_reason.append(reason)
+ ret = E.ECPU3001
+ else:
+ msg = "Number of CPUs {} ===== OK".format(num_cpus)
+ self.logger.log_info(msg)
+
+ if expected_cpu_mhz and cols[0] == 'CPU MHz':
+ read_cpu_mhz = float(cols[1].strip())
+ conf_cpu_mhz = float(expected_cpu_mhz)
+ if read_cpu_mhz <= (conf_cpu_mhz * 0.99) or \
+ read_cpu_mhz >= (conf_cpu_mhz * 1.01):
+ reason = "Failed, CPU MHz {}(expected {})".format( \
+ read_cpu_mhz, expected_cpu_mhz)
+ self.log_reason(reason)
+ ret = E.ECPU3001
+ else:
+ msg = "CPU frequency {} ===== OK".format(read_cpu_mhz)
+ self.logger.log_info(msg)
+
+ if ret != E.OK:
+ self.logger.log_err("test cpu info done, FAILED.", also_print_console)
+ else:
+ self.logger.log_info("test cpu info done, PASS.", also_print_console)
+
+ return ret
+
+ def run_test(self, *argv):
+ try:
+ ret = self.test_cpu_info(True)
+ return ret
+ except Exception as e:
+ self.logger.log_err("test cpu info got exception: {}".format(str(e)))
+ self.logger.log_err(traceback.format_exc())
+ return ret
+
+ return E.OK
diff --git a/src/sonic-pit/pit-sysdiag/src/memory_tc.py b/src/sonic-pit/pit-sysdiag/src/memory_tc.py
new file mode 100644
index 000000000000..6e44685b56a8
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/src/memory_tc.py
@@ -0,0 +1,188 @@
+from function import run_command
+from test_case import TestCaseCommon
+from errcode import E
+import traceback
+
+
+X86_ARCH_LIST = ["x86", "x86_64", "amd", "amd64"]
+ARM_ARCH_LIST = ["arm", "arm64"]
+
+
+# memory test class
+class MEMORYTC(TestCaseCommon):
+ def __init__(self, index, logger, platform_cfg_file, case_cfg_file=None):
+ MODULE_NAME = "memory_tc"
+ TestCaseCommon.__init__(self, index, MODULE_NAME, logger, platform_cfg_file, case_cfg_file)
+ self.arch = "x86" # default arch
+ self.memory_bom_list = None # default conf
+ self.free_mem_size = 100 # free memory size in kB. if free mem is less than free_mem_size, fail.
+ try:
+ if self.platform_cfg_json and 'memory_bom' in self.platform_cfg_json.keys():
+ self.memory_bom_list = self.platform_cfg_json['memory_bom']
+ if self.platform_cfg_json and 'arch' in self.platform_cfg_json.keys():
+ self.arch = self.platform_cfg_json['arch']
+ if self.platform_cfg_json and 'memory_free_size' in self.platform_cfg_json.keys():
+ self.free_mem_size = int(self.platform_cfg_json['memory_free_size'])
+ except Exception as e:
+ self.logger.log_err(str(e), True)
+
+ def _memory_info_check_by_dmidecode(self):
+ ret = E.OK
+ pn_list = []
+ vendor_list = []
+
+ status, out = run_command("dmidecode -t 17")
+ if status != 0 or len(out) <= 0:
+ self.fail_reason.append("dmidecode exec failed.")
+ ret = E.EMEM4001
+ else:
+ for item in out.splitlines():
+ self.logger.log_info(item)
+ if ":" in item:
+ key = item.split(":")[0].strip()
+ value = item.split(":")[1].strip()
+ if key == 'Part Number' and value != 'NO DIMM':
+ pn_list.append(value)
+ if key == 'Manufacturer' and value != 'NO DIMM':
+ vendor_list.append(value)
+
+ # memory bom check
+ if self.memory_bom_list:
+ memory_matched = False
+ for memory_bom in self.memory_bom_list:
+ if memory_bom["manufacturer"] in vendor_list and memory_bom["pn"] in pn_list:
+ memory_matched = True
+ break
+ if not memory_matched:
+ ret = E.EMEM4001
+ self.fail_reason.append("memory not matched")
+
+ return ret
+
+ def _arm_memory_ecc_check(self):
+ return E.OK
+
+ def _x86_memory_ecc_check(self):
+ status, out = run_command("edac-util -v")
+ self.logger.log_info(out)
+ if status:
+ self.fail_reason.append("memort ecc occured")
+ return E.EMEM4003
+ else:
+ return E.OK
+
+ def test_memory_info(self):
+ self.logger.log_info("test memory info start")
+
+ if self.arch in X86_ARCH_LIST:
+ ret = self._memory_info_check_by_dmidecode()
+ elif self.arch in ARM_ARCH_LIST:
+ ret = E.OK
+
+ if ret != E.OK:
+ self.logger.log_err("test memory info done, FAILED.")
+ else:
+ self.logger.log_err("test memory info done, PASS.")
+
+ return ret
+
+ def test_memory_capacity(self):
+ self.logger.log_info("test memory capacity start")
+ ret = E.OK
+ status, out = run_command("free -t")
+ self.logger.log_info(out)
+ if status:
+ self.log_reason("exec failed, cmd: free -t")
+ ret = E.EIO
+ else:
+ for line in out.splitlines():
+ if line.find("Total") >= 0:
+ free_mem = line.split()[3]
+ if int(free_mem) < self.free_mem_size:
+ self.log_reason("free memory less than {}kB".format(self.free_mem_size))
+ ret = E.EMEM4004
+
+ if ret != E.OK:
+ self.logger.log_err("test memory capacity done, FAILED.")
+ else:
+ self.logger.log_err("test memory capacity done, PASS.")
+
+ return ret
+
+ def test_memory_stress(self):
+ self.logger.log_info("test memory stress start")
+
+ ret = E.OK
+ status, out = run_command("memtester 1M 1")
+ self.logger.log_info(out)
+ if status:
+ reason = "exec failed, cmd: memtester 1M 1"
+ self.log_reason(reason)
+ ret = E.EMEM4002
+
+ if ret != E.OK:
+ self.logger.log_err("test memory stress done, FAILED!")
+ else:
+ self.logger.log_err("test memory stress done, PASS!")
+
+ return ret
+
+ def test_memory_ecc(self):
+ self.logger.log_info("test memory ecc start")
+
+ if self.arch in X86_ARCH_LIST:
+ ret = self._x86_memory_ecc_check()
+ elif self.arch in ARM_ARCH_LIST:
+ ret = self._arm_memory_ecc_check()
+
+ if ret != E.OK:
+ self.logger.log_err("test memory stress done, FAILED.")
+ else:
+ self.logger.log_err("test memory stress done, PASS.")
+
+ return ret
+
+ def run_test(self, *argv):
+ final_ret = E.OK
+
+ try:
+ ret = self.test_memory_info()
+ if ret != E.OK:
+ final_ret = ret
+ except Exception as e:
+ reason = "test memory info exception {}, FAILED".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+ final_ret = E.EFAIL
+
+ try:
+ ret = self.test_memory_capacity()
+ if ret != E.OK:
+ final_ret = ret
+ except Exception as e:
+ reason = "test memory capacity exception {}, FAILED".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+ final_ret = E.EFAIL
+
+ try:
+ ret = self.test_memory_stress()
+ if ret != E.OK:
+ final_ret = ret
+ except Exception as e:
+ reason = "test memory by memtester exception {}, FAILED".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+ final_ret = E.EFAIL
+
+ try:
+ ret = self.test_memory_ecc()
+ if ret != E.OK:
+ final_ret = ret
+ except Exception as e:
+ reason = "test memory ecc exception {}, FAILED".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+ final_ret = E.EFAIL
+
+ return final_ret
diff --git a/src/sonic-pit/pit-sysdiag/src/oob_tc.py b/src/sonic-pit/pit-sysdiag/src/oob_tc.py
new file mode 100644
index 000000000000..bcac0d5540ea
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/src/oob_tc.py
@@ -0,0 +1,140 @@
+import sys
+from test_case import TestCaseCommon
+from errcode import E
+from function import run_command, load_platform_util_module
+import traceback
+
+
+class OOBTC(TestCaseCommon):
+ __PLATFORM_SPECIFIC_MODULE_NAME = "bmcutil"
+ __PLATFORM_SPECIFIC_CLASS_NAME = "BmcUtil"
+ def __init__(self, index, logger, platform_cfg_file, case_cfg_file=None):
+ MODULE_NAME = "oob_tc"
+ TestCaseCommon.__init__(self, index, MODULE_NAME, logger, platform_cfg_file, case_cfg_file)
+ self.server_ip = None # external ip
+ self.bmc_ip = None # BMC internal ip
+
+ try:
+ if self.platform_cfg_json and 'server_ip' in self.platform_cfg_json.keys():
+ self.server_ip = self.platform_cfg_json['server_ip']
+ if self.platform_cfg_json and 'bmc_ip' in self.platform_cfg_json.keys():
+ self.bmc_ip = self.platform_cfg_json['bmc_ip']
+ except Exception as e:
+ self.logger.log_err(str(e))
+ self.logger.log_err(traceback.format_exc())
+
+ bmc_module = load_platform_util_module(self.__PLATFORM_SPECIFIC_MODULE_NAME)
+ try:
+ bmc_util_class = getattr(bmc_module, self.__PLATFORM_SPECIFIC_CLASS_NAME)
+ self.bmc_util = bmc_util_class()
+ except AttributeError as e:
+ self.logger.log_err(str(e), True)
+ sys.exit(1)
+
+ def cpu_ping_bmc_test(self, also_print_console=True):
+ self.logger.log_info("cpu ping bmc test start")
+
+ ret = E.OK
+ if not self.bmc_ip:
+ self.logger.log_dbg("BMC not exist, skip")
+ else:
+ count = 5
+ cmd = "ping %s -c %d -I eth0.4088 | grep received" % (self.bmc_ip, count)
+ status, output = run_command(cmd)
+ self.logger.log_info(output, also_print_console)
+
+ if output.find(" 0% packet loss") > 0:
+ ret = E.OK
+ else:
+ self.log_reason("cpu ping bmc lost packages")
+ ret = E.EMGMT11003
+
+ if ret != E.OK:
+ self.logger.log_err("cpu ping bmc test done, FAILED.", also_print_console)
+ else:
+ self.logger.log_err("cpu ping bmc test done, PASS.", also_print_console)
+
+ return ret
+
+ def cpu_ping_server_test(self, also_print_console=True):
+ self.logger.log_info("cpu ping server test start")
+
+ ret = E.OK
+ if not self.server_ip:
+ self.logger.log_dbg("External server ip not set, skip")
+ else:
+ count = 5
+ ping_cmd = "ping %s -c %d -I eth0 | grep received" % (self.server_ip, count)
+ status, output = run_command(ping_cmd)
+ self.logger.log_info(output, also_print_console)
+
+ if output.find(" 0% packet loss") > 0:
+ ret = E.OK
+ else:
+ self.log_reason("cpu ping server lost packages")
+ ret = E.EMGMT11002
+
+ if ret != E.OK:
+ self.logger.log_err("FAIL!", also_print_console)
+ else:
+ self.logger.log_info("PASS.", also_print_console)
+
+ return ret
+
+ def bmc_ping_server_test(self, also_print_console=True):
+ self.logger.log_info("bmc ping server test start")
+
+ count = 5
+ ping_cmd = "ping %s -c %d -I eth0 | grep received" % (self.server_ip, count)
+ try:
+ status, output = self.bmc_util.exec_raw_cmd(ping_cmd)
+ self.logger.log_info(output[0], also_print_console)
+
+ if status and output[0].find(" 0% packet loss") > 0:
+ ret = E.OK
+ else:
+ self.log_reason.append("bmc ping server lost packages")
+ ret = E.EMGMT11004
+ except Exception as e:
+ self.log_reason("bmc ping server exception: {}".format(str(e)))
+ self.logger.log_err(traceback.format_exc())
+ ret = E.EMGMT11004
+
+ if ret != E.OK:
+ self.logger.log_err("FAIL!", also_print_console)
+ else:
+ self.logger.log_info("PASS.", also_print_console)
+
+ return ret
+
+ def run_test(self, *argv):
+ final_ret = E.OK
+
+ try:
+ ret = self.cpu_ping_bmc_test()
+ if ret != E.OK:
+ final_ret = ret
+ except Exception as e:
+ reason = "cpu ping bmc test exception: {}".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+
+ try:
+ ret = self.cpu_ping_server_test()
+ if ret != E.OK:
+ final_ret = ret
+ except Exception as e:
+ reason = "cpu ping server test exception: {}".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+
+ try:
+ ret = self.bmc_ping_server_test()
+ if ret != E.OK:
+ final_ret = ret
+ except Exception as e:
+ reason = "bmc ping server test exception: {}".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+
+ return ret
diff --git a/src/sonic-pit/pit-sysdiag/src/rtc_tc.py b/src/sonic-pit/pit-sysdiag/src/rtc_tc.py
new file mode 100644
index 000000000000..64deb80b131d
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/src/rtc_tc.py
@@ -0,0 +1,144 @@
+# -*- coding:utf-8
+import time
+from test_case import TestCaseCommon
+from function import run_command
+from errcode import E
+import traceback
+
+class RTCTC(TestCaseCommon):
+ def __init__(self, index, logger, platform_cfg_file, case_cfg_file=None):
+ MODULE_NAME = "rtc_tc"
+ TestCaseCommon.__init__(self, index, MODULE_NAME, logger,
+ platform_cfg_file, case_cfg_file)
+ self.rtc_info_dict = None
+ try:
+ if self.platform_cfg_json and \
+ "rtc_info" in self.platform_cfg_json.keys():
+ self.rtc_info_dict = self.platform_cfg_json["rtc_info"]
+ except Exception as e:
+ self.logger.log_err(str(e), True)
+
+ def read_rtc_test(self, also_print_console=False):
+ ret = E.OK
+ self.logger.log_info("read_rtc_test start")
+
+ cmd = "hwclock -r"
+ code, out = run_command(cmd)
+ if code:
+ reason = "Failed to exec 'hwclock -r'"
+ ret = E.ERTC12001
+ self.log_reason(reason)
+ self.logger.log_dbg(out, also_print_console)
+
+ if ret != E.OK:
+ self.logger.log_info("read_rtc_test done, FAILED.")
+ else:
+ self.logger.log_info("read_rtc_test done, PASS.")
+ return ret
+
+ def rtc_precision_test(self, wait_time=5, also_print_console=False):
+ ret = E.OK
+ rtc_since_epoch_file = "/sys/class/rtc/rtc0/since_epoch"
+
+ self.logger.log_info("rtc_precision_test start")
+ try:
+ with open(rtc_since_epoch_file, "r") as f:
+ start_sec = int(f.read())
+ timeArraystart = time.localtime(start_sec)
+ otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArraystart)
+ log_msg = "rtc time: {}".format(otherStyleTime)
+ self.logger.log_info(log_msg, also_print_console)
+ log_msg = "system time: {}".format(
+ time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
+ self.logger.log_info(log_msg, also_print_console)
+
+ self.logger.log_info("time sleep: " + str(wait_time), also_print_console)
+ time.sleep(wait_time)
+
+ with open(rtc_since_epoch_file, "r") as f:
+ end_sec = int(f.read())
+ timeArrayend = time.localtime(end_sec)
+ otherStyleTime = time.strftime("%Y-%m-%d %H:%M:%S", timeArrayend)
+ log_msg = "rtc time: {}".format(otherStyleTime)
+ self.logger.log_info(log_msg, also_print_console)
+ log_msg = "system time: {}".format(
+ time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
+ self.logger.log_info(log_msg, also_print_console)
+
+ timeCompare = end_sec - start_sec
+ self.logger.log_info("time difference: " + str(timeCompare),
+ also_print_console)
+ if timeCompare < (wait_time - 1) or timeCompare > (wait_time + 1):
+ self.log_reason("{} beyond {}".format(timeCompare, wait_time))
+ ret = E.ERTC12002
+ except IOError as e:
+ self.fail_reason.append(str(e))
+ ret = E.ERTC12001
+
+ if ret != E.OK:
+ self.logger.log_info("rtc_precision_test done, FAILED.")
+ else:
+ self.logger.log_info("rtc_precision_test done, PASS.")
+
+ return ret
+
+ def rtc_functional_test(self, also_print_console=False):
+ self.logger.log_info("rtc_functional_test start")
+ current_secs_before = int(time.time())
+ delay_interval = self.rtc_info_dict["delay_time"]
+ self.logger.log_info(
+ "please waiting {} sec".format(delay_interval), also_print_console)
+ time.sleep(delay_interval)
+ time_end = time.strftime("%Y-%m-%d %H:%M:%S")
+ self.logger.log_info("current time: %s" % time_end, also_print_console)
+ current_secs_after = int(time.time())
+ delta_interval = current_secs_after - current_secs_before
+ if abs(delta_interval - delay_interval) > self.rtc_info_dict["max_time_diff"]:
+ self.log_reason("time out of sync")
+ ret = E.ERTC12002
+ else:
+ ret = E.OK
+
+ if ret != E.OK:
+ self.logger.log_err("rtc_functional_test FAILED")
+ else:
+ self.logger.log_info("rtc_functional_test PASS.")
+
+ return ret
+
+ def run_test(self, *argv):
+ # RTC functional test
+ final_result = E.OK
+ try:
+ ret = self.rtc_functional_test()
+ if ret != E.OK:
+ final_result = ret
+ except Exception as e:
+ reason = "Failed, {} rtc_functional_test exception: {}".format(self.get_tc_name(), str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+ final_result = E.EFAIL
+
+ # RTC read test
+ try:
+ ret = self.read_rtc_test()
+ if ret != E.OK:
+ final_result = ret
+ except Exception as e:
+ reason = "Failed, {} read_rtc_test exception: {}".format(self.get_tc_name(), str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+ final_result = E.EFAIL
+
+ # RTC precision test
+ try:
+ ret = self.rtc_precision_test(5)
+ if ret != E.OK:
+ final_result = ret
+ except Exception as e:
+ reason = "Failed, {} rtc_precision_test exception: {}".format(self.get_tc_name(), str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+ final_result = E.EFAIL
+
+ return final_result
diff --git a/src/sonic-pit/pit-sysdiag/src/sensor_tc.py b/src/sonic-pit/pit-sysdiag/src/sensor_tc.py
new file mode 100644
index 000000000000..a65f8059aea3
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/src/sensor_tc.py
@@ -0,0 +1,121 @@
+import sys
+from tabulate import tabulate
+from test_case import TestCaseCommon
+from function import load_platform_util_module
+from errcode import E
+import traceback
+
+
+class SENSORTC(TestCaseCommon):
+ __PLATFORM_SPECIFIC_MODULE_NAME = "sensorutil"
+ __PLATFORM_SPECIFIC_CLASS_NAME = "SensorUtil"
+ def __init__(self, index, logger, platform_cfg_file, case_cfg_file=None):
+ MODULE_NAME = "sensor_tc"
+ self.sensor_util = None
+ TestCaseCommon.__init__(self, index, MODULE_NAME, logger, platform_cfg_file, case_cfg_file)
+
+ sensor_module = load_platform_util_module(self.__PLATFORM_SPECIFIC_MODULE_NAME)
+ try:
+ platform_util_class = getattr(sensor_module, self.__PLATFORM_SPECIFIC_CLASS_NAME)
+ self.sensor_util = platform_util_class()
+ except AttributeError as e:
+ self.logger.log_err(str(e), True)
+ sys.exit(1)
+
+ def load_sensor_info(self):
+ sensor_dict = {}
+ if self.sensor_util:
+ sensor_dict = self.sensor_util.get_all()
+ return sensor_dict
+
+ def sensor_verify(self, sensor_dict):
+ self.logger.log_info("sensor verify start")
+ if not sensor_dict:
+ self.log_reason("get sensors failed!")
+ return E.EFAIL
+
+ ret = E.OK
+ header = ["Sensor", 'InputName', 'Status', 'Value', 'LowThd', 'HighThd']
+ status_table = []
+
+ try:
+ for sensor_name, sensor_obj in sensor_dict.items():
+ if sensor_name == 'Number':
+ continue
+
+ if not isinstance(sensor_obj, dict):
+ continue
+
+ si_names = [k for k in sensor_obj.keys()]
+ si_names.sort()
+ for si_name in si_names:
+ si = sensor_obj[si_name]
+ sval = si.get('Value')
+ slow = si.get('LowThd')
+ shigh = si.get("HighThd")
+ sunit = si.get('Unit')
+ sdesc = si.get('Description')
+ fault = False
+
+ if not sunit:
+ sunit = ""
+ stype = si.get('Type')
+ if stype:
+ type2unit = {"amp": "A", "voltage": "V", "power": "W",
+ "temperature": "C", "RPM": "RPM"}
+ if stype in type2unit:
+ sunit = type2unit[stype]
+
+ try:
+ sval = float(sval)
+ except:
+ sval = 0.0
+ fault = True
+
+ try:
+ slow = float(slow)
+ except:
+ slow = 0.0
+ fault = True
+
+ try:
+ shigh = float(shigh)
+ except:
+ shigh = 0.0
+ fault = True
+
+ status = 'NOT_OK'
+ if fault == False and sval >= slow and sval <= shigh:
+ status = 'OK'
+ else:
+ ret = E.ESSR7003
+ self.log_reason("{} out of threshold".format(si_name))
+
+ status_table.append([sensor_name, si_name, status, "{} {}".format(sval, sunit), \
+ "{} {}".format(slow, sunit), "{} {}".format(shigh, sunit)])
+ except Exception as e:
+ reason = "sensor verify got exception: {}".format(str(e))
+ self.fail_reason.append(str(e))
+ self.logger.log_err(traceback.format_exc())
+ ret = E.ESSR7002
+
+ if len(status_table) > 0:
+ status_table.sort()
+ self.logger.log_info(tabulate(status_table, header, tablefmt="simple"))
+
+ if ret != E.OK:
+ self.logger.log_err("sensor verify done, FAILED.")
+ else:
+ self.logger.log_info("sensor verify done, PASS.")
+
+ return ret
+
+ def run_test(self, *argv):
+ try:
+ sensor_dict = self.load_sensor_info()
+ ret = self.sensor_verify(sensor_dict)
+ except Exception as e:
+ reason = "load_sensor/sensor_verify got exception: {}".format(str(e))
+ self.log_reason(reason)
+
+ return ret
diff --git a/src/sonic-pit/pit-sysdiag/src/ssd_tc.py b/src/sonic-pit/pit-sysdiag/src/ssd_tc.py
new file mode 100644
index 000000000000..9d86819d5ab5
--- /dev/null
+++ b/src/sonic-pit/pit-sysdiag/src/ssd_tc.py
@@ -0,0 +1,224 @@
+import os
+import re
+import subprocess
+from test_case import TestCaseCommon
+from errcode import *
+from function import run_command
+import traceback
+
+
+class SSDTC(TestCaseCommon):
+ def __init__(self, index, logger, platform_cfg_file, case_cfg_file=None):
+ MODULE_NAME = "ssd_tc"
+ TestCaseCommon.__init__(self, index, MODULE_NAME, logger, platform_cfg_file, case_cfg_file)
+ self.test_size = 1 # unit: MBytes, default
+ self.ssd_bom_list = None # default
+
+ try:
+ if self.platform_cfg_json and 'ssd_test_size' in self.platform_cfg_json.keys():
+ size = self.platform_cfg_json['ssd_test_size']
+ if size.endswith("m") or size.endswith("M"):
+ self.test_size = int(size.strip("mM"))
+ else:
+ self.test_size = int(size)
+ if self.platform_cfg_json and 'ssd_bom' in self.platform_cfg_json.keys():
+ self.ssd_bom_list = self.platform_cfg_json['ssd_bom']
+ except Exception as e:
+ self.logger.log_err(str(e))
+
+ def search_dir_by_name(self, name, dir):
+ result = []
+ try:
+ files = os.listdir(dir)
+ for file in files:
+ if name in file:
+ result.append(os.path.join(dir, file))
+ except Exception as e:
+ pass
+ return result
+
+ def get_ssd_location(self):
+ ret = NO_ERR
+ dir = "/sys/block/"
+ spect = "sd"
+ ssdpath = []
+ result = self.search_dir_by_name(spect, dir)
+ if len(result) <= 0:
+ ret = ABSENT_ERR
+ else:
+ for item in result:
+ with open(os.path.join(item, "removable"), 'r') as fd:
+ value = fd.read()
+ if value.strip() == "0": # found ssd
+ ssd_disk = "/dev/" + os.path.basename(item)
+ ssdpath.append(ssd_disk)
+ if not ssdpath: # not found ssd
+ self.logger.log_err("no ssd found")
+ ret = ABSENT_ERR
+
+ if ret:
+ self.log_reason("ssd not found!")
+
+ return ret, ssdpath
+
+ def test_ssd_info(self, ssdpath):
+ ret = E.OK
+ ssd = {}
+ self.logger.log_info("test ssd info start")
+ for path in ssdpath:
+ status, out = run_command("smartctl -i {}".format(path))
+ self.logger.log_info(out)
+ if status:
+ err = "Read ssd {} info failed!".format(path)
+ self.log_reason(err)
+ ret = E.ESSD2001
+ else:
+ if self.ssd_bom_list:
+ matched = False
+ model_match = False
+ size_match = False
+ lines = out.splitlines()
+ for ssd_bom in self.ssd_bom_list:
+ expected_model = ssd_bom["model"]
+ expected_size = ssd_bom["size"]
+ for line in lines:
+ if line.startswith("Device Model:"):
+ if line.find(expected_model) != -1:
+ model_match = True
+ continue
+ elif line.startswith("User Capacity"):
+ if line.find(expected_size) != -1:
+ size_match = True
+ continue
+ if model_match and size_match:
+ matched = True
+ break
+
+ # Does not match any of expected BOM
+ if not matched:
+ ret = E.ESSD2001
+ self.fail_reason.append("SSD model/size not match")
+
+ if ret != E.OK:
+ self.logger.log_err("test ssd info done, FAILED.")
+ else:
+ self.logger.log_err("test ssd info done, PASS.")
+
+ return ret
+
+ def ssd_health_check(self, ssdpath):
+ """
+ SSD SMART overall-health self-assessment test
+ """
+ ret = E.OK
+ self.logger.log_info("ssd health check start")
+ for path in ssdpath:
+ status, out = run_command("smartctl -H {} | grep result".format(path))
+ self.logger.log_info(out)
+
+ if out.find("PASSED") == -1:
+ reason = "ssd {} health check failed!".format(path)
+ ret = E.ESSD2004
+ self.log_reason(err)
+
+ if ret != E.OK:
+ self.logger.log_err("ssd health check done, FAILED.")
+ else:
+ self.logger.log_err("ssd health check done, PASS.")
+
+ return ret
+
+ def ssd_read_test(self):
+ self.logger.log_info("ssd read test start")
+
+ bs_count = self.test_size * 64
+ cmd = "dd if=/dev/sda of=/dev/null bs=16k count=%d iflag=direct,nonblock" % bs_count
+ self.logger.log_dbg(cmd)
+ status, out = run_command(cmd)
+ if status:
+ err = "[{}] read test failed!".format(self.module_name)
+ self.log_reason.append(err)
+ else:
+ self.logger.log_info(out)
+
+ if status:
+ self.logger.log_err("ssd read test done, FAILED.")
+ ret = E.ESSD2002
+ else:
+ self.logger.log_info("ssd read test done, PASS.")
+ ret = E.OK
+
+ return ret
+
+ def ssd_write_test(self):
+ self.logger.log_info("ssd write test start")
+
+ bs_count = self.test_size * 64
+ cmd = "dd if=/dev/urandom of=/tmp/txtfile_ssd bs=16k count=%d oflag=direct,nonblock" % bs_count
+ self.logger.log_info(cmd)
+ status, out = run_command(cmd)
+ if status:
+ err = "[{}] write test failed!".format(self.module_name)
+ self.log_reason.append(err)
+ else:
+ self.logger.log_info(out)
+ os.remove("/tmp/txtfile_ssd")
+
+ if status:
+ self.logger.log_err("ssd write test done, FAILED.")
+ ret = E.ESSD2003
+ else:
+ self.logger.log_info("ssd write test done, PASS.")
+ ret = E.OK
+
+ return ret
+
+ def run_test(self, *argv):
+ final_ret = E.OK
+
+ try:
+ status, ssdpath = self.get_ssd_location()
+ if status:
+ final_ret = E.ESSD2001
+ except Exception as e:
+ reason = "get ssd location exception {}".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+
+ try:
+ ret = self.test_ssd_info(ssdpath)
+ if ret != E.OK:
+ final_ret = ret
+ except Exception as e:
+ reason = "ssd info check exception {}".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+
+ try:
+ ret = self.ssd_health_check(ssdpath)
+ if ret != E.OK:
+ final_ret = ret
+ except Exception as e:
+ reason = "ssd health check exception {}".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+
+ try:
+ ret = self.ssd_read_test()
+ if ret != E.OK:
+ final_ret = ret
+ except Exception as e:
+ reason = "ssd read test exception {}".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+
+ try:
+ ret = self.ssd_write_test()
+ if ret != E.OK:
+ final_ret = ret
+ except Exception as e:
+ reason = "ssd write test exception {}".format(str(e))
+ self.log_reason(reason)
+ self.logger.log_err(traceback.format_exc())
+
+ return final_ret
diff --git a/src/sonic-py-common/sonic_py_common/device_info.py b/src/sonic-py-common/sonic_py_common/device_info.py
index d35dfbeeb9fa..2a7713433148 100644
--- a/src/sonic-py-common/sonic_py_common/device_info.py
+++ b/src/sonic-py-common/sonic_py_common/device_info.py
@@ -826,3 +826,13 @@ def is_fast_reboot_enabled():
state_db.close(state_db.STATE_DB)
return fb_enable_state
+
+
+def is_frontend_port_present_in_host():
+ if is_supervisor():
+ return False
+ if is_multi_npu():
+ namespace_id = os.getenv("NAMESPACE_ID")
+ if not namespace_id:
+ return False
+ return True
diff --git a/src/sonic-swss b/src/sonic-swss
index a391ed0acc4e..a67f684f448d 160000
--- a/src/sonic-swss
+++ b/src/sonic-swss
@@ -1 +1 @@
-Subproject commit a391ed0acc4ed5b7a7d3a435f9a8429cc97af3db
+Subproject commit a67f684f448d45c5b6c4a7be6ccd4218d0ccd57e
diff --git a/src/sonic-swss-common b/src/sonic-swss-common
index c3a77cceb9eb..d6453bcb372b 160000
--- a/src/sonic-swss-common
+++ b/src/sonic-swss-common
@@ -1 +1 @@
-Subproject commit c3a77cceb9ebd8354d87e1a0e5e761d4a3840e50
+Subproject commit d6453bcb372b2fc93995ef6ccf5a40f0638506a8
diff --git a/src/sonic-yang-models/doc/Configuration.md b/src/sonic-yang-models/doc/Configuration.md
index 29e1272044a5..3590adea6b98 100644
--- a/src/sonic-yang-models/doc/Configuration.md
+++ b/src/sonic-yang-models/doc/Configuration.md
@@ -47,6 +47,7 @@ Table of Contents
* [Management VRF](#management-vrf)
* [MAP_PFC_PRIORITY_TO_QUEUE](#map_pfc_priority_to_queue)
* [MUX_CABLE](#mux_cable)
+ * [MUX_LINKMGR](#mux_linkmgr)
* [NEIGH](#neigh)
* [NTP Global Configuration](#ntp-global-configuration)
* [NTP and SYSLOG servers](#ntp-and-syslog-servers)
@@ -1403,6 +1404,25 @@ The **MUX_CABLE** table is used for dualtor interface configuration. The `cable_
}
```
+### MUX_LINKMGR
+The **MUX_LINKMGR** table is used for dualtor device configuration.
+```
+{
+ "MUX_LINKMGR": {
+ "LINK_PROBER": {
+ "interval_v4": "100",
+ "interval_v6": "1000",
+ "positive_signal_count": "1",
+ "negative_signal_count": "3",
+ "suspend_timer": "500",
+ "use_well_known_mac": "enabled",
+ "src_mac": "ToRMac",
+ "interval_pck_loss_count_update": "3"
+ }
+ }
+}
+```
+
### NEIGH
The **NEIGH** table is used to keep track of resolved and static neighbors.
diff --git a/src/sonic-yang-models/setup.py b/src/sonic-yang-models/setup.py
index eab62ddcab6c..d6aeb3e0d88e 100644
--- a/src/sonic-yang-models/setup.py
+++ b/src/sonic-yang-models/setup.py
@@ -133,6 +133,7 @@ def run(self):
'./yang-models/sonic-mirror-session.yang',
'./yang-models/sonic-mpls-tc-map.yang',
'./yang-models/sonic-mux-cable.yang',
+ './yang-models/sonic-mux-linkmgr.yang',
'./yang-models/sonic-neigh.yang',
'./yang-models/sonic-ntp.yang',
'./yang-models/sonic-nat.yang',
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 9d4c291cb081..37a8e024e4d4 100644
--- a/src/sonic-yang-models/tests/files/sample_config_db.json
+++ b/src/sonic-yang-models/tests/files/sample_config_db.json
@@ -2120,6 +2120,19 @@
}
},
+ "MUX_LINKMGR": {
+ "LINK_PROBER": {
+ "interval_v4": "100",
+ "interval_v6": "1000",
+ "positive_signal_count": "1",
+ "negative_signal_count": "3",
+ "suspend_timer": "500",
+ "use_well_known_mac": "enabled",
+ "src_mac": "ToRMac",
+ "interval_pck_loss_count_update": "3"
+ }
+ },
+
"NEIGH": {
"Vlan100|100.1.1.3": {
"family": "IPv4"
diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests/mux-linkmgr.json b/src/sonic-yang-models/tests/yang_model_tests/tests/mux-linkmgr.json
new file mode 100644
index 000000000000..3f399eec76cc
--- /dev/null
+++ b/src/sonic-yang-models/tests/yang_model_tests/tests/mux-linkmgr.json
@@ -0,0 +1,8 @@
+{
+ "MUX_LINKMGR_LINK_PROBER_INTERVAL_CHANGE": {
+ "desc": "Consume ICMP heartbeat interval and timeout config changes. "
+ },
+ "MUX_LINKMGR_LINK_PROBER_CHANGE_MAC_ADDR": {
+ "desc": "Use well-known mac and vlan mac as dst/src in linkmgrd link prober. "
+ }
+}
\ No newline at end of file
diff --git a/src/sonic-yang-models/tests/yang_model_tests/tests_config/mux-linkmgr.json b/src/sonic-yang-models/tests/yang_model_tests/tests_config/mux-linkmgr.json
new file mode 100644
index 000000000000..2210c169365c
--- /dev/null
+++ b/src/sonic-yang-models/tests/yang_model_tests/tests_config/mux-linkmgr.json
@@ -0,0 +1,26 @@
+{
+ "MUX_LINKMGR_LINK_PROBER_INTERVAL_CHANGE": {
+ "sonic-mux-linkmgr:sonic-mux-linkmgr": {
+ "sonic-mux-linkmgr:MUX_LINKMGR": {
+ "sonic-mux-linkmgr:LINK_PROBER":
+ {
+ "interval_v4": "1000",
+ "interval_v6": "10000",
+ "positive_signal_count": 3,
+ "negative_signal_count": 9
+ }
+ }
+ }
+ },
+ "MUX_LINKMGR_LINK_PROBER_CHANGE_MAC_ADDR": {
+ "sonic-mux-linkmgr:sonic-mux-linkmgr": {
+ "sonic-mux-linkmgr:MUX_LINKMGR": {
+ "sonic-mux-linkmgr:LINK_PROBER":
+ {
+ "use_well_known_mac": "enabled",
+ "src_mac": "VlanMac"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/sonic-yang-models/yang-models/sonic-mux-linkmgr.yang b/src/sonic-yang-models/yang-models/sonic-mux-linkmgr.yang
new file mode 100644
index 000000000000..93e605ea8e51
--- /dev/null
+++ b/src/sonic-yang-models/yang-models/sonic-mux-linkmgr.yang
@@ -0,0 +1,88 @@
+module sonic-mux-linkmgr {
+ namespace "http://github.com/sonic-net/sonic-mux-linkmgr";
+ prefix mux_linkmgr;
+ yang-version 1.1;
+
+ organization
+ "SONiC";
+
+ contact
+ "SONiC";
+
+ description
+ "SONiC DualToR Linkmgrd configuration data";
+
+ revision 2023-06-07 {
+ description
+ "Initial revision";
+ }
+
+ container sonic-mux-linkmgr {
+
+ container MUX_LINKMGR {
+
+ container LINK_PROBER {
+
+ leaf interval_v4 {
+ type uint32;
+ default 100;
+ units milliseconds;
+
+ description "IPv4 ICMP heartbeat interval. ";
+ }
+
+ leaf interval_v6 {
+ type uint32;
+ default 1000;
+ units milliseconds;
+
+ description "IPv6 ICMP heartbeat interval. ";
+ }
+
+ leaf positive_signal_count {
+ type uint32;
+ default 1;
+
+ description "Linkmgrd positive signal count. ";
+ }
+
+ leaf negative_signal_count {
+ type uint32;
+ default 3;
+
+ description "Linkmgrd negative signal count. ";
+ }
+
+ leaf suspend_timer {
+ type uint32;
+
+ description "ICMP heartbeat suspending timer, currently not in use. ";
+ }
+
+ leaf use_well_known_mac {
+ type enumeration {
+ enum enabled;
+ enum disabled;
+ }
+
+ description "ICMP heartbeat use well known mac as dst mac or not. ";
+ }
+
+ leaf src_mac {
+ type enumeration {
+ enum ToRMac;
+ enum VlanMac;
+ }
+
+ description "ICMP heartbeat use what mac as src mac. ";
+ }
+
+ leaf interval_pck_loss_count_update {
+ type uint32;
+
+ description "The frequency of streaming ICMP heartbeat loss data to telemetry. ";
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/systemd-sonic-generator/systemd-sonic-generator.c b/src/systemd-sonic-generator/systemd-sonic-generator.c
index 74f08fe39612..1d1a53dbcef9 100644
--- a/src/systemd-sonic-generator/systemd-sonic-generator.c
+++ b/src/systemd-sonic-generator/systemd-sonic-generator.c
@@ -569,7 +569,7 @@ int get_num_of_asic() {
str_num_asic = strtok_r(NULL, "=", &saveptr);
strip_trailing_newline(str_num_asic);
if (str_num_asic != NULL){
- sscanf(str_num_asic, "%d",&num_asic);
+ num_asic = strtol(str_num_asic, NULL, 10);
}
break;
}