Skip to content

Commit ffc1a08

Browse files
authored
Merge branch 'sonic-net:master' into SAI_DBG_GEN_DUMP_support
2 parents 5f96a02 + 29a8f86 commit ffc1a08

18 files changed

+571
-25
lines changed

lib/Recorder.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,17 @@ void Recorder::recordGenericSet(
543543
recordLine("s|" + key + "|" + Globals::joinFieldValues(arguments));
544544
}
545545

546+
void Recorder::recordGenericCounterPolling(
547+
_In_ const std::string& key,
548+
_In_ const std::vector<swss::FieldValueTuple>& arguments)
549+
{
550+
SWSS_LOG_ENTER();
551+
552+
// lower case 'p' stands for counter Polling
553+
554+
recordLine("p|" + key + "|" + Globals::joinFieldValues(arguments));
555+
}
556+
546557
void Recorder::recordGenericSetResponse(
547558
_In_ sai_status_t status)
548559
{

lib/Recorder.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,10 @@ namespace sairedis
179179

180180
public: // SAI stats API
181181

182+
void recordGenericCounterPolling(
183+
_In_ const std::string& key,
184+
_In_ const std::vector<swss::FieldValueTuple>& arguments);
185+
182186
void recordGenericGetStats(
183187
_In_ sai_object_type_t object_type,
184188
_In_ sai_object_id_t object_id,

lib/RedisRemoteSaiInterface.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,7 @@ sai_status_t RedisRemoteSaiInterface::notifyCounterGroupOperations(
572572
emplaceStrings(flexCounterGroupParam->plugin_name, flexCounterGroupParam->plugins, entries);
573573
emplaceStrings(FLEX_COUNTER_STATUS_FIELD, flexCounterGroupParam->operation, entries);
574574

575-
m_recorder->recordGenericSet(key, entries);
575+
m_recorder->recordGenericCounterPolling(key, entries);
576576

577577
m_communicationChannel->set(key,
578578
entries,
@@ -607,7 +607,7 @@ sai_status_t RedisRemoteSaiInterface::notifyCounterOperations(
607607
command = REDIS_FLEX_COUNTER_COMMAND_STOP_POLL;
608608
}
609609

610-
m_recorder->recordGenericSet(key, entries);
610+
m_recorder->recordGenericCounterPolling(key, entries);
611611
m_communicationChannel->set(key, entries, command);
612612

613613
return waitForResponse(SAI_COMMON_API_SET);

meta/Meta.cpp

Lines changed: 70 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
#include <inttypes.h>
1010

11+
#include <boost/algorithm/string/join.hpp>
12+
1113
#include <set>
1214

1315
// TODO add validation for all oids belong to the same switch
@@ -3162,6 +3164,25 @@ sai_status_t Meta::meta_sai_validate_meter_bucket_entry(
31623164
return SAI_STATUS_NOT_IMPLEMENTED;
31633165
}
31643166

3167+
sai_status_t Meta::meta_sai_validate_prefix_compression_entry(
3168+
_In_ const sai_prefix_compression_entry_t* prefix_compression_entry,
3169+
_In_ bool create,
3170+
_In_ bool get)
3171+
{
3172+
SWSS_LOG_ENTER();
3173+
3174+
if (prefix_compression_entry == NULL)
3175+
{
3176+
SWSS_LOG_ERROR("prefix_compression_entry pointer is NULL");
3177+
3178+
return SAI_STATUS_INVALID_PARAMETER;
3179+
}
3180+
3181+
// TODO FIX ME
3182+
3183+
return SAI_STATUS_NOT_IMPLEMENTED;
3184+
}
3185+
31653186
sai_status_t Meta::meta_generic_validation_create(
31663187
_In_ const sai_object_meta_key_t& meta_key,
31673188
_In_ sai_object_id_t switch_id,
@@ -6683,24 +6704,14 @@ void Meta::meta_sai_on_port_state_change_single(
66836704

66846705
auto ot = objectTypeQuery(data.port_id);
66856706

6686-
bool valid = false;
6707+
bool valid = isPortObjectIdValid(ot);
66876708

6688-
switch (ot)
6709+
if (!valid)
66896710
{
6690-
// TODO hardcoded types, must advance SAI repository commit to get metadata for this
6691-
case SAI_OBJECT_TYPE_PORT:
6692-
case SAI_OBJECT_TYPE_BRIDGE_PORT:
6693-
case SAI_OBJECT_TYPE_LAG:
6694-
6695-
valid = true;
6696-
break;
6697-
6698-
default:
6699-
6700-
SWSS_LOG_ERROR("data.port_id %s has unexpected type: %s, expected PORT, BRIDGE_PORT or LAG",
6701-
sai_serialize_object_id(data.port_id).c_str(),
6702-
sai_serialize_object_type(ot).c_str());
6703-
break;
6711+
SWSS_LOG_ERROR("data.port_id %s has unexpected type: %s, expected: %s",
6712+
sai_serialize_object_id(data.port_id).c_str(),
6713+
sai_serialize_object_type(ot).c_str(),
6714+
boost::algorithm::join(getValidPortObjectTypes(), ",").c_str());
67046715
}
67056716

67066717
if (valid && !m_oids.objectReferenceExists(data.port_id))
@@ -7120,3 +7131,46 @@ void Meta::populate(
71207131
}
71217132
}
71227133
}
7134+
7135+
bool Meta::isPortObjectIdValid(
7136+
_In_ sai_object_type_t object_type)
7137+
{
7138+
SWSS_LOG_ENTER();
7139+
7140+
auto members = sai_metadata_struct_members_sai_port_oper_status_notification_t;
7141+
7142+
for (size_t i = 0; members[i]; i++)
7143+
{
7144+
auto* mb = members[i];
7145+
7146+
if (mb->membername != std::string("port_id"))
7147+
continue;
7148+
7149+
for (size_t idx = 0; idx < mb->allowedobjecttypeslength; idx++)
7150+
{
7151+
if (mb->allowedobjecttypes[idx] == object_type)
7152+
return true;
7153+
}
7154+
7155+
return false;
7156+
}
7157+
7158+
SWSS_LOG_THROW("port_id member not found on sai_port_oper_status_notification");
7159+
}
7160+
7161+
std::vector<std::string> Meta::getValidPortObjectTypes()
7162+
{
7163+
SWSS_LOG_ENTER();
7164+
7165+
auto md = sai_metadata_enum_sai_object_type_t;
7166+
7167+
std::vector<std::string> v;
7168+
7169+
for (size_t i = 0; i < md.valuescount; i++)
7170+
{
7171+
if (isPortObjectIdValid((sai_object_type_t)md.values[i]))
7172+
v.push_back(md.valuesshortnames[i]);
7173+
}
7174+
7175+
return v;
7176+
}

meta/Meta.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,11 @@ namespace saimeta
318318
static bool is_ipv6_mask_valid(
319319
_In_ const uint8_t* mask);
320320

321+
static bool isPortObjectIdValid(
322+
_In_ sai_object_type_t object_type);
323+
324+
static std::vector<std::string> getValidPortObjectTypes();
325+
321326
private: // unit tests helpers
322327

323328
bool meta_unittests_get_and_erase_set_readonly_flag(
@@ -566,6 +571,11 @@ namespace saimeta
566571
_In_ bool create,
567572
_In_ bool get = false);
568573

574+
sai_status_t meta_sai_validate_prefix_compression_entry(
575+
_In_ const sai_prefix_compression_entry_t* prefix_compression_entry,
576+
_In_ bool create,
577+
_In_ bool get = false);
578+
569579
public:
570580

571581
/*

meta/SaiSerialize.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,20 @@ std::string sai_serialize_meter_bucket_entry(
975975
return j.dump();
976976
}
977977

978+
std::string sai_serialize_prefix_compression_entry(
979+
_In_ const sai_prefix_compression_entry_t &prefix_compression_entry)
980+
{
981+
SWSS_LOG_ENTER();
982+
983+
json j;
984+
985+
j["switch_id"] = sai_serialize_object_id(prefix_compression_entry.switch_id);
986+
j["prefix_table_id"] = sai_serialize_object_id(prefix_compression_entry.prefix_table_id);
987+
j["prefix"] = sai_serialize_ip_prefix(prefix_compression_entry.prefix);
988+
989+
return j.dump();
990+
}
991+
978992
std::string sai_serialize_flow_entry(
979993
_In_ const sai_flow_entry_t &flow_entry)
980994
{
@@ -2662,6 +2676,10 @@ static bool sai_serialize_object_entry(
26622676
key = sai_serialize_mcast_fdb_entry(key_entry.mcast_fdb_entry);
26632677
return true;
26642678

2679+
case SAI_OBJECT_TYPE_PREFIX_COMPRESSION_ENTRY:
2680+
key = sai_serialize_prefix_compression_entry(key_entry.prefix_compression_entry);
2681+
return true;
2682+
26652683
default:
26662684
return false;
26672685
}
@@ -4451,6 +4469,19 @@ void sai_deserialize_meter_bucket_entry(
44514469
sai_deserialize_number(j["meter_class"], meter_bucket_entry.meter_class);
44524470
}
44534471

4472+
void sai_deserialize_prefix_compression_entry(
4473+
_In_ const std::string& s,
4474+
_Out_ sai_prefix_compression_entry_t& prefix_compression_entry)
4475+
{
4476+
SWSS_LOG_ENTER();
4477+
4478+
json j = json::parse(s);
4479+
4480+
sai_deserialize_object_id(j["switch_id"], prefix_compression_entry.switch_id);
4481+
sai_deserialize_object_id(j["prefix_table_id"], prefix_compression_entry.prefix_table_id);
4482+
sai_deserialize_ip_prefix(j["prefix"], prefix_compression_entry.prefix);
4483+
}
4484+
44544485
void sai_deserialize_flow_entry(
44554486
_In_ const std::string& s,
44564487
_Out_ sai_flow_entry_t &flow_entry)
@@ -4902,6 +4933,10 @@ bool sai_deserialize_object_entry(
49024933
sai_deserialize_mcast_fdb_entry(object_id, meta_key.objectkey.key.mcast_fdb_entry);
49034934
return true;
49044935

4936+
case SAI_OBJECT_TYPE_PREFIX_COMPRESSION_ENTRY:
4937+
sai_deserialize_prefix_compression_entry(object_id, meta_key.objectkey.key.prefix_compression_entry);
4938+
return true;
4939+
49054940
default:
49064941
return false;
49074942
}

meta/sai_serialize.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ std::string sai_serialize_fdb_entry(
7272
std::string sai_serialize_meter_bucket_entry(
7373
_In_ const sai_meter_bucket_entry_t &meter_bucket_entry);
7474

75+
std::string sai_serialize_prefix_compression_entry(
76+
_In_ const sai_prefix_compression_entry_t &prefix_compression_entry);
77+
7578
std::string sai_serialize_flow_entry(
7679
_In_ const sai_flow_entry_t &flow_entry);
7780

@@ -440,6 +443,10 @@ void sai_deserialize_meter_bucket_entry(
440443
_In_ const std::string& s,
441444
_Out_ sai_meter_bucket_entry_t& meter_bucket_entry);
442445

446+
void sai_deserialize_prefix_compression_entry(
447+
_In_ const std::string& s,
448+
_Out_ sai_prefix_compression_entry_t& prefix_compression_entry);
449+
443450
void sai_deserialize_flow_entry(
444451
_In_ const std::string& s,
445452
_Out_ sai_flow_entry_t &flow_entry);

saiplayer/SaiPlayer.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2607,6 +2607,9 @@ int SaiPlayer::replay()
26072607
case 'q':
26082608
// TODO: implement SAI player support for query commands
26092609
continue;
2610+
case 'p':
2611+
// TODO: implement SAI player support for counter polling commands
2612+
continue;
26102613
case 'Q':
26112614
continue; // skip over query responses
26122615
case '#':

syncd/VendorSai.cpp

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,10 @@ sai_status_t VendorSai::bulkCreate(
493493
ptr = m_apis.dash_acl_api->create_dash_acl_rules;
494494
break;
495495

496+
case SAI_OBJECT_TYPE_METER_RULE:
497+
ptr = m_apis.dash_meter_api->create_meter_rules;
498+
break;
499+
496500
default:
497501
SWSS_LOG_ERROR("not implemented %s, FIXME", sai_serialize_object_type(object_type).c_str());
498502
return SAI_STATUS_NOT_IMPLEMENTED;
@@ -572,6 +576,10 @@ sai_status_t VendorSai::bulkRemove(
572576
ptr = m_apis.dash_acl_api->remove_dash_acl_rules;
573577
break;
574578

579+
case SAI_OBJECT_TYPE_METER_RULE:
580+
ptr = m_apis.dash_meter_api->remove_meter_rules;
581+
break;
582+
575583
default:
576584
SWSS_LOG_ERROR("not implemented %s, FIXME", sai_serialize_object_type(object_type).c_str());
577585
return SAI_STATUS_NOT_IMPLEMENTED;
@@ -1047,6 +1055,33 @@ sai_status_t VendorSai::bulkCreate(
10471055
object_statuses);
10481056
}
10491057

1058+
sai_status_t VendorSai::bulkCreate(
1059+
_In_ uint32_t object_count,
1060+
_In_ const sai_prefix_compression_entry_t* entries,
1061+
_In_ const uint32_t *attr_count,
1062+
_In_ const sai_attribute_t **attr_list,
1063+
_In_ sai_bulk_op_error_mode_t mode,
1064+
_Out_ sai_status_t *object_statuses)
1065+
{
1066+
MUTEX();
1067+
SWSS_LOG_ENTER();
1068+
VENDOR_CHECK_API_INITIALIZED();
1069+
1070+
if (!m_apis.prefix_compression_api->create_prefix_compression_entries)
1071+
{
1072+
SWSS_LOG_INFO("create_prefix_compression_entries is not supported");
1073+
return SAI_STATUS_NOT_SUPPORTED;
1074+
}
1075+
1076+
return m_apis.prefix_compression_api->create_prefix_compression_entries(
1077+
object_count,
1078+
entries,
1079+
attr_count,
1080+
attr_list,
1081+
mode,
1082+
object_statuses);
1083+
}
1084+
10501085
// BULK REMOVE
10511086

10521087
sai_status_t VendorSai::bulkRemove(
@@ -1395,6 +1430,29 @@ sai_status_t VendorSai::bulkRemove(
13951430
object_statuses);
13961431
}
13971432

1433+
sai_status_t VendorSai::bulkRemove(
1434+
_In_ uint32_t object_count,
1435+
_In_ const sai_prefix_compression_entry_t *entries,
1436+
_In_ sai_bulk_op_error_mode_t mode,
1437+
_Out_ sai_status_t *object_statuses)
1438+
{
1439+
MUTEX();
1440+
SWSS_LOG_ENTER();
1441+
VENDOR_CHECK_API_INITIALIZED();
1442+
1443+
if (!m_apis.prefix_compression_api->remove_prefix_compression_entries)
1444+
{
1445+
SWSS_LOG_INFO("remove_prefix_compression_entries is not supported");
1446+
return SAI_STATUS_NOT_SUPPORTED;
1447+
}
1448+
1449+
return m_apis.prefix_compression_api->remove_prefix_compression_entries(
1450+
object_count,
1451+
entries,
1452+
mode,
1453+
object_statuses);
1454+
}
1455+
13981456
// BULK SET
13991457

14001458
sai_status_t VendorSai::bulkSet(
@@ -1673,6 +1731,20 @@ sai_status_t VendorSai::bulkSet(
16731731
return SAI_STATUS_NOT_SUPPORTED;
16741732
}
16751733

1734+
sai_status_t VendorSai::bulkSet(
1735+
_In_ uint32_t object_count,
1736+
_In_ const sai_prefix_compression_entry_t *entries,
1737+
_In_ const sai_attribute_t *attr_list,
1738+
_In_ sai_bulk_op_error_mode_t mode,
1739+
_Out_ sai_status_t *object_statuses)
1740+
{
1741+
MUTEX();
1742+
SWSS_LOG_ENTER();
1743+
VENDOR_CHECK_API_INITIALIZED();
1744+
1745+
return SAI_STATUS_NOT_SUPPORTED;
1746+
}
1747+
16761748
// NON QUAD API
16771749

16781750
sai_status_t VendorSai::flushFdbEntries(

0 commit comments

Comments
 (0)