16ba597c5SAnurag S. Maskey %{ 26ba597c5SAnurag S. Maskey /* 36ba597c5SAnurag S. Maskey * CDDL HEADER START 46ba597c5SAnurag S. Maskey * 56ba597c5SAnurag S. Maskey * The contents of this file are subject to the terms of the 66ba597c5SAnurag S. Maskey * Common Development and Distribution License (the "License"). 76ba597c5SAnurag S. Maskey * You may not use this file except in compliance with the License. 86ba597c5SAnurag S. Maskey * 96ba597c5SAnurag S. Maskey * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 106ba597c5SAnurag S. Maskey * or http://www.opensolaris.org/os/licensing. 116ba597c5SAnurag S. Maskey * See the License for the specific language governing permissions 126ba597c5SAnurag S. Maskey * and limitations under the License. 136ba597c5SAnurag S. Maskey * 146ba597c5SAnurag S. Maskey * When distributing Covered Code, include this CDDL HEADER in each 156ba597c5SAnurag S. Maskey * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 166ba597c5SAnurag S. Maskey * If applicable, add the following below this CDDL HEADER, with the 176ba597c5SAnurag S. Maskey * fields enclosed by brackets "[]" replaced with your own identifying 186ba597c5SAnurag S. Maskey * information: Portions Copyright [yyyy] [name of copyright owner] 196ba597c5SAnurag S. Maskey * 206ba597c5SAnurag S. Maskey * CDDL HEADER END 216ba597c5SAnurag S. Maskey */ 226ba597c5SAnurag S. Maskey 236ba597c5SAnurag S. Maskey /* 246ba597c5SAnurag S. Maskey * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 256ba597c5SAnurag S. Maskey * Use is subject to license terms. 26*b31320a7SChris Fraire * Copyright (c) 2016, Chris Fraire <cfraire@me.com>. 276ba597c5SAnurag S. Maskey */ 286ba597c5SAnurag S. Maskey 296ba597c5SAnurag S. Maskey #include <string.h> 306ba597c5SAnurag S. Maskey #include <libintl.h> 316ba597c5SAnurag S. Maskey #include <sys/types.h> 326ba597c5SAnurag S. Maskey #include "nwamcfg.h" 336ba597c5SAnurag S. Maskey #include "nwamcfg_grammar.tab.h" 346ba597c5SAnurag S. Maskey 356ba597c5SAnurag S. Maskey int lex_lineno = 1; /* line number for error reporting */ 366ba597c5SAnurag S. Maskey static int state = INITIAL; 376ba597c5SAnurag S. Maskey extern boolean_t cmd_file_mode; 386ba597c5SAnurag S. Maskey 396ba597c5SAnurag S. Maskey extern void yyerror(char *s); 406ba597c5SAnurag S. Maskey char *safe_strdup(char *s); 416ba597c5SAnurag S. Maskey %} 426ba597c5SAnurag S. Maskey 436ba597c5SAnurag S. Maskey %a 7000 446ba597c5SAnurag S. Maskey %p 5000 456ba597c5SAnurag S. Maskey %e 2000 466ba597c5SAnurag S. Maskey %n 800 476ba597c5SAnurag S. Maskey %o 12000 486ba597c5SAnurag S. Maskey 496ba597c5SAnurag S. Maskey %{ 506ba597c5SAnurag S. Maskey /* 516ba597c5SAnurag S. Maskey * The state below are for tokens. 526ba597c5SAnurag S. Maskey */ 536ba597c5SAnurag S. Maskey %} 546ba597c5SAnurag S. Maskey %s TSTATE 556ba597c5SAnurag S. Maskey %% 566ba597c5SAnurag S. Maskey 576ba597c5SAnurag S. Maskey <INITIAL>"#"[^\n]* { } 586ba597c5SAnurag S. Maskey 596ba597c5SAnurag S. Maskey <INITIAL>cancel { 606ba597c5SAnurag S. Maskey BEGIN TSTATE; 616ba597c5SAnurag S. Maskey state = TSTATE; 626ba597c5SAnurag S. Maskey return CANCEL; 636ba597c5SAnurag S. Maskey } 646ba597c5SAnurag S. Maskey 656ba597c5SAnurag S. Maskey <INITIAL>clear { 666ba597c5SAnurag S. Maskey BEGIN TSTATE; 676ba597c5SAnurag S. Maskey state = TSTATE; 686ba597c5SAnurag S. Maskey return CLEAR; 696ba597c5SAnurag S. Maskey } 706ba597c5SAnurag S. Maskey 716ba597c5SAnurag S. Maskey <INITIAL>commit { 726ba597c5SAnurag S. Maskey BEGIN TSTATE; 736ba597c5SAnurag S. Maskey state = TSTATE; 746ba597c5SAnurag S. Maskey return COMMIT; 756ba597c5SAnurag S. Maskey } 766ba597c5SAnurag S. Maskey 776ba597c5SAnurag S. Maskey <INITIAL>create { 786ba597c5SAnurag S. Maskey BEGIN TSTATE; 796ba597c5SAnurag S. Maskey state = TSTATE; 806ba597c5SAnurag S. Maskey return CREATE; 816ba597c5SAnurag S. Maskey } 826ba597c5SAnurag S. Maskey 836ba597c5SAnurag S. Maskey 846ba597c5SAnurag S. Maskey <INITIAL>destroy { 856ba597c5SAnurag S. Maskey BEGIN TSTATE; 866ba597c5SAnurag S. Maskey state = TSTATE; 876ba597c5SAnurag S. Maskey return DESTROY; 886ba597c5SAnurag S. Maskey } 896ba597c5SAnurag S. Maskey 906ba597c5SAnurag S. Maskey <INITIAL>end { 916ba597c5SAnurag S. Maskey BEGIN TSTATE; 926ba597c5SAnurag S. Maskey state = TSTATE; 936ba597c5SAnurag S. Maskey return END; 946ba597c5SAnurag S. Maskey } 956ba597c5SAnurag S. Maskey 966ba597c5SAnurag S. Maskey <INITIAL>exit|quit { 976ba597c5SAnurag S. Maskey BEGIN TSTATE; 986ba597c5SAnurag S. Maskey state = TSTATE; 996ba597c5SAnurag S. Maskey return EXIT; 1006ba597c5SAnurag S. Maskey } 1016ba597c5SAnurag S. Maskey 1026ba597c5SAnurag S. Maskey <INITIAL>export { 1036ba597c5SAnurag S. Maskey BEGIN TSTATE; 1046ba597c5SAnurag S. Maskey state = TSTATE; 1056ba597c5SAnurag S. Maskey return EXPORT; 1066ba597c5SAnurag S. Maskey } 1076ba597c5SAnurag S. Maskey 1086ba597c5SAnurag S. Maskey <INITIAL>get { 1096ba597c5SAnurag S. Maskey BEGIN TSTATE; 1106ba597c5SAnurag S. Maskey state = TSTATE; 1116ba597c5SAnurag S. Maskey return GET; 1126ba597c5SAnurag S. Maskey } 1136ba597c5SAnurag S. Maskey 1146ba597c5SAnurag S. Maskey <INITIAL>"?"|help { 1156ba597c5SAnurag S. Maskey BEGIN TSTATE; 1166ba597c5SAnurag S. Maskey state = TSTATE; 1176ba597c5SAnurag S. Maskey return HELP; 1186ba597c5SAnurag S. Maskey } 1196ba597c5SAnurag S. Maskey 1206ba597c5SAnurag S. Maskey <INITIAL>list { 1216ba597c5SAnurag S. Maskey BEGIN TSTATE; 1226ba597c5SAnurag S. Maskey state = TSTATE; 1236ba597c5SAnurag S. Maskey return LIST; 1246ba597c5SAnurag S. Maskey } 1256ba597c5SAnurag S. Maskey 1266ba597c5SAnurag S. Maskey <INITIAL>revert { 1276ba597c5SAnurag S. Maskey BEGIN TSTATE; 1286ba597c5SAnurag S. Maskey state = TSTATE; 1296ba597c5SAnurag S. Maskey return REVERT; 1306ba597c5SAnurag S. Maskey } 1316ba597c5SAnurag S. Maskey 1326ba597c5SAnurag S. Maskey <INITIAL>select { 1336ba597c5SAnurag S. Maskey BEGIN TSTATE; 1346ba597c5SAnurag S. Maskey state = TSTATE; 1356ba597c5SAnurag S. Maskey return SELECT; 1366ba597c5SAnurag S. Maskey } 1376ba597c5SAnurag S. Maskey 1386ba597c5SAnurag S. Maskey <INITIAL>set { 1396ba597c5SAnurag S. Maskey BEGIN TSTATE; 1406ba597c5SAnurag S. Maskey state = TSTATE; 1416ba597c5SAnurag S. Maskey return SET; 1426ba597c5SAnurag S. Maskey } 1436ba597c5SAnurag S. Maskey 1446ba597c5SAnurag S. Maskey <INITIAL>verify { 1456ba597c5SAnurag S. Maskey BEGIN TSTATE; 1466ba597c5SAnurag S. Maskey state = TSTATE; 1476ba597c5SAnurag S. Maskey return VERIFY; 1486ba597c5SAnurag S. Maskey } 1496ba597c5SAnurag S. Maskey 1506ba597c5SAnurag S. Maskey <INITIAL>walkprop { 1516ba597c5SAnurag S. Maskey BEGIN TSTATE; 1526ba597c5SAnurag S. Maskey state = TSTATE; 1536ba597c5SAnurag S. Maskey return WALKPROP; 1546ba597c5SAnurag S. Maskey } 1556ba597c5SAnurag S. Maskey 1566ba597c5SAnurag S. Maskey <TSTATE>[Ll][Oo][Cc] { return LOC; } 1576ba597c5SAnurag S. Maskey <TSTATE>[Nn][Cc][Pp] { return NCP; } 1586ba597c5SAnurag S. Maskey <TSTATE>[Ee][Nn][Mm] { return ENM; } 1596ba597c5SAnurag S. Maskey <TSTATE>[Ww][Ll][Aa][Nn] { return WLAN; } 1606ba597c5SAnurag S. Maskey 1616ba597c5SAnurag S. Maskey <TSTATE>[Nn][Cc][Uu] { return NCU; } 1626ba597c5SAnurag S. Maskey 1636ba597c5SAnurag S. Maskey <TSTATE>[Pp][Hh][Yy][Ss] { return PHYS; } 1646ba597c5SAnurag S. Maskey <TSTATE>[Ii][Pp] { return IP; } 1656ba597c5SAnurag S. Maskey 1666ba597c5SAnurag S. Maskey <TSTATE>unknown { return UNKNOWN; } 1676ba597c5SAnurag S. Maskey <TSTATE>activation-mode { return ACTIVATION_MODE; } 1686ba597c5SAnurag S. Maskey <TSTATE>conditions { return CONDITIONS; } 1696ba597c5SAnurag S. Maskey <TSTATE>enabled { return ENABLED; } 1706ba597c5SAnurag S. Maskey 1716ba597c5SAnurag S. Maskey <TSTATE>type { return TYPE; } 1726ba597c5SAnurag S. Maskey <TSTATE>class { return CLASS; } 1736ba597c5SAnurag S. Maskey <TSTATE>parent { return PARENT; } 1746ba597c5SAnurag S. Maskey <TSTATE>priority-group { return PRIORITY_GROUP; } 1756ba597c5SAnurag S. Maskey <TSTATE>priority-mode { return PRIORITY_MODE; } 1766ba597c5SAnurag S. Maskey <TSTATE>link-mac-addr { return LINK_MACADDR; } 1776ba597c5SAnurag S. Maskey <TSTATE>link-autopush { return LINK_AUTOPUSH; } 1786ba597c5SAnurag S. Maskey <TSTATE>link-mtu { return LINK_MTU; } 1796ba597c5SAnurag S. Maskey <TSTATE>ip-version { return IP_VERSION; } 1806ba597c5SAnurag S. Maskey <TSTATE>ipv4-addrsrc { return IPV4_ADDRSRC; } 1816ba597c5SAnurag S. Maskey <TSTATE>ipv4-addr { return IPV4_ADDR; } 1826ba597c5SAnurag S. Maskey <TSTATE>ipv4-default-route { return IPV4_DEFAULT_ROUTE; } 1836ba597c5SAnurag S. Maskey <TSTATE>ipv6-addrsrc { return IPV6_ADDRSRC; } 1846ba597c5SAnurag S. Maskey <TSTATE>ipv6-addr { return IPV6_ADDR; } 1856ba597c5SAnurag S. Maskey <TSTATE>ipv6-default-route { return IPV6_DEFAULT_ROUTE; } 186*b31320a7SChris Fraire <TSTATE>ip-primary { return IP_PRIMARY; } 187*b31320a7SChris Fraire <TSTATE>ip-reqhost { return IP_REQHOST; } 1886ba597c5SAnurag S. Maskey 1896ba597c5SAnurag S. Maskey <TSTATE>state { return ENM_STATE; } 1906ba597c5SAnurag S. Maskey <TSTATE>fmri { return ENM_FMRI; } 1916ba597c5SAnurag S. Maskey <TSTATE>start { return ENM_START; } 1926ba597c5SAnurag S. Maskey <TSTATE>stop { return ENM_STOP; } 1936ba597c5SAnurag S. Maskey 1946ba597c5SAnurag S. Maskey <TSTATE>nameservices { return LOC_NAMESERVICES; } 1956ba597c5SAnurag S. Maskey <TSTATE>nameservices-config-file { return LOC_NAMESERVICES_CONFIG; } 1966ba597c5SAnurag S. Maskey <TSTATE>dns-nameservice-configsrc { return LOC_DNS_CONFIGSRC; } 1976ba597c5SAnurag S. Maskey <TSTATE>dns-nameservice-domain { return LOC_DNS_DOMAIN; } 1986ba597c5SAnurag S. Maskey <TSTATE>dns-nameservice-servers { return LOC_DNS_SERVERS; } 1996ba597c5SAnurag S. Maskey <TSTATE>dns-nameservice-search { return LOC_DNS_SEARCH; } 2006ba597c5SAnurag S. Maskey <TSTATE>nis-nameservice-configsrc { return LOC_NIS_CONFIGSRC; } 2016ba597c5SAnurag S. Maskey <TSTATE>nis-nameservice-servers { return LOC_NIS_SERVERS; } 2026ba597c5SAnurag S. Maskey <TSTATE>ldap-nameservice-configsrc { return LOC_LDAP_CONFIGSRC; } 2036ba597c5SAnurag S. Maskey <TSTATE>ldap-nameservice-servers { return LOC_LDAP_SERVERS; } 2046ba597c5SAnurag S. Maskey <TSTATE>default-domain { return LOC_DEFAULT_DOMAIN; } 2056ba597c5SAnurag S. Maskey <TSTATE>nfsv4-domain { return LOC_NFSV4_DOMAIN; } 2066ba597c5SAnurag S. Maskey <TSTATE>ipfilter-config-file { return LOC_IPF_CONFIG; } 2076ba597c5SAnurag S. Maskey <TSTATE>ipfilter-v6-config-file { return LOC_IPF_V6_CONFIG; } 2086ba597c5SAnurag S. Maskey <TSTATE>ipnat-config-file { return LOC_IPNAT_CONFIG; } 2096ba597c5SAnurag S. Maskey <TSTATE>ippool-config-file { return LOC_IPPOOL_CONFIG; } 2106ba597c5SAnurag S. Maskey <TSTATE>ike-config-file { return LOC_IKE_CONFIG; } 2116ba597c5SAnurag S. Maskey <TSTATE>ipsecpolicy-config-file { return LOC_IPSECPOL_CONFIG; } 2126ba597c5SAnurag S. Maskey 2136ba597c5SAnurag S. Maskey <TSTATE>bssids { return WLAN_BSSIDS; } 2146ba597c5SAnurag S. Maskey <TSTATE>priority { return WLAN_PRIORITY; } 2156ba597c5SAnurag S. Maskey <TSTATE>keyname { return WLAN_KEYNAME; } 2166ba597c5SAnurag S. Maskey <TSTATE>keyslot { return WLAN_KEYSLOT; } 2176ba597c5SAnurag S. Maskey <TSTATE>security-mode { return WLAN_SECURITY_MODE; } 2186ba597c5SAnurag S. Maskey 2196ba597c5SAnurag S. Maskey <TSTATE>= { return EQUAL; } 2206ba597c5SAnurag S. Maskey 2216ba597c5SAnurag S. Maskey <TSTATE>\-[adftV] { /* matches options */ 2226ba597c5SAnurag S. Maskey yylval.strval = safe_strdup(yytext); 2236ba597c5SAnurag S. Maskey return OPTION; 2246ba597c5SAnurag S. Maskey } 2256ba597c5SAnurag S. Maskey 2266ba597c5SAnurag S. Maskey <TSTATE>[^ \t\n\";=\[\]\(\)]+ { /* matches non-quoted values */ 2276ba597c5SAnurag S. Maskey yylval.strval = safe_strdup(yytext); 2286ba597c5SAnurag S. Maskey return TOKEN; 2296ba597c5SAnurag S. Maskey } 2306ba597c5SAnurag S. Maskey 2316ba597c5SAnurag S. Maskey <TSTATE>\"[^\"\n]*[\"\n] { /* matches string with quotes */ 2326ba597c5SAnurag S. Maskey yylval.strval = safe_strdup(yytext); 2336ba597c5SAnurag S. Maskey return TOKEN; 2346ba597c5SAnurag S. Maskey } 2356ba597c5SAnurag S. Maskey 2366ba597c5SAnurag S. Maskey <TSTATE>\".*\"\,\".*\" { /* matches string list of the form "a","b",.. */ 2376ba597c5SAnurag S. Maskey yylval.strval = safe_strdup(yytext); 2386ba597c5SAnurag S. Maskey return TOKEN; 2396ba597c5SAnurag S. Maskey } 2406ba597c5SAnurag S. Maskey 2416ba597c5SAnurag S. Maskey ";" { 2426ba597c5SAnurag S. Maskey BEGIN INITIAL; 2436ba597c5SAnurag S. Maskey return (yytext[0]); 2446ba597c5SAnurag S. Maskey } 2456ba597c5SAnurag S. Maskey 2466ba597c5SAnurag S. Maskey \n { 2476ba597c5SAnurag S. Maskey lex_lineno++; 2486ba597c5SAnurag S. Maskey BEGIN INITIAL; 2496ba597c5SAnurag S. Maskey return (yytext[0]); 2506ba597c5SAnurag S. Maskey } 2516ba597c5SAnurag S. Maskey 2526ba597c5SAnurag S. Maskey [ \t] ; /* ignore white space */ 2536ba597c5SAnurag S. Maskey 2546ba597c5SAnurag S. Maskey . { /* matches all single otherwise unmatched characters */ 2556ba597c5SAnurag S. Maskey return (yytext[0]); 2566ba597c5SAnurag S. Maskey } 2576ba597c5SAnurag S. Maskey 2586ba597c5SAnurag S. Maskey %% 2596ba597c5SAnurag S. Maskey 2606ba597c5SAnurag S. Maskey char * 2616ba597c5SAnurag S. Maskey safe_strdup(char *s) 2626ba597c5SAnurag S. Maskey { 2636ba597c5SAnurag S. Maskey char *result; 2646ba597c5SAnurag S. Maskey 2656ba597c5SAnurag S. Maskey if ((result = strdup(s)) == NULL) { 2666ba597c5SAnurag S. Maskey yyerror("Out of memory"); 2676ba597c5SAnurag S. Maskey exit(1); 2686ba597c5SAnurag S. Maskey } 2696ba597c5SAnurag S. Maskey return (result); 2706ba597c5SAnurag S. Maskey } 2716ba597c5SAnurag S. Maskey 2726ba597c5SAnurag S. Maskey void 2736ba597c5SAnurag S. Maskey yyerror(char *s) 2746ba597c5SAnurag S. Maskey { 2756ba597c5SAnurag S. Maskey /* feof(yyin) is not an error; anything else is, so we set saw_error */ 2766ba597c5SAnurag S. Maskey if (yytext[0] == '\0') { 2776ba597c5SAnurag S. Maskey if (!feof(yyin)) { 2786ba597c5SAnurag S. Maskey saw_error = B_TRUE; 2796ba597c5SAnurag S. Maskey (void) fprintf(stderr, gettext("%s, token expected\n"), 2806ba597c5SAnurag S. Maskey s); 2816ba597c5SAnurag S. Maskey } 2826ba597c5SAnurag S. Maskey return; 2836ba597c5SAnurag S. Maskey } 2846ba597c5SAnurag S. Maskey 2856ba597c5SAnurag S. Maskey saw_error = B_TRUE; 2866ba597c5SAnurag S. Maskey if (cmd_file_mode) { 2876ba597c5SAnurag S. Maskey (void) fprintf(stderr, gettext("%s on line %d at '%s'\n"), s, 2886ba597c5SAnurag S. Maskey lex_lineno, (yytext[0] == '\n') ? "\\n" : yytext); 2896ba597c5SAnurag S. Maskey } else { 2906ba597c5SAnurag S. Maskey (void) fprintf(stderr, gettext("%s at '%s'\n\n"), s, 2916ba597c5SAnurag S. Maskey (yytext[0] == '\n') ? "\\n" : yytext); 2926ba597c5SAnurag S. Maskey } 2936ba597c5SAnurag S. Maskey help_wrap(); 2946ba597c5SAnurag S. Maskey } 295