3 * Copyright (c) 2014-2017, Qualcomm Atheros, Inc.
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
12 #include <netinet/ip.h>
14 #include <netinet/udp.h>
17 #include <netinet/udp.h>
21 #define DHCP_SERVER_PORT 67
22 #define DHCP_CLIENT_PORT 68
61 #define DHCP_MAGIC 0x63825363
64 * IANA DHCP/BOOTP registry
65 * http://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml
69 DHCP_OPT_SUBNET_MASK
= 1,
70 DHCP_OPT_TIME_OFFSET
= 2,
72 DHCP_OPT_TIME_SERVER
= 4,
73 DHCP_OPT_NAME_SERVER
= 5,
74 DHCP_OPT_DOMAIN_NAME_SERVER
= 6,
75 DHCP_OPT_LOG_SERVER
= 7,
76 DHCP_OPT_QUOTES_SERVER
= 8,
77 DHCP_OPT_LPR_SERVER
= 9,
78 DHCP_OPT_IMPRESS_SERVER
= 10,
79 DHCP_OPT_RLP_SERVER
= 11,
80 DHCP_OPT_HOSTNAME
= 12,
81 DHCP_OPT_BOOT_FILE_SIZE
= 13,
82 DHCP_OPT_MERIT_DUMP_FILE
= 14,
83 DHCP_OPT_DOMAIN_NAME
= 15,
84 DHCP_OPT_SWAP_SERVER
= 16,
85 DHCP_OPT_ROOT_PATH
= 17,
86 DHCP_OPT_EXTENSION_PATH
= 18,
87 DHCP_OPT_FORWARD
= 19,
88 DHCP_OPT_SRC_RTE
= 20,
89 DHCP_OPT_POLICY_FILTER
= 21,
90 DHCP_OPT_MAX_DG_ASSEMBLY
= 22,
91 DHCP_OPT_DEFAULT_IP_TTL
= 23,
92 DHCP_OPT_MTU_TIMEOUT
= 24,
93 DHCP_OPT_MTU_PLATEAU
= 25,
94 DHCP_OPT_MTU_INTERFACE
= 26,
95 DHCP_OPT_ALL_SUBNETS_LOCAL
= 27,
96 DHCP_OPT_BROADCAST_ADDRESS
= 28,
97 DHCP_OPT_MASK_DISCOVERY
= 29,
98 DHCP_OPT_MASK_SUPPLIER
= 30,
99 DHCP_OPT_ROUTER_DISCOVERY
= 31,
100 DHCP_OPT_ROUTER_SOLICITATION_ADDRESS
= 32,
101 DHCP_OPT_STATIC_ROUTE
= 33,
102 DHCP_OPT_TRAILERS
= 34,
103 DHCP_OPT_ARP_TIMEOUT
= 35,
104 DHCP_OPT_ETHERNET
= 36,
105 DHCP_OPT_TCP_DEFAULT_TTL
= 37,
106 DHCP_OPT_TCP_KEEPALIVE_INTERVAL
= 38,
107 DHCP_OPT_TCP_KEEPALIVE_GARBAGE
= 39,
108 DHCP_OPT_NIS_DOMAIN
= 40,
109 DHCP_OPT_NIS_SERVERS
= 41,
110 DHCP_OPT_NTP_SERVERS
= 42,
111 DHCP_OPT_VENDOR_SPECIFIC
= 43,
112 DHCP_OPT_NETBIOS_NAME_SERVER
= 44,
113 DHCP_OPT_NETBIOS_DISTRIBUTION_SERVER
= 45,
114 DHCP_OPT_NETBIOS_NODE_TYPE
= 46,
115 DHCP_OPT_NETBIOS_SCOPE
= 47,
116 DHCP_OPT_FONT_SERVER
= 48,
117 DHCP_OPT_DISPLAY_MANAGER
= 49,
118 DHCP_OPT_REQUESTED_IP_ADDRESS
= 50,
119 DHCP_OPT_IP_ADDRESS_LEASE_TIME
= 51,
120 DHCP_OPT_OVERLOAD
= 52,
121 DHCP_OPT_MSG_TYPE
= 53,
122 DHCP_OPT_SERVER_ID
= 54,
123 DHCP_OPT_PARAMETER_REQ_LIST
= 55,
124 DHCP_OPT_MESSAGE
= 56,
125 DHCP_OPT_MAX_MESSAGE_SIZE
= 57,
126 DHCP_OPT_RENEWAL_TIME
= 58,
127 DHCP_OPT_REBINDING_TIME
= 59,
128 DHCP_OPT_VENDOR_CLASS_ID
= 60,
129 DHCP_OPT_CLIENT_ID
= 61,
130 DHCP_OPT_NETWARE_IP_DOMAIN
= 62,
131 DHCP_OPT_NETWARE_IP_OPTION
= 63,
132 DHCP_OPT_NIS_V3_DOMAIN
= 64,
133 DHCP_OPT_NIS_V3_SERVERS
= 65,
134 DHCP_OPT_TFTP_SERVER_NAME
= 66,
135 DHCP_OPT_BOOT_FILE_NAME
= 67,
136 DHCP_OPT_HOME_AGENT_ADDRESSES
= 68,
137 DHCP_OPT_SMTP_SERVER
= 69,
138 DHCP_OPT_POP3_SERVER
= 70,
139 DHCP_OPT_NNTP_SERVER
= 71,
140 DHCP_OPT_WWW_SERVER
= 72,
141 DHCP_OPT_FINGER_SERVER
= 73,
142 DHCP_OPT_IRC_SERVER
= 74,
143 DHCP_OPT_STREETTALK_SERVER
= 75,
144 DHCP_OPT_STDA_SERVER
= 76,
145 DHCP_OPT_USER_CLASS
= 77,
146 DHCP_OPT_DIRECTORY_AGENT
= 78,
147 DHCP_OPT_SERVICE_SCOPE
= 79,
148 DHCP_OPT_RAPID_COMMIT
= 80,
149 DHCP_OPT_CLIENT_FQDN
= 81,
150 DHCP_OPT_RELAY_AGENT_INFO
= 82,
152 DHCP_OPT_NDS_SERVERS
= 85,
153 DHCP_OPT_NDS_TREE_NAME
= 86,
154 DHCP_OPT_NDS_CONTEXT
= 87,
155 DHCP_OPT_BCMCS_CONTROLLER_DOMAIN_NAME_LIST
= 88,
156 DHCP_OPT_BCMCS_CONTROLLER_IPV4_ADDRESS
= 89,
157 DHCP_OPT_AUTHENTICATION
= 90,
158 DHCP_OPT_CLIENT_LAST_TRANSACTION_TIME
= 91,
159 DHCP_OPT_ASSOCIATED_IP
= 92,
160 DHCP_OPT_CLIENT_SYSYEM
= 93,
161 DHCP_OPT_CLIENT_NDI
= 94,
163 DHCP_OPT_UUID_GUID
= 97,
164 DHCP_OPT_USER_AUTH
= 98,
165 DHCP_OPT_GEOCONF_CIVIC
= 99,
166 DHCP_OPT_PCODE
= 100,
167 DHCP_OPT_TCODE
= 101,
168 DHCP_OPT_NETINFO_ADDRESS
= 112,
169 DHCP_OPT_NETINFO_TAG
= 113,
171 DHCP_OPT_AUTO_CONFIG
= 116,
172 DHCP_OPT_NAME_SERVICE_SEARCH
= 117,
173 DHCP_OPT_SUBNET_SELECTION
= 118,
174 DHCP_OPT_DOMAIN_SEARCH
= 119,
175 DHCP_OPT_SIP_SERVERS_DCP
= 120,
176 DHCP_OPT_CLASSLESS_STATIC_ROUTE
= 121,
178 DHCP_OPT_GEOCONF
= 123,
179 DHCP_OPT_V_I_VENDOR_CLASS
= 124,
180 DHCP_OPT_V_I_VENDOR_SPECIFIC_INFO
= 125,
181 DHCP_OPT_PANA_AGENT
= 136,
182 DHCP_OPT_V4_LOST
= 137,
183 DHCP_OPT_CAPWAP_AC_V4
= 138,
184 DHCP_OPT_IPV4_ADDRESS_MOS
= 139,
185 DHCP_OPT_IPV4_FQDN_MOS
= 140,
186 DHCP_OPT_SIP_UA_CONF
= 141,
187 DHCP_OPT_IPV4_ADDRESS_ANDSF
= 142,
188 DHCP_OPT_GEOLOC
= 144,
189 DHCP_OPT_FORCERENEW_NONCE_CAPABLE
= 145,
190 DHCP_OPT_RDNSS_SELECTION
= 146,
191 DHCP_OPT_TFTP_SERVER_ADDRESS
= 150,
192 DHCP_OPT_STATUS_CODE
= 151,
193 DHCP_OPT_BASE_TIME
= 152,
194 DHCP_OPT_START_TIME_OF_STATE
= 153,
195 DHCP_OPT_QUERY_START_TIME
= 154,
196 DHCP_OPT_QUERY_END_TIME
= 155,
197 DHCP_OPT_STATE
= 156,
198 DHCP_OPT_DATA_SOURCE
= 157,
199 DHCP_OPT_V4_PCP_SERVER
= 158,
200 DHCP_OPT_V4_PORTPARAMS
= 159,
201 DHCP_OPT_CAPTIVE_PORTAL
= 160,
202 DHCP_OPT_CONF_FILE
= 209,
203 DHCP_OPT_PATH_PREFIX
= 210,
204 DHCP_OPT_REBOOT_TIME
= 211,
206 DHCP_OPT_V4_ACCESS_DOMAIN
= 213,
207 DHCP_OPT_SUBNET_ALLOCATION
= 220,
212 enum dhcp_message_types
{
223 DHCPLEASEUNASSIGNED
= 11,
224 DHCPLEASEUNKNOWN
= 12,
225 DHCPLEASEACTIVE
= 13,
226 DHCPBULKLEASEQUERY
= 14,
227 DHCPLEASEQUERYDONE
= 15,
228 DHCPACTIVELEASEQUERY
= 16,
229 DHCPLEASEQUERYSTATUS
= 17,
233 enum dhcp_relay_agent_suboptions
{
234 DHCP_RELAY_OPT_AGENT_CIRCUIT_ID
= 1,
235 DHCP_RELAY_OPT_AGENT_REMOTE_ID
= 2,
236 DHCP_RELAY_OPT_DOCSIS_DEVICE_CLASS
= 4,
237 DHCP_RELAY_OPT_LINK_SELECTION
= 5,
238 DHCP_RELAY_OPT_SUBSCRIBE_ID
= 6,
239 DHCP_RELAY_OPT_RADIUS_ATTRIBUTES
= 7,
240 DHCP_RELAY_OPT_AUTHENTICATION
= 8,
241 DHCP_RELAY_OPT_VEDOR_SPECIFIC
= 9,
242 DHCP_RELAY_OPT_RELAY_AGENT_FLAGS
= 10,
243 DHCP_RELAY_OPT_SERVER_ID_OVERRIDE
= 11,
244 DHCP_RELAY_OPT_RELAY_AGENT_ID
= 12,
245 DHCP_RELAY_OPT_ACCESS_TECHNOLOGY_TYPE
= 13,
246 DHCP_RELAY_OPT_ACCESS_NETWORK_NAME
= 14,
247 DHCP_RELAY_OPT_ACCESS_POINT_NAME
= 15,
248 DHCP_RELAY_OPT_ACCESS_POINT_BSSID
= 16,
249 DHCP_RELAY_OPT_OPERATOR_ID
= 17,
250 DHCP_RELAY_OPT_OPERATOR_REALM
= 18,
251 DHCP_RELAY_OPT_DHCPV4_VIRTUAL_SUBNET_SELECTION
= 151,
252 DHCP_RELAY_OPT_DHCPV4_VIRTUAL_SUBNET_SELECTION_CONTROL
= 152,
255 enum access_technology_types
{
256 ACCESS_TECHNOLOGY_VIRTUAL
= 1,
257 ACCESS_TECHNOLOGY_PPP
= 2,
258 ACCESS_TECHNOLOGY_ETHERNET
= 3,
259 ACCESS_TECHNOLOGY_WLAN
= 4,
260 ACCESS_TECHNOLOGY_WIMAX
= 5,