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 1996-2003 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27/*
28 * dhcp.h - Generic DHCP definitions, as per RFC's 2131 and 2132.
29 */
30
31#ifndef	_DHCP_H
32#define	_DHCP_H
33
34#pragma ident	"%Z%%M%	%I%	%E% SMI"
35
36#ifdef	__cplusplus
37extern "C" {
38#endif
39
40#ifdef  _REENTRANT
41#include <thread.h>
42#endif  /* _REENTRANT */
43
44/*
45 * DHCP option codes.
46 */
47
48#define	CD_PAD			0
49#define	CD_END			255
50#define	CD_SUBNETMASK		1
51#define	CD_TIMEOFFSET		2
52#define	CD_ROUTER		3
53#define	CD_TIMESERV		4
54#define	CD_IEN116_NAME_SERV	5
55#define	CD_DNSSERV		6
56#define	CD_LOG_SERV		7
57#define	CD_COOKIE_SERV		8
58#define	CD_LPR_SERV		9
59#define	CD_IMPRESS_SERV		10
60#define	CD_RESOURCE_SERV	11
61#define	CD_HOSTNAME		12
62#define	CD_BOOT_SIZE		13
63#define	CD_DUMP_FILE		14
64#define	CD_DNSDOMAIN		15
65#define	CD_SWAP_SERV		16
66#define	CD_ROOT_PATH		17
67#define	CD_EXTEND_PATH		18
68
69/* IP layer parameters */
70#define	CD_IP_FORWARDING_ON	19
71#define	CD_NON_LCL_ROUTE_ON	20
72#define	CD_POLICY_FILTER	21
73#define	CD_MAXIPSIZE		22
74#define	CD_IPTTL		23
75#define	CD_PATH_MTU_TIMEOUT	24
76#define	CD_PATH_MTU_TABLE_SZ	25
77
78/* IP layer parameters per interface */
79#define	CD_MTU			26
80#define	CD_ALL_SUBNETS_LCL_ON	27
81#define	CD_BROADCASTADDR	28
82#define	CD_MASK_DISCVRY_ON	29
83#define	CD_MASK_SUPPLIER_ON	30
84#define	CD_ROUTER_DISCVRY_ON	31
85#define	CD_ROUTER_SOLICIT_SERV	32
86#define	CD_STATIC_ROUTE		33
87
88/* Link Layer Parameters per Interface */
89#define	CD_TRAILER_ENCAPS_ON	34
90#define	CD_ARP_TIMEOUT		35
91#define	CD_ETHERNET_ENCAPS_ON	36
92
93/* TCP Parameters */
94#define	CD_TCP_TTL		37
95#define	CD_TCP_KALIVE_INTVL	38
96#define	CD_TCP_KALIVE_GRBG_ON	39
97
98/* Application layer parameters */
99#define	CD_NIS_DOMAIN		40
100#define	CD_NIS_SERV		41
101#define	CD_NTP_SERV		42
102#define	CD_VENDOR_SPEC		43
103
104/* NetBIOS parameters */
105#define	CD_NETBIOS_NAME_SERV	44
106#define	CD_NETBIOS_DIST_SERV	45
107#define	CD_NETBIOS_NODE_TYPE	46
108#define	CD_NETBIOS_SCOPE	47
109
110/* X Window parameters */
111#define	CD_XWIN_FONT_SERV	48
112#define	CD_XWIN_DISP_SERV	49
113
114/* DHCP protocol extension options */
115#define	CD_REQUESTED_IP_ADDR	50
116#define	CD_LEASE_TIME		51
117#define	CD_OPTION_OVERLOAD	52
118#define	CD_DHCP_TYPE		53
119#define	CD_SERVER_ID		54
120#define	CD_REQUEST_LIST		55
121#define	CD_MESSAGE		56
122#define	CD_MAX_DHCP_SIZE	57
123#define	CD_T1_TIME		58
124#define	CD_T2_TIME		59
125#define	CD_CLASS_ID		60
126#define	CD_CLIENT_ID		61
127
128/* Netware options */
129#define	CD_NW_IP_DOMAIN		62
130#define	CD_NW_IP_OPTIONS	63
131
132/* Nisplus options */
133#define	CD_NISPLUS_DMAIN	64
134#define	CD_NISPLUS_SERVS	65
135
136/* Optional sname/bootfile options */
137#define	CD_TFTP_SERV_NAME	66
138#define	CD_OPT_BOOTFILE_NAME	67
139
140/* Additional server options */
141#define	CD_MOBILE_IP_AGENT	68
142#define	CD_SMTP_SERVS		69
143#define	CD_POP3_SERVS		70
144#define	CD_NNTP_SERVS		71
145#define	CD_WWW_SERVS		72
146#define	CD_FINGER_SERVS		73
147#define	CD_IRC_SERVS		74
148
149/* Streettalk options */
150#define	CD_STREETTALK_SERVS	75
151#define	CD_STREETTALK_DA_SERVS	76
152
153/* User class identifier */
154#define	CD_USER_CLASS_ID	77
155
156/* Newer options */
157
158#define	CD_SLPDA		78
159#define	CD_SLPSS		79
160#define	CD_AGENTOPT		82
161#define	CD_FQDN			89
162#define	CD_PXEARCHi		93
163#define	CD_PXENIIi		94
164#define	CD_PXECID		95
165#define	CD_MULTICST		107
166
167#define	DHCP_FIRST_OPT		CD_SUBNETMASK
168#define	DHCP_LAST_STD		CD_MULTICST
169#define	DHCP_SITE_OPT		128		/* inclusive */
170#define	DHCP_END_SITE		254
171#define	DHCP_LAST_OPT		DHCP_END_SITE	/* last op code */
172
173#define	DHCP_MAX_OPT_SIZE	255	/* maximum option size in octets */
174
175/*
176 * DHCP Packet. What will fit in a ethernet frame. We may use a smaller
177 * size, based on what our transport can handle.
178 */
179#define	DHCP_DEF_MAX_SIZE	576	/* as spec'ed in RFC 2131 */
180#define	PKT_BUFFER		1486	/* max possible size of pkt buffer */
181#define	BASE_PKT_SIZE		240	/* everything but the options */
182typedef struct dhcp {
183	uint8_t		op;		/* message opcode */
184	uint8_t		htype;		/* Hardware address type */
185	uint8_t		hlen;		/* Hardware address length */
186	uint8_t		hops;		/* Used by relay agents */
187	uint32_t	xid;		/* transaction id */
188	uint16_t	secs;		/* Secs elapsed since client boot */
189	uint16_t	flags;		/* DHCP Flags field */
190	struct in_addr	ciaddr;		/* client IP addr */
191	struct in_addr	yiaddr;		/* 'Your' IP addr. (from server) */
192	struct in_addr	siaddr;		/* Boot server IP addr */
193	struct in_addr	giaddr;		/* Relay agent IP addr */
194	uint8_t		chaddr[16];	/* Client hardware addr */
195	uint8_t		sname[64];	/* Optl. boot server hostname */
196	uint8_t		file[128];	/* boot file name (ascii path) */
197	uint8_t		cookie[4];	/* Magic cookie */
198	uint8_t		options[60];	/* Options */
199} PKT;
200
201typedef uint32_t	lease_t; /* DHCP lease time (32 bit quantity) */
202
203/*
204 * DHCP packet types. As per protocol.
205 */
206#define	DISCOVER	((uint8_t)1)
207#define	OFFER		((uint8_t)2)
208#define	REQUEST		((uint8_t)3)
209#define	DECLINE		((uint8_t)4)
210#define	ACK		((uint8_t)5)
211#define	NAK		((uint8_t)6)
212#define	RELEASE		((uint8_t)7)
213#define	INFORM		((uint8_t)8)
214
215/*
216 * Generic DHCP protocol defines
217 */
218#define	DHCP_PERM	((lease_t)0xffffffff)	/* "permanent" lease time */
219#define	BOOTREQUEST		(1)		/* BOOTP REQUEST opcode */
220#define	BOOTREPLY		(2)		/* BOOTP REPLY opcode */
221#define	BOOTMAGIC	{ 99, 130, 83, 99 }	/* rfc1048 magic cookie */
222#define	BCAST_MASK	0x8000			/* BROADCAST flag */
223
224#ifdef	__cplusplus
225}
226#endif
227
228#endif	/* _DHCP_H */
229