@@ -295,6 +295,8 @@ def encode_iptc_rule(rule_d, ipv6=False):
295295 # Basic rule attributes
296296 rule_attr = ('src' , 'dst' , 'protocol' , 'in-interface' , 'out-interface' , 'fragment' )
297297 iptc_rule = Rule6 () if ipv6 else Rule ()
298+ # Set default target
299+ rule_d .setdefault ('target' , '' )
298300 # Avoid issues with matches that require basic parameters to be configured first
299301 for name in rule_attr :
300302 if name in rule_d :
@@ -347,7 +349,10 @@ def decode_iptc_rule(iptc_rule, ipv6=False):
347349 name = iptc_rule .target .name .replace ('-' , '_' )
348350 d ['target' ] = {name :iptc_rule .target .get_all_parameters ()}
349351 elif iptc_rule .target and iptc_rule .target .name :
350- d ['target' ] = iptc_rule .target .name
352+ if iptc_rule .target .goto :
353+ d ['target' ] = {'goto' :iptc_rule .target .name }
354+ else :
355+ d ['target' ] = iptc_rule .target .name
351356 # Return a filtered dictionary
352357 return _filter_empty_field (d )
353358
@@ -412,10 +417,12 @@ def _iptc_setmatch(iptc_rule, name, value):
412417def _iptc_settarget (iptc_rule , value ):
413418 # Target is dictionary - Use only 1 pair key/value
414419 if isinstance (value , dict ):
415- for k , v in value .items ():
416- iptc_target = iptc_rule .create_target (k )
417- _iptc_setattr_d (iptc_target , v )
418- return
420+ t_name , t_value = next (iter (value .items ()))
421+ if t_name == 'goto' :
422+ iptc_target = iptc_rule .create_target (t_value , goto = True )
423+ else :
424+ iptc_target = iptc_rule .create_target (t_name )
425+ _iptc_setattr_d (iptc_target , t_value )
419426 # Simple target
420427 else :
421428 iptc_target = iptc_rule .create_target (value )
0 commit comments