1#ifndef	_BOOTP_H
2#define	_BOOTP_H
3
4#include "if_ether.h"
5#include "ip.h"
6#include "udp.h"
7
8#ifndef	MAX_BOOTP_RETRIES
9#define MAX_BOOTP_RETRIES	20
10#endif
11
12#ifdef	ALTERNATE_DHCP_PORTS_1067_1068
13#undef	NON_STANDARD_BOOTP_SERVER
14#define	NON_STANDARD_BOOTP_SERVER	1067
15#undef	NON_STANDARD_BOOTP_CLIENT
16#define	NON_STANDARD_BOOTP_CLIENT	1068
17#endif
18
19#ifdef	NON_STANDARD_BOOTP_SERVER
20#define	BOOTP_SERVER	NON_STANDARD_BOOTP_SERVER
21#else
22#define BOOTP_SERVER	67
23#endif
24#ifdef	NON_STANDARD_BOOTP_CLIENT
25#define	BOOTP_CLIENT	NON_STANDARD_BOOTP_CLIENT
26#else
27#define BOOTP_CLIENT	68
28#endif
29
30#define BOOTP_REQUEST	1
31#define BOOTP_REPLY	2
32
33#define TAG_LEN(p)		(*((p)+1))
34#define RFC1533_COOKIE		99, 130, 83, 99
35#define RFC1533_PAD		0
36#define RFC1533_NETMASK		1
37#define RFC1533_TIMEOFFSET	2
38#define RFC1533_GATEWAY		3
39#define RFC1533_TIMESERVER	4
40#define RFC1533_IEN116NS	5
41#define RFC1533_DNS		6
42#define RFC1533_LOGSERVER	7
43#define RFC1533_COOKIESERVER	8
44#define RFC1533_LPRSERVER	9
45#define RFC1533_IMPRESSSERVER	10
46#define RFC1533_RESOURCESERVER	11
47#define RFC1533_HOSTNAME	12
48#define RFC1533_BOOTFILESIZE	13
49#define RFC1533_MERITDUMPFILE	14
50#define RFC1533_DOMAINNAME	15
51#define RFC1533_SWAPSERVER	16
52#define RFC1533_ROOTPATH	17
53#define RFC1533_EXTENSIONPATH	18
54#define RFC1533_IPFORWARDING	19
55#define RFC1533_IPSOURCEROUTING	20
56#define RFC1533_IPPOLICYFILTER	21
57#define RFC1533_IPMAXREASSEMBLY	22
58#define RFC1533_IPTTL		23
59#define RFC1533_IPMTU		24
60#define RFC1533_IPMTUPLATEAU	25
61#define RFC1533_INTMTU		26
62#define RFC1533_INTLOCALSUBNETS	27
63#define RFC1533_INTBROADCAST	28
64#define RFC1533_INTICMPDISCOVER	29
65#define RFC1533_INTICMPRESPOND	30
66#define RFC1533_INTROUTEDISCOVER 31
67#define RFC1533_INTROUTESOLICIT	32
68#define RFC1533_INTSTATICROUTES	33
69#define RFC1533_LLTRAILERENCAP	34
70#define RFC1533_LLARPCACHETMO	35
71#define RFC1533_LLETHERNETENCAP	36
72#define RFC1533_TCPTTL		37
73#define RFC1533_TCPKEEPALIVETMO	38
74#define RFC1533_TCPKEEPALIVEGB	39
75#define RFC1533_NISDOMAIN	40
76#define RFC1533_NISSERVER	41
77#define RFC1533_NTPSERVER	42
78#define RFC1533_VENDOR		43
79#define RFC1533_NBNS		44
80#define RFC1533_NBDD		45
81#define RFC1533_NBNT		46
82#define RFC1533_NBSCOPE		47
83#define RFC1533_XFS		48
84#define RFC1533_XDM		49
85#ifndef	NO_DHCP_SUPPORT
86#define RFC2132_REQ_ADDR	50
87#define RFC2132_MSG_TYPE	53
88#define RFC2132_SRV_ID		54
89#define RFC2132_PARAM_LIST	55
90#define RFC2132_MAX_SIZE	57
91#define	RFC2132_VENDOR_CLASS_ID	60
92
93#define DHCPDISCOVER		1
94#define DHCPOFFER		2
95#define DHCPREQUEST		3
96#define DHCPACK			5
97#endif	/* NO_DHCP_SUPPORT */
98
99#define RFC1533_VENDOR_MAJOR	0
100#define RFC1533_VENDOR_MINOR	0
101
102#define RFC1533_VENDOR_MAGIC	128
103#define RFC1533_VENDOR_ADDPARM	129
104#define	RFC1533_VENDOR_ETHDEV	130
105#ifdef	IMAGE_FREEBSD
106#define RFC1533_VENDOR_HOWTO    132
107#define RFC1533_VENDOR_KERNEL_ENV    133
108#endif
109#define RFC1533_VENDOR_ETHERBOOT_ENCAP 150
110#define RFC1533_VENDOR_MNUOPTS	160
111#define RFC1533_VENDOR_NIC_DEV_ID 175
112#define RFC1533_VENDOR_SELECTION 176
113#define RFC1533_VENDOR_ARCH     177
114#define RFC1533_VENDOR_MOTD	184
115#define RFC1533_VENDOR_NUMOFMOTD 8
116#define RFC1533_VENDOR_IMG	192
117#define RFC1533_VENDOR_NUMOFIMG	16
118
119#define RFC1533_VENDOR_CONFIGFILE 150
120
121#define RFC1533_END		255
122
123#define BOOTP_VENDOR_LEN	64
124
125#define DHCP_OPT_LEN		312
126
127/* Format of a bootp packet */
128struct bootp_t {
129	uint8_t  bp_op;
130	uint8_t  bp_htype;
131	uint8_t  bp_hlen;
132	uint8_t  bp_hops;
133	uint32_t bp_xid;
134	uint16_t bp_secs;
135	uint16_t unused;
136	in_addr bp_ciaddr;
137	in_addr bp_yiaddr;
138	in_addr bp_siaddr;
139	in_addr bp_giaddr;
140	uint8_t  bp_hwaddr[16];
141	uint8_t  bp_sname[64];
142	char     bp_file[128];
143	uint8_t  bp_vend[BOOTP_VENDOR_LEN];
144};
145
146struct dhcp_t {
147	uint8_t  bp_op;
148	uint8_t  bp_htype;
149	uint8_t  bp_hlen;
150	uint8_t  bp_hops;
151	uint32_t bp_xid;
152	uint16_t bp_secs;
153	uint16_t bp_flag;
154	in_addr bp_ciaddr;
155	in_addr bp_yiaddr;
156	in_addr bp_siaddr;
157	in_addr bp_giaddr;
158	uint8_t  bp_hwaddr[16];
159	uint8_t  bp_sname[64];
160	char     bp_file[128];
161	uint8_t  bp_vend[DHCP_OPT_LEN];
162};
163
164/* Format of a bootp IP packet */
165struct bootpip_t
166{
167	struct iphdr ip;
168	struct udphdr udp;
169	struct bootp_t bp;
170};
171struct dhcpip_t
172{
173	struct iphdr ip;
174	struct udphdr udp;
175	struct dhcp_t bp;
176};
177
178#define MAX_RFC1533_VENDLEN (ETH_MAX_MTU - sizeof(struct bootpip_t) + BOOTP_VENDOR_LEN)
179
180#define BOOTP_DATA_ADDR (&bootp_data)
181
182#endif	/* _BOOTP_H */
183