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