aboutsummaryrefslogtreecommitdiff
path: root/src/pf_route_socket.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/pf_route_socket.erl')
-rw-r--r--src/pf_route_socket.erl22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/pf_route_socket.erl b/src/pf_route_socket.erl
new file mode 100644
index 0000000..a4f6ed5
--- /dev/null
+++ b/src/pf_route_socket.erl
@@ -0,0 +1,22 @@
+-module(pf_route_socket).
+-export([test/0, open/5]).
+
+test() ->
+ open(17, 3, 0, fun (_) -> ok end, fun (_) -> ok end).
+
+open(PfRoute, SockRaw, AfUnspec, OpenFun, ParseFun) ->
+ {ok, Socket} = socket:open(PfRoute, SockRaw, AfUnspec),
+ 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.