Skip to content

Commit

Permalink
[orchagent, SRv6]: create seglist support to set sid list type
Browse files Browse the repository at this point in the history
If user doesn't set the sid list type, type will be ENCAPS_RED

What I did
create seglist support to set sid list type

Why I did it
could not set different sidlist type under local testing

How I verified it
set different sidlist type of seg list and confirm it works under local testing

Signed-off-by: link_chiang <[email protected]>
  • Loading branch information
link19430 committed Aug 4, 2022
1 parent 3161eaa commit 112c5ba
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 5 deletions.
29 changes: 25 additions & 4 deletions orchagent/srv6orch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,14 @@ const map<string, sai_my_sid_entry_endpoint_behavior_flavor_t> end_flavor_map =
{"ua", SAI_MY_SID_ENTRY_ENDPOINT_BEHAVIOR_FLAVOR_PSP_AND_USD}
};

const map<string, sai_srv6_sidlist_type_t> sidlist_type_map =
{
{"insert", SAI_SRV6_SIDLIST_TYPE_INSERT},
{"insert.red", SAI_SRV6_SIDLIST_TYPE_INSERT_RED},
{"encaps", SAI_SRV6_SIDLIST_TYPE_ENCAPS},
{"encaps.red", SAI_SRV6_SIDLIST_TYPE_ENCAPS_RED}
};

void Srv6Orch::srv6TunnelUpdateNexthops(const string srv6_source, const NextHopKey nhkey, bool insert)
{
if (insert)
Expand Down Expand Up @@ -267,7 +275,7 @@ bool Srv6Orch::srv6Nexthops(const NextHopGroupKey &nhgKey, sai_object_id_t &next
return true;
}

bool Srv6Orch::createUpdateSidList(const string sid_name, const string sid_list)
bool Srv6Orch::createUpdateSidList(const string sid_name, const string sid_list, const string sidlist_type)
{
SWSS_LOG_ENTER();
bool exists = (sid_table_.find(sid_name) != sid_table_.end());
Expand Down Expand Up @@ -303,7 +311,16 @@ bool Srv6Orch::createUpdateSidList(const string sid_name, const string sid_list)
attributes.push_back(attr);

attr.id = SAI_SRV6_SIDLIST_ATTR_TYPE;
attr.value.s32 = SAI_SRV6_SIDLIST_TYPE_ENCAPS_RED;
if (sidlist_type_map.find(sidlist_type) == sidlist_type_map.end())
{
SWSS_LOG_INFO("Use default sidlist type: ENCAPS_RED");
attr.value.s32 = SAI_SRV6_SIDLIST_TYPE_ENCAPS_RED;
}
else
{
SWSS_LOG_INFO("sidlist type: %s", sidlist_type.c_str());
attr.value.s32 = sidlist_type_map.at(sidlist_type);
}
attributes.push_back(attr);
status = sai_srv6_api->create_srv6_sidlist(&segment_oid, gSwitchId, (uint32_t) attributes.size(), attributes.data());
if (status != SAI_STATUS_SUCCESS)
Expand Down Expand Up @@ -365,18 +382,22 @@ void Srv6Orch::doTaskSidTable(const KeyOpFieldsValuesTuple & tuple)
SWSS_LOG_ENTER();
string sid_name = kfvKey(tuple);
string op = kfvOp(tuple);
string sid_list;
string sid_list, sidlist_type;

for (auto i : kfvFieldsValues(tuple))
{
if (fvField(i) == "path")
{
sid_list = fvValue(i);
}
if (fvField(i) == "type")
{
sidlist_type = fvValue(i);
}
}
if (op == SET_COMMAND)
{
if (!createUpdateSidList(sid_name, sid_list))
if (!createUpdateSidList(sid_name, sid_list, sidlist_type))
{
SWSS_LOG_ERROR("Failed to process sid %s", sid_name.c_str());
}
Expand Down
2 changes: 1 addition & 1 deletion orchagent/srv6orch.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class Srv6Orch : public Orch
void doTask(Consumer &consumer);
void doTaskSidTable(const KeyOpFieldsValuesTuple &tuple);
void doTaskMySidTable(const KeyOpFieldsValuesTuple &tuple);
bool createUpdateSidList(const string seg_name, const string ips);
bool createUpdateSidList(const string seg_name, const string ips, const string sidlist_type);
bool deleteSidList(const string seg_name);
bool createSrv6Tunnel(const string srv6_source);
bool createSrv6Nexthop(const NextHopKey &nh);
Expand Down

0 comments on commit 112c5ba

Please sign in to comment.