1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * CDDL HEADER START
3*7c478bd9Sstevel@tonic-gate  *
4*7c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*7c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*7c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*7c478bd9Sstevel@tonic-gate  * with the License.
8*7c478bd9Sstevel@tonic-gate  *
9*7c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*7c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*7c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*7c478bd9Sstevel@tonic-gate  * and limitations under the License.
13*7c478bd9Sstevel@tonic-gate  *
14*7c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*7c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*7c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*7c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*7c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*7c478bd9Sstevel@tonic-gate  *
20*7c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21*7c478bd9Sstevel@tonic-gate  */
22*7c478bd9Sstevel@tonic-gate /*
23*7c478bd9Sstevel@tonic-gate  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24*7c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
25*7c478bd9Sstevel@tonic-gate  */
26*7c478bd9Sstevel@tonic-gate 
27*7c478bd9Sstevel@tonic-gate #ifndef	_IPQOS_CONF_H
28*7c478bd9Sstevel@tonic-gate #define	_IPQOS_CONF_H
29*7c478bd9Sstevel@tonic-gate 
30*7c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
31*7c478bd9Sstevel@tonic-gate 
32*7c478bd9Sstevel@tonic-gate #include <sys/stat.h>
33*7c478bd9Sstevel@tonic-gate #include <sys/types.h>
34*7c478bd9Sstevel@tonic-gate #include <sys/nvpair.h>
35*7c478bd9Sstevel@tonic-gate 
36*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus
37*7c478bd9Sstevel@tonic-gate extern "C" {
38*7c478bd9Sstevel@tonic-gate #endif
39*7c478bd9Sstevel@tonic-gate 
40*7c478bd9Sstevel@tonic-gate /* debug level bits */
41*7c478bd9Sstevel@tonic-gate #define	L0	0x01
42*7c478bd9Sstevel@tonic-gate #define	L1	0x02
43*7c478bd9Sstevel@tonic-gate #define	L2	0x04
44*7c478bd9Sstevel@tonic-gate #define	DIFF	0x08
45*7c478bd9Sstevel@tonic-gate #define	KRET	0x10
46*7c478bd9Sstevel@tonic-gate #define	APPLY	0x20
47*7c478bd9Sstevel@tonic-gate #define	MHME	0x40
48*7c478bd9Sstevel@tonic-gate #define	RBK	0x80
49*7c478bd9Sstevel@tonic-gate 
50*7c478bd9Sstevel@tonic-gate /* directory for types files */
51*7c478bd9Sstevel@tonic-gate #define	TYPES_FILE_DIR		"/usr/lib/ipqosconf/"
52*7c478bd9Sstevel@tonic-gate 
53*7c478bd9Sstevel@tonic-gate /* location of lock file */
54*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_LOCK_FILE	"/var/run/ipqosconf.lock"
55*7c478bd9Sstevel@tonic-gate 
56*7c478bd9Sstevel@tonic-gate /* location of startup config file */
57*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_INIT_PATH	"/etc/inet/ipqosinit.conf"
58*7c478bd9Sstevel@tonic-gate 
59*7c478bd9Sstevel@tonic-gate /* ipqosconf commands */
60*7c478bd9Sstevel@tonic-gate 
61*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_APPLY	1
62*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_VIEW		2
63*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_COMMIT	3
64*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_FLUSH	4
65*7c478bd9Sstevel@tonic-gate 
66*7c478bd9Sstevel@tonic-gate /* print ntabs to stream fp */
67*7c478bd9Sstevel@tonic-gate 
68*7c478bd9Sstevel@tonic-gate #define	PRINT_TABS(fp, ntabs)\
69*7c478bd9Sstevel@tonic-gate {\
70*7c478bd9Sstevel@tonic-gate 	int x;\
71*7c478bd9Sstevel@tonic-gate 	for (x = 0; x < ntabs; x++)\
72*7c478bd9Sstevel@tonic-gate 		(void) fprintf(fp, "\t");\
73*7c478bd9Sstevel@tonic-gate }
74*7c478bd9Sstevel@tonic-gate 
75*7c478bd9Sstevel@tonic-gate /* having to define this as ip6.h version in _KERNEL guard */
76*7c478bd9Sstevel@tonic-gate #ifndef	V4_PART_OF_V6
77*7c478bd9Sstevel@tonic-gate #define	V4_PART_OF_V6(v6)	v6._S6_un._S6_u32[3]
78*7c478bd9Sstevel@tonic-gate #endif
79*7c478bd9Sstevel@tonic-gate 
80*7c478bd9Sstevel@tonic-gate /*
81*7c478bd9Sstevel@tonic-gate  * given pointer cp advance it to the first non-space character.
82*7c478bd9Sstevel@tonic-gate  */
83*7c478bd9Sstevel@tonic-gate #define	SKIPWS(cp)	while (isspace(*cp) && (*cp != '\0')) cp++
84*7c478bd9Sstevel@tonic-gate 
85*7c478bd9Sstevel@tonic-gate /* extract the v4 and v6 bits of the ip_version enumeration from the filter */
86*7c478bd9Sstevel@tonic-gate #define	VERSION_IS_V4(flt)	((flt)->ip_versions & 0x01)
87*7c478bd9Sstevel@tonic-gate #define	VERSION_IS_V6(flt)	((flt)->ip_versions & 0x02)
88*7c478bd9Sstevel@tonic-gate 
89*7c478bd9Sstevel@tonic-gate /* retrieve short name from a module.name nvpair name */
90*7c478bd9Sstevel@tonic-gate #define	SHORT_NAME(longnme)	(strchr(longnme, '.') + 1)
91*7c478bd9Sstevel@tonic-gate 
92*7c478bd9Sstevel@tonic-gate /* latest version of cfg file supported (1.0) */
93*7c478bd9Sstevel@tonic-gate #define	IPQOS_CUR_FMT_MAJOR_VER	1
94*7c478bd9Sstevel@tonic-gate #define	IPQOS_CUR_FMT_MINOR_VER	0
95*7c478bd9Sstevel@tonic-gate 
96*7c478bd9Sstevel@tonic-gate /* length of string buffer used for storing an integer as a string */
97*7c478bd9Sstevel@tonic-gate #define	IPQOS_INT_STR_LEN	15
98*7c478bd9Sstevel@tonic-gate 
99*7c478bd9Sstevel@tonic-gate /* length of line buffer used to read types file */
100*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_TYPE_LINE_LEN	1024
101*7c478bd9Sstevel@tonic-gate 
102*7c478bd9Sstevel@tonic-gate /* length of buffer used to store name of type when reading types file */
103*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_TYPE_LEN	24
104*7c478bd9Sstevel@tonic-gate 
105*7c478bd9Sstevel@tonic-gate /* max length of value string in types file */
106*7c478bd9Sstevel@tonic-gate #define	IPQOS_VALST_MAXLEN 100
107*7c478bd9Sstevel@tonic-gate 
108*7c478bd9Sstevel@tonic-gate /* initial size of line buffer used by readtoken */
109*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_LINEBUF_SZ	150
110*7c478bd9Sstevel@tonic-gate 
111*7c478bd9Sstevel@tonic-gate /* length of class/filter/action names */
112*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_NAME_LEN	24
113*7c478bd9Sstevel@tonic-gate 
114*7c478bd9Sstevel@tonic-gate /* length of module names */
115*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_MOD_NAME_LEN	10
116*7c478bd9Sstevel@tonic-gate 
117*7c478bd9Sstevel@tonic-gate /* IPQOS_CONF_NAME_LEN + IPQOS_CONF_MOD_NAME_LEN */
118*7c478bd9Sstevel@tonic-gate /* must be a numeric literal for use in scanf() format string */
119*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_PNAME_LEN	34
120*7c478bd9Sstevel@tonic-gate 
121*7c478bd9Sstevel@tonic-gate /* length of buffer used to construct msgs for printing */
122*7c478bd9Sstevel@tonic-gate #define	IPQOS_MSG_BUF_SZ	200
123*7c478bd9Sstevel@tonic-gate /*
124*7c478bd9Sstevel@tonic-gate  * Define CURL here so that while you are reading
125*7c478bd9Sstevel@tonic-gate  * the code, it does not affect "vi" in pattern
126*7c478bd9Sstevel@tonic-gate  * matching.
127*7c478bd9Sstevel@tonic-gate  */
128*7c478bd9Sstevel@tonic-gate #define	CURL_BEGIN		'{'
129*7c478bd9Sstevel@tonic-gate #define	CURL_END		'}'
130*7c478bd9Sstevel@tonic-gate 
131*7c478bd9Sstevel@tonic-gate /* internal return codes */
132*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_SUCCESS	0
133*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_ERR		1
134*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_RECOVER_ERR	2
135*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_CURL_END	3
136*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_CURL_BEGIN	4
137*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_EOF		5
138*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_NO_VER_STR	6
139*7c478bd9Sstevel@tonic-gate 
140*7c478bd9Sstevel@tonic-gate /* special tokens in config file */
141*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_IP_VERSION_STR	"ip_version"
142*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_NEXT_ACTION_STR	"next_action"
143*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_NAME_STR 		"name"
144*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_MODULE_STR 		"module"
145*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_FILTER_STR 		"filter"
146*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_ACTION_STR 		"action"
147*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_CLASS_STR 		"class"
148*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_PARAMS_STR 		"params"
149*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_NEXT_STR		"next"
150*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_STATS_ENABLE_STR	"enable_stats"
151*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_GLOBAL_STATS_STR	"global_stats"
152*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_DROP_STR		"drop"
153*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_CONT_STR		"continue"
154*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_DEFER_STR		"defer"
155*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_TRUE_STR		"true"
156*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_FALSE_STR		"false"
157*7c478bd9Sstevel@tonic-gate #define	IPQOS_FMT_VERSION_STR		"fmt_version"
158*7c478bd9Sstevel@tonic-gate #define	IPQOS_IFNAME_STR		"if_name"
159*7c478bd9Sstevel@tonic-gate #define	IPQOS_PLACE_PRM_STR		IPQOS_CONF_PARAMS_STR
160*7c478bd9Sstevel@tonic-gate #define	IPQOS_PLACE_FILTER_STR		IPQOS_CONF_FILTER_STR
161*7c478bd9Sstevel@tonic-gate #define	IPQOS_PLACE_MAP_STR		"map"
162*7c478bd9Sstevel@tonic-gate 
163*7c478bd9Sstevel@tonic-gate /* special tokens in types file */
164*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_PERM_FILTER_MK	"#PERM_FILTER"
165*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_PERM_CLASS_MK	"#PERM_CLASS"
166*7c478bd9Sstevel@tonic-gate #define	IPQOS_FMT_STR			"fmt_version"
167*7c478bd9Sstevel@tonic-gate #define	IPQOS_MOD_STR			"mod_version"
168*7c478bd9Sstevel@tonic-gate 
169*7c478bd9Sstevel@tonic-gate 
170*7c478bd9Sstevel@tonic-gate /* nvlist parameters */
171*7c478bd9Sstevel@tonic-gate #define	IPQOS_CONF_IP_VERSION		"ipgpc.ip_version"
172*7c478bd9Sstevel@tonic-gate 
173*7c478bd9Sstevel@tonic-gate /* name lookup errors returned from domultihome() */
174*7c478bd9Sstevel@tonic-gate #define	IPQOS_LOOKUP_RETRY	1
175*7c478bd9Sstevel@tonic-gate #define	IPQOS_LOOKUP_FAIL	2
176*7c478bd9Sstevel@tonic-gate 
177*7c478bd9Sstevel@tonic-gate /*
178*7c478bd9Sstevel@tonic-gate  * used in calls to ipp_action_info() to encapuslate both an action and
179*7c478bd9Sstevel@tonic-gate  * an ipqosconf internal return code.
180*7c478bd9Sstevel@tonic-gate  */
181*7c478bd9Sstevel@tonic-gate typedef struct ipqos_actinfo_prm_s {
182*7c478bd9Sstevel@tonic-gate 	struct ipqos_conf_action_s *action;
183*7c478bd9Sstevel@tonic-gate 	int intl_ret;
184*7c478bd9Sstevel@tonic-gate } ipqos_actinfo_prm_t;
185*7c478bd9Sstevel@tonic-gate 
186*7c478bd9Sstevel@tonic-gate /*
187*7c478bd9Sstevel@tonic-gate  * skeletal list element struct used in manipulating lists of more complex
188*7c478bd9Sstevel@tonic-gate  * structures.
189*7c478bd9Sstevel@tonic-gate  */
190*7c478bd9Sstevel@tonic-gate typedef struct ipqos_list_el_s {
191*7c478bd9Sstevel@tonic-gate 	struct ipqos_list_el_s *next;
192*7c478bd9Sstevel@tonic-gate } ipqos_list_el_t;
193*7c478bd9Sstevel@tonic-gate 
194*7c478bd9Sstevel@tonic-gate typedef struct str_str {
195*7c478bd9Sstevel@tonic-gate 	char *s1;
196*7c478bd9Sstevel@tonic-gate 	char *s2;
197*7c478bd9Sstevel@tonic-gate } str_str_t;
198*7c478bd9Sstevel@tonic-gate 
199*7c478bd9Sstevel@tonic-gate typedef struct str_val {
200*7c478bd9Sstevel@tonic-gate 	char *string;
201*7c478bd9Sstevel@tonic-gate 	int value;
202*7c478bd9Sstevel@tonic-gate } str_val_t;
203*7c478bd9Sstevel@tonic-gate 
204*7c478bd9Sstevel@tonic-gate typedef struct str_val_nd {
205*7c478bd9Sstevel@tonic-gate 	struct str_val sv;
206*7c478bd9Sstevel@tonic-gate 	struct str_val_nd *next;
207*7c478bd9Sstevel@tonic-gate } str_val_nd_t;
208*7c478bd9Sstevel@tonic-gate 
209*7c478bd9Sstevel@tonic-gate /* type of msg to be printed by ipqos_msg */
210*7c478bd9Sstevel@tonic-gate enum msg_type { MT_ERROR, MT_WARNING, MT_LOG, MT_ENOSTR };
211*7c478bd9Sstevel@tonic-gate 
212*7c478bd9Sstevel@tonic-gate /* enum for allowable parameter types */
213*7c478bd9Sstevel@tonic-gate 
214*7c478bd9Sstevel@tonic-gate typedef enum ipqos_nvtype_e {
215*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_UINT8,
216*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_INT16,
217*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_UINT16,
218*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_INT32,
219*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_UINT32,
220*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_BOOLEAN,
221*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_STRING,
222*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_ACTION,
223*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_ADDRESS,
224*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_PORT,
225*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_PROTO,
226*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_ENUM,
227*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_IFNAME,
228*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_M_INDEX,
229*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_INT_ARRAY,
230*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_USER,
231*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_ADDRESS_MASK,
232*7c478bd9Sstevel@tonic-gate IPQOS_DATA_TYPE_IFINDEX
233*7c478bd9Sstevel@tonic-gate } ipqos_nvtype_t;
234*7c478bd9Sstevel@tonic-gate 
235*7c478bd9Sstevel@tonic-gate /*
236*7c478bd9Sstevel@tonic-gate  * passed to readnvpair to indicate which special meanings for nv names
237*7c478bd9Sstevel@tonic-gate  * to use.
238*7c478bd9Sstevel@tonic-gate  */
239*7c478bd9Sstevel@tonic-gate typedef enum place_e {
240*7c478bd9Sstevel@tonic-gate PL_ACTION, PL_FILTER, PL_CLASS, PL_PARAMS, PL_MAP, PL_ANY} place_t;
241*7c478bd9Sstevel@tonic-gate 
242*7c478bd9Sstevel@tonic-gate 
243*7c478bd9Sstevel@tonic-gate /* classifier filter representation */
244*7c478bd9Sstevel@tonic-gate 
245*7c478bd9Sstevel@tonic-gate typedef struct ipqos_conf_filter_s {
246*7c478bd9Sstevel@tonic-gate 	struct ipqos_conf_filter_s *next;
247*7c478bd9Sstevel@tonic-gate 	char name[IPQOS_CONF_NAME_LEN];
248*7c478bd9Sstevel@tonic-gate 	char class_name[IPQOS_CONF_NAME_LEN];
249*7c478bd9Sstevel@tonic-gate 	nvlist_t *nvlist;
250*7c478bd9Sstevel@tonic-gate 	boolean_t new;
251*7c478bd9Sstevel@tonic-gate 	boolean_t modified;
252*7c478bd9Sstevel@tonic-gate 	boolean_t cr_mod;
253*7c478bd9Sstevel@tonic-gate 	boolean_t todel;
254*7c478bd9Sstevel@tonic-gate 	boolean_t deleted;
255*7c478bd9Sstevel@tonic-gate 	uint32_t originator;
256*7c478bd9Sstevel@tonic-gate 	char *src_nd_name;
257*7c478bd9Sstevel@tonic-gate 	char *dst_nd_name;
258*7c478bd9Sstevel@tonic-gate 	int instance;
259*7c478bd9Sstevel@tonic-gate 	uint32_t lineno;
260*7c478bd9Sstevel@tonic-gate 	uint32_t ip_versions;
261*7c478bd9Sstevel@tonic-gate 	int nlerr;
262*7c478bd9Sstevel@tonic-gate } ipqos_conf_filter_t;
263*7c478bd9Sstevel@tonic-gate 
264*7c478bd9Sstevel@tonic-gate 
265*7c478bd9Sstevel@tonic-gate /*
266*7c478bd9Sstevel@tonic-gate  * action reference - used to store information and reference an action struct.
267*7c478bd9Sstevel@tonic-gate  */
268*7c478bd9Sstevel@tonic-gate 
269*7c478bd9Sstevel@tonic-gate typedef struct ipqos_conf_act_ref_s {
270*7c478bd9Sstevel@tonic-gate 	struct ipqos_conf_act_ref_s *next;
271*7c478bd9Sstevel@tonic-gate 	struct ipqos_conf_act_ref_s *prev;
272*7c478bd9Sstevel@tonic-gate 	char name[IPQOS_CONF_NAME_LEN];
273*7c478bd9Sstevel@tonic-gate 	char field[IPQOS_CONF_PNAME_LEN];
274*7c478bd9Sstevel@tonic-gate 	struct ipqos_conf_action_s *action;
275*7c478bd9Sstevel@tonic-gate 	nvlist_t *nvlist;
276*7c478bd9Sstevel@tonic-gate } ipqos_conf_act_ref_t;
277*7c478bd9Sstevel@tonic-gate 
278*7c478bd9Sstevel@tonic-gate 
279*7c478bd9Sstevel@tonic-gate /* classifier class representation */
280*7c478bd9Sstevel@tonic-gate 
281*7c478bd9Sstevel@tonic-gate typedef struct ipqos_conf_class_s {
282*7c478bd9Sstevel@tonic-gate 	struct ipqos_conf_class_s *next;
283*7c478bd9Sstevel@tonic-gate 	char name[IPQOS_CONF_NAME_LEN];
284*7c478bd9Sstevel@tonic-gate 	nvlist_t *nvlist;
285*7c478bd9Sstevel@tonic-gate 	ipqos_conf_act_ref_t *alist;
286*7c478bd9Sstevel@tonic-gate 	boolean_t modified;
287*7c478bd9Sstevel@tonic-gate 	boolean_t new;
288*7c478bd9Sstevel@tonic-gate 	boolean_t cr_mod;
289*7c478bd9Sstevel@tonic-gate 	boolean_t todel;
290*7c478bd9Sstevel@tonic-gate 	boolean_t deleted;
291*7c478bd9Sstevel@tonic-gate 	boolean_t stats_enable;
292*7c478bd9Sstevel@tonic-gate 	uint32_t originator;
293*7c478bd9Sstevel@tonic-gate 	uint32_t lineno;
294*7c478bd9Sstevel@tonic-gate } ipqos_conf_class_t;
295*7c478bd9Sstevel@tonic-gate 
296*7c478bd9Sstevel@tonic-gate /* action parameters representation */
297*7c478bd9Sstevel@tonic-gate 
298*7c478bd9Sstevel@tonic-gate typedef struct ipqos_conf_params_s {
299*7c478bd9Sstevel@tonic-gate 	struct ipqos_conf_params_s *next;
300*7c478bd9Sstevel@tonic-gate 	ipqos_conf_act_ref_t *actions;
301*7c478bd9Sstevel@tonic-gate 	nvlist_t *nvlist;
302*7c478bd9Sstevel@tonic-gate 	boolean_t modified;
303*7c478bd9Sstevel@tonic-gate 	boolean_t stats_enable;
304*7c478bd9Sstevel@tonic-gate 	uint32_t originator;
305*7c478bd9Sstevel@tonic-gate 	uint32_t lineno;
306*7c478bd9Sstevel@tonic-gate 	boolean_t cr_mod;
307*7c478bd9Sstevel@tonic-gate } ipqos_conf_params_t;
308*7c478bd9Sstevel@tonic-gate 
309*7c478bd9Sstevel@tonic-gate 
310*7c478bd9Sstevel@tonic-gate /* signifys which stage of configuration application has just past */
311*7c478bd9Sstevel@tonic-gate enum visit {ADD_VISITED = 1, MOD_VISITED, REM_VISITED, INCYCLE_VISITED};
312*7c478bd9Sstevel@tonic-gate 
313*7c478bd9Sstevel@tonic-gate /*
314*7c478bd9Sstevel@tonic-gate  * action representation, with parameters, and lists of filters and classes
315*7c478bd9Sstevel@tonic-gate  * if classifier action.
316*7c478bd9Sstevel@tonic-gate  */
317*7c478bd9Sstevel@tonic-gate typedef struct ipqos_conf_action_s {
318*7c478bd9Sstevel@tonic-gate 	struct ipqos_conf_action_s *next;
319*7c478bd9Sstevel@tonic-gate 	char name[IPQOS_CONF_NAME_LEN];
320*7c478bd9Sstevel@tonic-gate 	char module[IPQOS_CONF_NAME_LEN];
321*7c478bd9Sstevel@tonic-gate 	ipqos_conf_filter_t *filters;
322*7c478bd9Sstevel@tonic-gate 	ipqos_conf_class_t *classes;
323*7c478bd9Sstevel@tonic-gate 	ipqos_conf_params_t *params;
324*7c478bd9Sstevel@tonic-gate 	nvlist_t *nvlist;
325*7c478bd9Sstevel@tonic-gate 	boolean_t todel;
326*7c478bd9Sstevel@tonic-gate 	boolean_t deleted;
327*7c478bd9Sstevel@tonic-gate 	boolean_t new;
328*7c478bd9Sstevel@tonic-gate 	boolean_t modified;
329*7c478bd9Sstevel@tonic-gate 	boolean_t cr_mod;
330*7c478bd9Sstevel@tonic-gate 	ipqos_conf_act_ref_t *dependencies;
331*7c478bd9Sstevel@tonic-gate 	enum visit visited;
332*7c478bd9Sstevel@tonic-gate 	uint32_t lineno;
333*7c478bd9Sstevel@tonic-gate 	ipqos_conf_filter_t *retry_filters;
334*7c478bd9Sstevel@tonic-gate 	char **perm_classes;
335*7c478bd9Sstevel@tonic-gate 	int num_perm_classes;
336*7c478bd9Sstevel@tonic-gate 	int module_version;
337*7c478bd9Sstevel@tonic-gate } ipqos_conf_action_t;
338*7c478bd9Sstevel@tonic-gate 
339*7c478bd9Sstevel@tonic-gate 
340*7c478bd9Sstevel@tonic-gate #ifdef __cplusplus
341*7c478bd9Sstevel@tonic-gate }
342*7c478bd9Sstevel@tonic-gate #endif
343*7c478bd9Sstevel@tonic-gate 
344*7c478bd9Sstevel@tonic-gate #endif /* _IPQOS_CONF_H */
345