diff options
Diffstat (limited to 'src/fib_pf_route_socket.erl')
-rw-r--r-- | src/fib_pf_route_socket.erl | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/fib_pf_route_socket.erl b/src/fib_pf_route_socket.erl new file mode 100644 index 0000000..ea07003 --- /dev/null +++ b/src/fib_pf_route_socket.erl @@ -0,0 +1,23 @@ +-module(fib_pf_route_socket). +-export([test/0, open/2]). +-include("fib.hrl"). + +test() -> + open(fun (_) -> ok end, fun (_) -> ok end). + +open(OpenFun, ParseFun) -> + {ok, Socket} = socket:open(?PF_ROUTE, ?SOCK_RAW, ?AF_UNSPEC), + OpenFun(Socket), + recv(Socket, ParseFun). + +recv(Socket, ParseFun) -> + case socket:recv(Socket, 0) of + {ok, <<Len:16/little-unsigned-integer, Rest/binary>>} -> + ToRead = Len - 2, + <<Pckt:ToRead/binary>> = Rest, + logger:warning("Got a packet ~p", [Pckt]), + ParseFun(Pckt), + recv(Socket, ParseFun); + Error -> + Error + end. |