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