xref: /freebsd/contrib/wpa/src/common/dhcp.h (revision 213ceba9)
185732ac8SCy Schubert /*
285732ac8SCy Schubert  * DHCP definitions
385732ac8SCy Schubert  * Copyright (c) 2014-2017, Qualcomm Atheros, Inc.
485732ac8SCy Schubert  *
585732ac8SCy Schubert  * This software may be distributed under the terms of the BSD license.
685732ac8SCy Schubert  * See README for more details.
785732ac8SCy Schubert  */
885732ac8SCy Schubert 
985732ac8SCy Schubert #ifndef DHCP_H
1085732ac8SCy Schubert #define DHCP_H
1185732ac8SCy Schubert 
12213ceba9SCy Schubert #if defined(__FreeBSD__)
1385732ac8SCy Schubert /*
1485732ac8SCy Schubert  * Translate Linux to FreeBSD
1585732ac8SCy Schubert  */
1685732ac8SCy Schubert #define iphdr		ip
1785732ac8SCy Schubert #define ihl		ip_hl
1885732ac8SCy Schubert #define verson		ip_v
1985732ac8SCy Schubert #define tos		ip_tos
2085732ac8SCy Schubert #define tot_len		ip_len
2185732ac8SCy Schubert #define id		ip_id
2285732ac8SCy Schubert #define frag_off	ip_off
2385732ac8SCy Schubert #define ttl		ip_ttl
2485732ac8SCy Schubert #define protocol	ip_p
2585732ac8SCy Schubert #define check		ip_sum
2685732ac8SCy Schubert #define saddr		ip_src
2785732ac8SCy Schubert #define daddr		ip_dst
28213ceba9SCy Schubert #endif
2985732ac8SCy Schubert 
3085732ac8SCy Schubert #include <netinet/ip.h>
3185732ac8SCy Schubert #if __FAVOR_BSD
3285732ac8SCy Schubert #include <netinet/udp.h>
3385732ac8SCy Schubert #else
3485732ac8SCy Schubert #define __FAVOR_BSD 1
3585732ac8SCy Schubert #include <netinet/udp.h>
3685732ac8SCy Schubert #undef __FAVOR_BSD
3785732ac8SCy Schubert #endif
3885732ac8SCy Schubert 
3985732ac8SCy Schubert #define DHCP_SERVER_PORT 67
4085732ac8SCy Schubert #define DHCP_CLIENT_PORT 68
4185732ac8SCy Schubert 
4285732ac8SCy Schubert struct dhcp_data {
4385732ac8SCy Schubert 	u8 op;
4485732ac8SCy Schubert 	u8 htype;
4585732ac8SCy Schubert 	u8 hlen;
4685732ac8SCy Schubert 	u8 hops;
4785732ac8SCy Schubert 	be32 xid;
4885732ac8SCy Schubert 	be16 secs;
4985732ac8SCy Schubert 	be16 flags;
5085732ac8SCy Schubert 	be32 client_ip;
5185732ac8SCy Schubert 	be32 your_ip;
5285732ac8SCy Schubert 	be32 server_ip;
5385732ac8SCy Schubert 	be32 relay_ip;
5485732ac8SCy Schubert 	u8 hw_addr[16];
5585732ac8SCy Schubert 	u8 serv_name[64];
5685732ac8SCy Schubert 	u8 boot_file[128];
5785732ac8SCy Schubert } STRUCT_PACKED;
5885732ac8SCy Schubert 
5985732ac8SCy Schubert struct bootp_pkt {
6085732ac8SCy Schubert 	struct ip iph;
6185732ac8SCy Schubert 	struct udphdr udph;
6285732ac8SCy Schubert 	u8 op;
6385732ac8SCy Schubert 	u8 htype;
6485732ac8SCy Schubert 	u8 hlen;
6585732ac8SCy Schubert 	u8 hops;
6685732ac8SCy Schubert 	be32 xid;
6785732ac8SCy Schubert 	be16 secs;
6885732ac8SCy Schubert 	be16 flags;
6985732ac8SCy Schubert 	be32 client_ip;
7085732ac8SCy Schubert 	be32 your_ip;
7185732ac8SCy Schubert 	be32 server_ip;
7285732ac8SCy Schubert 	be32 relay_ip;
7385732ac8SCy Schubert 	u8 hw_addr[16];
7485732ac8SCy Schubert 	u8 serv_name[64];
7585732ac8SCy Schubert 	u8 boot_file[128];
7685732ac8SCy Schubert 	u8 exten[312];
7785732ac8SCy Schubert } STRUCT_PACKED;
7885732ac8SCy Schubert 
7985732ac8SCy Schubert #define DHCP_MAGIC 0x63825363
8085732ac8SCy Schubert 
8185732ac8SCy Schubert /*
8285732ac8SCy Schubert  * IANA DHCP/BOOTP registry
8385732ac8SCy Schubert  * http://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml
8485732ac8SCy Schubert */
8585732ac8SCy Schubert enum dhcp_options {
8685732ac8SCy Schubert 	DHCP_OPT_PAD = 0,
8785732ac8SCy Schubert 	DHCP_OPT_SUBNET_MASK = 1,
8885732ac8SCy Schubert 	DHCP_OPT_TIME_OFFSET = 2,
8985732ac8SCy Schubert 	DHCP_OPT_ROUTER = 3,
9085732ac8SCy Schubert 	DHCP_OPT_TIME_SERVER = 4,
9185732ac8SCy Schubert 	DHCP_OPT_NAME_SERVER = 5,
9285732ac8SCy Schubert 	DHCP_OPT_DOMAIN_NAME_SERVER = 6,
9385732ac8SCy Schubert 	DHCP_OPT_LOG_SERVER = 7,
9485732ac8SCy Schubert 	DHCP_OPT_QUOTES_SERVER = 8,
9585732ac8SCy Schubert 	DHCP_OPT_LPR_SERVER = 9,
9685732ac8SCy Schubert 	DHCP_OPT_IMPRESS_SERVER = 10,
9785732ac8SCy Schubert 	DHCP_OPT_RLP_SERVER = 11,
9885732ac8SCy Schubert 	DHCP_OPT_HOSTNAME = 12,
9985732ac8SCy Schubert 	DHCP_OPT_BOOT_FILE_SIZE = 13,
10085732ac8SCy Schubert 	DHCP_OPT_MERIT_DUMP_FILE = 14,
10185732ac8SCy Schubert 	DHCP_OPT_DOMAIN_NAME = 15,
10285732ac8SCy Schubert 	DHCP_OPT_SWAP_SERVER = 16,
10385732ac8SCy Schubert 	DHCP_OPT_ROOT_PATH = 17,
10485732ac8SCy Schubert 	DHCP_OPT_EXTENSION_PATH = 18,
10585732ac8SCy Schubert 	DHCP_OPT_FORWARD = 19,
10685732ac8SCy Schubert 	DHCP_OPT_SRC_RTE = 20,
10785732ac8SCy Schubert 	DHCP_OPT_POLICY_FILTER = 21,
10885732ac8SCy Schubert 	DHCP_OPT_MAX_DG_ASSEMBLY = 22,
10985732ac8SCy Schubert 	DHCP_OPT_DEFAULT_IP_TTL = 23,
11085732ac8SCy Schubert 	DHCP_OPT_MTU_TIMEOUT = 24,
11185732ac8SCy Schubert 	DHCP_OPT_MTU_PLATEAU = 25,
11285732ac8SCy Schubert 	DHCP_OPT_MTU_INTERFACE = 26,
11385732ac8SCy Schubert 	DHCP_OPT_ALL_SUBNETS_LOCAL = 27,
11485732ac8SCy Schubert 	DHCP_OPT_BROADCAST_ADDRESS = 28,
11585732ac8SCy Schubert 	DHCP_OPT_MASK_DISCOVERY = 29,
11685732ac8SCy Schubert 	DHCP_OPT_MASK_SUPPLIER = 30,
11785732ac8SCy Schubert 	DHCP_OPT_ROUTER_DISCOVERY = 31,
11885732ac8SCy Schubert 	DHCP_OPT_ROUTER_SOLICITATION_ADDRESS = 32,
11985732ac8SCy Schubert 	DHCP_OPT_STATIC_ROUTE = 33,
12085732ac8SCy Schubert 	DHCP_OPT_TRAILERS = 34,
12185732ac8SCy Schubert 	DHCP_OPT_ARP_TIMEOUT = 35,
12285732ac8SCy Schubert 	DHCP_OPT_ETHERNET = 36,
12385732ac8SCy Schubert 	DHCP_OPT_TCP_DEFAULT_TTL = 37,
12485732ac8SCy Schubert 	DHCP_OPT_TCP_KEEPALIVE_INTERVAL = 38,
12585732ac8SCy Schubert 	DHCP_OPT_TCP_KEEPALIVE_GARBAGE = 39,
12685732ac8SCy Schubert 	DHCP_OPT_NIS_DOMAIN = 40,
12785732ac8SCy Schubert 	DHCP_OPT_NIS_SERVERS = 41,
12885732ac8SCy Schubert 	DHCP_OPT_NTP_SERVERS = 42,
12985732ac8SCy Schubert 	DHCP_OPT_VENDOR_SPECIFIC = 43,
13085732ac8SCy Schubert 	DHCP_OPT_NETBIOS_NAME_SERVER = 44,
13185732ac8SCy Schubert 	DHCP_OPT_NETBIOS_DISTRIBUTION_SERVER = 45,
13285732ac8SCy Schubert 	DHCP_OPT_NETBIOS_NODE_TYPE = 46,
13385732ac8SCy Schubert 	DHCP_OPT_NETBIOS_SCOPE = 47,
13485732ac8SCy Schubert 	DHCP_OPT_FONT_SERVER = 48,
13585732ac8SCy Schubert 	DHCP_OPT_DISPLAY_MANAGER = 49,
13685732ac8SCy Schubert 	DHCP_OPT_REQUESTED_IP_ADDRESS = 50,
13785732ac8SCy Schubert 	DHCP_OPT_IP_ADDRESS_LEASE_TIME = 51,
13885732ac8SCy Schubert 	DHCP_OPT_OVERLOAD = 52,
13985732ac8SCy Schubert 	DHCP_OPT_MSG_TYPE = 53,
14085732ac8SCy Schubert 	DHCP_OPT_SERVER_ID = 54,
14185732ac8SCy Schubert 	DHCP_OPT_PARAMETER_REQ_LIST = 55,
14285732ac8SCy Schubert 	DHCP_OPT_MESSAGE = 56,
14385732ac8SCy Schubert 	DHCP_OPT_MAX_MESSAGE_SIZE = 57,
14485732ac8SCy Schubert 	DHCP_OPT_RENEWAL_TIME = 58,
14585732ac8SCy Schubert 	DHCP_OPT_REBINDING_TIME = 59,
14685732ac8SCy Schubert 	DHCP_OPT_VENDOR_CLASS_ID = 60,
14785732ac8SCy Schubert 	DHCP_OPT_CLIENT_ID = 61,
14885732ac8SCy Schubert 	DHCP_OPT_NETWARE_IP_DOMAIN = 62,
14985732ac8SCy Schubert 	DHCP_OPT_NETWARE_IP_OPTION = 63,
15085732ac8SCy Schubert 	DHCP_OPT_NIS_V3_DOMAIN = 64,
15185732ac8SCy Schubert 	DHCP_OPT_NIS_V3_SERVERS = 65,
15285732ac8SCy Schubert 	DHCP_OPT_TFTP_SERVER_NAME = 66,
15385732ac8SCy Schubert 	DHCP_OPT_BOOT_FILE_NAME = 67,
15485732ac8SCy Schubert 	DHCP_OPT_HOME_AGENT_ADDRESSES = 68,
15585732ac8SCy Schubert 	DHCP_OPT_SMTP_SERVER = 69,
15685732ac8SCy Schubert 	DHCP_OPT_POP3_SERVER = 70,
15785732ac8SCy Schubert 	DHCP_OPT_NNTP_SERVER = 71,
15885732ac8SCy Schubert 	DHCP_OPT_WWW_SERVER = 72,
15985732ac8SCy Schubert 	DHCP_OPT_FINGER_SERVER = 73,
16085732ac8SCy Schubert 	DHCP_OPT_IRC_SERVER = 74,
16185732ac8SCy Schubert 	DHCP_OPT_STREETTALK_SERVER = 75,
16285732ac8SCy Schubert 	DHCP_OPT_STDA_SERVER = 76,
16385732ac8SCy Schubert 	DHCP_OPT_USER_CLASS = 77,
16485732ac8SCy Schubert 	DHCP_OPT_DIRECTORY_AGENT = 78,
16585732ac8SCy Schubert 	DHCP_OPT_SERVICE_SCOPE = 79,
16685732ac8SCy Schubert 	DHCP_OPT_RAPID_COMMIT = 80,
16785732ac8SCy Schubert 	DHCP_OPT_CLIENT_FQDN = 81,
16885732ac8SCy Schubert 	DHCP_OPT_RELAY_AGENT_INFO = 82,
16985732ac8SCy Schubert 	DHCP_OPT_ISNS = 83,
17085732ac8SCy Schubert 	DHCP_OPT_NDS_SERVERS = 85,
17185732ac8SCy Schubert 	DHCP_OPT_NDS_TREE_NAME = 86,
17285732ac8SCy Schubert 	DHCP_OPT_NDS_CONTEXT = 87,
17385732ac8SCy Schubert 	DHCP_OPT_BCMCS_CONTROLLER_DOMAIN_NAME_LIST = 88,
17485732ac8SCy Schubert 	DHCP_OPT_BCMCS_CONTROLLER_IPV4_ADDRESS = 89,
17585732ac8SCy Schubert 	DHCP_OPT_AUTHENTICATION = 90,
17685732ac8SCy Schubert 	DHCP_OPT_CLIENT_LAST_TRANSACTION_TIME = 91,
17785732ac8SCy Schubert 	DHCP_OPT_ASSOCIATED_IP = 92,
17885732ac8SCy Schubert 	DHCP_OPT_CLIENT_SYSYEM = 93,
17985732ac8SCy Schubert 	DHCP_OPT_CLIENT_NDI = 94,
18085732ac8SCy Schubert 	DHCP_OPT_LDAP = 95,
18185732ac8SCy Schubert 	DHCP_OPT_UUID_GUID = 97,
18285732ac8SCy Schubert 	DHCP_OPT_USER_AUTH = 98,
18385732ac8SCy Schubert 	DHCP_OPT_GEOCONF_CIVIC = 99,
18485732ac8SCy Schubert 	DHCP_OPT_PCODE = 100,
18585732ac8SCy Schubert 	DHCP_OPT_TCODE = 101,
18685732ac8SCy Schubert 	DHCP_OPT_NETINFO_ADDRESS = 112,
18785732ac8SCy Schubert 	DHCP_OPT_NETINFO_TAG = 113,
18885732ac8SCy Schubert 	DHCP_OPT_URL = 114,
18985732ac8SCy Schubert 	DHCP_OPT_AUTO_CONFIG = 116,
19085732ac8SCy Schubert 	DHCP_OPT_NAME_SERVICE_SEARCH = 117,
19185732ac8SCy Schubert 	DHCP_OPT_SUBNET_SELECTION = 118,
19285732ac8SCy Schubert 	DHCP_OPT_DOMAIN_SEARCH = 119,
19385732ac8SCy Schubert 	DHCP_OPT_SIP_SERVERS_DCP = 120,
19485732ac8SCy Schubert 	DHCP_OPT_CLASSLESS_STATIC_ROUTE = 121,
19585732ac8SCy Schubert 	DHCP_OPT_CCC = 122,
19685732ac8SCy Schubert 	DHCP_OPT_GEOCONF = 123,
19785732ac8SCy Schubert 	DHCP_OPT_V_I_VENDOR_CLASS = 124,
19885732ac8SCy Schubert 	DHCP_OPT_V_I_VENDOR_SPECIFIC_INFO = 125,
19985732ac8SCy Schubert 	DHCP_OPT_PANA_AGENT = 136,
20085732ac8SCy Schubert 	DHCP_OPT_V4_LOST = 137,
20185732ac8SCy Schubert 	DHCP_OPT_CAPWAP_AC_V4 = 138,
20285732ac8SCy Schubert 	DHCP_OPT_IPV4_ADDRESS_MOS = 139,
20385732ac8SCy Schubert 	DHCP_OPT_IPV4_FQDN_MOS = 140,
20485732ac8SCy Schubert 	DHCP_OPT_SIP_UA_CONF = 141,
20585732ac8SCy Schubert 	DHCP_OPT_IPV4_ADDRESS_ANDSF = 142,
20685732ac8SCy Schubert 	DHCP_OPT_GEOLOC = 144,
20785732ac8SCy Schubert 	DHCP_OPT_FORCERENEW_NONCE_CAPABLE = 145,
20885732ac8SCy Schubert 	DHCP_OPT_RDNSS_SELECTION = 146,
20985732ac8SCy Schubert 	DHCP_OPT_TFTP_SERVER_ADDRESS = 150,
21085732ac8SCy Schubert 	DHCP_OPT_STATUS_CODE = 151,
21185732ac8SCy Schubert 	DHCP_OPT_BASE_TIME = 152,
21285732ac8SCy Schubert 	DHCP_OPT_START_TIME_OF_STATE = 153,
21385732ac8SCy Schubert 	DHCP_OPT_QUERY_START_TIME = 154,
21485732ac8SCy Schubert 	DHCP_OPT_QUERY_END_TIME = 155,
21585732ac8SCy Schubert 	DHCP_OPT_STATE = 156,
21685732ac8SCy Schubert 	DHCP_OPT_DATA_SOURCE = 157,
21785732ac8SCy Schubert 	DHCP_OPT_V4_PCP_SERVER = 158,
21885732ac8SCy Schubert 	DHCP_OPT_V4_PORTPARAMS = 159,
21985732ac8SCy Schubert 	DHCP_OPT_CAPTIVE_PORTAL = 160,
22085732ac8SCy Schubert 	DHCP_OPT_CONF_FILE = 209,
22185732ac8SCy Schubert 	DHCP_OPT_PATH_PREFIX = 210,
22285732ac8SCy Schubert 	DHCP_OPT_REBOOT_TIME = 211,
22385732ac8SCy Schubert 	DHCP_OPT_6RD = 212,
22485732ac8SCy Schubert 	DHCP_OPT_V4_ACCESS_DOMAIN = 213,
22585732ac8SCy Schubert 	DHCP_OPT_SUBNET_ALLOCATION = 220,
22685732ac8SCy Schubert 	DHCP_OPT_VSS = 221,
22785732ac8SCy Schubert 	DHCP_OPT_END = 255
22885732ac8SCy Schubert };
22985732ac8SCy Schubert 
23085732ac8SCy Schubert enum dhcp_message_types {
23185732ac8SCy Schubert 	DHCPDISCOVER = 1,
23285732ac8SCy Schubert 	DHCPOFFER = 2,
23385732ac8SCy Schubert 	DHCPREQUEST = 3,
23485732ac8SCy Schubert 	DHCPDECLINE = 4,
23585732ac8SCy Schubert 	DHCPACK = 5,
23685732ac8SCy Schubert 	DHCPNAK = 6,
23785732ac8SCy Schubert 	DHCPRELEASE = 7,
23885732ac8SCy Schubert 	DHCPINFORM = 8,
23985732ac8SCy Schubert 	DHCPFORCERENEW = 9,
24085732ac8SCy Schubert 	DHCPLEASEQUERY = 10,
24185732ac8SCy Schubert 	DHCPLEASEUNASSIGNED = 11,
24285732ac8SCy Schubert 	DHCPLEASEUNKNOWN = 12,
24385732ac8SCy Schubert 	DHCPLEASEACTIVE = 13,
24485732ac8SCy Schubert 	DHCPBULKLEASEQUERY = 14,
24585732ac8SCy Schubert 	DHCPLEASEQUERYDONE = 15,
24685732ac8SCy Schubert 	DHCPACTIVELEASEQUERY = 16,
24785732ac8SCy Schubert 	DHCPLEASEQUERYSTATUS = 17,
24885732ac8SCy Schubert 	DHCPTLS = 18,
24985732ac8SCy Schubert };
25085732ac8SCy Schubert 
25185732ac8SCy Schubert enum dhcp_relay_agent_suboptions {
25285732ac8SCy Schubert 	DHCP_RELAY_OPT_AGENT_CIRCUIT_ID = 1,
25385732ac8SCy Schubert 	DHCP_RELAY_OPT_AGENT_REMOTE_ID = 2,
25485732ac8SCy Schubert 	DHCP_RELAY_OPT_DOCSIS_DEVICE_CLASS = 4,
25585732ac8SCy Schubert 	DHCP_RELAY_OPT_LINK_SELECTION = 5,
25685732ac8SCy Schubert 	DHCP_RELAY_OPT_SUBSCRIBE_ID = 6,
25785732ac8SCy Schubert 	DHCP_RELAY_OPT_RADIUS_ATTRIBUTES = 7,
25885732ac8SCy Schubert 	DHCP_RELAY_OPT_AUTHENTICATION = 8,
25985732ac8SCy Schubert 	DHCP_RELAY_OPT_VEDOR_SPECIFIC = 9,
26085732ac8SCy Schubert 	DHCP_RELAY_OPT_RELAY_AGENT_FLAGS = 10,
26185732ac8SCy Schubert 	DHCP_RELAY_OPT_SERVER_ID_OVERRIDE = 11,
26285732ac8SCy Schubert 	DHCP_RELAY_OPT_RELAY_AGENT_ID = 12,
26385732ac8SCy Schubert 	DHCP_RELAY_OPT_ACCESS_TECHNOLOGY_TYPE = 13,
26485732ac8SCy Schubert 	DHCP_RELAY_OPT_ACCESS_NETWORK_NAME = 14,
26585732ac8SCy Schubert 	DHCP_RELAY_OPT_ACCESS_POINT_NAME = 15,
26685732ac8SCy Schubert 	DHCP_RELAY_OPT_ACCESS_POINT_BSSID = 16,
26785732ac8SCy Schubert 	DHCP_RELAY_OPT_OPERATOR_ID = 17,
26885732ac8SCy Schubert 	DHCP_RELAY_OPT_OPERATOR_REALM = 18,
26985732ac8SCy Schubert 	DHCP_RELAY_OPT_DHCPV4_VIRTUAL_SUBNET_SELECTION = 151,
27085732ac8SCy Schubert 	DHCP_RELAY_OPT_DHCPV4_VIRTUAL_SUBNET_SELECTION_CONTROL = 152,
27185732ac8SCy Schubert };
27285732ac8SCy Schubert 
27385732ac8SCy Schubert enum access_technology_types {
27485732ac8SCy Schubert 	ACCESS_TECHNOLOGY_VIRTUAL = 1,
27585732ac8SCy Schubert 	ACCESS_TECHNOLOGY_PPP = 2,
27685732ac8SCy Schubert 	ACCESS_TECHNOLOGY_ETHERNET = 3,
27785732ac8SCy Schubert 	ACCESS_TECHNOLOGY_WLAN = 4,
27885732ac8SCy Schubert 	ACCESS_TECHNOLOGY_WIMAX = 5,
27985732ac8SCy Schubert };
28085732ac8SCy Schubert 
28185732ac8SCy Schubert #endif /* DHCP_H */
282