summaryrefslogtreecommitdiff
path: root/src/fib_pf_route_socket.erl
blob: ea070038cf8c8e69ac0b6acb70fa2e40ebd2ba45 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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.