Skip to content

Commit

Permalink
[macsecorch]: Support for non-default sa per sc
Browse files Browse the repository at this point in the history
Querying max_sa_per_sc from SAI and storing in STATE_DB. If the
SAI_MACSEC_ATTR_MAX_SECURE_ASSOCIATION_PER_SC is not supported
we will use the default of 4.

Signed-off-by: Nathan Wolfe <nwolfe@arista.com>
  • Loading branch information
arista-nwolfe committed May 17, 2022
1 parent 341a654 commit 950508b
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 0 deletions.
27 changes: 27 additions & 0 deletions orchagent/macsecorch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1082,6 +1082,32 @@ bool MACsecOrch::initMACsecObject(sai_object_id_t switch_id)
}
macsec_obj.first->second.m_sci_in_ingress_macsec_acl = attrs.front().value.booldata;

attrs.clear();
attr.id = SAI_MACSEC_ATTR_MAX_SECURE_ASSOCIATIONS_PER_SC;
attrs.push_back(attr);
status = sai_macsec_api->get_macsec_attribute(
macsec_obj.first->second.m_ingress_id,
static_cast<uint32_t>(attrs.size()),
attrs.data());
if (status != SAI_STATUS_SUCCESS)
{
// Default to 4 if SAI_MACSEC_ATTR_MAX_SECURE_ASSOCIATION_PER_SC isn't supported
macsec_obj.first->second.m_max_sa_per_sc = 4;
} else {
switch (attrs.front().value.s32)
{
case SAI_MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_TWO:
macsec_obj.first->second.m_max_sa_per_sc = 2;
break;
case SAI_MACSEC_MAX_SECURE_ASSOCIATIONS_PER_SC_FOUR:
macsec_obj.first->second.m_max_sa_per_sc = 4;
break;
default:
SWSS_LOG_WARN( "Unsupported value returned from SAI_MACSEC_ATTR_MAX_SECURE_ASSOCIATION_PER_SC" );
return false;
}
}

recover.clear();
return true;
}
Expand Down Expand Up @@ -1266,6 +1292,7 @@ bool MACsecOrch::createMACsecPort(
SWSS_LOG_NOTICE("MACsec port %s is created.", port_name.c_str());

std::vector<FieldValueTuple> fvVector;
fvVector.emplace_back("max_sa_per_sc", std::to_string(macsec_obj.m_max_sa_per_sc));
fvVector.emplace_back("state", "ok");
m_state_macsec_port.set(port_name, fvVector);

Expand Down
1 change: 1 addition & 0 deletions orchagent/macsecorch.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ class MACsecOrch : public Orch
sai_object_id_t m_ingress_id;
map<std::string, std::shared_ptr<MACsecPort> > m_macsec_ports;
bool m_sci_in_ingress_macsec_acl;
sai_uint8_t m_max_sa_per_sc;
};
map<sai_object_id_t, MACsecObject> m_macsec_objs;
map<std::string, std::shared_ptr<MACsecPort> > m_macsec_ports;
Expand Down

0 comments on commit 950508b

Please # to comment.