2 * Copyright (C) 2012 Steven Barth <steven@midlink.org>
3 * Copyright (C) 2016 Hans Dedecker <dedeckeh@gmail.com>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2
7 * as published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License version 2 for more details.
17 #define DHCPV4_CLIENT_PORT 68
18 #define DHCPV4_SERVER_PORT 67
20 #define DHCPV4_FLAG_BROADCAST 0x8000
23 DHCPV4_BOOTREQUEST = 1,
28 DHCPV4_MSG_DISCOVER = 1,
30 DHCPV4_MSG_REQUEST = 3,
31 DHCPV4_MSG_DECLINE = 4,
34 DHCPV4_MSG_RELEASE = 7,
35 DHCPV4_MSG_INFORM = 8,
39 DHCPV4_OPT_NETMASK = 1,
40 DHCPV4_OPT_ROUTER = 3,
41 DHCPV4_OPT_DNSSERVER = 6,
42 DHCPV4_OPT_DOMAIN = 15,
44 DHCPV4_OPT_BROADCAST = 28,
45 DHCPV4_OPT_NTPSERVER = 42,
46 DHCPV4_OPT_LEASETIME = 51,
47 DHCPV4_OPT_MESSAGE = 53,
48 DHCPV4_OPT_SERVERID = 54,
49 DHCPV4_OPT_RENEW = 58,
50 DHCPV4_OPT_REBIND = 59,
51 DHCPV4_OPT_IPADDRESS = 50,
52 DHCPV4_OPT_HOSTNAME = 12,
53 DHCPV4_OPT_REQUEST = 17,
54 DHCPV4_OPT_USER_CLASS = 77,
55 DHCPV4_OPT_SEARCH_DOMAIN = 119,
59 struct dhcpv4_message {
67 struct in_addr ciaddr;
68 struct in_addr yiaddr;
69 struct in_addr siaddr;
70 struct in_addr giaddr;
77 struct dhcpv4_assignment {
78 struct list_head head;
87 struct dhcpv4_option {
94 #define dhcpv4_for_each_option(start, end, opt)\
95 for (opt = (struct dhcpv4_option*)(start); \
96 &opt[1] <= (struct dhcpv4_option*)(end) && \
97 &opt->data[opt->len] <= (end); \
98 opt = (struct dhcpv4_option*)&opt->data[opt->len])