@@ -37,7 +37,10 @@ const map<CrmResourceType, string> crmResTypeNameMap =
37
37
{ CrmResourceType::CRM_ACL_GROUP, " ACL_GROUP" },
38
38
{ CrmResourceType::CRM_ACL_ENTRY, " ACL_ENTRY" },
39
39
{ CrmResourceType::CRM_ACL_COUNTER, " ACL_COUNTER" },
40
- { CrmResourceType::CRM_FDB_ENTRY, " FDB_ENTRY" }
40
+ { CrmResourceType::CRM_FDB_ENTRY, " FDB_ENTRY" },
41
+ { CrmResourceType::CRM_IPMC_ENTRY, " IPMC_ENTRY" },
42
+ { CrmResourceType::CRM_SNAT_ENTRY, " SNAT_ENTRY" },
43
+ { CrmResourceType::CRM_DNAT_ENTRY, " DNAT_ENTRY" }
41
44
};
42
45
43
46
const map<CrmResourceType, uint32_t > crmResSaiAvailAttrMap =
@@ -54,7 +57,10 @@ const map<CrmResourceType, uint32_t> crmResSaiAvailAttrMap =
54
57
{ CrmResourceType::CRM_ACL_GROUP, SAI_SWITCH_ATTR_AVAILABLE_ACL_TABLE_GROUP },
55
58
{ CrmResourceType::CRM_ACL_ENTRY, SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_ENTRY },
56
59
{ CrmResourceType::CRM_ACL_COUNTER, SAI_ACL_TABLE_ATTR_AVAILABLE_ACL_COUNTER },
57
- { CrmResourceType::CRM_FDB_ENTRY, SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY }
60
+ { CrmResourceType::CRM_FDB_ENTRY, SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY },
61
+ { CrmResourceType::CRM_IPMC_ENTRY, SAI_SWITCH_ATTR_AVAILABLE_IPMC_ENTRY},
62
+ { CrmResourceType::CRM_SNAT_ENTRY, SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY },
63
+ { CrmResourceType::CRM_DNAT_ENTRY, SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY }
58
64
};
59
65
60
66
const map<string, CrmResourceType> crmThreshTypeResMap =
@@ -71,7 +77,10 @@ const map<string, CrmResourceType> crmThreshTypeResMap =
71
77
{ " acl_group_threshold_type" , CrmResourceType::CRM_ACL_GROUP },
72
78
{ " acl_entry_threshold_type" , CrmResourceType::CRM_ACL_ENTRY },
73
79
{ " acl_counter_threshold_type" , CrmResourceType::CRM_ACL_COUNTER },
74
- { " fdb_entry_threshold_type" , CrmResourceType::CRM_FDB_ENTRY }
80
+ { " fdb_entry_threshold_type" , CrmResourceType::CRM_FDB_ENTRY },
81
+ { " ipmc_entry_threshold_type" , CrmResourceType::CRM_IPMC_ENTRY },
82
+ { " snat_entry_threshold_type" , CrmResourceType::CRM_SNAT_ENTRY },
83
+ { " dnat_entry_threshold_type" , CrmResourceType::CRM_DNAT_ENTRY }
75
84
};
76
85
77
86
const map<string, CrmResourceType> crmThreshLowResMap =
@@ -89,6 +98,9 @@ const map<string, CrmResourceType> crmThreshLowResMap =
89
98
{" acl_entry_low_threshold" , CrmResourceType::CRM_ACL_ENTRY },
90
99
{" acl_counter_low_threshold" , CrmResourceType::CRM_ACL_COUNTER },
91
100
{" fdb_entry_low_threshold" , CrmResourceType::CRM_FDB_ENTRY },
101
+ {" ipmc_entry_low_threshold" , CrmResourceType::CRM_IPMC_ENTRY },
102
+ {" snat_entry_low_threshold" , CrmResourceType::CRM_SNAT_ENTRY },
103
+ {" dnat_entry_low_threshold" , CrmResourceType::CRM_DNAT_ENTRY }
92
104
};
93
105
94
106
const map<string, CrmResourceType> crmThreshHighResMap =
@@ -105,7 +117,10 @@ const map<string, CrmResourceType> crmThreshHighResMap =
105
117
{" acl_group_high_threshold" , CrmResourceType::CRM_ACL_GROUP },
106
118
{" acl_entry_high_threshold" , CrmResourceType::CRM_ACL_ENTRY },
107
119
{" acl_counter_high_threshold" , CrmResourceType::CRM_ACL_COUNTER },
108
- {" fdb_entry_high_threshold" , CrmResourceType::CRM_FDB_ENTRY }
120
+ {" fdb_entry_high_threshold" , CrmResourceType::CRM_FDB_ENTRY },
121
+ {" ipmc_entry_high_threshold" , CrmResourceType::CRM_IPMC_ENTRY },
122
+ {" snat_entry_high_threshold" , CrmResourceType::CRM_SNAT_ENTRY },
123
+ {" dnat_entry_high_threshold" , CrmResourceType::CRM_DNAT_ENTRY }
109
124
};
110
125
111
126
const map<string, CrmThresholdType> crmThreshTypeMap =
@@ -129,7 +144,10 @@ const map<string, CrmResourceType> crmAvailCntsTableMap =
129
144
{ " crm_stats_acl_group_available" , CrmResourceType::CRM_ACL_GROUP },
130
145
{ " crm_stats_acl_entry_available" , CrmResourceType::CRM_ACL_ENTRY },
131
146
{ " crm_stats_acl_counter_available" , CrmResourceType::CRM_ACL_COUNTER },
132
- { " crm_stats_fdb_entry_available" , CrmResourceType::CRM_FDB_ENTRY }
147
+ { " crm_stats_fdb_entry_available" , CrmResourceType::CRM_FDB_ENTRY },
148
+ { " crm_stats_ipmc_entry_available" , CrmResourceType::CRM_IPMC_ENTRY },
149
+ { " crm_stats_snat_entry_available" , CrmResourceType::CRM_SNAT_ENTRY },
150
+ { " crm_stats_dnat_entry_available" , CrmResourceType::CRM_DNAT_ENTRY }
133
151
};
134
152
135
153
const map<string, CrmResourceType> crmUsedCntsTableMap =
@@ -146,7 +164,10 @@ const map<string, CrmResourceType> crmUsedCntsTableMap =
146
164
{ " crm_stats_acl_group_used" , CrmResourceType::CRM_ACL_GROUP },
147
165
{ " crm_stats_acl_entry_used" , CrmResourceType::CRM_ACL_ENTRY },
148
166
{ " crm_stats_acl_counter_used" , CrmResourceType::CRM_ACL_COUNTER },
149
- { " crm_stats_fdb_entry_used" , CrmResourceType::CRM_FDB_ENTRY }
167
+ { " crm_stats_fdb_entry_used" , CrmResourceType::CRM_FDB_ENTRY },
168
+ { " crm_stats_ipmc_entry_used" , CrmResourceType::CRM_IPMC_ENTRY },
169
+ { " crm_stats_snat_entry_used" , CrmResourceType::CRM_SNAT_ENTRY },
170
+ { " crm_stats_dnat_entry_used" , CrmResourceType::CRM_DNAT_ENTRY }
150
171
};
151
172
152
173
CrmOrch::CrmOrch (DBConnector *db, string tableName):
@@ -429,10 +450,18 @@ void CrmOrch::getResAvailableCounters()
429
450
case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_MEMBER_ENTRY:
430
451
case SAI_SWITCH_ATTR_AVAILABLE_NEXT_HOP_GROUP_ENTRY:
431
452
case SAI_SWITCH_ATTR_AVAILABLE_FDB_ENTRY:
453
+ case SAI_SWITCH_ATTR_AVAILABLE_IPMC_ENTRY:
454
+ case SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY:
455
+ case SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY:
432
456
{
433
457
sai_status_t status = sai_switch_api->get_switch_attribute (gSwitchId , 1 , &attr);
434
458
if (status != SAI_STATUS_SUCCESS)
435
459
{
460
+ if (status == SAI_STATUS_NOT_SUPPORTED)
461
+ {
462
+ // remove unsupported resources from map
463
+ m_resourcesMap.erase (res.first );
464
+ }
436
465
SWSS_LOG_ERROR (" Failed to get switch attribute %u , rv:%d" , attr.id , status);
437
466
break ;
438
467
}
@@ -504,22 +533,36 @@ void CrmOrch::updateCrmCountersTable()
504
533
// Update CRM used counters in COUNTERS_DB
505
534
for (const auto &i : crmUsedCntsTableMap)
506
535
{
507
- for (const auto &cnt : m_resourcesMap.at (i.second ).countersMap )
536
+ try
537
+ {
538
+ for (const auto &cnt : m_resourcesMap.at (i.second ).countersMap )
539
+ {
540
+ FieldValueTuple attr (i.first , to_string (cnt.second .usedCounter ));
541
+ vector<FieldValueTuple> attrs = { attr };
542
+ m_countersCrmTable->set (cnt.first , attrs);
543
+ }
544
+ }
545
+ catch (const out_of_range &e)
508
546
{
509
- FieldValueTuple attr (i.first , to_string (cnt.second .usedCounter ));
510
- vector<FieldValueTuple> attrs = { attr };
511
- m_countersCrmTable->set (cnt.first , attrs);
547
+ // expected when a resource is unavailable
512
548
}
513
549
}
514
550
515
551
// Update CRM available counters in COUNTERS_DB
516
552
for (const auto &i : crmAvailCntsTableMap)
517
553
{
518
- for (const auto &cnt : m_resourcesMap.at (i.second ).countersMap )
554
+ try
555
+ {
556
+ for (const auto &cnt : m_resourcesMap.at (i.second ).countersMap )
557
+ {
558
+ FieldValueTuple attr (i.first , to_string (cnt.second .availableCounter ));
559
+ vector<FieldValueTuple> attrs = { attr };
560
+ m_countersCrmTable->set (cnt.first , attrs);
561
+ }
562
+ }
563
+ catch (const out_of_range &e)
519
564
{
520
- FieldValueTuple attr (i.first , to_string (cnt.second .availableCounter ));
521
- vector<FieldValueTuple> attrs = { attr };
522
- m_countersCrmTable->set (cnt.first , attrs);
565
+ // expected when a resource is unavailable
523
566
}
524
567
}
525
568
}
0 commit comments