Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
--- 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;
+ }
+ }
+