#!/usr/bin/perl use warnings; use strict; my $interface = $ARGV[1]; my $intcisco = $ARGV[0]; my $intfc = $interface; $interface =~ s/\//\_/g; my $filename = "$intcisco.txt"; my $newfile = "$interface-tmp.txt"; my $line; my $desc = ""; my @splitunit = ""; my $unit = ""; my @splitxc = ""; my $neighbor = ""; my @splitvlan = ""; my $vlanida = ""; my $vlanidb = ""; my $pop; my $daf = 0; open(FH, '<', $filename) or die $!; open(NF, '>', $newfile) or die "$ARGV[1] does not exist.\n"; while () { $line = ; print "$line\n"; foreach my $line(){ my $vcid; my $tag; my @splittag; my $pop; my $xcon; my $cos; my @splitcos; ### Match Service instance, variable for unit ### if ($line =~ /service instance/s){ @splitunit = split(' ',$line); $unit = $splitunit[2]; #print "UNIT: $unit\n"; #debug } ### Match description, format it ### if ($line =~ /description/s){ $desc = $line; $desc =~ s/^\s+//; $desc =~ s/description/description "/g; $desc =~ s/description " /description "/g; $desc =~ s/\r/"/; #print "DESCRIPTION: $desc\n" #debug; } ### Match encapsulation for vlan/s ### if ($line =~ m/encapsulation dot1q/s){ @splitvlan = split(' ', $line); $vlanida = $splitvlan[2]; $vlanidb = $splitvlan[4]; } ### Match service-policy for Filter/CoS if ($line =~ /service-policy input/g){ @splitcos = split(' ', $line); $cos = $splitcos[2]; push(@cosarray,($cos)); #print "COS: $cos\n"; #debug # not perfect, I know, but it works now print NF "set interfaces $intfc unit $unit family ccc filter input @cosarray\n"; } ### Match on xconnect to split off neighbor/vcid ### if ($line =~ m/xconnect/s){ $xcon = $line; @splitxc = split(' ', $xcon); $neighbor = $splitxc[1]; $vcid = $splitxc[2]; } ### match on rewrite for tags ### if ($line =~ m/rewrite/s){ my $tag = $line; @splittag = split(' ', $tag); $pop = $splittag[4]; } ### match for bridge ### if ($line =~ /bridge/g) { @splitbridge = split(' ', $line); $bridge = @splitbridge[1]; push(@bridgevlans,($bridge)); print "@bridgevlans\n"; } ### Print to file after converting to Juniper ### if ($unit eq $bridge){ print NF "set interfaces $intfc unit $unit $desc\n"; print NF "set interfaces $intfc unit $unit vlan-id $vlanida\n"; print NF "set interfaces $intfc unit $unit encapsulation vlan-bridge\n"; #print NF "set interfaces $intfc unit $unit input-vlan-map pop\n"; #print NF "set interfaces $intfc unit $unit input-vlan-map push\n\n"; #print NF "set interfaces $intfc unit $unit mtu 9202\n"; print NF "set bridge-domains $unit interface $intfc.$unit\n"; print NF " \n"; } elsif ($pop eq "1") { print NF "set interfaces $intfc unit $unit $desc\n"; print NF "set interfaces $intfc unit $unit vlan-id $vlanida\n"; print NF "set interfaces $intfc unit $unit encapsulation vlan-ccc\n"; print NF "set interfaces $intfc unit $unit input-vlan-map pop\n"; print NF "set interfaces $intfc unit $unit output-vlan-map push\n\n"; #if (!length(@cosarray)) { #print NF "COS: @cosarray\n"; #debug #print NF "set interfaces $intfc unit $unit family ccc filter input @cosarray\n"; #} } elsif ($pop eq "2"){ print NF "set interfaces $intfc unit $unit $desc\n"; print NF "set interfaces $intfc unit $unit encapsulation vlan-ccc\n"; print NF "set interfaces $intfc unit $unit vlan-tags outer $vlanida inner $vlanidb\n"; print NF "set interfaces $intfc unit $unit input-vlan-map pop-pop\n"; print NF "set interfaces $intfc unit $unit output-vlan-map push-push\n\n"; #print NF "set class-of-service interfaces $intfc unit $unit classifiers ieee-802.1 BMG-COS-Classifer\n"; #print NF "set class-of-service interfaces $intfc unit $unit rewrite-rules ieee-802.1 BMG-COS-Rewrite\n"; #if (!length(@cosarray)) { #print NF "COS: @cosarray[0]\n"; #debug #print NF "set interfaces $intfc unit $unit family ccc filter input @cosarray\n"; # } } #print NF "set interfaces $intfc unit $unit family ccc mtu 9202\n"; if ($neighbor eq ''){} #todo elsif ($vcid eq '') {} #todo else { print NF "set protocols l2circuit neighbor $neighbor interface $intfc.$unit $desc\n"; print NF "set protocols l2circuit neighbor $neighbor interface $intfc.$unit control-word\n"; print NF "set protocols l2circuit neighbor $neighbor interface $intfc.$unit ignore-mtu-mismatch\n"; print NF "set protocols l2circuit neighbor $neighbor interface $intfc.$unit mtu 9202\n"; print NF "set protocols l2circuit neighbor $neighbor interface $intfc.$unit pseudowire-status-tlv\n"; print NF "set protocols l2circuit neighbor $neighbor interface $intfc.$unit encapsulation-type ethernet\n"; print NF "set protocols l2circuit neighbor $neighbor interface $intfc.$unit virtual-circuit-id $vcid\n\n"; } if (($pop eq "1") && ($unit !~ /^(51|86|3201|3551|3552|3900|3901|3902|3903|3905|3910|3911|3917|3918|3928|3929|3950|3951)$/)){ print NF "set class-of-service interfaces $intfc unit $unit classifiers ieee-802.1 CL-OPM-COS\n"; print NF "set class-of-service interfaces $intfc unit $unit rewrite-rules ieee-802.1 RR-OPM-COS\n"; print NF "\n"; } if (($pop eq "2") && ($unit !~ /^(51|86|3201|3551|3552|3900|3901|3902|3903|3905|3910|3911|3917|3918|3928|3929|3950|3951)$/)){ print NF "set class-of-service interfaces $intfc unit $unit rewrite-rules ieee-802.1 vlan-tag outer-and-inner\n"; print NF "\n"; } if ($daf <= 0) { print NF "set protocols oam ethernet link-fault-management interface $intfc pdu-interval 1000\n"; print NF "set protocols oam ethernet link-fault-management interface $intfc loopback-tracking\n"; print NF "set protocols oam ethernet link-fault-management interface $intfc link-discovery active\n"; print NF "set protocols oam ethernet link-fault-management interface $intfc pdu-threshold 3\n"; print NF "set class-of-service interfaces $intfc scheduler-map PORTBASED-EGRESS-SCHEDULERMAP-1GE\n"; print NF "set class-of-service interfaces $intfc unit * classifiers ieee-802.1 COS-Classifier\n"; print NF "set class-of-service interfaces $intfc unit * rewrite-rules ieee-802.1 COS-Rewrite\n"; print NF "\n"; $daf++; } } } while(); close(FH); close(NF);