ciena.grammar
author "Tomas Zeman <tzeman@volny.cz>"
Sun, 12 Dec 2010 21:47:23 +0100
changeset 33 91e312481f54
parent 28 3337257bf0e7
permissions -rw-r--r--
ciena.grammar: allow & and * in value/quoted strings, accept port number to be a word
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     1
# Grammar for Ciena devices
24
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
     2
#
28
3337257bf0e7 ciena.grammar: handle vlan-untagged-data for sub-port
"Tomas Zeman <tzeman@volny.cz>"
parents: 27
diff changeset
     3
# Copyright (c) 2009, 2010 Tomas Zeman <tzeman@volny.cz>
24
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
     4
# All rights reserved.
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
     5
#
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
     6
# Redistribution and use in source and binary forms, with or without
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
     7
# modification, are permitted providing that the following conditions 
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
     8
# are met:
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
     9
# 1. Redistributions of source code must retain the above copyright
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    10
#    notice, this list of conditions and the following disclaimer.
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    11
# 2. Redistributions in binary form must reproduce the above copyright
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    12
#    notice, this list of conditions and the following disclaimer in the
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    13
#    documentation and/or other materials provided with the distribution.
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    14
#
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    15
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    16
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    17
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    18
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    19
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    20
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    21
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    22
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    23
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    24
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    25
# POSSIBILITY OF SUCH DAMAGE.
d6c31cf412a7 grammars: (c) notice, bsd license
"Tomas Zeman <tzeman@volny.cz>"
parents: 8
diff changeset
    26
#
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    27
{ # perl code follows
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    28
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    29
$::res = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    30
$::res->{port} ={};
8
7d6516dd0b3e ciena.grammar: sub-port typo, made pbt remote-bridge more lenient
"Tomas Zeman <tzeman@volny.cz>"
parents: 7
diff changeset
    31
$::res->{"sub-port"} ={};
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    32
$::res->{pm} = {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    33
	instance => {},
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    34
	service => {},
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    35
	'sub-port' => {},
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    36
};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    37
$::res->{pbt} = {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    38
	reserved => {},	# reserved bvids
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    39
	'bridge-mac' => {},
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    40
};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    41
$::res->{'pbt-service'} = {};
2
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
    42
$::res->{'pbt-transit'} = {};
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    43
$::res->{'pbt-tunnel-group'} = {};
2
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
    44
$::res->{'pbt-tunnel'} = {};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
    45
$::res->{'tunnel'} = {};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
    46
$::res->{'tunnel-pair'} = {};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
    47
$::res->{'cfm-service'} = {};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
    48
$::res->{vc} = {};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
    49
$::res->{vs} = {};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
    50
$::res->{"vs-vlans"} = {};
3
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
    51
$::res->{vlans} = {};
27
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
    52
$::res->{interface} = {};
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    53
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    54
# local (current line) attribute-value-list, ie. property value
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    55
my $avl = {};
3
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
    56
my $vlan_range = {};
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    57
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    58
# Consumes attribute value list.
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    59
# @param type Type (port/sub_port/etc).
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    60
# @param id Identifier, eg. port number.
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    61
sub consume_avl {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    62
	my ($type, $id) = (@_);
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    63
	$::res->{$type}->{$id} = {} unless exists $::res->{$type}->{$id};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    64
	foreach my $k (keys %$avl) {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    65
		$::res->{$type}->{$id}->{$k} = $avl->{$k};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    66
	}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    67
	$avl = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    68
}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    69
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    70
# Consumes attribute value list into supplied pointer (into hash).
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    71
# @param ptr Pointer where AVL will be stored.
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    72
# @param id Identifier, eg. port number.
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    73
sub consume_avl_ptr {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    74
	my ($ptr, $id) = (@_);
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    75
	$ptr->{$id} = {} unless exists $ptr->{$id};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    76
	foreach my $k (keys %$avl) {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    77
		$ptr->{$id}->{$k} = $avl->{$k};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    78
	}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    79
	$avl = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    80
}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    81
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    82
} # end of perl code
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    83
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    84
file:		<skip: qr/[^\S\n]*/>	# Ignore non-newline whitespace
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    85
		line(s) eofile
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    86
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    87
line: 		emptyline
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    88
		| comment
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    89
		| cmdline 
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    90
		| <error>
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    91
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    92
emptyline:	eol
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    93
25
321b5a1c217c ciena.grammar: fixed eol, wider spec of word
"Tomas Zeman <tzeman@volny.cz>"
parents: 24
diff changeset
    94
comment: 	/^\!.*/ #eol
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    95
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    96
cmdline:	l_hostname
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    97
		| l_port
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    98
		| l_sub_port
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    99
		| l_pm
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   100
		| l_pbt
2
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   101
		| l_tunnel_pair
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   102
		| l_tunnel
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   103
		| l_cfm_service
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   104
		| l_vc
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   105
		| l_vs
3
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   106
		| l_vlan
27
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   107
		| l_iface
25
321b5a1c217c ciena.grammar: fixed eol, wider spec of word
"Tomas Zeman <tzeman@volny.cz>"
parents: 24
diff changeset
   108
		| word(s) #eol
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   109
25
321b5a1c217c ciena.grammar: fixed eol, wider spec of word
"Tomas Zeman <tzeman@volny.cz>"
parents: 24
diff changeset
   110
word:		/[0-9a-zA-Z:\/_\#\"\.\$,+<>=-]+/
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   111
		{ $item[1] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   112
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   113
identifier:	/[0-9a-zA-Z:_-]+/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   114
		{ $item[1] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   115
27
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   116
ip4:		/\d+\.\d+\.\d+\.\d+/
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   117
		{ $item[1] }
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   118
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   119
quoted_text:	<perl_quotelike>
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   120
		{ $item[1][2] }
33
91e312481f54 ciena.grammar: allow & and * in value/quoted strings, accept port number to be a word
"Tomas Zeman <tzeman@volny.cz>"
parents: 28
diff changeset
   121
		| /[0-9a-zA-Z:\/_\#\"\.&\*,-]+/
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   122
		{ $item[1] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   123
33
91e312481f54 ciena.grammar: allow & and * in value/quoted strings, accept port number to be a word
"Tomas Zeman <tzeman@volny.cz>"
parents: 28
diff changeset
   124
value:		/[0-9a-zA-Z:\/_\#\"\.&\*,-]+/
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   125
		{ $item[1] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   126
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   127
eofile:		/^\Z/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   128
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   129
eol:		/\n/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   130
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   131
rest_of_line:	word(s)
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   132
		| eol
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   133
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   134
# Hostname
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   135
l_hostname:	"system" "set" "host-name" identifier
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   136
		{ $::res->{hostname} = $item{identifier} }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   137
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   138
# Port
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   139
l_port:		"port" /disable|set/ "port" port_num avls
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   140
		{
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   141
		$avl->{action} = $item[2];
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   142
		consume_avl("port", $item{port_num}); 
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   143
		}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   144
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   145
port_num:	/\d+(\/\d+)?/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   146
		{ $item[1] }
33
91e312481f54 ciena.grammar: allow & and * in value/quoted strings, accept port number to be a word
"Tomas Zeman <tzeman@volny.cz>"
parents: 28
diff changeset
   147
		| /[0-9a-zA-Z]+/
91e312481f54 ciena.grammar: allow & and * in value/quoted strings, accept port number to be a word
"Tomas Zeman <tzeman@volny.cz>"
parents: 28
diff changeset
   148
		{ $item[1] }
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   149
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   150
avls:		avl(s)
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   151
		| eol
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   152
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   153
avl:		"description" quoted_text
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   154
		{ $avl->{description} = $item{quoted_text}; }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   155
		| word value
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   156
		{ $avl->{$item{word}} = $item{value}; }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   157
# Sub-port
28
3337257bf0e7 ciena.grammar: handle vlan-untagged-data for sub-port
"Tomas Zeman <tzeman@volny.cz>"
parents: 27
diff changeset
   158
l_sub_port:	"sub-port" /add|create/ "sub-port" identifier avls /(vlan-untagged-data)?/
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   159
		{
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   160
		$avl->{action} = $item[2];
8
7d6516dd0b3e ciena.grammar: sub-port typo, made pbt remote-bridge more lenient
"Tomas Zeman <tzeman@volny.cz>"
parents: 7
diff changeset
   161
		consume_avl("sub-port", $item{identifier}); 
28
3337257bf0e7 ciena.grammar: handle vlan-untagged-data for sub-port
"Tomas Zeman <tzeman@volny.cz>"
parents: 27
diff changeset
   162
		$::res->{'sub-port'}->{$item{identifier}}->{'vtag-stack'} = $item[6]
3337257bf0e7 ciena.grammar: handle vlan-untagged-data for sub-port
"Tomas Zeman <tzeman@volny.cz>"
parents: 27
diff changeset
   163
			if (length $item[6] > 0);
1
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   164
		}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   165
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   166
# PM
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   167
l_pm:		"pm" "enable" "pm-instance" identifier
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   168
		{ $::res->{pm}->{instance}->{$item{identifier}} = "enabled" }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   169
		| "pm" "create" /service|sub-port/ identifier avls
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   170
		{
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   171
		$::res->{pm}->{$item[3]}->{$item{identifier}} = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   172
		consume_avl_ptr($::res->{pm}->{$item[3]}, $item{identifier});
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   173
		}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   174
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   175
# PBT
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   176
bvid:		/\d+/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   177
		{ $item[1] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   178
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   179
mac:		/\d{12}|(\d\d:){5}\d\d/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   180
		{ $item[1] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   181
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   182
l_pbt:		"pbt" "reserve" "bvid" bvid
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   183
		{ $::res->{pbt}->{reserved}->{$item{bvid}} = 1 }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   184
		| "pbt" "set" "bridge-mac" mac avls
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   185
		{
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   186
		$::res->{pbt}->{'bridge-mac'}->{$item{mac}} = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   187
		consume_avl_ptr($::res->{pbt}->{'bridge-mac'}, $item{mac})
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   188
		}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   189
		| "pbt" "service" "create" "service" identifier avls
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   190
		{ consume_avl("pbt-service", $item{identifier}) }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   191
		| "pbt" "tunnel-group" "create" "group" identifier avls
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   192
		{ consume_avl("pbt-tunnel-group", $item{identifier}) }
2
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   193
		| "pbt" "transit" /\w+/ "pbt-transit" identifier avls
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   194
		{ consume_avl("pbt-transit", $item{identifier}) }
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   195
		| "pbt" /encap|decap/"-tunnel" /\w+/ /\S+/ identifier avls
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   196
		{
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   197
		$::res->{"pbt-tunnel"}->{$item{identifier}}->{type} = $item[2];
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   198
		consume_avl("pbt-tunnel", $item{identifier})
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   199
		}
8
7d6516dd0b3e ciena.grammar: sub-port typo, made pbt remote-bridge more lenient
"Tomas Zeman <tzeman@volny.cz>"
parents: 7
diff changeset
   200
		| "pbt" "remote-bridge" "create" /bridge(-name)?/ identifier avls
6
f6aa07070f6f ciena.grammar: pbt remote-bridge
"Tomas Zeman <tzeman@volny.cz>"
parents: 5
diff changeset
   201
		{
f6aa07070f6f ciena.grammar: pbt remote-bridge
"Tomas Zeman <tzeman@volny.cz>"
parents: 5
diff changeset
   202
		$::res->{pbt}->{'remote-bridge'}->{$item{identifier}} = {};
f6aa07070f6f ciena.grammar: pbt remote-bridge
"Tomas Zeman <tzeman@volny.cz>"
parents: 5
diff changeset
   203
		consume_avl_ptr($::res->{pbt}->{'remote-bridge'}, $item{identifier})
f6aa07070f6f ciena.grammar: pbt remote-bridge
"Tomas Zeman <tzeman@volny.cz>"
parents: 5
diff changeset
   204
		}
2
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   205
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   206
# Tunnel pair
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   207
l_tunnel_pair:	"tunnel" "pair" "create" "tnl-pair" identifier avls
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   208
		{ consume_avl("tunnel-pair", $item{identifier}) }
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   209
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   210
# Tunnel
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   211
l_tunnel:	"tunnel" /encap|decap/ "create" /\S+/ identifier avls
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   212
		{
7
a7936f72831c ciena.grammar: distinguish tunnels by their type and pbt type
"Tomas Zeman <tzeman@volny.cz>"
parents: 6
diff changeset
   213
		my ($tun_t, $pbt_t, $tun) = ($item[2], $item[4], $item{identifier});
a7936f72831c ciena.grammar: distinguish tunnels by their type and pbt type
"Tomas Zeman <tzeman@volny.cz>"
parents: 6
diff changeset
   214
		my $id = "$tun_t/$pbt_t/$tun";
a7936f72831c ciena.grammar: distinguish tunnels by their type and pbt type
"Tomas Zeman <tzeman@volny.cz>"
parents: 6
diff changeset
   215
		$::res->{tunnel}->{$id} = {
a7936f72831c ciena.grammar: distinguish tunnels by their type and pbt type
"Tomas Zeman <tzeman@volny.cz>"
parents: 6
diff changeset
   216
			"tunnel-type" => $tun_t,
a7936f72831c ciena.grammar: distinguish tunnels by their type and pbt type
"Tomas Zeman <tzeman@volny.cz>"
parents: 6
diff changeset
   217
			"pbt-type" => $pbt_t,
a7936f72831c ciena.grammar: distinguish tunnels by their type and pbt type
"Tomas Zeman <tzeman@volny.cz>"
parents: 6
diff changeset
   218
			"tunnel-name" => $tun,
2
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   219
		};
7
a7936f72831c ciena.grammar: distinguish tunnels by their type and pbt type
"Tomas Zeman <tzeman@volny.cz>"
parents: 6
diff changeset
   220
		consume_avl("tunnel", $id);
2
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   221
		}
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   222
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   223
# CFM
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   224
l_cfm_service:	"cfm" "service" "create" identifier identifier "name" identifier avls
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   225
		{
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   226
		my ($pbt_type, $pbt, $cfm) = ($item[4], $item[5], $item[7]);
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   227
		$::res->{"cfm-service"}->{$cfm} = {
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   228
			"pbt-type" => $pbt_type,
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   229
			"pbt" => $pbt,
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   230
		};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   231
		consume_avl("cfm-service", $cfm);
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   232
		}
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   233
		| "cfm" "service" "set" "service" identifier avls
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   234
		{ consume_avl("cfm-service", $item{identifier}) }
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   235
		| "cfm" "service" "enable" "service" identifier
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   236
		{ $::res->{"cfm-service"}->{$item{identifier}}->{enabled} = 1; }
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   237
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   238
# Virtual circuit
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   239
l_vc:		"virtual-circuit" "pbt" "create" identifier identifier avls
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   240
		{
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   241
		my ($vc_type, $vc) = ($item[4], $item[5]);
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   242
		$::res->{vc}->{$vc}->{type} = $vc_type;
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   243
		consume_avl("vc", $vc);
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   244
		}
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   245
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   246
# Virtual switch
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   247
l_vs:		"virtual-switch" "create" "vs" identifier
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   248
		{ $::res->{vs}->{$item{identifier}} = {}; }
26
e2265c3545d7 ciena.grammar: fixed vs - ethernet
"Tomas Zeman <tzeman@volny.cz>"
parents: 25
diff changeset
   249
		| "virtual-switch" "ethernet" "create" "vs" identifier avls
2
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   250
		{
26
e2265c3545d7 ciena.grammar: fixed vs - ethernet
"Tomas Zeman <tzeman@volny.cz>"
parents: 25
diff changeset
   251
		my ($vs, $vc) = ($item[5], $avl->{vc});
2
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   252
		$::res->{vs}->{$vs}->{ethernet}->{vc} = $vc;
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   253
		}
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   254
		| "virtual-switch" "ethernet" "add" "vs" identifier avls
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   255
		{
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   256
		my $vs = $item{identifier};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   257
		$::res->{vs}->{$vs}->{ethernet}->{members} = []
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   258
			unless exists $::res->{vs}->{$vs}->{ethernet}->{members};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   259
		my %params = %$avl;
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   260
		push @{$::res->{vs}->{$vs}->{ethernet}->{members}}, \%params;
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   261
		$avl = {};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   262
		}
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   263
		| "virtual-switch" "interface" "attach" /(\w|-)+/ identifier "vs" identifier
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   264
		{
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   265
		my ($entity_type, $entity, $vs) = ($item[4], $item[5], $item[7]);
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   266
		$::res->{vs}->{$vs}->{interfaces} = []
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   267
			unless exists $::res->{vs}->{$vs}->{interfaces};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   268
		push @{$::res->{vs}->{$vs}->{interfaces}}, {
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   269
			entity => $entity,
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   270
			type => $entity_type,
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   271
		};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   272
		}
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   273
		| "virtual-switch" "l2-cft" "protocol" "add" "vs" identifier avls
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   274
		{
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   275
		my $vs = $item{identifier};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   276
		$::res->{vs}->{$vs}->{"l2-cft"}->{protocols} = []
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   277
			unless exists $::res->{vs}->{$vs}->{"l2-cft"}->{protocols};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   278
		my %params = %$avl;
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   279
		push @{$::res->{vs}->{$vs}->{"l2-cft"}->{protocols}}, \%params;
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   280
		$avl = {};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   281
		}
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   282
		| "virtual-switch" "l2-cft" "enable" "vs" identifier
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   283
		{ $::res->{vs}->{$item{identifier}}->{"l2-cft"}->{enabled} = 1 }
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   284
		| "virtual-switch" "private-forwarding-groups" "enable" "vs" identifier
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   285
		{ $::res->{vs}->{$item{identifier}}->{"priv-fwd-grp"}->{enabled} = 1 }
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   286
		| "virtual-switch" "private-forwarding-groups" "set" "vs" identifier avls
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   287
		{
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   288
		my $vs = $item{identifier};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   289
		my %params = %$avl;
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   290
		$::res->{vs}->{$vs}->{"priv-fwd-grp"} = \%params;
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   291
		$avl = {};
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   292
		}
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   293
		| "virtual-switch" "add" "reserved-vlan" /\d+/"-"/\d+/
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   294
		{
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   295
		my ($from, $to) = ($item[4], $item[6]);
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   296
		for (my $i = $from; $i <= $to; $i++) {
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   297
			$::res->{"vs-vlans"}->{$i} = 1;
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   298
		}
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   299
		}
7b9f165f3a45 Ciena grammar: tunnel, tunnel-pair, virt. switch/circuit, cfm service
"Tomas Zeman <tzeman@volny.cz>"
parents: 1
diff changeset
   300
3
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   301
# Vlan
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   302
vlan_s_range:	/\d+/"-"/\d+/
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   303
		{ for (my $i = $item[1]; $i <= $item[3]; $i++) { $vlan_range->{$i} = 1; } }
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   304
		| /\d+/
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   305
		{ $vlan_range->{$item[1]} = 1 }
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   306
vlan_range: 	vlan_s_range","vlan_range
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   307
		| vlan_s_range
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   308
l_vlan:		"vlan" "create" "vlan" vlan_range
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   309
		{
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   310
		foreach my $vlan (keys %$vlan_range) {
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   311
			$::res->{vlans}->{$vlan} = 1;
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   312
		}
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   313
		$vlan_range = {};
23467e5d2602 ciena.grammar: device-wide vlan list
"Tomas Zeman <tzeman@volny.cz>"
parents: 2
diff changeset
   314
		}
5
c13b1f7bebc1 ciena.grammar: simpler per-port vlans
"Tomas Zeman <tzeman@volny.cz>"
parents: 4
diff changeset
   315
		| "vlan" /add|remove/ "vlan" vlan_range "port" port_num
4
3a26769e5d6f ciena.grammar: per port vlans
"Tomas Zeman <tzeman@volny.cz>"
parents: 3
diff changeset
   316
		{
5
c13b1f7bebc1 ciena.grammar: simpler per-port vlans
"Tomas Zeman <tzeman@volny.cz>"
parents: 4
diff changeset
   317
		my $action = ($item[2] =~ /remove/) ? 0 : 1;
4
3a26769e5d6f ciena.grammar: per port vlans
"Tomas Zeman <tzeman@volny.cz>"
parents: 3
diff changeset
   318
		foreach my $vlan (keys %$vlan_range) {
5
c13b1f7bebc1 ciena.grammar: simpler per-port vlans
"Tomas Zeman <tzeman@volny.cz>"
parents: 4
diff changeset
   319
			$::res->{port}->{$item{port_num}}->{vlans}->{$vlan} = $action;
4
3a26769e5d6f ciena.grammar: per port vlans
"Tomas Zeman <tzeman@volny.cz>"
parents: 3
diff changeset
   320
		}
3a26769e5d6f ciena.grammar: per port vlans
"Tomas Zeman <tzeman@volny.cz>"
parents: 3
diff changeset
   321
		$vlan_range = {};
3a26769e5d6f ciena.grammar: per port vlans
"Tomas Zeman <tzeman@volny.cz>"
parents: 3
diff changeset
   322
		}
5
c13b1f7bebc1 ciena.grammar: simpler per-port vlans
"Tomas Zeman <tzeman@volny.cz>"
parents: 4
diff changeset
   323
27
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   324
# Interface
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   325
l_iface:	"interface" "remote" "set" "ip" ip4 "subnet" ip4
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   326
		{
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   327
		my ($ip, $mask) = ($item[5], $item[7]);
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   328
		$::res->{interface}->{remote} = {
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   329
			ip => $ip,
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   330
			mask => $mask
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   331
		}
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   332
		}
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   333
		| "interface" "local" "disable"
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   334
		{ $::res->{interface}->{'local'}->{disabled} = 1; }
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   335
		| "interface" "set" "gateway" ip4
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   336
		{ $::res->{interface}->{gateway} = $item{ip4}; }
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   337
		| "interface" "create" "remote-interface" identifier "ip" ip4 "subnet" ip4 "vs" identifier
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   338
		{
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   339
		my ($iface, $ip, $mask, $vs) = ($item[4], $item[6], $item[8], $item[10]);
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   340
		$::res->{interface}->{remote} = {
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   341
			ip => $ip,
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   342
			mask => $mask,
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   343
			id => $iface,
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   344
			vs => $vs,
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   345
		}
99ddc553a868 ciena.grammar: parse interface local/remote
"Tomas Zeman <tzeman@volny.cz>"
parents: 26
diff changeset
   346
		}