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