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