#!/usr/bin/perl -wT
use Test::More tests => 32;
BEGIN { use_ok( 'Net::DHCP::Packet' ); }
BEGIN { use_ok( 'Net::DHCP::Constants' ); }
use strict;
my $str200 = "1234567890" x 20;
my $pac;
my $ref_packet = pack("H*",
"0101060011223344000080000a0000010a0000020a0000030a00000400112233".
"445566778899aabbccddeeff3132333435363738393031323334353637383930".
"3132333435363738393031323334353637383930313233343536373839303132".
"3334353637383930313233003132333435363738393031323334353637383930".
"3132333435363738393031323334353637383930313233343536373839303132".
"3334353637383930313233343536373839303132333435363738393031323334".
"3536373839303132333435363738393031323334353637383930313233343536".
"3738393031323334353637006382536335010136040c22384433040001518001".
"04ffffff0003040a0000fe210816212c370a0000fe2a040a00000548040a0000".
"06ff000000000000000000000000000000000000000000000000000000000000".
"0000000000000000000000000000000000000000000000000000000000000000".
"0000000000000000000000000000000000000000000000000000000000000000".
"0000000000000000000000000000000000000000000000000000000000000000".
"0000000000000000000000000000000000000000000000000000000000000000".
"0000000000000000000000000000000000000000000000000000000000000000".
"0000000000000000000000000000000000000000000000000000000000000000".
"0000000000000000000000000000000000000000000000000000000000000000".
"0000"
);
warn "Warnings are OK.";
my $packet = Net::DHCP::Packet->new(
op => BOOTREQUEST(),
Htype => HTYPE_ETHER(),
Hlen => 6,
Hops => 0,
Xid => 0x11223344,
Flags => 0x8000,
Ciaddr => "10.0.0.1",
Yiaddr => "10.0.0.2",
Siaddr => "10.0.0.3",
Giaddr => "10.0.0.4",
Chaddr => "00112233445566778899AABBCCDDEEFF00",
Sname => $str200,
File => $str200,
DHO_DHCP_MESSAGE_TYPE() => DHCPDISCOVER(),
DHO_DHCP_SERVER_IDENTIFIER() => "12.34.56.68",
DHO_DHCP_LEASE_TIME() => 86400,
DHO_SUBNET_MASK() => "255.255.255.0",
DHO_ROUTERS() => "10.0.0.254",
DHO_STATIC_ROUTES() => "22.33.44.55 10.0.0.254",
DHO_NTP_SERVERS() => "10.0.0.5",
DHO_WWW_SERVER() => "10.0.0.6",
Padding => "\x00" x 256
);
my $packet2 = Net::DHCP::Packet->new($ref_packet);
#diag($packet2->toString());
#diag(unpack("H*", $packet->serialize()));
is($packet2->serialize(), $ref_packet, "comparing with reference packet");
$pac = Net::DHCP::Packet->new($ref_packet);
is($pac->comment(), undef, "comparing each attribute");
is($pac->op(), BOOTREQUEST());
is($pac->htype(), HTYPE_ETHER());
is($pac->hlen(), 6);
is($pac->hops(), 0);
is($pac->xid(), 0x11223344);
is($pac->flags(), 0x8000);
is($pac->ciaddr(), "10.0.0.1");
is($pac->ciaddrRaw(), "\x0a\x00\x00\x01");
is($pac->yiaddr(), "10.0.0.2");
is($pac->yiaddrRaw(), "\x0a\x00\x00\x02");
is($pac->siaddr(), "10.0.0.3");
is($pac->siaddrRaw(), "\x0a\x00\x00\x03");
is($pac->giaddr(), "10.0.0.4");
is($pac->giaddrRaw(), "\x0a\x00\x00\x04");
is($pac->chaddr(), "00112233445566778899aabbccddeeff");
is($pac->chaddrRaw(), "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xaa\xbb\xcc\xdd\xee\xff");
is($pac->sname(), substr($str200, 0, 63));
is($pac->file(), substr($str200, 0, 127));
is($pac->padding(), "\x00" x 256);
is($pac->isDhcp(), 1);
is($pac->getOptionValue(DHO_DHCP_MESSAGE_TYPE()), DHCPDISCOVER());
is($pac->getOptionValue(DHO_DHCP_SERVER_IDENTIFIER()), "12.34.56.68");
is($pac->getOptionValue(DHO_DHCP_LEASE_TIME()), 86400);
is($pac->getOptionValue(DHO_SUBNET_MASK()), "255.255.255.0");
is($pac->getOptionValue(DHO_ROUTERS()), "10.0.0.254");
is($pac->getOptionValue(DHO_STATIC_ROUTES()), "22.33.44.55 10.0.0.254");
is($pac->getOptionValue(DHO_WWW_SERVER()), "10.0.0.6");
is($pac->getOptionValue(DHO_IRC_SERVER()), undef);
syntax highlighted by Code2HTML, v. 0.9.1