Skip to content

Commit

Permalink
[dash-p4] Add support to generate flow resimulation APIs (#553)
Browse files Browse the repository at this point in the history
This change updates the P4 pipeline to generate the flow resimulation APIs.

The change is following the DASH flow resimulation HLD defined in the PR here: #543.

The flow resimulation could not be directly implemented using plain p4 api call. The actual pipeline implementation will be postponed until data plane app is ready.

For the generated SAI API, the routing actions type will be generated as flag defined as below:

![image](https://github.com/sonic-net/DASH/assets/1533278/6c28c649-8b74-42f2-b32b-0990abe8d645)
  • Loading branch information
r12f authored May 30, 2024
1 parent aba7cfa commit e39249b
Show file tree
Hide file tree
Showing 27 changed files with 292 additions and 79 deletions.
1 change: 1 addition & 0 deletions dash-pipeline/SAI/sai_api_gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import re
import jinja2
import typing
import base64
import jsonpath_ng.ext as jsonpath_ext
import jsonpath_ng as jsonpath
from utils.dash_p4 import DashP4SAIExtensions
Expand Down
11 changes: 11 additions & 0 deletions dash-pipeline/SAI/templates/saienums.j2
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
{% for enum in sai_enums %}
/**
* @brief Defines a list of enums for {{ enum.name }}
{% if enum.explicit_value %}
*
* @flags strict
{% endif %}
*/
typedef enum _sai_{{ enum.name }}_t
{
{% for member in enum.members %}
{% if enum.explicit_value %}
SAI_{{ enum.name | upper }}_{{ member.name | upper }} = {{ member.enum_value }},
{% else %}
SAI_{{ enum.name | upper }}_{{ member.name | upper }},
{% endif %}

{% endfor %}
} sai_{{ enum.name }}_t;
Expand Down
13 changes: 13 additions & 0 deletions dash-pipeline/SAI/utils/dash_p4/dash_p4_enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ def __init__(self):
super().__init__()
self.bitwidth: int = 0
self.members: List[DashP4EnumMember] = []
self.explicit_value: bool = False

def parse_p4rt(self, p4rt_enum: Dict[str, Any]) -> None:
"""
Expand All @@ -39,6 +40,18 @@ def parse_p4rt(self, p4rt_enum: Dict[str, Any]) -> None:
for enum_member in p4rt_enum[MEMBERS_TAG]
]

# Check if all enum values are starting from 0 and contiguous.
expected_value = 0
for member in self.members:
if member.enum_value != expected_value:
self.explicit_value = True
break
expected_value += 1

print(
f"Enum parsed: {self.name}, Bitwidth = {self.bitwidth}, MemberCount = {len(self.members)}, ExplicitValue = {self.explicit_value}"
)

# Register enum type info.
SAITypeSolver.register_sai_type(
"sai_" + self.name + "_t",
Expand Down
6 changes: 4 additions & 2 deletions dash-pipeline/SAI/utils/dash_p4/dash_p4_enum_member.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import base64
from .common import *


Expand All @@ -9,7 +10,7 @@ class DashP4EnumMember(DashP4Object):

def __init__(self):
super().__init__()
self.p4rt_value: str = ""
self.enum_value: int = ""

def parse_p4rt(self, p4rt_member: Dict[str, Any]) -> None:
"""
Expand All @@ -19,4 +20,5 @@ def parse_p4rt(self, p4rt_member: Dict[str, Any]) -> None:
{ "name": "INVALID", "value": "AAA=" }
"""
self.p4rt_value = str(p4rt_member["value"])
decoded_bytes = base64.b64decode(str(p4rt_member["value"]))
self.enum_value = int.from_bytes(decoded_bytes, byteorder="big")
2 changes: 2 additions & 0 deletions dash-pipeline/bmv2/dash_counters.p4
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ DEFINE_ENI_HIT_COUNTER(flow_created, order=1)
DEFINE_ENI_HIT_COUNTER(flow_create_failed, order=1)
DEFINE_ENI_HIT_COUNTER(flow_updated, order=1)
DEFINE_ENI_HIT_COUNTER(flow_update_failed, order=1)
DEFINE_ENI_HIT_COUNTER(flow_updated_by_resimulation, order=1)
DEFINE_ENI_HIT_COUNTER(flow_update_by_resimulation_failed, order=1)
DEFINE_ENI_HIT_COUNTER(flow_deleted, order=1)
DEFINE_ENI_HIT_COUNTER(flow_delete_failed, order=1)
DEFINE_ENI_HIT_COUNTER(flow_aged, order=1)
Expand Down
1 change: 0 additions & 1 deletion dash-pipeline/bmv2/dash_metadata.p4
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
#define MAX_HA_SET 1

enum bit<32> dash_routing_actions_t {
NONE = 0,
STATIC_ENCAP = (1 << 0),
NAT = (1 << 1),
NAT46 = (1 << 2),
Expand Down
5 changes: 4 additions & 1 deletion dash-pipeline/bmv2/dash_pipeline.p4
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,10 @@ control dash_ingress(
ACL_GROUPS_PARAM(inbound_v6),
ACL_GROUPS_PARAM(outbound_v4),
ACL_GROUPS_PARAM(outbound_v6),
bit<1> disable_fast_path_icmp_flow_redirection) {
bit<1> disable_fast_path_icmp_flow_redirection,
bit<1> full_flow_resimulation_requested,
bit<64> max_resimulated_flow_per_second)
{
meta.eni_data.cps = cps;
meta.eni_data.pps = pps;
meta.eni_data.flows = flows;
Expand Down
20 changes: 14 additions & 6 deletions dash-pipeline/bmv2/dash_routing_types.p4
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ action route_vnet(
inout metadata_t meta,
@SaiVal[type="sai_object_id_t"] bit<16> dst_vnet_id,
bit<32> meter_class_or,
@SaiVal[default_value="4294967295"] bit<32> meter_class_and)
@SaiVal[default_value="4294967295"] bit<32> meter_class_and,
dash_routing_actions_t routing_actions_disabled_in_flow_resimulation)
{
meta.target_stage = dash_pipeline_stage_t.OUTBOUND_MAPPING;
meta.dst_vnet_id = dst_vnet_id;
Expand All @@ -45,7 +46,8 @@ action route_vnet_direct(
@SaiVal[type="sai_ip_address_t"]
IPv4ORv6Address overlay_ip,
bit<32> meter_class_or,
@SaiVal[default_value="4294967295"] bit<32> meter_class_and)
@SaiVal[default_value="4294967295"] bit<32> meter_class_and,
dash_routing_actions_t routing_actions_disabled_in_flow_resimulation)
{
meta.target_stage = dash_pipeline_stage_t.OUTBOUND_MAPPING;
meta.dst_vnet_id = dst_vnet_id;
Expand All @@ -61,7 +63,8 @@ action route_direct(
inout headers_t hdr,
inout metadata_t meta,
bit<32> meter_class_or,
@SaiVal[default_value="4294967295"] bit<32> meter_class_and)
@SaiVal[default_value="4294967295"] bit<32> meter_class_and,
dash_routing_actions_t routing_actions_disabled_in_flow_resimulation)
{
meta.target_stage = dash_pipeline_stage_t.OUTBOUND_PRE_ROUTING_ACTION_APPLY;
set_meter_attrs(meta, meter_class_or, meter_class_and);
Expand Down Expand Up @@ -89,7 +92,8 @@ action route_service_tunnel(
dash_encapsulation_t dash_encapsulation,
bit<24> tunnel_key,
bit<32> meter_class_or,
@SaiVal[default_value="4294967295"] bit<32> meter_class_and)
@SaiVal[default_value="4294967295"] bit<32> meter_class_and,
dash_routing_actions_t routing_actions_disabled_in_flow_resimulation)
{
/* Assume the overlay addresses provided are always IPv6 and the original are IPv4 */
/* assert(overlay_dip_is_v6 == 1 && overlay_sip_is_v6 == 1);
Expand Down Expand Up @@ -128,7 +132,9 @@ action set_tunnel_mapping(
@SaiVal[type="sai_ip_address_t"] IPv4Address underlay_dip,
EthernetAddress overlay_dmac,
bit<1> use_dst_vnet_vni,
bit<32> meter_class_or)
bit<32> meter_class_or,
bit<1> flow_resimulation_requested,
dash_routing_actions_t routing_actions_disabled_in_flow_resimulation)
{
meta.target_stage = dash_pipeline_stage_t.OUTBOUND_PRE_ROUTING_ACTION_APPLY;

Expand All @@ -152,7 +158,9 @@ action set_private_link_mapping(
IPv6Address overlay_dip,
@SaiVal[type="sai_dash_encapsulation_t"] dash_encapsulation_t dash_encapsulation,
bit<24> tunnel_key,
bit<32> meter_class_or)
bit<32> meter_class_or,
bit<1> flow_resimulation_requested,
dash_routing_actions_t routing_actions_disabled_in_flow_resimulation)
{
meta.target_stage = dash_pipeline_stage_t.OUTBOUND_PRE_ROUTING_ACTION_APPLY;

Expand Down
8 changes: 8 additions & 0 deletions dash-pipeline/tests/libsai/vnet_out/vnet_out.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,14 @@ int main(int argc, char **argv)
attr.value.booldata = false;
attrs.push_back(attr);

attr.id = SAI_ENI_ATTR_FULL_FLOW_RESIMULATION_REQUESTED;
attr.value.booldata = false;
attrs.push_back(attr);

attr.id = SAI_ENI_ATTR_MAX_RESIMULATED_FLOW_PER_SECOND;
attr.value.u64 = 0;
attrs.push_back(attr);

status = dash_eni_api->create_eni(&eni_id, switch_id, attrs.size(), attrs.data());

if (status != SAI_STATUS_SUCCESS)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,9 @@ def test_sai_thrift_create_eni(saithrift_client):
outbound_v6_stage3_dash_acl_group_id = 0,
outbound_v6_stage4_dash_acl_group_id = 0,
outbound_v6_stage5_dash_acl_group_id = 0,
disable_fast_path_icmp_flow_redirection = 0)
disable_fast_path_icmp_flow_redirection = 0,
full_flow_resimulation_requested = False,
max_resimulated_flow_per_second = 0)
assert (eni != SAI_NULL_OBJECT_ID);

eam = sai_thrift_eni_ether_address_map_entry_t(switch_id=switch_id, address = eth_addr)
Expand Down
12 changes: 8 additions & 4 deletions test/test-cases/functional/ptf/sai_dash_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ def eni_create(self, **kwargs):
"outbound_v6_stage4_dash_acl_group_id": 0,
"outbound_v6_stage5_dash_acl_group_id": 0,
"disable_fast_path_icmp_flow_redirection": 0,
"full_flow_resimulation_requested": False,
"max_resimulated_flow_per_second": 0
}
default_kwargs.update(kwargs)

Expand Down Expand Up @@ -307,7 +309,7 @@ def outbound_routing_vnet_direct_create(self, eni_id, lpm, dst_vnet_id,
outbound_routing_entry, dst_vnet_id=dst_vnet_id,
action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET_DIRECT,
overlay_ip=sai_ipaddress(overlay_ip), counter_id=counter_id,
meter_class_or=0, meter_class_and=-1)
meter_class_or=0, meter_class_and=-1, routing_actions_disabled_in_flow_resimulation = 0)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.add_teardown_obj(self.outbound_routing_vnet_direct_remove, outbound_routing_entry)

Expand All @@ -323,7 +325,7 @@ def outbound_routing_direct_create(self, eni_id, lpm, counter_id=None):
destination=sai_ipprefix(lpm))
sai_thrift_create_outbound_routing_entry(self.client, outbound_routing_entry, counter_id=counter_id,
action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT,
meter_class_or=0, meter_class_and=-1)
meter_class_or=0, meter_class_and=-1, routing_actions_disabled_in_flow_resimulation = 0)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.add_teardown_obj(self.outbound_routing_vnet_direct_remove, outbound_routing_entry)

Expand All @@ -341,7 +343,7 @@ def outbound_routing_vnet_create(self, eni_id, lpm, dst_vnet_id, counter_id=None
outbound_routing_entry, dst_vnet_id=dst_vnet_id,
counter_id=counter_id,
action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET,
meter_class_or=0, meter_class_and=-1)
meter_class_or=0, meter_class_and=-1, routing_actions_disabled_in_flow_resimulation = 0)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.add_teardown_obj(self.outbound_routing_vnet_direct_remove, outbound_routing_entry)

Expand All @@ -362,7 +364,9 @@ def outbound_ca_to_pa_create(self, dst_vnet_id, dip, underlay_dip,
underlay_dip=sai_ipaddress(underlay_dip),
use_dst_vnet_vni=use_dst_vnet_vni,
overlay_dmac=overlay_dmac,
meter_class_or=0)
meter_class_or=0,
flow_resimulation_requested = False,
routing_actions_disabled_in_flow_resimulation = 0)
self.assertEqual(self.status(), SAI_STATUS_SUCCESS)
self.add_teardown_obj(self.outbound_ca_to_pa_remove, ca_to_pa_entry)

Expand Down
8 changes: 5 additions & 3 deletions test/test-cases/functional/ptf/saidashacl.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,9 @@ def setUpSwitch(self):
outbound_v6_stage3_dash_acl_group_id=self.out_v6_stage3_acl_group_id,
outbound_v6_stage4_dash_acl_group_id=0,
outbound_v6_stage5_dash_acl_group_id=0,
disable_fast_path_icmp_flow_redirection=0)
disable_fast_path_icmp_flow_redirection=0,
full_flow_resimulation_requested=False,
max_resimulated_flow_per_second=0)

self.eam = sai_thrift_eni_ether_address_map_entry_t(
switch_id=self.switch_id, address=self.eni_mac)
Expand All @@ -243,7 +245,7 @@ def setUpSwitch(self):

self.create_entry(sai_thrift_create_outbound_routing_entry, sai_thrift_remove_outbound_routing_entry,
self.ore, action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET, dst_vnet_id=self.vnet,
meter_class_or=0, meter_class_and=-1)
meter_class_or=0, meter_class_and=-1, routing_actions_disabled_in_flow_resimulation = 0)

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))
Expand All @@ -253,7 +255,7 @@ def setUpSwitch(self):
self.create_entry(sai_thrift_create_outbound_ca_to_pa_entry, sai_thrift_remove_outbound_ca_to_pa_entry,
self.ocpe, action=SAI_OUTBOUND_CA_TO_PA_ENTRY_ACTION_SET_TUNNEL_MAPPING,
underlay_dip=underlay_dip, overlay_dmac=self.dst_ca_mac, use_dst_vnet_vni=True,
meter_class_or=0)
meter_class_or=0, flow_resimulation_requested = False, routing_actions_disabled_in_flow_resimulation = 0)

def setupTest(self):
self.tests.append(AclRuleTest(self,
Expand Down
10 changes: 7 additions & 3 deletions test/test-cases/functional/ptf/saidashvnet_sanity.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,9 @@ def configureVnet(self):
outbound_v6_stage3_dash_acl_group_id = 0,
outbound_v6_stage4_dash_acl_group_id = 0,
outbound_v6_stage5_dash_acl_group_id = 0,
disable_fast_path_icmp_flow_redirection = 0)
disable_fast_path_icmp_flow_redirection = 0,
full_flow_resimulation_requested=False,
max_resimulated_flow_per_second=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,
Expand All @@ -131,7 +133,8 @@ def configureVnet(self):
status = sai_thrift_create_outbound_routing_entry(self.client, self.ore,
action=SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET,
dst_vnet_id=self.vnet,
meter_class_or=0, meter_class_and=-1)
meter_class_or=0, meter_class_and=-1,
routing_actions_disabled_in_flow_resimulation = 0)
assert(status == SAI_STATUS_SUCCESS)

underlay_dip = sai_thrift_ip_address_t(addr_family=SAI_IP_ADDR_FAMILY_IPV4,
Expand All @@ -140,7 +143,8 @@ def configureVnet(self):
status = sai_thrift_create_outbound_ca_to_pa_entry(self.client, self.ocpe, action=SAI_OUTBOUND_CA_TO_PA_ENTRY_ACTION_SET_TUNNEL_MAPPING,
underlay_dip = underlay_dip,
overlay_dmac=self.dst_ca_mac, use_dst_vnet_vni = True,
meter_class_or=0)
meter_class_or=0, flow_resimulation_requested = False,
routing_actions_disabled_in_flow_resimulation = 0)
assert(status == SAI_STATUS_SUCCESS)

print(f"\n{self.__class__.__name__} configureVnet OK")
Expand Down
33 changes: 24 additions & 9 deletions test/test-cases/functional/saic/config_bidir_setup_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,9 @@
"SAI_ENI_ATTR_V6_METER_POLICY_ID", "0",
"SAI_ENI_ATTR_DASH_TUNNEL_DSCP_MODE", "SAI_DASH_TUNNEL_DSCP_MODE_PRESERVE_MODEL",
"SAI_ENI_ATTR_DSCP", "0",
"SAI_ENI_ATTR_DISABLE_FAST_PATH_ICMP_FLOW_REDIRECTION", "False"
"SAI_ENI_ATTR_DISABLE_FAST_PATH_ICMP_FLOW_REDIRECTION", "False",
"SAI_ENI_ATTR_FULL_FLOW_RESIMULATION_REQUESTED", "False",
"SAI_ENI_ATTR_MAX_RESIMULATED_FLOW_PER_SECOND", "0"
]
},
{
Expand Down Expand Up @@ -169,7 +171,9 @@
"SAI_ENI_ATTR_V6_METER_POLICY_ID", "0",
"SAI_ENI_ATTR_DASH_TUNNEL_DSCP_MODE", "SAI_DASH_TUNNEL_DSCP_MODE_PRESERVE_MODEL",
"SAI_ENI_ATTR_DSCP", "0",
"SAI_ENI_ATTR_DISABLE_FAST_PATH_ICMP_FLOW_REDIRECTION", "False"
"SAI_ENI_ATTR_DISABLE_FAST_PATH_ICMP_FLOW_REDIRECTION", "False",
"SAI_ENI_ATTR_FULL_FLOW_RESIMULATION_REQUESTED", "False",
"SAI_ENI_ATTR_MAX_RESIMULATED_FLOW_PER_SECOND", "0"
]
},
{
Expand Down Expand Up @@ -212,7 +216,9 @@
"SAI_ENI_ATTR_V6_METER_POLICY_ID", "0",
"SAI_ENI_ATTR_DASH_TUNNEL_DSCP_MODE", "SAI_DASH_TUNNEL_DSCP_MODE_PRESERVE_MODEL",
"SAI_ENI_ATTR_DSCP", "0",
"SAI_ENI_ATTR_DISABLE_FAST_PATH_ICMP_FLOW_REDIRECTION", "False"
"SAI_ENI_ATTR_DISABLE_FAST_PATH_ICMP_FLOW_REDIRECTION", "False",
"SAI_ENI_ATTR_FULL_FLOW_RESIMULATION_REQUESTED", "False",
"SAI_ENI_ATTR_MAX_RESIMULATED_FLOW_PER_SECOND", "0"
]
},

Expand Down Expand Up @@ -268,7 +274,8 @@
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_OR", "0",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_AND", "-1"
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_AND", "-1",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ROUTING_ACTIONS_DISABLED_IN_FLOW_RESIMULATION", "0"
]
},
{
Expand All @@ -284,7 +291,8 @@
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_OR", "0",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_AND", "-1"
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_AND", "-1",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ROUTING_ACTIONS_DISABLED_IN_FLOW_RESIMULATION", "0"
]
},
{
Expand All @@ -300,7 +308,8 @@
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ACTION", "SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_DST_VNET_ID", "$vnet",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_OR", "0",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_AND", "-1"
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_METER_CLASS_AND", "-1",
"SAI_OUTBOUND_ROUTING_ENTRY_ATTR_ROUTING_ACTIONS_DISABLED_IN_FLOW_RESIMULATION", "0"
]
},
{
Expand Down Expand Up @@ -386,7 +395,9 @@
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", NETWORK_VTEP_IP,
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", INNER_DST_MAC,
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True",
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OR", "0"
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OR", "0",
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_FLOW_RESIMULATION_REQUESTED", "False",
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_ROUTING_ACTIONS_DISABLED_IN_FLOW_RESIMULATION", "0"
]
},
{
Expand All @@ -403,7 +414,9 @@
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", NETWORK_VTEP_IP,
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", INNER_DST_MAC2,
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True",
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OR", "0"
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OR", "0",
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_FLOW_RESIMULATION_REQUESTED", "False",
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_ROUTING_ACTIONS_DISABLED_IN_FLOW_RESIMULATION", "0"
]
},
{
Expand All @@ -420,7 +433,9 @@
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_UNDERLAY_DIP", ENI_VTEP_IP,
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_OVERLAY_DMAC", INNER_SRC_MAC,
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_USE_DST_VNET_VNI", "True",
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OR", "0"
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_METER_CLASS_OR", "0",
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_FLOW_RESIMULATION_REQUESTED", "False",
"SAI_OUTBOUND_CA_TO_PA_ENTRY_ATTR_ROUTING_ACTIONS_DISABLED_IN_FLOW_RESIMULATION", "0"
]
}
]
Expand Down
Loading

0 comments on commit e39249b

Please sign in to comment.