From 88bfcc9c93df8c9803cd2e66de1fb10f708d76bf Mon Sep 17 00:00:00 2001 From: Kumaresh Perumal Date: Wed, 8 May 2024 17:34:45 +0000 Subject: [PATCH 1/2] Add support for ECMP and LAG hash offset --- orchagent/switchorch.cpp | 27 +++++++++++++++++++++++++-- tests/test_switch.py | 23 +++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/orchagent/switchorch.cpp b/orchagent/switchorch.cpp index 9dc9bcfbde..3f1ee6a312 100644 --- a/orchagent/switchorch.cpp +++ b/orchagent/switchorch.cpp @@ -37,7 +37,9 @@ const map switch_attribute_map = {"fdb_aging_time", SAI_SWITCH_ATTR_FDB_AGING_TIME}, {"debug_shell_enable", SAI_SWITCH_ATTR_SWITCH_SHELL_ENABLE}, {"vxlan_port", SAI_SWITCH_ATTR_VXLAN_DEFAULT_PORT}, - {"vxlan_router_mac", SAI_SWITCH_ATTR_VXLAN_DEFAULT_ROUTER_MAC} + {"vxlan_router_mac", SAI_SWITCH_ATTR_VXLAN_DEFAULT_ROUTER_MAC}, + {"ecmp_hash_offset", SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET}, + {"lag_hash_offset", SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_OFFSET} }; const map switch_tunnel_attribute_map = @@ -541,6 +543,8 @@ void SwitchOrch::doAppSwitchTableTask(Consumer &consumer) MacAddress mac_addr; bool invalid_attr = false; + bool ret = false; + bool unsupported_attr = false; switch (attr.id) { case SAI_SWITCH_ATTR_FDB_UNICAST_MISS_PACKET_ACTION: @@ -578,11 +582,30 @@ void SwitchOrch::doAppSwitchTableTask(Consumer &consumer) memcpy(attr.value.mac, mac_addr.getMac(), sizeof(sai_mac_t)); break; + case SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET: + ret = querySwitchCapability(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET); + if(ret == false) { + SWSS_LOG_INFO("ECMP_HASH_OFFSET attribute is not supported"); + unsupported_attr = true; + } else { + attr.value.u8 = to_uint(value); + } + break; + case SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_OFFSET: + ret = querySwitchCapability(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_OFFSET); + if(ret == false) { + SWSS_LOG_INFO("LAG_HASH_OFFSET attribute is not supported"); + unsupported_attr = true; + } else { + attr.value.u8 = to_uint(value); + } + break; + default: invalid_attr = true; break; } - if (invalid_attr) + if (invalid_attr || unsupported_attr) { /* break from kfvFieldsValues for loop */ break; diff --git a/tests/test_switch.py b/tests/test_switch.py index 93cfd1389c..652fa46573 100644 --- a/tests/test_switch.py +++ b/tests/test_switch.py @@ -65,6 +65,27 @@ def vxlan_switch_test(dvs, oid, port, mac, mask, sport): ) +def ecmp_lag_hash_offset_test(dvs, oid, lag_offset, ecmp_offset): + app_db = swsscommon.DBConnector(swsscommon.APPL_DB, dvs.redis_sock, 0) + create_entry_pst( + app_db, + "SWITCH_TABLE", ':', "switch", + [ + ("ecmp_hash_offset", ecmp_offset), + ("lag_hash_offset", lag_offset) + ], + ) + time.sleep(2) + + asic_db = swsscommon.DBConnector(swsscommon.ASIC_DB, dvs.redis_sock, 0) + check_object(asic_db, "ASIC_STATE:SAI_OBJECT_TYPE_SWITCH", oid, + { + 'SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET': ecmp_offset, + 'SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_OFFSET': lag_offset, + } + ) + + class TestSwitch(object): ''' Test- Check switch attributes @@ -75,6 +96,8 @@ def test_switch_attribute(self, dvs, testlog): vxlan_switch_test(dvs, switch_oid, "56789", "00:0A:0B:0C:0D:0E", "15", "56789") + ecmp_lag_hash_offset_test(dvs, switch_oid, "10", "10") + # Add Dummy always-pass test at end as workaroud # for issue when Flaky fail on final test it invokes module tear-down before retrying From 318cdceb4b17cf026b71071c7b8be8a943478efb Mon Sep 17 00:00:00 2001 From: Kumaresh Perumal Date: Fri, 10 May 2024 20:16:02 +0000 Subject: [PATCH 2/2] Fix alignment --- orchagent/switchorch.cpp | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/orchagent/switchorch.cpp b/orchagent/switchorch.cpp index 3f1ee6a312..1674673366 100644 --- a/orchagent/switchorch.cpp +++ b/orchagent/switchorch.cpp @@ -584,20 +584,24 @@ void SwitchOrch::doAppSwitchTableTask(Consumer &consumer) case SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET: ret = querySwitchCapability(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_OFFSET); - if(ret == false) { - SWSS_LOG_INFO("ECMP_HASH_OFFSET attribute is not supported"); - unsupported_attr = true; - } else { - attr.value.u8 = to_uint(value); + if (ret == false) + { + unsupported_attr = true; + } + else + { + attr.value.u8 = to_uint(value); } break; case SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_OFFSET: ret = querySwitchCapability(SAI_OBJECT_TYPE_SWITCH, SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_OFFSET); - if(ret == false) { - SWSS_LOG_INFO("LAG_HASH_OFFSET attribute is not supported"); - unsupported_attr = true; - } else { - attr.value.u8 = to_uint(value); + if (ret == false) + { + unsupported_attr = true; + } + else + { + attr.value.u8 = to_uint(value); } break;