14 |
|
|
15 |
my $debug = shift @ARGV; |
my $debug = shift @ARGV; |
16 |
|
|
17 |
my $ip_server = '10.0.0.100'; |
our ( $server_ip, $next_file ); |
18 |
|
require "config.pl"; |
19 |
|
|
20 |
my $sock = IO::Socket::INET->new( |
my $sock = IO::Socket::INET->new( |
21 |
LocalPort => 67, |
LocalPort => 67, |
31 |
|
|
32 |
my $_ip = 10; |
my $_ip = 10; |
33 |
my $_mac2ip; |
my $_mac2ip; |
34 |
|
my $_ip_file; |
35 |
|
|
36 |
sub client_ip { |
sub client_ip { |
37 |
my ( $mac ) = @_; |
my ( $mac ) = @_; |
80 |
Flags => $dhcp->flags(), |
Flags => $dhcp->flags(), |
81 |
Ciaddr => $dhcp->ciaddr(), |
Ciaddr => $dhcp->ciaddr(), |
82 |
Yiaddr => $ip, |
Yiaddr => $ip, |
83 |
Siaddr => $ip_server, |
Siaddr => $server_ip, |
84 |
Giaddr => $dhcp->giaddr(), |
Giaddr => $dhcp->giaddr(), |
85 |
Chaddr => $dhcp->chaddr(), |
Chaddr => $dhcp->chaddr(), |
86 |
File => 'undionly.kpxe', |
File => $_ip_file->{$ip} || 'undionly.kpxe', |
87 |
# DHO_DHCP_MESSAGE_TYPE() => DHCPACK(), |
# DHO_DHCP_MESSAGE_TYPE() => DHCPACK(), |
88 |
DHO_SUBNET_MASK() => '255.0.0.0', |
DHO_SUBNET_MASK() => '255.0.0.0', |
89 |
); |
); |
90 |
|
|
91 |
warn ">> $mac == $ip server $ip_server\n"; |
$_ip_file->{$ip} = $next_file; |
92 |
|
|
93 |
|
warn ">> $mac == $ip server $server_ip\n"; |
94 |
|
|
95 |
warn "## ",$packet->toString(),"\n" if $debug; |
warn "## ",$packet->toString(),"\n" if $debug; |
96 |
|
|
97 |
my $reply = IO::Socket::INET->new( |
my $reply = IO::Socket::INET->new( |
98 |
LocalAddr => $ip_server, |
LocalAddr => $server_ip, |
99 |
LocalPort => 67, |
LocalPort => 67, |
100 |
Proto => "udp", |
Proto => "udp", |
101 |
Broadcast => 1, |
Broadcast => 1, |