summaryrefslogtreecommitdiff
path: root/src/fib_pf_route_socket.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/fib_pf_route_socket.erl')
-rw-r--r--src/fib_pf_route_socket.erl23
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.