From 57030c8df4e11707c34bac699a0e1868c4be9214 Mon Sep 17 00:00:00 2001 From: Oleksandr Ivantsiv Date: Wed, 24 Apr 2024 06:54:29 +0300 Subject: [PATCH] Add configuration optimization to run SONiC on Appliance DPU --- dockers/docker-orchagent/ipinip.json.j2 | 5 +++ dockers/docker-orchagent/orchagent.sh | 3 ++ dockers/docker-orchagent/switch.json.j2 | 2 + .../docker-platform-monitor/docker_init.j2 | 4 ++ dockers/docker-sonic-gnmi/gnmi-native.sh | 4 +- src/sonic-config-engine/config_samples.py | 38 ++++++++++++++++++- 6 files changed, 52 insertions(+), 4 deletions(-) diff --git a/dockers/docker-orchagent/ipinip.json.j2 b/dockers/docker-orchagent/ipinip.json.j2 index 9cdf6857bddd..9d40ec68cd12 100644 --- a/dockers/docker-orchagent/ipinip.json.j2 +++ b/dockers/docker-orchagent/ipinip.json.j2 @@ -1,3 +1,6 @@ +{% if DEVICE_METADATA['localhost']['switch_type'] == "dpu" %} +[] +{% else %} {% set ipv4_addresses = [] %} {% set ipv6_addresses = [] %} {% set ipv4_loopback_addresses = [] %} @@ -77,3 +80,5 @@ } {% endif %} ] +{% endif %} + diff --git a/dockers/docker-orchagent/orchagent.sh b/dockers/docker-orchagent/orchagent.sh index 79434668dcc7..f96ee6834222 100755 --- a/dockers/docker-orchagent/orchagent.sh +++ b/dockers/docker-orchagent/orchagent.sh @@ -86,6 +86,9 @@ if [[ x"${LOCALHOST_SUBTYPE}" == x"SmartSwitch" ]]; then else ORCHAGENT_ARGS+=" -q tcp://127.0.0.1:8100" fi +# Enable ZMQ for DPU Appliance +elif [[ x"${LOCALHOST_SUBTYPE}" == x"Appliance" ]]; then + ORCHAGENT_ARGS+=" -q tcp://127.0.0.1:8100" fi exec /usr/bin/orchagent ${ORCHAGENT_ARGS} diff --git a/dockers/docker-orchagent/switch.json.j2 b/dockers/docker-orchagent/switch.json.j2 index 30ad703bc2cf..4a6a172c554e 100644 --- a/dockers/docker-orchagent/switch.json.j2 +++ b/dockers/docker-orchagent/switch.json.j2 @@ -18,6 +18,7 @@ [ { "SWITCH_TABLE:switch": { +{% if DEVICE_METADATA.localhost.switch_type != "dpu" %} "ecmp_hash_seed": "{{ hash_seed_value }}", "lag_hash_seed": "{{ hash_seed_value }}", "fdb_aging_time": "600", @@ -25,6 +26,7 @@ "ordered_ecmp": "true" {% else %} "ordered_ecmp": "false" +{% endif %} {% endif %} }, "OP": "SET" diff --git a/dockers/docker-platform-monitor/docker_init.j2 b/dockers/docker-platform-monitor/docker_init.j2 index 46766b5fd171..765f7c863efc 100755 --- a/dockers/docker-platform-monitor/docker_init.j2 +++ b/dockers/docker-platform-monitor/docker_init.j2 @@ -91,6 +91,10 @@ if [ -e $SENSORS_CONF_PATH_GETTER ]; then fi {% endif %} +{% if CONFIGURED_PLATFORM == "nvidia-bluefield" %} + mount -t debugfs none /sys/kernel/debug +{% endif %} + if [ -e $SENSORS_CONF_FILE ]; then HAVE_SENSORS_CONF=1 mkdir -p /etc/sensors.d diff --git a/dockers/docker-sonic-gnmi/gnmi-native.sh b/dockers/docker-sonic-gnmi/gnmi-native.sh index d9bab2700e4b..aef1bb84b277 100755 --- a/dockers/docker-sonic-gnmi/gnmi-native.sh +++ b/dockers/docker-sonic-gnmi/gnmi-native.sh @@ -70,9 +70,9 @@ else TELEMETRY_ARGS+=" -v=2" fi -# Enable ZMQ for SmartSwitch +# Enable ZMQ for SmartSwitch or DPU Appliance LOCALHOST_SUBTYPE=`sonic-db-cli CONFIG_DB hget "DEVICE_METADATA|localhost" "subtype"` -if [[ x"${LOCALHOST_SUBTYPE}" == x"SmartSwitch" ]]; then +if [[ x"${LOCALHOST_SUBTYPE}" == x"SmartSwitch" || x"${LOCALHOST_SUBTYPE}" == x"Appliance" ]]; then TELEMETRY_ARGS+=" -zmq_port=8100" fi diff --git a/src/sonic-config-engine/config_samples.py b/src/sonic-config-engine/config_samples.py index 4989b88021a7..82d874c11ba4 100644 --- a/src/sonic-config-engine/config_samples.py +++ b/src/sonic-config-engine/config_samples.py @@ -25,7 +25,8 @@ def generate_common_config(data): # 'l2': generate_l2_config, # 'empty': generate_empty_config, # 'l1': generate_l1_config, -# 'l3': generate_l3_config +# 'l3': generate_l3_config, +# 'appliance': generate_appliance_config def generate_l1_config(data): for port in natsorted(data['PORT']): @@ -194,13 +195,46 @@ def generate_l2_config(data): data['VLAN_MEMBER']['Vlan1000|{}'.format(port)] = {'tagging_mode': 'untagged'} return data +def generate_appliance_config(data): + data['DEVICE_METADATA']['localhost']['hostname'] = 'sonic' + data['DEVICE_METADATA']['localhost']['switch_type'] = 'dpu' + data['DEVICE_METADATA']['localhost']['type'] = 'SonicHost' + data['DEVICE_METADATA']['localhost']['subtype'] = 'Appliance' + data['DEVICE_METADATA']['localhost']['bgp_asn'] = '65100' + data['LOOPBACK_INTERFACE'] = {"Loopback0|10.1.0.1/32": {}} + data['BGP_NEIGHBOR'] = {} + data['DEVICE_NEIGHBOR'] = {} + data['INTERFACE'] = {} + port_number = 0 + total_port_amount = len(data['PORT']) + for port in natsorted(data['PORT']): + data['PORT'][port]['admin_status'] = 'up' + data['PORT'][port]['mtu'] = '9100' + local_addr = '10.0.{}.{}'.format(2 * port_number // 256, 2 * port_number % 256) + peer_addr = '10.0.{}.{}'.format(2 * port_number // 256, 2 * port_number % 256 + 1) + peer_name='ARISTA{0:02d}T1'.format(1 + port_number % (total_port_amount // 2 or 1)) + peer_asn = 64001 + port_number + data['INTERFACE']['{}|{}/31'.format(port, local_addr)] = {} + data['BGP_NEIGHBOR'][peer_addr] = { + 'rrclient': 0, + 'name': peer_name, + 'local_addr': local_addr, + 'nhopself': 0, + 'holdtime': '180', + 'asn': str(peer_asn), + 'keepalive': '60' + } + port_number += 1 + return data + _sample_generators = { 't1': generate_t1_sample_config, 'l2': generate_l2_config, 't1-smartswitch': generate_t1_smartswitch_sample_config, 'empty': generate_empty_config, 'l1': generate_l1_config, - 'l3': generate_l3_config + 'l3': generate_l3_config, + 'appliance': generate_appliance_config } def get_available_config():