service instance 20 ethernet
description Internal site
encapsulation dot1q 17
rewrite ingress tag pop 1 symmetric
xconnect 192.168.51.20 838969735 encapsulation mpls
mtu 9202
!
service instance 21 ethernet
description Client 1 important
encapsulation dot1q 18
rewrite ingress tag pop 1 symmetric
xconnect 192.168.51.21 838969736 encapsulation mpls
mtu 9202
!
service instance 22 ethernet
description Client other 2
encapsulation dot1q 22
rewrite ingress tag pop 1 symmetric
xconnect 192.168.56.22 838925386 encapsulation mpls
mtu 9202
!
service instance 23 ethernet
description Client name with fun stuff
encapsulation dot1q 3200 second-dot1q 5
rewrite ingress tag pop 2 symmetric
service-policy input CoS_222_333_23
xconnect 192.168.56.23 571125465 encapsulation mpls
mtu 9202
!
service instance 24 ethernet
description Client - not as important
encapsulation dot1q 3200 second-dot1q 6
rewrite ingress tag pop 2 symmetric
service-policy input 222_444_24
xconnect 192.168.56.24 571637077 encapsulation mpls
mtu 9202
####
set interfaces ge-1/1/1 unit 23 description "Client name with fun stuff"
set interfaces ge-1/1/1 unit 23 encapsulation vlan-ccc
set interfaces ge-1/1/1 unit 23 vlan-tags outer 3200 inner 5
set interfaces ge-1/1/1 unit 23 input-vlan-map pop-pop
set interfaces ge-1/1/1 unit 23 output-vlan-map push-push
COS:
set class-of-service interfaces ge-1/1/1 unit 23 rewrite-rules ieee-802.1 vlan-tag outer-and-inner
set protocols l2circuit neighbor 192.168.56.23 interface ge-1/1/1.23 description "Client name with fun stuff"
set protocols l2circuit neighbor 192.168.56.23 interface ge-1/1/1.23 control-word
set protocols l2circuit neighbor 192.168.56.23 interface ge-1/1/1.23 ignore-mtu-mismatch
set protocols l2circuit neighbor 192.168.56.23 interface ge-1/1/1.23 mtu 9202
set protocols l2circuit neighbor 192.168.56.23 interface ge-1/1/1.23 pseudowire-status-tlv
set protocols l2circuit neighbor 192.168.56.23 interface ge-1/1/1.23 encapsulation-type ethernet
set protocols l2circuit neighbor 192.168.56.23 interface ge-1/1/1.23 virtual-circuit-id 571125465
set interfaces ge-1/1/1 unit 24 description "Client - not as important"
set interfaces ge-1/1/1 unit 24 encapsulation vlan-ccc
set interfaces ge-1/1/1 unit 24 vlan-tags outer 3200 inner 6
set interfaces ge-1/1/1 unit 24 input-vlan-map pop-pop
set interfaces ge-1/1/1 unit 24 output-vlan-map push-push
COS: BIZDSLIP_HSIHYP_NOBP_96KBMG This should be on the unit 23. Instead, the filter for unit 23 is pushed to unit 24, and the filter for 24 is pushed to 25 etc.
set interfaces ge-1/1/1 unit 24 family ccc filter input BIZDSLIP_HSIHYP_NOBP_96KBMG
set class-of-service interfaces ge-1/1/1 unit 24 rewrite-rules ieee-802.1 vlan-tag outer-and-inner
##
##
#!/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);