dhcp.h 6.7 KB

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