From de3d2c7ed173d6a3478f2432dea441a7e2e1088a Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Wed, 8 Nov 2023 09:47:36 +0100 Subject: wip --- 6/bgp.pl | 25 ++++++++++++------------- 6/hosts.pl | 2 +- 6/main.pl | 21 +++++++++++---------- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/6/bgp.pl b/6/bgp.pl index f5dd70a..d9b448b 100644 --- a/6/bgp.pl +++ b/6/bgp.pl @@ -13,8 +13,6 @@ router_link/3, attached_network/2]). -:- discontiguous bgp:to_dict/2. - %host(H) :- router_link(H, _, _). %host(H) :- router_link(_, H, _). % host(H). @@ -22,13 +20,6 @@ router(R) :- host(R), hosts:host_config(R, _). routers(Routers) :- setof(router(R), router(R), Routers). -to_dict(router(R), Dict) :- - bgp:neighbors(R, Neighbors), - maplist(bgp:to_dict(), Neighbors, NeighborDicts), - Dict = _{ - host: R, - neighbors: NeighborDicts}. - neighbor(H, R) :- router(H), router(R), router_link(H, _, R), @@ -38,7 +29,7 @@ warning(Msg) :- host(H), host(R), router_link(H, _, R), \+ router_link(R, _, H), - format(string(Msg), "Missing router_link from ~w to ~w", [R, H]). + format(string(Msg), "Missing router_link from '~w' to '~w'", [R, H]). neighbors(H, Cs) :- findall(neighbor(H, Name), neighbor(H, Name), Cs). @@ -75,8 +66,16 @@ router_path(X, Y) :- router_path(X, Y, []). router_path(X, Y, _) :- router_link(X, _, Y). router_path(X, Y, V) :- \+ member(X, V), router_link(X, _, Z), router_path(Z, Y, [X|V]). -to_yaml(neighbor(H, Remote), Dict) :- Dict = yaml(router(H), remote(Remote)). -to_json(neighbor(H, Remote), Dict) :- Dict = json(router(H), remote(Remote)). +%to_yaml(neighbor(H, Remote), Dict) :- Dict = yaml(router(H), remote(Remote)). +%to_json(neighbor(H, Remote), Dict) :- Dict = json(router(H), remote(Remote)). + +to_dict(router(R), Dict) :- + neighbors(R, Neighbors), + maplist(to_dict(), Neighbors, NeighborDicts), + Dict = _{ + host: R, + neighbors: NeighborDicts}. + to_dict(neighbor(_, Remote), Dict) :- host_config(Remote, RC), Dict = neighbor{ neighbor:_{ @@ -91,7 +90,7 @@ routers_entry(router(R), Dict) :- dict_create(Dict, _, Data). bird_config(Dict) :- - bgp:routers(Routers), + routers(Routers), maplist(to_dict(), Routers, RouterDicts), % maplist(routers_entry(), Routers, RouterDicts), Dict = _{routers:RouterDicts}. diff --git a/6/hosts.pl b/6/hosts.pl index 090a172..83fcbac 100644 --- a/6/hosts.pl +++ b/6/hosts.pl @@ -40,7 +40,7 @@ router_link(kv24ix, "1::5", hash). router_link(lhn2ix, "1::9", hash). router_link(lhn2ix, "1::4", knot). router_link(conflatorio, "1::11", lhn2ix). -router_link(lhn2ix, "1::12", conflatorio). +%router_link(lhn2ix, "1::12", conflatorio). % network(R, address, range) attached_network(conflatorio, ipv6_net("1:78e1::", 64)). diff --git a/6/main.pl b/6/main.pl index cd9f807..d3dd76d 100644 --- a/6/main.pl +++ b/6/main.pl @@ -1,16 +1,17 @@ :- use_module(bgp). -% :- use_module(tnet). -% H=knot, -% bgp:bgp_connections(H, BgpConnections), -% maplist(bgp:to_dict(), BgpConnections, BgpConnectionDicts), -% yaml_write(current_output, _{bgp_connections:BgpConnectionDicts}). +print_warnings([]). +print_warnings([W|Ws]) :- format("Warning: ~w~n", [W]), print_warnings(Ws). -warnings :- - bgp:warning(Ws), - writeln("Warnings: ~w", [length(Ws)]). +print_warnings :- + findall(W, bgp:warning(W), Ws), + length(Ws, L), + ( L > 0 + ->format("Found ~w warning(s):~n", [L]), + print_warnings(Ws) + ; format("No warnings!~n") + ). main :- bgp:bird_config(BirdDict), - yaml_write(current_output, BirdDict), - true. + yaml_write(current_output, BirdDict). -- cgit v1.2.3