1%{ 2/*- 3 * DEVD (Device action daemon) 4 * 5 * Copyright (c) 2002 M. Warner Losh <imp@freebsd.org>. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 *
| 1%{ 2/*- 3 * DEVD (Device action daemon) 4 * 5 * Copyright (c) 2002 M. Warner Losh <imp@freebsd.org>. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 *
|
32#include "devd.h" 33#include <stdio.h> 34#include <string.h> 35 36%} 37 38%union { 39 char *str; 40 int i; 41 struct eps *eps; /* EventProcStatement */ 42 struct event_proc *eventproc; 43} 44 45%token SEMICOLON BEGINBLOCK ENDBLOCK COMMA 46%token <i> NUMBER 47%token <str> STRING 48%token <str> ID 49%token OPTIONS SET DIRECTORY PID_FILE DEVICE_NAME ACTION MATCH 50%token ATTACH DETACH NOMATCH NOTIFY MEDIA_TYPE CLASS SUBDEVICE 51 52%type <eventproc> match_or_action_list 53%type <eps> match_or_action match action 54 55%% 56 57config_file 58 : config_list 59 | 60 ; 61 62config_list 63 : config 64 | config_list config 65 ; 66 67config 68 : option_block 69 | attach_block 70 | detach_block 71 | nomatch_block 72 | notify_block 73 ; 74 75option_block 76 : OPTIONS BEGINBLOCK options ENDBLOCK SEMICOLON 77 ; 78 79options 80 : option 81 | options option 82 83option 84 : directory_option 85 | pid_file_option 86 | set_option 87 ; 88 89directory_option 90 : DIRECTORY STRING SEMICOLON { add_directory($2); } 91 ; 92 93pid_file_option 94 : PID_FILE STRING SEMICOLON { set_pidfile($2); } 95 ; 96 97set_option 98 : SET ID STRING SEMICOLON { set_variable($2, $3); } 99 ; 100 101attach_block 102 : ATTACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 103 { add_attach($2, $4); } 104 | ATTACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 105 ; 106 107detach_block 108 : DETACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 109 { add_detach($2, $4); } 110 | DETACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 111 ; 112 113nomatch_block 114 : NOMATCH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 115 { add_nomatch($2, $4); } 116 | NOMATCH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 117 ; 118 119notify_block 120 : NOTIFY NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 121 { add_notify($2, $4); } 122 | NOTIFY NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 123 ; 124 125match_or_action_list 126 : match_or_action { $$ = add_to_event_proc( NULL, $1); } 127 | match_or_action_list match_or_action 128 { $$ = add_to_event_proc($1, $2); } 129 ; 130 131match_or_action 132 : match 133 | action 134 ; 135 136match 137 : MATCH STRING STRING SEMICOLON { $$ = new_match($2, $3); } 138 | DEVICE_NAME STRING SEMICOLON 139 { $$ = new_match(strdup("device-name"), $2); } 140 | MEDIA_TYPE STRING SEMICOLON 141 { $$ = new_media(strdup("media-type"), $2); } 142 | CLASS STRING SEMICOLON 143 { $$ = new_match(strdup("class"), $2); } 144 | SUBDEVICE STRING SEMICOLON 145 { $$ = new_match(strdup("subdevice"), $2); } 146 ; 147 148action 149 : ACTION STRING SEMICOLON { $$ = new_action($2); } 150 ; 151 152%%
| 33#include "devd.h" 34#include <stdio.h> 35#include <string.h> 36 37%} 38 39%union { 40 char *str; 41 int i; 42 struct eps *eps; /* EventProcStatement */ 43 struct event_proc *eventproc; 44} 45 46%token SEMICOLON BEGINBLOCK ENDBLOCK COMMA 47%token <i> NUMBER 48%token <str> STRING 49%token <str> ID 50%token OPTIONS SET DIRECTORY PID_FILE DEVICE_NAME ACTION MATCH 51%token ATTACH DETACH NOMATCH NOTIFY MEDIA_TYPE CLASS SUBDEVICE 52 53%type <eventproc> match_or_action_list 54%type <eps> match_or_action match action 55 56%% 57 58config_file 59 : config_list 60 | 61 ; 62 63config_list 64 : config 65 | config_list config 66 ; 67 68config 69 : option_block 70 | attach_block 71 | detach_block 72 | nomatch_block 73 | notify_block 74 ; 75 76option_block 77 : OPTIONS BEGINBLOCK options ENDBLOCK SEMICOLON 78 ; 79 80options 81 : option 82 | options option 83 84option 85 : directory_option 86 | pid_file_option 87 | set_option 88 ; 89 90directory_option 91 : DIRECTORY STRING SEMICOLON { add_directory($2); } 92 ; 93 94pid_file_option 95 : PID_FILE STRING SEMICOLON { set_pidfile($2); } 96 ; 97 98set_option 99 : SET ID STRING SEMICOLON { set_variable($2, $3); } 100 ; 101 102attach_block 103 : ATTACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 104 { add_attach($2, $4); } 105 | ATTACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 106 ; 107 108detach_block 109 : DETACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 110 { add_detach($2, $4); } 111 | DETACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 112 ; 113 114nomatch_block 115 : NOMATCH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 116 { add_nomatch($2, $4); } 117 | NOMATCH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 118 ; 119 120notify_block 121 : NOTIFY NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 122 { add_notify($2, $4); } 123 | NOTIFY NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 124 ; 125 126match_or_action_list 127 : match_or_action { $$ = add_to_event_proc( NULL, $1); } 128 | match_or_action_list match_or_action 129 { $$ = add_to_event_proc($1, $2); } 130 ; 131 132match_or_action 133 : match 134 | action 135 ; 136 137match 138 : MATCH STRING STRING SEMICOLON { $$ = new_match($2, $3); } 139 | DEVICE_NAME STRING SEMICOLON 140 { $$ = new_match(strdup("device-name"), $2); } 141 | MEDIA_TYPE STRING SEMICOLON 142 { $$ = new_media(strdup("media-type"), $2); } 143 | CLASS STRING SEMICOLON 144 { $$ = new_match(strdup("class"), $2); } 145 | SUBDEVICE STRING SEMICOLON 146 { $$ = new_match(strdup("subdevice"), $2); } 147 ; 148 149action 150 : ACTION STRING SEMICOLON { $$ = new_action($2); } 151 ; 152 153%%
|