summaryrefslogtreecommitdiff
path: root/src/fib.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/fib.erl')
-rw-r--r--src/fib.erl37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/fib.erl b/src/fib.erl
new file mode 100644
index 0000000..130e8ec
--- /dev/null
+++ b/src/fib.erl
@@ -0,0 +1,37 @@
+-module(fib).
+-export([tables/0, current_table/0]).
+-export([list/0, list/1]).
+-export_types([table/0, flags/0, entry/0]).
+
+-type table() :: non_neg_integer.
+
+-type flags() :: [].
+
+-type entry() :: #{destination := inet:ip_address() | default,
+ netmask := inet:ip_address() | undefined,
+ gateway := inet:ip_address() | {mac, string()} | {link, integer()},
+ scope := string() | undefined,
+ interface := string(),
+ flags := flags(),
+ expire := undefined}.
+
+-spec tables() -> [table()].
+tables() ->
+ persistent_term:get('fib/tables').
+
+-spec current_table() -> table().
+current_table() ->
+ persistent_term:get('fib/current_table').
+
+-spec list() -> [entry()].
+list() ->
+ Mod = mod(),
+ Mod:list(Mod:default_table()).
+
+-spec list(table) -> [entry()].
+list(Table) ->
+ Mod = mod(),
+ Mod:list(Table).
+
+mod() ->
+ persistent_term:get('fib/module').