1105573Simp%{ 2105573Simp/*- 3105573Simp * DEVD (Device action daemon) 4105573Simp * 5105573Simp * Copyright (c) 2002 M. Warner Losh <imp@freebsd.org>. 6105573Simp * All rights reserved. 7105573Simp * 8105573Simp * Redistribution and use in source and binary forms, with or without 9105573Simp * modification, are permitted provided that the following conditions 10105573Simp * are met: 11105573Simp * 1. Redistributions of source code must retain the above copyright 12105573Simp * notice, this list of conditions and the following disclaimer. 13105573Simp * 2. Redistributions in binary form must reproduce the above copyright 14105573Simp * notice, this list of conditions and the following disclaimer in the 15105573Simp * documentation and/or other materials provided with the distribution. 16105573Simp * 17105573Simp * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18105573Simp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19105573Simp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20105573Simp * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21105573Simp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22105573Simp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23105573Simp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24105573Simp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25105573Simp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26105573Simp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27105573Simp * SUCH DAMAGE. 28105573Simp * 29105573Simp * $FreeBSD$ 30105573Simp */ 31105573Simp 32235789Sbapt#include <sys/cdefs.h> 33105573Simp#include "devd.h" 34105573Simp#include <stdio.h> 35107665Simp#include <string.h> 36105573Simp 37105573Simp%} 38105573Simp 39105573Simp%union { 40105573Simp char *str; 41105573Simp int i; 42107665Simp struct eps *eps; /* EventProcStatement */ 43107665Simp struct event_proc *eventproc; 44105573Simp} 45105573Simp 46105573Simp%token SEMICOLON BEGINBLOCK ENDBLOCK COMMA 47105573Simp%token <i> NUMBER 48105573Simp%token <str> STRING 49105573Simp%token <str> ID 50105573Simp%token OPTIONS SET DIRECTORY PID_FILE DEVICE_NAME ACTION MATCH 51147874Simp%token ATTACH DETACH NOMATCH NOTIFY MEDIA_TYPE CLASS SUBDEVICE 52105573Simp 53107665Simp%type <eventproc> match_or_action_list 54107665Simp%type <eps> match_or_action match action 55105573Simp 56105573Simp%% 57105573Simp 58105573Simpconfig_file 59105573Simp : config_list 60107665Simp | 61105573Simp ; 62105573Simp 63105573Simpconfig_list 64105573Simp : config 65105573Simp | config_list config 66105573Simp ; 67105573Simp 68105573Simpconfig 69105573Simp : option_block 70105573Simp | attach_block 71105573Simp | detach_block 72105573Simp | nomatch_block 73121487Simp | notify_block 74105573Simp ; 75105573Simp 76105573Simpoption_block 77105573Simp : OPTIONS BEGINBLOCK options ENDBLOCK SEMICOLON 78105573Simp ; 79105573Simp 80105573Simpoptions 81105573Simp : option 82105573Simp | options option 83105573Simp 84105573Simpoption 85105573Simp : directory_option 86105573Simp | pid_file_option 87105573Simp | set_option 88105573Simp ; 89105573Simp 90105573Simpdirectory_option 91107665Simp : DIRECTORY STRING SEMICOLON { add_directory($2); } 92105573Simp ; 93105573Simp 94105573Simppid_file_option 95107665Simp : PID_FILE STRING SEMICOLON { set_pidfile($2); } 96105573Simp ; 97105573Simp 98105573Simpset_option 99107665Simp : SET ID STRING SEMICOLON { set_variable($2, $3); } 100105573Simp ; 101105573Simp 102105573Simpattach_block 103107665Simp : ATTACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 104107665Simp { add_attach($2, $4); } 105115011Simp | ATTACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 106105573Simp ; 107105573Simp 108105573Simpdetach_block 109107665Simp : DETACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 110107665Simp { add_detach($2, $4); } 111115011Simp | DETACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 112105573Simp ; 113105573Simp 114105573Simpnomatch_block 115107665Simp : NOMATCH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 116107665Simp { add_nomatch($2, $4); } 117115011Simp | NOMATCH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 118105573Simp ; 119105573Simp 120121487Simpnotify_block 121121487Simp : NOTIFY NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 122121487Simp { add_notify($2, $4); } 123121487Simp | NOTIFY NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 124121487Simp ; 125121487Simp 126105573Simpmatch_or_action_list 127107665Simp : match_or_action { $$ = add_to_event_proc( NULL, $1); } 128105573Simp | match_or_action_list match_or_action 129107665Simp { $$ = add_to_event_proc($1, $2); } 130105573Simp ; 131105573Simp 132105573Simpmatch_or_action 133105573Simp : match 134105573Simp | action 135105573Simp ; 136105573Simp 137105573Simpmatch 138107665Simp : MATCH STRING STRING SEMICOLON { $$ = new_match($2, $3); } 139107665Simp | DEVICE_NAME STRING SEMICOLON 140107665Simp { $$ = new_match(strdup("device-name"), $2); } 141147874Simp | MEDIA_TYPE STRING SEMICOLON 142147874Simp { $$ = new_media(strdup("media-type"), $2); } 143147874Simp | CLASS STRING SEMICOLON 144147874Simp { $$ = new_match(strdup("class"), $2); } 145147874Simp | SUBDEVICE STRING SEMICOLON 146147874Simp { $$ = new_match(strdup("subdevice"), $2); } 147105573Simp ; 148105573Simp 149105573Simpaction 150107665Simp : ACTION STRING SEMICOLON { $$ = new_action($2); } 151105573Simp ; 152105573Simp 153105573Simp%% 154