xref: /titanic_52/usr/src/cmd/zonecfg/zonecfg_grammar.y (revision 3869a9385c1f62e5437e1f099f68a3130c89b318)
17c478bd9Sstevel@tonic-gate %{
27c478bd9Sstevel@tonic-gate /*
37c478bd9Sstevel@tonic-gate  * CDDL HEADER START
47c478bd9Sstevel@tonic-gate  *
57c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
6ffbafc53Scomay  * Common Development and Distribution License (the "License").
7ffbafc53Scomay  * You may not use this file except in compliance with the License.
87c478bd9Sstevel@tonic-gate  *
97c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
107c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
117c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
127c478bd9Sstevel@tonic-gate  * and limitations under the License.
137c478bd9Sstevel@tonic-gate  *
147c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
157c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
167c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
177c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
187c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
197c478bd9Sstevel@tonic-gate  *
207c478bd9Sstevel@tonic-gate  * CDDL HEADER END
217e362f58Scomay  */
227e362f58Scomay 
237e362f58Scomay /*
24a20ee416SGlenn Faden  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
257c478bd9Sstevel@tonic-gate  */
267c478bd9Sstevel@tonic-gate 
27*3869a938Sjv227347 /*
28*3869a938Sjv227347  * This file defines zonecfg(1M)'s grammar.
29*3869a938Sjv227347  *
30*3869a938Sjv227347  * Reduction rules that consume TOKENs must invoke claim_token() immediately
31*3869a938Sjv227347  * before freeing the TOKENs or adding them to data structures (e.g., cmd) that
32*3869a938Sjv227347  * will be cleaned up when the parser finishes or encounters errors.
33*3869a938Sjv227347  */
34*3869a938Sjv227347 
357c478bd9Sstevel@tonic-gate #include <stdio.h>
36c94c1ef0Sjv227347 #include <strings.h>
377c478bd9Sstevel@tonic-gate 
387c478bd9Sstevel@tonic-gate #include "zonecfg.h"
397c478bd9Sstevel@tonic-gate 
407c478bd9Sstevel@tonic-gate static cmd_t *cmd = NULL;		/* Command being processed */
417c478bd9Sstevel@tonic-gate static complex_property_ptr_t complex = NULL;
427c478bd9Sstevel@tonic-gate static list_property_ptr_t new_list = NULL, tmp_list, last,
437c478bd9Sstevel@tonic-gate     list[MAX_EQ_PROP_PAIRS];
447c478bd9Sstevel@tonic-gate static property_value_t property[MAX_EQ_PROP_PAIRS];
457c478bd9Sstevel@tonic-gate 
46bbec428eSgjelinek extern boolean_t newline_terminated;
477c478bd9Sstevel@tonic-gate extern int num_prop_vals;		/* # of property values */
487c478bd9Sstevel@tonic-gate 
497c478bd9Sstevel@tonic-gate /* yacc externals */
507c478bd9Sstevel@tonic-gate extern int yydebug;
517c478bd9Sstevel@tonic-gate extern void yyerror(char *s);
527c478bd9Sstevel@tonic-gate 
53c94c1ef0Sjv227347 /*
54c94c1ef0Sjv227347  * This function is used by the simple_prop_val reduction rules to set up
55c94c1ef0Sjv227347  * a list_property_ptr_t and adjust the above global variables appropriately.
56c94c1ef0Sjv227347  * Note that this function duplicates the specified string and makes
57c94c1ef0Sjv227347  * the new list's lp_simple field point to the duplicate.  This function does
58c94c1ef0Sjv227347  * not free the original string.
59c94c1ef0Sjv227347  *
60c94c1ef0Sjv227347  * This function returns a pointer to the duplicated string or NULL if an error
61c94c1ef0Sjv227347  * occurred.  The simple_prop_val reduction rules that invoke this function
62c94c1ef0Sjv227347  * should set $$ to the returned pointer.
63c94c1ef0Sjv227347  */
64c94c1ef0Sjv227347 static char *
65c94c1ef0Sjv227347 simple_prop_val_func(const char *str)
66c94c1ef0Sjv227347 {
67c94c1ef0Sjv227347 	char *retstr;
68c94c1ef0Sjv227347 
69c94c1ef0Sjv227347 	if ((new_list = alloc_list()) == NULL)
70c94c1ef0Sjv227347 		return (NULL);
71c94c1ef0Sjv227347 	if ((retstr = strdup(str)) == NULL) {
72c94c1ef0Sjv227347 		free_list(new_list);
73c94c1ef0Sjv227347 		return (NULL);
74c94c1ef0Sjv227347 	}
75c94c1ef0Sjv227347 	new_list->lp_simple = retstr;
76c94c1ef0Sjv227347 	new_list->lp_complex = NULL;
77c94c1ef0Sjv227347 	new_list->lp_next = NULL;
78c94c1ef0Sjv227347 	if (list[num_prop_vals] == NULL) {
79c94c1ef0Sjv227347 		list[num_prop_vals] = new_list;
80c94c1ef0Sjv227347 	} else {
81c94c1ef0Sjv227347 		for (tmp_list = list[num_prop_vals]; tmp_list != NULL;
82c94c1ef0Sjv227347 		    tmp_list = tmp_list->lp_next)
83c94c1ef0Sjv227347 			last = tmp_list;
84c94c1ef0Sjv227347 		last->lp_next = new_list;
85c94c1ef0Sjv227347 	}
86c94c1ef0Sjv227347 	return (retstr);
87c94c1ef0Sjv227347 }
88c94c1ef0Sjv227347 
89c94c1ef0Sjv227347 /*
90c94c1ef0Sjv227347  * This function is used by the complex_piece reduction rules to set up a
91c94c1ef0Sjv227347  * complex_property_prt_t and adjust the above global variables appropriately.
92c94c1ef0Sjv227347  * Note that this function duplicates the specified string and makes the new
93c94c1ef0Sjv227347  * complex_property_ptr_t's cp_value field point to the duplicate.  It also sets
94c94c1ef0Sjv227347  * the complex_property_ptr_t's cp_type field to cp_type and its cp_next field
95c94c1ef0Sjv227347  * to cp_next.  This function does not free the original string.
96c94c1ef0Sjv227347  *
97c94c1ef0Sjv227347  * This function returns a pointer to the complex_property_t created for the
98c94c1ef0Sjv227347  * complex_piece or NULL if an error occurred.  The complex_piece reduction
99c94c1ef0Sjv227347  * rules that invoke this function should set $$ to the returned pointer.
100c94c1ef0Sjv227347  */
101c94c1ef0Sjv227347 static complex_property_ptr_t
102c94c1ef0Sjv227347 complex_piece_func(int cp_type, const char *str, complex_property_ptr_t cp_next)
103c94c1ef0Sjv227347 {
104c94c1ef0Sjv227347 	complex_property_ptr_t retval;
105c94c1ef0Sjv227347 
106c94c1ef0Sjv227347 	if ((retval = alloc_complex()) == NULL)
107c94c1ef0Sjv227347 		return (NULL);
108c94c1ef0Sjv227347 	if ((retval->cp_value = strdup(str)) == NULL) {
109c94c1ef0Sjv227347 		free_complex(retval);
110c94c1ef0Sjv227347 		return (NULL);
111c94c1ef0Sjv227347 	}
112c94c1ef0Sjv227347 	retval->cp_type = cp_type;
113c94c1ef0Sjv227347 	retval->cp_next = cp_next;
114c94c1ef0Sjv227347 	complex = retval;
115c94c1ef0Sjv227347 	return (retval);
116c94c1ef0Sjv227347 }
117c94c1ef0Sjv227347 
118c94c1ef0Sjv227347 
1197c478bd9Sstevel@tonic-gate %}
1207c478bd9Sstevel@tonic-gate 
1217c478bd9Sstevel@tonic-gate %union {
1227c478bd9Sstevel@tonic-gate 	int ival;
1237c478bd9Sstevel@tonic-gate 	char *strval;
1247c478bd9Sstevel@tonic-gate 	cmd_t *cmd;
1257c478bd9Sstevel@tonic-gate 	complex_property_ptr_t complex;
1267c478bd9Sstevel@tonic-gate 	list_property_ptr_t list;
1277c478bd9Sstevel@tonic-gate }
1287c478bd9Sstevel@tonic-gate 
1297c478bd9Sstevel@tonic-gate %start commands
1307c478bd9Sstevel@tonic-gate 
1317c478bd9Sstevel@tonic-gate %token HELP CREATE EXPORT ADD DELETE REMOVE SELECT SET INFO CANCEL END VERIFY
132087719fdSdp %token COMMIT REVERT EXIT SEMICOLON TOKEN ZONENAME ZONEPATH AUTOBOOT POOL NET
1336e1ae2a3SGary Pennington %token FS ATTR DEVICE RCTL SPECIAL RAW DIR OPTIONS TYPE ADDRESS PHYSICAL
134550b6e40SSowmini Varadhan %token IPTYPE HOSTID FS_ALLOWED ALLOWED_ADDRESS
135087719fdSdp %token NAME MATCH PRIV LIMIT ACTION VALUE EQUAL OPEN_SQ_BRACKET CLOSE_SQ_BRACKET
136c97ad5cdSakolb %token OPEN_PAREN CLOSE_PAREN COMMA DATASET LIMITPRIV BOOTARGS BRAND PSET PCAP
1370209230bSgjelinek %token MCAP NCPUS IMPORTANCE SHARES MAXLWPS MAXSHMMEM MAXSHMIDS MAXMSGIDS
138ff19e029SMenno Lageman %token MAXSEMIDS LOCKED SWAP SCHED CLEAR DEFROUTER ADMIN USER AUTHS MAXPROCS
1397c478bd9Sstevel@tonic-gate 
1407c478bd9Sstevel@tonic-gate %type <strval> TOKEN EQUAL OPEN_SQ_BRACKET CLOSE_SQ_BRACKET
1417c478bd9Sstevel@tonic-gate     property_value OPEN_PAREN CLOSE_PAREN COMMA simple_prop_val
1427c478bd9Sstevel@tonic-gate %type <complex> complex_piece complex_prop_val
1436e1ae2a3SGary Pennington %type <ival> resource_type NET FS DEVICE RCTL ATTR DATASET PSET PCAP MCAP
144cb8a054bSGlenn Faden     ADMIN
1457c478bd9Sstevel@tonic-gate %type <ival> property_name SPECIAL RAW DIR OPTIONS TYPE ADDRESS PHYSICAL NAME
1463f2f09c1Sdp     MATCH ZONENAME ZONEPATH AUTOBOOT POOL LIMITPRIV BOOTARGS VALUE PRIV LIMIT
1470fbb751dSJohn Levon     ACTION BRAND SCHED IPTYPE DEFROUTER HOSTID USER AUTHS FS_ALLOWED
148550b6e40SSowmini Varadhan     ALLOWED_ADDRESS
1497c478bd9Sstevel@tonic-gate %type <cmd> command
1507c478bd9Sstevel@tonic-gate %type <cmd> add_command ADD
1517c478bd9Sstevel@tonic-gate %type <cmd> cancel_command CANCEL
1527c478bd9Sstevel@tonic-gate %type <cmd> commit_command COMMIT
1537c478bd9Sstevel@tonic-gate %type <cmd> create_command CREATE
1547c478bd9Sstevel@tonic-gate %type <cmd> delete_command DELETE
1557c478bd9Sstevel@tonic-gate %type <cmd> end_command END
1567c478bd9Sstevel@tonic-gate %type <cmd> exit_command EXIT
1577c478bd9Sstevel@tonic-gate %type <cmd> export_command EXPORT
1587c478bd9Sstevel@tonic-gate %type <cmd> help_command HELP
1597c478bd9Sstevel@tonic-gate %type <cmd> info_command INFO
1607c478bd9Sstevel@tonic-gate %type <cmd> remove_command REMOVE
1617c478bd9Sstevel@tonic-gate %type <cmd> revert_command REVERT
1627c478bd9Sstevel@tonic-gate %type <cmd> select_command SELECT
1637c478bd9Sstevel@tonic-gate %type <cmd> set_command SET
1640209230bSgjelinek %type <cmd> clear_command CLEAR
1657c478bd9Sstevel@tonic-gate %type <cmd> verify_command VERIFY
1667c478bd9Sstevel@tonic-gate %type <cmd> terminator
1677c478bd9Sstevel@tonic-gate 
1687c478bd9Sstevel@tonic-gate %%
1697c478bd9Sstevel@tonic-gate 
170*3869a938Sjv227347 /*
171*3869a938Sjv227347  * NOTE: Each commands reduction rule must invoke assert_no_unclaimed_tokens()
172*3869a938Sjv227347  * before it completes if it isn't processing an error.  This ensures that
173*3869a938Sjv227347  * reduction rules properly consume TOKENs.
174*3869a938Sjv227347  */
1757c478bd9Sstevel@tonic-gate commands: command terminator
1767c478bd9Sstevel@tonic-gate 	{
1777c478bd9Sstevel@tonic-gate 		if ($1 != NULL) {
1787c478bd9Sstevel@tonic-gate 			if ($1->cmd_handler != NULL)
1797c478bd9Sstevel@tonic-gate 				$1->cmd_handler($1);
1807c478bd9Sstevel@tonic-gate 			free_cmd($1);
1817c478bd9Sstevel@tonic-gate 			bzero(list, sizeof (list_property_t));
1827c478bd9Sstevel@tonic-gate 			num_prop_vals = 0;
1837c478bd9Sstevel@tonic-gate 		}
184*3869a938Sjv227347 		assert_no_unclaimed_tokens();
1857c478bd9Sstevel@tonic-gate 		return (0);
1867c478bd9Sstevel@tonic-gate 	}
1877c478bd9Sstevel@tonic-gate 	| command error terminator
1887c478bd9Sstevel@tonic-gate 	{
1897c478bd9Sstevel@tonic-gate 		if ($1 != NULL) {
1907c478bd9Sstevel@tonic-gate 			free_cmd($1);
1917c478bd9Sstevel@tonic-gate 			bzero(list, sizeof (list_property_t));
1927c478bd9Sstevel@tonic-gate 			num_prop_vals = 0;
1937c478bd9Sstevel@tonic-gate 		}
1947c478bd9Sstevel@tonic-gate 		if (YYRECOVERING())
1957e362f58Scomay 			YYABORT;
1967c478bd9Sstevel@tonic-gate 		yyclearin;
1977c478bd9Sstevel@tonic-gate 		yyerrok;
1987c478bd9Sstevel@tonic-gate 	}
1997c478bd9Sstevel@tonic-gate 	| error terminator
2007c478bd9Sstevel@tonic-gate 	{
2017c478bd9Sstevel@tonic-gate 		if (YYRECOVERING())
2027e362f58Scomay 			YYABORT;
2037c478bd9Sstevel@tonic-gate 		yyclearin;
2047c478bd9Sstevel@tonic-gate 		yyerrok;
2057c478bd9Sstevel@tonic-gate 	}
2067c478bd9Sstevel@tonic-gate 	| terminator
2077c478bd9Sstevel@tonic-gate 	{
208*3869a938Sjv227347 		assert_no_unclaimed_tokens();
2097c478bd9Sstevel@tonic-gate 		return (0);
2107c478bd9Sstevel@tonic-gate 	}
2117c478bd9Sstevel@tonic-gate 
2127c478bd9Sstevel@tonic-gate command: add_command
2137c478bd9Sstevel@tonic-gate 	| cancel_command
2140209230bSgjelinek 	| clear_command
2157c478bd9Sstevel@tonic-gate 	| create_command
2167c478bd9Sstevel@tonic-gate 	| commit_command
2177c478bd9Sstevel@tonic-gate 	| delete_command
2187c478bd9Sstevel@tonic-gate 	| end_command
2197c478bd9Sstevel@tonic-gate 	| exit_command
2207c478bd9Sstevel@tonic-gate 	| export_command
2217c478bd9Sstevel@tonic-gate 	| help_command
2227c478bd9Sstevel@tonic-gate 	| info_command
2237c478bd9Sstevel@tonic-gate 	| remove_command
2247c478bd9Sstevel@tonic-gate 	| revert_command
2257c478bd9Sstevel@tonic-gate 	| select_command
2267c478bd9Sstevel@tonic-gate 	| set_command
2277c478bd9Sstevel@tonic-gate 	| verify_command
2287c478bd9Sstevel@tonic-gate 
229bbec428eSgjelinek terminator:	'\n'	{ newline_terminated = B_TRUE; }
230bbec428eSgjelinek 	|	';'	{ newline_terminated = B_FALSE; }
2317c478bd9Sstevel@tonic-gate 
2327c478bd9Sstevel@tonic-gate add_command: ADD
2337c478bd9Sstevel@tonic-gate 	{
2347c478bd9Sstevel@tonic-gate 		short_usage(CMD_ADD);
2357c478bd9Sstevel@tonic-gate 		(void) fputs("\n", stderr);
236bbec428eSgjelinek 		usage(B_FALSE, HELP_RES_PROPS);
2377c478bd9Sstevel@tonic-gate 		YYERROR;
2387c478bd9Sstevel@tonic-gate 	}
2397c478bd9Sstevel@tonic-gate 	| ADD TOKEN
2407c478bd9Sstevel@tonic-gate 	{
2417c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
2427c478bd9Sstevel@tonic-gate 			YYERROR;
2437c478bd9Sstevel@tonic-gate 		cmd = $$;
2447c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &add_func;
2457c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 1;
246*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
2477c478bd9Sstevel@tonic-gate 		$$->cmd_argv[1] = NULL;
2487c478bd9Sstevel@tonic-gate 	}
2497c478bd9Sstevel@tonic-gate 	| ADD resource_type
2507c478bd9Sstevel@tonic-gate 	{
2517c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
2527c478bd9Sstevel@tonic-gate 			YYERROR;
2537c478bd9Sstevel@tonic-gate 		cmd = $$;
2547c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &add_func;
2557c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
2567c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = $2;
2577c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 0;
2587c478bd9Sstevel@tonic-gate 	}
2597c478bd9Sstevel@tonic-gate 	| ADD property_name property_value
2607c478bd9Sstevel@tonic-gate 	{
2617c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
2627c478bd9Sstevel@tonic-gate 			YYERROR;
2637c478bd9Sstevel@tonic-gate 		cmd = $$;
2647c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &add_func;
2657c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
2667c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 1;
2677c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $2;
2687c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
2697c478bd9Sstevel@tonic-gate 	}
2707c478bd9Sstevel@tonic-gate 
2717c478bd9Sstevel@tonic-gate cancel_command: CANCEL
2727c478bd9Sstevel@tonic-gate 	{
2737c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
2747c478bd9Sstevel@tonic-gate 			YYERROR;
2757c478bd9Sstevel@tonic-gate 		cmd = $$;
2767c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &cancel_func;
2777c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
2787c478bd9Sstevel@tonic-gate 		$$->cmd_argv[0] = NULL;
2797c478bd9Sstevel@tonic-gate 	}
2807c478bd9Sstevel@tonic-gate 	| CANCEL TOKEN
2817c478bd9Sstevel@tonic-gate 	{
2827c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
2837c478bd9Sstevel@tonic-gate 			YYERROR;
2847c478bd9Sstevel@tonic-gate 		cmd = $$;
2857c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &cancel_func;
2867c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 1;
287*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
2887c478bd9Sstevel@tonic-gate 		$$->cmd_argv[1] = NULL;
2897c478bd9Sstevel@tonic-gate 	}
2907c478bd9Sstevel@tonic-gate 
2917c478bd9Sstevel@tonic-gate create_command: CREATE
2927c478bd9Sstevel@tonic-gate 	{
2937c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
2947c478bd9Sstevel@tonic-gate 			YYERROR;
2957c478bd9Sstevel@tonic-gate 		cmd = $$;
2967c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &create_func;
2977c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
2987c478bd9Sstevel@tonic-gate 		$$->cmd_argv[0] = NULL;
2997c478bd9Sstevel@tonic-gate 	}
3007c478bd9Sstevel@tonic-gate 	| CREATE TOKEN
3017c478bd9Sstevel@tonic-gate 	{
3027c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
3037c478bd9Sstevel@tonic-gate 			YYERROR;
3047c478bd9Sstevel@tonic-gate 		cmd = $$;
3057c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &create_func;
3067c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 1;
307*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
3087c478bd9Sstevel@tonic-gate 		$$->cmd_argv[1] = NULL;
3097c478bd9Sstevel@tonic-gate 	}
3107c478bd9Sstevel@tonic-gate 	| CREATE TOKEN TOKEN
3117c478bd9Sstevel@tonic-gate 	{
3127c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
3137c478bd9Sstevel@tonic-gate 			YYERROR;
3147c478bd9Sstevel@tonic-gate 		cmd = $$;
3157c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &create_func;
3167c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 2;
317*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
318*3869a938Sjv227347 		$$->cmd_argv[1] = claim_token($3);
3197c478bd9Sstevel@tonic-gate 		$$->cmd_argv[2] = NULL;
3207c478bd9Sstevel@tonic-gate 	}
3217c478bd9Sstevel@tonic-gate 	| CREATE TOKEN TOKEN TOKEN
3227c478bd9Sstevel@tonic-gate 	{
3237c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
3247c478bd9Sstevel@tonic-gate 			YYERROR;
3257c478bd9Sstevel@tonic-gate 		cmd = $$;
3267c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &create_func;
3277c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 3;
328*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
329*3869a938Sjv227347 		$$->cmd_argv[1] = claim_token($3);
330*3869a938Sjv227347 		$$->cmd_argv[2] = claim_token($4);
3317c478bd9Sstevel@tonic-gate 		$$->cmd_argv[3] = NULL;
3327c478bd9Sstevel@tonic-gate 	}
3337c478bd9Sstevel@tonic-gate 
3347c478bd9Sstevel@tonic-gate commit_command: COMMIT
3357c478bd9Sstevel@tonic-gate 	{
3367c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
3377c478bd9Sstevel@tonic-gate 			YYERROR;
3387c478bd9Sstevel@tonic-gate 		cmd = $$;
3397c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &commit_func;
3407c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
3417c478bd9Sstevel@tonic-gate 		$$->cmd_argv[0] = NULL;
3427c478bd9Sstevel@tonic-gate 	}
3437c478bd9Sstevel@tonic-gate 	| COMMIT TOKEN
3447c478bd9Sstevel@tonic-gate 	{
3457c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
3467c478bd9Sstevel@tonic-gate 			YYERROR;
3477c478bd9Sstevel@tonic-gate 		cmd = $$;
3487c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &commit_func;
3497c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 1;
350*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
3517c478bd9Sstevel@tonic-gate 		$$->cmd_argv[1] = NULL;
3527c478bd9Sstevel@tonic-gate 	}
3537c478bd9Sstevel@tonic-gate 
3547c478bd9Sstevel@tonic-gate delete_command: DELETE
3557c478bd9Sstevel@tonic-gate 	{
3567c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
3577c478bd9Sstevel@tonic-gate 			YYERROR;
3587c478bd9Sstevel@tonic-gate 		cmd = $$;
3597c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &delete_func;
3607c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
3617c478bd9Sstevel@tonic-gate 		$$->cmd_argv[0] = NULL;
3627c478bd9Sstevel@tonic-gate 	}
3637c478bd9Sstevel@tonic-gate 	|	DELETE TOKEN
3647c478bd9Sstevel@tonic-gate 	{
3657c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
3667c478bd9Sstevel@tonic-gate 			YYERROR;
3677c478bd9Sstevel@tonic-gate 		cmd = $$;
3687c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &delete_func;
3697c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 1;
370*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
3717c478bd9Sstevel@tonic-gate 		$$->cmd_argv[1] = NULL;
3727c478bd9Sstevel@tonic-gate 	}
3737c478bd9Sstevel@tonic-gate 
3747c478bd9Sstevel@tonic-gate end_command: END
3757c478bd9Sstevel@tonic-gate 	{
3767c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
3777c478bd9Sstevel@tonic-gate 			YYERROR;
3787c478bd9Sstevel@tonic-gate 		cmd = $$;
3797c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &end_func;
3807c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
3817c478bd9Sstevel@tonic-gate 		$$->cmd_argv[0] = NULL;
3827c478bd9Sstevel@tonic-gate 	}
3837c478bd9Sstevel@tonic-gate 	| END TOKEN
3847c478bd9Sstevel@tonic-gate 	{
3857c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
3867c478bd9Sstevel@tonic-gate 			YYERROR;
3877c478bd9Sstevel@tonic-gate 		cmd = $$;
3887c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &end_func;
3897c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 1;
390*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
3917c478bd9Sstevel@tonic-gate 		$$->cmd_argv[1] = NULL;
3927c478bd9Sstevel@tonic-gate 	}
3937c478bd9Sstevel@tonic-gate 
3947c478bd9Sstevel@tonic-gate exit_command: EXIT
3957c478bd9Sstevel@tonic-gate 	{
3967c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
3977c478bd9Sstevel@tonic-gate 			YYERROR;
3987c478bd9Sstevel@tonic-gate 		cmd = $$;
3997c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &exit_func;
4007c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
4017c478bd9Sstevel@tonic-gate 		$$->cmd_argv[0] = NULL;
4027c478bd9Sstevel@tonic-gate 	}
4037c478bd9Sstevel@tonic-gate 	| EXIT TOKEN
4047c478bd9Sstevel@tonic-gate 	{
4057c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
4067c478bd9Sstevel@tonic-gate 			YYERROR;
4077c478bd9Sstevel@tonic-gate 		cmd = $$;
4087c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &exit_func;
4097c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 1;
410*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
4117c478bd9Sstevel@tonic-gate 		$$->cmd_argv[1] = NULL;
4127c478bd9Sstevel@tonic-gate 	}
4137c478bd9Sstevel@tonic-gate 
4147c478bd9Sstevel@tonic-gate export_command: EXPORT
4157c478bd9Sstevel@tonic-gate 	{
4167c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
4177c478bd9Sstevel@tonic-gate 			YYERROR;
4187c478bd9Sstevel@tonic-gate 		cmd = $$;
4197c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &export_func;
4207c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
4217c478bd9Sstevel@tonic-gate 		$$->cmd_argv[0] = NULL;
4227c478bd9Sstevel@tonic-gate 	}
4237c478bd9Sstevel@tonic-gate 	| EXPORT TOKEN
4247c478bd9Sstevel@tonic-gate 	{
4257c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
4267c478bd9Sstevel@tonic-gate 			YYERROR;
4277c478bd9Sstevel@tonic-gate 		cmd = $$;
4287c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &export_func;
4297c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 1;
430*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
4317c478bd9Sstevel@tonic-gate 		$$->cmd_argv[1] = NULL;
4327c478bd9Sstevel@tonic-gate 	}
4337c478bd9Sstevel@tonic-gate 	| EXPORT TOKEN TOKEN
4347c478bd9Sstevel@tonic-gate 	{
4357c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
4367c478bd9Sstevel@tonic-gate 			YYERROR;
4377c478bd9Sstevel@tonic-gate 		cmd = $$;
4387c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &export_func;
4397c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 2;
440*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
441*3869a938Sjv227347 		$$->cmd_argv[1] = claim_token($3);
4427c478bd9Sstevel@tonic-gate 		$$->cmd_argv[2] = NULL;
4437c478bd9Sstevel@tonic-gate 	}
4447c478bd9Sstevel@tonic-gate 
4457c478bd9Sstevel@tonic-gate help_command:	HELP
4467c478bd9Sstevel@tonic-gate 	{
4477c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
4487c478bd9Sstevel@tonic-gate 			YYERROR;
4497c478bd9Sstevel@tonic-gate 		cmd = $$;
4507c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &help_func;
4517c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
4527c478bd9Sstevel@tonic-gate 		$$->cmd_argv[0] = NULL;
4537c478bd9Sstevel@tonic-gate 	}
4547c478bd9Sstevel@tonic-gate 	|	HELP TOKEN
4557c478bd9Sstevel@tonic-gate 	{
4567c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
4577c478bd9Sstevel@tonic-gate 			YYERROR;
4587c478bd9Sstevel@tonic-gate 		cmd = $$;
4597c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &help_func;
4607c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 1;
461*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
4627c478bd9Sstevel@tonic-gate 		$$->cmd_argv[1] = NULL;
4637c478bd9Sstevel@tonic-gate 	}
4647c478bd9Sstevel@tonic-gate 
4657c478bd9Sstevel@tonic-gate info_command:	INFO
4667c478bd9Sstevel@tonic-gate 	{
4677c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
4687c478bd9Sstevel@tonic-gate 			YYERROR;
4697c478bd9Sstevel@tonic-gate 		cmd = $$;
4707c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &info_func;
4717c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = RT_UNKNOWN;
4727c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 0;
4737c478bd9Sstevel@tonic-gate 	}
4747c478bd9Sstevel@tonic-gate 	|	INFO TOKEN
4757c478bd9Sstevel@tonic-gate 	{
4767c478bd9Sstevel@tonic-gate 		short_usage(CMD_INFO);
4777c478bd9Sstevel@tonic-gate 		(void) fputs("\n", stderr);
478bbec428eSgjelinek 		usage(B_FALSE, HELP_RES_PROPS);
479*3869a938Sjv227347 		free(claim_token($2));
4807c478bd9Sstevel@tonic-gate 		YYERROR;
4817c478bd9Sstevel@tonic-gate 	}
4827c478bd9Sstevel@tonic-gate 	|	INFO resource_type
4837c478bd9Sstevel@tonic-gate 	{
4847c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
4857c478bd9Sstevel@tonic-gate 			YYERROR;
4867c478bd9Sstevel@tonic-gate 		cmd = $$;
4877c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &info_func;
4887c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = $2;
4897c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 0;
4907c478bd9Sstevel@tonic-gate 	}
491087719fdSdp 	|	INFO ZONENAME
492087719fdSdp 	{
493087719fdSdp 		if (($$ = alloc_cmd()) == NULL)
494087719fdSdp 			YYERROR;
495087719fdSdp 		cmd = $$;
496087719fdSdp 		$$->cmd_handler = &info_func;
497087719fdSdp 		$$->cmd_res_type = RT_ZONENAME;
498087719fdSdp 		$$->cmd_prop_nv_pairs = 0;
499087719fdSdp 	}
5007c478bd9Sstevel@tonic-gate 	|	INFO ZONEPATH
5017c478bd9Sstevel@tonic-gate 	{
5027c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
5037c478bd9Sstevel@tonic-gate 			YYERROR;
5047c478bd9Sstevel@tonic-gate 		cmd = $$;
5057c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &info_func;
5067c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = RT_ZONEPATH;
5077c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 0;
5087c478bd9Sstevel@tonic-gate 	}
5099acbbeafSnn35248 	|	INFO BRAND
5109acbbeafSnn35248 	{
5119acbbeafSnn35248 		if (($$ = alloc_cmd()) == NULL)
5129acbbeafSnn35248 			YYERROR;
5139acbbeafSnn35248 		cmd = $$;
5149acbbeafSnn35248 		$$->cmd_handler = &info_func;
5159acbbeafSnn35248 		$$->cmd_res_type = RT_BRAND;
5169acbbeafSnn35248 		$$->cmd_prop_nv_pairs = 0;
5179acbbeafSnn35248 	}
5187c478bd9Sstevel@tonic-gate 	|	INFO AUTOBOOT
5197c478bd9Sstevel@tonic-gate 	{
5207c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
5217c478bd9Sstevel@tonic-gate 			YYERROR;
5227c478bd9Sstevel@tonic-gate 		cmd = $$;
5237c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &info_func;
5247c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = RT_AUTOBOOT;
5257c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 0;
5267c478bd9Sstevel@tonic-gate 	}
527f4b3ec61Sdh155122 	|	INFO IPTYPE
528f4b3ec61Sdh155122 	{
529f4b3ec61Sdh155122 		if (($$ = alloc_cmd()) == NULL)
530f4b3ec61Sdh155122 			YYERROR;
531f4b3ec61Sdh155122 		cmd = $$;
532f4b3ec61Sdh155122 		$$->cmd_handler = &info_func;
533f4b3ec61Sdh155122 		$$->cmd_res_type = RT_IPTYPE;
534f4b3ec61Sdh155122 		$$->cmd_prop_nv_pairs = 0;
535f4b3ec61Sdh155122 	}
5367c478bd9Sstevel@tonic-gate 	|	INFO POOL
5377c478bd9Sstevel@tonic-gate 	{
5387c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
5397c478bd9Sstevel@tonic-gate 			YYERROR;
5407c478bd9Sstevel@tonic-gate 		cmd = $$;
5417c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &info_func;
5427c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = RT_POOL;
5437c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 0;
5447c478bd9Sstevel@tonic-gate 	}
545ffbafc53Scomay 	|	INFO LIMITPRIV
546ffbafc53Scomay 	{
547ffbafc53Scomay 		if (($$ = alloc_cmd()) == NULL)
548ffbafc53Scomay 			YYERROR;
549ffbafc53Scomay 		cmd = $$;
550ffbafc53Scomay 		$$->cmd_handler = &info_func;
551ffbafc53Scomay 		$$->cmd_res_type = RT_LIMITPRIV;
552ffbafc53Scomay 		$$->cmd_prop_nv_pairs = 0;
553ffbafc53Scomay 	}
5543f2f09c1Sdp 	|	INFO BOOTARGS
5553f2f09c1Sdp 	{
5563f2f09c1Sdp 		if (($$ = alloc_cmd()) == NULL)
5573f2f09c1Sdp 			YYERROR;
5583f2f09c1Sdp 		cmd = $$;
5593f2f09c1Sdp 		$$->cmd_handler = &info_func;
5603f2f09c1Sdp 		$$->cmd_res_type = RT_BOOTARGS;
5613f2f09c1Sdp 		$$->cmd_prop_nv_pairs = 0;
5623f2f09c1Sdp 	}
5630209230bSgjelinek 	|	INFO SCHED
5640209230bSgjelinek 	{
5650209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
5660209230bSgjelinek 			YYERROR;
5670209230bSgjelinek 		cmd = $$;
5680209230bSgjelinek 		$$->cmd_handler = &info_func;
5690209230bSgjelinek 		$$->cmd_res_type = RT_SCHED;
5700209230bSgjelinek 		$$->cmd_prop_nv_pairs = 0;
5710209230bSgjelinek 	}
5720209230bSgjelinek 	|	INFO SHARES
5730209230bSgjelinek 	{
5740209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
5750209230bSgjelinek 			YYERROR;
5760209230bSgjelinek 		cmd = $$;
5770209230bSgjelinek 		$$->cmd_handler = &info_func;
5780209230bSgjelinek 		$$->cmd_res_type = RT_SHARES;
5790209230bSgjelinek 		$$->cmd_prop_nv_pairs = 0;
5800209230bSgjelinek 	}
5810209230bSgjelinek 	|	INFO MAXLWPS
5820209230bSgjelinek 	{
5830209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
5840209230bSgjelinek 			YYERROR;
5850209230bSgjelinek 		cmd = $$;
5860209230bSgjelinek 		$$->cmd_handler = &info_func;
5870209230bSgjelinek 		$$->cmd_res_type = RT_MAXLWPS;
5880209230bSgjelinek 		$$->cmd_prop_nv_pairs = 0;
5890209230bSgjelinek 	}
590ff19e029SMenno Lageman 	|	INFO MAXPROCS
591ff19e029SMenno Lageman 	{
592ff19e029SMenno Lageman 		if (($$ = alloc_cmd()) == NULL)
593ff19e029SMenno Lageman 			YYERROR;
594ff19e029SMenno Lageman 		cmd = $$;
595ff19e029SMenno Lageman 		$$->cmd_handler = &info_func;
596ff19e029SMenno Lageman 		$$->cmd_res_type = RT_MAXPROCS;
597ff19e029SMenno Lageman 		$$->cmd_prop_nv_pairs = 0;
598ff19e029SMenno Lageman 	}
5990209230bSgjelinek 	|	INFO MAXSHMMEM
6000209230bSgjelinek 	{
6010209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
6020209230bSgjelinek 			YYERROR;
6030209230bSgjelinek 		cmd = $$;
6040209230bSgjelinek 		$$->cmd_handler = &info_func;
6050209230bSgjelinek 		$$->cmd_res_type = RT_MAXSHMMEM;
6060209230bSgjelinek 		$$->cmd_prop_nv_pairs = 0;
6070209230bSgjelinek 	}
6080209230bSgjelinek 	|	INFO MAXSHMIDS
6090209230bSgjelinek 	{
6100209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
6110209230bSgjelinek 			YYERROR;
6120209230bSgjelinek 		cmd = $$;
6130209230bSgjelinek 		$$->cmd_handler = &info_func;
6140209230bSgjelinek 		$$->cmd_res_type = RT_MAXSHMIDS;
6150209230bSgjelinek 		$$->cmd_prop_nv_pairs = 0;
6160209230bSgjelinek 	}
6170209230bSgjelinek 	|	INFO MAXMSGIDS
6180209230bSgjelinek 	{
6190209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
6200209230bSgjelinek 			YYERROR;
6210209230bSgjelinek 		cmd = $$;
6220209230bSgjelinek 		$$->cmd_handler = &info_func;
6230209230bSgjelinek 		$$->cmd_res_type = RT_MAXMSGIDS;
6240209230bSgjelinek 		$$->cmd_prop_nv_pairs = 0;
6250209230bSgjelinek 	}
6260209230bSgjelinek 	|	INFO MAXSEMIDS
6270209230bSgjelinek 	{
6280209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
6290209230bSgjelinek 			YYERROR;
6300209230bSgjelinek 		cmd = $$;
6310209230bSgjelinek 		$$->cmd_handler = &info_func;
6320209230bSgjelinek 		$$->cmd_res_type = RT_MAXSEMIDS;
6330209230bSgjelinek 		$$->cmd_prop_nv_pairs = 0;
6340209230bSgjelinek 	}
6355679c89fSjv227347 	|	INFO HOSTID
6365679c89fSjv227347 	{
6375679c89fSjv227347 		if (($$ = alloc_cmd()) == NULL)
6385679c89fSjv227347 			YYERROR;
6395679c89fSjv227347 		cmd = $$;
6405679c89fSjv227347 		$$->cmd_handler = &info_func;
6415679c89fSjv227347 		$$->cmd_res_type = RT_HOSTID;
6425679c89fSjv227347 		$$->cmd_prop_nv_pairs = 0;
6435679c89fSjv227347 	}
6440fbb751dSJohn Levon 	|	INFO FS_ALLOWED
6450fbb751dSJohn Levon 	{
6460fbb751dSJohn Levon 		if (($$ = alloc_cmd()) == NULL)
6470fbb751dSJohn Levon 			YYERROR;
6480fbb751dSJohn Levon 		cmd = $$;
6490fbb751dSJohn Levon 		$$->cmd_handler = &info_func;
6500fbb751dSJohn Levon 		$$->cmd_res_type = RT_FS_ALLOWED;
6510fbb751dSJohn Levon 		$$->cmd_prop_nv_pairs = 0;
6520fbb751dSJohn Levon 	}
6537c478bd9Sstevel@tonic-gate 	|	INFO resource_type property_name EQUAL property_value
6547c478bd9Sstevel@tonic-gate 	{
6557c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
6567c478bd9Sstevel@tonic-gate 			YYERROR;
6577c478bd9Sstevel@tonic-gate 		cmd = $$;
6587c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &info_func;
6597c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = $2;
6607c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 1;
6617c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $3;
6627c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
6637c478bd9Sstevel@tonic-gate 	}
6647c478bd9Sstevel@tonic-gate 	|	INFO resource_type property_name EQUAL property_value property_name EQUAL property_value
6657c478bd9Sstevel@tonic-gate 	{
6667c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
6677c478bd9Sstevel@tonic-gate 			YYERROR;
6687c478bd9Sstevel@tonic-gate 		cmd = $$;
6697c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &info_func;
6707c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = $2;
6717c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 2;
6727c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $3;
6737c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
6747c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[1] = $6;
6757c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[1] = &property[1];
6767c478bd9Sstevel@tonic-gate 	}
6777c478bd9Sstevel@tonic-gate 	|	INFO resource_type property_name EQUAL property_value property_name EQUAL property_value property_name EQUAL property_value
6787c478bd9Sstevel@tonic-gate 	{
6797c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
6807c478bd9Sstevel@tonic-gate 			YYERROR;
6817c478bd9Sstevel@tonic-gate 		cmd = $$;
6827c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &info_func;
6837c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = $2;
6847c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 3;
6857c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $3;
6867c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
6877c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[1] = $6;
6887c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[1] = &property[1];
6897c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[2] = $9;
6907c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[2] = &property[2];
6917c478bd9Sstevel@tonic-gate 	}
6927c478bd9Sstevel@tonic-gate 
6937c478bd9Sstevel@tonic-gate remove_command: REMOVE
6947c478bd9Sstevel@tonic-gate 	{
6957c478bd9Sstevel@tonic-gate 		short_usage(CMD_REMOVE);
6967c478bd9Sstevel@tonic-gate 		(void) fputs("\n", stderr);
697bbec428eSgjelinek 		usage(B_FALSE, HELP_RES_PROPS);
6987c478bd9Sstevel@tonic-gate 		YYERROR;
6997c478bd9Sstevel@tonic-gate 	}
7000209230bSgjelinek 	| REMOVE TOKEN
7017c478bd9Sstevel@tonic-gate 	{
7027c478bd9Sstevel@tonic-gate 		short_usage(CMD_REMOVE);
7030209230bSgjelinek 		(void) fputs("\n", stderr);
704bbec428eSgjelinek 		usage(B_FALSE, HELP_RES_PROPS);
705*3869a938Sjv227347 		free(claim_token($2));
7067c478bd9Sstevel@tonic-gate 		YYERROR;
7077c478bd9Sstevel@tonic-gate 	}
7080209230bSgjelinek 	| REMOVE resource_type
7090209230bSgjelinek 	{
7100209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
7110209230bSgjelinek 			YYERROR;
7120209230bSgjelinek 		cmd = $$;
7130209230bSgjelinek 		$$->cmd_handler = &remove_func;
7140209230bSgjelinek 		$$->cmd_res_type = $2;
7150209230bSgjelinek 	}
7160209230bSgjelinek 	| REMOVE TOKEN resource_type
7170209230bSgjelinek 	{
7180209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
7190209230bSgjelinek 			YYERROR;
7200209230bSgjelinek 		cmd = $$;
7210209230bSgjelinek 		$$->cmd_handler = &remove_func;
7220209230bSgjelinek 		$$->cmd_res_type = $3;
7230209230bSgjelinek 		$$->cmd_argc = 1;
724*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
7250209230bSgjelinek 		$$->cmd_argv[1] = NULL;
7260209230bSgjelinek 	}
7277c478bd9Sstevel@tonic-gate 	| REMOVE property_name property_value
7287c478bd9Sstevel@tonic-gate 	{
7297c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
7307c478bd9Sstevel@tonic-gate 			YYERROR;
7317c478bd9Sstevel@tonic-gate 		cmd = $$;
7327c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &remove_func;
7337c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 1;
7347c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $2;
7357c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
7367c478bd9Sstevel@tonic-gate 	}
7377c478bd9Sstevel@tonic-gate 	| REMOVE resource_type property_name EQUAL property_value
7387c478bd9Sstevel@tonic-gate 	{
7397c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
7407c478bd9Sstevel@tonic-gate 			YYERROR;
7417c478bd9Sstevel@tonic-gate 		cmd = $$;
7427c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &remove_func;
7437c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = $2;
7447c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 1;
7457c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $3;
7467c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
7477c478bd9Sstevel@tonic-gate 	}
7487c478bd9Sstevel@tonic-gate 	| REMOVE resource_type property_name EQUAL property_value property_name EQUAL property_value
7497c478bd9Sstevel@tonic-gate 	{
7507c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
7517c478bd9Sstevel@tonic-gate 			YYERROR;
7527c478bd9Sstevel@tonic-gate 		cmd = $$;
7537c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &remove_func;
7547c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = $2;
7557c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 2;
7567c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $3;
7577c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
7587c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[1] = $6;
7597c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[1] = &property[1];
7607c478bd9Sstevel@tonic-gate 	}
7617c478bd9Sstevel@tonic-gate 	| REMOVE resource_type property_name EQUAL property_value property_name EQUAL property_value property_name EQUAL property_value
7627c478bd9Sstevel@tonic-gate 	{
7637c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
7647c478bd9Sstevel@tonic-gate 			YYERROR;
7657c478bd9Sstevel@tonic-gate 		cmd = $$;
7667c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &remove_func;
7677c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = $2;
7687c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 3;
7697c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $3;
7707c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
7717c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[1] = $6;
7727c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[1] = &property[1];
7737c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[2] = $9;
7747c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[2] = &property[2];
7757c478bd9Sstevel@tonic-gate 	}
7767c478bd9Sstevel@tonic-gate 
7777c478bd9Sstevel@tonic-gate revert_command: REVERT
7787c478bd9Sstevel@tonic-gate 	{
7797c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
7807c478bd9Sstevel@tonic-gate 			YYERROR;
7817c478bd9Sstevel@tonic-gate 		cmd = $$;
7827c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &revert_func;
7837c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
7847c478bd9Sstevel@tonic-gate 		$$->cmd_argv[0] = NULL;
7857c478bd9Sstevel@tonic-gate 	}
7867c478bd9Sstevel@tonic-gate 	| REVERT TOKEN
7877c478bd9Sstevel@tonic-gate 	{
7887c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
7897c478bd9Sstevel@tonic-gate 			YYERROR;
7907c478bd9Sstevel@tonic-gate 		cmd = $$;
7917c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &revert_func;
7927c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 1;
793*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
7947c478bd9Sstevel@tonic-gate 		$$->cmd_argv[1] = NULL;
7957c478bd9Sstevel@tonic-gate 	}
7967c478bd9Sstevel@tonic-gate 
7977c478bd9Sstevel@tonic-gate select_command: SELECT
7987c478bd9Sstevel@tonic-gate 	{
7997c478bd9Sstevel@tonic-gate 		short_usage(CMD_SELECT);
8007c478bd9Sstevel@tonic-gate 		(void) fputs("\n", stderr);
801bbec428eSgjelinek 		usage(B_FALSE, HELP_RES_PROPS);
8027c478bd9Sstevel@tonic-gate 		YYERROR;
8037c478bd9Sstevel@tonic-gate 	}
8040209230bSgjelinek 	| SELECT PSET
8050209230bSgjelinek 	{
8060209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
8070209230bSgjelinek 			YYERROR;
8080209230bSgjelinek 		cmd = $$;
8090209230bSgjelinek 		$$->cmd_handler = &select_func;
8100209230bSgjelinek 		$$->cmd_res_type = RT_DCPU;
8110209230bSgjelinek 	}
812c97ad5cdSakolb 	| SELECT PCAP
813c97ad5cdSakolb 	{
814c97ad5cdSakolb 		if (($$ = alloc_cmd()) == NULL)
815c97ad5cdSakolb 			YYERROR;
816c97ad5cdSakolb 		cmd = $$;
817c97ad5cdSakolb 		$$->cmd_handler = &select_func;
818c97ad5cdSakolb 		$$->cmd_res_type = RT_PCAP;
819c97ad5cdSakolb 	}
8200209230bSgjelinek 	| SELECT MCAP
8210209230bSgjelinek 	{
8220209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
8230209230bSgjelinek 			YYERROR;
8240209230bSgjelinek 		cmd = $$;
8250209230bSgjelinek 		$$->cmd_handler = &select_func;
8260209230bSgjelinek 		$$->cmd_res_type = RT_MCAP;
8270209230bSgjelinek 	}
8287c478bd9Sstevel@tonic-gate 	| SELECT resource_type
8297c478bd9Sstevel@tonic-gate 	{
8307c478bd9Sstevel@tonic-gate 		short_usage(CMD_SELECT);
8317c478bd9Sstevel@tonic-gate 		YYERROR;
8327c478bd9Sstevel@tonic-gate 	}
8337c478bd9Sstevel@tonic-gate 	| SELECT resource_type property_name EQUAL property_value
8347c478bd9Sstevel@tonic-gate 	{
8357c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
8367c478bd9Sstevel@tonic-gate 			YYERROR;
8377c478bd9Sstevel@tonic-gate 		cmd = $$;
8387c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &select_func;
8397c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = $2;
8407c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 1;
8417c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $3;
8427c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
8437c478bd9Sstevel@tonic-gate 	}
8447c478bd9Sstevel@tonic-gate 	| SELECT resource_type property_name EQUAL property_value property_name EQUAL property_value
8457c478bd9Sstevel@tonic-gate 	{
8467c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
8477c478bd9Sstevel@tonic-gate 			YYERROR;
8487c478bd9Sstevel@tonic-gate 		cmd = $$;
8497c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &select_func;
8507c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = $2;
8517c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 2;
8527c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $3;
8537c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
8547c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[1] = $6;
8557c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[1] = &property[1];
8567c478bd9Sstevel@tonic-gate 	}
8577c478bd9Sstevel@tonic-gate 	| SELECT resource_type property_name EQUAL property_value property_name EQUAL property_value property_name EQUAL property_value
8587c478bd9Sstevel@tonic-gate 	{
8597c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
8607c478bd9Sstevel@tonic-gate 			YYERROR;
8617c478bd9Sstevel@tonic-gate 		cmd = $$;
8627c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &select_func;
8637c478bd9Sstevel@tonic-gate 		$$->cmd_res_type = $2;
8647c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 3;
8657c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $3;
8667c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
8677c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[1] = $6;
8687c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[1] = &property[1];
8697c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[2] = $9;
8707c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[2] = &property[2];
8717c478bd9Sstevel@tonic-gate 	}
8727c478bd9Sstevel@tonic-gate 
8737c478bd9Sstevel@tonic-gate set_command: SET
8747c478bd9Sstevel@tonic-gate 	{
8757c478bd9Sstevel@tonic-gate 		short_usage(CMD_SET);
8767c478bd9Sstevel@tonic-gate 		(void) fputs("\n", stderr);
877bbec428eSgjelinek 		usage(B_FALSE, HELP_PROPS);
8787c478bd9Sstevel@tonic-gate 		YYERROR;
8797c478bd9Sstevel@tonic-gate 	}
8807c478bd9Sstevel@tonic-gate 	| SET property_name EQUAL OPEN_SQ_BRACKET CLOSE_SQ_BRACKET
8817c478bd9Sstevel@tonic-gate 	{
8827c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
8837c478bd9Sstevel@tonic-gate 			YYERROR;
8847c478bd9Sstevel@tonic-gate 		cmd = $$;
8857c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &set_func;
8867c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 0;
8877c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $2;
8887c478bd9Sstevel@tonic-gate 		property[0].pv_type = PROP_VAL_LIST;
8897c478bd9Sstevel@tonic-gate 		property[0].pv_list = NULL;
8907c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
8917c478bd9Sstevel@tonic-gate 	}
8927c478bd9Sstevel@tonic-gate 	| SET property_name EQUAL property_value
8937c478bd9Sstevel@tonic-gate 	{
8947c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
8957c478bd9Sstevel@tonic-gate 			YYERROR;
8967c478bd9Sstevel@tonic-gate 		cmd = $$;
8977c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &set_func;
8987c478bd9Sstevel@tonic-gate 		$$->cmd_prop_nv_pairs = 1;
8997c478bd9Sstevel@tonic-gate 		$$->cmd_prop_name[0] = $2;
9007c478bd9Sstevel@tonic-gate 		$$->cmd_property_ptr[0] = &property[0];
9017c478bd9Sstevel@tonic-gate 	}
902555afedfScarlsonj 	| SET TOKEN ZONEPATH EQUAL property_value
903555afedfScarlsonj 	{
904555afedfScarlsonj 		if (($$ = alloc_cmd()) == NULL)
905555afedfScarlsonj 			YYERROR;
906555afedfScarlsonj 		cmd = $$;
907555afedfScarlsonj 		$$->cmd_argc = 1;
908*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
909555afedfScarlsonj 		$$->cmd_argv[1] = NULL;
910555afedfScarlsonj 		$$->cmd_handler = &set_func;
911555afedfScarlsonj 		$$->cmd_prop_nv_pairs = 1;
912555afedfScarlsonj 		$$->cmd_prop_name[0] = PT_ZONEPATH;
913555afedfScarlsonj 		$$->cmd_property_ptr[0] = &property[0];
914555afedfScarlsonj 	}
9157c478bd9Sstevel@tonic-gate 
9160209230bSgjelinek clear_command: CLEAR
9170209230bSgjelinek 	{
9180209230bSgjelinek 		short_usage(CMD_CLEAR);
9190209230bSgjelinek 		(void) fputs("\n", stderr);
920bbec428eSgjelinek 		usage(B_FALSE, HELP_PROPS);
9210209230bSgjelinek 		YYERROR;
9220209230bSgjelinek 	}
9230209230bSgjelinek 	| CLEAR property_name
9240209230bSgjelinek 	{
9250209230bSgjelinek 		if (($$ = alloc_cmd()) == NULL)
9260209230bSgjelinek 			YYERROR;
9270209230bSgjelinek 		cmd = $$;
9280209230bSgjelinek 		$$->cmd_handler = &clear_func;
9290209230bSgjelinek 		$$->cmd_res_type = $2;
9300209230bSgjelinek 	}
9310209230bSgjelinek 
9327c478bd9Sstevel@tonic-gate verify_command: VERIFY
9337c478bd9Sstevel@tonic-gate 	{
9347c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
9357c478bd9Sstevel@tonic-gate 			YYERROR;
9367c478bd9Sstevel@tonic-gate 		cmd = $$;
9377c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &verify_func;
9387c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 0;
9397c478bd9Sstevel@tonic-gate 		$$->cmd_argv[0] = NULL;
9407c478bd9Sstevel@tonic-gate 	}
9417c478bd9Sstevel@tonic-gate 	| VERIFY TOKEN
9427c478bd9Sstevel@tonic-gate 	{
9437c478bd9Sstevel@tonic-gate 		if (($$ = alloc_cmd()) == NULL)
9447c478bd9Sstevel@tonic-gate 			YYERROR;
9457c478bd9Sstevel@tonic-gate 		cmd = $$;
9467c478bd9Sstevel@tonic-gate 		$$->cmd_handler = &verify_func;
9477c478bd9Sstevel@tonic-gate 		$$->cmd_argc = 1;
948*3869a938Sjv227347 		$$->cmd_argv[0] = claim_token($2);
9497c478bd9Sstevel@tonic-gate 		$$->cmd_argv[1] = NULL;
9507c478bd9Sstevel@tonic-gate 	}
9517c478bd9Sstevel@tonic-gate 
9527c478bd9Sstevel@tonic-gate resource_type: NET	{ $$ = RT_NET; }
9537c478bd9Sstevel@tonic-gate 	| FS		{ $$ = RT_FS; }
9547c478bd9Sstevel@tonic-gate 	| DEVICE	{ $$ = RT_DEVICE; }
9557c478bd9Sstevel@tonic-gate 	| RCTL		{ $$ = RT_RCTL; }
9567c478bd9Sstevel@tonic-gate 	| ATTR		{ $$ = RT_ATTR; }
957fa9e4066Sahrens 	| DATASET	{ $$ = RT_DATASET; }
9580209230bSgjelinek 	| PSET		{ $$ = RT_DCPU; }
959c97ad5cdSakolb 	| PCAP		{ $$ = RT_PCAP; }
9600209230bSgjelinek 	| MCAP		{ $$ = RT_MCAP; }
961cb8a054bSGlenn Faden 	| ADMIN		{ $$ = RT_ADMIN; }
9627c478bd9Sstevel@tonic-gate 
9637c478bd9Sstevel@tonic-gate property_name: SPECIAL	{ $$ = PT_SPECIAL; }
9647c478bd9Sstevel@tonic-gate 	| RAW		{ $$ = PT_RAW; }
9657c478bd9Sstevel@tonic-gate 	| DIR		{ $$ = PT_DIR; }
9667c478bd9Sstevel@tonic-gate 	| TYPE		{ $$ = PT_TYPE; }
9677c478bd9Sstevel@tonic-gate 	| OPTIONS	{ $$ = PT_OPTIONS; }
968087719fdSdp 	| ZONENAME	{ $$ = PT_ZONENAME; }
9697c478bd9Sstevel@tonic-gate 	| ZONEPATH	{ $$ = PT_ZONEPATH; }
9707c478bd9Sstevel@tonic-gate 	| AUTOBOOT	{ $$ = PT_AUTOBOOT; }
971f4b3ec61Sdh155122 	| IPTYPE	{ $$ = PT_IPTYPE; }
9727c478bd9Sstevel@tonic-gate 	| POOL		{ $$ = PT_POOL; }
973ffbafc53Scomay 	| LIMITPRIV	{ $$ = PT_LIMITPRIV; }
9743f2f09c1Sdp 	| BOOTARGS	{ $$ = PT_BOOTARGS; }
9757c478bd9Sstevel@tonic-gate 	| ADDRESS	{ $$ = PT_ADDRESS; }
976550b6e40SSowmini Varadhan 	| ALLOWED_ADDRESS	{ $$ = PT_ALLOWED_ADDRESS; }
9777c478bd9Sstevel@tonic-gate 	| PHYSICAL	{ $$ = PT_PHYSICAL; }
978de860bd9Sgfaden 	| DEFROUTER	{ $$ = PT_DEFROUTER; }
9797c478bd9Sstevel@tonic-gate 	| NAME		{ $$ = PT_NAME; }
9807c478bd9Sstevel@tonic-gate 	| VALUE		{ $$ = PT_VALUE; }
9817c478bd9Sstevel@tonic-gate 	| MATCH		{ $$ = PT_MATCH; }
9827c478bd9Sstevel@tonic-gate 	| PRIV		{ $$ = PT_PRIV; }
9837c478bd9Sstevel@tonic-gate 	| LIMIT		{ $$ = PT_LIMIT; }
9847c478bd9Sstevel@tonic-gate 	| ACTION	{ $$ = PT_ACTION; }
9859acbbeafSnn35248 	| BRAND		{ $$ = PT_BRAND; }
9860209230bSgjelinek 	| NCPUS		{ $$ = PT_NCPUS; }
9870209230bSgjelinek 	| LOCKED	{ $$ = PT_LOCKED; }
9880209230bSgjelinek 	| SWAP		{ $$ = PT_SWAP; }
9890209230bSgjelinek 	| IMPORTANCE	{ $$ = PT_IMPORTANCE; }
9900209230bSgjelinek 	| SHARES	{ $$ = PT_SHARES; }
9910209230bSgjelinek 	| MAXLWPS	{ $$ = PT_MAXLWPS; }
992ff19e029SMenno Lageman 	| MAXPROCS	{ $$ = PT_MAXPROCS; }
9930209230bSgjelinek 	| MAXSHMMEM	{ $$ = PT_MAXSHMMEM; }
9940209230bSgjelinek 	| MAXSHMIDS	{ $$ = PT_MAXSHMIDS; }
9950209230bSgjelinek 	| MAXMSGIDS	{ $$ = PT_MAXMSGIDS; }
9960209230bSgjelinek 	| MAXSEMIDS	{ $$ = PT_MAXSEMIDS; }
9970209230bSgjelinek 	| SCHED		{ $$ = PT_SCHED; }
9985679c89fSjv227347 	| HOSTID	{ $$ = PT_HOSTID; }
999cb8a054bSGlenn Faden 	| USER		{ $$ = PT_USER; }
1000cb8a054bSGlenn Faden 	| AUTHS 	{ $$ = PT_AUTHS; }
10010fbb751dSJohn Levon 	| FS_ALLOWED	{ $$ = PT_FS_ALLOWED; }
10027c478bd9Sstevel@tonic-gate 
10037c478bd9Sstevel@tonic-gate /*
10047c478bd9Sstevel@tonic-gate  * The grammar builds data structures from the bottom up.  Thus various
10057c478bd9Sstevel@tonic-gate  * strings are lexed into TOKENs or commands or resource or property values.
10067c478bd9Sstevel@tonic-gate  * Below is where the resource and property values are built up into more
10077c478bd9Sstevel@tonic-gate  * complex data structures.
10087c478bd9Sstevel@tonic-gate  *
10097c478bd9Sstevel@tonic-gate  * There are three kinds of properties: simple (single valued), complex
10107c478bd9Sstevel@tonic-gate  * (one or more name=value pairs) and list (concatenation of one or more
10117c478bd9Sstevel@tonic-gate  * simple or complex properties).
10127c478bd9Sstevel@tonic-gate  *
10137c478bd9Sstevel@tonic-gate  * So the property structure has a type which is one of these, and the
10147c478bd9Sstevel@tonic-gate  * corresponding _simple, _complex or _list is set to the corresponding
10157c478bd9Sstevel@tonic-gate  * lower-level data structure.
10167c478bd9Sstevel@tonic-gate  */
10177c478bd9Sstevel@tonic-gate 
10187c478bd9Sstevel@tonic-gate property_value: simple_prop_val
10197c478bd9Sstevel@tonic-gate 	{
10207c478bd9Sstevel@tonic-gate 		property[num_prop_vals].pv_type = PROP_VAL_SIMPLE;
10217c478bd9Sstevel@tonic-gate 		property[num_prop_vals].pv_simple = $1;
10227c478bd9Sstevel@tonic-gate 		if (list[num_prop_vals] != NULL) {
10237c478bd9Sstevel@tonic-gate 			free_outer_list(list[num_prop_vals]);
10247c478bd9Sstevel@tonic-gate 			list[num_prop_vals] = NULL;
10257c478bd9Sstevel@tonic-gate 		}
10267c478bd9Sstevel@tonic-gate 		num_prop_vals++;
10277c478bd9Sstevel@tonic-gate 	}
10287c478bd9Sstevel@tonic-gate 	| complex_prop_val
10297c478bd9Sstevel@tonic-gate 	{
10307c478bd9Sstevel@tonic-gate 		property[num_prop_vals].pv_type = PROP_VAL_COMPLEX;
10317c478bd9Sstevel@tonic-gate 		property[num_prop_vals].pv_complex = complex;
10327c478bd9Sstevel@tonic-gate 		if (list[num_prop_vals] != NULL) {
10337c478bd9Sstevel@tonic-gate 			free_outer_list(list[num_prop_vals]);
10347c478bd9Sstevel@tonic-gate 			list[num_prop_vals] = NULL;
10357c478bd9Sstevel@tonic-gate 		}
10367c478bd9Sstevel@tonic-gate 		num_prop_vals++;
10377c478bd9Sstevel@tonic-gate 	}
10387c478bd9Sstevel@tonic-gate 	| list_prop_val
10397c478bd9Sstevel@tonic-gate 	{
10407c478bd9Sstevel@tonic-gate 		property[num_prop_vals].pv_type = PROP_VAL_LIST;
10417c478bd9Sstevel@tonic-gate 		property[num_prop_vals].pv_list = list[num_prop_vals];
10427c478bd9Sstevel@tonic-gate 		num_prop_vals++;
10437c478bd9Sstevel@tonic-gate 	}
10447c478bd9Sstevel@tonic-gate 
10457c478bd9Sstevel@tonic-gate /*
10467c478bd9Sstevel@tonic-gate  * One level lower, lists are made up of simple or complex values, so
10477c478bd9Sstevel@tonic-gate  * simple_prop_val and complex_prop_val fill in a list structure and
10487c478bd9Sstevel@tonic-gate  * insert it into the linked list which is built up.  And because
10497c478bd9Sstevel@tonic-gate  * complex properties can have multiple name=value pairs, we keep
10507c478bd9Sstevel@tonic-gate  * track of them in another linked list.
10517c478bd9Sstevel@tonic-gate  *
10527c478bd9Sstevel@tonic-gate  * The complex and list structures for the linked lists are allocated
10537c478bd9Sstevel@tonic-gate  * below, and freed by recursive functions which are ultimately called
10547c478bd9Sstevel@tonic-gate  * by free_cmd(), which is called from the top-most "commands" part of
10557c478bd9Sstevel@tonic-gate  * the grammar.
1056c94c1ef0Sjv227347  *
1057c94c1ef0Sjv227347  * NOTE: simple_prop_val and complex_piece need reduction rules for
1058c94c1ef0Sjv227347  * property_name and resource_type so that the parser will accept property names
1059c94c1ef0Sjv227347  * and resource type names as property values.
10607c478bd9Sstevel@tonic-gate  */
10617c478bd9Sstevel@tonic-gate 
10627c478bd9Sstevel@tonic-gate simple_prop_val: TOKEN
10637c478bd9Sstevel@tonic-gate 	{
1064c94c1ef0Sjv227347 		$$ = simple_prop_val_func($1);
1065*3869a938Sjv227347 		free(claim_token($1));
1066c94c1ef0Sjv227347 		if ($$ == NULL)
10677c478bd9Sstevel@tonic-gate 			YYERROR;
10687c478bd9Sstevel@tonic-gate 	}
1069c94c1ef0Sjv227347 	| resource_type
1070c94c1ef0Sjv227347 	{
1071c94c1ef0Sjv227347 		if (($$ = simple_prop_val_func(res_types[$1])) == NULL)
1072c94c1ef0Sjv227347 			YYERROR;
1073c94c1ef0Sjv227347 	}
1074c94c1ef0Sjv227347 	| property_name
1075c94c1ef0Sjv227347 	{
1076c94c1ef0Sjv227347 		if (($$ = simple_prop_val_func(prop_types[$1])) == NULL)
1077c94c1ef0Sjv227347 			YYERROR;
10787c478bd9Sstevel@tonic-gate 	}
10797c478bd9Sstevel@tonic-gate 
10807c478bd9Sstevel@tonic-gate complex_prop_val: OPEN_PAREN complex_piece CLOSE_PAREN
10817c478bd9Sstevel@tonic-gate 	{
10827c478bd9Sstevel@tonic-gate 		if ((new_list = alloc_list()) == NULL)
10837c478bd9Sstevel@tonic-gate 			YYERROR;
10847c478bd9Sstevel@tonic-gate 		new_list->lp_simple = NULL;
10857c478bd9Sstevel@tonic-gate 		new_list->lp_complex = complex;
10867c478bd9Sstevel@tonic-gate 		new_list->lp_next = NULL;
10877c478bd9Sstevel@tonic-gate 		if (list[num_prop_vals] == NULL) {
10887c478bd9Sstevel@tonic-gate 			list[num_prop_vals] = new_list;
10897c478bd9Sstevel@tonic-gate 		} else {
10907c478bd9Sstevel@tonic-gate 			for (tmp_list = list[num_prop_vals]; tmp_list != NULL;
10917c478bd9Sstevel@tonic-gate 			    tmp_list = tmp_list->lp_next)
10927c478bd9Sstevel@tonic-gate 				last = tmp_list;
10937c478bd9Sstevel@tonic-gate 			last->lp_next = new_list;
10947c478bd9Sstevel@tonic-gate 		}
10957c478bd9Sstevel@tonic-gate 	}
10967c478bd9Sstevel@tonic-gate 
10977c478bd9Sstevel@tonic-gate complex_piece: property_name EQUAL TOKEN
10987c478bd9Sstevel@tonic-gate 	{
1099c94c1ef0Sjv227347 		$$ = complex_piece_func($1, $3, NULL);
1100*3869a938Sjv227347 		free(claim_token($3));
1101c94c1ef0Sjv227347 		if ($$ == NULL)
11027c478bd9Sstevel@tonic-gate 			YYERROR;
1103c94c1ef0Sjv227347 	}
1104c94c1ef0Sjv227347 	| property_name EQUAL resource_type
1105c94c1ef0Sjv227347 	{
1106c94c1ef0Sjv227347 		if (($$ = complex_piece_func($1, res_types[$3], NULL)) == NULL)
1107c94c1ef0Sjv227347 			YYERROR;
1108c94c1ef0Sjv227347 	}
1109c94c1ef0Sjv227347 	| property_name EQUAL property_name
1110c94c1ef0Sjv227347 	{
1111c94c1ef0Sjv227347 		if (($$ = complex_piece_func($1, prop_types[$3], NULL)) == NULL)
1112c94c1ef0Sjv227347 			YYERROR;
11137c478bd9Sstevel@tonic-gate 	}
11147c478bd9Sstevel@tonic-gate 	| property_name EQUAL TOKEN COMMA complex_piece
11157c478bd9Sstevel@tonic-gate 	{
1116c94c1ef0Sjv227347 		$$ = complex_piece_func($1, $3, complex);
1117*3869a938Sjv227347 		free(claim_token($3));
1118c94c1ef0Sjv227347 		if ($$ == NULL)
11197c478bd9Sstevel@tonic-gate 			YYERROR;
1120c94c1ef0Sjv227347 	}
1121c94c1ef0Sjv227347 	| property_name EQUAL resource_type COMMA complex_piece
1122c94c1ef0Sjv227347 	{
1123c94c1ef0Sjv227347 		if (($$ = complex_piece_func($1, res_types[$3], complex)) ==
1124c94c1ef0Sjv227347 		    NULL)
1125c94c1ef0Sjv227347 			YYERROR;
1126c94c1ef0Sjv227347 	}
1127c94c1ef0Sjv227347 	| property_name EQUAL property_name COMMA complex_piece
1128c94c1ef0Sjv227347 	{
1129c94c1ef0Sjv227347 		if (($$ = complex_piece_func($1, prop_types[$3], complex)) ==
1130c94c1ef0Sjv227347 		    NULL)
1131c94c1ef0Sjv227347 			YYERROR;
11327c478bd9Sstevel@tonic-gate 	}
11337c478bd9Sstevel@tonic-gate 
11347c478bd9Sstevel@tonic-gate list_piece: simple_prop_val
11357c478bd9Sstevel@tonic-gate 	| complex_prop_val
11367c478bd9Sstevel@tonic-gate 	| simple_prop_val COMMA list_piece
11377c478bd9Sstevel@tonic-gate 	| complex_prop_val COMMA list_piece
11387c478bd9Sstevel@tonic-gate 
11397c478bd9Sstevel@tonic-gate list_prop_val: OPEN_SQ_BRACKET list_piece CLOSE_SQ_BRACKET
11407c478bd9Sstevel@tonic-gate %%
1141