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