X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/d52fe63fc81f7e44faaae711812a211a78434976..9bccf70c0258c7cac2dcb80011b2a964d884c552:/bsd/netinet/dhcp_options.h diff --git a/bsd/netinet/dhcp_options.h b/bsd/netinet/dhcp_options.h new file mode 100644 index 000000000..0b5020d11 --- /dev/null +++ b/bsd/netinet/dhcp_options.h @@ -0,0 +1,198 @@ + +#ifndef _NETINET_DHCP_OPTIONS_H +#define _NETINET_DHCP_OPTIONS_H +#include +/* + * Copyright (c) 1999-2002 Apple Computer, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * The contents of this file constitute Original Code as defined in and + * are subject to the Apple Public Source License Version 1.1 (the + * "License"). You may not use this file except in compliance with the + * License. Please obtain a copy of the License at + * http://www.apple.com/publicsource and read it before using this file. + * + * This Original Code and all software distributed under the License are + * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the + * License for the specific language governing rights and limitations + * under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +/* + * dhcp_options.h + * - routines to parse and access dhcp options + */ + +/* + * Modification History + * + * March 15, 2002 Dieter Siegmund (dieter@apple) + * - imported from bootp project + */ +#include +#include + + +/* overloaded option values */ +#define DHCP_OVERLOAD_FILE 1 +#define DHCP_OVERLOAD_SNAME 2 +#define DHCP_OVERLOAD_BOTH 3 + +/* + * DHCP_OPTION_SIZE_MAX + * - the largest size that an option can be (limited to an 8-bit quantity) + */ +#define DHCP_OPTION_SIZE_MAX 255 + +#define DHCP_TAG_OFFSET 0 +#define DHCP_LEN_OFFSET 1 +#define DHCP_OPTION_OFFSET 2 + + + +#define RFC_OPTIONS_MAGIC { 99, 130, 83, 99 } +#define RFC_MAGIC_SIZE 4 /* bytes */ + +typedef enum { + /* rfc 1497 vendor extensions: 0..18, 255 */ + dhcptag_pad_e = 0, + dhcptag_end_e = 255, + dhcptag_subnet_mask_e = 1, + dhcptag_time_offset_e = 2, + dhcptag_router_e = 3, + dhcptag_time_server_e = 4, + dhcptag_name_server_e = 5, + dhcptag_domain_name_server_e = 6, + dhcptag_log_server_e = 7, + dhcptag_cookie_server_e = 8, + dhcptag_lpr_server_e = 9, + dhcptag_impress_server_e = 10, + dhcptag_resource_location_server_e = 11, + dhcptag_host_name_e = 12, + dhcptag_boot_file_size_e = 13, + dhcptag_merit_dump_file_e = 14, + dhcptag_domain_name_e = 15, + dhcptag_swap_server_e = 16, + dhcptag_root_path_e = 17, + dhcptag_extensions_path_e = 18, + + /* ip layer parameters per host: 19..25 */ + dhcptag_ip_forwarding_e = 19, + dhcptag_non_local_source_routing_e = 20, + dhcptag_policy_filter_e = 21, + dhcptag_max_dgram_reassembly_size_e = 22, + dhcptag_default_ip_time_to_live_e = 23, + dhcptag_path_mtu_aging_timeout_e = 24, + dhcptag_path_mtu_plateau_table_e = 25, + + /* ip layer parameters per interface: 26..33 */ + dhcptag_interface_mtu_e = 26, + dhcptag_all_subnets_local_e = 27, + dhcptag_broadcast_address_e = 28, + dhcptag_perform_mask_discovery_e = 29, + dhcptag_mask_supplier_e = 30, + dhcptag_perform_router_discovery_e = 31, + dhcptag_router_solicitation_address_e = 32, + dhcptag_static_route_e = 33, + dhcptag_trailer_encapsulation_e = 34, + dhcptag_arp_cache_timeout_e = 35, + dhcptag_ethernet_encapsulation_e = 36, + + /* tcp parameters: 37..39 */ + dhcptag_default_ttl_e = 37, + dhcptag_keepalive_interval_e = 38, + dhcptag_keepalive_garbage_e = 39, + + /* application & service parameters: 40..49, 64, 65, 68..76, 78, 79, 95 */ + dhcptag_nis_domain_e = 40, + dhcptag_nis_servers_e = 41, + dhcptag_network_time_protocol_servers_e = 42, + dhcptag_vendor_specific_e = 43, + dhcptag_nb_over_tcpip_name_server_e = 44, + dhcptag_nb_over_tcpip_dgram_dist_server_e = 45, + dhcptag_nb_over_tcpip_node_type_e = 46, + dhcptag_nb_over_tcpip_scope_e = 47, + dhcptag_x_windows_font_server_e = 48, + dhcptag_x_windows_display_manager_e = 49, + dhcptag_nis_plus_domain_e = 64, + dhcptag_nis_plus_servers_e = 65, + dhcptag_mobile_ip_home_agent_e = 68, + dhcptag_smtp_server_e = 69, + dhcptag_pop3_server_e = 70, + dhcptag_nntp_server_e = 71, + dhcptag_default_www_server_e = 72, + dhcptag_default_finger_server_e = 73, + dhcptag_default_irc_server_e = 74, + dhcptag_streettalk_server_e = 75, + dhcptag_stda_server_e = 76, + dhcptag_slp_directory_agent_e = 78, + dhcptag_slp_service_scope_e = 79, + dhcptag_ldap_url_e = 95, + + /* dhcp-specific extensions: 50..61, 66, 67 */ + dhcptag_requested_ip_address_e = 50, + dhcptag_lease_time_e = 51, + dhcptag_option_overload_e = 52, + dhcptag_dhcp_message_type_e = 53, + dhcptag_server_identifier_e = 54, + dhcptag_parameter_request_list_e = 55, + dhcptag_message_e = 56, + dhcptag_max_dhcp_message_size_e = 57, + dhcptag_renewal_t1_time_value_e = 58, + dhcptag_rebinding_t2_time_value_e = 59, + dhcptag_vendor_class_identifier_e = 60, + dhcptag_client_identifier_e = 61, + dhcptag_tftp_server_name_e = 66, + dhcptag_bootfile_name_e = 67, + + /* netinfo parent tags: 112, 113 */ + dhcptag_netinfo_server_address_e = 112, + dhcptag_netinfo_server_tag_e = 113, + + /* ad-hoc network disable option */ + dhcptag_auto_configure_e = 116, +} dhcptag_t; + +/* + * Module: dhcpol (dhcp options list) + * + * Purpose: + * Routines to parse and retrieve dhcp options. + */ + +typedef struct { + void * * array; /* malloc'd array of pointers */ + int size; /* number of elements in array */ + int count; /* number of occupied elements */ +} ptrlist_t; + +typedef ptrlist_t dhcpol_t; + +#ifdef __APPLE_API_PRIVATE + +void dhcpol_init(dhcpol_t * list); +void dhcpol_free(dhcpol_t * list); +int dhcpol_count(dhcpol_t * list); +boolean_t dhcpol_add(dhcpol_t * list, void * element); +void * dhcpol_element(dhcpol_t * list, int i); +boolean_t dhcpol_concat(dhcpol_t * list, dhcpol_t * extra); +boolean_t dhcpol_parse_buffer(dhcpol_t * list, void * buffer, + int length, unsigned char * err); +void * dhcpol_find(dhcpol_t * list, int tag, int * len_p, + int * start); +void * dhcpol_get(dhcpol_t * list, int tag, int * len_p); +boolean_t dhcpol_parse_packet(dhcpol_t * options, + struct dhcp * pkt, int len, + unsigned char * err); +boolean_t dhcpol_parse_vendor(dhcpol_t * vendor, + dhcpol_t * options, + unsigned char * err); +void dhcpol_print(dhcpol_t * list); +#endif /* __APPLE_API_PRIVATE */ +#endif _NETINET_DHCP_OPTIONS_H