Skip to content

Instantly share code, notes, and snippets.

@JonGretar
Created March 14, 2012 16:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JonGretar/2037699 to your computer and use it in GitHub Desktop.
Save JonGretar/2037699 to your computer and use it in GitHub Desktop.
Module for calculating network address.
-module(ipcalc).
-author('Jon Gretar Borgthorsson <jongretar@medizza.com>').
-export([
get_network/2
]).
%% When Netmask is not Integer
get_network(_NetworkAddress, Netmask) when is_list(Netmask) ->
throw(netmask_not_integer);
%% When Network Address is in format <<192,168,0,1>>.
get_network(NetworkBinary, Netmask) when is_binary(NetworkBinary) ->
<<Result:Netmask,_/bitstring>> = NetworkBinary,
Result;
%% When Network Address is in format [192,168,0,1].
get_network([IP1,IP2,IP3,IP4], Netmask) when is_integer(IP1) ->
get_network(<<IP1:8,IP2:8,IP3:8,IP4:8>>, Netmask);
%% When Network Address is in format ["192","168","0","1"].
get_network([IP1,IP2,IP3,IP4], Netmask) when is_list(IP1) ->
get_network([
list_to_integer(IP1),
list_to_integer(IP2),
list_to_integer(IP3),
list_to_integer(IP4)
], Netmask);
%% When Network Address is in format "192.168.0.1".
get_network(NetworkAddress, Netmask) ->
IPTokens = string:tokens(NetworkAddress, "."),
get_network(IPTokens, Netmask).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment