Packages

dhcp server implemetnation

Current section

Files

Jump to
dhcp src dhcp_package.erl~
Raw

src/dhcp_package.erl~

-module(dhcp_package).
-include("dhcp.hrl").
decode(<<Op:1/integer, HType:1/integer, HLen:1/integer, Hops:1/integer,
XId:4/integer,
Secs:2/integer, Flags:2/integer,
CiAddr:4/integer,
YiAddr:4/integer,
SiAddr:4/integer,
GiAddr:4/integer,
ChAddr:16/integer,
SName:64/binary,
File:128/binary,
Options/binary>>) ->
#dhcp_package{
op = decode_op(Op),
htype = decode_htype(HType),
hlen = HLen,
hops = Hops,
xid = XId,
secs = Secs,
flags = decode_flags(Flags),
ciaddr = decode_ip(CiAddr),
yiaddr = decode_ip(YiAddr),
siaddr = decode_ip(SiAddr),
giaddr = decode_ip(GiAddr),
chaddr = decode_ip(ChAddr),
sname = decode_string(SName),
file = decode_string(File),
options = decode_options(Options)
}.
decode_op(1) ->
request;
decode_op(2) ->
reply.
decode_htype(T) ->
T.
decode_flags(F) ->
F.
decode_ip(IP) ->
IP.
decode_mac(Mac) ->
Mac.
decode_string(S) ->
decode_string(S, <<>>).
decode_string(<<$0, _/binary>>, Bin) ->
Bin;
decode_string(<<X:1/integer, R/binary>>, Bin) ->
decode_string(R, <<Bin/binary, X:1/integer>>).
encode_string(B, Max) ->
case bytelen(B) of
L when L < Max ->
Padding = Max - L,
<<B, 0:Padding/integer>>
end.
decode_options(Opts) ->
Opts.