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