]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/netinet/dhcp_options.h
xnu-344.tar.gz
[apple/xnu.git] / bsd / netinet / dhcp_options.h
diff --git a/bsd/netinet/dhcp_options.h b/bsd/netinet/dhcp_options.h
new file mode 100644 (file)
index 0000000..0b5020d
--- /dev/null
@@ -0,0 +1,198 @@
+
+#ifndef _NETINET_DHCP_OPTIONS_H
+#define _NETINET_DHCP_OPTIONS_H
+#include <sys/appleapiopts.h>
+/*
+ * 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 <mach/boolean.h>
+#include <netinet/dhcp.h>
+
+
+/* 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