@@ -99,6 +99,18 @@ def _get_raw_translation(direction, family, address=None):
9999 return _xml_to_dict (xml )
100100
101101
102+ def _get_interface (rule ):
103+ interface = 'any'
104+ for expr in rule .get ('rule' , {}).get ('expr' , []):
105+ match = expr .get ('match' )
106+ if match and jmespath .search ('left.meta.key' , match ) in ('iifname' , 'oifname' ):
107+ interface = match .get ('right' )
108+ break
109+ if isinstance (interface , str ) and interface .startswith ('@' ):
110+ interface = interface [3 :]
111+ return interface
112+
113+
102114def _get_formatted_output_rules (data , direction , family ):
103115
104116
@@ -142,10 +154,7 @@ def _get_ports_for_output(rules):
142154 rule_number = comment .split ('-' )[- 1 ]
143155 rule_number = rule_number .split (' ' )[0 ]
144156 if 'expr' in rule ['rule' ]:
145- interface = rule .get ('rule' ).get ('expr' )[0 ].get ('match' ).get ('right' ) \
146- if jmespath .search ('rule.expr[*].match.left.meta' , rule ) else 'any'
147- if interface [0 ] == '@' :
148- interface = interface [3 :]
157+ interface = _get_interface (rule )
149158 for index , match in enumerate (jmespath .search ('rule.expr[*].match' , rule )):
150159 if 'payload' in match ['left' ]:
151160 # Handle NAT rule containing comma-separated list of ports
@@ -257,8 +266,7 @@ def _get_formatted_output_statistics(data, direction):
257266 rule_number = comment .split ('-' )[- 1 ]
258267 rule_number = rule_number .split (' ' )[0 ]
259268 if 'expr' in rule ['rule' ]:
260- interface = rule .get ('rule' ).get ('expr' )[0 ].get ('match' ).get ('right' ) \
261- if jmespath .search ('rule.expr[*].match.left.meta' , rule ) else 'any'
269+ interface = _get_interface (rule )
262270 packets = jmespath .search ('rule.expr[*].counter.packets | [0]' , rule )
263271 _bytes = jmespath .search ('rule.expr[*].counter.bytes | [0]' , rule )
264272 data_entries .append ([rule_number , packets , _bytes , interface ])
@@ -298,13 +306,11 @@ def _get_formatted_translation(dict_data, nat_direction, family, verbose):
298306 reply_dport = meta ['layer4' ]['dport' ]
299307 proto = meta ['layer4' ]['protoname' ]
300308 if direction == 'independent' :
301- conn_id = meta ['id' ]
302309 timeout = meta .get ('timeout' , 'n/a' )
303310 orig_src = f'{ orig_src } :{ orig_sport } ' if orig_sport else orig_src
304311 orig_dst = f'{ orig_dst } :{ orig_dport } ' if orig_dport else orig_dst
305312 reply_src = f'{ reply_src } :{ reply_sport } ' if reply_sport else reply_src
306313 reply_dst = f'{ reply_dst } :{ reply_dport } ' if reply_dport else reply_dst
307- state = meta ['state' ] if 'state' in meta else ''
308314 mark = meta .get ('mark' , '' )
309315 zone = meta ['zone' ] if 'zone' in meta else ''
310316 if nat_direction == 'source' :
0 commit comments