From 2583897e4c5cbe56525365206c2a64bcd0c75e5f Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Thu, 23 Nov 2023 10:49:21 +0100 Subject: wip --- 7/firewall.pl | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 7/firewall.pl (limited to '7/firewall.pl') diff --git a/7/firewall.pl b/7/firewall.pl new file mode 100644 index 0000000..9bb0cc2 --- /dev/null +++ b/7/firewall.pl @@ -0,0 +1,37 @@ +% vim set ft=prolog + +% rule(src, dst, proto, port, source(..)). + +:- module(firewall, [ + %fw_rule/2, + warning/1, + retract_all_from/1]). + +:- use_module(library(assoc)). +:- use_module(library(dcgs)). + +:- use_module(hosts, [ + router_link/3]). + +:- dynamic(fw_rule/2). + +warning(Msg) :- + fw_rule(Host, Attr), + \+ get_assoc("from", Attr, _), + format("Missing 'from' on fw_rule for host '~w', ~w", [Host, Attr], Msg). + +rules_from(From, Rules) :- + findall( + fw_rule(H, Attr), + ( + fw_rule(H, Attr), + get_assoc("from", Attr, From) + ), + Rules). + +retract_all_from(From) :- + rules_from(From, Rules), + retract_rules(Rules). + +retract_rules([R|Rules]) :- retract(R), retract_rules(Rules). +retract_rules([]). -- cgit v1.2.3