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