xref: /xnu-11417.140.69/bsd/netinet/dhcp_options.h (revision 43a90889846e00bfb5cf1d255cdc0a701a1e05a4)
1*43a90889SApple OSS Distributions #ifndef _NETINET_DHCP_OPTIONS_H
2*43a90889SApple OSS Distributions #define _NETINET_DHCP_OPTIONS_H
3*43a90889SApple OSS Distributions #include <sys/appleapiopts.h>
4*43a90889SApple OSS Distributions /*
5*43a90889SApple OSS Distributions  * Copyright (c) 1999-2016 Apple Inc. All rights reserved.
6*43a90889SApple OSS Distributions  *
7*43a90889SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
8*43a90889SApple OSS Distributions  *
9*43a90889SApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
10*43a90889SApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
11*43a90889SApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
12*43a90889SApple OSS Distributions  * compliance with the License. The rights granted to you under the License
13*43a90889SApple OSS Distributions  * may not be used to create, or enable the creation or redistribution of,
14*43a90889SApple OSS Distributions  * unlawful or unlicensed copies of an Apple operating system, or to
15*43a90889SApple OSS Distributions  * circumvent, violate, or enable the circumvention or violation of, any
16*43a90889SApple OSS Distributions  * terms of an Apple operating system software license agreement.
17*43a90889SApple OSS Distributions  *
18*43a90889SApple OSS Distributions  * Please obtain a copy of the License at
19*43a90889SApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this file.
20*43a90889SApple OSS Distributions  *
21*43a90889SApple OSS Distributions  * The Original Code and all software distributed under the License are
22*43a90889SApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
23*43a90889SApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
24*43a90889SApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
25*43a90889SApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
26*43a90889SApple OSS Distributions  * Please see the License for the specific language governing rights and
27*43a90889SApple OSS Distributions  * limitations under the License.
28*43a90889SApple OSS Distributions  *
29*43a90889SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
30*43a90889SApple OSS Distributions  */
31*43a90889SApple OSS Distributions 
32*43a90889SApple OSS Distributions /*
33*43a90889SApple OSS Distributions  * dhcp_options.h
34*43a90889SApple OSS Distributions  * - routines to parse and access dhcp options
35*43a90889SApple OSS Distributions  */
36*43a90889SApple OSS Distributions 
37*43a90889SApple OSS Distributions /*
38*43a90889SApple OSS Distributions  * Modification History
39*43a90889SApple OSS Distributions  *
40*43a90889SApple OSS Distributions  * March 15, 2002	Dieter Siegmund (dieter@apple)
41*43a90889SApple OSS Distributions  * - imported from bootp project
42*43a90889SApple OSS Distributions  */
43*43a90889SApple OSS Distributions #include <mach/boolean.h>
44*43a90889SApple OSS Distributions #include <netinet/dhcp.h>
45*43a90889SApple OSS Distributions 
46*43a90889SApple OSS Distributions 
47*43a90889SApple OSS Distributions /* overloaded option values */
48*43a90889SApple OSS Distributions #define DHCP_OVERLOAD_FILE      1
49*43a90889SApple OSS Distributions #define DHCP_OVERLOAD_SNAME     2
50*43a90889SApple OSS Distributions #define DHCP_OVERLOAD_BOTH      3
51*43a90889SApple OSS Distributions 
52*43a90889SApple OSS Distributions /*
53*43a90889SApple OSS Distributions  * DHCP_OPTION_SIZE_MAX
54*43a90889SApple OSS Distributions  * - the largest size that an option can be (limited to an 8-bit quantity)
55*43a90889SApple OSS Distributions  */
56*43a90889SApple OSS Distributions #define DHCP_OPTION_SIZE_MAX    255
57*43a90889SApple OSS Distributions 
58*43a90889SApple OSS Distributions #define DHCP_TAG_OFFSET         0
59*43a90889SApple OSS Distributions #define DHCP_LEN_OFFSET         1
60*43a90889SApple OSS Distributions #define DHCP_OPTION_OFFSET      2
61*43a90889SApple OSS Distributions 
62*43a90889SApple OSS Distributions 
63*43a90889SApple OSS Distributions 
64*43a90889SApple OSS Distributions #define RFC_OPTIONS_MAGIC               { 99, 130, 83, 99 }
65*43a90889SApple OSS Distributions #define RFC_MAGIC_SIZE                  4 /* bytes */
66*43a90889SApple OSS Distributions 
67*43a90889SApple OSS Distributions enum {
68*43a90889SApple OSS Distributions 	/* rfc 1497 vendor extensions: 0..18, 255 */
69*43a90889SApple OSS Distributions 	dhcptag_pad_e                       = 0,
70*43a90889SApple OSS Distributions 	dhcptag_end_e                       = 255,
71*43a90889SApple OSS Distributions 	dhcptag_subnet_mask_e               = 1,
72*43a90889SApple OSS Distributions 	dhcptag_time_offset_e               = 2,
73*43a90889SApple OSS Distributions 	dhcptag_router_e                    = 3,
74*43a90889SApple OSS Distributions 	dhcptag_time_server_e               = 4,
75*43a90889SApple OSS Distributions 	dhcptag_name_server_e               = 5,
76*43a90889SApple OSS Distributions 	dhcptag_domain_name_server_e        = 6,
77*43a90889SApple OSS Distributions 	dhcptag_log_server_e                = 7,
78*43a90889SApple OSS Distributions 	dhcptag_cookie_server_e             = 8,
79*43a90889SApple OSS Distributions 	dhcptag_lpr_server_e                = 9,
80*43a90889SApple OSS Distributions 	dhcptag_impress_server_e            = 10,
81*43a90889SApple OSS Distributions 	dhcptag_resource_location_server_e  = 11,
82*43a90889SApple OSS Distributions 	dhcptag_host_name_e                 = 12,
83*43a90889SApple OSS Distributions 	dhcptag_boot_file_size_e            = 13,
84*43a90889SApple OSS Distributions 	dhcptag_merit_dump_file_e           = 14,
85*43a90889SApple OSS Distributions 	dhcptag_domain_name_e               = 15,
86*43a90889SApple OSS Distributions 	dhcptag_swap_server_e               = 16,
87*43a90889SApple OSS Distributions 	dhcptag_root_path_e                 = 17,
88*43a90889SApple OSS Distributions 	dhcptag_extensions_path_e           = 18,
89*43a90889SApple OSS Distributions 
90*43a90889SApple OSS Distributions 	/* ip layer parameters per host: 19..25 */
91*43a90889SApple OSS Distributions 	dhcptag_ip_forwarding_e             = 19,
92*43a90889SApple OSS Distributions 	dhcptag_non_local_source_routing_e  = 20,
93*43a90889SApple OSS Distributions 	dhcptag_policy_filter_e             = 21,
94*43a90889SApple OSS Distributions 	dhcptag_max_dgram_reassembly_size_e = 22,
95*43a90889SApple OSS Distributions 	dhcptag_default_ip_time_to_live_e   = 23,
96*43a90889SApple OSS Distributions 	dhcptag_path_mtu_aging_timeout_e    = 24,
97*43a90889SApple OSS Distributions 	dhcptag_path_mtu_plateau_table_e    = 25,
98*43a90889SApple OSS Distributions 
99*43a90889SApple OSS Distributions 	/* ip layer parameters per interface: 26..33 */
100*43a90889SApple OSS Distributions 	dhcptag_interface_mtu_e             = 26,
101*43a90889SApple OSS Distributions 	dhcptag_all_subnets_local_e         = 27,
102*43a90889SApple OSS Distributions 	dhcptag_broadcast_address_e         = 28,
103*43a90889SApple OSS Distributions 	dhcptag_perform_mask_discovery_e    = 29,
104*43a90889SApple OSS Distributions 	dhcptag_mask_supplier_e             = 30,
105*43a90889SApple OSS Distributions 	dhcptag_perform_router_discovery_e  = 31,
106*43a90889SApple OSS Distributions 	dhcptag_router_solicitation_address_e       = 32,
107*43a90889SApple OSS Distributions 	dhcptag_static_route_e              = 33,
108*43a90889SApple OSS Distributions 	dhcptag_trailer_encapsulation_e     = 34,
109*43a90889SApple OSS Distributions 	dhcptag_arp_cache_timeout_e         = 35,
110*43a90889SApple OSS Distributions 	dhcptag_ethernet_encapsulation_e    = 36,
111*43a90889SApple OSS Distributions 
112*43a90889SApple OSS Distributions 	/* tcp parameters: 37..39 */
113*43a90889SApple OSS Distributions 	dhcptag_default_ttl_e               = 37,
114*43a90889SApple OSS Distributions 	dhcptag_keepalive_interval_e        = 38,
115*43a90889SApple OSS Distributions 	dhcptag_keepalive_garbage_e         = 39,
116*43a90889SApple OSS Distributions 
117*43a90889SApple OSS Distributions 	/* application & service parameters: 40..49, 64, 65, 68..76, 78, 79, 95 */
118*43a90889SApple OSS Distributions 	dhcptag_nis_domain_e                = 40,
119*43a90889SApple OSS Distributions 	dhcptag_nis_servers_e               = 41,
120*43a90889SApple OSS Distributions 	dhcptag_network_time_protocol_servers_e     = 42,
121*43a90889SApple OSS Distributions 	dhcptag_vendor_specific_e           = 43,
122*43a90889SApple OSS Distributions 	dhcptag_nb_over_tcpip_name_server_e = 44,
123*43a90889SApple OSS Distributions 	dhcptag_nb_over_tcpip_dgram_dist_server_e   = 45,
124*43a90889SApple OSS Distributions 	dhcptag_nb_over_tcpip_node_type_e   = 46,
125*43a90889SApple OSS Distributions 	dhcptag_nb_over_tcpip_scope_e       = 47,
126*43a90889SApple OSS Distributions 	dhcptag_x_windows_font_server_e     = 48,
127*43a90889SApple OSS Distributions 	dhcptag_x_windows_display_manager_e = 49,
128*43a90889SApple OSS Distributions 	dhcptag_nis_plus_domain_e           = 64,
129*43a90889SApple OSS Distributions 	dhcptag_nis_plus_servers_e          = 65,
130*43a90889SApple OSS Distributions 	dhcptag_mobile_ip_home_agent_e      = 68,
131*43a90889SApple OSS Distributions 	dhcptag_smtp_server_e               = 69,
132*43a90889SApple OSS Distributions 	dhcptag_pop3_server_e               = 70,
133*43a90889SApple OSS Distributions 	dhcptag_nntp_server_e               = 71,
134*43a90889SApple OSS Distributions 	dhcptag_default_www_server_e        = 72,
135*43a90889SApple OSS Distributions 	dhcptag_default_finger_server_e     = 73,
136*43a90889SApple OSS Distributions 	dhcptag_default_irc_server_e        = 74,
137*43a90889SApple OSS Distributions 	dhcptag_streettalk_server_e         = 75,
138*43a90889SApple OSS Distributions 	dhcptag_stda_server_e               = 76,
139*43a90889SApple OSS Distributions 	dhcptag_slp_directory_agent_e       = 78,
140*43a90889SApple OSS Distributions 	dhcptag_slp_service_scope_e         = 79,
141*43a90889SApple OSS Distributions 	dhcptag_ldap_url_e                  = 95,
142*43a90889SApple OSS Distributions 
143*43a90889SApple OSS Distributions 	/* dhcp-specific extensions: 50..61, 66, 67 */
144*43a90889SApple OSS Distributions 	dhcptag_requested_ip_address_e      = 50,
145*43a90889SApple OSS Distributions 	dhcptag_lease_time_e                = 51,
146*43a90889SApple OSS Distributions 	dhcptag_option_overload_e           = 52,
147*43a90889SApple OSS Distributions 	dhcptag_dhcp_message_type_e         = 53,
148*43a90889SApple OSS Distributions 	dhcptag_server_identifier_e         = 54,
149*43a90889SApple OSS Distributions 	dhcptag_parameter_request_list_e    = 55,
150*43a90889SApple OSS Distributions 	dhcptag_message_e                   = 56,
151*43a90889SApple OSS Distributions 	dhcptag_max_dhcp_message_size_e     = 57,
152*43a90889SApple OSS Distributions 	dhcptag_renewal_t1_time_value_e     = 58,
153*43a90889SApple OSS Distributions 	dhcptag_rebinding_t2_time_value_e   = 59,
154*43a90889SApple OSS Distributions 	dhcptag_vendor_class_identifier_e   = 60,
155*43a90889SApple OSS Distributions 	dhcptag_client_identifier_e         = 61,
156*43a90889SApple OSS Distributions 	dhcptag_tftp_server_name_e          = 66,
157*43a90889SApple OSS Distributions 	dhcptag_bootfile_name_e             = 67,
158*43a90889SApple OSS Distributions 
159*43a90889SApple OSS Distributions 	/* netinfo parent tags: 112, 113 */
160*43a90889SApple OSS Distributions 	dhcptag_netinfo_server_address_e    = 112,
161*43a90889SApple OSS Distributions 	dhcptag_netinfo_server_tag_e        = 113,
162*43a90889SApple OSS Distributions 
163*43a90889SApple OSS Distributions 	/* ad-hoc network disable option */
164*43a90889SApple OSS Distributions 	dhcptag_auto_configure_e            = 116,
165*43a90889SApple OSS Distributions };
166*43a90889SApple OSS Distributions typedef uint8_t dhcptag_t;
167*43a90889SApple OSS Distributions 
168*43a90889SApple OSS Distributions /*
169*43a90889SApple OSS Distributions  * Module: dhcpol (dhcp options list)
170*43a90889SApple OSS Distributions  *
171*43a90889SApple OSS Distributions  * Purpose:
172*43a90889SApple OSS Distributions  *   Routines to parse and retrieve dhcp options.
173*43a90889SApple OSS Distributions  */
174*43a90889SApple OSS Distributions 
175*43a90889SApple OSS Distributions typedef struct {
176*43a90889SApple OSS Distributions 	const void * *      array;/* malloc'd array of pointers */
177*43a90889SApple OSS Distributions 	uint32_t            size;/* number of elements in array */
178*43a90889SApple OSS Distributions 	uint32_t            count;/* number of occupied elements */
179*43a90889SApple OSS Distributions } ptrlist_t;
180*43a90889SApple OSS Distributions 
181*43a90889SApple OSS Distributions typedef ptrlist_t dhcpol_t;
182*43a90889SApple OSS Distributions 
183*43a90889SApple OSS Distributions #ifdef BSD_KERNEL_PRIVATE
184*43a90889SApple OSS Distributions 
185*43a90889SApple OSS Distributions void                    dhcpol_init(dhcpol_t * list);
186*43a90889SApple OSS Distributions void                    dhcpol_free(dhcpol_t * list);
187*43a90889SApple OSS Distributions int                     dhcpol_count(dhcpol_t * list);
188*43a90889SApple OSS Distributions boolean_t               dhcpol_add(dhcpol_t * list, const void * element);
189*43a90889SApple OSS Distributions const void *            dhcpol_element(dhcpol_t * list, int i);
190*43a90889SApple OSS Distributions boolean_t               dhcpol_concat(dhcpol_t * list, dhcpol_t * extra);
191*43a90889SApple OSS Distributions boolean_t               dhcpol_parse_buffer(dhcpol_t * list,
192*43a90889SApple OSS Distributions     const void * buffer,
193*43a90889SApple OSS Distributions     int length);
194*43a90889SApple OSS Distributions const void *            dhcpol_find(dhcpol_t * list, int tag, int * len_p,
195*43a90889SApple OSS Distributions     int * start);
196*43a90889SApple OSS Distributions boolean_t               dhcpol_parse_packet(dhcpol_t * options,
197*43a90889SApple OSS Distributions     const struct dhcp * pkt, int len);
198*43a90889SApple OSS Distributions 
199*43a90889SApple OSS Distributions #endif /* BSD_KERNEL_PRIVATE */
200*43a90889SApple OSS Distributions #endif /* _NETINET_DHCP_OPTIONS_H */
201