1 %{
2 /*
3 * CDDL HEADER START
4 *
5 * The contents of this file are subject to the terms of the
6 * Common Development and Distribution License (the "License").
7 * You may not use this file except in compliance with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22
23 /*
24 * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
25 * Use is subject to license terms.
26 * Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
27 */
28
29 #include <stdio.h>
30 #include <sys/types.h>
31
32 #include "nwamcfg.h"
33
34 static cmd_t *cmd = NULL; /* Command being processed */
35
36 /* yacc externals */
37 extern int yydebug;
38 extern void yyerror(char *s);
39
40 extern boolean_t newline_terminated;
41
42 %}
43
44 %union {
45 int ival;
46 char *strval;
47 cmd_t *cmd;
48 }
49
50 %start commands
51
52 %token CANCEL CLEAR COMMIT CREATE DESTROY END EXIT EXPORT GET HELP
53 %token LIST REVERT SELECT SET VERIFY WALKPROP
54 %token LOC NCP NCU ENM WLAN
55 %token PHYS IP
56 %token TOKEN EQUAL OPTION
57 %token UNKNOWN ACTIVATION_MODE CONDITIONS ENABLED
58 %token TYPE CLASS PARENT PRIORITY_GROUP PRIORITY_MODE
59 %token LINK_MACADDR LINK_AUTOPUSH LINK_MTU
60 %token IP_VERSION IPV4_ADDRSRC IPV4_ADDR IPV4_DEFAULT_ROUTE
61 %token IPV6_ADDRSRC IPV6_ADDR IPV6_DEFAULT_ROUTE
62 %token ENM_STATE ENM_FMRI ENM_START ENM_STOP
63 %token LOC_NAMESERVICES LOC_NAMESERVICES_CONFIG
64 %token LOC_DNS_CONFIGSRC LOC_DNS_DOMAIN LOC_DNS_SERVERS LOC_DNS_SEARCH
65 %token LOC_NIS_CONFIGSRC LOC_NIS_SERVERS
66 %token LOC_LDAP_CONFIGSRC LOC_LDAP_SERVERS
67 %token LOC_DEFAULT_DOMAIN LOC_NFSV4_DOMAIN
68 %token LOC_IPF_CONFIG LOC_IPF_V6_CONFIG
69 %token LOC_IPNAT_CONFIG LOC_IPPOOL_CONFIG LOC_IKE_CONFIG LOC_IPSECPOL_CONFIG
70 %token WLAN_BSSIDS WLAN_PRIORITY WLAN_KEYNAME WLAN_KEYSLOT WLAN_SECURITY_MODE
71 %token IP_PRIMARY IP_REQHOST
72
73 %type <strval> TOKEN EQUAL OPTION
74 %type <ival> resource1_type LOC NCP ENM WLAN
75 %type <ival> resource2_type NCU
76 %type <ival> ncu_class_type PHYS IP
77 %type <ival> property_type UNKNOWN ACTIVATION_MODE CONDITIONS ENABLED
78 TYPE CLASS PARENT PRIORITY_GROUP PRIORITY_MODE
79 LINK_MACADDR LINK_AUTOPUSH LINK_MTU
80 IP_VERSION IPV4_ADDRSRC IPV4_ADDR IPV4_DEFAULT_ROUTE
81 IPV6_ADDRSRC IPV6_ADDR IPV6_DEFAULT_ROUTE
82 ENM_STATE ENM_FMRI ENM_START ENM_STOP
83 LOC_NAMESERVICES LOC_NAMESERVICES_CONFIG
84 LOC_DNS_CONFIGSRC LOC_DNS_DOMAIN LOC_DNS_SERVERS LOC_DNS_SEARCH
85 LOC_NIS_CONFIGSRC LOC_NIS_SERVERS
86 LOC_LDAP_CONFIGSRC LOC_LDAP_SERVERS
87 LOC_DEFAULT_DOMAIN LOC_NFSV4_DOMAIN
88 LOC_IPF_CONFIG LOC_IPF_V6_CONFIG
89 LOC_IPNAT_CONFIG LOC_IPPOOL_CONFIG LOC_IKE_CONFIG LOC_IPSECPOL_CONFIG
90 WLAN_BSSIDS WLAN_PRIORITY WLAN_KEYNAME WLAN_KEYSLOT WLAN_SECURITY_MODE
91 IP_PRIMARY IP_REQHOST
92 %type <cmd> command
93 %type <cmd> cancel_command CANCEL
94 %type <cmd> clear_command CLEAR
95 %type <cmd> commit_command COMMIT
96 %type <cmd> create_command CREATE
97 %type <cmd> destroy_command DESTROY
98 %type <cmd> end_command END
99 %type <cmd> exit_command EXIT
100 %type <cmd> export_command EXPORT
101 %type <cmd> get_command GET
102 %type <cmd> help_command HELP
103 %type <cmd> list_command LIST
104 %type <cmd> revert_command REVERT
105 %type <cmd> select_command SELECT
106 %type <cmd> set_command SET
107 %type <cmd> verify_command VERIFY
108 %type <cmd> walkprop_command WALKPROP
109 %type <cmd> terminator
110
111 %%
112
113 commands: command terminator
114 {
115 if ($1 != NULL) {
116 if ($1->cmd_handler != NULL)
117 if (check_scope($1->cmd_num))
118 $1->cmd_handler($1);
119 free_cmd($1);
120 }
121 return (0);
122 }
123 | command error terminator
124 {
125 if ($1 != NULL)
126 free_cmd($1);
127 if (YYRECOVERING())
128 YYABORT;
129 yyclearin;
130 yyerrok;
131 }
132 | error terminator
133 {
134 if (YYRECOVERING())
135 YYABORT;
136 yyclearin;
137 yyerrok;
138 }
139 | terminator
140 {
141 return (0);
142 }
143
144 command: cancel_command
145 | clear_command
146 | commit_command
147 | create_command
148 | destroy_command
149 | end_command
150 | exit_command
151 | export_command
152 | get_command
153 | help_command
154 | list_command
155 | revert_command
156 | select_command
157 | set_command
158 | verify_command
159 | walkprop_command
160
161 terminator: '\n' { newline_terminated = B_TRUE; }
162 | ';' { newline_terminated = B_FALSE; }
163
164 cancel_command: CANCEL
165 {
166 if (($$ = alloc_cmd()) == NULL)
167 YYERROR;
168 cmd = $$;
169 $$->cmd_num = CMD_CANCEL;
170 $$->cmd_handler = &cancel_func;
171 $$->cmd_argc = 0;
172 $$->cmd_argv[0] = NULL;
173 }
174
175 clear_command: CLEAR
176 {
177 command_usage(CMD_CLEAR);
178 YYERROR;
179 }
180 | CLEAR TOKEN
181 {
182 properr($2);
183 YYERROR;
184 }
185 | CLEAR property_type
186 {
187 /* clear prop */
188 if (($$ = alloc_cmd()) == NULL)
189 YYERROR;
190 cmd = $$;
191 $$->cmd_num = CMD_CLEAR;
192 $$->cmd_handler = &clear_func;
193 $$->cmd_prop_type = $2;
194 $$->cmd_argc = 0;
195 $$->cmd_argv[0] = NULL;
196 }
197
198 commit_command: COMMIT
199 {
200 if (($$ = alloc_cmd()) == NULL)
201 YYERROR;
202 cmd = $$;
203 $$->cmd_num = CMD_COMMIT;
204 $$->cmd_handler = &commit_func;
205 $$->cmd_argc = 0;
206 $$->cmd_argv[0] = NULL;
207 }
208
209 create_command: CREATE
210 {
211 command_usage(CMD_CREATE);
212 YYERROR;
213 }
214 | CREATE TOKEN
215 {
216 command_usage(CMD_CREATE);
217 YYERROR;
218 }
219 | CREATE resource1_type
220 {
221 command_usage(CMD_CREATE);
222 YYERROR;
223 }
224 | CREATE resource2_type
225 {
226 command_usage(CMD_CREATE);
227 YYERROR;
228 }
229 | CREATE resource1_type TOKEN
230 {
231 /* create enm/loc/ncp test */
232 if (($$ = alloc_cmd()) == NULL)
233 YYERROR;
234 cmd = $$;
235 $$->cmd_num = CMD_CREATE;
236 $$->cmd_handler = &create_func;
237 $$->cmd_res1_type = $2;
238 $$->cmd_argc = 1;
239 $$->cmd_argv[0] = $3;
240 $$->cmd_argv[1] = NULL;
241 }
242 | CREATE resource2_type ncu_class_type TOKEN
243 {
244 /* create ncu ip/phys test */
245 if (($$ = alloc_cmd()) == NULL)
246 YYERROR;
247 cmd = $$;
248 $$->cmd_num = CMD_CREATE;
249 $$->cmd_handler = &create_func;
250 $$->cmd_res1_type = RT1_NCP;
251 $$->cmd_res2_type = $2;
252 $$->cmd_ncu_class_type = $3;
253 $$->cmd_argc = 1;
254 $$->cmd_argv[0] = $4;
255 $$->cmd_argv[1] = NULL;
256 }
257 | CREATE OPTION TOKEN resource1_type TOKEN
258 {
259 /* create -t old enm/loc/ncp test */
260 if (($$ = alloc_cmd()) == NULL)
261 YYERROR;
262 cmd = $$;
263 $$->cmd_num = CMD_CREATE;
264 $$->cmd_handler = &create_func;
265 $$->cmd_res1_type = $4;
266 $$->cmd_argc = 3;
267 $$->cmd_argv[0] = $2;
268 $$->cmd_argv[1] = $3;
269 $$->cmd_argv[2] = $5;
270 $$->cmd_argv[3] = NULL;
271 }
272 | CREATE OPTION TOKEN resource2_type ncu_class_type TOKEN
273 {
274 /* create -t old ncu ip/phys test */
275 if (($$ = alloc_cmd()) == NULL)
276 YYERROR;
277 cmd = $$;
278 $$->cmd_num = CMD_CREATE;
279 $$->cmd_handler = &create_func;
280 $$->cmd_res1_type = RT1_NCP;
281 $$->cmd_res2_type = $4;
282 $$->cmd_ncu_class_type = $5;
283 $$->cmd_argc = 3;
284 $$->cmd_argv[0] = $2;
285 $$->cmd_argv[1] = $3;
286 $$->cmd_argv[2] = $6;
287 $$->cmd_argv[3] = NULL;
288 }
289
290 destroy_command: DESTROY
291 {
292 command_usage(CMD_DESTROY);
293 YYERROR;
294 }
295 | DESTROY OPTION
296 {
297 /* destroy -a */
298 if (($$ = alloc_cmd()) == NULL)
299 YYERROR;
300 cmd = $$;
301 $$->cmd_num = CMD_DESTROY;
302 $$->cmd_handler = &destroy_func;
303 $$->cmd_res1_type = -1; /* special value */
304 $$->cmd_argc = 1;
305 $$->cmd_argv[0] = $2;
306 $$->cmd_argv[1] = NULL;
307 }
308 | DESTROY resource1_type
309 {
310 command_usage(CMD_DESTROY);
311 YYERROR;
312 }
313 | DESTROY resource2_type
314 {
315 command_usage(CMD_DESTROY);
316 YYERROR;
317 }
318 | DESTROY resource1_type TOKEN
319 {
320 /* destroy enm/loc/ncp test */
321 if (($$ = alloc_cmd()) == NULL)
322 YYERROR;
323 cmd = $$;
324 $$->cmd_num = CMD_DESTROY;
325 $$->cmd_handler = &destroy_func;
326 $$->cmd_res1_type = $2;
327 $$->cmd_argc = 1;
328 $$->cmd_argv[0] = $3;
329 $$->cmd_argv[1] = NULL;
330 }
331 | DESTROY resource2_type TOKEN
332 {
333 /* destroy ncu test (class inferred) */
334 if (($$ = alloc_cmd()) == NULL)
335 YYERROR;
336 cmd = $$;
337 $$->cmd_num = CMD_DESTROY;
338 $$->cmd_handler = &destroy_func;
339 $$->cmd_res1_type = RT1_NCP;
340 $$->cmd_res2_type = $2;
341 $$->cmd_ncu_class_type = NCU_CLASS_ANY;
342 $$->cmd_argc = 1;
343 $$->cmd_argv[0] = $3;
344 $$->cmd_argv[1] = NULL;
345 }
346 | DESTROY resource2_type ncu_class_type TOKEN
347 {
348 /* destroy ncu ip/phys test */
349 if (($$ = alloc_cmd()) == NULL)
350 YYERROR;
351 cmd = $$;
352 $$->cmd_num = CMD_DESTROY;
353 $$->cmd_handler = &destroy_func;
354 $$->cmd_res1_type = RT1_NCP;
355 $$->cmd_res2_type = $2;
356 $$->cmd_ncu_class_type = $3;
357 $$->cmd_argc = 1;
358 $$->cmd_argv[0] = $4;
359 $$->cmd_argv[1] = NULL;
360 }
361
362 end_command: END
363 {
364 if (($$ = alloc_cmd()) == NULL)
365 YYERROR;
366 cmd = $$;
367 $$->cmd_num = CMD_END;
368 $$->cmd_handler = &end_func;
369 $$->cmd_argc = 0;
370 $$->cmd_argv[0] = NULL;
371 }
372
373 exit_command: EXIT
374 {
375 if (($$ = alloc_cmd()) == NULL)
376 YYERROR;
377 cmd = $$;
378 $$->cmd_num = CMD_EXIT;
379 $$->cmd_handler = &exit_func;
380 $$->cmd_argc = 0;
381 $$->cmd_argv[0] = NULL;
382 }
383
384 export_command: EXPORT
385 {
386 if (($$ = alloc_cmd()) == NULL)
387 YYERROR;
388 cmd = $$;
389 $$->cmd_num = CMD_EXPORT;
390 $$->cmd_handler = &export_func;
391 $$->cmd_argc = 0;
392 $$->cmd_argv[0] = NULL;
393 }
394 | EXPORT TOKEN
395 {
396 command_usage(CMD_EXPORT);
397 YYERROR;
398 }
399 | EXPORT OPTION
400 {
401 /* export -d */
402 if (($$ = alloc_cmd()) == NULL)
403 YYERROR;
404 cmd = $$;
405 $$->cmd_num = CMD_EXPORT;
406 $$->cmd_handler = &export_func;
407 $$->cmd_argc = 1;
408 $$->cmd_argv[0] = $2;
409 $$->cmd_argv[1] = NULL;
410 }
411 | EXPORT OPTION TOKEN
412 {
413 /* export -f file */
414 if (($$ = alloc_cmd()) == NULL)
415 YYERROR;
416 cmd = $$;
417 $$->cmd_num = CMD_EXPORT;
418 $$->cmd_handler = &export_func;
419 $$->cmd_argc = 2;
420 $$->cmd_argv[0] = $2;
421 $$->cmd_argv[1] = $3;
422 $$->cmd_argv[2] = NULL;
423 }
424 | EXPORT OPTION OPTION TOKEN
425 {
426 /* export -d -f file */
427 if (($$ = alloc_cmd()) == NULL)
428 YYERROR;
429 cmd = $$;
430 $$->cmd_num = CMD_EXPORT;
431 $$->cmd_handler = &export_func;
432 $$->cmd_argc = 3;
433 $$->cmd_argv[0] = $2;
434 $$->cmd_argv[1] = $3;
435 $$->cmd_argv[2] = $4;
436 $$->cmd_argv[3] = NULL;
437 }
438 | EXPORT resource1_type TOKEN
439 {
440 /* export enm/loc/ncp test */
441 if (($$ = alloc_cmd()) == NULL)
442 YYERROR;
443 cmd = $$;
444 $$->cmd_num = CMD_EXPORT;
445 $$->cmd_handler = &export_func;
446 $$->cmd_res1_type = $2;
447 $$->cmd_argc = 1;
448 $$->cmd_argv[0] = $3;
449 $$->cmd_argv[1] = NULL;
450 }
451 | EXPORT resource2_type TOKEN
452 {
453 /* export ncu test (all ncu's named test) */
454 if (($$ = alloc_cmd()) == NULL)
455 YYERROR;
456 cmd = $$;
457 $$->cmd_num = CMD_EXPORT;
458 $$->cmd_handler = &export_func;
459 $$->cmd_res1_type = RT1_NCP;
460 $$->cmd_res2_type = $2;
461 $$->cmd_ncu_class_type = NCU_CLASS_ANY;
462 $$->cmd_argc = 1;
463 $$->cmd_argv[0] = $3;
464 $$->cmd_argv[1] = NULL;
465 }
466 | EXPORT resource2_type ncu_class_type TOKEN
467 {
468 /* export ncu ip/phys test */
469 if (($$ = alloc_cmd()) == NULL)
470 YYERROR;
471 cmd = $$;
472 $$->cmd_num = CMD_EXPORT;
473 $$->cmd_handler = &export_func;
474 $$->cmd_res1_type = RT1_NCP;
475 $$->cmd_res2_type = $2;
476 $$->cmd_ncu_class_type = $3;
477 $$->cmd_argc = 1;
478 $$->cmd_argv[0] = $4;
479 $$->cmd_argv[1] = NULL;
480 }
481 | EXPORT OPTION TOKEN resource1_type TOKEN
482 {
483 /* export -f file enm/loc/ncp test */
484 if (($$ = alloc_cmd()) == NULL)
485 YYERROR;
486 cmd = $$;
487 $$->cmd_num = CMD_EXPORT;
488 $$->cmd_handler = &export_func;
489 $$->cmd_res1_type = $4;
490 $$->cmd_argc = 3;
491 $$->cmd_argv[0] = $2;
492 $$->cmd_argv[1] = $3;
493 $$->cmd_argv[2] = $5;
494 $$->cmd_argv[3] = NULL;
495 }
496 | EXPORT OPTION TOKEN resource2_type TOKEN
497 {
498 /* export -f file ncu test (all ncu's named test) */
499 if (($$ = alloc_cmd()) == NULL)
500 YYERROR;
501 cmd = $$;
502 $$->cmd_num = CMD_EXPORT;
503 $$->cmd_handler = &export_func;
504 $$->cmd_res1_type = RT1_NCP;
505 $$->cmd_res2_type = $4;
506 $$->cmd_ncu_class_type = NCU_CLASS_ANY;
507 $$->cmd_argc = 3;
508 $$->cmd_argv[0] = $2;
509 $$->cmd_argv[1] = $3;
510 $$->cmd_argv[2] = $5;
511 $$->cmd_argv[3] = NULL;
512 }
513 | EXPORT OPTION TOKEN resource2_type ncu_class_type TOKEN
514 {
515 /* export -f file ncu ip/phys test */
516 if (($$ = alloc_cmd()) == NULL)
517 YYERROR;
518 cmd = $$;
519 $$->cmd_num = CMD_EXPORT;
520 $$->cmd_handler = &export_func;
521 $$->cmd_res1_type = RT1_NCP;
522 $$->cmd_res2_type = $4;
523 $$->cmd_ncu_class_type = $5;
524 $$->cmd_argc = 3;
525 $$->cmd_argv[0] = $2;
526 $$->cmd_argv[1] = $3;
527 $$->cmd_argv[2] = $6;
528 $$->cmd_argv[3] = NULL;
529 }
530
531 get_command: GET
532 {
533 command_usage(CMD_GET);
534 YYERROR;
535 }
536 | GET TOKEN
537 {
538 properr($2);
539 YYERROR;
540 }
541 | GET property_type
542 {
543 /* get prop */
544 if (($$ = alloc_cmd()) == NULL)
545 YYERROR;
546 cmd = $$;
547 $$->cmd_num = CMD_GET;
548 $$->cmd_handler = &get_func;
549 $$->cmd_prop_type = $2;
550 $$->cmd_argc = 0;
551 $$->cmd_argv[0] = NULL;
552 }
553 | GET OPTION property_type
554 {
555 /* get -V prop */
556 if (($$ = alloc_cmd()) == NULL)
557 YYERROR;
558 cmd = $$;
559 $$->cmd_num = CMD_GET;
560 $$->cmd_handler = &get_func;
561 $$->cmd_prop_type = $3;
562 $$->cmd_argc = 1;
563 $$->cmd_argv[0] = $2;
564 $$->cmd_argv[1] = NULL;
565 }
566
567 help_command: HELP
568 {
569 if (($$ = alloc_cmd()) == NULL)
570 YYERROR;
571 cmd = $$;
572 $$->cmd_num = CMD_HELP;
573 $$->cmd_handler = &help_func;
574 $$->cmd_argc = 0;
575 $$->cmd_argv[0] = NULL;
576 }
577 | HELP TOKEN
578 {
579 /* help command */
580 if (($$ = alloc_cmd()) == NULL)
581 YYERROR;
582 cmd = $$;
583 $$->cmd_num = CMD_HELP;
584 $$->cmd_handler = &help_func;
585 $$->cmd_argc = 1;
586 $$->cmd_argv[0] = $2;
587 $$->cmd_argv[1] = NULL;
588 }
589
590 list_command: LIST
591 {
592 if (($$ = alloc_cmd()) == NULL)
593 YYERROR;
594 cmd = $$;
595 $$->cmd_num = CMD_LIST;
596 $$->cmd_handler = &list_func;
597 $$->cmd_argc = 0;
598 $$->cmd_argv[0] = NULL;
599 }
600 | LIST TOKEN
601 {
602 command_usage(CMD_LIST);
603 YYERROR;
604 }
605 | LIST OPTION
606 {
607 /* list -a */
608 if (($$ = alloc_cmd()) == NULL)
609 YYERROR;
610 cmd = $$;
611 $$->cmd_num = CMD_LIST;
612 $$->cmd_handler = &list_func;
613 $$->cmd_res1_type = -1; /* special value */
614 $$->cmd_argc = 1;
615 $$->cmd_argv[0] = $2;
616 $$->cmd_argv[1] = NULL;
617 }
618 | LIST resource1_type
619 {
620 command_usage(CMD_LIST);
621 YYERROR;
622 }
623 | LIST OPTION resource1_type
624 {
625 command_usage(CMD_LIST);
626 YYERROR;
627 }
628 | LIST resource2_type
629 {
630 command_usage(CMD_LIST);
631 YYERROR;
632 }
633 | LIST OPTION resource2_type
634 {
635 command_usage(CMD_LIST);
636 YYERROR;
637 }
638 | LIST OPTION resource2_type ncu_class_type
639 {
640 command_usage(CMD_LIST);
641 YYERROR;
642 }
643 | LIST resource1_type TOKEN
644 {
645 /* list enm/loc/ncp test */
646 if (($$ = alloc_cmd()) == NULL)
647 YYERROR;
648 cmd = $$;
649 $$->cmd_num = CMD_LIST;
650 $$->cmd_handler = &list_func;
651 $$->cmd_res1_type = $2;
652 $$->cmd_argc = 1;
653 $$->cmd_argv[0] = $3;
654 $$->cmd_argv[1] = NULL;
655 }
656 | LIST resource2_type TOKEN
657 {
658 /* list ncu test (all ncu's named test) */
659 if (($$ = alloc_cmd()) == NULL)
660 YYERROR;
661 cmd = $$;
662 $$->cmd_num = CMD_LIST;
663 $$->cmd_handler = &list_func;
664 $$->cmd_res1_type = RT1_NCP;
665 $$->cmd_res2_type = $2;
666 $$->cmd_ncu_class_type = NCU_CLASS_ANY;
667 $$->cmd_argc = 1;
668 $$->cmd_argv[0] = $3;
669 $$->cmd_argv[1] = NULL;
670 }
671 | LIST resource2_type ncu_class_type TOKEN
672 {
673 /* list ncu ip/phys test */
674 if (($$ = alloc_cmd()) == NULL)
675 YYERROR;
676 cmd = $$;
677 $$->cmd_num = CMD_LIST;
678 $$->cmd_handler = &list_func;
679 $$->cmd_res1_type = RT1_NCP;
680 $$->cmd_res2_type = $2;
681 $$->cmd_ncu_class_type = $3;
682 $$->cmd_argc = 1;
683 $$->cmd_argv[0] = $4;
684 $$->cmd_argv[1] = NULL;
685 }
686 | LIST OPTION resource1_type TOKEN
687 {
688 /* list -a enm/loc/ncp test */
689 if (($$ = alloc_cmd()) == NULL)
690 YYERROR;
691 cmd = $$;
692 $$->cmd_num = CMD_LIST;
693 $$->cmd_handler = &list_func;
694 $$->cmd_res1_type = $3;
695 $$->cmd_argc = 2;
696 $$->cmd_argv[0] = $4;
697 $$->cmd_argv[1] = $2;
698 $$->cmd_argv[2] = NULL;
699 }
700 | LIST OPTION resource2_type TOKEN
701 {
702 /* list -a ncu test (all ncu's named test) */
703 if (($$ = alloc_cmd()) == NULL)
704 YYERROR;
705 cmd = $$;
706 $$->cmd_num = CMD_LIST;
707 $$->cmd_handler = &list_func;
708 $$->cmd_res1_type = RT1_NCP;
709 $$->cmd_res2_type = $3;
710 $$->cmd_ncu_class_type = NCU_CLASS_ANY;
711 $$->cmd_argc = 2;
712 $$->cmd_argv[0] = $4;
713 $$->cmd_argv[1] = $2;
714 $$->cmd_argv[2] = NULL;
715 }
716 | LIST OPTION resource2_type ncu_class_type TOKEN
717 {
718 /* list -a ncu ip/phys test */
719 if (($$ = alloc_cmd()) == NULL)
720 YYERROR;
721 cmd = $$;
722 $$->cmd_num = CMD_LIST;
723 $$->cmd_handler = &list_func;
724 $$->cmd_res1_type = RT1_NCP;
725 $$->cmd_res2_type = $3;
726 $$->cmd_ncu_class_type = $4;
727 $$->cmd_argc = 2;
728 $$->cmd_argv[0] = $5;
729 $$->cmd_argv[1] = $2;
730 $$->cmd_argv[2] = NULL;
731 }
732
733 revert_command: REVERT
734 {
735 if (($$ = alloc_cmd()) == NULL)
736 YYERROR;
737 cmd = $$;
738 $$->cmd_num = CMD_REVERT;
739 $$->cmd_handler = &revert_func;
740 $$->cmd_argc = 0;
741 $$->cmd_argv[0] = NULL;
742 }
743
744 select_command: SELECT
745 {
746 command_usage(CMD_SELECT);
747 YYERROR;
748 }
749 | SELECT TOKEN
750 {
751 command_usage(CMD_SELECT);
752 YYERROR;
753 }
754 | SELECT resource1_type
755 {
756 command_usage(CMD_SELECT);
757 YYERROR;
758 }
759 | SELECT resource2_type
760 {
761 command_usage(CMD_SELECT);
762 YYERROR;
763 }
764 | SELECT resource2_type ncu_class_type
765 {
766 command_usage(CMD_SELECT);
767 YYERROR;
768 }
769 | SELECT resource1_type TOKEN
770 {
771 /* select enm/loc/ncp test */
772 if (($$ = alloc_cmd()) == NULL)
773 YYERROR;
774 cmd = $$;
775 $$->cmd_num = CMD_SELECT;
776 $$->cmd_handler = &select_func;
777 $$->cmd_res1_type = $2;
778 $$->cmd_argc = 1;
779 $$->cmd_argv[0] = $3;
780 $$->cmd_argv[1] = NULL;
781 }
782 | SELECT resource2_type TOKEN
783 {
784 /* select ncu test (class inferred) */
785 if (($$ = alloc_cmd()) == NULL)
786 YYERROR;
787 cmd = $$;
788 $$->cmd_num = CMD_SELECT;
789 $$->cmd_handler = &select_func;
790 $$->cmd_res1_type = RT1_NCP;
791 $$->cmd_res2_type = $2;
792 $$->cmd_ncu_class_type = NCU_CLASS_ANY;
793 $$->cmd_argc = 1;
794 $$->cmd_argv[0] = $3;
795 $$->cmd_argv[1] = NULL;
796 }
797 | SELECT resource2_type ncu_class_type TOKEN
798 {
799 /* select ncu ip/phys test */
800 if (($$ = alloc_cmd()) == NULL)
801 YYERROR;
802 cmd = $$;
803 $$->cmd_num = CMD_SELECT;
804 $$->cmd_handler = &select_func;
805 $$->cmd_res1_type = RT1_NCP;
806 $$->cmd_res2_type = $2;
807 $$->cmd_ncu_class_type = $3;
808 $$->cmd_argc = 1;
809 $$->cmd_argv[0] = $4;
810 $$->cmd_argv[1] = NULL;
811 }
812
813 set_command: SET
814 {
815 command_usage(CMD_SET);
816 YYERROR;
817 }
818 | SET TOKEN
819 {
820 properr($2);
821 YYERROR;
822 }
823 | SET property_type EQUAL TOKEN
824 {
825 /* set prop=value */
826 if (($$ = alloc_cmd()) == NULL)
827 YYERROR;
828 cmd = $$;
829 $$->cmd_num = CMD_SET;
830 $$->cmd_handler = &set_func;
831 $$->cmd_prop_type = $2;
832 $$->cmd_argc = 1;
833 $$->cmd_argv[0] = $4;
834 $$->cmd_argv[1] = NULL;
835 }
836
837 verify_command: VERIFY
838 {
839 if (($$ = alloc_cmd()) == NULL)
840 YYERROR;
841 cmd = $$;
842 $$->cmd_num = CMD_VERIFY;
843 $$->cmd_handler = &verify_func;
844 $$->cmd_argc = 0;
845 $$->cmd_argv[0] = NULL;
846 }
847
848 walkprop_command: WALKPROP
849 {
850 if (($$ = alloc_cmd()) == NULL)
851 YYERROR;
852 cmd = $$;
853 $$->cmd_num = CMD_WALKPROP;
854 $$->cmd_handler = &walkprop_func;
855 $$->cmd_argc = 0;
856 $$->cmd_argv[0] = NULL;
857 }
858 | WALKPROP OPTION
859 {
860 /* walkprop -a */
861 if (($$ = alloc_cmd()) == NULL)
862 YYERROR;
863 cmd = $$;
864 $$->cmd_num = CMD_WALKPROP;
865 $$->cmd_handler = &walkprop_func;
866 $$->cmd_argc = 1;
867 $$->cmd_argv[0] = $2;
868 $$->cmd_argv[1] = NULL;
869 }
870
871 resource1_type: LOC { $$ = RT1_LOC; }
872 | NCP { $$ = RT1_NCP; }
873 | ENM { $$ = RT1_ENM; }
874 | WLAN { $$ = RT1_WLAN; }
875
876 resource2_type: NCU { $$ = RT2_NCU; }
877
878 ncu_class_type: PHYS { $$ = NCU_CLASS_PHYS; }
879 | IP { $$ = NCU_CLASS_IP; }
880
881 property_type: UNKNOWN { $$ = PT_UNKNOWN; }
882 | ACTIVATION_MODE { $$ = PT_ACTIVATION_MODE; }
883 | CONDITIONS { $$ = PT_CONDITIONS; }
884 | ENABLED { $$ = PT_ENABLED; }
885 | TYPE { $$ = PT_TYPE; }
886 | CLASS { $$ = PT_CLASS; }
887 | PARENT { $$ = PT_PARENT; }
888 | PRIORITY_GROUP { $$ = PT_PRIORITY_GROUP; }
889 | PRIORITY_MODE { $$ = PT_PRIORITY_MODE; }
890 | LINK_MACADDR { $$ = PT_LINK_MACADDR; }
891 | LINK_AUTOPUSH { $$ = PT_LINK_AUTOPUSH; }
892 | LINK_MTU { $$ = PT_LINK_MTU; }
893 | IP_VERSION { $$ = PT_IP_VERSION; }
894 | IPV4_ADDRSRC { $$ = PT_IPV4_ADDRSRC; }
895 | IPV4_ADDR { $$ = PT_IPV4_ADDR; }
896 | IPV4_DEFAULT_ROUTE { $$ = PT_IPV4_DEFAULT_ROUTE; }
897 | IPV6_ADDRSRC { $$ = PT_IPV6_ADDRSRC; }
898 | IPV6_ADDR { $$ = PT_IPV6_ADDR; }
899 | IPV6_DEFAULT_ROUTE { $$ = PT_IPV6_DEFAULT_ROUTE; }
900 | ENM_FMRI { $$ = PT_ENM_FMRI; }
901 | ENM_START { $$ = PT_ENM_START; }
902 | ENM_STOP { $$ = PT_ENM_STOP; }
903 | LOC_NAMESERVICES { $$ = PT_LOC_NAMESERVICES; }
904 | LOC_NAMESERVICES_CONFIG { $$ = PT_LOC_NAMESERVICES_CONFIG; }
905 | LOC_DNS_CONFIGSRC { $$ = PT_LOC_DNS_CONFIGSRC; }
906 | LOC_DNS_DOMAIN { $$ = PT_LOC_DNS_DOMAIN; }
907 | LOC_DNS_SERVERS { $$ = PT_LOC_DNS_SERVERS; }
908 | LOC_DNS_SEARCH { $$ = PT_LOC_DNS_SEARCH; }
909 | LOC_NIS_CONFIGSRC { $$ = PT_LOC_NIS_CONFIGSRC; }
910 | LOC_NIS_SERVERS { $$ = PT_LOC_NIS_SERVERS; }
911 | LOC_LDAP_CONFIGSRC { $$ = PT_LOC_LDAP_CONFIGSRC; }
912 | LOC_LDAP_SERVERS { $$ = PT_LOC_LDAP_SERVERS; }
913 | LOC_DEFAULT_DOMAIN { $$ = PT_LOC_DEFAULT_DOMAIN; }
914 | LOC_NFSV4_DOMAIN { $$ = PT_LOC_NFSV4_DOMAIN; }
915 | LOC_IPF_CONFIG { $$ = PT_LOC_IPF_CONFIG; }
916 | LOC_IPF_V6_CONFIG { $$ = PT_LOC_IPF_V6_CONFIG; }
917 | LOC_IPNAT_CONFIG { $$ = PT_LOC_IPNAT_CONFIG; }
918 | LOC_IPPOOL_CONFIG { $$ = PT_LOC_IPPOOL_CONFIG; }
919 | LOC_IKE_CONFIG { $$ = PT_LOC_IKE_CONFIG; }
920 | LOC_IPSECPOL_CONFIG { $$ = PT_LOC_IPSECPOL_CONFIG; }
921 | WLAN_BSSIDS { $$ = PT_WLAN_BSSIDS; }
922 | WLAN_PRIORITY { $$ = PT_WLAN_PRIORITY; }
923 | WLAN_KEYNAME { $$ = PT_WLAN_KEYNAME; }
924 | WLAN_KEYSLOT { $$ = PT_WLAN_KEYSLOT; }
925 | WLAN_SECURITY_MODE { $$ = PT_WLAN_SECURITY_MODE; }
926 | IP_PRIMARY { $$ = PT_IP_PRIMARY; }
927 | IP_REQHOST { $$ = PT_IP_REQHOST; }
928
929 %%