tres/ipv4_address: Refactor netmask calculation logic with Erlang way

This commit is contained in:
Eishun Kondoh 2018-10-09 11:02:15 +09:00
parent d0683cf721
commit 79fc75ea67

View file

@ -21,16 +21,9 @@ defmodule Tres.IPv4Address do
[netaddr, cidr_str] -> [netaddr, cidr_str] ->
cidr = String.to_integer(cidr_str) cidr = String.to_integer(cidr_str)
mask = (0xFFFFFFFF >>> (32 - cidr)) <<< (32 - cidr) mask = (0xFFFFFFFF >>> (32 - cidr)) <<< (32 - cidr)
<<m1, m2, m3, m4>> = <<mask::32>>
net_mask = {
(0xFF000000 &&& mask) >>> 24,
(0x00FF0000 &&& mask) >>> 16,
(0x0000FF00 &&& mask) >>> 8,
(0x000000FF &&& mask)
}
{:ok, ipaddr} = netaddr |> to_charlist |> :inet.parse_address() {:ok, ipaddr} = netaddr |> to_charlist |> :inet.parse_address()
{ipaddr, net_mask} {ipaddr, {m1, m2, m3, m4}}
end end
end end