summaryrefslogtreecommitdiff
path: root/6/firewall.pl
diff options
context:
space:
mode:
Diffstat (limited to '6/firewall.pl')
-rw-r--r--6/firewall.pl24
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([]).