From 88226fa69912f95fdf7e93784e4c145cc5a21455 Mon Sep 17 00:00:00 2001 From: Dawei Huang Date: Tue, 21 Jul 2026 22:40:58 -0500 Subject: [PATCH 1/4] gnmi: bind SmartSwitch DPU no-TLS services to midplane Signed-off-by: Dawei Huang --- dockers/docker-sonic-gnmi/gnmi-native.sh | 18 +++++++++++++++++- dockers/docker-sonic-telemetry/telemetry.sh | 18 +++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/dockers/docker-sonic-gnmi/gnmi-native.sh b/dockers/docker-sonic-gnmi/gnmi-native.sh index 9bd4c3125c7..669b22a9127 100755 --- a/dockers/docker-sonic-gnmi/gnmi-native.sh +++ b/dockers/docker-sonic-gnmi/gnmi-native.sh @@ -2,6 +2,7 @@ EXIT_TELEMETRY_VARS_FILE_NOT_FOUND=1 INCORRECT_TELEMETRY_VALUE=2 +MIDPLANE_ADDRESS_NOT_FOUND=3 TELEMETRY_VARS_FILE=/usr/share/sonic/templates/telemetry_vars.j2 ESCAPE_QUOTE="'\''" @@ -57,7 +58,22 @@ elif [ -n "$X509" ]; then TELEMETRY_ARGS+=" --ca_crt $CA_CRT" fi else - TELEMETRY_ARGS+=" --noTLS --bind_address 127.0.0.1" + DEVICE_TYPE=$(sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "type") + SWITCH_TYPE=$(sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "switch_type") + if [[ x"${DEVICE_TYPE}" == x"SmartSwitchDPU" || x"${SWITCH_TYPE}" == x"dpu" ]]; then + for _ in {1..30}; do + MIDPLANE_ADDRESS=$(ip -4 -o addr show dev eth0-midplane 2>/dev/null | awk '{sub(/\/.*/, "", $4); print $4; exit}') + [[ -n "${MIDPLANE_ADDRESS}" ]] && break + sleep 1 + done + if [[ -z "${MIDPLANE_ADDRESS}" ]]; then + echo "SmartSwitch DPU midplane IPv4 address not found" >&2 + exit $MIDPLANE_ADDRESS_NOT_FOUND + fi + TELEMETRY_ARGS+=" --noTLS --bind_address ${MIDPLANE_ADDRESS} --allow_no_tls_link_local" + else + TELEMETRY_ARGS+=" --noTLS --bind_address 127.0.0.1" + fi fi # If no configuration entry exists for TELEMETRY, create one default port diff --git a/dockers/docker-sonic-telemetry/telemetry.sh b/dockers/docker-sonic-telemetry/telemetry.sh index 6c215651bff..76d75ef36bc 100755 --- a/dockers/docker-sonic-telemetry/telemetry.sh +++ b/dockers/docker-sonic-telemetry/telemetry.sh @@ -23,6 +23,7 @@ fi EXIT_TELEMETRY_VARS_FILE_NOT_FOUND=1 INCORRECT_TELEMETRY_VALUE=2 +MIDPLANE_ADDRESS_NOT_FOUND=3 TELEMETRY_VARS_FILE=/usr/share/sonic/templates/telemetry_vars.j2 ESCAPE_QUOTE="'\''" @@ -77,7 +78,22 @@ elif [ -n "$X509" ]; then TELEMETRY_ARGS+=" --ca_crt $CA_CRT" fi else - TELEMETRY_ARGS+=" --noTLS --bind_address 127.0.0.1" + DEVICE_TYPE=$(sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "type") + SWITCH_TYPE=$(sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "switch_type") + if [[ x"${DEVICE_TYPE}" == x"SmartSwitchDPU" || x"${SWITCH_TYPE}" == x"dpu" ]]; then + for _ in {1..30}; do + MIDPLANE_ADDRESS=$(ip -4 -o addr show dev eth0-midplane 2>/dev/null | awk '{sub(/\/.*/, "", $4); print $4; exit}') + [[ -n "${MIDPLANE_ADDRESS}" ]] && break + sleep 1 + done + if [[ -z "${MIDPLANE_ADDRESS}" ]]; then + echo "SmartSwitch DPU midplane IPv4 address not found" >&2 + exit $MIDPLANE_ADDRESS_NOT_FOUND + fi + TELEMETRY_ARGS+=" --noTLS --bind_address ${MIDPLANE_ADDRESS} --allow_no_tls_link_local" + else + TELEMETRY_ARGS+=" --noTLS --bind_address 127.0.0.1" + fi fi # If no configuration entry exists for TELEMETRY, create one default port From d12f1a20bae52aad43e0fd3a5743e533e2e86100 Mon Sep 17 00:00:00 2001 From: Dawei Huang Date: Tue, 21 Jul 2026 23:18:46 -0500 Subject: [PATCH 2/4] submodule: update sonic-gnmi for DPU link-local bind Signed-off-by: Dawei Huang --- src/sonic-gnmi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-gnmi b/src/sonic-gnmi index 698e2eadc85..b55491b4b95 160000 --- a/src/sonic-gnmi +++ b/src/sonic-gnmi @@ -1 +1 @@ -Subproject commit 698e2eadc85bc992a690bc95e3c48f8cac298d18 +Subproject commit b55491b4b9570017dad9a7b1712e4c9a586372c8 From 9c97d9f69db34efc25e9bd7e7be6a608cf3dec7b Mon Sep 17 00:00:00 2001 From: Dawei Huang Date: Wed, 22 Jul 2026 09:55:05 -0500 Subject: [PATCH 3/4] gnmi: move DPU midplane binding into telemetry Signed-off-by: Dawei Huang --- dockers/docker-sonic-gnmi/gnmi-native.sh | 17 +++-------------- dockers/docker-sonic-gnmi/telemetry_vars.j2 | 7 ++++--- dockers/docker-sonic-telemetry/telemetry.sh | 17 +++-------------- .../docker-sonic-telemetry/telemetry_vars.j2 | 7 ++++--- src/sonic-gnmi | 2 +- 5 files changed, 15 insertions(+), 35 deletions(-) diff --git a/dockers/docker-sonic-gnmi/gnmi-native.sh b/dockers/docker-sonic-gnmi/gnmi-native.sh index 669b22a9127..74036d8cfa2 100755 --- a/dockers/docker-sonic-gnmi/gnmi-native.sh +++ b/dockers/docker-sonic-gnmi/gnmi-native.sh @@ -2,7 +2,6 @@ EXIT_TELEMETRY_VARS_FILE_NOT_FOUND=1 INCORRECT_TELEMETRY_VALUE=2 -MIDPLANE_ADDRESS_NOT_FOUND=3 TELEMETRY_VARS_FILE=/usr/share/sonic/templates/telemetry_vars.j2 ESCAPE_QUOTE="'\''" @@ -22,6 +21,7 @@ TELEMETRY_VARS=${TELEMETRY_VARS//[\']/\"} X509=$(echo $TELEMETRY_VARS | jq -r '.x509') GNMI=$(echo $TELEMETRY_VARS | jq -r '.gnmi') CERTS=$(echo $TELEMETRY_VARS | jq -r '.certs') +IS_SMART_SWITCH_DPU=$(echo $TELEMETRY_VARS | jq -r '.is_smart_switch_dpu') # Enable GRPC GO LOG export GRPC_GO_LOG_VERBOSITY_LEVEL=99 @@ -58,19 +58,8 @@ elif [ -n "$X509" ]; then TELEMETRY_ARGS+=" --ca_crt $CA_CRT" fi else - DEVICE_TYPE=$(sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "type") - SWITCH_TYPE=$(sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "switch_type") - if [[ x"${DEVICE_TYPE}" == x"SmartSwitchDPU" || x"${SWITCH_TYPE}" == x"dpu" ]]; then - for _ in {1..30}; do - MIDPLANE_ADDRESS=$(ip -4 -o addr show dev eth0-midplane 2>/dev/null | awk '{sub(/\/.*/, "", $4); print $4; exit}') - [[ -n "${MIDPLANE_ADDRESS}" ]] && break - sleep 1 - done - if [[ -z "${MIDPLANE_ADDRESS}" ]]; then - echo "SmartSwitch DPU midplane IPv4 address not found" >&2 - exit $MIDPLANE_ADDRESS_NOT_FOUND - fi - TELEMETRY_ARGS+=" --noTLS --bind_address ${MIDPLANE_ADDRESS} --allow_no_tls_link_local" + if [[ x"${IS_SMART_SWITCH_DPU}" == x"true" ]]; then + TELEMETRY_ARGS+=" --noTLS --no_tls_link_local_interface eth0-midplane" else TELEMETRY_ARGS+=" --noTLS --bind_address 127.0.0.1" fi diff --git a/dockers/docker-sonic-gnmi/telemetry_vars.j2 b/dockers/docker-sonic-gnmi/telemetry_vars.j2 index 4546ae5ab74..c1d27c441b8 100644 --- a/dockers/docker-sonic-gnmi/telemetry_vars.j2 +++ b/dockers/docker-sonic-gnmi/telemetry_vars.j2 @@ -1,5 +1,6 @@ { - "certs": {% if "certs" in GNMI.keys() %}{{ GNMI["certs"] }}{% else %}""{% endif %}, - "gnmi" : {% if "gnmi" in GNMI.keys() %}{{ GNMI["gnmi"] }}{% else %}""{% endif %}, - "x509" : {% if "x509" in DEVICE_METADATA.keys() %}{{ DEVICE_METADATA["x509"] }}{% else %}""{% endif %} + "certs": {% if GNMI is defined and "certs" in GNMI %}{{ GNMI["certs"] }}{% else %}""{% endif %}, + "gnmi" : {% if GNMI is defined and "gnmi" in GNMI %}{{ GNMI["gnmi"] }}{% else %}""{% endif %}, + "x509" : {% if "x509" in DEVICE_METADATA.keys() %}{{ DEVICE_METADATA["x509"] }}{% else %}""{% endif %}, + "is_smart_switch_dpu": {{ (DEVICE_METADATA["localhost"].get("type") == "SmartSwitchDPU" or DEVICE_METADATA["localhost"].get("switch_type") == "dpu") | lower }} } diff --git a/dockers/docker-sonic-telemetry/telemetry.sh b/dockers/docker-sonic-telemetry/telemetry.sh index 76d75ef36bc..4a0a351f5ec 100755 --- a/dockers/docker-sonic-telemetry/telemetry.sh +++ b/dockers/docker-sonic-telemetry/telemetry.sh @@ -23,7 +23,6 @@ fi EXIT_TELEMETRY_VARS_FILE_NOT_FOUND=1 INCORRECT_TELEMETRY_VALUE=2 -MIDPLANE_ADDRESS_NOT_FOUND=3 TELEMETRY_VARS_FILE=/usr/share/sonic/templates/telemetry_vars.j2 ESCAPE_QUOTE="'\''" @@ -43,6 +42,7 @@ TELEMETRY_VARS=${TELEMETRY_VARS//[\']/\"} X509=$(echo $TELEMETRY_VARS | jq -r '.x509') GNMI=$(echo $TELEMETRY_VARS | jq -r '.gnmi') CERTS=$(echo $TELEMETRY_VARS | jq -r '.certs') +IS_SMART_SWITCH_DPU=$(echo $TELEMETRY_VARS | jq -r '.is_smart_switch_dpu') export GRPC_GO_LOG_VERBOSITY_LEVEL=99 export GRPC_GO_LOG_SEVERITY_LEVEL=info @@ -78,19 +78,8 @@ elif [ -n "$X509" ]; then TELEMETRY_ARGS+=" --ca_crt $CA_CRT" fi else - DEVICE_TYPE=$(sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "type") - SWITCH_TYPE=$(sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "switch_type") - if [[ x"${DEVICE_TYPE}" == x"SmartSwitchDPU" || x"${SWITCH_TYPE}" == x"dpu" ]]; then - for _ in {1..30}; do - MIDPLANE_ADDRESS=$(ip -4 -o addr show dev eth0-midplane 2>/dev/null | awk '{sub(/\/.*/, "", $4); print $4; exit}') - [[ -n "${MIDPLANE_ADDRESS}" ]] && break - sleep 1 - done - if [[ -z "${MIDPLANE_ADDRESS}" ]]; then - echo "SmartSwitch DPU midplane IPv4 address not found" >&2 - exit $MIDPLANE_ADDRESS_NOT_FOUND - fi - TELEMETRY_ARGS+=" --noTLS --bind_address ${MIDPLANE_ADDRESS} --allow_no_tls_link_local" + if [[ x"${IS_SMART_SWITCH_DPU}" == x"true" ]]; then + TELEMETRY_ARGS+=" --noTLS --no_tls_link_local_interface eth0-midplane" else TELEMETRY_ARGS+=" --noTLS --bind_address 127.0.0.1" fi diff --git a/dockers/docker-sonic-telemetry/telemetry_vars.j2 b/dockers/docker-sonic-telemetry/telemetry_vars.j2 index d1d2d8977f1..9727074e471 100644 --- a/dockers/docker-sonic-telemetry/telemetry_vars.j2 +++ b/dockers/docker-sonic-telemetry/telemetry_vars.j2 @@ -1,5 +1,6 @@ { - "certs": {% if "certs" in TELEMETRY.keys() %}{{ TELEMETRY["certs"] }}{% else %}""{% endif %}, - "gnmi" : {% if "gnmi" in TELEMETRY.keys() %}{{ TELEMETRY["gnmi"] }}{% else %}""{% endif %}, - "x509" : {% if "x509" in DEVICE_METADATA.keys() %}{{ DEVICE_METADATA["x509"] }}{% else %}""{% endif %} + "certs": {% if TELEMETRY is defined and "certs" in TELEMETRY %}{{ TELEMETRY["certs"] }}{% else %}""{% endif %}, + "gnmi" : {% if TELEMETRY is defined and "gnmi" in TELEMETRY %}{{ TELEMETRY["gnmi"] }}{% else %}""{% endif %}, + "x509" : {% if "x509" in DEVICE_METADATA.keys() %}{{ DEVICE_METADATA["x509"] }}{% else %}""{% endif %}, + "is_smart_switch_dpu": {{ (DEVICE_METADATA["localhost"].get("type") == "SmartSwitchDPU" or DEVICE_METADATA["localhost"].get("switch_type") == "dpu") | lower }} } diff --git a/src/sonic-gnmi b/src/sonic-gnmi index b55491b4b95..347e8ba1d9d 160000 --- a/src/sonic-gnmi +++ b/src/sonic-gnmi @@ -1 +1 @@ -Subproject commit b55491b4b9570017dad9a7b1712e4c9a586372c8 +Subproject commit 347e8ba1d9dbbc7f72c575d02b22e22025f050ad From 071ccfeadbedb5706a3de713423bf981aef7c857 Mon Sep 17 00:00:00 2001 From: Dawei Huang Date: Wed, 22 Jul 2026 11:24:07 -0500 Subject: [PATCH 4/4] submodule: update sonic-gnmi link-local tests Signed-off-by: Dawei Huang --- src/sonic-gnmi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sonic-gnmi b/src/sonic-gnmi index 347e8ba1d9d..cb9b8b8ecc6 160000 --- a/src/sonic-gnmi +++ b/src/sonic-gnmi @@ -1 +1 @@ -Subproject commit 347e8ba1d9dbbc7f72c575d02b22e22025f050ad +Subproject commit cb9b8b8ecc692ebceeed4b373b973ab079efb2cb