Skip to content

Commit 822ab91

Browse files
Handle outbound_direction_lookup for DASH_APPLIANCE_TABLE (#3571)
* Handle outbound_direction_lookup for DASH_APPLIANCE_TABLE * If no value is specified, use a default value of SAI_DASH_ENI_MAC_OVERRIDE_TYPE_SRC_MAC, else use the specified value. Ref: sonic-net/SONiC#1911
1 parent fe9b89e commit 822ab91

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

orchagent/dash/dashorch.cpp

+14-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ extern bool gTraditionalFlexCounter;
4040

4141
#define FLEX_COUNTER_UPD_INTERVAL 1
4242

43+
static std::unordered_map<string, sai_dash_eni_mac_override_type_t> sMacOverride =
44+
{
45+
{ "src_mac", SAI_DASH_ENI_MAC_OVERRIDE_TYPE_SRC_MAC},
46+
{ "dst_mac", SAI_DASH_ENI_MAC_OVERRIDE_TYPE_DST_MAC}
47+
};
48+
4349
DashOrch::DashOrch(DBConnector *db, vector<string> &tableName, ZmqServer *zmqServer) :
4450
ZmqOrch(db, tableName, zmqServer),
4551
m_eni_stat_manager(ENI_STAT_COUNTER_FLEX_COUNTER_GROUP, StatsMode::READ, ENI_STAT_FLEX_COUNTER_POLLING_INTERVAL_MS, false)
@@ -158,7 +164,14 @@ bool DashOrch::addApplianceEntry(const string& appliance_id, const dash::applian
158164
direction_lookup_attrs.push_back(appliance_attr);
159165

160166
appliance_attr.id = SAI_DIRECTION_LOOKUP_ENTRY_ATTR_DASH_ENI_MAC_OVERRIDE_TYPE;
161-
appliance_attr.value.u32 = SAI_DASH_ENI_MAC_OVERRIDE_TYPE_DST_MAC;
167+
if (entry.has_outbound_direction_lookup())
168+
{
169+
appliance_attr.value.u32 = sMacOverride[entry.outbound_direction_lookup()];
170+
}
171+
else
172+
{
173+
appliance_attr.value.u32 = SAI_DASH_ENI_MAC_OVERRIDE_TYPE_SRC_MAC;
174+
}
162175
direction_lookup_attrs.push_back(appliance_attr);
163176

164177
status = sai_dash_direction_lookup_api->create_direction_lookup_entry(&direction_lookup_entry,

tests/dash/test_dash_vnet.py

+17-1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,21 @@ def test_appliance(self, dash_db: DashDB):
4949
self.sip = "10.0.0.1"
5050
self.vm_vni = "4321"
5151
self.local_region_id = "10"
52+
53+
# verify behavior when outbound_direction_lookup is specified
54+
pb = Appliance()
55+
pb.sip.ipv4 = socket.htonl(int(ipaddress.ip_address(self.sip)))
56+
pb.vm_vni = int(self.vm_vni)
57+
pb.local_region_id = int(self.local_region_id)
58+
pb.outbound_direction_lookup = "dst_mac"
59+
dash_db.create_appliance(self.appliance_id, {"pb": pb.SerializeToString()})
60+
direction_keys = dash_db.wait_for_asic_db_keys(ASIC_DIRECTION_LOOKUP_TABLE)
61+
dl_attrs = dash_db.get_asic_db_entry(ASIC_DIRECTION_LOOKUP_TABLE, direction_keys[0])
62+
assert_sai_attribute_exists("SAI_DIRECTION_LOOKUP_ENTRY_ATTR_ACTION", dl_attrs, "SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION")
63+
assert_sai_attribute_exists("SAI_DIRECTION_LOOKUP_ENTRY_ATTR_DASH_ENI_MAC_OVERRIDE_TYPE", dl_attrs, "SAI_DASH_ENI_MAC_OVERRIDE_TYPE_DST_MAC")
64+
dash_db.remove_appliance(self.appliance_id)
65+
time.sleep(2)
66+
5267
pb = Appliance()
5368
pb.sip.ipv4 = socket.htonl(int(ipaddress.ip_address(self.sip)))
5469
pb.vm_vni = int(self.vm_vni)
@@ -62,7 +77,8 @@ def test_appliance(self, dash_db: DashDB):
6277
direction_keys = dash_db.wait_for_asic_db_keys(ASIC_DIRECTION_LOOKUP_TABLE)
6378
dl_attrs = dash_db.get_asic_db_entry(ASIC_DIRECTION_LOOKUP_TABLE, direction_keys[0])
6479
assert_sai_attribute_exists("SAI_DIRECTION_LOOKUP_ENTRY_ATTR_ACTION", dl_attrs, "SAI_DIRECTION_LOOKUP_ENTRY_ACTION_SET_OUTBOUND_DIRECTION")
65-
assert_sai_attribute_exists("SAI_DIRECTION_LOOKUP_ENTRY_ATTR_DASH_ENI_MAC_OVERRIDE_TYPE", dl_attrs, "SAI_DASH_ENI_MAC_OVERRIDE_TYPE_DST_MAC")
80+
# When outbound_direction_lookup is not specified, src mac is used by default
81+
assert_sai_attribute_exists("SAI_DIRECTION_LOOKUP_ENTRY_ATTR_DASH_ENI_MAC_OVERRIDE_TYPE", dl_attrs, "SAI_DASH_ENI_MAC_OVERRIDE_TYPE_SRC_MAC")
6682

6783
vip_keys = dash_db.wait_for_asic_db_keys(ASIC_VIP_TABLE)
6884
vip_attrs = dash_db.get_asic_db_entry(ASIC_VIP_TABLE, vip_keys[0])

0 commit comments

Comments
 (0)