# HG changeset patch # User "Tomas Zeman " # Date 1257347792 -3600 # Node ID 7b9f165f3a450e86f7ef7d2e51bb56a00a08fe77 # Parent 7e38ef20071fd7f8ce0a7d90d54a03f38a0d4623 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service diff -r 7e38ef20071f -r 7b9f165f3a45 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; + } + } +