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