Pfx.cut
You're seeing just the function
cut
, go back to Pfx module for more information.
Specs
Cuts out a series of bits and turns it into its own Pfx
.
Extracts the bits and returns a new Pfx.t/0
with bits
set to the
bits extracted and maxlen
set to the length of the bits
-string.
Examples
iex> cut("::ffff:192.0.2.128", -1, -32)
"192.0.2.128"
iex> teredo = new("2001:0:4136:e378:8000:63bf:3fff:fdd2")
iex> # client
iex> cut(teredo, 96, 32) |> bnot() |> format()
"192.0.2.45"
iex> # udp port
iex> cut(teredo, 80, 16) |> bnot() |> cast()
40000
iex> # teredo server
iex> cut(teredo, 32, 32) |> format()
"65.54.227.120"
iex> # flags
iex> cut(teredo, 64, 16) |> digits(1) |> elem(0)
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
'Masked' bits are considered to be zero.
# extract 2nd and 3rd byte:
iex> %Pfx{bits: <<255, 255>>, maxlen: 32} |> cut(8, 16)
%Pfx{bits: <<255, 0>>, maxlen: 16}
Less useful, but cut will mirror the representation given:
iex> cut("10.11.12.13", 8, 16)
"11.12"
iex> cut({1, 2, 3, 4}, 16, 16)
{3, 4}
iex> cut({{1, 2, 0, 0}, 16}, 8, 16)
{{2, 0}, 16}
Extraction must stay within maxlen
of given pfx
.
# cannot exceed boundaries though:
iex> %Pfx{bits: <<255, 255>>, maxlen: 32} |> cut(8, 32)
** (ArgumentError) invalid index range, got {8, 32}