diff options
Diffstat (limited to 'contrib/bootptodhcp/bootptodhcp.pl')
-rwxr-xr-x | contrib/bootptodhcp/bootptodhcp.pl | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/contrib/bootptodhcp/bootptodhcp.pl b/contrib/bootptodhcp/bootptodhcp.pl new file mode 100755 index 00000000..c8d6465a --- /dev/null +++ b/contrib/bootptodhcp/bootptodhcp.pl @@ -0,0 +1,42 @@ +#!/usr/bin/perl -w +# +# Quick hack to convert /etc/bootptab to format required by ISC DHCPD +# This only outputs the fixed hosts portion of the config file +# You still have to provide the global options and the subnet scoping +# +# Turn $useipaddr on if you prefer to use IP addresses in the config file +# I run DNS so I prefer domain names +$useipaddr = 0; +# This will be appended to get the FQDN unless the hostname is already FQDN +$domainname = "ken.com.au"; +$tftpdir = "/tftpdir/"; +open(B, "/etc/bootptab") or die "/etc/bootptab: $!\n"; +while(<B>) { + if (/^[^a-z]/) { + $prevline = $_; + next; + } + chomp($_); + ($hostname, @tags) = split(/:/, $_, 5); + ($fqdn = $hostname) .= ".$domainname" unless($hostname =~ /\./); + ($macaddr) = grep(/^ha=/, @tags); + $macaddr =~ s/ha=//; + $macaddr =~ s/(..)(..)(..)(..)(..)(..)/$1:$2:$3:$4:$5:$6/g; + ($ipaddr) = grep(/^ip=/, @tags); + $ipaddr =~ s/ip=//; + ($bootfile) = grep(/^bf=/, @tags); + $bootfile =~ s/bf=//; + $bootfile = $tftpdir . $bootfile; +# I have a comment line above most entries and I like to carry this over + print $prevline if ($prevline =~ /^#/); + $address = $useipaddr ? $ipaddr : $fqdn; + print <<EOF + host $hostname { + hardware ethernet $macaddr; + fixed-address $address; + filename "$bootfile"; + } +EOF +; + $prevline = $_; +} |