diff options
Diffstat (limited to 'tools/make-dhcpd.pl')
-rwxr-xr-x | tools/make-dhcpd.pl | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/tools/make-dhcpd.pl b/tools/make-dhcpd.pl new file mode 100755 index 0000000..2cf388a --- /dev/null +++ b/tools/make-dhcpd.pl @@ -0,0 +1,104 @@ +#!/usr/bin/perl -I /root/tgmanage +use strict; + +use Net::IP; +use Net::IP qw(:PROC); + +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 $dhcp_pxeconf = $dhcpd_base . "pxe-boot.conf"; +my $dhcp_ciscoapconf = $dhcpd_base . "ciscowlc.conf"; + +my $tgname = $nms::config::tgname; +my $pri_ptr = $nms::config::pri_ptr; +my $pri_net = $nms::config::pri_net; +my $sec_ptr = $nms::config::sec_ptr; +my $pxe_server = $nms::config::pxe_server; +my $ddns_key = $nms::config::ddns_key; +my $ciscowlc_a = $nms::config::ciscowlc_a; + +my $range = new Net::IP( $pri_net ) or die ("oopxos"); +my $mask = $range->mask(); +my ($net, undef) = split "/", $pri_net; + + +# 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 "$tgname.gathering.org"; +option domain-name-servers $pri_ptr, $sec_ptr; +default-lease-time 3600; +max-lease-time 7200; +authoritative; + +ddns-update-style interim; +key DHCP_UPDATER { + algorithm HMAC-MD5.SIG-ALG.REG.INT; + secret $ddns_key; +} + +subnet $net netmask $mask {} + +include "/etc/dhcp/revzones.conf"; +include "/etc/dhcp/generated-include.conf"; +include "/etc/dhcp/pxe-boot.conf"; +include "/etc/dhcp/ciscowlc.conf"; + +EOF + close DHCPDFILE; +} + +# Create PXE-boot configuration file for DHCP on master. +if ( not -f $dhcp_pxeconf ) +{ + print STDERR "Creating file " . $dhcp_pxeconf . "\n"; + open PXEFILE, ">" . $dhcp_pxeconf or die ( $! . " " . $dhcp_pxeconf); + + print PXEFILE "next-server " . $pxe_server . ";\n"; + print PXEFILE "filename \"pxelinux.0\";\n"; + + close PXEFILE; +} + + +# Create PXE-boot configuration file for DHCP on master. +if ( not -f $dhcp_ciscoapconf ) +{ + print STDERR "Creating file " . $dhcp_ciscoapconf . "\n"; + open CISCOFILE, ">" . $dhcp_ciscoapconf or die ( $! . " " . $dhcp_pxeconf); + + print CISCOFILE <<"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 $ciscowlc_a; +} +EOF + close CISCOFILE; +} + |