xref: /titanic_50/usr/src/lib/libdhcputil/common/dhcp_symbol.h (revision 8b464eb836173b92f2b7a65623cd06c8c3c59289)
1 /*
2  * CDDL HEADER START
3  *
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.
8  *
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.
13  *
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]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2001-2003 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef	_DHCP_SYMBOL_H
28 #define	_DHCP_SYMBOL_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 /*
33  * This file, along with <dhcp_symbol_common.h>, contains the DHCP symbol
34  * constants and the definitions for the external interfaces to the parsing
35  * logic (contained in dhcp_symbol.c) for symbol definitions. These
36  * definitions can and should be used by all consumers of DHCP symbols.
37  */
38 
39 #include <sys/types.h>
40 #include <dhcp_svc_private.h>
41 #include <dhcp_symbol_common.h>
42 
43 #ifdef	__cplusplus
44 extern "C" {
45 #endif
46 
47 /*
48  * Vendor class length (and implicitly, the number of classes)
49  */
50 #define	DSYM_CLASS_SIZE		DSVC_MAX_MACSYM_LEN	/* Single class max */
51 #define	DSYM_MAX_CLASS_SIZE	(DSYM_CLASS_SIZE * 10)	/* At least 10 */
52 
53 /*
54  * Maximum symbol length is defined by the libdhcpsvc.
55  */
56 #define	DSYM_MAX_SYM_LEN	DSVC_MAX_MACSYM_LEN
57 
58 /*
59  * symbol parsing error codes
60  */
61 typedef enum {
62 	DSYM_SUCCESS,
63 	DSYM_SYNTAX_ERROR,
64 	DSYM_NULL_FIELD,
65 	DSYM_TOO_MANY_FIELDS,
66 	DSYM_CODE_OUT_OF_RANGE,
67 	DSYM_VALUE_OUT_OF_RANGE,
68 	DSYM_INVALID_CAT,
69 	DSYM_INVALID_TYPE,
70 	DSYM_EXCEEDS_CLASS_SIZE,
71 	DSYM_EXCEEDS_MAX_CLASS_SIZE,
72 	DSYM_NO_MEMORY,
73 	DSYM_INVALID_FIELD_NUM
74 } dsym_errcode_t;
75 
76 /*
77  * symbol fields
78  */
79 #define	DSYM_CAT_FIELD		0
80 #define	DSYM_CODE_FIELD		1
81 #define	DSYM_TYPE_FIELD		2
82 #define	DSYM_GRAN_FIELD		3
83 #define	DSYM_MAX_FIELD		4
84 #define	DSYM_NUM_FIELDS		5
85 #define	DSYM_FIRST_FIELD	DSYM_CAT_FIELD
86 
87 /*
88  * This structure is used by the dhcp_symbol_t structure below
89  * when the option being defined is a vendor option. In which case,
90  * this structure contains the client classes for which the option
91  * applies.
92  */
93 typedef struct dhcp_classes {
94 	char		**dc_names;
95 	uint8_t		dc_cnt;
96 } dhcp_classes_t;
97 
98 /*
99  * This structure is used to define a DHCP symbol. The structure is
100  * used by both the inittab parsing routines and by the dhcptab parsing
101  * routines to define a symbol definition in either of those tables.
102  */
103 typedef struct dhcp_symbol {
104 	dsym_category_t	ds_category;			/* category */
105 	ushort_t	ds_code;			/* option code */
106 	char		ds_name[DSYM_MAX_SYM_LEN + 1];	/* option name */
107 	dsym_cdtype_t	ds_type;			/* type of parm */
108 	uchar_t		ds_gran;			/* granularity */
109 	uchar_t		ds_max;				/* maximum number */
110 	dhcp_classes_t	ds_classes;			/* client classes */
111 } dhcp_symbol_t;
112 
113 extern void dsym_free_fields(char **);
114 extern void dsym_free_classes(dhcp_classes_t *);
115 extern void dsym_close_parser(char **, dhcp_symbol_t *);
116 extern dsym_errcode_t dsym_init_parser(const char *, const char *, char ***,
117     dhcp_symbol_t *);
118 extern dsym_errcode_t dsym_parse_field(int, char **, dhcp_symbol_t *);
119 extern dsym_errcode_t dsym_parser(char **, dhcp_symbol_t *, int *, boolean_t);
120 extern dsym_errcode_t dsym_get_cat_id(const char *, dsym_category_t *,
121     boolean_t);
122 extern dsym_errcode_t dsym_get_code_ranges(const char *cat, ushort_t *,
123     ushort_t *, boolean_t);
124 extern dsym_errcode_t dsym_get_type_id(const char *, dsym_cdtype_t *,
125     boolean_t);
126 
127 #ifdef	__cplusplus
128 }
129 #endif
130 
131 #endif	/* _DHCP_SYMBOL_H */
132