use log;
use config;
use pxelinux;
+use client;
our $file;
our $transaction = 0; # FIXME predictible transaction numbers
Giaddr => $dhcp->giaddr(),
Chaddr => $dhcp->chaddr(),
File => $file,
+ DHO_DHCP_SERVER_IDENTIFIER() => $server::ip, # busybox/udhcpc needs it but doesn't request
};
+ my $options = {
+ DHO_SUBNET_MASK() => $server::netmask,
+ DHO_ROUTERS() => $server::ip,
+ DHO_DOMAIN_NAME() => $server::domain_name,
+ DHO_NAME_SERVERS() => $server::ip,
+ DHO_DOMAIN_NAME_SERVERS() => $server::ip,
+ DHO_HOST_NAME() => client::conf( $ip, 'hostname' ),
+ DHO_BROADCAST_ADDRESS() => $server::bcast,
+# DHO_NTP_SERVERS() => '',
+ };
+
+ my @requested = split(/\s/, $dhcp->getOptionValue(DHO_DHCP_PARAMETER_REQUEST_LIST));
+ warn "options ",dump( $options ), ' requested: ',dump( @requested );
+ foreach ( @requested ) {
+ $packet->{$_} = $options->{$_} if defined $options->{$_};
+ }
+
foreach my $opt ( 'magic', 'config_file', 'path_prefix', 'reboot_time' ) {
my $DH0 = eval 'DHO_PXELINUX_' . uc $opt;
warn "DH0: $@" if $@;
if ( $ip eq $requested_ip ) {
$packet->{DHO_DHCP_MESSAGE_TYPE()} = DHCPACK();
$packet->{DHO_DHCP_LEASE_TIME()} = 5 * 60; # 5 min
-# $packet->{DHO_DHCP_SERVER_IDENTIFIER()} = $server::ip; # FIXME
- $packet->{DHO_SUBNET_MASK()} = '255.255.255.0';
- $packet->{DHO_ROUTERS()} = $server::ip;
- $packet->{DHO_DOMAIN_NAME()} = 'pxelator.lan';
- $packet->{DHO_NAME_SERVERS()} = $server::ip;
# $packet->{DHO_ROOT_PATH()} = '/exports/foobar';
} else {
$packet->{DHO_DHCP_MESSAGE_TYPE()} = DHCPNAK();
log::mac $mac, "$messagetype igored (bootp?)";
}
- warn ">> $mac == $ip server: $server::ip", $file ? " file: $file\n" : "\n" if $debug;
+ warn "packet ",dump( $packet );
-warn "## created packet ", dump( $packet );
+ warn ">> $mac == $ip server: $server::ip", $file ? " file: $file\n" : "\n" if $debug;
$packet = new Net::DHCP::Packet( %$packet );
warn "send ",$packet->toString() if $debug;