aboutsummaryrefslogtreecommitdiffstats
path: root/bootstrap/make-dhcpd.pl
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap/make-dhcpd.pl')
-rwxr-xr-xbootstrap/make-dhcpd.pl101
1 files changed, 101 insertions, 0 deletions
diff --git a/bootstrap/make-dhcpd.pl b/bootstrap/make-dhcpd.pl
new file mode 100755
index 0000000..d734c1d
--- /dev/null
+++ b/bootstrap/make-dhcpd.pl
@@ -0,0 +1,101 @@
+#!/usr/bin/perl -I /root/tgmanage
+use strict;
+
+use Net::IP;
+
+BEGIN {
+ require "include/config.pm";
+ eval {
+ require "include/config.local.pm";
+ };
+}
+
+my $base = "/etc";
+$base = $ARGV[0] if $#ARGV > -1;
+$base .= "/" if not $base =~ m/\/$/ and not $base eq "";
+
+my $dhcpd_base = $base . "dhcp/";
+my $dhcpd_conf = $dhcpd_base . "dhcpd.conf";
+my $dhcpd_pxeconf = $dhcpd_base . "pxe-boot.conf";
+my $dhcpd_wlc_conf= $dhcpd_base . "wlc-conf.conf";
+
+# primary
+my $pri_range = Net::IP->new($nms::config::pri_net) or die ("oopxos");
+my $pri_mask = $pri_range->mask();
+my $pri_net = $pri_range->ip();
+
+# secondary
+my $sec_range = Net::IP->new($nms::config::sec_net) or die ("oopxos");
+my $sec_mask = $sec_range->mask();
+my $sec_net = $sec_range->ip();
+
+# Create PXE-boot configuration file for DHCP on master.
+if ( not -f $dhcpd_conf )
+{
+ print STDERR "Creating file " . $dhcpd_conf . "\n";
+ open DHCPDFILE, ">" . $dhcpd_conf or die ( $! . " " . $dhcpd_conf);
+
+ print DHCPDFILE <<"EOF";
+# GENERATED BY make-dhcpd.pl
+#
+# Central concept: as little config in the main .conf,
+# include almost everything from separate files..
+#
+# log-facility local7;
+option domain-name "$nms::config::tgname.gathering.org";
+option domain-name-servers $nms::config::pri_v4, $nms::config::sec_v4;
+default-lease-time 3600;
+max-lease-time 7200;
+authoritative;
+
+ddns-update-style interim;
+key DHCP_UPDATER {
+ algorithm HMAC-MD5.SIG-ALG.REG.INT;
+ secret $nms::config::ddns_key;
+}
+
+subnet $pri_net netmask $pri_mask {}
+subnet $sec_net netmask $sec_mask {}
+
+include "/etc/dhcp/revzones.conf";
+include "/etc/dhcp/generated-include.conf";
+include "$dhcpd_pxeconf";
+include "$dhcpd_wlc_conf";
+
+EOF
+ close DHCPDFILE;
+}
+
+# Create PXE-boot configuration file for DHCP on master.
+if ( not -f $dhcpd_pxeconf )
+{
+ print STDERR "Creating file " . $dhcpd_pxeconf . "\n";
+ open PXEFILE, ">" . $dhcpd_pxeconf or die ( $! . " " . $dhcpd_pxeconf);
+
+ print PXEFILE "next-server " . $nms::config::pxe_server . ";\n";
+ print PXEFILE "filename \"pxelinux.0\";\n";
+
+ close PXEFILE;
+}
+
+
+# Create WLC configuration file
+if ( not -f $dhcpd_wlc_conf )
+{
+ print STDERR "Creating file " . $dhcpd_wlc_conf . "\n";
+ open WLCFILE, ">" . $dhcpd_wlc_conf or die ( $! . " " . $dhcpd_wlc_conf);
+
+ print WLCFILE <<"EOF";
+option space CiscoAP;
+option CiscoAP.server-address code 241 = array of ip-address;
+set vendor-string = option vendor-class-identifier;
+
+class "cisco-aps" {
+ match if substring (option vendor-class-identifier, 0, 8) = "Cisco AP";
+ vendor-option-space CiscoAP;
+ option CiscoAP.server-address $nms::config::wlc1;
+}
+EOF
+ close WLCFILE;
+}
+