cisco.grammar
changeset 12 0b509f26f4d3
parent 11 c170b1da9b6e
child 13 30f4c4346810
--- a/cisco.grammar	Sun Nov 15 22:52:18 2009 +0100
+++ b/cisco.grammar	Thu Nov 26 09:29:42 2009 +0100
@@ -26,6 +26,7 @@
 
 line: 		s_controller
 		| s_interface
+		| s_vrf
 		| indent comment
 		| indent cmdline 
 		| indent emptyline
@@ -126,7 +127,7 @@
 		| vlan_s_range
 
 # interface section
-iface_name:	/\w+\d+[0-9\/\.:]*/
+iface_name:	/\w+(-\w+)?\d+[0-9\/\.:]*/
 		{ $item[1] }
 
 s_interface:	"0" "interface" iface_name /\S*/ eol s_interface_l[ctx => ctx("interface", $item{iface_name}) ](s) "0" "!" eol
@@ -164,3 +165,29 @@
 		| "switchport" "trunk" "encapsulation" keyword
 		{ $arg{ctx}->{"trunk-encap"} = $item{keyword} }
 		| "switchport" "trunk" "allowed" "vlan" vlan_range[ctx => $arg{ctx}, key => "vlan"]
+		| "channel-group" num "mode" keyword
+		{ $arg{ctx}->{"channel-group"}->{$item{num}}->{mode} = $item{keyword} }
+		| "ip" "vrf" "forwarding" word
+		{ $arg{ctx}->{"ip-vrf-fwd"} = $item{word} }
+
+# vrf section
+s_vrf:		"0" "ip" "vrf" keyword eol s_vrf_l[ctx => ctx("vrf", $item{keyword}) ](s) "0" "!" eol
+
+s_vrf_l:	"1" s_vrf_content[ctx => $arg{ctx}] eol
+		| l_section
+
+rd_val:		/\d+:\d+/
+		{ $item[1] }
+
+s_vrf_content:	l_description[ctx => $arg{ctx}]
+		| "rd" rd_val
+		{ $arg{ctx}->{rd} = $item{rd_val} }
+		| "export" "map" keyword
+		{ $arg{ctx}->{"export-map"} = $item{keyword} }
+		| "route-target" /export|import/ rd_val
+		{
+		$arg{ctx}->{"route-target"}->{$item[2]} = []
+			unless exists $arg{ctx}->{"route-target"}->{$item[2]};
+		push @{$arg{ctx}->{"route-target"}->{$item[2]}}, $item{rd_val};
+		}
+