xref: /freebsd-src/libexec/bootpd/bootp.h (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
144099b7bSPaul Traina /************************************************************************
244099b7bSPaul Traina           Copyright 1988, 1991 by Carnegie Mellon University
344099b7bSPaul Traina 
444099b7bSPaul Traina                           All Rights Reserved
544099b7bSPaul Traina 
644099b7bSPaul Traina Permission to use, copy, modify, and distribute this software and its
744099b7bSPaul Traina documentation for any purpose and without fee is hereby granted, provided
844099b7bSPaul Traina that the above copyright notice appear in all copies and that both that
944099b7bSPaul Traina copyright notice and this permission notice appear in supporting
1044099b7bSPaul Traina documentation, and that the name of Carnegie Mellon University not be used
1144099b7bSPaul Traina in advertising or publicity pertaining to distribution of the software
1244099b7bSPaul Traina without specific, written prior permission.
1344099b7bSPaul Traina 
1444099b7bSPaul Traina CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
1544099b7bSPaul Traina SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
1644099b7bSPaul Traina IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
1744099b7bSPaul Traina DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
1844099b7bSPaul Traina PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
1944099b7bSPaul Traina ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
2044099b7bSPaul Traina SOFTWARE.
2144099b7bSPaul Traina ************************************************************************/
2244099b7bSPaul Traina 
2344099b7bSPaul Traina /*
2444099b7bSPaul Traina  * Bootstrap Protocol (BOOTP).  RFC951 and RFC1395.
2544099b7bSPaul Traina  *
2644099b7bSPaul Traina  *
2744099b7bSPaul Traina  * This file specifies the "implementation-independent" BOOTP protocol
2844099b7bSPaul Traina  * information which is common to both client and server.
2944099b7bSPaul Traina  *
3044099b7bSPaul Traina  */
3144099b7bSPaul Traina 
3244099b7bSPaul Traina #include "bptypes.h"	/* for int32, u_int32 */
3344099b7bSPaul Traina 
3444099b7bSPaul Traina #define BP_CHADDR_LEN	 16
3544099b7bSPaul Traina #define BP_SNAME_LEN	 64
3644099b7bSPaul Traina #define BP_FILE_LEN	128
3744099b7bSPaul Traina #define BP_VEND_LEN	 64
3844099b7bSPaul Traina #define BP_MINPKTSZ	300	/* to check sizeof(struct bootp) */
39*3f48bf18SIan Dowse /* Overhead to fit a bootp message into an Ethernet packet. */
40*3f48bf18SIan Dowse #define BP_MSG_OVERHEAD	(14 + 20 + 8)	/* Ethernet + IP + UDP headers */
4144099b7bSPaul Traina 
4244099b7bSPaul Traina struct bootp {
4344099b7bSPaul Traina     unsigned char    bp_op;			/* packet opcode type */
4444099b7bSPaul Traina     unsigned char    bp_htype;			/* hardware addr type */
4544099b7bSPaul Traina     unsigned char    bp_hlen;			/* hardware addr length */
4644099b7bSPaul Traina     unsigned char    bp_hops;			/* gateway hops */
478ef94ce8SMarcel Moolenaar     u_int32	     bp_xid;			/* transaction ID */
4844099b7bSPaul Traina     unsigned short   bp_secs;			/* seconds since boot began */
4944099b7bSPaul Traina     unsigned short   bp_flags;			/* RFC1532 broadcast, etc. */
5044099b7bSPaul Traina     struct in_addr   bp_ciaddr;			/* client IP address */
5144099b7bSPaul Traina     struct in_addr   bp_yiaddr;			/* 'your' IP address */
5244099b7bSPaul Traina     struct in_addr   bp_siaddr;			/* server IP address */
5344099b7bSPaul Traina     struct in_addr   bp_giaddr;			/* gateway IP address */
5444099b7bSPaul Traina     unsigned char    bp_chaddr[BP_CHADDR_LEN];	/* client hardware address */
5544099b7bSPaul Traina     char	     bp_sname[BP_SNAME_LEN];	/* server host name */
5644099b7bSPaul Traina     char	     bp_file[BP_FILE_LEN];	/* boot file name */
5744099b7bSPaul Traina     unsigned char    bp_vend[BP_VEND_LEN];	/* vendor-specific area */
5844099b7bSPaul Traina     /* note that bp_vend can be longer, extending to end of packet. */
5944099b7bSPaul Traina };
6044099b7bSPaul Traina 
6144099b7bSPaul Traina /*
6244099b7bSPaul Traina  * UDP port numbers, server and client.
6344099b7bSPaul Traina  */
6444099b7bSPaul Traina #define	IPPORT_BOOTPS		67
6544099b7bSPaul Traina #define	IPPORT_BOOTPC		68
6644099b7bSPaul Traina 
6744099b7bSPaul Traina #define BOOTREPLY		2
6844099b7bSPaul Traina #define BOOTREQUEST		1
6944099b7bSPaul Traina 
7044099b7bSPaul Traina /*
7144099b7bSPaul Traina  * Hardware types from Assigned Numbers RFC.
7244099b7bSPaul Traina  */
7344099b7bSPaul Traina #define HTYPE_ETHERNET		  1
7444099b7bSPaul Traina #define HTYPE_EXP_ETHERNET	  2
7544099b7bSPaul Traina #define HTYPE_AX25		  3
7644099b7bSPaul Traina #define HTYPE_PRONET		  4
7744099b7bSPaul Traina #define HTYPE_CHAOS		  5
7844099b7bSPaul Traina #define HTYPE_IEEE802		  6
7944099b7bSPaul Traina #define HTYPE_ARCNET		  7
8044099b7bSPaul Traina 
8144099b7bSPaul Traina /*
8244099b7bSPaul Traina  * Vendor magic cookie (v_magic) for CMU
8344099b7bSPaul Traina  */
8444099b7bSPaul Traina #define VM_CMU		"CMU"
8544099b7bSPaul Traina 
8644099b7bSPaul Traina /*
8744099b7bSPaul Traina  * Vendor magic cookie (v_magic) for RFC1048
8844099b7bSPaul Traina  */
8944099b7bSPaul Traina #define VM_RFC1048	{ 99, 130, 83, 99 }
9044099b7bSPaul Traina 
9144099b7bSPaul Traina 
9244099b7bSPaul Traina 
9344099b7bSPaul Traina /*
9444099b7bSPaul Traina  * Tag values used to specify what information is being supplied in
9544099b7bSPaul Traina  * the vendor (options) data area of the packet.
9644099b7bSPaul Traina  */
9744099b7bSPaul Traina /* RFC 1048 */
9844099b7bSPaul Traina #define TAG_END			((unsigned char) 255)
9944099b7bSPaul Traina #define TAG_PAD			((unsigned char)   0)
10044099b7bSPaul Traina #define TAG_SUBNET_MASK		((unsigned char)   1)
10144099b7bSPaul Traina #define TAG_TIME_OFFSET		((unsigned char)   2)
10244099b7bSPaul Traina #define TAG_GATEWAY		((unsigned char)   3)
10344099b7bSPaul Traina #define TAG_TIME_SERVER		((unsigned char)   4)
10444099b7bSPaul Traina #define TAG_NAME_SERVER		((unsigned char)   5)
10544099b7bSPaul Traina #define TAG_DOMAIN_SERVER	((unsigned char)   6)
10644099b7bSPaul Traina #define TAG_LOG_SERVER		((unsigned char)   7)
10744099b7bSPaul Traina #define TAG_COOKIE_SERVER	((unsigned char)   8)
10844099b7bSPaul Traina #define TAG_LPR_SERVER		((unsigned char)   9)
10944099b7bSPaul Traina #define TAG_IMPRESS_SERVER	((unsigned char)  10)
11044099b7bSPaul Traina #define TAG_RLP_SERVER		((unsigned char)  11)
11144099b7bSPaul Traina #define TAG_HOST_NAME		((unsigned char)  12)
11244099b7bSPaul Traina #define TAG_BOOT_SIZE		((unsigned char)  13)
11344099b7bSPaul Traina /* RFC 1395 */
11444099b7bSPaul Traina #define TAG_DUMP_FILE		((unsigned char)  14)
11544099b7bSPaul Traina #define TAG_DOMAIN_NAME		((unsigned char)  15)
11644099b7bSPaul Traina #define TAG_SWAP_SERVER		((unsigned char)  16)
11744099b7bSPaul Traina #define TAG_ROOT_PATH		((unsigned char)  17)
11844099b7bSPaul Traina /* RFC 1497 */
11944099b7bSPaul Traina #define TAG_EXTEN_FILE		((unsigned char)  18)
12044099b7bSPaul Traina /* RFC 1533 */
12144099b7bSPaul Traina #define TAG_NIS_DOMAIN		((unsigned char)  40)
12244099b7bSPaul Traina #define TAG_NIS_SERVER		((unsigned char)  41)
12344099b7bSPaul Traina #define TAG_NTP_SERVER		((unsigned char)  42)
12444099b7bSPaul Traina /* DHCP maximum message size. */
12544099b7bSPaul Traina #define TAG_MAX_MSGSZ		((unsigned char)  57)
12644099b7bSPaul Traina 
12744099b7bSPaul Traina /* XXX - Add new tags here */
12844099b7bSPaul Traina 
12944099b7bSPaul Traina 
13044099b7bSPaul Traina /*
13144099b7bSPaul Traina  * "vendor" data permitted for CMU bootp clients.
13244099b7bSPaul Traina  */
13344099b7bSPaul Traina 
13444099b7bSPaul Traina struct cmu_vend {
13544099b7bSPaul Traina 	char		v_magic[4];	/* magic number */
1368ef94ce8SMarcel Moolenaar 	u_int32		v_flags;	/* flags/opcodes, etc. */
13744099b7bSPaul Traina 	struct in_addr 	v_smask;	/* Subnet mask */
13844099b7bSPaul Traina 	struct in_addr 	v_dgate;	/* Default gateway */
13944099b7bSPaul Traina 	struct in_addr	v_dns1, v_dns2; /* Domain name servers */
14044099b7bSPaul Traina 	struct in_addr	v_ins1, v_ins2; /* IEN-116 name servers */
14144099b7bSPaul Traina 	struct in_addr	v_ts1, v_ts2;	/* Time servers */
14244099b7bSPaul Traina 	int32		v_unused[6];	/* currently unused */
14344099b7bSPaul Traina };
14444099b7bSPaul Traina 
14544099b7bSPaul Traina 
14644099b7bSPaul Traina /* v_flags values */
14744099b7bSPaul Traina #define VF_SMASK	1	/* Subnet mask field contains valid data */
148