xref: /onnv-gate/usr/src/cmd/cmd-inet/usr.sbin/nwamcfg/nwamcfg_lex.l (revision 11767:8f30d0e611c6)
1*11767SAnurag.Maskey@Sun.COM %{
2*11767SAnurag.Maskey@Sun.COM /*
3*11767SAnurag.Maskey@Sun.COM  * CDDL HEADER START
4*11767SAnurag.Maskey@Sun.COM  *
5*11767SAnurag.Maskey@Sun.COM  * The contents of this file are subject to the terms of the
6*11767SAnurag.Maskey@Sun.COM  * Common Development and Distribution License (the "License").
7*11767SAnurag.Maskey@Sun.COM  * You may not use this file except in compliance with the License.
8*11767SAnurag.Maskey@Sun.COM  *
9*11767SAnurag.Maskey@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*11767SAnurag.Maskey@Sun.COM  * or http://www.opensolaris.org/os/licensing.
11*11767SAnurag.Maskey@Sun.COM  * See the License for the specific language governing permissions
12*11767SAnurag.Maskey@Sun.COM  * and limitations under the License.
13*11767SAnurag.Maskey@Sun.COM  *
14*11767SAnurag.Maskey@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
15*11767SAnurag.Maskey@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*11767SAnurag.Maskey@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
17*11767SAnurag.Maskey@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
18*11767SAnurag.Maskey@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
19*11767SAnurag.Maskey@Sun.COM  *
20*11767SAnurag.Maskey@Sun.COM  * CDDL HEADER END
21*11767SAnurag.Maskey@Sun.COM  */
22*11767SAnurag.Maskey@Sun.COM 
23*11767SAnurag.Maskey@Sun.COM /*
24*11767SAnurag.Maskey@Sun.COM  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
25*11767SAnurag.Maskey@Sun.COM  * Use is subject to license terms.
26*11767SAnurag.Maskey@Sun.COM  */
27*11767SAnurag.Maskey@Sun.COM 
28*11767SAnurag.Maskey@Sun.COM #include <string.h>
29*11767SAnurag.Maskey@Sun.COM #include <libintl.h>
30*11767SAnurag.Maskey@Sun.COM #include <sys/types.h>
31*11767SAnurag.Maskey@Sun.COM #include "nwamcfg.h"
32*11767SAnurag.Maskey@Sun.COM #include "nwamcfg_grammar.tab.h"
33*11767SAnurag.Maskey@Sun.COM 
34*11767SAnurag.Maskey@Sun.COM int lex_lineno = 1;	/* line number for error reporting */
35*11767SAnurag.Maskey@Sun.COM static int state = INITIAL;
36*11767SAnurag.Maskey@Sun.COM extern boolean_t cmd_file_mode;
37*11767SAnurag.Maskey@Sun.COM 
38*11767SAnurag.Maskey@Sun.COM extern void yyerror(char *s);
39*11767SAnurag.Maskey@Sun.COM char *safe_strdup(char *s);
40*11767SAnurag.Maskey@Sun.COM %}
41*11767SAnurag.Maskey@Sun.COM 
42*11767SAnurag.Maskey@Sun.COM %a 7000
43*11767SAnurag.Maskey@Sun.COM %p 5000
44*11767SAnurag.Maskey@Sun.COM %e 2000
45*11767SAnurag.Maskey@Sun.COM %n 800
46*11767SAnurag.Maskey@Sun.COM %o 12000
47*11767SAnurag.Maskey@Sun.COM 
48*11767SAnurag.Maskey@Sun.COM %{
49*11767SAnurag.Maskey@Sun.COM /*
50*11767SAnurag.Maskey@Sun.COM  * The state below are for tokens.
51*11767SAnurag.Maskey@Sun.COM  */
52*11767SAnurag.Maskey@Sun.COM %}
53*11767SAnurag.Maskey@Sun.COM %s TSTATE
54*11767SAnurag.Maskey@Sun.COM %%
55*11767SAnurag.Maskey@Sun.COM 
56*11767SAnurag.Maskey@Sun.COM <INITIAL>"#"[^\n]*	{ }
57*11767SAnurag.Maskey@Sun.COM 
58*11767SAnurag.Maskey@Sun.COM <INITIAL>cancel {
59*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
60*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
61*11767SAnurag.Maskey@Sun.COM 			return CANCEL;
62*11767SAnurag.Maskey@Sun.COM 		}
63*11767SAnurag.Maskey@Sun.COM 
64*11767SAnurag.Maskey@Sun.COM <INITIAL>clear	{
65*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
66*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
67*11767SAnurag.Maskey@Sun.COM 			return CLEAR;
68*11767SAnurag.Maskey@Sun.COM 		}
69*11767SAnurag.Maskey@Sun.COM 
70*11767SAnurag.Maskey@Sun.COM <INITIAL>commit	{
71*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
72*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
73*11767SAnurag.Maskey@Sun.COM 			return COMMIT;
74*11767SAnurag.Maskey@Sun.COM 		}
75*11767SAnurag.Maskey@Sun.COM 
76*11767SAnurag.Maskey@Sun.COM <INITIAL>create	{
77*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
78*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
79*11767SAnurag.Maskey@Sun.COM 			return CREATE;
80*11767SAnurag.Maskey@Sun.COM 		}
81*11767SAnurag.Maskey@Sun.COM 
82*11767SAnurag.Maskey@Sun.COM 
83*11767SAnurag.Maskey@Sun.COM <INITIAL>destroy {
84*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
85*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
86*11767SAnurag.Maskey@Sun.COM 			return DESTROY;
87*11767SAnurag.Maskey@Sun.COM 		}
88*11767SAnurag.Maskey@Sun.COM 
89*11767SAnurag.Maskey@Sun.COM <INITIAL>end	{
90*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
91*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
92*11767SAnurag.Maskey@Sun.COM 			return END;
93*11767SAnurag.Maskey@Sun.COM 		}
94*11767SAnurag.Maskey@Sun.COM 
95*11767SAnurag.Maskey@Sun.COM <INITIAL>exit|quit {
96*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
97*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
98*11767SAnurag.Maskey@Sun.COM 			return EXIT;
99*11767SAnurag.Maskey@Sun.COM 		}
100*11767SAnurag.Maskey@Sun.COM 
101*11767SAnurag.Maskey@Sun.COM <INITIAL>export	{
102*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
103*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
104*11767SAnurag.Maskey@Sun.COM 			return EXPORT;
105*11767SAnurag.Maskey@Sun.COM 		}
106*11767SAnurag.Maskey@Sun.COM 
107*11767SAnurag.Maskey@Sun.COM <INITIAL>get	{
108*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
109*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
110*11767SAnurag.Maskey@Sun.COM 			return GET;
111*11767SAnurag.Maskey@Sun.COM 		}
112*11767SAnurag.Maskey@Sun.COM 
113*11767SAnurag.Maskey@Sun.COM <INITIAL>"?"|help {
114*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
115*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
116*11767SAnurag.Maskey@Sun.COM 			return HELP;
117*11767SAnurag.Maskey@Sun.COM 		}
118*11767SAnurag.Maskey@Sun.COM 
119*11767SAnurag.Maskey@Sun.COM <INITIAL>list	{
120*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
121*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
122*11767SAnurag.Maskey@Sun.COM 			return LIST;
123*11767SAnurag.Maskey@Sun.COM 		}
124*11767SAnurag.Maskey@Sun.COM 
125*11767SAnurag.Maskey@Sun.COM <INITIAL>revert	{
126*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
127*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
128*11767SAnurag.Maskey@Sun.COM 			return REVERT;
129*11767SAnurag.Maskey@Sun.COM 		}
130*11767SAnurag.Maskey@Sun.COM 
131*11767SAnurag.Maskey@Sun.COM <INITIAL>select	{
132*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
133*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
134*11767SAnurag.Maskey@Sun.COM 			return SELECT;
135*11767SAnurag.Maskey@Sun.COM 		}
136*11767SAnurag.Maskey@Sun.COM 
137*11767SAnurag.Maskey@Sun.COM <INITIAL>set	{
138*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
139*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
140*11767SAnurag.Maskey@Sun.COM 			return SET;
141*11767SAnurag.Maskey@Sun.COM 		}
142*11767SAnurag.Maskey@Sun.COM 
143*11767SAnurag.Maskey@Sun.COM <INITIAL>verify	{
144*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
145*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
146*11767SAnurag.Maskey@Sun.COM 			return VERIFY;
147*11767SAnurag.Maskey@Sun.COM 		}
148*11767SAnurag.Maskey@Sun.COM 
149*11767SAnurag.Maskey@Sun.COM <INITIAL>walkprop {
150*11767SAnurag.Maskey@Sun.COM 			BEGIN TSTATE;
151*11767SAnurag.Maskey@Sun.COM 			state = TSTATE;
152*11767SAnurag.Maskey@Sun.COM 			return WALKPROP;
153*11767SAnurag.Maskey@Sun.COM 		}
154*11767SAnurag.Maskey@Sun.COM 
155*11767SAnurag.Maskey@Sun.COM <TSTATE>[Ll][Oo][Cc]		{ return LOC; }
156*11767SAnurag.Maskey@Sun.COM <TSTATE>[Nn][Cc][Pp]		{ return NCP; }
157*11767SAnurag.Maskey@Sun.COM <TSTATE>[Ee][Nn][Mm]		{ return ENM; }
158*11767SAnurag.Maskey@Sun.COM <TSTATE>[Ww][Ll][Aa][Nn]	{ return WLAN; }
159*11767SAnurag.Maskey@Sun.COM 
160*11767SAnurag.Maskey@Sun.COM <TSTATE>[Nn][Cc][Uu]		{ return NCU; }
161*11767SAnurag.Maskey@Sun.COM 
162*11767SAnurag.Maskey@Sun.COM <TSTATE>[Pp][Hh][Yy][Ss]	{ return PHYS; }
163*11767SAnurag.Maskey@Sun.COM <TSTATE>[Ii][Pp]		{ return IP; }
164*11767SAnurag.Maskey@Sun.COM 
165*11767SAnurag.Maskey@Sun.COM <TSTATE>unknown		{ return UNKNOWN; }
166*11767SAnurag.Maskey@Sun.COM <TSTATE>activation-mode	{ return ACTIVATION_MODE; }
167*11767SAnurag.Maskey@Sun.COM <TSTATE>conditions	{ return CONDITIONS; }
168*11767SAnurag.Maskey@Sun.COM <TSTATE>enabled		{ return ENABLED; }
169*11767SAnurag.Maskey@Sun.COM 
170*11767SAnurag.Maskey@Sun.COM <TSTATE>type			{ return TYPE; }
171*11767SAnurag.Maskey@Sun.COM <TSTATE>class			{ return CLASS; }
172*11767SAnurag.Maskey@Sun.COM <TSTATE>parent			{ return PARENT; }
173*11767SAnurag.Maskey@Sun.COM <TSTATE>priority-group		{ return PRIORITY_GROUP; }
174*11767SAnurag.Maskey@Sun.COM <TSTATE>priority-mode		{ return PRIORITY_MODE; }
175*11767SAnurag.Maskey@Sun.COM <TSTATE>link-mac-addr		{ return LINK_MACADDR; }
176*11767SAnurag.Maskey@Sun.COM <TSTATE>link-autopush		{ return LINK_AUTOPUSH; }
177*11767SAnurag.Maskey@Sun.COM <TSTATE>link-mtu		{ return LINK_MTU; }
178*11767SAnurag.Maskey@Sun.COM <TSTATE>ip-version		{ return IP_VERSION; }
179*11767SAnurag.Maskey@Sun.COM <TSTATE>ipv4-addrsrc		{ return IPV4_ADDRSRC; }
180*11767SAnurag.Maskey@Sun.COM <TSTATE>ipv4-addr		{ return IPV4_ADDR; }
181*11767SAnurag.Maskey@Sun.COM <TSTATE>ipv4-default-route	{ return IPV4_DEFAULT_ROUTE; }
182*11767SAnurag.Maskey@Sun.COM <TSTATE>ipv6-addrsrc		{ return IPV6_ADDRSRC; }
183*11767SAnurag.Maskey@Sun.COM <TSTATE>ipv6-addr		{ return IPV6_ADDR; }
184*11767SAnurag.Maskey@Sun.COM <TSTATE>ipv6-default-route	{ return IPV6_DEFAULT_ROUTE; }
185*11767SAnurag.Maskey@Sun.COM 
186*11767SAnurag.Maskey@Sun.COM <TSTATE>state		{ return ENM_STATE; }
187*11767SAnurag.Maskey@Sun.COM <TSTATE>fmri		{ return ENM_FMRI; }
188*11767SAnurag.Maskey@Sun.COM <TSTATE>start		{ return ENM_START; }
189*11767SAnurag.Maskey@Sun.COM <TSTATE>stop		{ return ENM_STOP; }
190*11767SAnurag.Maskey@Sun.COM 
191*11767SAnurag.Maskey@Sun.COM <TSTATE>nameservices			{ return LOC_NAMESERVICES; }
192*11767SAnurag.Maskey@Sun.COM <TSTATE>nameservices-config-file	{ return LOC_NAMESERVICES_CONFIG; }
193*11767SAnurag.Maskey@Sun.COM <TSTATE>dns-nameservice-configsrc	{ return LOC_DNS_CONFIGSRC; }
194*11767SAnurag.Maskey@Sun.COM <TSTATE>dns-nameservice-domain		{ return LOC_DNS_DOMAIN; }
195*11767SAnurag.Maskey@Sun.COM <TSTATE>dns-nameservice-servers		{ return LOC_DNS_SERVERS; }
196*11767SAnurag.Maskey@Sun.COM <TSTATE>dns-nameservice-search		{ return LOC_DNS_SEARCH; }
197*11767SAnurag.Maskey@Sun.COM <TSTATE>nis-nameservice-configsrc	{ return LOC_NIS_CONFIGSRC; }
198*11767SAnurag.Maskey@Sun.COM <TSTATE>nis-nameservice-servers		{ return LOC_NIS_SERVERS; }
199*11767SAnurag.Maskey@Sun.COM <TSTATE>ldap-nameservice-configsrc	{ return LOC_LDAP_CONFIGSRC; }
200*11767SAnurag.Maskey@Sun.COM <TSTATE>ldap-nameservice-servers	{ return LOC_LDAP_SERVERS; }
201*11767SAnurag.Maskey@Sun.COM <TSTATE>default-domain			{ return LOC_DEFAULT_DOMAIN; }
202*11767SAnurag.Maskey@Sun.COM <TSTATE>nfsv4-domain			{ return LOC_NFSV4_DOMAIN; }
203*11767SAnurag.Maskey@Sun.COM <TSTATE>ipfilter-config-file		{ return LOC_IPF_CONFIG; }
204*11767SAnurag.Maskey@Sun.COM <TSTATE>ipfilter-v6-config-file		{ return LOC_IPF_V6_CONFIG; }
205*11767SAnurag.Maskey@Sun.COM <TSTATE>ipnat-config-file		{ return LOC_IPNAT_CONFIG; }
206*11767SAnurag.Maskey@Sun.COM <TSTATE>ippool-config-file		{ return LOC_IPPOOL_CONFIG; }
207*11767SAnurag.Maskey@Sun.COM <TSTATE>ike-config-file			{ return LOC_IKE_CONFIG; }
208*11767SAnurag.Maskey@Sun.COM <TSTATE>ipsecpolicy-config-file		{ return LOC_IPSECPOL_CONFIG; }
209*11767SAnurag.Maskey@Sun.COM 
210*11767SAnurag.Maskey@Sun.COM <TSTATE>bssids		{ return WLAN_BSSIDS; }
211*11767SAnurag.Maskey@Sun.COM <TSTATE>priority	{ return WLAN_PRIORITY; }
212*11767SAnurag.Maskey@Sun.COM <TSTATE>keyname		{ return WLAN_KEYNAME; }
213*11767SAnurag.Maskey@Sun.COM <TSTATE>keyslot		{ return WLAN_KEYSLOT; }
214*11767SAnurag.Maskey@Sun.COM <TSTATE>security-mode	{ return WLAN_SECURITY_MODE; }
215*11767SAnurag.Maskey@Sun.COM 
216*11767SAnurag.Maskey@Sun.COM <TSTATE>=		{ return EQUAL; }
217*11767SAnurag.Maskey@Sun.COM 
218*11767SAnurag.Maskey@Sun.COM <TSTATE>\-[adftV] {	/* matches options */
219*11767SAnurag.Maskey@Sun.COM 			yylval.strval = safe_strdup(yytext);
220*11767SAnurag.Maskey@Sun.COM 			return OPTION;
221*11767SAnurag.Maskey@Sun.COM 		}
222*11767SAnurag.Maskey@Sun.COM 
223*11767SAnurag.Maskey@Sun.COM <TSTATE>[^ \t\n\";=\[\]\(\)]+	{	/* matches non-quoted values */
224*11767SAnurag.Maskey@Sun.COM 			yylval.strval = safe_strdup(yytext);
225*11767SAnurag.Maskey@Sun.COM 			return TOKEN;
226*11767SAnurag.Maskey@Sun.COM 		}
227*11767SAnurag.Maskey@Sun.COM 
228*11767SAnurag.Maskey@Sun.COM <TSTATE>\"[^\"\n]*[\"\n] {	/* matches string with quotes */
229*11767SAnurag.Maskey@Sun.COM 			yylval.strval = safe_strdup(yytext);
230*11767SAnurag.Maskey@Sun.COM 			return TOKEN;
231*11767SAnurag.Maskey@Sun.COM 		}
232*11767SAnurag.Maskey@Sun.COM 
233*11767SAnurag.Maskey@Sun.COM <TSTATE>\".*\"\,\".*\" {	/* matches string list of the form "a","b",.. */
234*11767SAnurag.Maskey@Sun.COM 			yylval.strval = safe_strdup(yytext);
235*11767SAnurag.Maskey@Sun.COM 			return TOKEN;
236*11767SAnurag.Maskey@Sun.COM 		}
237*11767SAnurag.Maskey@Sun.COM 
238*11767SAnurag.Maskey@Sun.COM ";"		{
239*11767SAnurag.Maskey@Sun.COM 			BEGIN INITIAL;
240*11767SAnurag.Maskey@Sun.COM 			return (yytext[0]);
241*11767SAnurag.Maskey@Sun.COM 		}
242*11767SAnurag.Maskey@Sun.COM 
243*11767SAnurag.Maskey@Sun.COM \n		{
244*11767SAnurag.Maskey@Sun.COM 			lex_lineno++;
245*11767SAnurag.Maskey@Sun.COM 			BEGIN INITIAL;
246*11767SAnurag.Maskey@Sun.COM 			return (yytext[0]);
247*11767SAnurag.Maskey@Sun.COM 		}
248*11767SAnurag.Maskey@Sun.COM 
249*11767SAnurag.Maskey@Sun.COM [ \t]		;	/* ignore white space */
250*11767SAnurag.Maskey@Sun.COM 
251*11767SAnurag.Maskey@Sun.COM .		{	/* matches all single otherwise unmatched characters */
252*11767SAnurag.Maskey@Sun.COM 			return (yytext[0]);
253*11767SAnurag.Maskey@Sun.COM 		}
254*11767SAnurag.Maskey@Sun.COM 
255*11767SAnurag.Maskey@Sun.COM %%
256*11767SAnurag.Maskey@Sun.COM 
257*11767SAnurag.Maskey@Sun.COM char *
258*11767SAnurag.Maskey@Sun.COM safe_strdup(char *s)
259*11767SAnurag.Maskey@Sun.COM {
260*11767SAnurag.Maskey@Sun.COM 	char *result;
261*11767SAnurag.Maskey@Sun.COM 
262*11767SAnurag.Maskey@Sun.COM 	if ((result = strdup(s)) == NULL) {
263*11767SAnurag.Maskey@Sun.COM 		yyerror("Out of memory");
264*11767SAnurag.Maskey@Sun.COM 		exit(1);
265*11767SAnurag.Maskey@Sun.COM 	}
266*11767SAnurag.Maskey@Sun.COM 	return (result);
267*11767SAnurag.Maskey@Sun.COM }
268*11767SAnurag.Maskey@Sun.COM 
269*11767SAnurag.Maskey@Sun.COM void
270*11767SAnurag.Maskey@Sun.COM yyerror(char *s)
271*11767SAnurag.Maskey@Sun.COM {
272*11767SAnurag.Maskey@Sun.COM 	/* feof(yyin) is not an error; anything else is, so we set saw_error */
273*11767SAnurag.Maskey@Sun.COM 	if (yytext[0] == '\0') {
274*11767SAnurag.Maskey@Sun.COM 		if (!feof(yyin)) {
275*11767SAnurag.Maskey@Sun.COM 			saw_error = B_TRUE;
276*11767SAnurag.Maskey@Sun.COM 			(void) fprintf(stderr, gettext("%s, token expected\n"),
277*11767SAnurag.Maskey@Sun.COM 			    s);
278*11767SAnurag.Maskey@Sun.COM 		}
279*11767SAnurag.Maskey@Sun.COM 		return;
280*11767SAnurag.Maskey@Sun.COM 	}
281*11767SAnurag.Maskey@Sun.COM 
282*11767SAnurag.Maskey@Sun.COM 	saw_error = B_TRUE;
283*11767SAnurag.Maskey@Sun.COM 	if (cmd_file_mode) {
284*11767SAnurag.Maskey@Sun.COM 		(void) fprintf(stderr, gettext("%s on line %d at '%s'\n"), s,
285*11767SAnurag.Maskey@Sun.COM 		    lex_lineno, (yytext[0] == '\n') ? "\\n" : yytext);
286*11767SAnurag.Maskey@Sun.COM 	} else {
287*11767SAnurag.Maskey@Sun.COM 		(void) fprintf(stderr, gettext("%s at '%s'\n\n"), s,
288*11767SAnurag.Maskey@Sun.COM 		    (yytext[0] == '\n') ? "\\n" : yytext);
289*11767SAnurag.Maskey@Sun.COM 	}
290*11767SAnurag.Maskey@Sun.COM 	help_wrap();
291*11767SAnurag.Maskey@Sun.COM }
292