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