ciena.grammar
author "Tomas Zeman <tzeman@volny.cz>"
Sun, 01 Nov 2009 23:33:46 +0100
changeset 1 7e38ef20071f
child 2 7b9f165f3a45
permissions -rw-r--r--
Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
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
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     2
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     3
<autotree>
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     4
{ # perl code follows
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     5
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     6
$::res = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     7
$::res->{port} ={};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     8
$::res->{sub_port} ={};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
     9
$::res->{pm} = {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    10
	instance => {},
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    11
	service => {},
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    12
	'sub-port' => {},
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    13
};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    14
$::res->{pbt} = {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    15
	reserved => {},	# reserved bvids
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    16
	'bridge-mac' => {},
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    17
};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    18
$::res->{'pbt-service'} = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    19
$::res->{'pbt-tunnel-group'} = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    20
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    21
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    22
# 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
    23
my $avl = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    24
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    25
# Consumes attribute value list.
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    26
# @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
    27
# @param id Identifier, eg. port number.
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    28
sub consume_avl {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    29
	my ($type, $id) = (@_);
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    30
	$::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
    31
	foreach my $k (keys %$avl) {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    32
		$::res->{$type}->{$id}->{$k} = $avl->{$k};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    33
	}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    34
	$avl = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    35
}
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
# 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
    38
# @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
    39
# @param id Identifier, eg. port number.
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    40
sub consume_avl_ptr {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    41
	my ($ptr, $id) = (@_);
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    42
	$ptr->{$id} = {} unless exists $ptr->{$id};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    43
	foreach my $k (keys %$avl) {
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    44
		$ptr->{$id}->{$k} = $avl->{$k};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    45
	}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    46
	$avl = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    47
}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    48
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    49
} # end of perl code
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    50
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    51
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
    52
		line(s) eofile
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
line: 		emptyline
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    55
		| comment
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    56
		| cmdline 
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    57
		| <error>
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    58
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    59
emptyline:	eol
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    60
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    61
comment: 	/^\!.*/ eol
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    62
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    63
cmdline:	l_hostname
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    64
		| l_port
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    65
		| l_sub_port
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    66
		| l_pm
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    67
		| l_pbt
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    68
		| word(s) eol
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
word:		/[0-9a-zA-Z:\/_\#\"\.,-]+/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    71
		{ $item[1] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    72
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    73
identifier:	/[0-9a-zA-Z:_-]+/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    74
		{ $item[1] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    75
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    76
quoted_text:	<perl_quotelike>
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    77
		{ $item[1][2] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    78
		| /[0-9a-zA-Z:\/_\#\"\.,-]+/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    79
		{ $item[1] }
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
value:		/[0-9a-zA-Z:\/_\#\"\.,-]+/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    82
		{ $item[1] }
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
eofile:		/^\Z/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    85
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    86
eol:		/\n/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    87
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    88
rest_of_line:	word(s)
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    89
		| eol
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    90
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    91
# Hostname
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    92
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
    93
		{ $::res->{hostname} = $item{identifier} }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    94
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    95
# Port
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    96
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
    97
		{
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    98
		$avl->{action} = $item[2];
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
    99
		consume_avl("port", $item{port_num}); 
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   100
		}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   101
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   102
port_num:	/\d+(\/\d+)?/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   103
		{ $item[1] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   104
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   105
avls:		avl(s)
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   106
		| eol
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   107
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   108
avl:		"description" quoted_text
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   109
		{ $avl->{description} = $item{quoted_text}; }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   110
		| word value
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   111
		{ $avl->{$item{word}} = $item{value}; }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   112
# Sub-port
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   113
l_sub_port:	"sub-port" /add|create/ "sub-port" identifier avls
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   114
		{
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   115
		$avl->{action} = $item[2];
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   116
		consume_avl("sub_port", $item{identifier}); 
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   117
		}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   118
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   119
# PM
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   120
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
   121
		{ $::res->{pm}->{instance}->{$item{identifier}} = "enabled" }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   122
		| "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
   123
		{
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   124
		$::res->{pm}->{$item[3]}->{$item{identifier}} = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   125
		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
   126
		}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   127
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   128
# PBT
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   129
bvid:		/\d+/
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   130
		{ $item[1] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   131
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   132
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
   133
		{ $item[1] }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   134
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   135
l_pbt:		"pbt" "reserve" "bvid" bvid
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   136
		{ $::res->{pbt}->{reserved}->{$item{bvid}} = 1 }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   137
		| "pbt" "set" "bridge-mac" mac avls
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   138
		{
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   139
		$::res->{pbt}->{'bridge-mac'}->{$item{mac}} = {};
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   140
		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
   141
		}
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   142
		| "pbt" "service" "create" "service" identifier avls
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   143
		{ consume_avl("pbt-service", $item{identifier}) }
7e38ef20071f Ciena grammar: parse ports, sub-ports, pbt, hostname, pm
"Tomas Zeman <tzeman@volny.cz>"
parents:
diff changeset
   144
		| "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
   145
		{ consume_avl("pbt-tunnel-group", $item{identifier}) }