Skip to content

Commit 079f453

Browse files
committed
HOSTIF_* entries added to copp
Signed-off-by: Vivek Reddy Karri <[email protected]>
1 parent 47b214f commit 079f453

File tree

3 files changed

+55
-12
lines changed

3 files changed

+55
-12
lines changed

dump/plugins/copp.py

+40-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import os, sys
1+
import os, sys, re
22
from dump.match_infra import MatchEngine, MatchRequest
33
from dump.helper import create_template_dict, handle_multiple_keys_matched_error
44
from dump.helper import verbose_print, handle_error
@@ -54,6 +54,8 @@
5454

5555
ASIC_TRAP_OBJ = ASIC_DB_PREFIX + ":" + "SAI_OBJECT_TYPE_HOSTIF_TRAP"
5656
ASIC_TRAP_GROUP_OBJ = ASIC_DB_PREFIX + ":" + "SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP"
57+
ASIC_HOSTIF_TABLE_ENTRY = ASIC_DB_PREFIX + ":" + "SAI_OBJECT_TYPE_HOSTIF_TABLE_ENTRY"
58+
ASIC_HOSTIF = ASIC_DB_PREFIX + ":" + "SAI_OBJECT_TYPE_HOSTIF"
5759
ASIC_POLICER_OBJ = ASIC_DB_PREFIX + ":" + "SAI_OBJECT_TYPE_POLICER"
5860
ASIC_QUEUE_OBJ = ASIC_DB_PREFIX + ":" + "SAI_OBJECT_TYPE_QUEUE"
5961

@@ -146,15 +148,17 @@ def handle_asic_db(self):
146148
sai_trap_id = ""
147149
else:
148150
sai_trap_id = TRAP_ID_MAP[self.trap_id]
149-
sai_trap_grp = self.__get_asic_trap_obj(sai_trap_id)
150-
sai_queue, sai_policer = self.__get_asic_trap_group_obj(sai_trap_grp)
151+
sai_trap, sai_trap_grp = self.__get_asic_hostif_trap_obj(sai_trap_id)
152+
sai_queue, sai_policer = self.__get_asic_hostif_trap_group_obj(sai_trap_grp)
151153
self.__get_asic_policer_obj(sai_policer)
152154
self.__get_asic_queue_obj(sai_queue)
155+
sai_hostif_vid = self.__get_asic_hostif_entry_obj(sai_trap)
156+
self.__get_asic_hostif_obj(sai_hostif_vid)
153157

154-
def __get_asic_trap_obj(self, sai_trap_id):
158+
def __get_asic_hostif_trap_obj(self, sai_trap_id):
155159
if not sai_trap_id:
156160
self.ret_temp["ASIC_DB"]["tables_not_found"].append(ASIC_TRAP_OBJ)
157-
return ""
161+
return "", ""
158162

159163
req = MatchRequest(db="ASIC_DB", table=ASIC_TRAP_OBJ, field="SAI_HOSTIF_TRAP_ATTR_TRAP_TYPE", value=sai_trap_id,
160164
ns=self.ns, return_fields=["SAI_HOSTIF_TRAP_ATTR_TRAP_GROUP"])
@@ -165,12 +169,12 @@ def __get_asic_trap_obj(self, sai_trap_id):
165169
handle_multiple_keys_matched_error(err_str, ret["keys"][0])
166170
trap_asic_key = ret["keys"][0]
167171
self.ret_temp["ASIC_DB"]["keys"].append(trap_asic_key)
168-
return ret["return_values"][trap_asic_key]["SAI_HOSTIF_TRAP_ATTR_TRAP_GROUP"]
172+
return trap_asic_key, ret["return_values"][trap_asic_key]["SAI_HOSTIF_TRAP_ATTR_TRAP_GROUP"]
169173
else:
170174
self.ret_temp["ASIC_DB"]["tables_not_found"].append(ASIC_TRAP_OBJ)
171-
return ""
175+
return "", ""
172176

173-
def __get_asic_trap_group_obj(self, trap_group_obj):
177+
def __get_asic_hostif_trap_group_obj(self, trap_group_obj):
174178
if not trap_group_obj:
175179
self.ret_temp["ASIC_DB"]["tables_not_found"].append(ASIC_TRAP_GROUP_OBJ)
176180
return "", ""
@@ -207,6 +211,34 @@ def __get_asic_queue_obj(self, queue_sai_obj):
207211
if not ret["error"] and len(ret["keys"]) > 0:
208212
self.ret_temp["ASIC_DB"]["keys"].append(ret["keys"][0])
209213

214+
def __get_asic_hostif_entry_obj(self, sai_trap_key):
215+
# Not adding tp tables_not_found because of the type of reason specified for policer obj
216+
if not sai_trap_key:
217+
return
218+
asic_obj_ptrn = "ASIC_STATE:.*:oid:0x\w{1,14}"
219+
matches = re.findall(r"oid:0x\w{1,14}", sai_trap_key)
220+
if matches:
221+
sai_trap_vid = matches[0]
222+
else:
223+
return
224+
req = MatchRequest(db="ASIC_DB", table=ASIC_HOSTIF_TABLE_ENTRY, field="SAI_HOSTIF_TABLE_ENTRY_ATTR_TRAP_ID",
225+
value=sai_trap_vid, return_fields=["SAI_HOSTIF_TABLE_ENTRY_ATTR_HOST_IF"], ns=self.ns)
226+
ret = self.match_engine.fetch(req)
227+
if not ret["error"] and len(ret["keys"]) > 0:
228+
sai_hostif_table_entry_key = ret["keys"][0]
229+
self.ret_temp["ASIC_DB"]["keys"].append(sai_hostif_table_entry_key)
230+
sai_hostif_vid = ret["return_values"][sai_hostif_table_entry_key]["SAI_HOSTIF_TABLE_ENTRY_ATTR_HOST_IF"]
231+
return sai_hostif_vid
232+
233+
def __get_asic_hostif_obj(self, sai_hostif_vid):
234+
# Not adding tp tables_not_found because of the type of reason specified for policer obj
235+
if not sai_hostif_vid:
236+
return
237+
req = MatchRequest(db="ASIC_DB", table=ASIC_HOSTIF, key_pattern=sai_hostif_vid, ns=self.ns)
238+
ret = self.match_engine.fetch(req)
239+
if not ret["error"] and len(ret["keys"]) > 0:
240+
self.ret_temp["ASIC_DB"]["keys"].append(ret["keys"][0])
241+
210242
# When the user writes config to CONFIG_DB, that takes precedence over default config
211243
def handle_user_and_default_config(self):
212244
# ------------------ Find trap_id_key and trap_group from both the sources

tests/dump_input/copp/asic_db.json

+12-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@
2323
"SAI_HOSTIF_TRAP_ATTR_PACKET_ACTION": "SAI_PACKET_ACTION_COPY",
2424
"SAI_HOSTIF_TRAP_ATTR_TRAP_GROUP": "oid:0x110000000004da",
2525
"SAI_HOSTIF_TRAP_ATTR_TRAP_TYPE": "SAI_HOSTIF_TRAP_TYPE_ARP_RESPONSE"
26-
},
27-
26+
},
2827
"ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004de": {
2928
"SAI_HOSTIF_TRAP_ATTR_PACKET_ACTION": "SAI_PACKET_ACTION_COPY",
3029
"SAI_HOSTIF_TRAP_ATTR_TRAP_GROUP": "oid:0x110000000004db",
@@ -45,6 +44,17 @@
4544
"SAI_QUEUE_ATTR_INDEX": "1",
4645
"SAI_QUEUE_ATTR_TYPE": "SAI_QUEUE_TYPE_UNICAST"
4746
},
47+
"ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TABLE_ENTRY:oid:0x230000000004d8": {
48+
"SAI_HOSTIF_TABLE_ENTRY_ATTR_TYPE" : "SAI_HOSTIF_TABLE_ENTRY_TYPE_TRAP_ID",
49+
"SAI_HOSTIF_TABLE_ENTRY_ATTR_TRAP_ID" : "oid:0x220000000004de",
50+
"SAI_HOSTIF_TABLE_ENTRY_ATTR_CHANNEL_TYPE" : "SAI_HOSTIF_TABLE_ENTRY_CHANNEL_TYPE_GENETLINK",
51+
"SAI_HOSTIF_TABLE_ENTRY_ATTR_HOST_IF" : "oid:0xd0000000004d6"
52+
},
53+
"ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF:oid:0xd0000000004d6": {
54+
"SAI_HOSTIF_ATTR_GENETLINK_MCGRP_NAME" : "packets",
55+
"SAI_HOSTIF_ATTR_TYPE" : "SAI_HOSTIF_TYPE_GENETLINK",
56+
"SAI_HOSTIF_ATTR_NAME" : "psample"
57+
},
4858
"ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004df": {
4959
"SAI_HOSTIF_TRAP_ATTR_PACKET_ACTION": "SAI_PACKET_ACTION_COPY",
5060
"SAI_HOSTIF_TRAP_ATTR_TRAP_GROUP": "oid:0x110000000004db",

tests/dump_tests/module_tests/copp_test.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,15 @@ def test_copp_cfg_file_trap_and_copp_cfg_file_grp_with_diff(self):
8686
params["namespace"] = ""
8787
m_copp = Copp()
8888
returned = m_copp.execute(params)
89-
print(returned)
89+
print(json.dumps(returned, indent=2))
9090
expect = create_template_dict(dbs=["CONFIG_FILE", "CONFIG_DB", "APPL_DB", "ASIC_DB", "STATE_DB"])
9191
expect["CONFIG_FILE"]["keys"].extend(["COPP_GROUP|queue2_group1", "COPP_TRAP|sflow"])
9292
expect["CONFIG_DB"]["keys"].append("COPP_GROUP|queue2_group1")
9393
expect["APPL_DB"]["keys"].append("COPP_TABLE:queue2_group1")
9494
expect["STATE_DB"]["keys"].extend(["COPP_GROUP_TABLE|queue2_group1", "COPP_TRAP_TABLE|sflow"])
9595
expect["ASIC_DB"]["keys"].extend(["ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP:oid:0x220000000004de", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TRAP_GROUP:oid:0x110000000004db",
96-
"ASIC_STATE:SAI_OBJECT_TYPE_POLICER:oid:0x120000000004dc","ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:oid:0x150000000002a1"])
96+
"ASIC_STATE:SAI_OBJECT_TYPE_POLICER:oid:0x120000000004dc","ASIC_STATE:SAI_OBJECT_TYPE_QUEUE:oid:0x150000000002a1",
97+
"ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF:oid:0xd0000000004d6", "ASIC_STATE:SAI_OBJECT_TYPE_HOSTIF_TABLE_ENTRY:oid:0x230000000004d8"])
9798
ddiff = DeepDiff(returned, expect, ignore_order=True)
9899
assert not ddiff, ddiff
99100

0 commit comments

Comments
 (0)