57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| {
 | |
|     # Make sure that dhcpd service is sanely set up, using
 | |
|     # legacy values if they are available
 | |
|     my $dhcpd = $DB->get('dhcpd');
 | |
|     my $status = 'enabled';
 | |
|     my $old = $DB->get('DHCPServer');
 | |
|     if (defined $old)
 | |
|     {
 | |
| 	$status =  $old->value;
 | |
| 	$old->delete;
 | |
|     }
 | |
|     # Define the dhcpd service unless it is already 
 | |
|     # defined. Make it enabled, unless $DHCPServer
 | |
|     # told us otherwise.
 | |
|     $dhcpd ||= $DB->new_record('dhcpd', {
 | |
| 				type => 'service',
 | |
| 				status => $status,
 | |
| 			    });
 | |
|     my $oldstart = '0.0.0.65';
 | |
|     $old = $DB->get('DHCPServerStart');
 | |
|     if (defined $old)
 | |
|     {
 | |
| 	$oldstart =  $old->value;
 | |
| 	$old->delete;
 | |
|     }
 | |
|     my $oldend = '0.0.0.250';
 | |
|     $old = $DB->get('DHCPServerEnd');
 | |
|     if (defined $old)
 | |
|     {
 | |
| 	$oldend =  $old->value;
 | |
| 	$old->delete;
 | |
|     }
 | |
|     my $start =  $dhcpd->prop('start') || $oldstart;
 | |
|     my $end = $dhcpd->prop('end') || $oldend;
 | |
| 
 | |
|     $start =  esmith::util::IPquadToAddr($start);
 | |
|     $end =  esmith::util::IPquadToAddr($end);
 | |
|     my $netmask = esmith::util::IPquadToAddr($LocalNetmask);
 | |
|     my $localnet = esmith::util::IPquadToAddr($LocalIP) & $netmask;
 | |
| 
 | |
|     # AND-out the host bits from the start and end ips.
 | |
|     # And, OR our local network with our start and end host values.
 | |
|     $start = $localnet | ($start & ~$netmask);
 | |
|     $end = $localnet | ($end & ~$netmask);
 | |
| 
 | |
|     # Make sure that $start is less than $end (might not be if netmask has changed
 | |
|     if ($start > $end)
 | |
|     {
 | |
| 	my $temp = $start;
 | |
| 	$start = $end;
 | |
| 	$end = $temp;
 | |
|     }
 | |
|     # Now save new values
 | |
|     $dhcpd->merge_props(start => esmith::util::IPaddrToQuad($start),
 | |
| 			end => esmith::util::IPaddrToQuad($end));
 | |
| }
 |