##!/usr/bin/perl
if ($#ARGV + 1 != 1) {
	die("Error, append hostsfile\n");
}
$input = $ARGV[0];
$hostsfile = "/etc/hosts";
$dhcpfile = "/etc/dhcpd.conf";
print "Using Master File: $input\n";
parse();
dump_dhcp();
dump_hosts();
print `/etc/init.d/dhcp restart`;
print `/etc/init.d/dnsmasq restart`;

sub parse {
	open(INFILE, "$input") or die("Error: cannot open input file!\n");
	$count=0;
	while(<INFILE>) {
		$line = $_;
		chomp($line);
		if($line =~ /^#.*/) {
			next;
		}
		@terms = split(/[\s\t]+/, $line);
		$host[$count] = $terms[0];
		$mac[$count] = $terms[1];
		$ip[$count] = $terms[2];
		$doroute[$count] = $terms[3];
		$count++;
	}
	close(INFILE);
}

sub dump_dhcp {
	open(OUTFILE, ">$dhcpfile") or die("Error: cannot open $dhcpfile file!\n");
	print "Writing: $dhcpfile\n";
	print OUTFILE "default-lease-time 600;\n";
	print OUTFILE "max-lease-time 990000;\n";
	print OUTFILE "subnet 10.0.0.0 netmask 255.255.255.0 {\n";
	print OUTFILE "\trange 10.0.0.25 10.0.0.254;\n";
	print OUTFILE "\toption broadcast-address 10.0.0.255;\n";
	print OUTFILE "}\n";
	print OUTFILE "subnet 10.0.1.0 netmask 255.255.255.0 {\n";
	print OUTFILE "\trange 10.0.1.150 10.0.1.254;\n";
	print OUTFILE "\toption broadcast-address 10.0.1.255;\n";
	print OUTFILE "\toption domain-name-servers 10.0.1.1, 128.153.4.2, 128.153.128.2;\n";
	print OUTFILE "\toption domain-name \"sr.cs.clarkson.edu\";\n";
	for($x=0;$x<$count;$x++) {
		print OUTFILE "\thost $host[$x] {\n";
		print OUTFILE "\t\thardware ethernet $mac[$x];\n";
		print OUTFILE "\t\tfixed-address $ip[$x];\n";
		print OUTFILE "\t\toption host-name \"$host[$x]\";\n";
		if($doroute[$x] eq '1') {
			print OUTFILE "\t\toption routers 10.0.1.1;\n";
		}
		print OUTFILE "\t}\n";
	}
	print OUTFILE "}\n";
	close(OUTFILE);
}

sub dump_hosts {
	open(OUTFILE, ">$hostsfile") or die("Error: cannot open $hostsfile file!\n");
	print "Writing: $hostsfile\n";
	print OUTFILE "127.0.0.1\tlocalhost\n";
	print OUTFILE "10.0.0.1\trighteous.in.cs.clarkson.edu righteous.in.cs righteous.in\n";
	print OUTFILE "10.0.1.1\trighteous.sr.cs.clarkson.edu righteous.sr.cs righteous.sr\n";
	print OUTFILE "128.153.145.23\trighteous.cosi.clarkson.edu righteous.cosi righteous\n";
	for($x=0;$x<$count;$x++) {
		print OUTFILE "$ip[$x]\t$host[$x].sr.cs.clarkson.edu $host[$x].sr.cs $host[$x].sr $host[$x]\n";
	}
	print OUTFILE "# The following lines are desirable for IPv6 capable hosts\n";
	print OUTFILE "::1     ip6-localhost ip6-loopback\n";
	print OUTFILE "fe00::0 ip6-localnet\n";
	print OUTFILE "ff00::0 ip6-mcastprefix\n";
	print OUTFILE "ff02::1 ip6-allnodes\n";
	print OUTFILE "ff02::2 ip6-allrouters\n";
	print OUTFILE "ff02::3 ip6-allhosts\n";
	close(OUTFILE);
}
