Skip to content

Commit cd7186f

Browse files
[openwrt] Add firewall defaults parser and renderer
1 parent 2bd9f08 commit cd7186f

1 file changed

Lines changed: 26 additions & 4 deletions

File tree

netjsonconfig/backends/openwrt/converters/firewall.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)