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