diff --git a/compile.ml b/compile.ml new file mode 100644 index 0000000..3e26023 --- /dev/null +++ b/compile.ml @@ -0,0 +1,22 @@ +open Config + +let rec deps_of_zone = function + | ZoneIpv4 _ | ZoneIpv6 _ -> [] + | Zone z -> [z] + | ZoneList l -> List.flatten (List.map deps_of_zone l) + | ZoneExclude e -> deps_of_zone e + +let deps_of_zones zone = + List.map (fun (a, b) -> (a, deps_of_zone b)) zone + +let compile_zone _ _ = [] + +let compile_zones zones = + let deps = deps_of_zones zones in + match Tsort.sort deps with + | Tsort.Sorted sorted -> + List.fold_right (fun name acc -> + let values = List.assoc name zones in + let compiled = compile_zone acc values in + (name, compiled) :: acc) sorted [] + | _ -> assert false diff --git a/dune b/dune index 80804dc..79a5cb0 100644 --- a/dune +++ b/dune @@ -1,3 +1,3 @@ (executable (name firewall) - (libraries yojson ipaddr)) + (libraries yojson ipaddr tsort))