hostap/src/common/dhcp.h
Jouni Malinen e64c13febb Move DHCP definitions into a common file
These can be reused for other purposes than just the DHCP snoofing for
Proxy ARP. In addition, use more complete definition of the parameters
based on the current IANA registry.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
2017-01-31 17:46:11 +02:00

257 lines
6.6 KiB
C

/*
* DHCP definitions
* Copyright (c) 2014-2017, Qualcomm Atheros, Inc.
*
* This software may be distributed under the terms of the BSD license.
* See README for more details.
*/
#ifndef DHCP_H
#define DHCP_H
#include <netinet/ip.h>
#include <netinet/udp.h>
#define DHCP_SERVER_PORT 67
#define DHCP_CLIENT_PORT 68
struct dhcp_data {
u8 op;
u8 htype;
u8 hlen;
u8 hops;
be32 xid;
be16 secs;
be16 flags;
be32 client_ip;
be32 your_ip;
be32 server_ip;
be32 relay_ip;
u8 hw_addr[16];
u8 serv_name[64];
u8 boot_file[128];
} STRUCT_PACKED;
struct bootp_pkt {
struct iphdr iph;
struct udphdr udph;
u8 op;
u8 htype;
u8 hlen;
u8 hops;
be32 xid;
be16 secs;
be16 flags;
be32 client_ip;
be32 your_ip;
be32 server_ip;
be32 relay_ip;
u8 hw_addr[16];
u8 serv_name[64];
u8 boot_file[128];
u8 exten[312];
} STRUCT_PACKED;
#define DHCP_MAGIC 0x63825363
/*
* IANA DHCP/BOOTP registry
* http://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml
*/
enum dhcp_options {
DHCP_OPT_PAD = 0,
DHCP_OPT_SUBNET_MASK = 1,
DHCP_OPT_TIME_OFFSET = 2,
DHCP_OPT_ROUTER = 3,
DHCP_OPT_TIME_SERVER = 4,
DHCP_OPT_NAME_SERVER = 5,
DHCP_OPT_DOMAIN_NAME_SERVER = 6,
DHCP_OPT_LOG_SERVER = 7,
DHCP_OPT_QUOTES_SERVER = 8,
DHCP_OPT_LPR_SERVER = 9,
DHCP_OPT_IMPRESS_SERVER = 10,
DHCP_OPT_RLP_SERVER = 11,
DHCP_OPT_HOSTNAME = 12,
DHCP_OPT_BOOT_FILE_SIZE = 13,
DHCP_OPT_MERIT_DUMP_FILE = 14,
DHCP_OPT_DOMAIN_NAME = 15,
DHCP_OPT_SWAP_SERVER = 16,
DHCP_OPT_ROOT_PATH = 17,
DHCP_OPT_EXTENSION_PATH = 18,
DHCP_OPT_FORWARD = 19,
DHCP_OPT_SRC_RTE = 20,
DHCP_OPT_POLICY_FILTER = 21,
DHCP_OPT_MAX_DG_ASSEMBLY = 22,
DHCP_OPT_DEFAULT_IP_TTL = 23,
DHCP_OPT_MTU_TIMEOUT = 24,
DHCP_OPT_MTU_PLATEAU = 25,
DHCP_OPT_MTU_INTERFACE = 26,
DHCP_OPT_ALL_SUBNETS_LOCAL = 27,
DHCP_OPT_BROADCAST_ADDRESS = 28,
DHCP_OPT_MASK_DISCOVERY = 29,
DHCP_OPT_MASK_SUPPLIER = 30,
DHCP_OPT_ROUTER_DISCOVERY = 31,
DHCP_OPT_ROUTER_SOLICITATION_ADDRESS = 32,
DHCP_OPT_STATIC_ROUTE = 33,
DHCP_OPT_TRAILERS = 34,
DHCP_OPT_ARP_TIMEOUT = 35,
DHCP_OPT_ETHERNET = 36,
DHCP_OPT_TCP_DEFAULT_TTL = 37,
DHCP_OPT_TCP_KEEPALIVE_INTERVAL = 38,
DHCP_OPT_TCP_KEEPALIVE_GARBAGE = 39,
DHCP_OPT_NIS_DOMAIN = 40,
DHCP_OPT_NIS_SERVERS = 41,
DHCP_OPT_NTP_SERVERS = 42,
DHCP_OPT_VENDOR_SPECIFIC = 43,
DHCP_OPT_NETBIOS_NAME_SERVER = 44,
DHCP_OPT_NETBIOS_DISTRIBUTION_SERVER = 45,
DHCP_OPT_NETBIOS_NODE_TYPE = 46,
DHCP_OPT_NETBIOS_SCOPE = 47,
DHCP_OPT_FONT_SERVER = 48,
DHCP_OPT_DISPLAY_MANAGER = 49,
DHCP_OPT_REQUESTED_IP_ADDRESS = 50,
DHCP_OPT_IP_ADDRESS_LEASE_TIME = 51,
DHCP_OPT_OVERLOAD = 52,
DHCP_OPT_MSG_TYPE = 53,
DHCP_OPT_SERVER_ID = 54,
DHCP_OPT_PARAMETER_REQ_LIST = 55,
DHCP_OPT_MESSAGE = 56,
DHCP_OPT_MAX_MESSAGE_SIZE = 57,
DHCP_OPT_RENEWAL_TIME = 58,
DHCP_OPT_REBINDING_TIME = 59,
DHCP_OPT_VENDOR_CLASS_ID = 60,
DHCP_OPT_CLIENT_ID = 61,
DHCP_OPT_NETWARE_IP_DOMAIN = 62,
DHCP_OPT_NETWARE_IP_OPTION = 63,
DHCP_OPT_NIS_V3_DOMAIN = 64,
DHCP_OPT_NIS_V3_SERVERS = 65,
DHCP_OPT_TFTP_SERVER_NAME = 66,
DHCP_OPT_BOOT_FILE_NAME = 67,
DHCP_OPT_HOME_AGENT_ADDRESSES = 68,
DHCP_OPT_SMTP_SERVER = 69,
DHCP_OPT_POP3_SERVER = 70,
DHCP_OPT_NNTP_SERVER = 71,
DHCP_OPT_WWW_SERVER = 72,
DHCP_OPT_FINGER_SERVER = 73,
DHCP_OPT_IRC_SERVER = 74,
DHCP_OPT_STREETTALK_SERVER = 75,
DHCP_OPT_STDA_SERVER = 76,
DHCP_OPT_USER_CLASS = 77,
DHCP_OPT_DIRECTORY_AGENT = 78,
DHCP_OPT_SERVICE_SCOPE = 79,
DHCP_OPT_RAPID_COMMIT = 80,
DHCP_OPT_CLIENT_FQDN = 81,
DHCP_OPT_RELAY_AGENT_INFO = 82,
DHCP_OPT_ISNS = 83,
DHCP_OPT_NDS_SERVERS = 85,
DHCP_OPT_NDS_TREE_NAME = 86,
DHCP_OPT_NDS_CONTEXT = 87,
DHCP_OPT_BCMCS_CONTROLLER_DOMAIN_NAME_LIST = 88,
DHCP_OPT_BCMCS_CONTROLLER_IPV4_ADDRESS = 89,
DHCP_OPT_AUTHENTICATION = 90,
DHCP_OPT_CLIENT_LAST_TRANSACTION_TIME = 91,
DHCP_OPT_ASSOCIATED_IP = 92,
DHCP_OPT_CLIENT_SYSYEM = 93,
DHCP_OPT_CLIENT_NDI = 94,
DHCP_OPT_LDAP = 95,
DHCP_OPT_UUID_GUID = 97,
DHCP_OPT_USER_AUTH = 98,
DHCP_OPT_GEOCONF_CIVIC = 99,
DHCP_OPT_PCODE = 100,
DHCP_OPT_TCODE = 101,
DHCP_OPT_NETINFO_ADDRESS = 112,
DHCP_OPT_NETINFO_TAG = 113,
DHCP_OPT_URL = 114,
DHCP_OPT_AUTO_CONFIG = 116,
DHCP_OPT_NAME_SERVICE_SEARCH = 117,
DHCP_OPT_SUBNET_SELECTION = 118,
DHCP_OPT_DOMAIN_SEARCH = 119,
DHCP_OPT_SIP_SERVERS_DCP = 120,
DHCP_OPT_CLASSLESS_STATIC_ROUTE = 121,
DHCP_OPT_CCC = 122,
DHCP_OPT_GEOCONF = 123,
DHCP_OPT_V_I_VENDOR_CLASS = 124,
DHCP_OPT_V_I_VENDOR_SPECIFIC_INFO = 125,
DHCP_OPT_PANA_AGENT = 136,
DHCP_OPT_V4_LOST = 137,
DHCP_OPT_CAPWAP_AC_V4 = 138,
DHCP_OPT_IPV4_ADDRESS_MOS = 139,
DHCP_OPT_IPV4_FQDN_MOS = 140,
DHCP_OPT_SIP_UA_CONF = 141,
DHCP_OPT_IPV4_ADDRESS_ANDSF = 142,
DHCP_OPT_GEOLOC = 144,
DHCP_OPT_FORCERENEW_NONCE_CAPABLE = 145,
DHCP_OPT_RDNSS_SELECTION = 146,
DHCP_OPT_TFTP_SERVER_ADDRESS = 150,
DHCP_OPT_STATUS_CODE = 151,
DHCP_OPT_BASE_TIME = 152,
DHCP_OPT_START_TIME_OF_STATE = 153,
DHCP_OPT_QUERY_START_TIME = 154,
DHCP_OPT_QUERY_END_TIME = 155,
DHCP_OPT_STATE = 156,
DHCP_OPT_DATA_SOURCE = 157,
DHCP_OPT_V4_PCP_SERVER = 158,
DHCP_OPT_V4_PORTPARAMS = 159,
DHCP_OPT_CAPTIVE_PORTAL = 160,
DHCP_OPT_CONF_FILE = 209,
DHCP_OPT_PATH_PREFIX = 210,
DHCP_OPT_REBOOT_TIME = 211,
DHCP_OPT_6RD = 212,
DHCP_OPT_V4_ACCESS_DOMAIN = 213,
DHCP_OPT_SUBNET_ALLOCATION = 220,
DHCP_OPT_VSS = 221,
DHCP_OPT_END = 255
};
enum dhcp_message_types {
DHCPDISCOVER = 1,
DHCPOFFER = 2,
DHCPREQUEST = 3,
DHCPDECLINE = 4,
DHCPACK = 5,
DHCPNAK = 6,
DHCPRELEASE = 7,
DHCPINFORM = 8,
DHCPFORCERENEW = 9,
DHCPLEASEQUERY = 10,
DHCPLEASEUNASSIGNED = 11,
DHCPLEASEUNKNOWN = 12,
DHCPLEASEACTIVE = 13,
DHCPBULKLEASEQUERY = 14,
DHCPLEASEQUERYDONE = 15,
DHCPACTIVELEASEQUERY = 16,
DHCPLEASEQUERYSTATUS = 17,
DHCPTLS = 18,
};
enum dhcp_relay_agent_suboptions {
DHCP_RELAY_OPT_AGENT_CIRCUIT_ID = 1,
DHCP_RELAY_OPT_AGENT_REMOTE_ID = 2,
DHCP_RELAY_OPT_DOCSIS_DEVICE_CLASS = 4,
DHCP_RELAY_OPT_LINK_SELECTION = 5,
DHCP_RELAY_OPT_SUBSCRIBE_ID = 6,
DHCP_RELAY_OPT_RADIUS_ATTRIBUTES = 7,
DHCP_RELAY_OPT_AUTHENTICATION = 8,
DHCP_RELAY_OPT_VEDOR_SPECIFIC = 9,
DHCP_RELAY_OPT_RELAY_AGENT_FLAGS = 10,
DHCP_RELAY_OPT_SERVER_ID_OVERRIDE = 11,
DHCP_RELAY_OPT_RELAY_AGENT_ID = 12,
DHCP_RELAY_OPT_ACCESS_TECHNOLOGY_TYPE = 13,
DHCP_RELAY_OPT_ACCESS_NETWORK_NAME = 14,
DHCP_RELAY_OPT_ACCESS_POINT_NAME = 15,
DHCP_RELAY_OPT_ACCESS_POINT_BSSID = 16,
DHCP_RELAY_OPT_OPERATOR_ID = 17,
DHCP_RELAY_OPT_OPERATOR_REALM = 18,
DHCP_RELAY_OPT_DHCPV4_VIRTUAL_SUBNET_SELECTION = 151,
DHCP_RELAY_OPT_DHCPV4_VIRTUAL_SUBNET_SELECTION_CONTROL = 152,
};
enum access_technology_types {
ACCESS_TECHNOLOGY_VIRTUAL = 1,
ACCESS_TECHNOLOGY_PPP = 2,
ACCESS_TECHNOLOGY_ETHERNET = 3,
ACCESS_TECHNOLOGY_WLAN = 4,
ACCESS_TECHNOLOGY_WIMAX = 5,
};
#endif /* DHCP_H */