diff options
Diffstat (limited to '6/firewall.pl')
-rw-r--r-- | 6/firewall.pl | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/6/firewall.pl b/6/firewall.pl new file mode 100644 index 0000000..d76e2d1 --- /dev/null +++ b/6/firewall.pl @@ -0,0 +1,24 @@ +% vim set ft=prolog + +% rule(src, dst, proto, port, source(..)). + +:- module(firewall, [ + fw_rule/2, + retract_all_from/1]). + +:- use_module(hosts, [ + router_link/3]). + +:- dynamic fw_rule/2. + +rule_is_from(fw_rule(_, Attr), From) :- Attr.from=From. + +rules_from(From, Rules) :- + findall(fw_rule(Host, Attr), (fw_rule(Host, Attr), Attr.from=From), Rules). + +retract_all_from(From) :- + rules_from(From, Rules), + retract_rules(Rules). + +retract_rules([R|Rules]) :- retract(R), retract_rules(Rules). +retract_rules([]). |