summaryrefslogtreecommitdiffstats
path: root/contrib/bootptodhcp/bootptodhcp.pl
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bootptodhcp/bootptodhcp.pl')
-rwxr-xr-xcontrib/bootptodhcp/bootptodhcp.pl42
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 = $_;
+}