Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
author"Tomas Zeman <tzeman@volny.cz>"
Wed, 04 Nov 2009 16:16:32 +0100
changeset 2 7b9f165f3a45
parent 1 7e38ef20071f
child 3 23467e5d2602
Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
ciena.grammar
--- a/ciena.grammar	Sun Nov 01 23:33:46 2009 +0100
+++ b/ciena.grammar	Wed Nov 04 16:16:32 2009 +0100
@@ -16,7 +16,15 @@
 	'bridge-mac' => {},
 };
 $::res->{'pbt-service'} = {};
+$::res->{'pbt-transit'} = {};
 $::res->{'pbt-tunnel-group'} = {};
+$::res->{'pbt-tunnel'} = {};
+$::res->{'tunnel'} = {};
+$::res->{'tunnel-pair'} = {};
+$::res->{'cfm-service'} = {};
+$::res->{vc} = {};
+$::res->{vs} = {};
+$::res->{"vs-vlans"} = {};
 
 
 # local (current line) attribute-value-list, ie. property value
@@ -65,6 +73,11 @@
 		| l_sub_port
 		| l_pm
 		| l_pbt
+		| l_tunnel_pair
+		| l_tunnel
+		| l_cfm_service
+		| l_vc
+		| l_vs
 		| word(s) eol
 
 word:		/[0-9a-zA-Z:\/_\#\"\.,-]+/
@@ -143,3 +156,103 @@
 		{ consume_avl("pbt-service", $item{identifier}) }
 		| "pbt" "tunnel-group" "create" "group" identifier avls
 		{ consume_avl("pbt-tunnel-group", $item{identifier}) }
+		| "pbt" "transit" /\w+/ "pbt-transit" identifier avls
+		{ consume_avl("pbt-transit", $item{identifier}) }
+		| "pbt" /encap|decap/"-tunnel" /\w+/ /\S+/ identifier avls
+		{
+		$::res->{"pbt-tunnel"}->{$item{identifier}}->{type} = $item[2];
+		consume_avl("pbt-tunnel", $item{identifier})
+		}
+
+# Tunnel pair
+l_tunnel_pair:	"tunnel" "pair" "create" "tnl-pair" identifier avls
+		{ consume_avl("tunnel-pair", $item{identifier}) }
+
+# Tunnel
+l_tunnel:	"tunnel" /encap|decap/ "create" /\S+/ identifier avls
+		{
+		$::res->{tunnel}->{$item{identifier}} = {
+			"tunnel-type" => $item[2],
+			"pbt-type" => $item[4],
+		};
+		consume_avl("tunnel", $item{identifier})
+		}
+
+# CFM
+l_cfm_service:	"cfm" "service" "create" identifier identifier "name" identifier avls
+		{
+		my ($pbt_type, $pbt, $cfm) = ($item[4], $item[5], $item[7]);
+		$::res->{"cfm-service"}->{$cfm} = {
+			"pbt-type" => $pbt_type,
+			"pbt" => $pbt,
+		};
+		consume_avl("cfm-service", $cfm);
+		}
+		| "cfm" "service" "set" "service" identifier avls
+		{ consume_avl("cfm-service", $item{identifier}) }
+		| "cfm" "service" "enable" "service" identifier
+		{ $::res->{"cfm-service"}->{$item{identifier}}->{enabled} = 1; }
+
+# Virtual circuit
+l_vc:		"virtual-circuit" "pbt" "create" identifier identifier avls
+		{
+		my ($vc_type, $vc) = ($item[4], $item[5]);
+		$::res->{vc}->{$vc}->{type} = $vc_type;
+		consume_avl("vc", $vc);
+		}
+
+# Virtual switch
+l_vs:		"virtual-switch" "create" "vs" identifier
+		{ $::res->{vs}->{$item{identifier}} = {}; }
+		| "virtual-switch" "ethernet" "create" "vs" identifier "vc" identifier
+		{
+		my ($vs, $vc) = ($item[5], $item[7]);
+		$::res->{vs}->{$vs}->{ethernet}->{vc} = $vc;
+		}
+		| "virtual-switch" "ethernet" "add" "vs" identifier avls
+		{
+		my $vs = $item{identifier};
+		$::res->{vs}->{$vs}->{ethernet}->{members} = []
+			unless exists $::res->{vs}->{$vs}->{ethernet}->{members};
+		my %params = %$avl;
+		push @{$::res->{vs}->{$vs}->{ethernet}->{members}}, \%params;
+		$avl = {};
+		}
+		| "virtual-switch" "interface" "attach" /(\w|-)+/ identifier "vs" identifier
+		{
+		my ($entity_type, $entity, $vs) = ($item[4], $item[5], $item[7]);
+		$::res->{vs}->{$vs}->{interfaces} = []
+			unless exists $::res->{vs}->{$vs}->{interfaces};
+		push @{$::res->{vs}->{$vs}->{interfaces}}, {
+			entity => $entity,
+			type => $entity_type,
+		};
+		}
+		| "virtual-switch" "l2-cft" "protocol" "add" "vs" identifier avls
+		{
+		my $vs = $item{identifier};
+		$::res->{vs}->{$vs}->{"l2-cft"}->{protocols} = []
+			unless exists $::res->{vs}->{$vs}->{"l2-cft"}->{protocols};
+		my %params = %$avl;
+		push @{$::res->{vs}->{$vs}->{"l2-cft"}->{protocols}}, \%params;
+		$avl = {};
+		}
+		| "virtual-switch" "l2-cft" "enable" "vs" identifier
+		{ $::res->{vs}->{$item{identifier}}->{"l2-cft"}->{enabled} = 1 }
+		| "virtual-switch" "private-forwarding-groups" "enable" "vs" identifier
+		{ $::res->{vs}->{$item{identifier}}->{"priv-fwd-grp"}->{enabled} = 1 }
+		| "virtual-switch" "private-forwarding-groups" "set" "vs" identifier avls
+		{
+		my $vs = $item{identifier};
+		my %params = %$avl;
+		$::res->{vs}->{$vs}->{"priv-fwd-grp"} = \%params;
+		$avl = {};
+		}
+		| "virtual-switch" "add" "reserved-vlan" /\d+/"-"/\d+/
+		{
+		my ($from, $to) = ($item[4], $item[6]);
+		for (my $i = $from; $i <= $to; $i++) {
+			$::res->{"vs-vlans"}->{$i} = 1;
+		}
+		}
+