42 |
sub client_mac_ip { |
sub client_mac_ip { |
43 |
my ( $mac, $request_ip ) = @_; |
my ( $mac, $request_ip ) = @_; |
44 |
|
|
45 |
|
if ( ! $mac ) { |
46 |
|
warn "W: no mac in requiest\n"; |
47 |
|
return; |
48 |
|
} |
49 |
|
|
50 |
my $conf = $server::conf; |
my $conf = $server::conf; |
51 |
mkdir $conf unless -e $conf; |
mkdir $conf unless -e $conf; |
52 |
|
|
54 |
|
|
55 |
if ( $ip = client::ip_from_mac( $mac ) ) { |
if ( $ip = client::ip_from_mac( $mac ) ) { |
56 |
print "RENEW $mac $ip\n"; |
print "RENEW $mac $ip\n"; |
57 |
|
client::save_ip_mac( $ip, $mac ); |
58 |
return $ip; |
return $ip; |
59 |
} elsif ( in_our_range( $request_ip ) ) { |
} elsif ( in_our_range( $request_ip ) ) { |
60 |
$ip = client::next_ip( $mac ); |
$ip = client::next_ip( $mac ); |
101 |
return unless $buf; |
return unless $buf; |
102 |
|
|
103 |
my $dhcp = Net::DHCP::Packet->new($buf); |
my $dhcp = Net::DHCP::Packet->new($buf); |
|
$dhcp->comment( $transaction++ ); |
|
104 |
|
|
105 |
warn "recv: ", $dhcp->toString if $debug; |
warn "recv: ", $dhcp->toString if $debug; |
106 |
|
|
107 |
my $mac = substr($dhcp->chaddr(),0,$dhcp->hlen()*2); |
$dhcp->comment( $transaction++ ); |
108 |
|
|
109 |
|
my $mac = format::mac( substr($dhcp->chaddr(),0,$dhcp->hlen()*2) ); |
110 |
my $ip = client_mac_ip($mac, $dhcp->ciaddr); |
my $ip = client_mac_ip($mac, $dhcp->ciaddr); |
111 |
|
|
112 |
my $hostname = $dhcp->getOptionValue(DHO_HOST_NAME); |
my $hostname = $dhcp->getOptionValue(DHO_HOST_NAME); |
113 |
print "$ip ", client::conf( $ip => 'hostname', default => $hostname ), " >> /etc/hosts\n"; |
print "$ip ", client::conf( $ip => 'hostname', default => $hostname ), " >> /etc/hosts\n" if $hostname; |
114 |
|
|
115 |
my $audit = { mac => format::mac($mac), ip => $ip, hostname => $hostname }; |
my $audit = { mac => $mac, ip => $ip, hostname => $hostname, |
116 |
|
options => { |
117 |
|
map { |
118 |
|
( $_ => $dhcp->getOptionValue( $_ ) ) |
119 |
|
} @{ $dhcp->{options_order} } |
120 |
|
}, |
121 |
|
}; |
122 |
|
|
123 |
=for later |
=for later |
124 |
|
|