1233545Sjchandra/*
2233545Sjchandra * DHCP definitions
3233545Sjchandra * Copyright (c) 2014-2017, Qualcomm Atheros, Inc.
4233545Sjchandra *
5233545Sjchandra * This software may be distributed under the terms of the BSD license.
6233545Sjchandra * See README for more details.
7233545Sjchandra */
8233545Sjchandra
9233545Sjchandra#ifndef DHCP_H
10233545Sjchandra#define DHCP_H
11233545Sjchandra
12233545Sjchandra/*
13233545Sjchandra * Translate Linux to FreeBSD
14233545Sjchandra */
15279388Sjchandra#define iphdr		ip
16233545Sjchandra#define ihl		ip_hl
17233545Sjchandra#define verson		ip_v
18233545Sjchandra#define tos		ip_tos
19233545Sjchandra#define tot_len		ip_len
20233545Sjchandra#define id		ip_id
21233545Sjchandra#define frag_off	ip_off
22233545Sjchandra#define ttl		ip_ttl
23233545Sjchandra#define protocol	ip_p
24233545Sjchandra#define check		ip_sum
25233545Sjchandra#define saddr		ip_src
26233545Sjchandra#define daddr		ip_dst
27233545Sjchandra
28233545Sjchandra#include <netinet/ip.h>
29233545Sjchandra#if __FAVOR_BSD
30233545Sjchandra#include <netinet/udp.h>
31233545Sjchandra#else
32233545Sjchandra#define __FAVOR_BSD 1
33233545Sjchandra#include <netinet/udp.h>
34233545Sjchandra#undef __FAVOR_BSD
35233545Sjchandra#endif
36233545Sjchandra
37233545Sjchandra#define DHCP_SERVER_PORT 67
38233545Sjchandra#define DHCP_CLIENT_PORT 68
39233545Sjchandra
40233545Sjchandrastruct dhcp_data {
41233545Sjchandra	u8 op;
42233545Sjchandra	u8 htype;
43233545Sjchandra	u8 hlen;
44233545Sjchandra	u8 hops;
45233545Sjchandra	be32 xid;
46233545Sjchandra	be16 secs;
47233545Sjchandra	be16 flags;
48233545Sjchandra	be32 client_ip;
49233545Sjchandra	be32 your_ip;
50233545Sjchandra	be32 server_ip;
51233545Sjchandra	be32 relay_ip;
52233545Sjchandra	u8 hw_addr[16];
53233545Sjchandra	u8 serv_name[64];
54233545Sjchandra	u8 boot_file[128];
55233545Sjchandra} STRUCT_PACKED;
56233545Sjchandra
57233545Sjchandrastruct bootp_pkt {
58233545Sjchandra	struct iphdr iph;
59233545Sjchandra	struct udphdr udph;
60233545Sjchandra	u8 op;
61233545Sjchandra	u8 htype;
62233545Sjchandra	u8 hlen;
63233545Sjchandra	u8 hops;
64233545Sjchandra	be32 xid;
65233545Sjchandra	be16 secs;
66233545Sjchandra	be16 flags;
67233545Sjchandra	be32 client_ip;
68233545Sjchandra	be32 your_ip;
69233545Sjchandra	be32 server_ip;
70233545Sjchandra	be32 relay_ip;
71233545Sjchandra	u8 hw_addr[16];
72233545Sjchandra	u8 serv_name[64];
73233545Sjchandra	u8 boot_file[128];
74233545Sjchandra	u8 exten[312];
75233545Sjchandra} STRUCT_PACKED;
76233545Sjchandra
77233545Sjchandra#define DHCP_MAGIC 0x63825363
78255368Sjchandra
79255368Sjchandra/*
80255368Sjchandra * IANA DHCP/BOOTP registry
81233545Sjchandra * http://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml
82233545Sjchandra*/
83233545Sjchandraenum dhcp_options {
84233545Sjchandra	DHCP_OPT_PAD = 0,
85233545Sjchandra	DHCP_OPT_SUBNET_MASK = 1,
86233545Sjchandra	DHCP_OPT_TIME_OFFSET = 2,
87233545Sjchandra	DHCP_OPT_ROUTER = 3,
88233545Sjchandra	DHCP_OPT_TIME_SERVER = 4,
89233545Sjchandra	DHCP_OPT_NAME_SERVER = 5,
90233545Sjchandra	DHCP_OPT_DOMAIN_NAME_SERVER = 6,
91233545Sjchandra	DHCP_OPT_LOG_SERVER = 7,
92233545Sjchandra	DHCP_OPT_QUOTES_SERVER = 8,
93233545Sjchandra	DHCP_OPT_LPR_SERVER = 9,
94233545Sjchandra	DHCP_OPT_IMPRESS_SERVER = 10,
95233545Sjchandra	DHCP_OPT_RLP_SERVER = 11,
96233545Sjchandra	DHCP_OPT_HOSTNAME = 12,
97233545Sjchandra	DHCP_OPT_BOOT_FILE_SIZE = 13,
98233545Sjchandra	DHCP_OPT_MERIT_DUMP_FILE = 14,
99233545Sjchandra	DHCP_OPT_DOMAIN_NAME = 15,
100233545Sjchandra	DHCP_OPT_SWAP_SERVER = 16,
101233545Sjchandra	DHCP_OPT_ROOT_PATH = 17,
102233545Sjchandra	DHCP_OPT_EXTENSION_PATH = 18,
103233545Sjchandra	DHCP_OPT_FORWARD = 19,
104233545Sjchandra	DHCP_OPT_SRC_RTE = 20,
105233545Sjchandra	DHCP_OPT_POLICY_FILTER = 21,
106233545Sjchandra	DHCP_OPT_MAX_DG_ASSEMBLY = 22,
107233545Sjchandra	DHCP_OPT_DEFAULT_IP_TTL = 23,
108233545Sjchandra	DHCP_OPT_MTU_TIMEOUT = 24,
109233545Sjchandra	DHCP_OPT_MTU_PLATEAU = 25,
110233545Sjchandra	DHCP_OPT_MTU_INTERFACE = 26,
111279388Sjchandra	DHCP_OPT_ALL_SUBNETS_LOCAL = 27,
112233545Sjchandra	DHCP_OPT_BROADCAST_ADDRESS = 28,
113233545Sjchandra	DHCP_OPT_MASK_DISCOVERY = 29,
114233545Sjchandra	DHCP_OPT_MASK_SUPPLIER = 30,
115233545Sjchandra	DHCP_OPT_ROUTER_DISCOVERY = 31,
116233545Sjchandra	DHCP_OPT_ROUTER_SOLICITATION_ADDRESS = 32,
117233545Sjchandra	DHCP_OPT_STATIC_ROUTE = 33,
118233545Sjchandra	DHCP_OPT_TRAILERS = 34,
119233545Sjchandra	DHCP_OPT_ARP_TIMEOUT = 35,
120233545Sjchandra	DHCP_OPT_ETHERNET = 36,
121233545Sjchandra	DHCP_OPT_TCP_DEFAULT_TTL = 37,
122233545Sjchandra	DHCP_OPT_TCP_KEEPALIVE_INTERVAL = 38,
123233545Sjchandra	DHCP_OPT_TCP_KEEPALIVE_GARBAGE = 39,
124233545Sjchandra	DHCP_OPT_NIS_DOMAIN = 40,
125233545Sjchandra	DHCP_OPT_NIS_SERVERS = 41,
126233545Sjchandra	DHCP_OPT_NTP_SERVERS = 42,
127233545Sjchandra	DHCP_OPT_VENDOR_SPECIFIC = 43,
128233545Sjchandra	DHCP_OPT_NETBIOS_NAME_SERVER = 44,
129233545Sjchandra	DHCP_OPT_NETBIOS_DISTRIBUTION_SERVER = 45,
130233545Sjchandra	DHCP_OPT_NETBIOS_NODE_TYPE = 46,
131233545Sjchandra	DHCP_OPT_NETBIOS_SCOPE = 47,
132233545Sjchandra	DHCP_OPT_FONT_SERVER = 48,
133233545Sjchandra	DHCP_OPT_DISPLAY_MANAGER = 49,
134233545Sjchandra	DHCP_OPT_REQUESTED_IP_ADDRESS = 50,
135233545Sjchandra	DHCP_OPT_IP_ADDRESS_LEASE_TIME = 51,
136233545Sjchandra	DHCP_OPT_OVERLOAD = 52,
137233545Sjchandra	DHCP_OPT_MSG_TYPE = 53,
138233545Sjchandra	DHCP_OPT_SERVER_ID = 54,
139	DHCP_OPT_PARAMETER_REQ_LIST = 55,
140	DHCP_OPT_MESSAGE = 56,
141	DHCP_OPT_MAX_MESSAGE_SIZE = 57,
142	DHCP_OPT_RENEWAL_TIME = 58,
143	DHCP_OPT_REBINDING_TIME = 59,
144	DHCP_OPT_VENDOR_CLASS_ID = 60,
145	DHCP_OPT_CLIENT_ID = 61,
146	DHCP_OPT_NETWARE_IP_DOMAIN = 62,
147	DHCP_OPT_NETWARE_IP_OPTION = 63,
148	DHCP_OPT_NIS_V3_DOMAIN = 64,
149	DHCP_OPT_NIS_V3_SERVERS = 65,
150	DHCP_OPT_TFTP_SERVER_NAME = 66,
151	DHCP_OPT_BOOT_FILE_NAME = 67,
152	DHCP_OPT_HOME_AGENT_ADDRESSES = 68,
153	DHCP_OPT_SMTP_SERVER = 69,
154	DHCP_OPT_POP3_SERVER = 70,
155	DHCP_OPT_NNTP_SERVER = 71,
156	DHCP_OPT_WWW_SERVER = 72,
157	DHCP_OPT_FINGER_SERVER = 73,
158	DHCP_OPT_IRC_SERVER = 74,
159	DHCP_OPT_STREETTALK_SERVER = 75,
160	DHCP_OPT_STDA_SERVER = 76,
161	DHCP_OPT_USER_CLASS = 77,
162	DHCP_OPT_DIRECTORY_AGENT = 78,
163	DHCP_OPT_SERVICE_SCOPE = 79,
164	DHCP_OPT_RAPID_COMMIT = 80,
165	DHCP_OPT_CLIENT_FQDN = 81,
166	DHCP_OPT_RELAY_AGENT_INFO = 82,
167	DHCP_OPT_ISNS = 83,
168	DHCP_OPT_NDS_SERVERS = 85,
169	DHCP_OPT_NDS_TREE_NAME = 86,
170	DHCP_OPT_NDS_CONTEXT = 87,
171	DHCP_OPT_BCMCS_CONTROLLER_DOMAIN_NAME_LIST = 88,
172	DHCP_OPT_BCMCS_CONTROLLER_IPV4_ADDRESS = 89,
173	DHCP_OPT_AUTHENTICATION = 90,
174	DHCP_OPT_CLIENT_LAST_TRANSACTION_TIME = 91,
175	DHCP_OPT_ASSOCIATED_IP = 92,
176	DHCP_OPT_CLIENT_SYSYEM = 93,
177	DHCP_OPT_CLIENT_NDI = 94,
178	DHCP_OPT_LDAP = 95,
179	DHCP_OPT_UUID_GUID = 97,
180	DHCP_OPT_USER_AUTH = 98,
181	DHCP_OPT_GEOCONF_CIVIC = 99,
182	DHCP_OPT_PCODE = 100,
183	DHCP_OPT_TCODE = 101,
184	DHCP_OPT_NETINFO_ADDRESS = 112,
185	DHCP_OPT_NETINFO_TAG = 113,
186	DHCP_OPT_URL = 114,
187	DHCP_OPT_AUTO_CONFIG = 116,
188	DHCP_OPT_NAME_SERVICE_SEARCH = 117,
189	DHCP_OPT_SUBNET_SELECTION = 118,
190	DHCP_OPT_DOMAIN_SEARCH = 119,
191	DHCP_OPT_SIP_SERVERS_DCP = 120,
192	DHCP_OPT_CLASSLESS_STATIC_ROUTE = 121,
193	DHCP_OPT_CCC = 122,
194	DHCP_OPT_GEOCONF = 123,
195	DHCP_OPT_V_I_VENDOR_CLASS = 124,
196	DHCP_OPT_V_I_VENDOR_SPECIFIC_INFO = 125,
197	DHCP_OPT_PANA_AGENT = 136,
198	DHCP_OPT_V4_LOST = 137,
199	DHCP_OPT_CAPWAP_AC_V4 = 138,
200	DHCP_OPT_IPV4_ADDRESS_MOS = 139,
201	DHCP_OPT_IPV4_FQDN_MOS = 140,
202	DHCP_OPT_SIP_UA_CONF = 141,
203	DHCP_OPT_IPV4_ADDRESS_ANDSF = 142,
204	DHCP_OPT_GEOLOC = 144,
205	DHCP_OPT_FORCERENEW_NONCE_CAPABLE = 145,
206	DHCP_OPT_RDNSS_SELECTION = 146,
207	DHCP_OPT_TFTP_SERVER_ADDRESS = 150,
208	DHCP_OPT_STATUS_CODE = 151,
209	DHCP_OPT_BASE_TIME = 152,
210	DHCP_OPT_START_TIME_OF_STATE = 153,
211	DHCP_OPT_QUERY_START_TIME = 154,
212	DHCP_OPT_QUERY_END_TIME = 155,
213	DHCP_OPT_STATE = 156,
214	DHCP_OPT_DATA_SOURCE = 157,
215	DHCP_OPT_V4_PCP_SERVER = 158,
216	DHCP_OPT_V4_PORTPARAMS = 159,
217	DHCP_OPT_CAPTIVE_PORTAL = 160,
218	DHCP_OPT_CONF_FILE = 209,
219	DHCP_OPT_PATH_PREFIX = 210,
220	DHCP_OPT_REBOOT_TIME = 211,
221	DHCP_OPT_6RD = 212,
222	DHCP_OPT_V4_ACCESS_DOMAIN = 213,
223	DHCP_OPT_SUBNET_ALLOCATION = 220,
224	DHCP_OPT_VSS = 221,
225	DHCP_OPT_END = 255
226};
227
228enum dhcp_message_types {
229	DHCPDISCOVER = 1,
230	DHCPOFFER = 2,
231	DHCPREQUEST = 3,
232	DHCPDECLINE = 4,
233	DHCPACK = 5,
234	DHCPNAK = 6,
235	DHCPRELEASE = 7,
236	DHCPINFORM = 8,
237	DHCPFORCERENEW = 9,
238	DHCPLEASEQUERY = 10,
239	DHCPLEASEUNASSIGNED = 11,
240	DHCPLEASEUNKNOWN = 12,
241	DHCPLEASEACTIVE = 13,
242	DHCPBULKLEASEQUERY = 14,
243	DHCPLEASEQUERYDONE = 15,
244	DHCPACTIVELEASEQUERY = 16,
245	DHCPLEASEQUERYSTATUS = 17,
246	DHCPTLS = 18,
247};
248
249enum dhcp_relay_agent_suboptions {
250	DHCP_RELAY_OPT_AGENT_CIRCUIT_ID = 1,
251	DHCP_RELAY_OPT_AGENT_REMOTE_ID = 2,
252	DHCP_RELAY_OPT_DOCSIS_DEVICE_CLASS = 4,
253	DHCP_RELAY_OPT_LINK_SELECTION = 5,
254	DHCP_RELAY_OPT_SUBSCRIBE_ID = 6,
255	DHCP_RELAY_OPT_RADIUS_ATTRIBUTES = 7,
256	DHCP_RELAY_OPT_AUTHENTICATION = 8,
257	DHCP_RELAY_OPT_VEDOR_SPECIFIC = 9,
258	DHCP_RELAY_OPT_RELAY_AGENT_FLAGS = 10,
259	DHCP_RELAY_OPT_SERVER_ID_OVERRIDE = 11,
260	DHCP_RELAY_OPT_RELAY_AGENT_ID = 12,
261	DHCP_RELAY_OPT_ACCESS_TECHNOLOGY_TYPE = 13,
262	DHCP_RELAY_OPT_ACCESS_NETWORK_NAME = 14,
263	DHCP_RELAY_OPT_ACCESS_POINT_NAME = 15,
264	DHCP_RELAY_OPT_ACCESS_POINT_BSSID = 16,
265	DHCP_RELAY_OPT_OPERATOR_ID = 17,
266	DHCP_RELAY_OPT_OPERATOR_REALM = 18,
267	DHCP_RELAY_OPT_DHCPV4_VIRTUAL_SUBNET_SELECTION = 151,
268	DHCP_RELAY_OPT_DHCPV4_VIRTUAL_SUBNET_SELECTION_CONTROL = 152,
269};
270
271enum access_technology_types {
272	ACCESS_TECHNOLOGY_VIRTUAL = 1,
273	ACCESS_TECHNOLOGY_PPP = 2,
274	ACCESS_TECHNOLOGY_ETHERNET = 3,
275	ACCESS_TECHNOLOGY_WLAN = 4,
276	ACCESS_TECHNOLOGY_WIMAX = 5,
277};
278
279#endif /* DHCP_H */
280