#!/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_v4 = $nms::config::pri_v4; my $pri_net = $nms::config::pri_net; my $sec_v4 = $nms::config::sec_v4; 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_v4, $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 $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; }