diff options
Diffstat (limited to 'src/fib_freebsd.erl')
-rw-r--r-- | src/fib_freebsd.erl | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/fib_freebsd.erl b/src/fib_freebsd.erl new file mode 100644 index 0000000..b85d458 --- /dev/null +++ b/src/fib_freebsd.erl @@ -0,0 +1,35 @@ +-module(fib_freebsd). +-behaviour(fib_behaviour). +-export([default_table/0, current_table/0, tables/0]). +-export([list/1]). + +default_table() -> + 1. + +current_table() -> + case os:cmd("sysctl net.my_fibnum") of + [$n, $e, $t, $., $m, $y, $_, $f, $i, $n, $b, $u, $m, $:, $\s | Rest] -> + {ok, list_to_integer(string:trim(Rest))}; + _ -> + error + end. + +tables() -> + case os:cmd("sysctl net.fibs") of + [$n, $e, $t, $., $f, $i, $b, $s, $:, $\s | Rest] -> + Count = list_to_integer(string:trim(Rest)), + {ok, lists:seq(1, Count)}; + _ -> + error + end. + +list(Table) -> + case lists:member(fib:tables(), Table) of + true -> + do_list(Table); + _ -> + {error, {no_table, Table}} + end. + +do_list(Table) -> + os:cmd(["setfib ", Table, " netstat -rn"]). |