From 4942ac1b1c3569dec69aace0b20b082593a13a46 Mon Sep 17 00:00:00 2001 From: Syd Logan Date: Wed, 17 Jun 2020 13:46:48 -0700 Subject: [PATCH 1/4] sonic-sairedis: Add support to sonic-sairedis for gearbox phys * builds on support for multiple switches in sonic-sairedis * new vslib switch BCM81724 implements a virtual gearbox phy. * support for launching second (BCM81724 is supported by its own syncd) * simple refactoring of tests to support switches by part number, still working with sairedis to support multiple switch in tests so BCM81724 will be a separate pull request) * changed example context_config.json to reflect renaming of phy REDIS tables (see sonic-swss-common commit 292b08a3a80b24b23663020b37e6260039a311c0) Note that a future commit to sonic-buildimage will be required to trigger launch of physyncd (launching is based on device config files which are currently not present in sonic-buildimage). Testing done in multiple environments (broadcom fork and pure upstream). Example CLI output based on changes pushed to sonic-utilities (commit a6c4456f6965b79bf9d02ff1962070a5eae6ea55) running in VS switch supporting BCM81724: root@sonic:/home/admin# show gearbox interfaces status PHY Id Interface MAC Lanes MAC Lane Speed PHY Lanes PHY Lane Speed Line Lanes Line Lane Speed Oper Admin -------- ----------- ----------- ---------------- ----------- ---------------- ------------ ----------------- ------ ------- 1 Ethernet0 25,26,27,28 10G 200,201 20G 206 40G up up 1 Ethernet4 29,30,31,32 10G 202,203 20G 207 40G up up 1 Ethernet8 33,34,35,36 10G 204,205 20G 208 40G up up HLD is located at https://github.com/Azure/SONiC/blob/b817a12fd89520d3fd26bbc5897487928e7f6de7/doc/gearbox/gearbox_mgr_design.md Signed-off-by: syd.logan@broadcom.com --- lib/src/RedisChannel.cpp | 2 +- lib/src/context_config.json | 8 +- lib/src/sai_redis_switch.cpp | 24 + syncd/SaiSwitch.cpp | 30 +- syncd/SaiSwitch.h | 1 + syncd/scripts/physyncd_init_common.sh | 89 ++++ syncd/scripts/physyncd_start.sh | 12 + syncd/scripts/physyncd_startup.py | 48 ++ tests/{brcm.pl => BCM56850.pl} | 0 tests/{brcm => BCM56850}/acl_counter.rec | 0 tests/{brcm => BCM56850}/acl_counter2.rec | 0 tests/{brcm => BCM56850}/acl_mask.rec | 0 tests/{brcm => BCM56850}/acl_tables.rec | 0 tests/{brcm => BCM56850}/bridge_create_1.rec | 0 tests/{brcm => BCM56850}/bridge_create_2.rec | 0 tests/{brcm => BCM56850}/config_acl.rec | 0 tests/{brcm => BCM56850}/config_acl2.rec | 0 .../empty_lag_buffer_acl.rec | 0 tests/{brcm => BCM56850}/empty_sw.rec | 0 tests/{brcm => BCM56850}/full.rec | 0 tests/{brcm => BCM56850}/full_buffer.rec | 0 .../{brcm => BCM56850}/full_buffer_second.rec | 0 .../full_hostif_remove_segfault.rec | 0 tests/{brcm => BCM56850}/full_nhg_bug.rec | 0 .../full_nhg_bug_prio_flow_bug.rec | 0 .../full_nhg_bug_trap_group_create_fail.rec | 0 tests/{brcm => BCM56850}/full_no_queue.rec | 0 .../full_no_queue_no_ipg.rec | 0 ...full_no_queue_no_ipg_no_buffer_pfofile.rec | 0 .../full_queue_bug_null_buffer_profile.rec | 0 tests/{brcm => BCM56850}/full_second.rec | 0 .../full_second_no_bridge.rec | 0 .../full_testbed_config.rec | 0 tests/{brcm => BCM56850}/hostif.rec | 0 .../lag_comparison_logic.rec | 0 tests/{brcm => BCM56850}/lag_no_members.rec | 0 tests/{brcm => BCM56850}/lanemap.ini | 0 .../nhg_comparison_logic.rec | 0 tests/{brcm => BCM56850}/ntf1.rec | 0 tests/{brcm => BCM56850}/ntf2.rec | 0 tests/{brcm => BCM56850}/qos_map_order.rec | 0 .../query_attr_enum_values_capability.rec | 0 .../query_object_type_get_availability.rec | 0 .../{brcm => BCM56850}/remove_create_port.rec | 0 tests/{brcm => BCM56850}/remove_next_hop.rec | 0 tests/{brcm => BCM56850}/remove_port.rec | 0 tests/{brcm => BCM56850}/rif_loopback.rec | 0 tests/{brcm => BCM56850}/small_buffer.rec | 0 tests/{brcm => BCM56850}/speed_apply.rec | 0 tests/{brcm => BCM56850}/speed_init.rec | 0 tests/{brcm => BCM56850}/tunnel_map.rec | 0 tests/{brcm => BCM56850}/vsprofile.ini | 0 tests/{brcm => BCM56850}/wb_port_create_a.rec | 0 tests/{brcm => BCM56850}/wb_port_create_b.rec | 0 tests/{brcm => BCM56850}/wb_port_remove_a.rec | 0 tests/{brcm => BCM56850}/wb_port_remove_b.rec | 0 tests/{brcm => BCM56850}/wred_queue.rec | 0 tests/{mlnx.pl => MLNX2700.pl} | 0 tests/{mlnx => MLNX2700}/empty.rec | 0 tests/{mlnx => MLNX2700}/empty_sw.rec | 0 tests/{mlnx => MLNX2700}/full.rec | 0 tests/{mlnx => MLNX2700}/full_nhg_member.rec | 0 .../full_no_hostif_entry.rec | 0 .../full_no_hostif_entry_second.rec | 0 tests/{mlnx => MLNX2700}/full_syncd_dies.rec | 0 tests/{mlnx => MLNX2700}/full_to_crash.rec | 0 tests/{mlnx => MLNX2700}/vsprofile.ini | 0 tests/Makefile.am | 2 +- vslib/inc/SwitchBCM81724.h | 104 +++++ vslib/inc/SwitchConfig.h | 12 + vslib/inc/saivs.h | 5 + vslib/src/Makefile.am | 1 + vslib/src/Sai.cpp | 19 +- vslib/src/SwitchBCM81724.cpp | 442 ++++++++++++++++++ vslib/src/SwitchConfig.cpp | 37 +- vslib/src/SwitchStateBase.cpp | 2 - vslib/src/VirtualSwitchSaiInterface.cpp | 6 + vslib/src/sai_vs_switch.cpp | 2 +- 78 files changed, 833 insertions(+), 13 deletions(-) create mode 100644 syncd/scripts/physyncd_init_common.sh create mode 100644 syncd/scripts/physyncd_start.sh create mode 100644 syncd/scripts/physyncd_startup.py rename tests/{brcm.pl => BCM56850.pl} (100%) rename tests/{brcm => BCM56850}/acl_counter.rec (100%) rename tests/{brcm => BCM56850}/acl_counter2.rec (100%) rename tests/{brcm => BCM56850}/acl_mask.rec (100%) rename tests/{brcm => BCM56850}/acl_tables.rec (100%) rename tests/{brcm => BCM56850}/bridge_create_1.rec (100%) rename tests/{brcm => BCM56850}/bridge_create_2.rec (100%) rename tests/{brcm => BCM56850}/config_acl.rec (100%) rename tests/{brcm => BCM56850}/config_acl2.rec (100%) rename tests/{brcm => BCM56850}/empty_lag_buffer_acl.rec (100%) rename tests/{brcm => BCM56850}/empty_sw.rec (100%) rename tests/{brcm => BCM56850}/full.rec (100%) rename tests/{brcm => BCM56850}/full_buffer.rec (100%) rename tests/{brcm => BCM56850}/full_buffer_second.rec (100%) rename tests/{brcm => BCM56850}/full_hostif_remove_segfault.rec (100%) rename tests/{brcm => BCM56850}/full_nhg_bug.rec (100%) rename tests/{brcm => BCM56850}/full_nhg_bug_prio_flow_bug.rec (100%) rename tests/{brcm => BCM56850}/full_nhg_bug_trap_group_create_fail.rec (100%) rename tests/{brcm => BCM56850}/full_no_queue.rec (100%) rename tests/{brcm => BCM56850}/full_no_queue_no_ipg.rec (100%) rename tests/{brcm => BCM56850}/full_no_queue_no_ipg_no_buffer_pfofile.rec (100%) rename tests/{brcm => BCM56850}/full_queue_bug_null_buffer_profile.rec (100%) rename tests/{brcm => BCM56850}/full_second.rec (100%) rename tests/{brcm => BCM56850}/full_second_no_bridge.rec (100%) rename tests/{brcm => BCM56850}/full_testbed_config.rec (100%) rename tests/{brcm => BCM56850}/hostif.rec (100%) rename tests/{brcm => BCM56850}/lag_comparison_logic.rec (100%) rename tests/{brcm => BCM56850}/lag_no_members.rec (100%) rename tests/{brcm => BCM56850}/lanemap.ini (100%) rename tests/{brcm => BCM56850}/nhg_comparison_logic.rec (100%) rename tests/{brcm => BCM56850}/ntf1.rec (100%) rename tests/{brcm => BCM56850}/ntf2.rec (100%) rename tests/{brcm => BCM56850}/qos_map_order.rec (100%) rename tests/{brcm => BCM56850}/query_attr_enum_values_capability.rec (100%) rename tests/{brcm => BCM56850}/query_object_type_get_availability.rec (100%) rename tests/{brcm => BCM56850}/remove_create_port.rec (100%) rename tests/{brcm => BCM56850}/remove_next_hop.rec (100%) rename tests/{brcm => BCM56850}/remove_port.rec (100%) rename tests/{brcm => BCM56850}/rif_loopback.rec (100%) rename tests/{brcm => BCM56850}/small_buffer.rec (100%) rename tests/{brcm => BCM56850}/speed_apply.rec (100%) rename tests/{brcm => BCM56850}/speed_init.rec (100%) rename tests/{brcm => BCM56850}/tunnel_map.rec (100%) rename tests/{brcm => BCM56850}/vsprofile.ini (100%) rename tests/{brcm => BCM56850}/wb_port_create_a.rec (100%) rename tests/{brcm => BCM56850}/wb_port_create_b.rec (100%) rename tests/{brcm => BCM56850}/wb_port_remove_a.rec (100%) rename tests/{brcm => BCM56850}/wb_port_remove_b.rec (100%) rename tests/{brcm => BCM56850}/wred_queue.rec (100%) rename tests/{mlnx.pl => MLNX2700.pl} (100%) rename tests/{mlnx => MLNX2700}/empty.rec (100%) rename tests/{mlnx => MLNX2700}/empty_sw.rec (100%) rename tests/{mlnx => MLNX2700}/full.rec (100%) rename tests/{mlnx => MLNX2700}/full_nhg_member.rec (100%) rename tests/{mlnx => MLNX2700}/full_no_hostif_entry.rec (100%) rename tests/{mlnx => MLNX2700}/full_no_hostif_entry_second.rec (100%) rename tests/{mlnx => MLNX2700}/full_syncd_dies.rec (100%) rename tests/{mlnx => MLNX2700}/full_to_crash.rec (100%) rename tests/{mlnx => MLNX2700}/vsprofile.ini (100%) create mode 100644 vslib/inc/SwitchBCM81724.h create mode 100644 vslib/src/SwitchBCM81724.cpp diff --git a/lib/src/RedisChannel.cpp b/lib/src/RedisChannel.cpp index ac7a3baea..90e6c192d 100644 --- a/lib/src/RedisChannel.cpp +++ b/lib/src/RedisChannel.cpp @@ -175,7 +175,7 @@ sai_status_t RedisChannel::wait( swss::Selectable *sel; - int result = s.select(&sel, REDIS_ASIC_STATE_COMMAND_GETRESPONSE_TIMEOUT_MS); + int result = s.select(&sel, REDIS_ASIC_STATE_COMMAND_GETRESPONSE_TIMEOUT_MS * 10); if (result == swss::Select::OBJECT) { diff --git a/lib/src/context_config.json b/lib/src/context_config.json index 992b5a6bb..21a013dba 100644 --- a/lib/src/context_config.json +++ b/lib/src/context_config.json @@ -21,10 +21,10 @@ { "guid" : 1, "name" : "syncd1", - "dbAsic" : "ASIC_DB2", - "dbCounters" : "COUNTERS_DB2", - "dbFlex": "FLEX_COUNTER_DB2", - "dbState" : "STATE_DB2", + "dbAsic" : "GB_ASIC_DB", + "dbCounters" : "GB_COUNTERS_DB", + "dbFlex": "GB_FLEX_COUNTER_DB", + "dbState" : "STATE_DB", "switches": [ { "index" : 0, diff --git a/lib/src/sai_redis_switch.cpp b/lib/src/sai_redis_switch.cpp index 3cafc6dc8..35f74e626 100644 --- a/lib/src/sai_redis_switch.cpp +++ b/lib/src/sai_redis_switch.cpp @@ -1,5 +1,29 @@ #include "sai_redis.h" +sai_status_t redis_switch_mdio_read( + _In_ sai_object_id_t switch_id, + _In_ uint32_t device_addr, + _In_ uint32_t start_reg_addr, + _In_ uint32_t number_of_registers, + _Out_ uint32_t *reg_val) +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t redis_switch_mdio_write( + _In_ sai_object_id_t switch_id, + _In_ uint32_t device_addr, + _In_ uint32_t start_reg_addr, + _In_ uint32_t number_of_registers, + _In_ const uint32_t *reg_val) +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + REDIS_GENERIC_QUAD(SWITCH,switch); REDIS_GENERIC_STATS(SWITCH,switch); diff --git a/syncd/SaiSwitch.cpp b/syncd/SaiSwitch.cpp index 46d57c8f3..bc3b35c77 100644 --- a/syncd/SaiSwitch.cpp +++ b/syncd/SaiSwitch.cpp @@ -59,13 +59,19 @@ SaiSwitch::SaiSwitch( helperInternalOids(); - helperCheckLaneMap(); + if (getSwitchType() == SAI_SWITCH_TYPE_NPU) + { + helperCheckLaneMap(); + } helperLoadColdVids(); helperPopulateWarmBootVids(); - saiGetMacAddress(m_default_mac_address); + if (getSwitchType() == SAI_SWITCH_TYPE_NPU) + { + saiGetMacAddress(m_default_mac_address); + } if (warmBoot) { @@ -131,6 +137,26 @@ void SaiSwitch::getDefaultMacAddress( memcpy(mac, m_default_mac_address, sizeof(sai_mac_t)); } +sai_switch_type_t SaiSwitch::getSwitchType() const +{ + SWSS_LOG_ENTER(); + + sai_attribute_t attr; + + attr.id = SAI_SWITCH_ATTR_TYPE; + + sai_status_t status = m_vendorSai->get(SAI_OBJECT_TYPE_SWITCH, m_switch_rid, 1, &attr); + + if (status != SAI_STATUS_SUCCESS) + { + SWSS_LOG_ERROR("failed to get switch type"); + } + + SWSS_LOG_ERROR("switch type: '%s'", (attr.value.s32 == SAI_SWITCH_TYPE_NPU ? "SAI_SWITCH_TYPE_NPU" : "SAI_SWITCH_TYPE_PHY")); + + return (sai_switch_type_t) attr.value.s32; +} + #define MAX_HARDWARE_INFO_LENGTH 0x1000 std::string SaiSwitch::saiGetHardwareInfo() const diff --git a/syncd/SaiSwitch.h b/syncd/SaiSwitch.h index a3c60c9c8..db4f7cc1c 100644 --- a/syncd/SaiSwitch.h +++ b/syncd/SaiSwitch.h @@ -41,6 +41,7 @@ namespace syncd sai_object_id_t getVid() const; sai_object_id_t getRid() const; + sai_switch_type_t getSwitchType() const; std::string getHardwareInfo() const; std::unordered_map getVidToRidMap() const; diff --git a/syncd/scripts/physyncd_init_common.sh b/syncd/scripts/physyncd_init_common.sh new file mode 100644 index 000000000..612b8d40e --- /dev/null +++ b/syncd/scripts/physyncd_init_common.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash + +CMD_PHYSYNCD=/usr/bin/physyncd + +# dsserve: domain socket server for stdio +CMD_DSSERVE=/usr/bin/dsserve +CMD_DSSERVE_ARGS="$CMD_PHYSYNCD --diag" + +ENABLE_SAITHRIFT=0 + +PLATFORM_DIR=/usr/share/sonic/platform +HWSKU_DIR=/usr/share/sonic/hwsku + +SONIC_ASIC_TYPE=$(sonic-cfggen -y /etc/sonic/sonic_version.yml -v asic_type) + +if [ -x $CMD_DSSERVE ]; then + CMD=$CMD_DSSERVE + CMD_ARGS=$CMD_DSSERVE_ARGS +else + CMD=$CMD_PHYSYNCD + CMD_ARGS= +fi + +# Use temporary view between init and apply +CMD_ARGS+=" -u" + +BOOT_TYPE="$(cat /proc/cmdline | grep -o 'SONIC_BOOT_TYPE=\S*' | cut -d'=' -f2)" + +case "$BOOT_TYPE" in + fast-reboot) + FAST_REBOOT='yes' + ;; + fastfast) + if [ -e /var/warmboot/warm-starting ]; then + FASTFAST_REBOOT='yes' + fi + ;; + *) + FAST_REBOOT='no' + FASTFAST_REBOOT='no' + ;; +esac + + +function check_warm_boot() +{ + # FIXME: if we want to continue start option approach, then we need to add + # code here to support redis database query. + # SYSTEM_WARM_START=`/usr/bin/redis-cli -n 6 hget "WARM_RESTART_ENABLE_TABLE|system" enable` + # SERVICE_WARM_START=`/usr/bin/redis-cli -n 6 hget "WARM_RESTART_ENABLE_TABLE|${SERVICE}" enable` + # SYSTEM_WARM_START could be empty, always make WARM_BOOT meaningful. + # if [[ x"$SYSTEM_WARM_START" == x"true" ]] || [[ x"$SERVICE_WARM_START" == x"true" ]]; then + # WARM_BOOT="true" + # else + WARM_BOOT="false" + # fi +} + + +function set_start_type() +{ + if [ x"$WARM_BOOT" == x"true" ]; then + CMD_ARGS+=" -t warm" + elif [ $FAST_REBOOT == "yes" ]; then + CMD_ARGS+=" -t fast" + elif [ $FASTFAST_REBOOT == "yes" ]; then + CMD_ARGS+=" -t fastfast" + fi +} + + +config_syncd_bcm() +{ + :; +} + + +config_physyncd() +{ + + set_start_type + + if [ ${ENABLE_SAITHRIFT} == 1 ]; then + CMD_ARGS+=" -r -m $HWSKU_DIR/port_config.ini" + fi + + [ -r $PLATFORM_DIR/physyncd.conf ] && . $PLATFORM_DIR/physyncd.conf +} + diff --git a/syncd/scripts/physyncd_start.sh b/syncd/scripts/physyncd_start.sh new file mode 100644 index 000000000..2002be31b --- /dev/null +++ b/syncd/scripts/physyncd_start.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# +# Script to start syncd using supervisord +# + +# Source the file that holds common code for systemd and supervisord +. /usr/bin/physyncd_init_common.sh + +config_physyncd + +exec "/usr/bin/physyncd_startup.py" + diff --git a/syncd/scripts/physyncd_startup.py b/syncd/scripts/physyncd_startup.py new file mode 100644 index 000000000..61a4f337a --- /dev/null +++ b/syncd/scripts/physyncd_startup.py @@ -0,0 +1,48 @@ +#!/usr/bin/python + +''' +Copyright 2019 Broadcom. The term "Broadcom" refers to Broadcom Inc. +and/or its subsidiaries. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ''' +import os +import json +import subprocess + + +def physyncd_enable(gearbox_config): + i = 1 + for phy in gearbox_config['phys']: + subprocess.Popen(["/bin/bash", "-c", "/bin/bash -c {}".format('"exec /usr/bin/syncd -p /etc/sai.d/pai.profile -x /usr/share/sonic/hwsku/context_config.json -g {}"'.format(i))], close_fds=True) + i += 1 + +def main(): + + # Only privileged users can execute this command + if os.geteuid() != 0: + sys.exit("Root privileges required for this operation") + + """ Loads json file """ + try: + with open('/usr/share/sonic/hwsku/gearbox_config.json') as file_object: + gearbox_config=json.load(file_object) + except: + sys.exit("No external PHY / gearbox supported on this platform, existing physycd application") + + physyncd_enable(gearbox_config) + + +if __name__== "__main__": + main() + diff --git a/tests/brcm.pl b/tests/BCM56850.pl similarity index 100% rename from tests/brcm.pl rename to tests/BCM56850.pl diff --git a/tests/brcm/acl_counter.rec b/tests/BCM56850/acl_counter.rec similarity index 100% rename from tests/brcm/acl_counter.rec rename to tests/BCM56850/acl_counter.rec diff --git a/tests/brcm/acl_counter2.rec b/tests/BCM56850/acl_counter2.rec similarity index 100% rename from tests/brcm/acl_counter2.rec rename to tests/BCM56850/acl_counter2.rec diff --git a/tests/brcm/acl_mask.rec b/tests/BCM56850/acl_mask.rec similarity index 100% rename from tests/brcm/acl_mask.rec rename to tests/BCM56850/acl_mask.rec diff --git a/tests/brcm/acl_tables.rec b/tests/BCM56850/acl_tables.rec similarity index 100% rename from tests/brcm/acl_tables.rec rename to tests/BCM56850/acl_tables.rec diff --git a/tests/brcm/bridge_create_1.rec b/tests/BCM56850/bridge_create_1.rec similarity index 100% rename from tests/brcm/bridge_create_1.rec rename to tests/BCM56850/bridge_create_1.rec diff --git a/tests/brcm/bridge_create_2.rec b/tests/BCM56850/bridge_create_2.rec similarity index 100% rename from tests/brcm/bridge_create_2.rec rename to tests/BCM56850/bridge_create_2.rec diff --git a/tests/brcm/config_acl.rec b/tests/BCM56850/config_acl.rec similarity index 100% rename from tests/brcm/config_acl.rec rename to tests/BCM56850/config_acl.rec diff --git a/tests/brcm/config_acl2.rec b/tests/BCM56850/config_acl2.rec similarity index 100% rename from tests/brcm/config_acl2.rec rename to tests/BCM56850/config_acl2.rec diff --git a/tests/brcm/empty_lag_buffer_acl.rec b/tests/BCM56850/empty_lag_buffer_acl.rec similarity index 100% rename from tests/brcm/empty_lag_buffer_acl.rec rename to tests/BCM56850/empty_lag_buffer_acl.rec diff --git a/tests/brcm/empty_sw.rec b/tests/BCM56850/empty_sw.rec similarity index 100% rename from tests/brcm/empty_sw.rec rename to tests/BCM56850/empty_sw.rec diff --git a/tests/brcm/full.rec b/tests/BCM56850/full.rec similarity index 100% rename from tests/brcm/full.rec rename to tests/BCM56850/full.rec diff --git a/tests/brcm/full_buffer.rec b/tests/BCM56850/full_buffer.rec similarity index 100% rename from tests/brcm/full_buffer.rec rename to tests/BCM56850/full_buffer.rec diff --git a/tests/brcm/full_buffer_second.rec b/tests/BCM56850/full_buffer_second.rec similarity index 100% rename from tests/brcm/full_buffer_second.rec rename to tests/BCM56850/full_buffer_second.rec diff --git a/tests/brcm/full_hostif_remove_segfault.rec b/tests/BCM56850/full_hostif_remove_segfault.rec similarity index 100% rename from tests/brcm/full_hostif_remove_segfault.rec rename to tests/BCM56850/full_hostif_remove_segfault.rec diff --git a/tests/brcm/full_nhg_bug.rec b/tests/BCM56850/full_nhg_bug.rec similarity index 100% rename from tests/brcm/full_nhg_bug.rec rename to tests/BCM56850/full_nhg_bug.rec diff --git a/tests/brcm/full_nhg_bug_prio_flow_bug.rec b/tests/BCM56850/full_nhg_bug_prio_flow_bug.rec similarity index 100% rename from tests/brcm/full_nhg_bug_prio_flow_bug.rec rename to tests/BCM56850/full_nhg_bug_prio_flow_bug.rec diff --git a/tests/brcm/full_nhg_bug_trap_group_create_fail.rec b/tests/BCM56850/full_nhg_bug_trap_group_create_fail.rec similarity index 100% rename from tests/brcm/full_nhg_bug_trap_group_create_fail.rec rename to tests/BCM56850/full_nhg_bug_trap_group_create_fail.rec diff --git a/tests/brcm/full_no_queue.rec b/tests/BCM56850/full_no_queue.rec similarity index 100% rename from tests/brcm/full_no_queue.rec rename to tests/BCM56850/full_no_queue.rec diff --git a/tests/brcm/full_no_queue_no_ipg.rec b/tests/BCM56850/full_no_queue_no_ipg.rec similarity index 100% rename from tests/brcm/full_no_queue_no_ipg.rec rename to tests/BCM56850/full_no_queue_no_ipg.rec diff --git a/tests/brcm/full_no_queue_no_ipg_no_buffer_pfofile.rec b/tests/BCM56850/full_no_queue_no_ipg_no_buffer_pfofile.rec similarity index 100% rename from tests/brcm/full_no_queue_no_ipg_no_buffer_pfofile.rec rename to tests/BCM56850/full_no_queue_no_ipg_no_buffer_pfofile.rec diff --git a/tests/brcm/full_queue_bug_null_buffer_profile.rec b/tests/BCM56850/full_queue_bug_null_buffer_profile.rec similarity index 100% rename from tests/brcm/full_queue_bug_null_buffer_profile.rec rename to tests/BCM56850/full_queue_bug_null_buffer_profile.rec diff --git a/tests/brcm/full_second.rec b/tests/BCM56850/full_second.rec similarity index 100% rename from tests/brcm/full_second.rec rename to tests/BCM56850/full_second.rec diff --git a/tests/brcm/full_second_no_bridge.rec b/tests/BCM56850/full_second_no_bridge.rec similarity index 100% rename from tests/brcm/full_second_no_bridge.rec rename to tests/BCM56850/full_second_no_bridge.rec diff --git a/tests/brcm/full_testbed_config.rec b/tests/BCM56850/full_testbed_config.rec similarity index 100% rename from tests/brcm/full_testbed_config.rec rename to tests/BCM56850/full_testbed_config.rec diff --git a/tests/brcm/hostif.rec b/tests/BCM56850/hostif.rec similarity index 100% rename from tests/brcm/hostif.rec rename to tests/BCM56850/hostif.rec diff --git a/tests/brcm/lag_comparison_logic.rec b/tests/BCM56850/lag_comparison_logic.rec similarity index 100% rename from tests/brcm/lag_comparison_logic.rec rename to tests/BCM56850/lag_comparison_logic.rec diff --git a/tests/brcm/lag_no_members.rec b/tests/BCM56850/lag_no_members.rec similarity index 100% rename from tests/brcm/lag_no_members.rec rename to tests/BCM56850/lag_no_members.rec diff --git a/tests/brcm/lanemap.ini b/tests/BCM56850/lanemap.ini similarity index 100% rename from tests/brcm/lanemap.ini rename to tests/BCM56850/lanemap.ini diff --git a/tests/brcm/nhg_comparison_logic.rec b/tests/BCM56850/nhg_comparison_logic.rec similarity index 100% rename from tests/brcm/nhg_comparison_logic.rec rename to tests/BCM56850/nhg_comparison_logic.rec diff --git a/tests/brcm/ntf1.rec b/tests/BCM56850/ntf1.rec similarity index 100% rename from tests/brcm/ntf1.rec rename to tests/BCM56850/ntf1.rec diff --git a/tests/brcm/ntf2.rec b/tests/BCM56850/ntf2.rec similarity index 100% rename from tests/brcm/ntf2.rec rename to tests/BCM56850/ntf2.rec diff --git a/tests/brcm/qos_map_order.rec b/tests/BCM56850/qos_map_order.rec similarity index 100% rename from tests/brcm/qos_map_order.rec rename to tests/BCM56850/qos_map_order.rec diff --git a/tests/brcm/query_attr_enum_values_capability.rec b/tests/BCM56850/query_attr_enum_values_capability.rec similarity index 100% rename from tests/brcm/query_attr_enum_values_capability.rec rename to tests/BCM56850/query_attr_enum_values_capability.rec diff --git a/tests/brcm/query_object_type_get_availability.rec b/tests/BCM56850/query_object_type_get_availability.rec similarity index 100% rename from tests/brcm/query_object_type_get_availability.rec rename to tests/BCM56850/query_object_type_get_availability.rec diff --git a/tests/brcm/remove_create_port.rec b/tests/BCM56850/remove_create_port.rec similarity index 100% rename from tests/brcm/remove_create_port.rec rename to tests/BCM56850/remove_create_port.rec diff --git a/tests/brcm/remove_next_hop.rec b/tests/BCM56850/remove_next_hop.rec similarity index 100% rename from tests/brcm/remove_next_hop.rec rename to tests/BCM56850/remove_next_hop.rec diff --git a/tests/brcm/remove_port.rec b/tests/BCM56850/remove_port.rec similarity index 100% rename from tests/brcm/remove_port.rec rename to tests/BCM56850/remove_port.rec diff --git a/tests/brcm/rif_loopback.rec b/tests/BCM56850/rif_loopback.rec similarity index 100% rename from tests/brcm/rif_loopback.rec rename to tests/BCM56850/rif_loopback.rec diff --git a/tests/brcm/small_buffer.rec b/tests/BCM56850/small_buffer.rec similarity index 100% rename from tests/brcm/small_buffer.rec rename to tests/BCM56850/small_buffer.rec diff --git a/tests/brcm/speed_apply.rec b/tests/BCM56850/speed_apply.rec similarity index 100% rename from tests/brcm/speed_apply.rec rename to tests/BCM56850/speed_apply.rec diff --git a/tests/brcm/speed_init.rec b/tests/BCM56850/speed_init.rec similarity index 100% rename from tests/brcm/speed_init.rec rename to tests/BCM56850/speed_init.rec diff --git a/tests/brcm/tunnel_map.rec b/tests/BCM56850/tunnel_map.rec similarity index 100% rename from tests/brcm/tunnel_map.rec rename to tests/BCM56850/tunnel_map.rec diff --git a/tests/brcm/vsprofile.ini b/tests/BCM56850/vsprofile.ini similarity index 100% rename from tests/brcm/vsprofile.ini rename to tests/BCM56850/vsprofile.ini diff --git a/tests/brcm/wb_port_create_a.rec b/tests/BCM56850/wb_port_create_a.rec similarity index 100% rename from tests/brcm/wb_port_create_a.rec rename to tests/BCM56850/wb_port_create_a.rec diff --git a/tests/brcm/wb_port_create_b.rec b/tests/BCM56850/wb_port_create_b.rec similarity index 100% rename from tests/brcm/wb_port_create_b.rec rename to tests/BCM56850/wb_port_create_b.rec diff --git a/tests/brcm/wb_port_remove_a.rec b/tests/BCM56850/wb_port_remove_a.rec similarity index 100% rename from tests/brcm/wb_port_remove_a.rec rename to tests/BCM56850/wb_port_remove_a.rec diff --git a/tests/brcm/wb_port_remove_b.rec b/tests/BCM56850/wb_port_remove_b.rec similarity index 100% rename from tests/brcm/wb_port_remove_b.rec rename to tests/BCM56850/wb_port_remove_b.rec diff --git a/tests/brcm/wred_queue.rec b/tests/BCM56850/wred_queue.rec similarity index 100% rename from tests/brcm/wred_queue.rec rename to tests/BCM56850/wred_queue.rec diff --git a/tests/mlnx.pl b/tests/MLNX2700.pl similarity index 100% rename from tests/mlnx.pl rename to tests/MLNX2700.pl diff --git a/tests/mlnx/empty.rec b/tests/MLNX2700/empty.rec similarity index 100% rename from tests/mlnx/empty.rec rename to tests/MLNX2700/empty.rec diff --git a/tests/mlnx/empty_sw.rec b/tests/MLNX2700/empty_sw.rec similarity index 100% rename from tests/mlnx/empty_sw.rec rename to tests/MLNX2700/empty_sw.rec diff --git a/tests/mlnx/full.rec b/tests/MLNX2700/full.rec similarity index 100% rename from tests/mlnx/full.rec rename to tests/MLNX2700/full.rec diff --git a/tests/mlnx/full_nhg_member.rec b/tests/MLNX2700/full_nhg_member.rec similarity index 100% rename from tests/mlnx/full_nhg_member.rec rename to tests/MLNX2700/full_nhg_member.rec diff --git a/tests/mlnx/full_no_hostif_entry.rec b/tests/MLNX2700/full_no_hostif_entry.rec similarity index 100% rename from tests/mlnx/full_no_hostif_entry.rec rename to tests/MLNX2700/full_no_hostif_entry.rec diff --git a/tests/mlnx/full_no_hostif_entry_second.rec b/tests/MLNX2700/full_no_hostif_entry_second.rec similarity index 100% rename from tests/mlnx/full_no_hostif_entry_second.rec rename to tests/MLNX2700/full_no_hostif_entry_second.rec diff --git a/tests/mlnx/full_syncd_dies.rec b/tests/MLNX2700/full_syncd_dies.rec similarity index 100% rename from tests/mlnx/full_syncd_dies.rec rename to tests/MLNX2700/full_syncd_dies.rec diff --git a/tests/mlnx/full_to_crash.rec b/tests/MLNX2700/full_to_crash.rec similarity index 100% rename from tests/mlnx/full_to_crash.rec rename to tests/MLNX2700/full_to_crash.rec diff --git a/tests/mlnx/vsprofile.ini b/tests/MLNX2700/vsprofile.ini similarity index 100% rename from tests/mlnx/vsprofile.ini rename to tests/MLNX2700/vsprofile.ini diff --git a/tests/Makefile.am b/tests/Makefile.am index 1f69c510b..76248af0f 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -19,4 +19,4 @@ if SAITHRIFT vssyncd_LDADD += -lrpcserver -lthrift endif -TESTS = aspellcheck.pl conflictnames.pl swsslogentercheck.sh brcm.pl mlnx.pl +TESTS = aspellcheck.pl conflictnames.pl swsslogentercheck.sh BCM56850.pl MLNX2700.pl diff --git a/vslib/inc/SwitchBCM81724.h b/vslib/inc/SwitchBCM81724.h new file mode 100644 index 000000000..d622dcf73 --- /dev/null +++ b/vslib/inc/SwitchBCM81724.h @@ -0,0 +1,104 @@ +/* + + Copyright 2019 Broadcom. The term Broadcom refers to Broadcom Inc. and/or + its subsidiaries. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + +#pragma once + +#include "SwitchStateBase.h" + +namespace saivs +{ + class SwitchBCM81724: + public SwitchStateBase + { + public: + + SwitchBCM81724( + _In_ sai_object_id_t switch_id, + _In_ std::shared_ptr manager, + _In_ std::shared_ptr config); + + SwitchBCM81724( + _In_ sai_object_id_t switch_id, + _In_ std::shared_ptr manager, + _In_ std::shared_ptr config, + _In_ std::shared_ptr warmBootState); + + virtual ~SwitchBCM81724(); + + protected: + + virtual sai_status_t create_port_dependencies(_In_ sai_object_id_t port_id) override; + + virtual sai_status_t create_qos_queues_per_port(_In_ sai_object_id_t port_id) override; + + virtual sai_status_t create_qos_queues() override; + + virtual sai_status_t set_switch_mac_address() override; + + virtual sai_status_t create_default_vlan() override; + + virtual sai_status_t create_default_1q_bridge() override; + + virtual sai_status_t create_default_virtual_router() override; + + virtual sai_status_t create_default_stp_instance() override; + + virtual sai_status_t create_default_trap_group() override; + + virtual sai_status_t create_ingress_priority_groups_per_port( + _In_ sai_object_id_t port_id) override; + + virtual sai_status_t create_ingress_priority_groups() override; + + virtual sai_status_t create_vlan_members() override; + + virtual sai_status_t create_bridge_ports() override; + + virtual sai_status_t set_acl_entry_min_prio() override; + + virtual sai_status_t set_acl_capabilities() override; + + virtual sai_status_t set_maximum_number_of_childs_per_scheduler_group() override; + + virtual sai_status_t set_number_of_ecmp_groups() override; + + virtual sai_status_t create_cpu_port(); + + virtual sai_status_t create_ports(); + + protected : // refresh + + virtual sai_status_t refresh_port_list( + _In_ const sai_attr_metadata_t *meta) override; + + virtual sai_status_t refresh_bridge_port_list( + _In_ const sai_attr_metadata_t *meta, + _In_ sai_object_id_t bridge_id) override; + + virtual sai_status_t refresh_vlan_member_list( + _In_ const sai_attr_metadata_t *meta, + _In_ sai_object_id_t vlan_id) override; + + protected: + + virtual sai_status_t refresh_read_only( _In_ const sai_attr_metadata_t *meta, _In_ sai_object_id_t object_id) override; + virtual sai_status_t set_switch_default_attributes(); + virtual sai_status_t initialize_default_objects() override; + }; +} diff --git a/vslib/inc/SwitchConfig.h b/vslib/inc/SwitchConfig.h index bd4bf139d..bec0541a9 100644 --- a/vslib/inc/SwitchConfig.h +++ b/vslib/inc/SwitchConfig.h @@ -6,6 +6,10 @@ #include #include +extern "C" { +#include "sai.h" // for sai_switch_type_t +} + namespace saivs { typedef enum _sai_vs_switch_type_t @@ -14,6 +18,8 @@ namespace saivs SAI_VS_SWITCH_TYPE_BCM56850, + SAI_VS_SWITCH_TYPE_BCM81724, + SAI_VS_SWITCH_TYPE_MLNX2700, } sai_vs_switch_type_t; @@ -38,6 +44,10 @@ namespace saivs public: + static bool parseSaiSwitchType( + _In_ const char* saiSwitchTypeStr, + _Out_ sai_switch_type_t& saiSwitchType); + static bool parseSwitchType( _In_ const char* switchTypeStr, _Out_ sai_vs_switch_type_t& switchType); @@ -51,6 +61,8 @@ namespace saivs public: + sai_switch_type_t m_saiSwitchType; + sai_vs_switch_type_t m_switchType; sai_vs_boot_type_t m_bootType; diff --git a/vslib/inc/saivs.h b/vslib/inc/saivs.h index 15e4abaa5..8c5be3dac 100644 --- a/vslib/inc/saivs.h +++ b/vslib/inc/saivs.h @@ -5,6 +5,10 @@ extern "C" { } #define SAI_KEY_VS_SWITCH_TYPE "SAI_VS_SWITCH_TYPE" +#define SAI_KEY_VS_SAI_SWITCH_TYPE "SAI_VS_SAI_SWITCH_TYPE" + +#define SAI_VALUE_SAI_SWITCH_TYPE_NPU "SAI_SWITCH_TYPE_NPU" +#define SAI_VALUE_SAI_SWITCH_TYPE_PHY "SAI_SWITCH_TYPE_PHY" /** * @def SAI_KEY_VS_INTERFACE_LANE_MAP_FILE @@ -31,6 +35,7 @@ extern "C" { #define SAI_KEY_VS_HOSTIF_USE_TAP_DEVICE "SAI_VS_HOSTIF_USE_TAP_DEVICE" #define SAI_VALUE_VS_SWITCH_TYPE_BCM56850 "SAI_VS_SWITCH_TYPE_BCM56850" +#define SAI_VALUE_VS_SWITCH_TYPE_BCM81724 "SAI_VS_SWITCH_TYPE_BCM81724" #define SAI_VALUE_VS_SWITCH_TYPE_MLNX2700 "SAI_VS_SWITCH_TYPE_MLNX2700" /* diff --git a/vslib/src/Makefile.am b/vslib/src/Makefile.am index ce2457db2..d27783984 100644 --- a/vslib/src/Makefile.am +++ b/vslib/src/Makefile.am @@ -45,6 +45,7 @@ libSaiVS_a_SOURCES = \ SelectableFd.cpp \ SwitchState.cpp \ SwitchBCM56850.cpp \ + SwitchBCM81724.cpp \ SwitchMLNX2700.cpp libsaivs_la_SOURCES = \ diff --git a/vslib/src/Sai.cpp b/vslib/src/Sai.cpp index f5fb0472a..669c1c5a8 100644 --- a/vslib/src/Sai.cpp +++ b/vslib/src/Sai.cpp @@ -94,6 +94,18 @@ sai_status_t Sai::initialize( return SAI_STATUS_FAILURE; } + auto sai_switch_type = service_method_table->profile_get_value(0, SAI_KEY_VS_SAI_SWITCH_TYPE); + sai_switch_type_t saiSwitchType; + + if (sai_switch_type == NULL) + { + SWSS_LOG_NOTICE("failed to obtain service method table value: %s", SAI_KEY_VS_SAI_SWITCH_TYPE); + saiSwitchType = SAI_SWITCH_TYPE_NPU; + } else if (!SwitchConfig::parseSaiSwitchType(sai_switch_type, saiSwitchType)) + { + return SAI_STATUS_FAILURE; + } + auto *laneMapFile = service_method_table->profile_get_value(0, SAI_KEY_VS_INTERFACE_LANE_MAP_FILE); m_laneMapContainer = LaneMapFileParser::parseLaneMapFile(laneMapFile); @@ -128,6 +140,7 @@ sai_status_t Sai::initialize( auto sc = std::make_shared(); + sc->m_saiSwitchType = saiSwitchType; sc->m_switchType = switchType; sc->m_bootType = bootType; sc->m_switchIndex = 0; @@ -161,7 +174,11 @@ sai_status_t Sai::initialize( startUnittestThread(); - startFdbAgingThread(); + if (saiSwitchType == SAI_SWITCH_TYPE_NPU) + { + + startFdbAgingThread(); + } m_apiInitialized = true; diff --git a/vslib/src/SwitchBCM81724.cpp b/vslib/src/SwitchBCM81724.cpp new file mode 100644 index 000000000..8d0dc2434 --- /dev/null +++ b/vslib/src/SwitchBCM81724.cpp @@ -0,0 +1,442 @@ +/* + + Copyright 2019 Broadcom. The term Broadcom refers to Broadcom Inc. and/or + its subsidiaries. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + + +#include "SwitchBCM81724.h" + +#include "swss/logger.h" +#include "meta/sai_serialize.h" + +using namespace saivs; + +SwitchBCM81724::SwitchBCM81724( + _In_ sai_object_id_t switch_id, + _In_ std::shared_ptr manager, + _In_ std::shared_ptr config): + SwitchStateBase(switch_id, manager, config) +{ + SWSS_LOG_ENTER(); + + // empty +} + +SwitchBCM81724::~SwitchBCM81724() +{ + SWSS_LOG_ENTER(); +} + +sai_status_t SwitchBCM81724::create_port_dependencies( + _In_ sai_object_id_t port_id) +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_WARN("check attributes and set, FIXME"); + + // this method is post create action on generic create object + + sai_attribute_t attr; + + // default admin state is down as defined in SAI + + attr.id = SAI_PORT_ATTR_ADMIN_STATE; + attr.value.booldata = false; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_PORT, port_id, &attr)); + + return SAI_STATUS_SUCCESS; +} + +sai_status_t SwitchBCM81724::initialize_default_objects() +{ + SWSS_LOG_ENTER(); + + CHECK_STATUS(set_switch_default_attributes()); + CHECK_STATUS(create_default_trap_group()); + + return SAI_STATUS_SUCCESS; +} + + +sai_status_t SwitchBCM81724::create_qos_queues_per_port( + _In_ sai_object_id_t port_id) +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::create_qos_queues() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::set_switch_mac_address() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::refresh_port_list( + _In_ const sai_attr_metadata_t *meta) +{ + SWSS_LOG_ENTER(); + + // since now port can be added or removed, we need to update port list + // dynamically + + sai_attribute_t attr; + + m_port_list.clear(); + + // iterate via ASIC state to find all the ports + + for (const auto& it: m_objectHash.at(SAI_OBJECT_TYPE_PORT)) + { + sai_object_id_t port_id; + sai_deserialize_object_id(it.first, port_id); + + m_port_list.push_back(port_id); + } + + uint32_t port_count = (uint32_t)m_port_list.size(); + + attr.id = SAI_SWITCH_ATTR_PORT_LIST; + attr.value.objlist.count = port_count; + attr.value.objlist.list = m_port_list.data(); + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + attr.id = SAI_SWITCH_ATTR_PORT_NUMBER; + attr.value.u32 = port_count; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + SWSS_LOG_NOTICE("refreshed port list, current port number: %zu, not counting cpu port", m_port_list.size()); + + return SAI_STATUS_SUCCESS; +} + +sai_status_t SwitchBCM81724::set_switch_default_attributes() +{ + SWSS_LOG_ENTER(); + + sai_status_t ret; + + // Fill this with supported SAI_OBJECT_TYPEs + int32_t supported_obj_list[] = { + SAI_OBJECT_TYPE_NULL, + SAI_OBJECT_TYPE_PORT + }; + SWSS_LOG_INFO("create switch default attributes"); + + sai_attribute_t attr; + + attr.id = SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS; + attr.value.u32 = 0; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + attr.id = SAI_SWITCH_ATTR_WARM_RECOVER; + attr.value.booldata = false; + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + attr.id = SAI_SWITCH_ATTR_FIRMWARE_MAJOR_VERSION; + strncpy((char *)&attr.value.chardata, "v0.1", sizeof(attr.value.chardata)); + + CHECK_STATUS(set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr)); + + attr.id = SAI_SWITCH_ATTR_SUPPORTED_OBJECT_TYPE_LIST; + attr.value.s32list.count = sizeof(supported_obj_list); + attr.value.s32list.list = supported_obj_list; + + ret = set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr); + + return ret; +} + +SwitchBCM81724::SwitchBCM81724( + _In_ sai_object_id_t switch_id, + _In_ std::shared_ptr manager, + _In_ std::shared_ptr config, + _In_ std::shared_ptr warmBootState): + SwitchStateBase(switch_id, manager, config, warmBootState) +{ + SWSS_LOG_ENTER(); + + // empty +} + +// override of base class but returning failure in most cases. GB phys implement very little + +sai_status_t SwitchBCM81724::refresh_read_only( + _In_ const sai_attr_metadata_t *meta, + _In_ sai_object_id_t object_id) +{ + SWSS_LOG_ENTER(); + + if (meta->objecttype == SAI_OBJECT_TYPE_SWITCH) + { + switch (meta->attrid) + { + case SAI_SWITCH_ATTR_CPU_PORT: + case SAI_SWITCH_ATTR_DEFAULT_VIRTUAL_ROUTER_ID: + case SAI_SWITCH_ATTR_DEFAULT_VLAN_ID: + case SAI_SWITCH_ATTR_DEFAULT_STP_INST_ID: + case SAI_SWITCH_ATTR_DEFAULT_1Q_BRIDGE_ID: + return SAI_STATUS_NOT_IMPLEMENTED; + + case SAI_SWITCH_ATTR_ACL_ENTRY_MINIMUM_PRIORITY: + case SAI_SWITCH_ATTR_ACL_ENTRY_MAXIMUM_PRIORITY: + return SAI_STATUS_NOT_IMPLEMENTED; + + case SAI_SWITCH_ATTR_MAX_ACL_ACTION_COUNT: + case SAI_SWITCH_ATTR_ACL_STAGE_INGRESS: + case SAI_SWITCH_ATTR_ACL_STAGE_EGRESS: + return SAI_STATUS_NOT_IMPLEMENTED; + + case SAI_SWITCH_ATTR_NUMBER_OF_ECMP_GROUPS: + return SAI_STATUS_NOT_IMPLEMENTED; + + case SAI_SWITCH_ATTR_NUMBER_OF_ACTIVE_PORTS: + case SAI_SWITCH_ATTR_PORT_LIST: + return refresh_port_list(meta); + + case SAI_SWITCH_ATTR_QOS_MAX_NUMBER_OF_CHILDS_PER_SCHEDULER_GROUP: + return SAI_STATUS_NOT_IMPLEMENTED; + + case SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY: + case SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY: + case SAI_SWITCH_ATTR_AVAILABLE_DOUBLE_NAT_ENTRY: + return SAI_STATUS_NOT_IMPLEMENTED; + + case SAI_SWITCH_ATTR_DEFAULT_TRAP_GROUP: + case SAI_SWITCH_ATTR_FIRMWARE_MAJOR_VERSION: + return SAI_STATUS_SUCCESS; + } + } + + if (meta->objecttype == SAI_OBJECT_TYPE_PORT) + { + switch (meta->attrid) + { + case SAI_PORT_ATTR_QOS_NUMBER_OF_QUEUES: + case SAI_PORT_ATTR_QOS_QUEUE_LIST: + return SAI_STATUS_NOT_IMPLEMENTED; + + case SAI_PORT_ATTR_NUMBER_OF_INGRESS_PRIORITY_GROUPS: + case SAI_PORT_ATTR_INGRESS_PRIORITY_GROUP_LIST: + return SAI_STATUS_NOT_IMPLEMENTED; + + case SAI_PORT_ATTR_QOS_NUMBER_OF_SCHEDULER_GROUPS: + case SAI_PORT_ATTR_QOS_SCHEDULER_GROUP_LIST: + return SAI_STATUS_NOT_IMPLEMENTED; + + case SAI_PORT_ATTR_SUPPORTED_FEC_MODE: + case SAI_PORT_ATTR_SUPPORTED_AUTO_NEG_MODE: + case SAI_PORT_ATTR_REMOTE_ADVERTISED_FEC_MODE: + case SAI_PORT_ATTR_ADVERTISED_FEC_MODE: + return SAI_STATUS_SUCCESS; + + /* + * This status is based on hostif vEthernetX status. + */ + + case SAI_PORT_ATTR_OPER_STATUS: + return SAI_STATUS_SUCCESS; + } + } + + if (meta->objecttype == SAI_OBJECT_TYPE_SCHEDULER_GROUP) + { + return SAI_STATUS_NOT_IMPLEMENTED; + } + + if (meta->objecttype == SAI_OBJECT_TYPE_BRIDGE && meta->attrid == SAI_BRIDGE_ATTR_PORT_LIST) + { + return SAI_STATUS_NOT_IMPLEMENTED; + } + + if (meta->objecttype == SAI_OBJECT_TYPE_VLAN && meta->attrid == SAI_VLAN_ATTR_MEMBER_LIST) + { + return SAI_STATUS_NOT_IMPLEMENTED; + } + + if (meta->objecttype == SAI_OBJECT_TYPE_DEBUG_COUNTER && meta->attrid == SAI_DEBUG_COUNTER_ATTR_INDEX) + { + return SAI_STATUS_SUCCESS; // XXX not sure for gearbox + } + + auto mmeta = m_meta.lock(); + + if (mmeta) + { + if (mmeta->meta_unittests_enabled()) + { + SWSS_LOG_NOTICE("unittests enabled, SET could be performed on %s, not recalculating", meta->attridname); + + return SAI_STATUS_SUCCESS; + } + } + else + { + SWSS_LOG_WARN("meta pointer expired"); + } + + SWSS_LOG_WARN("need to recalculate RO: %s", meta->attridname); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::create_default_vlan() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::create_cpu_port() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::create_default_1q_bridge() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::create_ports() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::create_default_virtual_router() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::create_default_stp_instance() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::create_default_trap_group() +{ + SWSS_LOG_ENTER(); + + SWSS_LOG_INFO("create default trap group"); + + sai_attribute_t attr; + + attr.id = SAI_SWITCH_ATTR_DEFAULT_TRAP_GROUP; + attr.value.oid = SAI_NULL_OBJECT_ID; + + return set(SAI_OBJECT_TYPE_SWITCH, m_switch_id, &attr); +} + +sai_status_t SwitchBCM81724::create_ingress_priority_groups_per_port( + _In_ sai_object_id_t port_id) +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::create_ingress_priority_groups() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::create_vlan_members() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::create_bridge_ports() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::set_acl_entry_min_prio() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::set_acl_capabilities() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::set_maximum_number_of_childs_per_scheduler_group() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::set_number_of_ecmp_groups() +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::refresh_bridge_port_list( + _In_ const sai_attr_metadata_t *meta, + _In_ sai_object_id_t bridge_id) +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + +sai_status_t SwitchBCM81724::refresh_vlan_member_list( + _In_ const sai_attr_metadata_t *meta, + _In_ sai_object_id_t vlan_id) +{ + SWSS_LOG_ENTER(); + + return SAI_STATUS_NOT_IMPLEMENTED; +} + diff --git a/vslib/src/SwitchConfig.cpp b/vslib/src/SwitchConfig.cpp index c7c7649f1..1d94f7031 100644 --- a/vslib/src/SwitchConfig.cpp +++ b/vslib/src/SwitchConfig.cpp @@ -6,6 +6,7 @@ using namespace saivs; SwitchConfig::SwitchConfig(): + m_saiSwitchType(SAI_SWITCH_TYPE_NPU), m_switchType(SAI_VS_SWITCH_TYPE_NONE), m_bootType(SAI_VS_BOOT_TYPE_COLD), m_switchIndex(0), @@ -18,6 +19,35 @@ SwitchConfig::SwitchConfig(): } +bool SwitchConfig::parseSaiSwitchType( + _In_ const char* saiSwitchTypeStr, + _Out_ sai_switch_type_t& saiSwitchType) +{ + SWSS_LOG_ENTER(); + + std::string st = (saiSwitchTypeStr == NULL) ? "unknown" : saiSwitchTypeStr; + + if (st == SAI_VALUE_SAI_SWITCH_TYPE_NPU) + { + saiSwitchType = SAI_SWITCH_TYPE_NPU; + } + else if (st == SAI_VALUE_SAI_SWITCH_TYPE_PHY) + { + saiSwitchType = SAI_SWITCH_TYPE_PHY; + } + else + { + SWSS_LOG_ERROR("unknown SAI switch type: '%s', expected (%s|%s)", + saiSwitchTypeStr, + SAI_VALUE_SAI_SWITCH_TYPE_NPU, + SAI_VALUE_SAI_SWITCH_TYPE_PHY); + + return false; + } + + return true; +} + bool SwitchConfig::parseSwitchType( _In_ const char* switchTypeStr, _Out_ sai_vs_switch_type_t& switchType) @@ -30,14 +60,19 @@ bool SwitchConfig::parseSwitchType( { switchType = SAI_VS_SWITCH_TYPE_BCM56850; } + else if (st == SAI_VALUE_VS_SWITCH_TYPE_BCM81724) + { + switchType = SAI_VS_SWITCH_TYPE_BCM81724; + } else if (st == SAI_VALUE_VS_SWITCH_TYPE_MLNX2700) { switchType = SAI_VS_SWITCH_TYPE_MLNX2700; } else { - SWSS_LOG_ERROR("unknown switch type: '%s', expected (%s|%s)", + SWSS_LOG_ERROR("unknown switch type: '%s', expected (%s|%s)(%s)", switchTypeStr, + SAI_VALUE_VS_SWITCH_TYPE_BCM81724, SAI_VALUE_VS_SWITCH_TYPE_BCM56850, SAI_VALUE_VS_SWITCH_TYPE_MLNX2700); diff --git a/vslib/src/SwitchStateBase.cpp b/vslib/src/SwitchStateBase.cpp index 91679d100..bd25e7a95 100644 --- a/vslib/src/SwitchStateBase.cpp +++ b/vslib/src/SwitchStateBase.cpp @@ -409,7 +409,6 @@ sai_status_t SwitchStateBase::setPort( { SWSS_LOG_ERROR("failed to set MTU on portId %s", sai_serialize_object_id(portId).c_str()); - return SAI_STATUS_FAILURE; } } @@ -820,7 +819,6 @@ sai_status_t SwitchStateBase::create_ports() sai_object_id_t port_id; CHECK_STATUS(create(SAI_OBJECT_TYPE_PORT, &port_id, m_switch_id, 0, NULL)); - m_port_list.push_back(port_id); sai_attribute_t attr; diff --git a/vslib/src/VirtualSwitchSaiInterface.cpp b/vslib/src/VirtualSwitchSaiInterface.cpp index a53f56a32..e35a90547 100644 --- a/vslib/src/VirtualSwitchSaiInterface.cpp +++ b/vslib/src/VirtualSwitchSaiInterface.cpp @@ -10,6 +10,7 @@ #include "meta/sai_serialize.h" #include "SwitchStateBase.h" +#include "SwitchBCM81724.h" #include "SwitchBCM56850.h" #include "SwitchMLNX2700.h" @@ -534,6 +535,11 @@ std::shared_ptr VirtualSwitchSaiInterface::init_switch( m_switchStateMap[switch_id] = std::make_shared(switch_id, m_realObjectIdManager, config, warmBootState); break; + case SAI_VS_SWITCH_TYPE_BCM81724: + + m_switchStateMap[switch_id] = std::make_shared(switch_id, m_realObjectIdManager, config, warmBootState); + break; + case SAI_VS_SWITCH_TYPE_MLNX2700: m_switchStateMap[switch_id] = std::make_shared(switch_id, m_realObjectIdManager, config, warmBootState); diff --git a/vslib/src/sai_vs_switch.cpp b/vslib/src/sai_vs_switch.cpp index 619d25324..67cdecb0b 100644 --- a/vslib/src/sai_vs_switch.cpp +++ b/vslib/src/sai_vs_switch.cpp @@ -51,5 +51,5 @@ const sai_switch_api_t vs_switch_api = { VS_GENERIC_STATS_API(switch) vs_mdio_read, - vs_mdio_write, + vs_mdio_write }; From 8695a23e13596d4f7bec1f2b7ce40745f54dc921 Mon Sep 17 00:00:00 2001 From: Syd Logan Date: Thu, 18 Jun 2020 20:28:01 -0700 Subject: [PATCH 2/4] Address review comments --- lib/src/RedisChannel.cpp | 2 +- syncd/SaiSwitch.cpp | 8 ++++---- vslib/src/Makefile.am | 2 +- vslib/src/Sai.cpp | 8 ++++---- vslib/src/SwitchConfig.cpp | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/src/RedisChannel.cpp b/lib/src/RedisChannel.cpp index 90e6c192d..ac7a3baea 100644 --- a/lib/src/RedisChannel.cpp +++ b/lib/src/RedisChannel.cpp @@ -175,7 +175,7 @@ sai_status_t RedisChannel::wait( swss::Selectable *sel; - int result = s.select(&sel, REDIS_ASIC_STATE_COMMAND_GETRESPONSE_TIMEOUT_MS * 10); + int result = s.select(&sel, REDIS_ASIC_STATE_COMMAND_GETRESPONSE_TIMEOUT_MS); if (result == swss::Select::OBJECT) { diff --git a/syncd/SaiSwitch.cpp b/syncd/SaiSwitch.cpp index bc3b35c77..74638f4a6 100644 --- a/syncd/SaiSwitch.cpp +++ b/syncd/SaiSwitch.cpp @@ -61,7 +61,7 @@ SaiSwitch::SaiSwitch( if (getSwitchType() == SAI_SWITCH_TYPE_NPU) { - helperCheckLaneMap(); + helperCheckLaneMap(); } helperLoadColdVids(); @@ -70,7 +70,7 @@ SaiSwitch::SaiSwitch( if (getSwitchType() == SAI_SWITCH_TYPE_NPU) { - saiGetMacAddress(m_default_mac_address); + saiGetMacAddress(m_default_mac_address); } if (warmBoot) @@ -149,7 +149,7 @@ sai_switch_type_t SaiSwitch::getSwitchType() const if (status != SAI_STATUS_SUCCESS) { - SWSS_LOG_ERROR("failed to get switch type"); + SWSS_LOG_THROW("failed to get switch type"); } SWSS_LOG_ERROR("switch type: '%s'", (attr.value.s32 == SAI_SWITCH_TYPE_NPU ? "SAI_SWITCH_TYPE_NPU" : "SAI_SWITCH_TYPE_PHY")); @@ -911,7 +911,7 @@ void SaiSwitch::helperPopulateWarmBootVids() { sai_object_id_t vid = m_translator->translateRidToVid(rid, m_switch_vid); - m_warmBootDiscoveredVids.insert(vid); + m_warmBootDiscoveredVids.insert(vid); } } diff --git a/vslib/src/Makefile.am b/vslib/src/Makefile.am index d27783984..fd22a3e5f 100644 --- a/vslib/src/Makefile.am +++ b/vslib/src/Makefile.am @@ -45,7 +45,7 @@ libSaiVS_a_SOURCES = \ SelectableFd.cpp \ SwitchState.cpp \ SwitchBCM56850.cpp \ - SwitchBCM81724.cpp \ + SwitchBCM81724.cpp \ SwitchMLNX2700.cpp libsaivs_la_SOURCES = \ diff --git a/vslib/src/Sai.cpp b/vslib/src/Sai.cpp index 669c1c5a8..d2a0b1287 100644 --- a/vslib/src/Sai.cpp +++ b/vslib/src/Sai.cpp @@ -101,9 +101,10 @@ sai_status_t Sai::initialize( { SWSS_LOG_NOTICE("failed to obtain service method table value: %s", SAI_KEY_VS_SAI_SWITCH_TYPE); saiSwitchType = SAI_SWITCH_TYPE_NPU; - } else if (!SwitchConfig::parseSaiSwitchType(sai_switch_type, saiSwitchType)) + } + else if (!SwitchConfig::parseSaiSwitchType(sai_switch_type, saiSwitchType)) { - return SAI_STATUS_FAILURE; + return SAI_STATUS_FAILURE; } auto *laneMapFile = service_method_table->profile_get_value(0, SAI_KEY_VS_INTERFACE_LANE_MAP_FILE); @@ -176,8 +177,7 @@ sai_status_t Sai::initialize( if (saiSwitchType == SAI_SWITCH_TYPE_NPU) { - - startFdbAgingThread(); + startFdbAgingThread(); } m_apiInitialized = true; diff --git a/vslib/src/SwitchConfig.cpp b/vslib/src/SwitchConfig.cpp index 1d94f7031..7738eae0d 100644 --- a/vslib/src/SwitchConfig.cpp +++ b/vslib/src/SwitchConfig.cpp @@ -70,7 +70,7 @@ bool SwitchConfig::parseSwitchType( } else { - SWSS_LOG_ERROR("unknown switch type: '%s', expected (%s|%s)(%s)", + SWSS_LOG_ERROR("unknown switch type: '%s', expected (%s|%s|%s)", switchTypeStr, SAI_VALUE_VS_SWITCH_TYPE_BCM81724, SAI_VALUE_VS_SWITCH_TYPE_BCM56850, From 4d93ea94904688d52af723f28d67f0e43dadb08f Mon Sep 17 00:00:00 2001 From: Syd Logan Date: Tue, 23 Jun 2020 21:29:18 -0700 Subject: [PATCH 3/4] recode syncd_init_common.sh to support physyncd --- syncd/scripts/physyncd_init_common.sh | 89 --------------------------- syncd/scripts/physyncd_start.sh | 4 +- syncd/scripts/syncd_init_common.sh | 77 ++++++++++++++++------- 3 files changed, 56 insertions(+), 114 deletions(-) delete mode 100644 syncd/scripts/physyncd_init_common.sh diff --git a/syncd/scripts/physyncd_init_common.sh b/syncd/scripts/physyncd_init_common.sh deleted file mode 100644 index 612b8d40e..000000000 --- a/syncd/scripts/physyncd_init_common.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env bash - -CMD_PHYSYNCD=/usr/bin/physyncd - -# dsserve: domain socket server for stdio -CMD_DSSERVE=/usr/bin/dsserve -CMD_DSSERVE_ARGS="$CMD_PHYSYNCD --diag" - -ENABLE_SAITHRIFT=0 - -PLATFORM_DIR=/usr/share/sonic/platform -HWSKU_DIR=/usr/share/sonic/hwsku - -SONIC_ASIC_TYPE=$(sonic-cfggen -y /etc/sonic/sonic_version.yml -v asic_type) - -if [ -x $CMD_DSSERVE ]; then - CMD=$CMD_DSSERVE - CMD_ARGS=$CMD_DSSERVE_ARGS -else - CMD=$CMD_PHYSYNCD - CMD_ARGS= -fi - -# Use temporary view between init and apply -CMD_ARGS+=" -u" - -BOOT_TYPE="$(cat /proc/cmdline | grep -o 'SONIC_BOOT_TYPE=\S*' | cut -d'=' -f2)" - -case "$BOOT_TYPE" in - fast-reboot) - FAST_REBOOT='yes' - ;; - fastfast) - if [ -e /var/warmboot/warm-starting ]; then - FASTFAST_REBOOT='yes' - fi - ;; - *) - FAST_REBOOT='no' - FASTFAST_REBOOT='no' - ;; -esac - - -function check_warm_boot() -{ - # FIXME: if we want to continue start option approach, then we need to add - # code here to support redis database query. - # SYSTEM_WARM_START=`/usr/bin/redis-cli -n 6 hget "WARM_RESTART_ENABLE_TABLE|system" enable` - # SERVICE_WARM_START=`/usr/bin/redis-cli -n 6 hget "WARM_RESTART_ENABLE_TABLE|${SERVICE}" enable` - # SYSTEM_WARM_START could be empty, always make WARM_BOOT meaningful. - # if [[ x"$SYSTEM_WARM_START" == x"true" ]] || [[ x"$SERVICE_WARM_START" == x"true" ]]; then - # WARM_BOOT="true" - # else - WARM_BOOT="false" - # fi -} - - -function set_start_type() -{ - if [ x"$WARM_BOOT" == x"true" ]; then - CMD_ARGS+=" -t warm" - elif [ $FAST_REBOOT == "yes" ]; then - CMD_ARGS+=" -t fast" - elif [ $FASTFAST_REBOOT == "yes" ]; then - CMD_ARGS+=" -t fastfast" - fi -} - - -config_syncd_bcm() -{ - :; -} - - -config_physyncd() -{ - - set_start_type - - if [ ${ENABLE_SAITHRIFT} == 1 ]; then - CMD_ARGS+=" -r -m $HWSKU_DIR/port_config.ini" - fi - - [ -r $PLATFORM_DIR/physyncd.conf ] && . $PLATFORM_DIR/physyncd.conf -} - diff --git a/syncd/scripts/physyncd_start.sh b/syncd/scripts/physyncd_start.sh index 2002be31b..60a7f28c6 100644 --- a/syncd/scripts/physyncd_start.sh +++ b/syncd/scripts/physyncd_start.sh @@ -4,9 +4,9 @@ # # Source the file that holds common code for systemd and supervisord -. /usr/bin/physyncd_init_common.sh +. /usr/bin/syncd_init_common.sh -p -config_physyncd +config_syncd_phy exec "/usr/bin/physyncd_startup.py" diff --git a/syncd/scripts/syncd_init_common.sh b/syncd/scripts/syncd_init_common.sh index 725db8953..b02a667bb 100755 --- a/syncd/scripts/syncd_init_common.sh +++ b/syncd/scripts/syncd_init_common.sh @@ -1,6 +1,20 @@ #!/usr/bin/env bash -CMD_SYNCD=/usr/bin/syncd +CHIP_TYPE="npu" + +while getopts p option +do +case "${option}" +in +p) CHIP_TYPE="phy";; +esac +done + +if [ x"$CHIP_TYPE" == x"phy" ]; then + CMD_SYNCD=/usr/bin/physyncd +else + CMD_SYNCD=/usr/bin/syncd +fi # dsserve: domain socket server for stdio CMD_DSSERVE=/usr/bin/dsserve @@ -11,6 +25,7 @@ ENABLE_SAITHRIFT=0 PLATFORM_DIR=/usr/share/sonic/platform HWSKU_DIR=/usr/share/sonic/hwsku + SONIC_ASIC_TYPE=$(sonic-cfggen -y /etc/sonic/sonic_version.yml -v asic_type) if [ -x $CMD_DSSERVE ]; then @@ -71,6 +86,14 @@ function set_start_type() fi } +config_syncd_phy() +{ + if [ ${ENABLE_SAITHRIFT} == 1 ]; then + CMD_ARGS+=" -r -m $HWSKU_DIR/port_config.ini" + fi + + [ -r $PLATFORM_DIR/physyncd.conf ] && . $PLATFORM_DIR/physyncd.conf +} config_syncd_bcm() { @@ -175,35 +198,43 @@ config_syncd() { check_warm_boot - if [ "$SONIC_ASIC_TYPE" == "broadcom" ]; then - config_syncd_bcm - elif [ "$SONIC_ASIC_TYPE" == "mellanox" ]; then - config_syncd_mlnx - elif [ "$SONIC_ASIC_TYPE" == "cavium" ]; then - config_syncd_cavium - elif [ "$SONIC_ASIC_TYPE" == "centec" ]; then - config_syncd_centec - elif [ "$SONIC_ASIC_TYPE" == "marvell" ]; then - config_syncd_marvell - elif [ "$SONIC_ASIC_TYPE" == "barefoot" ]; then - config_syncd_barefoot - elif [ "$SONIC_ASIC_TYPE" == "nephos" ]; then - config_syncd_nephos - elif [ "$SONIC_ASIC_TYPE" == "vs" ]; then - config_syncd_vs - elif [ "$SONIC_ASIC_TYPE" == "innovium" ]; then - config_syncd_innovium + if [ x"$CHIP_TYPE" == x"npu" ]; then + if [ "$SONIC_ASIC_TYPE" == "broadcom" ]; then + config_syncd_bcm + elif [ "$SONIC_ASIC_TYPE" == "mellanox" ]; then + config_syncd_mlnx + elif [ "$SONIC_ASIC_TYPE" == "cavium" ]; then + config_syncd_cavium + elif [ "$SONIC_ASIC_TYPE" == "centec" ]; then + config_syncd_centec + elif [ "$SONIC_ASIC_TYPE" == "marvell" ]; then + config_syncd_marvell + elif [ "$SONIC_ASIC_TYPE" == "barefoot" ]; then + config_syncd_barefoot + elif [ "$SONIC_ASIC_TYPE" == "nephos" ]; then + config_syncd_nephos + elif [ "$SONIC_ASIC_TYPE" == "vs" ]; then + config_syncd_vs + elif [ "$SONIC_ASIC_TYPE" == "innovium" ]; then + config_syncd_innovium + else + echo "Unknown ASIC type $SONIC_ASIC_TYPE" + exit 1 + fi else - echo "Unknown ASIC type $SONIC_ASIC_TYPE" - exit 1 + config_syncd_phy fi - + set_start_type if [ ${ENABLE_SAITHRIFT} == 1 ]; then CMD_ARGS+=" -r -m $HWSKU_DIR/port_config.ini" fi - [ -r $PLATFORM_DIR/syncd.conf ] && . $PLATFORM_DIR/syncd.conf + if [ x"$CHIP_TYPE" == "npu" ]; then + [ -r $PLATFORM_DIR/syncd.conf ] && . $PLATFORM_DIR/syncd.conf + else + [ -r $PLATFORM_DIR/physyncd.conf ] && . $PLATFORM_DIR/physyncd.conf + fi } From 9e2d0c437ca06240b529c3e9ef287c350c02b081 Mon Sep 17 00:00:00 2001 From: Syd Logan Date: Thu, 25 Jun 2020 13:08:29 -0700 Subject: [PATCH 4/4] revert syncd_init_common.sh to support only launching syncd, modify physyncd_start.sh to launch via python script bypassing syncd_init_common --- syncd/scripts/physyncd_start.sh | 5 -- syncd/scripts/syncd_init_common.sh | 77 +++++++++--------------------- 2 files changed, 23 insertions(+), 59 deletions(-) diff --git a/syncd/scripts/physyncd_start.sh b/syncd/scripts/physyncd_start.sh index 60a7f28c6..32655f37a 100644 --- a/syncd/scripts/physyncd_start.sh +++ b/syncd/scripts/physyncd_start.sh @@ -3,10 +3,5 @@ # Script to start syncd using supervisord # -# Source the file that holds common code for systemd and supervisord -. /usr/bin/syncd_init_common.sh -p - -config_syncd_phy - exec "/usr/bin/physyncd_startup.py" diff --git a/syncd/scripts/syncd_init_common.sh b/syncd/scripts/syncd_init_common.sh index b02a667bb..725db8953 100755 --- a/syncd/scripts/syncd_init_common.sh +++ b/syncd/scripts/syncd_init_common.sh @@ -1,20 +1,6 @@ #!/usr/bin/env bash -CHIP_TYPE="npu" - -while getopts p option -do -case "${option}" -in -p) CHIP_TYPE="phy";; -esac -done - -if [ x"$CHIP_TYPE" == x"phy" ]; then - CMD_SYNCD=/usr/bin/physyncd -else - CMD_SYNCD=/usr/bin/syncd -fi +CMD_SYNCD=/usr/bin/syncd # dsserve: domain socket server for stdio CMD_DSSERVE=/usr/bin/dsserve @@ -25,7 +11,6 @@ ENABLE_SAITHRIFT=0 PLATFORM_DIR=/usr/share/sonic/platform HWSKU_DIR=/usr/share/sonic/hwsku - SONIC_ASIC_TYPE=$(sonic-cfggen -y /etc/sonic/sonic_version.yml -v asic_type) if [ -x $CMD_DSSERVE ]; then @@ -86,14 +71,6 @@ function set_start_type() fi } -config_syncd_phy() -{ - if [ ${ENABLE_SAITHRIFT} == 1 ]; then - CMD_ARGS+=" -r -m $HWSKU_DIR/port_config.ini" - fi - - [ -r $PLATFORM_DIR/physyncd.conf ] && . $PLATFORM_DIR/physyncd.conf -} config_syncd_bcm() { @@ -198,43 +175,35 @@ config_syncd() { check_warm_boot - if [ x"$CHIP_TYPE" == x"npu" ]; then - if [ "$SONIC_ASIC_TYPE" == "broadcom" ]; then - config_syncd_bcm - elif [ "$SONIC_ASIC_TYPE" == "mellanox" ]; then - config_syncd_mlnx - elif [ "$SONIC_ASIC_TYPE" == "cavium" ]; then - config_syncd_cavium - elif [ "$SONIC_ASIC_TYPE" == "centec" ]; then - config_syncd_centec - elif [ "$SONIC_ASIC_TYPE" == "marvell" ]; then - config_syncd_marvell - elif [ "$SONIC_ASIC_TYPE" == "barefoot" ]; then - config_syncd_barefoot - elif [ "$SONIC_ASIC_TYPE" == "nephos" ]; then - config_syncd_nephos - elif [ "$SONIC_ASIC_TYPE" == "vs" ]; then - config_syncd_vs - elif [ "$SONIC_ASIC_TYPE" == "innovium" ]; then - config_syncd_innovium - else - echo "Unknown ASIC type $SONIC_ASIC_TYPE" - exit 1 - fi + if [ "$SONIC_ASIC_TYPE" == "broadcom" ]; then + config_syncd_bcm + elif [ "$SONIC_ASIC_TYPE" == "mellanox" ]; then + config_syncd_mlnx + elif [ "$SONIC_ASIC_TYPE" == "cavium" ]; then + config_syncd_cavium + elif [ "$SONIC_ASIC_TYPE" == "centec" ]; then + config_syncd_centec + elif [ "$SONIC_ASIC_TYPE" == "marvell" ]; then + config_syncd_marvell + elif [ "$SONIC_ASIC_TYPE" == "barefoot" ]; then + config_syncd_barefoot + elif [ "$SONIC_ASIC_TYPE" == "nephos" ]; then + config_syncd_nephos + elif [ "$SONIC_ASIC_TYPE" == "vs" ]; then + config_syncd_vs + elif [ "$SONIC_ASIC_TYPE" == "innovium" ]; then + config_syncd_innovium else - config_syncd_phy + echo "Unknown ASIC type $SONIC_ASIC_TYPE" + exit 1 fi - + set_start_type if [ ${ENABLE_SAITHRIFT} == 1 ]; then CMD_ARGS+=" -r -m $HWSKU_DIR/port_config.ini" fi - if [ x"$CHIP_TYPE" == "npu" ]; then - [ -r $PLATFORM_DIR/syncd.conf ] && . $PLATFORM_DIR/syncd.conf - else - [ -r $PLATFORM_DIR/physyncd.conf ] && . $PLATFORM_DIR/physyncd.conf - fi + [ -r $PLATFORM_DIR/syncd.conf ] && . $PLATFORM_DIR/syncd.conf }