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 32105573Simp#include "devd.h" 33105573Simp#include <stdio.h> 34107665Simp#include <string.h> 35105573Simp 36105573Simp%} 37105573Simp 38105573Simp%union { 39105573Simp char *str; 40105573Simp int i; 41107665Simp struct eps *eps; /* EventProcStatement */ 42107665Simp struct event_proc *eventproc; 43105573Simp} 44105573Simp 45105573Simp%token SEMICOLON BEGINBLOCK ENDBLOCK COMMA 46105573Simp%token <i> NUMBER 47105573Simp%token <str> STRING 48105573Simp%token <str> ID 49105573Simp%token OPTIONS SET DIRECTORY PID_FILE DEVICE_NAME ACTION MATCH 50147874Simp%token ATTACH DETACH NOMATCH NOTIFY MEDIA_TYPE CLASS SUBDEVICE 51105573Simp 52107665Simp%type <eventproc> match_or_action_list 53107665Simp%type <eps> match_or_action match action 54105573Simp 55105573Simp%% 56105573Simp 57105573Simpconfig_file 58105573Simp : config_list 59107665Simp | 60105573Simp ; 61105573Simp 62105573Simpconfig_list 63105573Simp : config 64105573Simp | config_list config 65105573Simp ; 66105573Simp 67105573Simpconfig 68105573Simp : option_block 69105573Simp | attach_block 70105573Simp | detach_block 71105573Simp | nomatch_block 72121487Simp | notify_block 73105573Simp ; 74105573Simp 75105573Simpoption_block 76105573Simp : OPTIONS BEGINBLOCK options ENDBLOCK SEMICOLON 77105573Simp ; 78105573Simp 79105573Simpoptions 80105573Simp : option 81105573Simp | options option 82105573Simp 83105573Simpoption 84105573Simp : directory_option 85105573Simp | pid_file_option 86105573Simp | set_option 87105573Simp ; 88105573Simp 89105573Simpdirectory_option 90107665Simp : DIRECTORY STRING SEMICOLON { add_directory($2); } 91105573Simp ; 92105573Simp 93105573Simppid_file_option 94107665Simp : PID_FILE STRING SEMICOLON { set_pidfile($2); } 95105573Simp ; 96105573Simp 97105573Simpset_option 98107665Simp : SET ID STRING SEMICOLON { set_variable($2, $3); } 99105573Simp ; 100105573Simp 101105573Simpattach_block 102107665Simp : ATTACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 103107665Simp { add_attach($2, $4); } 104115011Simp | ATTACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 105105573Simp ; 106105573Simp 107105573Simpdetach_block 108107665Simp : DETACH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 109107665Simp { add_detach($2, $4); } 110115011Simp | DETACH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 111105573Simp ; 112105573Simp 113105573Simpnomatch_block 114107665Simp : NOMATCH NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 115107665Simp { add_nomatch($2, $4); } 116115011Simp | NOMATCH NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 117105573Simp ; 118105573Simp 119121487Simpnotify_block 120121487Simp : NOTIFY NUMBER BEGINBLOCK match_or_action_list ENDBLOCK SEMICOLON 121121487Simp { add_notify($2, $4); } 122121487Simp | NOTIFY NUMBER BEGINBLOCK ENDBLOCK SEMICOLON 123121487Simp ; 124121487Simp 125105573Simpmatch_or_action_list 126107665Simp : match_or_action { $$ = add_to_event_proc( NULL, $1); } 127105573Simp | match_or_action_list match_or_action 128107665Simp { $$ = add_to_event_proc($1, $2); } 129105573Simp ; 130105573Simp 131105573Simpmatch_or_action 132105573Simp : match 133105573Simp | action 134105573Simp ; 135105573Simp 136105573Simpmatch 137107665Simp : MATCH STRING STRING SEMICOLON { $$ = new_match($2, $3); } 138107665Simp | DEVICE_NAME STRING SEMICOLON 139107665Simp { $$ = new_match(strdup("device-name"), $2); } 140147874Simp | MEDIA_TYPE STRING SEMICOLON 141147874Simp { $$ = new_media(strdup("media-type"), $2); } 142147874Simp | CLASS STRING SEMICOLON 143147874Simp { $$ = new_match(strdup("class"), $2); } 144147874Simp | SUBDEVICE STRING SEMICOLON 145147874Simp { $$ = new_match(strdup("subdevice"), $2); } 146105573Simp ; 147105573Simp 148105573Simpaction 149107665Simp : ACTION STRING SEMICOLON { $$ = new_action($2); } 150105573Simp ; 151105573Simp 152105573Simp%% 153