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