blob: e9007c878eaf9db074ddc11d0da78e03f96ae76d [file] [log] [blame]
Simon Kelley2a8710a2020-01-05 16:40:06 +00001/* dnsmasq is Copyright (c) 2000-2020 Simon Kelley
Simon Kelley572b41e2011-02-18 18:11:18 +00002
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; version 2 dated June, 1991, or
6 (at your option) version 3 dated 29 June, 2007.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License
14 along with this program. If not, see <http://www.gnu.org/licenses/>.
15*/
Simon Kelleyc72daea2012-01-05 21:33:27 +000016#define DHCP_SERVER_PORT 67
17#define DHCP_CLIENT_PORT 68
18#define DHCP_SERVER_ALTPORT 1067
19#define DHCP_CLIENT_ALTPORT 1068
20#define PXE_PORT 4011
Simon Kelley572b41e2011-02-18 18:11:18 +000021
Simon Kelleybf4e62c2016-07-22 21:37:59 +010022/* These each hold a DHCP option max size 255
23 and get a terminating zero added */
24#define DHCP_BUFF_SZ 256
25
Simon Kelley572b41e2011-02-18 18:11:18 +000026#define BOOTREQUEST 1
27#define BOOTREPLY 2
28#define DHCP_COOKIE 0x63825363
29
30/* The Linux in-kernel DHCP client silently ignores any packet
31 smaller than this. Sigh........... */
32#define MIN_PACKETSZ 300
33
34#define OPTION_PAD 0
35#define OPTION_NETMASK 1
36#define OPTION_ROUTER 3
37#define OPTION_DNSSERVER 6
38#define OPTION_HOSTNAME 12
39#define OPTION_DOMAINNAME 15
40#define OPTION_BROADCAST 28
41#define OPTION_VENDOR_CLASS_OPT 43
42#define OPTION_REQUESTED_IP 50
43#define OPTION_LEASE_TIME 51
44#define OPTION_OVERLOAD 52
45#define OPTION_MESSAGE_TYPE 53
46#define OPTION_SERVER_IDENTIFIER 54
47#define OPTION_REQUESTED_OPTIONS 55
48#define OPTION_MESSAGE 56
49#define OPTION_MAXMESSAGE 57
50#define OPTION_T1 58
51#define OPTION_T2 59
52#define OPTION_VENDOR_ID 60
53#define OPTION_CLIENT_ID 61
54#define OPTION_SNAME 66
55#define OPTION_FILENAME 67
56#define OPTION_USER_CLASS 77
Simon Kelley734d5312018-03-23 23:09:53 +000057#define OPTION_RAPID_COMMIT 80
Simon Kelley572b41e2011-02-18 18:11:18 +000058#define OPTION_CLIENT_FQDN 81
59#define OPTION_AGENT_ID 82
60#define OPTION_ARCH 93
61#define OPTION_PXE_UUID 97
62#define OPTION_SUBNET_SELECT 118
63#define OPTION_DOMAIN_SEARCH 119
64#define OPTION_SIP_SERVER 120
65#define OPTION_VENDOR_IDENT 124
66#define OPTION_VENDOR_IDENT_OPT 125
67#define OPTION_END 255
68
69#define SUBOPT_CIRCUIT_ID 1
70#define SUBOPT_REMOTE_ID 2
71#define SUBOPT_SUBNET_SELECT 5 /* RFC 3527 */
72#define SUBOPT_SUBSCR_ID 6 /* RFC 3393 */
73#define SUBOPT_SERVER_OR 11 /* RFC 5107 */
74
75#define SUBOPT_PXE_BOOT_ITEM 71 /* PXE standard */
76#define SUBOPT_PXE_DISCOVERY 6
77#define SUBOPT_PXE_SERVERS 8
78#define SUBOPT_PXE_MENU 9
79#define SUBOPT_PXE_MENU_PROMPT 10
80
81#define DHCPDISCOVER 1
82#define DHCPOFFER 2
83#define DHCPREQUEST 3
84#define DHCPDECLINE 4
85#define DHCPACK 5
86#define DHCPNAK 6
87#define DHCPRELEASE 7
88#define DHCPINFORM 8
89
90#define BRDBAND_FORUM_IANA 3561 /* Broadband forum IANA enterprise */
91
92#define DHCP_CHADDR_MAX 16
93
94struct dhcp_packet {
95 u8 op, htype, hlen, hops;
96 u32 xid;
97 u16 secs, flags;
98 struct in_addr ciaddr, yiaddr, siaddr, giaddr;
99 u8 chaddr[DHCP_CHADDR_MAX], sname[64], file[128];
100 u8 options[312];
101};