#! /usr/bin/perl -w
use strict;

# les inn nettnavn
my %netnames = ();
my %netmasks = ();
my @nets = ();
open NAMES, "switches.txt"
	or die "switches.txt: $!";
while (<NAMES>) {
	chomp;
	/81\.162\.(\d+\.\d+)\s+(\d+)\s+(\S+)/ or next;
	$netmasks{$1} = $2;
	$netnames{$1} = $3;
	push @nets, $1;
}	

print <<"EOF";
# Autogenerated by make-dhcpd.pl. Do not edit manually!

option domain-name "tg05.gathering.org";
option domain-name-servers 81.162.254.2, 81.162.254.76;

ddns-update-style interim;

key DHCP_UPDATER {
        algorithm HMAC-MD5.SIG-ALG.REG.INT;
	secret removed;
}

default-lease-time 14400;
max-lease-time 28800;

# Servernett
subnet 81.162.254.0 netmask 255.255.255.192 {
}
subnet 81.162.254.64 netmask 255.255.255.192 {
}

zone 162.81.in-addr.arpa. {
	primary 127.0.0.1;
	key DHCP_UPDATER;
}

EOF

for my $net (@nets) {
	my $domain = $netnames{$net};

	my ($netmask, $numpc);
	if ($netmasks{$net} == 24) {
		$netmask = "255.255.255.0";
		$numpc = 256;
	} elsif ($netmasks{$net} == 25) {
		$netmask = "255.255.255.128";
		$numpc = 128;
	} elsif ($netmasks{$net} == 26) {
		$netmask = "255.255.255.192";
		$numpc = 64;
	} else {
		die "Unknown netmask /$netmasks{$net}";
	}

	$net =~ /(\d+)\.(\d+)/ or die "Unknown net $net";
	my ($majorsubnet,$minorsubnet) = ($1,$2);
	
	my $gw = "81.162.$majorsubnet." . ($minorsubnet + 1);
	my $rangestart = "81.162.$majorsubnet." . ($minorsubnet + 10);
	my $rangeend = "81.162.$majorsubnet." . ($minorsubnet + $numpc - 2);

	print <<"EOF";
zone $domain.tg05.gathering.org. {
	primary 127.0.0.1;
	key DHCP_UPDATER;
}
subnet 81.162.$net netmask $netmask {
	authoritative;
	range $rangestart $rangeend;
	option routers $gw;

	option domain-name "$domain.tg05.gathering.org";
	ddns-domainname "$domain.tg05.gathering.org";
	ignore client-updates;
EOF

	# hack for sesse =)
	if ($net eq '250.0') {
		print <<"EOF";
	host trofast {
		hardware ethernet 00:0e:0c:36:a7:66;
		filename "/pxelinux.0";
		next-server 81.162.254.89;
	}
EOF
	}
	
	print "}\n";
}
