Skip to content

Commit b2536dd

Browse files
[openwrt] Add firewall includes parser and renderer
1 parent 07305f6 commit b2536dd

1 file changed

Lines changed: 34 additions & 2 deletions

File tree

netjsonconfig/backends/openwrt/converters/firewall.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
class 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

Comments
 (0)