Skip to content

Commit fe875fd

Browse files
authored
[orchagent]: srv6orch support for uSID (sonic-net#2335)
* [orchagent]: srv6orch support for uSID
1 parent 93af69c commit fe875fd

File tree

2 files changed

+58
-53
lines changed

2 files changed

+58
-53
lines changed

orchagent/srv6orch.cpp

+40-52
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,38 @@ extern sai_next_hop_api_t* sai_next_hop_api;
2020
extern RouteOrch *gRouteOrch;
2121
extern CrmOrch *gCrmOrch;
2222

23+
const map<string, sai_my_sid_entry_endpoint_behavior_t> end_behavior_map =
24+
{
25+
{"end", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_E},
26+
{"end.x", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_X},
27+
{"end.t", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_T},
28+
{"end.dx6", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX6},
29+
{"end.dx4", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX4},
30+
{"end.dt4", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT4},
31+
{"end.dt6", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT6},
32+
{"end.dt46", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT46},
33+
{"end.b6.encaps", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS},
34+
{"end.b6.encaps.red", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS_RED},
35+
{"end.b6.insert", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT},
36+
{"end.b6.insert.red", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT_RED},
37+
{"udx6", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX6},
38+
{"udx4", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX4},
39+
{"udt6", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT6},
40+
{"udt4", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT4},
41+
{"udt46", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT46},
42+
{"un", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UN},
43+
{"ua", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UA}
44+
};
45+
46+
const map<string, sai_my_sid_entry_endpoint_behavior_flavor_t> end_flavor_map =
47+
{
48+
{"end", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD},
49+
{"end.x", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD},
50+
{"end.t", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD},
51+
{"un", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD},
52+
{"ua", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD}
53+
};
54+
2355
void Srv6Orch::srv6TunnelUpdateNexthops(const string srv6_source, const NextHopKey nhkey, bool insert)
2456
{
2557
if (insert)
@@ -372,62 +404,18 @@ bool Srv6Orch::mySidExists(string my_sid_string)
372404
bool Srv6Orch::sidEntryEndpointBehavior(string action, sai_my_sid_entry_endpoint_behavior_t &end_behavior,
373405
sai_my_sid_entry_endpoint_behavior_flavor_t &end_flavor)
374406
{
375-
if (action == "end")
376-
{
377-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_E;
378-
end_flavor = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD;
379-
}
380-
else if (action == "end.x")
381-
{
382-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_X;
383-
end_flavor = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD;
384-
}
385-
else if (action == "end.t")
386-
{
387-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_T;
388-
end_flavor = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD;
389-
}
390-
else if (action == "end.dx6")
391-
{
392-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX6;
393-
}
394-
else if (action == "end.dx4")
395-
{
396-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DX4;
397-
}
398-
else if (action == "end.dt4")
399-
{
400-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT4;
401-
}
402-
else if (action == "end.dt6")
407+
if (end_behavior_map.find(action) == end_behavior_map.end())
403408
{
404-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT6;
405-
}
406-
else if (action == "end.dt46")
407-
{
408-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT46;
409-
}
410-
else if (action == "end.b6.encaps")
411-
{
412-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS;
413-
}
414-
else if (action == "end.b6.encaps.red")
415-
{
416-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_ENCAPS_RED;
417-
}
418-
else if (action == "end.b6.insert")
419-
{
420-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT;
421-
}
422-
else if (action == "end.b6.insert.red")
423-
{
424-
end_behavior = SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_B6_INSERT_RED;
409+
SWSS_LOG_ERROR("Invalid endpoint behavior function");
410+
return false;
425411
}
426-
else
412+
end_behavior = end_behavior_map.at(action);
413+
414+
if (end_flavor_map.find(action) != end_flavor_map.end())
427415
{
428-
SWSS_LOG_ERROR("Invalid endpoing behavior function");
429-
return false;
416+
end_flavor = end_flavor_map.at(action);
430417
}
418+
431419
return true;
432420
}
433421

tests/test_srv6.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ def test_mysid(self, dvs, testlog):
5656
# create MySID entries
5757
mysid1='16:8:8:8:baba:2001:10::'
5858
mysid2='16:8:8:8:baba:2001:20::'
59+
mysid3='16:8:8:8:fcbb:bb01:800::'
5960

6061
# create MySID END
6162
fvs = swsscommon.FieldValuePairs([('action', 'end')])
@@ -90,14 +91,30 @@ def test_mysid(self, dvs, testlog):
9091
elif fv[0] == "SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR":
9192
assert fv[1] == "SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_DT46"
9293

94+
# create MySID uN
95+
fvs = swsscommon.FieldValuePairs([('action', 'un')])
96+
key = self.create_mysid(mysid3, fvs)
97+
98+
# check ASIC MySID database
99+
mysid = json.loads(key)
100+
assert mysid["sid"] == "fcbb:bb01:800::"
101+
tbl = swsscommon.Table(self.adb.db_connection, "ASIC_STATE:SAI_OBJECT_TYPE_MY_SID_ENTRY")
102+
(status, fvs) = tbl.get(key)
103+
assert status == True
104+
for fv in fvs:
105+
if fv[0] == "SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR":
106+
assert fv[1] == "SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_UN"
107+
elif fv[0] == "SAI_MY_SID_ENTRY_ATTR_ENDPOINT_BEHAVIOR_FLAVOR":
108+
assert fv[1] == "SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD"
109+
93110
# delete MySID
94111
self.remove_mysid(mysid1)
95112
self.remove_mysid(mysid2)
113+
self.remove_mysid(mysid3)
96114

97115
# remove vrf
98116
self.remove_vrf("VrfDt46")
99117

100-
101118
class TestSrv6(object):
102119
def setup_db(self, dvs):
103120
self.pdb = dvs.get_app_db()

0 commit comments

Comments
 (0)