--- a/ciena.grammar Wed Nov 04 16:16:32 2009 +0100
+++ b/ciena.grammar Wed Nov 04 16:43:36 2009 +0100
@@ -25,10 +25,11 @@
$::res->{vc} = {};
$::res->{vs} = {};
$::res->{"vs-vlans"} = {};
-
+$::res->{vlans} = {};
# local (current line) attribute-value-list, ie. property value
my $avl = {};
+my $vlan_range = {};
# Consumes attribute value list.
# @param type Type (port/sub_port/etc).
@@ -78,6 +79,7 @@
| l_cfm_service
| l_vc
| l_vs
+ | l_vlan
| word(s) eol
word: /[0-9a-zA-Z:\/_\#\"\.,-]+/
@@ -256,3 +258,17 @@
}
}
+# Vlan
+vlan_s_range: /\d+/"-"/\d+/
+ { for (my $i = $item[1]; $i <= $item[3]; $i++) { $vlan_range->{$i} = 1; } }
+ | /\d+/
+ { $vlan_range->{$item[1]} = 1 }
+vlan_range: vlan_s_range","vlan_range
+ | vlan_s_range
+l_vlan: "vlan" "create" "vlan" vlan_range
+ {
+ foreach my $vlan (keys %$vlan_range) {
+ $::res->{vlans}->{$vlan} = 1;
+ }
+ $vlan_range = {};
+ }