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