Initial import from FreeBSD RELENG_4:
[dragonfly.git] / contrib / isc-dhcp / includes / statement.h
1 /* statement.h
2
3    Definitions for executable statements... */
4
5 /*
6  * Copyright (c) 1996-1999 Internet Software Consortium.
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. Neither the name of The Internet Software Consortium nor the names
19  *    of its contributors may be used to endorse or promote products derived
20  *    from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND
23  * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
24  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26  * DISCLAIMED.  IN NO EVENT SHALL THE INTERNET SOFTWARE CONSORTIUM OR
27  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
30  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
33  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34  * SUCH DAMAGE.
35  *
36  * This software has been written for the Internet Software Consortium
37  * by Ted Lemon in cooperation with Vixie Enterprises and Nominum, Inc.
38  * To learn more about the Internet Software Consortium, see
39  * ``http://www.isc.org/''.  To learn more about Vixie Enterprises,
40  * see ``http://www.vix.com''.   To learn more about Nominum, Inc., see
41  * ``http://www.nominum.com''.
42  */
43
44 struct executable_statement {
45         int refcnt;
46         struct executable_statement *next;
47         enum statement_op {
48                 null_statement,
49                 if_statement,
50                 add_statement,
51                 eval_statement,
52                 break_statement,
53                 default_option_statement,
54                 supersede_option_statement,
55                 append_option_statement,
56                 prepend_option_statement,
57                 send_option_statement,
58                 statements_statement,
59                 on_statement,
60                 switch_statement,
61                 case_statement,
62                 default_statement,
63                 set_statement,
64                 unset_statement,
65                 let_statement,
66                 define_statement,
67                 log_statement,
68                 return_statement
69         } op;
70         union {
71                 struct {
72                         struct executable_statement *tc, *fc;
73                         struct expression *expr;
74                 } ie;
75                 struct expression *eval;
76                 struct expression *retval;
77                 struct class *add;
78                 struct option_cache *option;
79                 struct option_cache *supersede;
80                 struct option_cache *prepend;
81                 struct option_cache *append;
82                 struct executable_statement *statements;
83                 struct {
84                         int evtypes;
85 #                       define ON_COMMIT  1
86 #                       define ON_EXPIRY  2
87 #                       define ON_RELEASE 4
88 #                       define ON_TRANSMISSION 8
89                         struct executable_statement *statements;
90                 } on;
91                 struct {
92                         struct expression *expr;
93                         struct executable_statement *statements;
94                 } s_switch;
95                 struct expression *c_case;
96                 struct {
97                         char *name;
98                         struct expression *expr;
99                         struct executable_statement *statements;
100                 } set, let;
101                 char *unset;
102                 struct {
103                         enum {
104                                 log_priority_fatal,
105                                 log_priority_error,
106                                 log_priority_debug,
107                                 log_priority_info
108                         } priority;
109                         struct expression *expr;
110                 } log;
111         } data;
112 };
113