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