Skip to content

Commit

Permalink
Merge branch 'cleanup'
Browse files Browse the repository at this point in the history
  • Loading branch information
msantos committed Mar 11, 2012
2 parents be946a5 + 3e79ba0 commit 25e26eb
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 39 deletions.
55 changes: 55 additions & 0 deletions include/packet.hrl
@@ -0,0 +1,55 @@
%% Copyright (c) 2012, Michael Santos <michael.santos@gmail.com>
%% All rights reserved.
%%
%% Redistribution and use in source and binary forms, with or without
%% modification, are permitted provided that the following conditions
%% are met:
%%
%% Redistributions of source code must retain the above copyright
%% notice, this list of conditions and the following disclaimer.
%%
%% Redistributions in binary form must reproduce the above copyright
%% notice, this list of conditions and the following disclaimer in the
%% documentation and/or other materials provided with the distribution.
%%
%% Neither the name of the author nor the names of its contributors
%% may be used to endorse or promote products derived from this software
%% without specific prior written permission.
%%
%% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
%% "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
%% LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
%% FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
%% COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
%% INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
%% BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
%% LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
%% CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
%% LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
%% ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
%% POSSIBILITY OF SUCH DAMAGE.
-define(SIOCGIFINDEX, 16#8933).
-define(PF_PACKET, 17).

% Options for retrieving device IP
-define(SIOCGIFADDR, 16#8915).
-define(PF_INET, 2).

% Options for retrieving dev MAC address
-define(SIOCGIFHWADDR, 16#8927).

% Options for promiscuous mode
-define(SOL_PACKET, 263).
-define(PACKET_ADD_MEMBERSHIP, 1).
-define(PACKET_DROP_MEMBERSHIP, 2).
-define(PACKET_MR_PROMISC, 1).

% Options for binding to interfaces
-define(SOL_SOCKET, 1).
-define(SO_BINDTODEVICE, 25).

% Options for BPF filtering
-define(SO_ATTACH_FILTER, 26).
-define(SO_DETACH_FILTER, 27).

-define(ETH_P_IP, 16#0800).
4 changes: 2 additions & 2 deletions src/bpf.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2011, Michael Santos <michael.santos@gmail.com>
%% Copyright (c) 2011-2012, Michael Santos <michael.santos@gmail.com>
%% All rights reserved.
%%
%% Redistribution and use in source and binary forms, with or without
Expand Down Expand Up @@ -368,7 +368,7 @@ init(Socket, Dev) ->
% Return packets sent from the interface
{ok, _} = ctl(Socket, seesent, true),

% Return packets immediately (do wait until full buffer)
% Return packets immediately (do not wait until buffer full)
{ok, _} = ctl(Socket, immediate, true),

% Get bpf buf len
Expand Down
48 changes: 11 additions & 37 deletions src/packet.erl
@@ -1,4 +1,4 @@
%% Copyright (c) 2010-2011, Michael Santos <michael.santos@gmail.com>
%% Copyright (c) 2010-2012, Michael Santos <michael.santos@gmail.com>
%% All rights reserved.
%%
%% Redistribution and use in source and binary forms, with or without
Expand Down Expand Up @@ -34,6 +34,7 @@
%% specific interfaces.
%%
-module(packet).
-include("packet.hrl").
-export([
socket/0, socket/1,
iflist/0,
Expand All @@ -52,33 +53,6 @@
]).


-define(SIOCGIFINDEX, 16#8933).
-define(PF_PACKET, 17).

% Options for retrieving device IP
-define(SIOCGIFADDR, 16#8915).
-define(PF_INET, 2).

% Options for retrieving dev MAC address
-define(SIOCGIFHWADDR, 16#8927).

% Options for promiscuous mode
-define(SOL_PACKET, 263).
-define(PACKET_ADD_MEMBERSHIP, 1).
-define(PACKET_DROP_MEMBERSHIP, 2).
-define(PACKET_MR_PROMISC, 1).

% Options for binding to interfaces
-define(SOL_SOCKET, 1).
-define(SO_BINDTODEVICE, 25).

% Options for BPF filtering
-define(SO_ATTACH_FILTER, 26).
-define(SO_DETACH_FILTER, 27).

-define(ETH_P_IP, 16#0800).


%%-------------------------------------------------------------------------
%% Convenience function to return a raw socket
%%-------------------------------------------------------------------------
Expand All @@ -104,17 +78,17 @@ arplookup(IPaddr) when is_list(IPaddr) ->
MAC.

arplookup_iter(FH, IPaddr) ->
arplookup_iter1(FH, IPaddr, file:read_line(FH)).
arplookup_iter_1(FH, IPaddr, file:read_line(FH)).

arplookup_iter1(FH, IPaddr, {ok, Line}) ->
arplookup_iter_1(FH, IPaddr, {ok, Line}) ->
case string:tokens(Line, "\s\n") of
[IPaddr, _HWType, _Flags, MAC|_] ->
list_to_tuple([ erlang:list_to_integer(E, 16) ||
E <- string:tokens(MAC, ":") ]);
_ ->
arplookup_iter(FH, IPaddr)
end;
arplookup_iter1(_FH, _IPaddr, eof) ->
arplookup_iter_1(_FH, _IPaddr, eof) ->
false.


Expand All @@ -128,9 +102,9 @@ gateway(Dev) ->
gateway_res(gateway_addr(Dev)).

gateway_res(false) -> false;
gateway_res(IP) -> gateway_res1(arplookup(IP), IP).
gateway_res1(false, _) -> false;
gateway_res1(MAC, IP) -> {ok, MAC, IP}.
gateway_res(IP) -> gateway_res_1(arplookup(IP), IP).
gateway_res_1(false, _) -> false;
gateway_res_1(MAC, IP) -> {ok, MAC, IP}.

gateway_addr(Dev) ->
{ok, FH} = file:open("/proc/net/route", [read,raw]),
Expand All @@ -139,9 +113,9 @@ gateway_addr(Dev) ->
IP.

gateway_addr_iter(FH, Dev) ->
gateway_addr_iter1(FH, Dev, file:read_line(FH)).
gateway_addr_iter_1(FH, Dev, file:read_line(FH)).

gateway_addr_iter1(FH, Dev, {ok, Line}) ->
gateway_addr_iter_1(FH, Dev, {ok, Line}) ->
case string:tokens(Line, "\t") of
[Dev, "00000000", IP, "0003"|_] ->
gateway_addr_res(IP);
Expand All @@ -150,7 +124,7 @@ gateway_addr_iter1(FH, Dev, {ok, Line}) ->
_ ->
gateway_addr_iter(FH, Dev)
end;
gateway_addr_iter1(_FH, _Dev, eof) ->
gateway_addr_iter_1(_FH, _Dev, eof) ->
false.

gateway_addr_res(IPHex) ->
Expand Down

0 comments on commit 25e26eb

Please sign in to comment.