xref: /illumos-gate/usr/src/boot/libsa/bootp.h (revision 22028508fd28d36ff74dc02c5774a8ba1f0db045)
1*22028508SToomas Soome /*
2*22028508SToomas Soome  * Bootstrap Protocol (BOOTP).  RFC951 and RFC1048.
3*22028508SToomas Soome  *
4*22028508SToomas Soome  * This file specifies the "implementation-independent" BOOTP protocol
5*22028508SToomas Soome  * information which is common to both client and server.
6*22028508SToomas Soome  *
7*22028508SToomas Soome  * Copyright 1988 by Carnegie Mellon.
8*22028508SToomas Soome  *
9*22028508SToomas Soome  * Permission to use, copy, modify, and distribute this program for any
10*22028508SToomas Soome  * purpose and without fee is hereby granted, provided that this copyright
11*22028508SToomas Soome  * and permission notice appear on all copies and supporting documentation,
12*22028508SToomas Soome  * the name of Carnegie Mellon not be used in advertising or publicity
13*22028508SToomas Soome  * pertaining to distribution of the program without specific prior
14*22028508SToomas Soome  * permission, and notice be given in supporting documentation that copying
15*22028508SToomas Soome  * and distribution is by permission of Carnegie Mellon and Stanford
16*22028508SToomas Soome  * University.  Carnegie Mellon makes no representations about the
17*22028508SToomas Soome  * suitability of this software for any purpose.  It is provided "as is"
18*22028508SToomas Soome  * without express or implied warranty.
19*22028508SToomas Soome  */
20*22028508SToomas Soome 
21*22028508SToomas Soome #ifndef _BOOTP_H_
22*22028508SToomas Soome #define	_BOOTP_H_
23*22028508SToomas Soome 
24*22028508SToomas Soome #include <netinet/in.h>
25*22028508SToomas Soome 
26*22028508SToomas Soome struct bootp {
27*22028508SToomas Soome 	unsigned char	bp_op;		/* packet opcode type */
28*22028508SToomas Soome 	unsigned char	bp_htype;	/* hardware addr type */
29*22028508SToomas Soome 	unsigned char	bp_hlen;	/* hardware addr length */
30*22028508SToomas Soome 	unsigned char	bp_hops;	/* gateway hops */
31*22028508SToomas Soome 	unsigned int	bp_xid;		/* transaction ID */
32*22028508SToomas Soome 	unsigned short	bp_secs;	/* seconds since boot began */
33*22028508SToomas Soome 	unsigned short	bp_flags;
34*22028508SToomas Soome 	struct in_addr	bp_ciaddr;	/* client IP address */
35*22028508SToomas Soome 	struct in_addr	bp_yiaddr;	/* 'your' IP address */
36*22028508SToomas Soome 	struct in_addr	bp_siaddr;	/* server IP address */
37*22028508SToomas Soome 	struct in_addr	bp_giaddr;	/* gateway IP address */
38*22028508SToomas Soome 	unsigned char	bp_chaddr[16];	/* client hardware address */
39*22028508SToomas Soome 	unsigned char	bp_sname[64];	/* server host name */
40*22028508SToomas Soome 	char	bp_file[128];		/* boot file name */
41*22028508SToomas Soome #ifdef SUPPORT_DHCP
42*22028508SToomas Soome #define	BOOTP_VENDSIZE 312
43*22028508SToomas Soome #else
44*22028508SToomas Soome #define	BOOTP_VENDSIZE 64
45*22028508SToomas Soome #endif
46*22028508SToomas Soome 	unsigned char	bp_vend[BOOTP_VENDSIZE]; /* vendor-specific area */
47*22028508SToomas Soome };
48*22028508SToomas Soome 
49*22028508SToomas Soome /*
50*22028508SToomas Soome  * UDP port numbers, server and client.
51*22028508SToomas Soome  */
52*22028508SToomas Soome #define	IPPORT_BOOTPS		67
53*22028508SToomas Soome #define	IPPORT_BOOTPC		68
54*22028508SToomas Soome 
55*22028508SToomas Soome #define	BOOTREPLY		2
56*22028508SToomas Soome #define	BOOTREQUEST		1
57*22028508SToomas Soome 
58*22028508SToomas Soome 
59*22028508SToomas Soome /*
60*22028508SToomas Soome  * Vendor magic cookie (v_magic) for CMU
61*22028508SToomas Soome  */
62*22028508SToomas Soome #define	VM_CMU		"CMU"
63*22028508SToomas Soome 
64*22028508SToomas Soome /*
65*22028508SToomas Soome  * Vendor magic cookie (v_magic) for RFC1048
66*22028508SToomas Soome  */
67*22028508SToomas Soome #define	VM_RFC1048	{ 99, 130, 83, 99 }
68*22028508SToomas Soome 
69*22028508SToomas Soome /*
70*22028508SToomas Soome  * RFC1048 tag values used to specify what information is being supplied in
71*22028508SToomas Soome  * the vendor field of the packet.
72*22028508SToomas Soome  */
73*22028508SToomas Soome 
74*22028508SToomas Soome #define	TAG_PAD			((unsigned char)   0)
75*22028508SToomas Soome #define	TAG_SUBNET_MASK		((unsigned char)   1)
76*22028508SToomas Soome #define	TAG_TIME_OFFSET		((unsigned char)   2)
77*22028508SToomas Soome #define	TAG_GATEWAY		((unsigned char)   3)
78*22028508SToomas Soome #define	TAG_TIME_SERVER		((unsigned char)   4)
79*22028508SToomas Soome #define	TAG_NAME_SERVER		((unsigned char)   5)
80*22028508SToomas Soome #define	TAG_DOMAIN_SERVER	((unsigned char)   6)
81*22028508SToomas Soome #define	TAG_LOG_SERVER		((unsigned char)   7)
82*22028508SToomas Soome #define	TAG_COOKIE_SERVER	((unsigned char)   8)
83*22028508SToomas Soome #define	TAG_LPR_SERVER		((unsigned char)   9)
84*22028508SToomas Soome #define	TAG_IMPRESS_SERVER	((unsigned char)  10)
85*22028508SToomas Soome #define	TAG_RLP_SERVER		((unsigned char)  11)
86*22028508SToomas Soome #define	TAG_HOSTNAME		((unsigned char)  12)
87*22028508SToomas Soome #define	TAG_BOOTSIZE		((unsigned char)  13)
88*22028508SToomas Soome #define	TAG_DUMPFILE		((unsigned char)  14)
89*22028508SToomas Soome #define	TAG_DOMAINNAME		((unsigned char)  15)
90*22028508SToomas Soome #define	TAG_SWAPSERVER		((unsigned char)  16)
91*22028508SToomas Soome #define	TAG_ROOTPATH		((unsigned char)  17)
92*22028508SToomas Soome #define	TAG_INTF_MTU		((unsigned char)  26)
93*22028508SToomas Soome 
94*22028508SToomas Soome #ifdef SUPPORT_DHCP
95*22028508SToomas Soome #define	TAG_REQ_ADDR		((unsigned char)  50)
96*22028508SToomas Soome #define	TAG_LEASETIME		((unsigned char)  51)
97*22028508SToomas Soome #define	TAG_OVERLOAD		((unsigned char)  52)
98*22028508SToomas Soome #define	TAG_DHCP_MSGTYPE	((unsigned char)  53)
99*22028508SToomas Soome #define	TAG_SERVERID		((unsigned char)  54)
100*22028508SToomas Soome #define	TAG_PARAM_REQ		((unsigned char)  55)
101*22028508SToomas Soome #define	TAG_MSG			((unsigned char)  56)
102*22028508SToomas Soome #define	TAG_MAXSIZE		((unsigned char)  57)
103*22028508SToomas Soome #define	TAG_T1			((unsigned char)  58)
104*22028508SToomas Soome #define	TAG_T2			((unsigned char)  59)
105*22028508SToomas Soome #define	TAG_CLASSID		((unsigned char)  60)
106*22028508SToomas Soome #define	TAG_CLIENTID		((unsigned char)  61)
107*22028508SToomas Soome #define	TAG_USER_CLASS		((unsigned char)  77)
108*22028508SToomas Soome #endif
109*22028508SToomas Soome 
110*22028508SToomas Soome #define	TAG_END			((unsigned char) 255)
111*22028508SToomas Soome 
112*22028508SToomas Soome #ifdef SUPPORT_DHCP
113*22028508SToomas Soome #define	DHCPDISCOVER 1
114*22028508SToomas Soome #define	DHCPOFFER 2
115*22028508SToomas Soome #define	DHCPREQUEST 3
116*22028508SToomas Soome #define	DHCPDECLINE 4
117*22028508SToomas Soome #define	DHCPACK 5
118*22028508SToomas Soome #define	DHCPNAK 6
119*22028508SToomas Soome #define	DHCPRELEASE 7
120*22028508SToomas Soome #endif
121*22028508SToomas Soome 
122*22028508SToomas Soome /*
123*22028508SToomas Soome  * "vendor" data permitted for CMU bootp clients.
124*22028508SToomas Soome  */
125*22028508SToomas Soome 
126*22028508SToomas Soome struct cmu_vend {
127*22028508SToomas Soome 	unsigned char	v_magic[4];	/* magic number */
128*22028508SToomas Soome 	unsigned int	v_flags;	/* flags/opcodes, etc. */
129*22028508SToomas Soome 	struct in_addr	v_smask;	/* Subnet mask */
130*22028508SToomas Soome 	struct in_addr	v_dgate;	/* Default gateway */
131*22028508SToomas Soome 	struct in_addr	v_dns1, v_dns2; /* Domain name servers */
132*22028508SToomas Soome 	struct in_addr	v_ins1, v_ins2; /* IEN-116 name servers */
133*22028508SToomas Soome 	struct in_addr	v_ts1, v_ts2;	/* Time servers */
134*22028508SToomas Soome 	unsigned char	v_unused[25];	/* currently unused */
135*22028508SToomas Soome };
136*22028508SToomas Soome 
137*22028508SToomas Soome 
138*22028508SToomas Soome /* v_flags values */
139*22028508SToomas Soome #define	VF_SMASK	1	/* Subnet mask field contains valid data */
140*22028508SToomas Soome 
141*22028508SToomas Soome /* cached bootp response/dhcp ack */
142*22028508SToomas Soome extern struct bootp *bootp_response;
143*22028508SToomas Soome extern size_t bootp_response_size;
144*22028508SToomas Soome 
145*22028508SToomas Soome #endif /* _BOOTP_H_ */
146