cisco.grammar
changeset 12 0b509f26f4d3
parent 11 c170b1da9b6e
child 13 30f4c4346810
equal deleted inserted replaced
11:c170b1da9b6e 12:0b509f26f4d3
    24 file:		<skip: qr/[^\S\n]*/>	# Ignore non-newline whitespace
    24 file:		<skip: qr/[^\S\n]*/>	# Ignore non-newline whitespace
    25 		line(s) eofile
    25 		line(s) eofile
    26 
    26 
    27 line: 		s_controller
    27 line: 		s_controller
    28 		| s_interface
    28 		| s_interface
       
    29 		| s_vrf
    29 		| indent comment
    30 		| indent comment
    30 		| indent cmdline 
    31 		| indent cmdline 
    31 		| indent emptyline
    32 		| indent emptyline
    32 		| <error>
    33 		| <error>
    33 
    34 
   124 		{ $arg{ctx}->{$arg{key}}->{$item[1]} = 1 }
   125 		{ $arg{ctx}->{$arg{key}}->{$item[1]} = 1 }
   125 vlan_range: 	vlan_s_range","vlan_range
   126 vlan_range: 	vlan_s_range","vlan_range
   126 		| vlan_s_range
   127 		| vlan_s_range
   127 
   128 
   128 # interface section
   129 # interface section
   129 iface_name:	/\w+\d+[0-9\/\.:]*/
   130 iface_name:	/\w+(-\w+)?\d+[0-9\/\.:]*/
   130 		{ $item[1] }
   131 		{ $item[1] }
   131 
   132 
   132 s_interface:	"0" "interface" iface_name /\S*/ eol s_interface_l[ctx => ctx("interface", $item{iface_name}) ](s) "0" "!" eol
   133 s_interface:	"0" "interface" iface_name /\S*/ eol s_interface_l[ctx => ctx("interface", $item{iface_name}) ](s) "0" "!" eol
   133 		{
   134 		{
   134 		$::res->{interface}->{$item{iface_name}}->{type} = $item[4]
   135 		$::res->{interface}->{$item{iface_name}}->{type} = $item[4]
   162 		| "switchport" "access" "vlan" num
   163 		| "switchport" "access" "vlan" num
   163 		{ $arg{ctx}->{vlan} = $item{num} }
   164 		{ $arg{ctx}->{vlan} = $item{num} }
   164 		| "switchport" "trunk" "encapsulation" keyword
   165 		| "switchport" "trunk" "encapsulation" keyword
   165 		{ $arg{ctx}->{"trunk-encap"} = $item{keyword} }
   166 		{ $arg{ctx}->{"trunk-encap"} = $item{keyword} }
   166 		| "switchport" "trunk" "allowed" "vlan" vlan_range[ctx => $arg{ctx}, key => "vlan"]
   167 		| "switchport" "trunk" "allowed" "vlan" vlan_range[ctx => $arg{ctx}, key => "vlan"]
       
   168 		| "channel-group" num "mode" keyword
       
   169 		{ $arg{ctx}->{"channel-group"}->{$item{num}}->{mode} = $item{keyword} }
       
   170 		| "ip" "vrf" "forwarding" word
       
   171 		{ $arg{ctx}->{"ip-vrf-fwd"} = $item{word} }
       
   172 
       
   173 # vrf section
       
   174 s_vrf:		"0" "ip" "vrf" keyword eol s_vrf_l[ctx => ctx("vrf", $item{keyword}) ](s) "0" "!" eol
       
   175 
       
   176 s_vrf_l:	"1" s_vrf_content[ctx => $arg{ctx}] eol
       
   177 		| l_section
       
   178 
       
   179 rd_val:		/\d+:\d+/
       
   180 		{ $item[1] }
       
   181 
       
   182 s_vrf_content:	l_description[ctx => $arg{ctx}]
       
   183 		| "rd" rd_val
       
   184 		{ $arg{ctx}->{rd} = $item{rd_val} }
       
   185 		| "export" "map" keyword
       
   186 		{ $arg{ctx}->{"export-map"} = $item{keyword} }
       
   187 		| "route-target" /export|import/ rd_val
       
   188 		{
       
   189 		$arg{ctx}->{"route-target"}->{$item[2]} = []
       
   190 			unless exists $arg{ctx}->{"route-target"}->{$item[2]};
       
   191 		push @{$arg{ctx}->{"route-target"}->{$item[2]}}, $item{rd_val};
       
   192 		}
       
   193