1414class Firewall (OpenWrtConverter ):
1515 netjson_key = "firewall"
1616 intermediate_key = "firewall"
17- _uci_types = ["defaults" , "forwarding" , "zone" , "rule" , "redirect" ]
17+ _uci_types = ["defaults" , "forwarding" , "zone" , "rule" , "redirect" , "include" ]
1818 _schema = schema ["properties" ]["firewall" ]
1919
2020 def to_intermediate_loop (self , block , result , index = None ):
@@ -23,8 +23,11 @@ def to_intermediate_loop(self, block, result, index=None):
2323 zones = self .__intermediate_zones (block .pop ("zones" , {}))
2424 rules = self .__intermediate_rules (block .pop ("rules" , {}))
2525 redirects = self .__intermediate_redirects (block .pop ("redirects" , {}))
26+ includes = self .__intermediate_includes (block .pop ("includes" , {}))
2627 result .setdefault ("firewall" , [])
27- result ["firewall" ] = defaults + forwardings + zones + rules + redirects
28+ result ["firewall" ] = (
29+ defaults + forwardings + zones + rules + redirects + includes
30+ )
2831 return result
2932
3033 def __intermediate_defaults (self , defaults ):
@@ -127,6 +130,24 @@ def __intermediate_redirects(self, redirects):
127130
128131 return result
129132
133+ def __intermediate_includes (self , includes ):
134+ """
135+ converts NetJSON include to
136+ UCI intermediate data structure
137+ """
138+ result = []
139+ for include in includes :
140+ if "config_name" in include :
141+ del include ["config_name" ]
142+ resultdict = OrderedDict (
143+ ((".name" , self ._get_uci_name (include ["name" ])), (".type" , "include" ),)
144+ )
145+
146+ resultdict .update (include )
147+ result .append (resultdict )
148+
149+ return result
150+
130151 def to_netjson_loop (self , block , result , index ):
131152 result .setdefault ("firewall" , {})
132153
@@ -154,6 +175,10 @@ def to_netjson_loop(self, block, result, index):
154175 redirect = self .__netjson_redirect (block )
155176 result ["firewall" ].setdefault ("redirects" , [])
156177 result ["firewall" ]["redirects" ].append (redirect )
178+ if _type == "include" :
179+ include = self .__netjson_include (block )
180+ result ["firewall" ].setdefault ("includes" , [])
181+ result ["firewall" ]["includes" ].append (include )
157182
158183 return self .type_cast (result )
159184
@@ -240,6 +265,13 @@ def __netjson_redirect(self, redirect):
240265
241266 return self .type_cast (redirect )
242267
268+ def __netjson_include (self , include ):
269+ for param in ["reload" , "enabled" ]:
270+ if param in include :
271+ include [param ] = self .__netjson_generic_boolean (include [param ])
272+
273+ return self .type_cast (include )
274+
243275 def __netjson_generic_boolean (self , boolean ):
244276 # Per convention, boolean options may have one of the values '0', 'no', 'off',
245277 # 'false' or 'disabled' to specify a false value or '1' , 'yes', 'on', 'true' or
0 commit comments