use Net::DHCP::Packet;
use Net::DHCP::Constants 0.67;
-use CouchDB;
+use store;
use format;
use server;
} else {
$ip = $request_ip;
client::save_ip_mac( $ip, $mac );
- warn "W: $ip our of server range $server::ip $server::netmask\n";
+ warn "W: $ip out of server range $server::ip/$server::netmask\n";
}
return $ip;
config::for_ip( $ip );
+ my $server = server::as_hash_for $ip;
+
my $packet = {
Op => BOOTREPLY(),
Hops => $dhcp->hops(),
Flags => $dhcp->flags(),
Ciaddr => $dhcp->ciaddr(),
Yiaddr => $ip,
- Siaddr => $server::ip,
+ Siaddr => $server->{ip},
Giaddr => $dhcp->giaddr(),
Chaddr => $dhcp->chaddr(),
File => $file,
- DHO_DHCP_SERVER_IDENTIFIER() => $server::ip, # busybox/udhcpc needs it but doesn't request
+ 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,
- DHO_NAME_SERVERS() => $server::ip,
- DHO_DOMAIN_NAME_SERVERS() => $server::ip,
+ DHO_SUBNET_MASK() => $server->{netmask},
+ DHO_ROUTERS() => ( $server->{gw} || $server->{ip} ),
+ DHO_DOMAIN_NAME() => $server->{domain},
+ DHO_NAME_SERVERS() => $server->{ip},
+ DHO_DOMAIN_NAME_SERVERS() => ( $server->{dns} || $server->{ip} ),
DHO_HOST_NAME() => client::conf( $ip, 'hostname' ),
- DHO_BROADCAST_ADDRESS() => $server::bcast,
+ DHO_BROADCAST_ADDRESS() => $server->{bcast},
# DHO_NTP_SERVERS() => '',
};
my $buff = $packet->serialize();
my $reply = IO::Socket::INET->new(
- LocalAddr => $server::ip,
+ LocalAddr => $server->{ip},
LocalPort => 67,
Proto => "udp",
Broadcast => 1,
# PeerAddr => '255.255.255.255',
- PeerAddr => $server::bcast,
+ PeerAddr => $server->{bcast},
PeerPort => 68,
Reuse => 1,
) or die "socket: $@";
$reply->send( $buff, 0 ) or die "Error sending: $!\n";
- warn ">> $mac == $ip server: $server::ip", $file ? " file: $file\n" : "\n";
+ warn ">> $mac == $ip server: $server->{ip}", $file ? " file: $file\n" : "\n";
} else {
- $audit->{error} = "$ip our of our range $server::ip $server::netmask";
+ $audit->{error} = "$ip not in server range $server::ip $server::netmask - no packet sent";
warn $audit->{error};
}
- CouchDB::audit( @type, $audit );
+ store::audit( @type, $audit );
# system("arp -s $ip $mac"),
print "DHCP listen on ",$sock->sockhost,":",$sock->sockport,"\n";
- CouchDB::audit( 'start', { addr => $sock->sockhost, port => $sock->sockport } );
+ store::audit( 'start', { addr => $sock->sockhost, port => $sock->sockport } );
while (1) {
server->refresh;