]> git.sesse.net Git - nms/blob - config/make-dhcpd.pl
Add a small range to the server net.
[nms] / config / make-dhcpd.pl
1 #! /usr/bin/perl -w
2 use strict;
3
4 my $date = `date --rfc-2822`;
5 chomp $date;
6
7 my @nets = ();
8 open NAMES, "switches.txt"
9         or die "switches.txt: $!";
10 while (<NAMES>) {
11         chomp;
12         /87\.76\.(\d+\.\d+)\s+(\d+)\s+(\S+)/ or next;
13         push @nets, {
14                 net => $1,
15                 netmask => $2,
16                 name => $3
17         };
18 }       
19
20 print <<"EOF";
21 # Autogenerated by make-dhcpd.pl at $date. Do not edit manually!
22
23 option domain-name "tg07.gathering.org";
24 option domain-name-servers 87.76.254.2, 87.76.255.2;
25
26 # Netboot FTW
27 next-server 87.76.255.18;
28 filename "/pxelinux.0";
29
30 ddns-update-style interim;
31 omapi-port 7911;
32
33 # dnssec-keygen -a HMAC-MD5 -b 128 -n HOST DHCP_UPDATER
34 key DHCP_UPDATER {
35         algorithm HMAC-MD5.SIG-ALG.REG.INT;
36         secret F388UOhaIIKHRH9TDE5PTA==;
37 }
38
39 default-lease-time 14400;
40 max-lease-time 28800;
41
42 # Tele-nett
43 subnet 87.76.254.0 netmask 255.255.255.0 {
44 }
45
46 # Server-nett
47 subnet 87.76.255.0 netmask 255.255.255.0 {
48         range 87.76.255.240 87.76.255.254;
49 }
50
51 zone 76.87.in-addr.arpa. {
52         primary 127.0.0.1;
53         key DHCP_UPDATER;
54 }
55
56 EOF
57
58 for my $net (@nets) {
59         my $domain = $net->{name};
60
61         my ($netmask, $numpc);
62         if ($net->{netmask} == 24) {
63                 $netmask = "255.255.255.0";
64                 $numpc = 256;
65         } elsif ($net->{netmask} == 25) {
66                 $netmask = "255.255.255.128";
67                 $numpc = 128;
68         } elsif ($net->{netmask} == 26) {
69                 $netmask = "255.255.255.192";
70                 $numpc = 64;
71         } else {
72                 die "Unknown netmask /" . $net->{netmask};
73         }
74
75         $net->{net} =~ /(\d+)\.(\d+)/ or die "Unknown net $net";
76         my ($majorsubnet,$minorsubnet) = ($1,$2);
77
78         # FIXME: Should use Net::CIDR
79         my $gw = "87.76.$majorsubnet." . ($minorsubnet + 1);
80         my $rangestart = "87.76.$majorsubnet." . ($minorsubnet + 10);
81         my $rangeend = "87.76.$majorsubnet." . ($minorsubnet + $numpc - 2);
82
83         print <<"EOF";
84 zone $domain.tg07.gathering.org. {
85         primary 127.0.0.1;
86         key DHCP_UPDATER;
87 }
88 subnet 87.76.$net->{net} netmask $netmask {
89         authoritative;
90         option routers $gw;
91
92         range $rangestart $rangeend;
93         option domain-name "$domain.tg07.gathering.org";
94         ddns-domainname "$domain.tg07.gathering.org";
95         ignore client-updates;
96 }
97 EOF
98 }
99