1
- import os , sys
1
+ import os , sys , re
2
2
from dump .match_infra import MatchEngine , MatchRequest
3
3
from dump .helper import create_template_dict , handle_multiple_keys_matched_error
4
4
from dump .helper import verbose_print , handle_error
54
54
55
55
ASIC_TRAP_OBJ = ASIC_DB_PREFIX + ":" + "SAI_OBJECT_TYPE_HOSTIF_TRAP"
56
56
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"
57
59
ASIC_POLICER_OBJ = ASIC_DB_PREFIX + ":" + "SAI_OBJECT_TYPE_POLICER"
58
60
ASIC_QUEUE_OBJ = ASIC_DB_PREFIX + ":" + "SAI_OBJECT_TYPE_QUEUE"
59
61
@@ -146,15 +148,17 @@ def handle_asic_db(self):
146
148
sai_trap_id = ""
147
149
else :
148
150
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 )
151
153
self .__get_asic_policer_obj (sai_policer )
152
154
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 )
153
157
154
- def __get_asic_trap_obj (self , sai_trap_id ):
158
+ def __get_asic_hostif_trap_obj (self , sai_trap_id ):
155
159
if not sai_trap_id :
156
160
self .ret_temp ["ASIC_DB" ]["tables_not_found" ].append (ASIC_TRAP_OBJ )
157
- return ""
161
+ return "" , ""
158
162
159
163
req = MatchRequest (db = "ASIC_DB" , table = ASIC_TRAP_OBJ , field = "SAI_HOSTIF_TRAP_ATTR_TRAP_TYPE" , value = sai_trap_id ,
160
164
ns = self .ns , return_fields = ["SAI_HOSTIF_TRAP_ATTR_TRAP_GROUP" ])
@@ -165,12 +169,12 @@ def __get_asic_trap_obj(self, sai_trap_id):
165
169
handle_multiple_keys_matched_error (err_str , ret ["keys" ][0 ])
166
170
trap_asic_key = ret ["keys" ][0 ]
167
171
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" ]
169
173
else :
170
174
self .ret_temp ["ASIC_DB" ]["tables_not_found" ].append (ASIC_TRAP_OBJ )
171
- return ""
175
+ return "" , ""
172
176
173
- def __get_asic_trap_group_obj (self , trap_group_obj ):
177
+ def __get_asic_hostif_trap_group_obj (self , trap_group_obj ):
174
178
if not trap_group_obj :
175
179
self .ret_temp ["ASIC_DB" ]["tables_not_found" ].append (ASIC_TRAP_GROUP_OBJ )
176
180
return "" , ""
@@ -207,6 +211,34 @@ def __get_asic_queue_obj(self, queue_sai_obj):
207
211
if not ret ["error" ] and len (ret ["keys" ]) > 0 :
208
212
self .ret_temp ["ASIC_DB" ]["keys" ].append (ret ["keys" ][0 ])
209
213
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
+
210
242
# When the user writes config to CONFIG_DB, that takes precedence over default config
211
243
def handle_user_and_default_config (self ):
212
244
# ------------------ Find trap_id_key and trap_group from both the sources
0 commit comments