#! /usr/bin/perl
open PATCHLIST, "<patchlist.txt"
	or die "patchlist.txt: $!";
my %vlans = ();
my %ports = ();

while (<PATCHLIST>) {
	chomp;
	my ($name, $distro, $port) = split / /;

	$name =~ /e(\d+)-(\d+)/;
	my ($row, $switch) = ($1, $2);

	my $ip;
	if ($switch == 1) {
		$ip = "87.76." . ($row) . ".1";
	} elsif ($switch == 2) {
		$ip = "87.76." . ($row) . ".65";
	} elsif ($switch == 3) {
		$ip = "87.76." . ($row) . ".129";
	} elsif ($switch == 4) {
		$ip = "87.76." . ($row + 1) . ".1";
	} elsif ($switch == 5) {
		$ip = "87.76." . ($row + 1) . ".65";
	} elsif ($switch == 6) {
		$ip = "87.76." . ($row + 1) . ".129";
	}

	my $vlan = "$row$switch";
	my $ipv6 = sprintf "F%02u%u", $row, $switch;

	$vlans{$distro} .= <<"EOF";
vlan $vlan
  name $name
!
EOF
 
	$ports{$distro} .= <<"EOF";
default interface vlan $vlan
interface vlan $vlan
  description $name
  ip address $ip 255.255.255.192
  ip directed-broadcast 101
  ip helper-address 87.76.254.2
  no ip proxy-arp
  ip access-group great-wall-of-tg in
  ipv6 address 2001:16D8:FFFF:${ipv6}::1/64
  ip igmp version 2
  ip pim sparse-mode
  no shutdown
  exit
!
default interface $port
interface $port
 description $name
 switchport mode access
 switchport access vlan $vlan

 spanning-tree portfast
 spanning-tree bpduguard enable

 storm-control broadcast level 2
 no shutdown
 exit
!
EOF
}

for my $distro (keys %vlans) {
	open DISTRO, ">$distro-config"
		or die "$distro-config: $!";
	print DISTRO <<"EOF";
access-list 101 remark ip directed broadcast
access-list 101 permit ip any any dscp cs7
EOF
	print DISTRO $vlans{$distro};
	print DISTRO $ports{$distro};
	print DISTRO "end\n";
	close DISTRO;
}
