diff --git a/.github/workflows/dash-saithrift-client-bldr-docker-acr.yml b/.github/workflows/dash-saithrift-client-bldr-docker-acr.yml index 00ce811fd..eac589a5c 100644 --- a/.github/workflows/dash-saithrift-client-bldr-docker-acr.yml +++ b/.github/workflows/dash-saithrift-client-bldr-docker-acr.yml @@ -53,4 +53,4 @@ jobs: - name: Build dash-saithrift-client-bldr image run: DOCKER_FLAGS=$docker_fg_flags make docker-saithrift-client-bldr - name: Publish dash-saithrift-client-bldr docker image - run: make docker-publish-saichallenger-client + run: make docker-publish-saithrift-client-bldr diff --git a/.wordlist.txt b/.wordlist.txt index 8963d3fc1..f080de187 100644 --- a/.wordlist.txt +++ b/.wordlist.txt @@ -258,6 +258,7 @@ io IP IPs ip +ips IPDK IPU IPUs @@ -426,6 +427,7 @@ reconvergence README READMEs README's +reconvergence RedirectRuleResimulatedUf redis renderer diff --git a/Disaggregated_APIs_ for_SONiC_Hosts_Trademark_License.docx b/Disaggregated_APIs_ for_SONiC_Hosts_Trademark_License.docx new file mode 100644 index 000000000..4ef6df7cc Binary files /dev/null and b/Disaggregated_APIs_ for_SONiC_Hosts_Trademark_License.docx differ diff --git a/Enterprise_Disaggregated_APIs_for_SONiC_API_Distribution_Trademark_License.docx b/Enterprise_Disaggregated_APIs_for_SONiC_API_Distribution_Trademark_License.docx new file mode 100644 index 000000000..1a750fd3b Binary files /dev/null and b/Enterprise_Disaggregated_APIs_for_SONiC_API_Distribution_Trademark_License.docx differ diff --git a/dash-pipeline/SAI/templates/saiapi.cpp.j2 b/dash-pipeline/SAI/templates/saiapi.cpp.j2 index 791ff1372..263c85a91 100644 --- a/dash-pipeline/SAI/templates/saiapi.cpp.j2 +++ b/dash-pipeline/SAI/templates/saiapi.cpp.j2 @@ -119,17 +119,20 @@ sai_status_t sai_create_{{ table.name }}( {% else %} // Search the action for (uint32_t i = 0; i < attr_count; i++) { - switch(attr_list[i].value.s32) { - {% for action in table.actions %} - case SAI_{{ table.name | upper }}_ACTION_{{ action.name | upper }}: { - actionId = {{action.id}}; - expectedParams = {{ action.params|length }}; - break; + if (SAI_{{ table.name | upper }}_ATTR_ACTION == attr_list[i].id) + { + switch(attr_list[i].value.s32) { + {% for action in table.actions %} + case SAI_{{ table.name | upper }}_ACTION_{{ action.name | upper }}: { + actionId = {{action.id}}; + expectedParams = {{ action.params|length }}; + break; + } + {% endfor %} } - {% endfor %} + // only one action + break; } - // only one action - break; } {% endif %} action->set_action_id(actionId); diff --git a/dash-pipeline/SAI/templates/utils.cpp.j2 b/dash-pipeline/SAI/templates/utils.cpp.j2 index fe673a090..93b2c6188 100644 --- a/dash-pipeline/SAI/templates/utils.cpp.j2 +++ b/dash-pipeline/SAI/templates/utils.cpp.j2 @@ -152,8 +152,8 @@ grpc::StatusCode MutateTableEntry(p4::v1::TableEntry *entry, p4::v1::Update_Type LOG("GRPC call Write::" << updateTypeStr(updateType) << " OK" << entry->ShortDebugString() << std::endl); } else { - LOG("GRPC ERROR["<< status.error_code() <<"]: " << status.error_message() << ", " << status.error_details()); - LOG("GRPC call Write::" << updateTypeStr(updateType) << " ERROR: " << std::endl << entry->ShortDebugString()); + LOG("GRPC ERROR["<< status.error_code() <<"]: " << status.error_message() << ", " << status.error_details() << std::endl); + LOG("GRPC call Write::" << updateTypeStr(updateType) << " ERROR: " << std::endl << entry->ShortDebugString() << std::endl); } //MILIND?? What is this? reference release? memory release? entity->release_table_entry(); @@ -163,13 +163,12 @@ grpc::StatusCode MutateTableEntry(p4::v1::TableEntry *entry, p4::v1::Update_Type bool InsertInTable(p4::v1::TableEntry *entry, sai_object_id_t *objId) { auto retCode = MutateTableEntry(entry, p4::v1::Update_Type_INSERT); if (grpc::StatusCode::OK != retCode) { - delete entry; return false; } tableLock.lock(); if (*objId == 0) { - *objId = nextId++; + *objId = NextObjIndex(); } tableEntryMap[*objId] = entry; tableLock.unlock(); diff --git a/dash-pipeline/tests/saithrift/ptf/vnet/test_saithrift_vnet.py b/dash-pipeline/tests/saithrift/ptf/vnet/test_saithrift_vnet.py index 296bb1547..89dc2c378 100644 --- a/dash-pipeline/tests/saithrift/ptf/vnet/test_saithrift_vnet.py +++ b/dash-pipeline/tests/saithrift/ptf/vnet/test_saithrift_vnet.py @@ -93,10 +93,9 @@ def setUp(self): dip = sai_thrift_ip_address_t(addr_family=SAI_IP_ADDR_FAMILY_IPV4, addr=sai_thrift_ip_addr_t(ip4=self.dst_ca_ip)) - # TODO: Enable ACL rule - #self.out_acl_rule_id = sai_thrift_create_dash_acl_rule(self.client, dash_acl_group_id=self.out_acl_group_id, - # dip=dip, priority=10, action=SAI_DASH_ACL_RULE_ACTION_PERMIT) - #assert(status == SAI_STATUS_SUCCESS) + + self.out_acl_rule_id = sai_thrift_create_dash_acl_rule(self.client, dash_acl_group_id=self.out_acl_group_id, priority=10, action=SAI_DASH_ACL_RULE_ACTION_PERMIT) + assert(status == SAI_STATUS_SUCCESS) ca_prefix = sai_thrift_ip_prefix_t(addr_family=SAI_IP_ADDR_FAMILY_IPV4, addr=sai_thrift_ip_addr_t(ip4="10.1.0.0"), @@ -214,7 +213,7 @@ def runTest(self): send_packet(self, 0, vxlan_pkt) print("\nVerifying packet...\n", self.pkt_exp.__repr__()) verify_packet(self, self.pkt_exp, 0) - print ("test_sai_thrift_outbound_udp_pkt_test OK") + print ("TestSaiThrift_outbound_udp_pkt OK") except AssertionError as ae: self.failure_teardown() raise ae @@ -225,8 +224,8 @@ def failure_teardown(self): status = sai_thrift_remove_outbound_ca_to_pa_entry(self.client, self.ocpe) if hasattr(self, "ore"): status = sai_thrift_remove_outbound_routing_entry(self.client, self.ore) - #if hasattr(self, "out_acl_rule_id"): - # sai_thrift_remove_dash_acl_rule(self.client, self.out_acl_rule_id) + if hasattr(self, "out_acl_rule_id"): + sai_thrift_remove_dash_acl_rule(self.client, self.out_acl_rule_id) if hasattr(self, "e2v"): sai_thrift_remove_outbound_eni_to_vni_entry(self.client, self.e2v) if hasattr(self, "eam"): @@ -249,34 +248,35 @@ def failure_teardown(self): def tearDown(self): # Delete in reverse order - if self.cleaned_up: - return - status = sai_thrift_remove_outbound_ca_to_pa_entry(self.client, self.ocpe) - assert(status == SAI_STATUS_SUCCESS) + if not self.cleaned_up: + status = sai_thrift_remove_outbound_ca_to_pa_entry(self.client, self.ocpe) + assert(status == SAI_STATUS_SUCCESS) - status = sai_thrift_remove_outbound_routing_entry(self.client, self.ore) - assert(status == SAI_STATUS_SUCCESS) + status = sai_thrift_remove_outbound_routing_entry(self.client, self.ore) + assert(status == SAI_STATUS_SUCCESS) - #status = sai_thrift_remove_dash_acl_rule(self.client, self.out_acl_rule_id) - #assert(status == SAI_STATUS_SUCCESS) + #status = sai_thrift_remove_dash_acl_rule(self.client, self.out_acl_rule_id) + #assert(status == SAI_STATUS_SUCCESS) - status = sai_thrift_remove_eni_ether_address_map_entry(self.client, self.eam) - assert(status == SAI_STATUS_SUCCESS) + status = sai_thrift_remove_eni_ether_address_map_entry(self.client, self.eam) + assert(status == SAI_STATUS_SUCCESS) - status = sai_thrift_remove_eni(self.client, self.eni) - assert(status == SAI_STATUS_SUCCESS) + status = sai_thrift_remove_eni(self.client, self.eni) + assert(status == SAI_STATUS_SUCCESS) - status = sai_thrift_remove_vnet(self.client, self.vnet) - assert(status == SAI_STATUS_SUCCESS) + status = sai_thrift_remove_vnet(self.client, self.vnet) + assert(status == SAI_STATUS_SUCCESS) + + status = sai_thrift_remove_dash_acl_group(self.client, self.out_acl_group_id) + assert(status == SAI_STATUS_SUCCESS) - status = sai_thrift_remove_dash_acl_group(self.client, self.out_acl_group_id) - assert(status == SAI_STATUS_SUCCESS) + status = sai_thrift_remove_dash_acl_group(self.client, self.in_acl_group_id) + assert(status == SAI_STATUS_SUCCESS) - status = sai_thrift_remove_dash_acl_group(self.client, self.in_acl_group_id) - assert(status == SAI_STATUS_SUCCESS) + status = sai_thrift_remove_direction_lookup_entry(self.client, self.dle) + assert(status == SAI_STATUS_SUCCESS) - status = sai_thrift_remove_direction_lookup_entry(self.client, self.dle) - assert(status == SAI_STATUS_SUCCESS) + sai_thrift_remove_vip_entry(self.client, self.vpe) + assert(status == SAI_STATUS_SUCCESS) - sai_thrift_remove_vip_entry(self.client, self.vpe) - assert(status == SAI_STATUS_SUCCESS) + super(self.__class__, self).tearDown() diff --git a/dash-pipeline/tests/saithrift/ptf/vnet/test_saithrift_vnet_v6.py b/dash-pipeline/tests/saithrift/ptf/vnet/test_saithrift_vnet_v6.py new file mode 100755 index 000000000..02e6cebc2 --- /dev/null +++ b/dash-pipeline/tests/saithrift/ptf/vnet/test_saithrift_vnet_v6.py @@ -0,0 +1,285 @@ +from sai_thrift.sai_headers import * +from sai_base_test import * +# TODO - when switch APIs implemented: +# class TestSaiThrift_outbound_udp_pkt(SaiHelper): + +class TestSaiThrift_outbound_udpv6_pkt(ThriftInterfaceDataPlane): + """ Test saithrift vnet outbound""" + def setUp(self): + super(TestSaiThrift_outbound_udpv6_pkt, self).setUp() + self.switch_id = 5 + self.outbound_vni = 60 + self.vnet_vni = 50 + self.eni_mac = "00:aa:aa:aa:aa:aa" + self.our_mac = "00:00:06:07:08:09" + self.dst_ca_mac = "00:bb:bb:bb:bb:bb" + self.vip = "172.16.1.200" + self.outbound_vni = 50 + self.dst_ca_ip = "2000:aaaa::232" + self.dst_pa_ip = "172.16.1.30" + self.src_vm_pa_ip = "172.16.1.2" + self.cleaned_up = False + + try: + vip = sai_thrift_ip_address_t(addr_family=SAI_IP_ADDR_FAMILY_IPV4, + addr=sai_thrift_ip_addr_t(ip4=self.vip)) + self.vpe = sai_thrift_vip_entry_t(switch_id=self.switch_id, vip=vip) + + status = sai_thrift_create_vip_entry(self.client, self.vpe, + action=SAI_VIP_ENTRY_ACTION_ACCEPT) + assert(status == SAI_STATUS_SUCCESS) + + + self.dle = sai_thrift_direction_lookup_entry_t(switch_id=self.switch_id, vni=self.outbound_vni) + status = sai_thrift_create_direction_lookup_entry(self.client, self.dle, + action=SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION) + assert(status == SAI_STATUS_SUCCESS) + + self.in_acl_group_id = sai_thrift_create_dash_acl_group(self.client, + ip_addr_family=SAI_IP_ADDR_FAMILY_IPV6) + assert (self.in_acl_group_id != SAI_NULL_OBJECT_ID) + self.out_acl_group_id = sai_thrift_create_dash_acl_group(self.client, + ip_addr_family=SAI_IP_ADDR_FAMILY_IPV6) + assert (self.out_acl_group_id != SAI_NULL_OBJECT_ID) + + self.vnet = sai_thrift_create_vnet(self.client, vni=self.vnet_vni) + assert (self.vnet != SAI_NULL_OBJECT_ID) + + vm_underlay_dip = sai_thrift_ip_address_t(addr_family=SAI_IP_ADDR_FAMILY_IPV4, + addr=sai_thrift_ip_addr_t(ip4=self.src_vm_pa_ip)) + self.eni = sai_thrift_create_eni(self.client, cps=10000, + pps=100000, flows=100000, + admin_state=True, + vm_underlay_dip=vm_underlay_dip, + vm_vni=9, + vnet_id=self.vnet, + # TODO: Enable ACL rule + #inbound_v4_stage1_dash_acl_group_id = self.in_acl_group_id, + #inbound_v4_stage2_dash_acl_group_id = self.in_acl_group_id, + #inbound_v4_stage3_dash_acl_group_id = self.in_acl_group_id, + #inbound_v4_stage4_dash_acl_group_id = self.in_acl_group_id, + #inbound_v4_stage5_dash_acl_group_id = self.in_acl_group_id, + #outbound_v4_stage1_dash_acl_group_id = self.out_acl_group_id, + #outbound_v4_stage2_dash_acl_group_id = self.out_acl_group_id, + #outbound_v4_stage3_dash_acl_group_id = self.out_acl_group_id, + #outbound_v4_stage4_dash_acl_group_id = self.out_acl_group_id, + #outbound_v4_stage5_dash_acl_group_id = self.out_acl_group_id, + inbound_v4_stage1_dash_acl_group_id = 0, + inbound_v4_stage2_dash_acl_group_id = 0, + inbound_v4_stage3_dash_acl_group_id = 0, + inbound_v4_stage4_dash_acl_group_id = 0, + inbound_v4_stage5_dash_acl_group_id = 0, + outbound_v4_stage1_dash_acl_group_id = 0, + outbound_v4_stage2_dash_acl_group_id = 0, + outbound_v4_stage3_dash_acl_group_id = 0, + outbound_v4_stage4_dash_acl_group_id = 0, + outbound_v4_stage5_dash_acl_group_id = 0, + inbound_v6_stage1_dash_acl_group_id = 0, + inbound_v6_stage2_dash_acl_group_id = 0, + inbound_v6_stage3_dash_acl_group_id = 0, + inbound_v6_stage4_dash_acl_group_id = 0, + inbound_v6_stage5_dash_acl_group_id = 0, + outbound_v6_stage1_dash_acl_group_id = 0, + outbound_v6_stage2_dash_acl_group_id = 0, + outbound_v6_stage3_dash_acl_group_id = 0, + outbound_v6_stage4_dash_acl_group_id = 0, + outbound_v6_stage5_dash_acl_group_id = 0) + + self.eam = sai_thrift_eni_ether_address_map_entry_t(switch_id=self.switch_id, address = self.eni_mac) + status = sai_thrift_create_eni_ether_address_map_entry(self.client, + eni_ether_address_map_entry=self.eam, + eni_id=self.eni) + assert(status == SAI_STATUS_SUCCESS) + + dip = sai_thrift_ip_address_t(addr_family=SAI_IP_ADDR_FAMILY_IPV6, + addr=sai_thrift_ip_addr_t(ip6=self.dst_ca_ip)) + # TODO: Enable ACL rule + #self.out_acl_rule_id = sai_thrift_create_dash_acl_rule(self.client, dash_acl_group_id=self.out_acl_group_id, + # dip=dip, priority=10, action=SAI_DASH_ACL_RULE_ACTION_PERMIT) + #assert(status == SAI_STATUS_SUCCESS) + + ca_prefix = sai_thrift_ip_prefix_t(addr_family=SAI_IP_ADDR_FAMILY_IPV6, + addr=sai_thrift_ip_addr_t(ip6="2000:aaaa::"), + mask=sai_thrift_ip_addr_t(ip6="ffff:ffff:ffff:ffff:ffff:ffff:ffff:0")) + + self.ore = sai_thrift_outbound_routing_entry_t(switch_id=self.switch_id, eni_id=self.eni, destination=ca_prefix) + status = sai_thrift_create_outbound_routing_entry(self.client, self.ore, action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET, dst_vnet_id = self.vnet) + print ("status returned is ", status) + assert(status == SAI_STATUS_SUCCESS) + + underlay_dip = sai_thrift_ip_address_t(addr_family=SAI_IP_ADDR_FAMILY_IPV4, + addr=sai_thrift_ip_addr_t(ip4=self.dst_pa_ip)) + self.ocpe = sai_thrift_outbound_ca_to_pa_entry_t(switch_id=self.switch_id, dst_vnet_id=self.vnet, dip=dip) + status = sai_thrift_create_outbound_ca_to_pa_entry(self.client, self.ocpe, underlay_dip = underlay_dip, overlay_dmac=self.dst_ca_mac, use_dst_vnet_vni = True) + assert(status == SAI_STATUS_SUCCESS) + + except AssertionError as ae: + self.failure_teardown() + raise ae + + def runTest(self): + try: + src_vm_ip = "2000:aaaa::10a" + outer_smac = "00:00:03:06:06:06" + inner_smac = "00:00:02:06:06:06" + + # check VIP drop + wrong_vip = "172.16.100.100" + inner_pkt = simple_udpv6_packet(eth_dst="02:02:02:02:02:02", + eth_src=self.eni_mac, + ipv6_dst=self.dst_ca_ip, + ipv6_src=src_vm_ip) + vxlan_pkt = simple_vxlan_packet(eth_dst=self.our_mac, + eth_src=outer_smac, + ip_dst=wrong_vip, + ip_src=self.src_vm_pa_ip, + udp_sport=11638, + with_udp_chksum=False, + vxlan_vni=self.outbound_vni, + inner_frame=inner_pkt) + print("\n\nSending packet with wrong vip...\n\n", vxlan_pkt.__repr__()) + send_packet(self, 0, vxlan_pkt) + print("\nVerifying drop...") + verify_no_other_packets(self) + + # check routing drop + wrong_dst_ca = "2000:bbbb::232" + inner_pkt = simple_udpv6_packet(eth_dst="02:02:02:02:02:02", + eth_src=self.eni_mac, + ipv6_dst=wrong_dst_ca, + ipv6_src=src_vm_ip) + vxlan_pkt = simple_vxlan_packet(eth_dst=self.our_mac, + eth_src=outer_smac, + ip_dst=self.vip, + ip_src=self.src_vm_pa_ip, + udp_sport=11638, + with_udp_chksum=False, + vxlan_vni=self.outbound_vni, + inner_frame=inner_pkt) + print("\nSending packet with wrong dst CA IP to verify routing drop...\n\n", vxlan_pkt.__repr__()) + send_packet(self, 0, vxlan_pkt) + print("\nVerifying drop...") + verify_no_other_packets(self) + + # check mapping drop + wrong_dst_ca = "2000:aaaa::d3d3" + inner_pkt = simple_udpv6_packet(eth_dst="02:02:02:02:02:02", + eth_src=self.eni_mac, + ipv6_dst=wrong_dst_ca, + ipv6_src=src_vm_ip) + vxlan_pkt = simple_vxlan_packet(eth_dst=self.our_mac, + eth_src=outer_smac, + ip_dst=self.vip, + ip_src=self.src_vm_pa_ip, + udp_sport=11638, + with_udp_chksum=False, + vxlan_vni=self.outbound_vni, + inner_frame=inner_pkt) + print("\nSending packet with wrong dst CA IP to verify mapping drop...\n\n", vxlan_pkt.__repr__()) + send_packet(self, 0, vxlan_pkt) + print("\nVerifying drop...") + verify_no_other_packets(self) + + # check forwarding + inner_pkt = simple_udpv6_packet(eth_dst="02:02:02:02:02:02", + eth_src=self.eni_mac, + ipv6_dst=self.dst_ca_ip, + ipv6_src=src_vm_ip) + vxlan_pkt = simple_vxlan_packet(eth_dst=self.our_mac, + eth_src=outer_smac, + ip_dst=self.vip, + ip_src=self.src_vm_pa_ip, + udp_sport=11638, + with_udp_chksum=False, + vxlan_vni=self.outbound_vni, + inner_frame=inner_pkt) + + inner_exp_pkt = simple_udpv6_packet(eth_dst=self.dst_ca_mac, + eth_src=self.eni_mac, + ipv6_dst=self.dst_ca_ip, + ipv6_src=src_vm_ip) + vxlan_exp_pkt = simple_vxlan_packet(eth_dst="00:00:00:00:00:00", + eth_src="00:00:00:00:00:00", + ip_dst=self.dst_pa_ip, + ip_src=self.vip, + udp_sport=0, # TODO: Fix sport in pipeline + with_udp_chksum=False, + vxlan_vni=self.vnet_vni, + inner_frame=inner_exp_pkt) + # TODO: Fix IP chksum + vxlan_exp_pkt[IP].chksum = 0 + # TODO: Fix UDP length + vxlan_exp_pkt[IP][UDP][VXLAN].flags = 0 + + self.pkt_exp = vxlan_exp_pkt + print("\nSending outbound packet...\n\n", vxlan_pkt.__repr__()) + send_packet(self, 0, vxlan_pkt) + print("\nVerifying packet...\n", self.pkt_exp.__repr__()) + verify_packet(self, self.pkt_exp, 0) + print ("TestSaiThrift_outbound_udpv6_pkt OK") + except AssertionError as ae: + self.failure_teardown() + raise ae + + def failure_teardown(self): + # Delete entries which might be lingering from previous failures etc.; ignore failures here + if hasattr(self, "ocpe"): + status = sai_thrift_remove_outbound_ca_to_pa_entry(self.client, self.ocpe) + if hasattr(self, "ore"): + status = sai_thrift_remove_outbound_routing_entry(self.client, self.ore) + #if hasattr(self, "out_acl_rule_id"): + # sai_thrift_remove_dash_acl_rule(self.client, self.out_acl_rule_id) + if hasattr(self, "e2v"): + sai_thrift_remove_outbound_eni_to_vni_entry(self.client, self.e2v) + if hasattr(self, "eam"): + sai_thrift_remove_eni_ether_address_map_entry(self.client, self.eam) + if hasattr(self, "eni"): + sai_thrift_remove_eni(self.client, self.eni) + if hasattr(self, "vnet"): + sai_thrift_remove_vnet(self.client, self.vnet) + assert(status == SAI_STATUS_SUCCESS) + if hasattr(self, "out_acl_group_id") and self.out_acl_group_id != SAI_NULL_OBJECT_ID: + sai_thrift_remove_dash_acl_group(self.client, self.out_acl_group_id) + if hasattr(self, "in_acl_group_id") and self.in_acl_group_id != SAI_NULL_OBJECT_ID: + sai_thrift_remove_dash_acl_group(self.client, self.in_acl_group_id) + if hasattr(self, "dle"): + sai_thrift_remove_direction_lookup_entry(self.client, self.dle) + if hasattr(self, "vpe"): + sai_thrift_remove_vip_entry(self.client, self.vpe) + self.cleaned_up = True + + def tearDown(self): + + # Delete in reverse order + if not self.cleaned_up: + status = sai_thrift_remove_outbound_ca_to_pa_entry(self.client, self.ocpe) + assert(status == SAI_STATUS_SUCCESS) + + status = sai_thrift_remove_outbound_routing_entry(self.client, self.ore) + assert(status == SAI_STATUS_SUCCESS) + + #status = sai_thrift_remove_dash_acl_rule(self.client, self.out_acl_rule_id) + #assert(status == SAI_STATUS_SUCCESS) + + status = sai_thrift_remove_eni_ether_address_map_entry(self.client, self.eam) + assert(status == SAI_STATUS_SUCCESS) + + status = sai_thrift_remove_eni(self.client, self.eni) + assert(status == SAI_STATUS_SUCCESS) + + status = sai_thrift_remove_vnet(self.client, self.vnet) + assert(status == SAI_STATUS_SUCCESS) + + status = sai_thrift_remove_dash_acl_group(self.client, self.out_acl_group_id) + assert(status == SAI_STATUS_SUCCESS) + + status = sai_thrift_remove_dash_acl_group(self.client, self.in_acl_group_id) + assert(status == SAI_STATUS_SUCCESS) + + status = sai_thrift_remove_direction_lookup_entry(self.client, self.dle) + assert(status == SAI_STATUS_SUCCESS) + + sai_thrift_remove_vip_entry(self.client, self.vpe) + assert(status == SAI_STATUS_SUCCESS) + + super(self.__class__, self).tearDown() diff --git a/powered_by_Disaggregated_APIs_for_SONiC_Hosts_Trademark_License .docx b/powered_by_Disaggregated_APIs_for_SONiC_Hosts_Trademark_License .docx new file mode 100644 index 000000000..582d711e4 Binary files /dev/null and b/powered_by_Disaggregated_APIs_for_SONiC_Hosts_Trademark_License .docx differ diff --git a/test/test-cases/README.md b/test/test-cases/README.md index be8fc23f5..6af69aed1 100644 --- a/test/test-cases/README.md +++ b/test/test-cases/README.md @@ -5,18 +5,11 @@ This contains a hierarchical set of directories containing DASH test cases organ | Folder | Description | | --- | --- | -| functional | Tests to verify essential functionality using low-rate traffic (SAI PTF). -| scale | Tests with high-rate traffic and complex configuration to verify scaling real-world scenarios. +| [functional](./functional/) | Tests to verify essential functionality using low-rate traffic (SAI PTF). +| [scale](./scale/) | Tests with high-rate traffic and complex configuration to verify scaling real-world scenarios. ## functional | Folder/File | Description | | --- | --- | -| `saidashvnet.py` | VNET-to-VNET test cases - - -## scale - -| Folder/File | Description | -| --- | --- | -| [vnet2vnet](vnet2vnet/README.md) | DASH vnet2vnet Tests +| [`saidashvnet.py`](./functional/saidashvnet.py) | VNET-to-VNET test cases diff --git a/test/test-cases/scale/vnet2vnet/README.md b/test/test-cases/scale/vnet2vnet/README.md index 5f44d6823..89896c1ef 100644 --- a/test/test-cases/scale/vnet2vnet/README.md +++ b/test/test-cases/scale/vnet2vnet/README.md @@ -11,8 +11,8 @@ The files found within this directory serve the following purpose: | Test case | Description | | ---------------------------------------------- | --------------------------------------------------------- | -| [vxlan_1eni_1ip](one-ip) | minimum possible config | -| [vxlan_8eni_48k_IPs](48k-IPs) | medium sized config | +| [vxlan_1eni_1ip](one-ip) | minimum possible config | +| [vxlan_8eni_48k_IPs](48K-ips) | medium sized config | @@ -95,6 +95,7 @@ The files found within this directory serve the following purpose: # test cases -| Test case | Description | -| ---------------------------------------------- | --------------------------------------------------------- | -| [vxlan_1vpc_1ip](README.vxlan_1vpc_1ip.md) | performance numbers for best case scenario | +| Test case | Description | +| ---------------------------------------------- | -------------------------------------------------------------- | +| [vxlan_1vpc_1ip](one-ip/README.md) | performance numbers for best case scenario | +| [vxlan_8vpc_48K-ips](48K-ips/README.md) | performance with an objective of maintaining 6M parallel flows | diff --git a/test/test-cases/scale/vnet2vnet/one-ip/README.md b/test/test-cases/scale/vnet2vnet/one-ip/README.md index 66fe29194..6a6170bb0 100644 --- a/test/test-cases/scale/vnet2vnet/one-ip/README.md +++ b/test/test-cases/scale/vnet2vnet/one-ip/README.md @@ -1,7 +1,7 @@ The purpose of this test case is to obtain the best performance numbers the hardware can achieve Combined with the worst case scenario cases (TBD) we will be able to determine the range of performance within the hardware can operate. -![vxlan_1vpc_1ip](../../../images/test_vxlan_1vpc_1ip.svg) +![vxlan_1vpc_1ip](../../../../images/test_vxlan_1vpc_1ip.svg) 1. Configure VXLAN with 1 VPC and 1 VNI. 2. Configure BGP to achieve connectivity between the loopback interfaces.