@@ -18,17 +18,29 @@ class Firewall(OpenWrtConverter):
1818 _schema = schema ["properties" ]["firewall" ]
1919
2020 def to_intermediate_loop (self , block , result , index = None ):
21+ defaults = self .__intermediate_defaults (block .pop ("defaults" , {}))
2122 forwardings = self .__intermediate_forwardings (block .pop ("forwardings" , {}))
2223 zones = self .__intermediate_zones (block .pop ("zones" , {}))
2324 rules = self .__intermediate_rules (block .pop ("rules" , {}))
2425 redirects = self .__intermediate_redirects (block .pop ("redirects" , {}))
25- block .update ({".type" : "defaults" , ".name" : block .pop ("id" , "defaults" )})
2626 result .setdefault ("firewall" , [])
27- result ["firewall" ] = (
28- [self .sorted_dict (block )] + forwardings + zones + rules + redirects
29- )
27+ result ["firewall" ] = defaults + forwardings + zones + rules + redirects
3028 return result
3129
30+ def __intermediate_defaults (self , defaults ):
31+ """
32+ converts NetJSON defaults to
33+ UCI intermediate data structure
34+ """
35+ result = OrderedDict (
36+ (
37+ (".name" , "defaults" ),
38+ (".type" , "defaults" )
39+ )
40+ )
41+ result .update (defaults )
42+ return [result ]
43+
3244 def __intermediate_forwardings (self , forwardings ):
3345 """
3446 converts NetJSON forwarding to
@@ -146,6 +158,10 @@ def to_netjson_loop(self, block, result, index):
146158 block .pop (".name" )
147159 _type = block .pop (".type" )
148160
161+ if _type == "defaults" :
162+ defaults = self .__netjson_defaults (block )
163+ result ["firewall" ].setdefault ("defaults" , {})
164+ result ["firewall" ]["defaults" ].update (defaults )
149165 if _type == "rule" :
150166 rule = self .__netjson_rule (block )
151167 result ["firewall" ].setdefault ("rules" , [])
@@ -165,6 +181,12 @@ def to_netjson_loop(self, block, result, index):
165181
166182 return self .type_cast (result )
167183
184+ def __netjson_defaults (self , defaults ):
185+ for param in ["synflood_protect" ]:
186+ if param in defaults :
187+ defaults [param ] = self .__netjson_generic_boolean (defaults [param ])
188+ return self .type_cast (defaults )
189+
168190 def __netjson_rule (self , rule ):
169191 for param in ["enabled" , "utc_time" ]:
170192 if param in rule :
0 commit comments