Skip to content

Commit fc9ffb9

Browse files
authored
[copp] Add ISIS, LDP and micro-BFD trap types to CoPP manager (sonic-net#1890)
* Add ISIS, LDP and micro-BFD traps to copp Signed-off-by: Alexandru Banu <[email protected]>
1 parent 452cbc1 commit fc9ffb9

File tree

2 files changed

+28
-21
lines changed

2 files changed

+28
-21
lines changed

orchagent/copporch.cpp

+12-9
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ static map<string, sai_hostif_trap_type_t> trap_id_map = {
5858
{"bgp", SAI_HOSTIF_TRAP_TYPE_BGP},
5959
{"dhcpv6", SAI_HOSTIF_TRAP_TYPE_DHCPV6},
6060
{"ospfv6", SAI_HOSTIF_TRAP_TYPE_OSPFV6},
61+
{"isis", SAI_HOSTIF_TRAP_TYPE_ISIS},
6162
{"vrrpv6", SAI_HOSTIF_TRAP_TYPE_VRRPV6},
6263
{"bgpv6", SAI_HOSTIF_TRAP_TYPE_BGPV6},
6364
{"neigh_discovery", SAI_HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_DISCOVERY},
@@ -75,7 +76,10 @@ static map<string, sai_hostif_trap_type_t> trap_id_map = {
7576
{"bfd", SAI_HOSTIF_TRAP_TYPE_BFD},
7677
{"bfdv6", SAI_HOSTIF_TRAP_TYPE_BFDV6},
7778
{"src_nat_miss", SAI_HOSTIF_TRAP_TYPE_SNAT_MISS},
78-
{"dest_nat_miss", SAI_HOSTIF_TRAP_TYPE_DNAT_MISS}
79+
{"dest_nat_miss", SAI_HOSTIF_TRAP_TYPE_DNAT_MISS},
80+
{"ldp", SAI_HOSTIF_TRAP_TYPE_LDP},
81+
{"bfd_micro", SAI_HOSTIF_TRAP_TYPE_BFD_MICRO},
82+
{"bfdv6_micro", SAI_HOSTIF_TRAP_TYPE_BFDV6_MICRO}
7983
};
8084

8185
static map<string, sai_packet_action_t> packet_action_map = {
@@ -519,7 +523,7 @@ task_process_status CoppOrch::processCoppRule(Consumer& consumer)
519523
policer_attribs, genetlink_attribs))
520524
{
521525
return task_process_status::task_invalid_entry;
522-
}
526+
}
523527

524528
/* Set host interface trap group */
525529
if (m_trap_group_map.find(trap_group_name) != m_trap_group_map.end())
@@ -583,7 +587,7 @@ task_process_status CoppOrch::processCoppRule(Consumer& consumer)
583587
if (sai_status != SAI_STATUS_SUCCESS)
584588
{
585589
SWSS_LOG_ERROR("Failed to set attribute %d on trap %" PRIx64 ""
586-
" on group %s", i.id, m_syncdTrapIds[trap_id].trap_obj,
590+
" on group %s", i.id, m_syncdTrapIds[trap_id].trap_obj,
587591
trap_group_name.c_str());
588592
task_process_status handle_status = handleSaiSetStatus(SAI_API_HOSTIF, sai_status);
589593
if (handle_status != task_process_status::task_success)
@@ -601,10 +605,10 @@ task_process_status CoppOrch::processCoppRule(Consumer& consumer)
601605
}
602606
if (!genetlink_attribs.empty())
603607
{
604-
if (m_trap_group_hostif_map.find(m_trap_group_map[trap_group_name]) !=
608+
if (m_trap_group_hostif_map.find(m_trap_group_map[trap_group_name]) !=
605609
m_trap_group_hostif_map.end())
606610
{
607-
SWSS_LOG_ERROR("Genetlink hostif exists for the trap group %s",
611+
SWSS_LOG_ERROR("Genetlink hostif exists for the trap group %s",
608612
trap_group_name.c_str());
609613
return task_process_status::task_failed;
610614
}
@@ -800,7 +804,7 @@ bool CoppOrch::trapGroupProcessTrapIdChange (string trap_group_name,
800804
SWSS_LOG_ERROR("Failed to set traps to trap group %s", trap_group_name.c_str());
801805
return false;
802806
}
803-
if (m_trap_group_hostif_map.find(m_trap_group_map[trap_group_name]) !=
807+
if (m_trap_group_hostif_map.find(m_trap_group_map[trap_group_name]) !=
804808
m_trap_group_hostif_map.end())
805809
{
806810
if (!createGenetlinkHostIfTable(add_trap_ids))
@@ -819,7 +823,7 @@ bool CoppOrch::trapGroupProcessTrapIdChange (string trap_group_name,
819823
* A trap ID will be present in rem_trap_id in two scenarios
820824
* 1) When trap group for a trap ID is changed
821825
* 2) When trap ID is completely removed
822-
* In case 1 the first call would be to add the trap ids to a different
826+
* In case 1 the first call would be to add the trap ids to a different
823827
* group. This would result in changing the mapping of trap id to trap group
824828
* In case 2 the mapping will remain the same. In this case the trap
825829
* object needs to be deleted
@@ -830,7 +834,7 @@ bool CoppOrch::trapGroupProcessTrapIdChange (string trap_group_name,
830834
m_syncdTrapIds[i].trap_obj);
831835
if (sai_status != SAI_STATUS_SUCCESS)
832836
{
833-
SWSS_LOG_ERROR("Failed to remove trap object %" PRId64 "",
837+
SWSS_LOG_ERROR("Failed to remove trap object %" PRId64 "",
834838
m_syncdTrapIds[i].trap_obj);
835839
task_process_status handle_status = handleSaiRemoveStatus(SAI_API_HOSTIF, sai_status);
836840
if (handle_status != task_success)
@@ -1092,4 +1096,3 @@ bool CoppOrch::trapGroupUpdatePolicer (string trap_group_name,
10921096
}
10931097
return true;
10941098
}
1095-

tests/test_copp.py

+16-12
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"bgp": "SAI_HOSTIF_TRAP_TYPE_BGP",
5151
"dhcpv6": "SAI_HOSTIF_TRAP_TYPE_DHCPV6",
5252
"ospfv6": "SAI_HOSTIF_TRAP_TYPE_OSPFV6",
53+
"isis": "SAI_HOSTIF_TRAP_TYPE_ISIS",
5354
"vrrpv6": "SAI_HOSTIF_TRAP_TYPE_VRRPV6",
5455
"bgpv6": "SAI_HOSTIF_TRAP_TYPE_BGPV6",
5556
"neigh_discovery": "SAI_HOSTIF_TRAP_TYPE_IPV6_NEIGHBOR_DISCOVERY",
@@ -67,7 +68,10 @@
6768
"bfd": "SAI_HOSTIF_TRAP_TYPE_BFD",
6869
"bfdv6": "SAI_HOSTIF_TRAP_TYPE_BFDV6",
6970
"src_nat_miss": "SAI_HOSTIF_TRAP_TYPE_SNAT_MISS",
70-
"dest_nat_miss": "SAI_HOSTIF_TRAP_TYPE_DNAT_MISS"
71+
"dest_nat_miss": "SAI_HOSTIF_TRAP_TYPE_DNAT_MISS",
72+
"ldp": "SAI_HOSTIF_TRAP_TYPE_LDP",
73+
"bfd_micro": "SAI_HOSTIF_TRAP_TYPE_BFD_MICRO",
74+
"bfdv6_micro": "SAI_HOSTIF_TRAP_TYPE_BFDV6_MICRO"
7175
}
7276

7377
copp_group_default = {
@@ -201,12 +205,12 @@ def setup_copp(self, dvs):
201205
self.feature_tbl.set("sflow", fvs)
202206
time.sleep(2)
203207

204-
208+
205209
def validate_policer(self, policer_oid, field, value):
206210
(status, fvs) = self.policer_atbl.get(policer_oid)
207211
assert status == True
208212
attr = field_to_sai_attr[field]
209-
213+
210214
attr_value = value
211215
if field == "mode":
212216
attr_value = policer_mode_map[value]
@@ -218,7 +222,7 @@ def validate_policer(self, policer_oid, field, value):
218222
for fv in fvs:
219223
if (fv[0] == attr):
220224
assert attr_value == fv[1]
221-
225+
222226
def validate_trap_group(self, trap_oid, trap_group):
223227
(status, trap_fvs) = self.trap_atbl.get(trap_oid)
224228
assert status == True
@@ -244,11 +248,11 @@ def validate_trap_group(self, trap_oid, trap_group):
244248
policer_oid = fv[1]
245249
elif fv[0] == "SAI_HOSTIF_TRAP_GROUP_ATTR_QUEUE":
246250
queue = fv[1]
247-
251+
248252
for keys in trap_group:
249253
obj_type = field_to_sai_obj_type[keys]
250254
if obj_type == "SAI_OBJECT_TYPE_POLICER":
251-
assert policer_oid != ""
255+
assert policer_oid != ""
252256
assert policer_oid != "oid:0x0"
253257
self.validate_policer(policer_oid, keys, trap_group[keys])
254258

@@ -267,7 +271,7 @@ def validate_trap_group(self, trap_oid, trap_group):
267271
assert trap_priority == trap_group[keys]
268272

269273
elif obj_type == "SAI_OBJECT_TYPE_HOSTIF":
270-
host_tbl_keys = self.hostiftbl_atbl.getKeys();
274+
host_tbl_keys = self.hostiftbl_atbl.getKeys()
271275
host_tbl_key = None
272276
for host_tbl_entry in host_tbl_keys:
273277
(status, fvs) = self.hostiftbl_atbl.get(host_tbl_entry)
@@ -334,7 +338,7 @@ def test_restricted_trap_sflow(self, dvs, testlog):
334338
if "sample_packet" not in trap_ids:
335339
continue
336340
trap_group = copp_trap[traps]
337-
trap_found = False
341+
trap_found = False
338342
trap_type = traps_to_trap_type["sample_packet"]
339343
for key in trap_keys:
340344
(status, fvs) = self.trap_atbl.get(key)
@@ -498,8 +502,8 @@ def test_trap_action_set(self, dvs, testlog):
498502
def test_new_trap_add(self, dvs, testlog):
499503
self.setup_copp(dvs)
500504
global copp_trap
501-
traps = "eapol"
502-
fvs = swsscommon.FieldValuePairs([("trap_group", "queue1_group2"),("trap_ids", "eapol")])
505+
traps = "eapol,isis,bfd_micro,bfdv6_micro,ldp"
506+
fvs = swsscommon.FieldValuePairs([("trap_group", "queue1_group2"),("trap_ids", traps)])
503507
self.trap_ctbl.set(traps, fvs)
504508
copp_trap[traps] = copp_group_queue1_group2
505509
time.sleep(2)
@@ -527,8 +531,8 @@ def test_new_trap_add(self, dvs, testlog):
527531
def test_new_trap_del(self, dvs, testlog):
528532
self.setup_copp(dvs)
529533
global copp_trap
530-
traps = "eapol"
531-
fvs = swsscommon.FieldValuePairs([("trap_group", "queue1_group2"),("trap_ids", "eapol")])
534+
traps = "eapol,isis,bfd_micro,bfdv6_micro,ldp"
535+
fvs = swsscommon.FieldValuePairs([("trap_group", "queue1_group2"),("trap_ids", traps)])
532536
self.trap_ctbl.set(traps, fvs)
533537
copp_trap[traps] = copp_group_queue1_group2
534538
time.sleep(2)

0 commit comments

Comments
 (0)