2 * Routines for DHCP/BOOTP packet disassembly
4 * Copyright 1998, Gilbert Ramirez <gram@alumni.rice.edu>
5 * Copyright 2004, Thomas Anders <thomas.anders [AT] blue-cable.de>
7 * Added option field filters
8 * Copyright 2011, Michael Mann
10 * Added option 77 : RFC 3004 - The User Class Option for DHCP
11 * Added option 117 : RFC 2937 - The Name Service Search Option for DHCP
12 * Added option 119 : RFC 3397 - Dynamic Host Configuration Protocol (DHCP) Domain Search Option
13 * RFC 3396 - Encoding Long Options in the Dynamic Host Configuration Protocol (DHCPv4)
14 * Improved opt 120 : Add support of RFC 3396 - Encoding Long Options in the Dynamic Host Configuration Protocol (DHCPv4)
15 * Add support compression according to the encoding in Section 4.1.4 of RFC 1035 - DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION
18 * Copyright 2012, Jerome LAFORGE <jerome.laforge [AT] gmail.com>
20 * The information used comes from:
21 * RFC 951: Bootstrap Protocol
22 * RFC 1035: Domain Names - Implementation And Specification
23 * RFC 1497: BOOTP extensions
24 * RFC 1542: Clarifications and Extensions for the Bootstrap Protocol
25 * RFC 2131: Dynamic Host Configuration Protocol
26 * RFC 2132: DHCP Options and BOOTP Vendor Extensions
27 * RFC 2241: DHCP Options for Novell Directory Services
28 * RFC 2242: NetWare/IP Domain Name and Information
29 * RFC 2489: Procedure for Defining New DHCP Options
30 * RFC 2610: DHCP Options for Service Location Protocol
31 * RFC 2685: Virtual Private Networks Identifier
32 * RFC 2937: The Name Service Search Option for DHCP
33 * RFC 3004: The User Class Option for DHCP
34 * RFC 3046: DHCP Relay Agent Information Option
35 * RFC 3118: Authentication for DHCP Messages
36 * RFC 3203: DHCP reconfigure extension
37 * RFC 3315: Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
38 * RFC 3396: Encoding Long Options in the Dynamic Host Configuration Protocol (DHCPv4)
39 * RFC 3397: Dynamic Host Configuration Protocol (DHCP) Domain Search Option
40 * RFC 3495: DHCP Option (122) for CableLabs Client Configuration
41 * RFC 3594: PacketCable Security Ticket Control Sub-Option (122.9)
42 * RFC 3442: Classless Static Route Option for DHCP version 4
43 * RFC 3825: Dynamic Host Configuration Protocol Option for Coordinate-based Location Configuration Information
44 * RFC 3925: Vendor-Identifying Vendor Options for Dynamic Host Configuration Protocol version 4 (DHCPv4)
45 * RFC 3942: Reclassifying DHCPv4 Options
46 * RFC 4174: The IPv4 Dynamic Host Configuration Protocol (DHCP) Option for the Internet Storage Name Service
47 * RFC 4243: Vendor-Specific Information Suboption for the Dynamic Host Configuration Protocol (DHCP) Relay Agent Option
48 * RFC 4361: Node-specific Client Identifiers for Dynamic Host Configuration Protocol Version Four (DHCPv4)
49 * RFC 4388: Dynamic Host Configuration Protocol (DHCP) Leasequery
50 * RFC 4578: Dynamic Host Configuration Protocol (DHCP) Options for PXE
51 * RFC 4776: Dynamic Host Configuration Protocol (DHCPv4 and DHCPv6) Option for Civic Addresses Configuration Information
52 * RFC 5192: DHCP Options for Protocol for Carrying Authentication for Network Access (PANA) Authentication Agent
53 * RFC 5223: Discovering Location-to-Service Translation (LoST) Servers Using the Dynamic Host Configuration Protocol (DHCP)
54 * RFC 5417: CAPWAP Access Controller DHCP Option
55 * RFC 5969: IPv6 Rapid Deployment on IPv4 Infrastructures (6rd)
56 * RFC 6225: Dynamic Host Configuration Protocol Options for Coordinate-Based Location Configuration Information
57 * RFC 6607: Virtual Subnet Selection Options for DHCPv4 and DHCPv6
58 * RFC 6704: Forcerenew Nonce Authentication
59 * RFC 6731: Improved Recursive DNS Server Selection for Multi-Interfaced Nodes
60 * RFC 6926: DHCPv4 Bulk Leasequery
61 * RFC 7291: DHCP Options for the Port Control Protocol (PCP)
62 * RFC 7618: Dynamic Allocation of Shared IPv4 Addresses
63 * RFC 7710: Captive-Portal Identification Using DHCP or Router Advertisements (RAs)
64 * RFC 7724: Active DHCPv4 Lease Query
65 * RFC 7839: Access-Network-Identifier Option in DHCP
66 * RFC 8357: Generalized UDP Source Port for DHCP Relay
67 * RFC 8910: Captive-Portal Identification in DHCP and Router Advertisements (RAs)
68 * RFC 8925: IPv6-Only Preferred Option for DHCPv4
69 * RFC 8973: DDoS Open Threat Signaling (DOTS) Agent Discovery
70 * draft-ietf-dhc-fqdn-option-07.txt
71 * TFTP Server Address Option for DHCPv4 [draft-raj-dhc-tftp-addr-option-06.txt: https://tools.ietf.org/html/draft-raj-dhc-tftp-addr-option-06]
72 * BOOTP and DHCP Parameters
73 * https://www.iana.org/assignments/bootp-dhcp-parameters
74 * DOCSIS(TM) 2.0 Radio Frequency Interface Specification
75 * https://specification-search.cablelabs.com/radio-frequency-interface-specification-2
76 * DOCSIS(TM) 3.0 MAC and Upper Layer Protocols Interface Specification
77 * https://specification-search.cablelabs.com/CM-SP-MULPIv3.0
78 * PacketCable(TM) 1.0 MTA Device Provisioning Specification
79 * https://specification-search.cablelabs.com/packetcable-mta-device-provisioning-specification
80 * PacketCable(TM) 1.5 MTA Device Provisioning Specification
81 * https://specification-search.cablelabs.com/packetcable-1-5-mta-device-provisioning-specification
82 * PacketCable(TM) 2.0 E-UE Device Provisioning Data Model Specification
83 * https://specification-search.cablelabs.com/e-ue-provisioning-data-model-specification
84 * Business Services over DOCSIS(R) Layer 2 Virtual Private Networks
85 * https://specification-search.cablelabs.com/business-services-over-docsis-layer-2-virtual-private-networks
86 * CableHome(TM) 1.1 Specification
87 * https://web.archive.org/web/20060628173459/http://www.cablelabs.com/projects/cablehome/downloads/specs/CH-SP-CH1.1-I11-060407.pdf
88 * Broadband Forum TR-111
89 * https://web.archive.org/web/20150307135117/http://www.broadband-forum.org/technical/download/TR-111.pdf
90 * Boot Server Discovery Protocol (BSDP)
91 * https://opensource.apple.com/source/bootp/bootp-198.1/Documentation/BSDP.doc
92 * [MS-DHCPE] DHCPv4 Option Code 77 (0x4D) - User Class Option
93 * https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-dhcpe/fe8a2dd4-1e8c-4546-bacd-4ae10de02058
95 * * Copyright 2023, Colin McInnes <colin.mcinnes [AT] vecima.com>
96 * Added additional CableLabs Vendor Class IDs (Option 60) to CableLabs heuristic from:
97 * Remote PHY Specification
98 * https://www.cablelabs.com/specifications/CM-SP-R-PHY
99 * Flexible MAC Architecture System Specification
100 * https://www.cablelabs.com/specifications/CM-SP-FMA-SYS
101 * Data-Over-Cable Service Interface Specifications, eDOCSIS Specification
102 * https://www.cablelabs.com/specifications/CM-SP-eDOCSIS
103 * Data-Over-Cable Service Interface Specifications, IPv4 and IPv6 eRouter Specification
104 * https://www.cablelabs.com/specifications/CM-SP-eRouter
105 * OpenCable Tuning Resolver Interface Specification
106 * https://www.cablelabs.com/specifications/OC-SP-TRIF
107 * DPoE Demarcation Device Specification
108 * https://www.cablelabs.com/specifications/DPoE-SP-DEMARCv1.0
110 * Wireshark - Network traffic analyzer
111 * By Gerald Combs <gerald@wireshark.org>
112 * Copyright 1998 Gerald Combs
114 * SPDX-License-Identifier: GPL-2.0-or-later
118 * Some of the development of the DHCP/BOOTP protocol decoder was sponsored by
119 * Cable Television Laboratories, Inc. ("CableLabs") based upon proprietary
120 * CableLabs' specifications. Your license and use of this protocol decoder
121 * does not mean that you are licensed to use the CableLabs'
122 * specifications. If you have questions about this protocol, contact
123 * jf.mule [AT] cablelabs.com or c.stuart [AT] cablelabs.com for additional
130 #include <stdio.h> /* for sscanf() */
132 #include <epan/packet.h>
133 #include "packet-arp.h"
134 #include "packet-dns.h" /* for get_dns_name() */
135 #include <epan/addr_resolv.h>
136 #include <epan/prefs.h>
137 #include <epan/tap.h>
138 #include <epan/stat_tap_ui.h>
139 #include <epan/arptypes.h>
140 #include <epan/expert.h>
141 #include <epan/uat.h>
142 #include <epan/sminmpec.h>
143 #include <epan/tfs.h>
144 #include <wsutil/str_util.h>
145 #include <wsutil/strtoi.h>
146 #include <wsutil/array.h>
148 void proto_register_dhcp(void);
149 void proto_reg_handoff_dhcp(void);
151 static int dhcp_bootp_tap
;
152 static int proto_dhcp
;
153 static int hf_dhcp_type
;
154 static int hf_dhcp_hw_type
;
155 static int hf_dhcp_hw_len
;
156 static int hf_dhcp_hops
;
157 static int hf_dhcp_id
;
158 static int hf_dhcp_secs
;
159 static int hf_dhcp_flags
;
160 static int hf_dhcp_flags_broadcast
;
161 static int hf_dhcp_flags_reserved
;
162 static int hf_dhcp_ip_client
;
163 static int hf_dhcp_ip_your
;
164 static int hf_dhcp_ip_server
;
165 static int hf_dhcp_ip_relay
;
166 static int hf_dhcp_hw_addr
;
167 static int hf_dhcp_hw_addr_padding
;
168 static int hf_dhcp_hw_ether_addr
;
169 static int hf_dhcp_server
;
170 static int hf_dhcp_file
;
171 static int hf_dhcp_cookie
;
172 static int hf_dhcp_vendor_specific_options
;
173 static int hf_dhcp_bootp
;
174 static int hf_dhcp_fqdn_flags
;
175 static int hf_dhcp_fqdn_s
;
176 static int hf_dhcp_fqdn_o
;
177 static int hf_dhcp_fqdn_e
;
178 static int hf_dhcp_fqdn_n
;
179 static int hf_dhcp_fqdn_mbz
;
180 static int hf_dhcp_fqdn_rcode1
;
181 static int hf_dhcp_fqdn_rcode2
;
182 static int hf_dhcp_fqdn_name
;
183 static int hf_dhcp_fqdn_asciiname
;
184 static int hf_dhcp_pkt_mta_cap_len
;
185 static int hf_dhcp_pkt_mta_cap_type
;
186 static int hf_dhcp_docsis_cm_cap_type
;
187 static int hf_dhcp_docsis_cm_cap_len
;
188 static int hf_dhcp_client_identifier_uuid
;
189 static int hf_dhcp_client_id_iaid
;
190 static int hf_dhcp_client_id_duid_type
;
191 static int hf_dhcp_client_hardware_address
;
192 static int hf_dhcp_client_identifier_duid_llt_hw_type
;
193 static int hf_dhcp_client_identifier_duid_ll_hw_type
;
194 static int hf_dhcp_client_identifier_time
;
195 static int hf_dhcp_client_identifier_link_layer_address
;
196 static int hf_dhcp_client_identifier_link_layer_address_ether
;
197 static int hf_dhcp_client_identifier_enterprise_num
;
198 static int hf_dhcp_client_identifier
;
199 static int hf_dhcp_client_identifier_type
;
200 static int hf_dhcp_client_identifier_undef
;
201 static int hf_dhcp_option_type
;
202 static int hf_dhcp_option_length
;
203 static int hf_dhcp_option_value
;
204 static int hf_dhcp_option_value_8
;
205 static int hf_dhcp_option_value_16
;
206 static int hf_dhcp_option_value_u32
;
207 static int hf_dhcp_option_value_s_secs
;
208 static int hf_dhcp_option_value_u_secs
;
209 static int hf_dhcp_option_value_stringz
;
210 static int hf_dhcp_option_value_ip_address
;
211 static int hf_dhcp_option_value_boolean
;
212 static int hf_dhcp_option_rfc_3396_detected
;
213 static int hf_dhcp_suboption_length
;
215 static int hf_dhcp_option_padding
; /* 0 */
216 static int hf_dhcp_option_subnet_mask
; /* 1 */
217 static int hf_dhcp_option_time_offset
; /* 2 */
218 static int hf_dhcp_option_router
; /* 3 */
219 static int hf_dhcp_option_time_server
; /* 4 */
220 static int hf_dhcp_option_name_server
; /* 5 */
221 static int hf_dhcp_option_domain_name_server
; /* 6 */
222 static int hf_dhcp_option_log_server
; /* 7 */
223 static int hf_dhcp_option_quotes_server
; /* 8 */
224 static int hf_dhcp_option_lpr_server
; /* 9 */
225 static int hf_dhcp_option_impress_server
; /* 10 */
226 static int hf_dhcp_option_resource_location_server
; /* 11 */
227 static int hf_dhcp_option_hostname
; /* 12 */
228 static int hf_dhcp_option_boot_file_size
; /* 13 */
229 static int hf_dhcp_option_merit_dump_file
; /* 14 */
230 static int hf_dhcp_option_domain_name
; /* 15 */
231 static int hf_dhcp_option_swap_server
; /* 16 */
232 static int hf_dhcp_option_root_path
; /* 17 */
233 static int hf_dhcp_option_extension_path
; /* 18 */
234 static int hf_dhcp_option_ip_forwarding
; /* 19 */
235 static int hf_dhcp_option_non_local_source_routing
; /* 20 */
236 static int hf_dhcp_option_policy_filter_ip
; /* 21 - IP address */
237 static int hf_dhcp_option_policy_filter_subnet_mask
; /* 21 - Subnet mask */
238 static int hf_dhcp_option_max_datagram_reassembly_size
; /* 22 */
239 static int hf_dhcp_option_default_ip_ttl
; /* 23 */
240 static int hf_dhcp_option_path_mtu_aging_timeout
; /* 24 */
241 static int hf_dhcp_option_path_mtu_plateau_table_item
; /* 25 */
242 static int hf_dhcp_option_interface_mtu
; /* 26 */
243 static int hf_dhcp_option_all_subnets_are_local
; /* 27 */
244 static int hf_dhcp_option_broadcast_address
; /* 28 */
245 static int hf_dhcp_option_perform_mask_discovery
; /* 29 */
246 static int hf_dhcp_option_mask_supplier
; /* 30 */
247 static int hf_dhcp_option_perform_router_discover
; /* 31 */
248 static int hf_dhcp_option_router_solicitation_address
; /* 32 */
249 static int hf_dhcp_option_static_route_ip
; /* 33 - Destination IP */
250 static int hf_dhcp_option_static_route_router
; /* 33 - Router */
251 static int hf_dhcp_option_trailer_encapsulation
; /* 34 */
252 static int hf_dhcp_option_arp_cache_timeout
; /* 35 */
253 static int hf_dhcp_option_ethernet_encapsulation
; /* 36 */
254 static int hf_dhcp_option_tcp_default_ttl
; /* 37 */
255 static int hf_dhcp_option_tcp_keepalive_interval
; /* 38 */
256 static int hf_dhcp_option_tcp_keepalive_garbage
; /* 39 */
257 static int hf_dhcp_option_nis_domain
; /* 40 */
258 static int hf_dhcp_option_nis_server
; /* 41 */
259 static int hf_dhcp_option_ntp_server
; /* 42 */
261 static int hf_dhcp_option43_suboption
; /* 43 unknown vendor suboption */
262 static int hf_dhcp_option43_value
; /* 43 suboption value */
263 static int hf_dhcp_option43_value_8
; /* 43 suboption value */
264 static int hf_dhcp_option43_value_32
; /* 43 suboption value */
265 static int hf_dhcp_option43_value_stringz
; /* 43 suboption value */
266 static int hf_dhcp_option43_value_ip_address
; /* 43 suboption value */
268 static int hf_dhcp_option43_pxeclient_suboption
; /* 43 suboption */
269 static int hf_dhcp_option43_pxeclient_padding
; /* 43:0 PXE */
270 static int hf_dhcp_option43_pxeclient_mtftp_ip
; /* 43:1 PXE */
271 static int hf_dhcp_option43_pxeclient_mtftp_client_port
; /* 43:2 PXE */
272 static int hf_dhcp_option43_pxeclient_mtftp_server_port
; /* 43:3 PXE */
273 static int hf_dhcp_option43_pxeclient_mtftp_timeout
; /* 43:4 PXE */
274 static int hf_dhcp_option43_pxeclient_mtftp_delay
; /* 43:5 PXE */
275 static int hf_dhcp_option43_pxeclient_discovery_control
; /* 43:6 PXE */
276 static int hf_dhcp_option43_pxeclient_discovery_control_bc
; /* 43:6 PXE */
277 static int hf_dhcp_option43_pxeclient_discovery_control_mc
; /* 43:6 PXE */
278 static int hf_dhcp_option43_pxeclient_discovery_control_serverlist
; /* 43:6 PXE */
279 static int hf_dhcp_option43_pxeclient_discovery_control_bstrap
; /* 43:6 PXE */
280 static int hf_dhcp_option43_pxeclient_multicast_address
; /* 43:7 PXE */
281 static int hf_dhcp_option43_pxeclient_boot_servers
; /* 43:8 PXE */
282 static int hf_dhcp_option43_pxeclient_boot_server_type
; /* 43:8 PXE */
283 static int hf_dhcp_option43_pxeclient_boot_server_count
; /* 43:8 PXE */
284 static int hf_dhcp_option43_pxeclient_boot_server_ip
; /* 43:8 PXE */
285 static int hf_dhcp_option43_pxeclient_boot_menu
; /* 43:9 PXE */
286 static int hf_dhcp_option43_pxeclient_boot_menu_type
; /* 43:9 PXE */
287 static int hf_dhcp_option43_pxeclient_boot_menu_length
; /* 43:9 PXE */
288 static int hf_dhcp_option43_pxeclient_boot_menu_desc
; /* 43:9 PXE */
289 static int hf_dhcp_option43_pxeclient_menu_prompt
; /* 43:10 PXE */
290 static int hf_dhcp_option43_pxeclient_menu_prompt_timeout
; /* 43:10 PXE */
291 static int hf_dhcp_option43_pxeclient_menu_prompt_prompt
; /* 43:10 PXE */
292 static int hf_dhcp_option43_pxeclient_multicast_address_alloc
; /* 43:11 PXE */
293 static int hf_dhcp_option43_pxeclient_credential_types
; /* 43:12 PXE */
294 static int hf_dhcp_option43_pxeclient_boot_item
; /* 43:71 PXE */
295 static int hf_dhcp_option43_pxeclient_boot_item_type
; /* 43:71 PXE */
296 static int hf_dhcp_option43_pxeclient_boot_item_layer
; /* 43:71 PXE */
297 static int hf_dhcp_option43_pxeclient_lcm_server
; /* 43:179 PXE */
298 static int hf_dhcp_option43_pxeclient_lcm_domain
; /* 43:180 PXE */
299 static int hf_dhcp_option43_pxeclient_lcm_nic_option
; /* 43:181 PXE */
300 static int hf_dhcp_option43_pxeclient_lcm_workgroup
; /* 43:190 PXE */
301 static int hf_dhcp_option43_pxeclient_discovery
; /* 43:191 PXE */
302 static int hf_dhcp_option43_pxeclient_configured
; /* 43:192 PXE */
303 static int hf_dhcp_option43_pxeclient_lcm_version
; /* 43:193 PXE */
304 static int hf_dhcp_option43_pxeclient_lcm_serial
; /* 43:194 PXE */
305 static int hf_dhcp_option43_pxeclient_end
; /* 43:255 PXE */
307 static int hf_dhcp_option43_cl_suboption
; /* 43 suboption */
308 static int hf_dhcp_option43_cl_padding
; /* 43:0 CL */
309 static int hf_dhcp_option43_cl_suboption_request_list
; /* 43:1 CL */
310 static int hf_dhcp_option43_cl_device_type
; /* 43:2 CL */
311 static int hf_dhcp_option43_cl_esafe_type
; /* 43:3 CL */
312 static int hf_dhcp_option43_cl_serial_number
; /* 43:4 CL */
313 static int hf_dhcp_option43_cl_hardware_version
; /* 43:5 CL */
314 static int hf_dhcp_option43_cl_software_version
; /* 43:6 CL */
315 static int hf_dhcp_option43_cl_boot_rom_version
; /* 43:7 CL */
316 static int hf_dhcp_option43_cl_oui_bytes
; /* 43:8 CL */
317 static int hf_dhcp_option43_cl_oui_string
; /* 43:8 CL */
318 static int hf_dhcp_option43_cl_model_number
; /* 43:9 CL */
319 static int hf_dhcp_option43_cl_vendor_name10
; /* 43:10 CL */
320 static int hf_dhcp_option43_cl_address_realm
; /* 43:11 CL */
321 static int hf_dhcp_option43_cl_cm_ps_system_desc
; /* 43:12 CL */
322 static int hf_dhcp_option43_cl_cm_ps_firmware_revision
; /* 43:13 CL */
323 static int hf_dhcp_option43_cl_firewall_policy_file_version
; /* 43:14 CL */
324 static int hf_dhcp_option43_cl_esafe_config_file_devices
; /* 43:15 CL */
325 static int hf_dhcp_option43_cl_video_security_tape
; /* 43:18 CL */
326 static int hf_dhcp_option43_cl_mta_mac_address
; /* 43:31 CL */
327 static int hf_dhcp_option43_cl_correlation_ID
; /* 43:32 CL */
328 static int hf_dhcp_option43_cl_vendor_name51
; /* 43:51 CL */
329 static int hf_dhcp_option43_cl_cablecard_capability
; /* 43:52 CL */
330 static int hf_dhcp_option43_cl_device_id_ca
; /* 43:53 CL */
331 static int hf_dhcp_option43_cl_device_id_x509
; /* 43:54 CL */
332 static int hf_dhcp_option43_cl_end
; /* 43:255 CL */
334 static int hf_dhcp_option43_aerohive_suboption
; /* 43 suboption */
335 static int hf_dhcp_option43_aerohive_unknown
; /* 43:X AEROHIVE */
336 static int hf_dhcp_option43_aerohive_xiqhostname
; /* 43:225 AEROHIVE */
337 static int hf_dhcp_option43_aerohive_xiqipaddress
; /* 43:226 AEROHIVE */
339 static int hf_dhcp_option43_bsdp_suboption
; /* 43 suboption */
340 static int hf_dhcp_option43_bsdp_message_type
; /* 43:1 BSDP */
341 static int hf_dhcp_option43_bsdp_version
; /* 43:2 BSDP */
342 static int hf_dhcp_option43_bsdp_server_identifier
; /* 43:3 BSDP */
343 static int hf_dhcp_option43_bsdp_server_priority
; /* 43:4 BSDP */
344 static int hf_dhcp_option43_bsdp_reply_port
; /* 43:5 BSDP */
345 static int hf_dhcp_option43_bsdp_boot_image_list_path
; /* 43:6 BSDP */
346 static int hf_dhcp_option43_bsdp_default_boot_image_id
; /* 43:7 BSDP */
347 static int hf_dhcp_option43_bsdp_selected_boot_image_id
; /* 43:8 BSDP */
348 static int hf_dhcp_option43_bsdp_boot_image_list
; /* 43:9 BSDP */
349 static int hf_dhcp_option43_bsdp_netboot_firmware
; /* 43:10 BSDP */
350 static int hf_dhcp_option43_bsdp_attributes_filter_list
; /* 43:11 BSDP */
351 static int hf_dhcp_option43_bsdp_message_size
; /* 43:12 BSDP */
352 static int hf_dhcp_option43_bsdp_boot_image_index
; /* 43 BSDP */
353 static int hf_dhcp_option43_bsdp_boot_image_attribute
; /* 43 BSDP */
354 static int hf_dhcp_option43_bsdp_boot_image_attribute_install
; /* 43 BSDP */
355 static int hf_dhcp_option43_bsdp_boot_image_attribute_kind
; /* 43 BSDP */
356 static int hf_dhcp_option43_bsdp_boot_image_attribute_reserved
; /* 43 BSDP */
357 static int hf_dhcp_option43_bsdp_image_desc
; /* 43 BSDP */
358 static int hf_dhcp_option43_bsdp_boot_image_name
; /* 43 BSDP */
359 static int hf_dhcp_option43_bsdp_boot_image_name_len
; /* 43 BSDP */
361 static int hf_dhcp_option43_cisco_suboption
; /* 43 Cisco */
362 static int hf_dhcp_option43_cisco_unknown
; /* 43 Cisco */
363 static int hf_dhcp_option43_cisco_unknown1
; /* 43:1 Cisco */
364 static int hf_dhcp_option43_cisco_unknown2
; /* 43:2 Cisco */
365 static int hf_dhcp_option43_cisco_unknown3
; /* 43:3 Cisco */
366 static int hf_dhcp_option43_cisco_nodeid
; /* 43:4 Cisco */
367 static int hf_dhcp_option43_cisco_unknown5
; /* 43:5 Cisco */
368 static int hf_dhcp_option43_cisco_unknown6
; /* 43:6 Cisco */
369 static int hf_dhcp_option43_cisco_model
; /* 43:7 Cisco */
370 static int hf_dhcp_option43_cisco_apicuuid
; /* 43:8 Cisco */
371 static int hf_dhcp_option43_cisco_fabricname
; /* 43:9 Cisco */
372 static int hf_dhcp_option43_cisco_unknown10
; /* 43:10 Cisco */
373 static int hf_dhcp_option43_cisco_serialno
; /* 43:11 Cisco */
374 static int hf_dhcp_option43_cisco_clientint
; /* 43:12 Cisco */
376 static int hf_dhcp_option43_alcatel_suboption
; /* 43 suboption */
377 static int hf_dhcp_option43_alcatel_padding
; /* 43:0 Alcatel */
378 static int hf_dhcp_option43_alcatel_vlan_id
; /* 43:58 Alcatel */
379 static int hf_dhcp_option43_alcatel_tftp1
; /* 43:64 Alcatel */
380 static int hf_dhcp_option43_alcatel_tftp2
; /* 43:65 Alcatel */
381 static int hf_dhcp_option43_alcatel_app_type
; /* 43:66 Alcatel */
382 static int hf_dhcp_option43_alcatel_sip_url
; /* 43:67 Alcatel */
383 static int hf_dhcp_option43_alcatel_end
; /* 43:255 Alcatel */
385 static int hf_dhcp_option43_arubaap_controllerip
; /* 43: ArubaAP*/
386 static int hf_dhcp_option43_arubaiap
; /* 43: ArubaIAP*/
387 static int hf_dhcp_option43_arubaiap_nameorg
; /* 43: ArubaIAP: Name Organisation*/
388 static int hf_dhcp_option43_arubaiap_ampip
; /* 43: ArubaIAP: AMP IP Address*/
389 static int hf_dhcp_option43_arubaiap_password
; /* 43 :ArubaIAP: Password*/
391 static int hf_dhcp_option_netbios_over_tcpip_name_server
; /* 44 */
392 static int hf_dhcp_option_netbios_over_tcpip_dd_name_server
; /* 45 */
393 static int hf_dhcp_option_netbios_over_tcpip_node_type
; /* 46 */
394 static int hf_dhcp_option_netbios_over_tcpip_scope
; /* 47 */
395 static int hf_dhcp_option_xwindows_system_font_server
; /* 48 */
396 static int hf_dhcp_option_xwindows_system_display_manager
; /* 49 */
397 static int hf_dhcp_option_requested_ip_address
; /* 50 */
398 static int hf_dhcp_option_ip_address_lease_time
; /* 51 */
399 static int hf_dhcp_option_option_overload
; /* 52 */
400 static int hf_dhcp_option_dhcp
; /* 53 */
401 static int hf_dhcp_option_dhcp_server_id
; /* 54 */
402 static int hf_dhcp_option_parameter_request_list_item
; /* 55 */
403 static int hf_dhcp_option_message
; /* 56 */
404 static int hf_dhcp_option_dhcp_max_message_size
; /* 57 */
405 static int hf_dhcp_option_renewal_time_value
; /* 58 */
406 static int hf_dhcp_option_rebinding_time_value
; /* 59 */
407 static int hf_dhcp_option_vendor_class_id
; /* 60 */
408 static int hf_dhcp_option_vendor_class_data
; /* 60 */
410 static int hf_dhcp_option_novell_netware_ip_domain
; /* 62 */
412 static int hf_dhcp_option63_suboption
; /* 63 suboption */
413 static int hf_dhcp_option63_value
; /* 63 suboption value */
414 static int hf_dhcp_option63_value_8
; /* 63 suboption value */
415 static int hf_dhcp_option63_value_ip_address
; /* 63 suboption value */
416 static int hf_dhcp_option63_value_boolean
; /* 63 suboption value */
417 static int hf_dhcp_option63_broadcast
; /* 63:5 */
418 static int hf_dhcp_option63_preferred_dss_server
; /* 63:6 */
419 static int hf_dhcp_option63_nearest_nwip_server
; /* 63:7 */
420 static int hf_dhcp_option63_autoretries
; /* 63:8 */
421 static int hf_dhcp_option63_autoretry_delay
; /* 63:9 */
422 static int hf_dhcp_option63_support_netware_v1_1
; /* 63:10 */
423 static int hf_dhcp_option63_primary_dss
; /* 63:11 */
425 static int hf_dhcp_option_nis_plus_domain
; /* 64 */
426 static int hf_dhcp_option_nis_plus_server
; /* 65 */
427 static int hf_dhcp_option_tftp_server_name
; /* 66 */
428 static int hf_dhcp_option_bootfile_name
; /* 67 */
429 static int hf_dhcp_option_mobile_ip_home_agent
; /* 68 */
430 static int hf_dhcp_option_smtp_server
; /* 69 */
431 static int hf_dhcp_option_pop3_server
; /* 70 */
432 static int hf_dhcp_option_nntp_server
; /* 71 */
433 static int hf_dhcp_option_default_www_server
; /* 72 */
434 static int hf_dhcp_option_default_finger_server
; /* 73 */
435 static int hf_dhcp_option_default_irc_server
; /* 74 */
436 static int hf_dhcp_option_streettalk_server
; /* 75 */
437 static int hf_dhcp_option_streettalk_da_server
; /* 76 */
438 static int hf_dhcp_option77_user_class
; /* 77 User Class instance */
439 static int hf_dhcp_option77_user_class_length
; /* 77 length of User Class instance */
440 static int hf_dhcp_option77_user_class_data
; /* 77 data of User Class instance */
441 static int hf_dhcp_option77_user_class_text
; /* 77 User class text */
442 static int hf_dhcp_option77_user_class_binary_data_length
; /* 77, Microsoft */
443 static int hf_dhcp_option77_user_class_binary_data
; /* 77, Microsoft */
444 static int hf_dhcp_option77_user_class_padding
; /* 77, Microsoft */
445 static int hf_dhcp_option77_user_class_name_length
; /* 77, Microsoft */
446 static int hf_dhcp_option77_user_class_name
; /* 77, Microsoft */
447 static int hf_dhcp_option77_user_class_description_length
; /* 77, Microsoft */
448 static int hf_dhcp_option77_user_class_description
; /* 77, Microsoft */
449 static int hf_dhcp_option_slp_directory_agent_value
; /* 78 */
450 static int hf_dhcp_option_slp_directory_agent_slpda_address
; /* 78 */
451 static int hf_dhcp_option_slp_service_scope_value
; /* 79 */
452 static int hf_dhcp_option_slp_service_scope_string
; /* 79 */
454 static int hf_dhcp_option82_suboption
; /* 82 suboption */
455 static int hf_dhcp_option82_value
; /* 82 suboption value */
456 static int hf_dhcp_option82_value_8
; /* 82 suboption value */
457 static int hf_dhcp_option82_value_16
; /* 82 suboption value */
458 static int hf_dhcp_option82_value_32
; /* 82 suboption value */
459 static int hf_dhcp_option82_value_ip_address
; /* 82 suboption value */
460 static int hf_dhcp_option82_value_stringz
; /* 82 suboption value */
461 static int hf_dhcp_option82_padding
; /* 82:0 */
462 static int hf_dhcp_option82_agent_circuit_id
; /* 82:1 */
463 static int hf_dhcp_option82_agent_remote_id
; /* 82:2 */
464 static int hf_dhcp_option82_reserved
; /* 82:3 */
465 static int hf_dhcp_option82_docsis_device_class
; /* 82:4 */
466 static int hf_dhcp_option82_link_selection
; /* 82:5 */
467 static int hf_dhcp_option82_subscriber_id
; /* 82:6 */
468 static int hf_dhcp_option82_radius_attributes
; /* 82:7 */
469 static int hf_dhcp_option82_authentication
; /* 82:8 */
470 static int hf_dhcp_option82_vi
; /* 82:9 */
471 /* 82:9 suboptions */
472 static int hf_dhcp_option82_vi_enterprise
;
473 static int hf_dhcp_option82_vi_data_length
;
474 static int hf_dhcp_option82_vi_cl_option
;
475 static int hf_dhcp_option82_vi_cl_option_length
;
476 static int hf_dhcp_option82_vi_cl_tag
;
477 static int hf_dhcp_option82_vi_cl_tag_length
;
478 static int hf_dhcp_option82_vi_cl_docsis_version
; /* 82:9:4491:1 */
479 static int hf_dhcp_option82_vi_cl_dpoe_system_version
; /* 82:9:4491:2 */
480 static int hf_dhcp_option82_vi_cl_dpoe_system_pbb_service
; /* 82:9:4491:4 */
481 static int hf_dhcp_option82_vi_cl_service_class_name
; /* 82:9:4491:5 */
482 static int hf_dhcp_option82_vi_cl_mso_defined_text
; /* 82:9:4491:6 */
483 static int hf_dhcp_option82_vi_cl_secure_file_transfer_uri
; /* 82:9:4491:7 */
484 /* 82:9 suboptions end */
485 static int hf_dhcp_option82_flags
; /* 82:10 */
486 static int hf_dhcp_option82_server_id_override
; /* 82:11 */
487 static int hf_dhcp_option82_relay_agent_id
; /* 82:12 */
488 static int hf_dhcp_option82_option_ani_att
; /* 82:13 */
489 static int hf_dhcp_option82_option_ani_att_res
;
490 static int hf_dhcp_option82_option_ani_att_att
;
491 static int hf_dhcp_option82_option_ani_network_name
; /* 82:14 */
492 static int hf_dhcp_option82_option_ani_ap_name
; /* 82:15 */
493 static int hf_dhcp_option82_option_ani_ap_bssid
; /* 82:16 */
494 static int hf_dhcp_option82_option_ani_operator_id
; /* 82:17 */
495 static int hf_dhcp_option82_option_ani_operator_realm
; /* 82:18 */
496 static int hf_dhcp_option82_option_source_port
; /* 82:19 */
497 static int hf_dhcp_option82_link_selection_cisco
; /* 82:150 */
498 static int hf_dhcp_option82_vrf_name_vpn_id
; /* 82:151 */
499 /* 82:151 suboptions */
500 static int hf_dhcp_option82_vrf_name_global
;
501 static int hf_dhcp_option82_vrf_name
;
502 static int hf_dhcp_option82_vrf_name_vpn_id_oui
;
503 static int hf_dhcp_option82_vrf_name_vpn_id_index
;
504 /* 82:151 suboptions end */
505 static int hf_dhcp_option82_server_id_override_cisco
; /* 82:152 */
507 static int hf_dhcp_option_isns_functions
;
508 static int hf_dhcp_option_isns_functions_enabled
;
509 static int hf_dhcp_option_isns_functions_dd_authorization
;
510 static int hf_dhcp_option_isns_functions_sec_policy_distibution
;
511 static int hf_dhcp_option_isns_functions_reserved
;
513 static int hf_dhcp_option_isns_discovery_domain_access
;
514 static int hf_dhcp_option_isns_discovery_domain_access_enabled
;
515 static int hf_dhcp_option_isns_discovery_domain_access_control_node
;
516 static int hf_dhcp_option_isns_discovery_domain_access_iscsi_target
;
517 static int hf_dhcp_option_isns_discovery_domain_access_iscsi_inititator
;
518 static int hf_dhcp_option_isns_discovery_domain_access_ifcp_target_port
;
519 static int hf_dhcp_option_isns_discovery_domain_access_ifcp_initiator_port
;
520 static int hf_dhcp_option_isns_discovery_domain_access_reserved
;
522 static int hf_dhcp_option_isns_administrative_flags
;
523 static int hf_dhcp_option_isns_administrative_flags_enabled
;
524 static int hf_dhcp_option_isns_administrative_flags_heartbeat
;
525 static int hf_dhcp_option_isns_administrative_flags_management_scns
;
526 static int hf_dhcp_option_isns_administrative_flags_default_dd
;
527 static int hf_dhcp_option_isns_administrative_flags_reserved
;
529 static int hf_dhcp_option_isns_server_security_bitmap
;
530 static int hf_dhcp_option_isns_server_security_bitmap_enabled
;
531 static int hf_dhcp_option_isns_server_security_bitmap_ike_ipsec_enabled
;
532 static int hf_dhcp_option_isns_server_security_bitmap_main_mode
;
533 static int hf_dhcp_option_isns_server_security_bitmap_aggressive_mode
;
534 static int hf_dhcp_option_isns_server_security_bitmap_pfs
;
535 static int hf_dhcp_option_isns_server_security_bitmap_transport_mode
;
536 static int hf_dhcp_option_isns_server_security_bitmap_tunnel_mode
;
537 static int hf_dhcp_option_isns_server_security_bitmap_reserved
;
539 static int hf_dhcp_option_isns_heartbeat_originator_addr
;
540 static int hf_dhcp_option_isns_primary_server_addr
;
541 static int hf_dhcp_option_isns_secondary_server_addr_list
;
543 static int hf_dhcp_option_novell_dss_string
; /* 85 */
544 static int hf_dhcp_option_novell_dss_ip
; /* 85 */
545 static int hf_dhcp_option_novell_ds_tree_name
; /* 86 */
546 static int hf_dhcp_option_novell_ds_context
; /* 87 */
547 static int hf_dhcp_option_dhcp_authentication_protocol
; /* 90 */
548 static int hf_dhcp_option_dhcp_authentication_alg_delay
; /* 90 */
549 static int hf_dhcp_option_dhcp_authentication_algorithm
; /* 90 */
550 static int hf_dhcp_option_dhcp_authentication_rdm
; /* 90 */
551 static int hf_dhcp_option_dhcp_authentication_rdm_replay_detection
; /* 90 */
552 static int hf_dhcp_option_dhcp_authentication_rdm_rdv
; /* 90 */
553 static int hf_dhcp_option_dhcp_authentication_secret_id
; /* 90 */
554 static int hf_dhcp_option_dhcp_authentication_hmac_md5_hash
; /* 90 */
555 static int hf_dhcp_option_dhcp_authentication_information
; /* 90 */
556 static int hf_dhcp_option_client_last_transaction_time
; /* 91 */
557 static int hf_dhcp_option_associated_ip_option
; /* 92 */
558 static int hf_dhcp_option_client_system_architecture
; /* 93 */
559 static int hf_dhcp_option_client_network_id_major_ver
; /* 94 */
560 static int hf_dhcp_option_client_network_id_minor_ver
; /* 94 */
561 static int hf_dhcp_option_civic_location_what
; /* 99 */
562 static int hf_dhcp_option_civic_location_country
; /* 99 */
563 static int hf_dhcp_option_civic_location_ca_type
; /* 99 */
564 static int hf_dhcp_option_civic_location_ca_length
; /* 99 */
565 static int hf_dhcp_option_civic_location_ca_value
; /* 99 */
566 static int hf_dhcp_option_tz_pcode
; /* 100 */
567 static int hf_dhcp_option_tz_tcode
; /* 101 */
568 static int hf_dhcp_option_ipv6_only_preferred_wait_time
; /* 108 */
569 static int hf_dhcp_option_netinfo_parent_server_address
; /* 112 */
570 static int hf_dhcp_option_netinfo_parent_server_tag
; /* 113 */
571 static int hf_dhcp_option_captive_portal
; /* 114 (ex 160) */
572 static int hf_dhcp_option_dhcp_auto_configuration
; /* 116 */
573 static int hf_dhcp_option_dhcp_name_service_search_option
; /* 117 */
574 static int hf_dhcp_option_dhcp_dns_domain_search_list_fqdn
; /* 119 */
575 static int hf_dhcp_option_sip_server_enc
; /* 120 */
576 static int hf_dhcp_option_sip_server_name
; /* 120 */
577 static int hf_dhcp_option_sip_server_address
; /* 120 */
578 static int hf_dhcp_option_classless_static_route
; /* 120 */
579 static int hf_dhcp_option_rfc3825_error
; /* 123 */
580 static int hf_dhcp_option_rfc3825_latitude
; /* 123 */
581 static int hf_dhcp_option_rfc3825_longitude
; /* 123 */
582 static int hf_dhcp_option_rfc3825_latitude_res
; /* 123 */
583 static int hf_dhcp_option_rfc3825_longitude_res
; /* 123 */
584 static int hf_dhcp_option_rfc3825_altitude
; /* 123 */
585 static int hf_dhcp_option_rfc3825_altitude_res
; /* 123 */
586 static int hf_dhcp_option_rfc3825_altitude_type
; /* 123 */
587 static int hf_dhcp_option_rfc3825_map_datum
; /* 123 */
588 static int hf_dhcp_option_cl_dss_id_option
; /* 123 CL */
589 static int hf_dhcp_option_cl_dss_id_len
; /* 123 CL */
590 static int hf_dhcp_option_cl_dss_id
; /* 123 CL */
591 static int hf_dhcp_option_vi_class_cl_address_mode
; /* 124 */
592 static int hf_dhcp_option_vi_class_enterprise
; /* 124 */
593 static int hf_dhcp_option_vi_class_data_length
; /* 124 */
594 static int hf_dhcp_option_vi_class_data_item_length
; /* 124 */
595 static int hf_dhcp_option_vi_class_data_item_data
; /* 124 */
597 static int hf_dhcp_option125_enterprise
;
598 static int hf_dhcp_option125_length
;
599 static int hf_dhcp_option125_value
; /* 125 suboption value */
600 static int hf_dhcp_option125_value_8
; /* 125 suboption value */
601 static int hf_dhcp_option125_value_16
; /* 125 suboption value */
602 static int hf_dhcp_option125_value_ip_address
; /* 125 suboption value */
603 static int hf_dhcp_option125_value_stringz
; /* 125 suboption value */
604 static int hf_dhcp_option125_tr111_suboption
; /* 125 suboption */
605 static int hf_dhcp_option125_tr111_device_manufacturer_oui
; /* 125:TR-111 1 */
606 static int hf_dhcp_option125_tr111_device_serial_number
; /* 125:TR-111 2 */
607 static int hf_dhcp_option125_tr111_device_product_class
; /* 125:TR-111 3 */
608 static int hf_dhcp_option125_tr111_gateway_manufacturer_oui
; /* 125:TR-111 4 */
609 static int hf_dhcp_option125_tr111_gateway_serial_number
; /* 125:TR-111 5 */
610 static int hf_dhcp_option125_tr111_gateway_product_class
; /* 125:TR-111 6 */
611 static int hf_dhcp_option125_cl_suboption
; /* 125 suboption */
612 static int hf_dhcp_option125_cl_option_request
; /* 125:CL 1 */
613 static int hf_dhcp_option125_cl_tftp_server_addresses
; /* 125:CL 2 */
614 static int hf_dhcp_option125_cl_erouter_container_option
; /* 125:CL 3 */
615 static int hf_dhcp_option125_cl_mib_environment_indicator_option
; /* 125:CL 4 */
616 static int hf_dhcp_option125_cl_modem_capabilities
; /* 125:CL 5 */
618 static int hf_dhcp_option_subnet_selection_option
; /* 118 */
619 static int hf_dhcp_option_pana_agent
; /* 136 */
620 static int hf_dhcp_option_lost_server_domain_name
; /* 137 */
621 static int hf_dhcp_option_capwap_access_controller
; /* 138 */
622 static int hf_dhcp_option_andsf_server
; /* 142 */
623 static int hf_dhcp_option_forcerenew_nonce_algo
; /* 145 */
624 static int hf_dhcp_option_rdnss_reserved
; /* 146 */
625 static int hf_dhcp_option_rdnss_pref
; /* 146 */
626 static int hf_dhcp_option_rdnss_prim_dns_server
; /* 146 */
627 static int hf_dhcp_option_rdnss_sec_dns_server
; /* 146 */
628 static int hf_dhcp_option_rdnss_domain
; /* 146 */
629 static int hf_dhcp_option_dots_ri
; /* 147 */
630 static int hf_dhcp_option_dots_address
; /* 148 */
631 static int hf_dhcp_option_tftp_server_address
; /* 150 */
632 static int hf_dhcp_option_bulk_lease_status_code
; /* 151 */
633 static int hf_dhcp_option_bulk_lease_status_message
; /* 151 */
634 static int hf_dhcp_option_bulk_lease_base_time
; /* 152 */
635 static int hf_dhcp_option_bulk_lease_start_time_of_state
; /* 153 */
636 static int hf_dhcp_option_bulk_lease_query_start
; /* 154 */
637 static int hf_dhcp_option_bulk_lease_query_end
; /* 155 */
638 static int hf_dhcp_option_bulk_lease_dhcp_state
; /* 156 */
639 static int hf_dhcp_option_bulk_lease_data_source
; /* 157 */
640 static int hf_dhcp_option_pcp_list_length
; /* 158 */
641 static int hf_dhcp_option_pcp_server
; /* 158 */
642 static int hf_dhcp_option_portparams_offset
; /* 159 */
643 static int hf_dhcp_option_portparams_psid_length
; /* 159 */
644 static int hf_dhcp_option_portparams_psid
; /* 159 */
645 static int hf_dhcp_option_mudurl
; /* 161 */
646 static int hf_dhcp_option_pxe_config_file
; /* 209 */
647 static int hf_dhcp_option_pxe_path_prefix
; /* 210 */
648 static int hf_dhcp_option_pxe_reboot_time
; /* 211 */
649 static int hf_dhcp_option_6RD_ipv4_mask_len
; /* 212 */
650 static int hf_dhcp_option_6RD_prefix_len
; /* 212 */
651 static int hf_dhcp_option_6RD_prefix
; /* 212 */
652 static int hf_dhcp_option_6RD_border_relay_ip
; /* 212 */
653 static int hf_dhcp_option242_avaya
; /* 242 */
654 static int hf_dhcp_option242_avaya_tlssrvr
; /* 242 */
655 static int hf_dhcp_option242_avaya_httpsrvr
; /* 242 */
656 static int hf_dhcp_option242_avaya_httpdir
; /* 242 */
657 static int hf_dhcp_option242_avaya_static
; /* 242 */
658 static int hf_dhcp_option242_avaya_mcipadd
; /* 242 */
659 static int hf_dhcp_option242_avaya_dot1x
; /* 242 */
660 static int hf_dhcp_option242_avaya_icmpdu
; /* 242 */
661 static int hf_dhcp_option242_avaya_icmpred
; /* 242 */
662 static int hf_dhcp_option242_avaya_l2q
; /* 242 */
663 static int hf_dhcp_option242_avaya_l2qvlan
; /* 242 */
664 static int hf_dhcp_option242_avaya_loglocal
; /* 242 */
665 static int hf_dhcp_option242_avaya_phy1stat
; /* 242 */
666 static int hf_dhcp_option242_avaya_phy2stat
; /* 242 */
667 static int hf_dhcp_option242_avaya_procpswd
; /* 242 */
668 static int hf_dhcp_option242_avaya_procstat
; /* 242 */
669 static int hf_dhcp_option242_avaya_snmpadd
; /* 242 */
670 static int hf_dhcp_option242_avaya_snmpstring
; /* 242 */
671 static int hf_dhcp_option242_avaya_vlantest
; /* 242 */
672 static int hf_dhcp_option_private_proxy_autodiscovery
; /* 252 */
673 static int hf_dhcp_option_end
; /* 255 */
674 static int hf_dhcp_option_end_overload
; /* 255 (with overload)*/
675 static int hf_dhcp_vendor_unknown_suboption
;
676 static int hf_dhcp_suboption_data
;
677 static int hf_dhcp_pc_ietf_ccc_suboption
;
678 static int hf_dhcp_pc_i05_ccc_suboption
;
680 static int hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_nom_timeout
;
681 static int hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_max_timeout
;
682 static int hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_max_retries
;
683 static int hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_nom_timeout
;
684 static int hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_max_timeout
;
685 static int hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_max_retries
;
688 static int ett_dhcp_flags
;
689 static int ett_dhcp_option
;
690 static int ett_dhcp_option43_suboption
;
691 static int ett_dhcp_option43_suboption_discovery
;
692 static int ett_dhcp_option43_suboption_tree
;
693 static int ett_dhcp_option63_suboption
;
694 static int ett_dhcp_option77_instance
;
695 static int ett_dhcp_option82_suboption
;
696 static int ett_dhcp_option82_suboption9
;
697 static int ett_dhcp_option124_vendor_class_data_item
;
698 static int ett_dhcp_option125_suboption
;
699 static int ett_dhcp_option125_tr111_suboption
;
700 static int ett_dhcp_option125_cl_suboption
;
701 static int ett_dhcp_option242_suboption
;
702 static int ett_dhcp_fqdn
;
703 static int ett_dhcp_fqdn_flags
;
704 static int ett_dhcp_filename_option
;
705 static int ett_dhcp_server_hostname
;
706 static int ett_dhcp_isns_functions
;
707 static int ett_dhcp_isns_discovery_domain_access
;
708 static int ett_dhcp_isns_administrative_flags
;
709 static int ett_dhcp_isns_server_security_bitmap
;
710 static int ett_dhcp_isns_secondary_server_addr
;
711 static int ett_dhcp_o43_bsdp_boot_image
;
712 static int ett_dhcp_o43_bsdp_attributes
;
713 static int ett_dhcp_o43_bsdp_image_desc_list
;
714 static int ett_dhcp_o43_bsdp_image_desc
;
715 static int ett_dhcp_o43_bsdp_attributes_flags
;
716 static int ett_dhcp_option158_pcp_list
;
718 static expert_field ei_dhcp_bad_length
;
719 static expert_field ei_dhcp_bad_bitfield
;
720 static expert_field ei_dhcp_missing_subopt_length
;
721 static expert_field ei_dhcp_missing_subopt_value
;
722 static expert_field ei_dhcp_mal_duid
;
723 static expert_field ei_dhcp_rfc3396_refer_last_option
;
724 static expert_field ei_dhcp_opt_overload_wrong_field
;
725 static expert_field ei_dhcp_opt_overload_file_end_missing
;
726 static expert_field ei_dhcp_opt_overload_sname_end_missing
;
727 static expert_field ei_dhcp_subopt_unknown_type
;
728 static expert_field ei_dhcp_option_civic_location_bad_cattype
;
729 static expert_field ei_dhcp_option_dhcp_name_service_invalid
;
730 static expert_field ei_dhcp_option_sip_server_address_encoding
;
731 static expert_field ei_dhcp_option_classless_static_route
;
732 static expert_field ei_dhcp_option125_enterprise_malformed
;
733 static expert_field ei_dhcp_option_6RD_malformed
;
734 static expert_field ei_dhcp_option82_vi_cl_tag_unknown
;
735 static expert_field ei_dhcp_option_parse_err
;
736 static expert_field ei_dhcp_nonstd_option_data
;
737 static expert_field ei_dhcp_suboption_invalid
;
738 static expert_field ei_dhcp_secs_le
;
739 static expert_field ei_dhcp_end_option_missing
;
740 static expert_field ei_dhcp_client_address_not_given
;
741 static expert_field ei_dhcp_server_name_overloaded_by_dhcp
;
742 static expert_field ei_dhcp_boot_filename_overloaded_by_dhcp
;
743 static expert_field ei_dhcp_option_isns_ignored_bitfield
;
744 static expert_field ei_dhcp_option242_avaya_l2qvlan_invalid
;
745 static expert_field ei_dhcp_option242_avaya_vlantest_invalid
;
746 static expert_field ei_dhcp_option93_client_arch_ambiguous
;
748 static dissector_table_t dhcp_option_table
;
749 static dissector_table_t dhcp_enterprise_class_table
;
750 static dissector_table_t dhcp_enterprise_specific_table
;
751 static heur_dissector_list_t dhcp_vendor_id_subdissector
;
752 static heur_dissector_list_t dhcp_vendor_info_subdissector
;
753 static dissector_handle_t dhcp_handle
;
754 static dissector_handle_t dhcpopt_basic_handle
;
756 typedef struct dhcp_option_data
758 unsigned char option
;
760 const char *dhcp_type
;
761 const uint8_t *vendor_class_id
;
762 } dhcp_option_data_t
;
764 #define DHCP_HW_IS_ETHER(hwtype, length) ((hwtype == 1 || hwtype == 6) && length == 6)
766 /* RFC2937 The Name Service Search Option for DHCP */
767 #define RFC2937_LOCAL_NAMING_INFORMATION 0
768 #define RFC2937_DOMAIN_NAME_SERVER_OPTION 6
769 #define RFC2937_NETWORK_INFORMATION_SERVERS_OPTION 41
770 #define RFC2937_NETBIOS_OVER_TCP_IP_NAME_SERVER_OPTION 44
771 #define RFC2937_NETWORK_INFORMATION_SERVICE_PLUS_SERVERS_OPTION 65
773 /* RFC3825decoder error codes of the conversion function */
774 #define RFC3825_NOERROR 0
775 #define RFC3825_LATITUDE_OUTOFRANGE 1
776 #define RFC3825_LATITUDE_UNCERTAINTY_OUTOFRANGE 2
777 #define RFC3825_LONGITUDE_OUTOFRANGE 3
778 #define RFC3825_LONGITUDE_UNCERTAINTY_OUTOFRANGE 4
779 #define RFC3825_ALTITUDE_OUTOFRANGE 5
780 #define RFC3825_ALTITUDE_UNCERTAINTY_OUTOFRANGE 6
781 #define RFC3825_ALTITUDE_TYPE_OUTOFRANGE 7
782 #define RFC3825_DATUM_TYPE_OUTOFRANGE 8
788 struct rfc3825_location_fixpoint_t
{
790 int64_t latitude
; /* latitude in degrees, allowed range from -90deg to 90deg.
791 Fixpoint A(8,25) with 34 bits */
792 uint8_t latitude_res
; /* the resolution of the latitude in bits, allowed range is from 0 to 34.
794 int64_t longitude
; /* longitude in degrees, range from -180deg to 180deg.
795 Fixpoint A(8,25) with 34 bits */
796 uint8_t longitude_res
; /* the resolution of the longitude in bits, allowed range is from 0 to 34.
798 int32_t altitude
; /* the altitude, 30 bits.
799 Depending on alt_type this are meters or floors, no range limit.
800 altitude_type==1: A(13,8) with 22 bits
801 altitude_type==2: A(13,8) with 22 bits */
802 uint8_t altitude_res
; /* the resolution of the altitude in bits, allowed range is from 0 to 30.
804 altitude_type==1: any value between 0 and 30
805 altitude_type==2: either 0 (floor unknown) or 30 */
806 uint8_t altitude_type
; /* the type of the altitude, 4 bits. allowed values are:
808 1: altitude in meters
809 2: altitude in floors */
810 uint8_t datum_type
; /* the map datum used for the coordinates. 8 bits.
811 All values are allowed although currently only the
812 following ones are defined:
818 /* The rfc3825_location_decimal_t structure holds the location parameters
819 * in decimal (floating point) format.
821 struct rfc3825_location_decimal_t
{
823 double latitude
; /* latitude in degrees, allowed range from -90deg to 90deg */
824 double latitude_res
; /* the uncertainty of the latitude in grad, "0.01" means +-0.01deg
825 from the altitude. During conversion this will be rounded to
826 next smaller value which can be represented in fixpoint arithmetic */
827 double longitude
; /* longitude in degrees, range from -180deg to 180deg */
828 double longitude_res
; /* the uncertainty of the longitude in grad, "0.01" means +-0.01deg
829 from the longitude. During conversion this will be rounded to
830 next smaller value which can be represented in fixpoint arithmetic */
831 double altitude
; /* the altitude, depending on alt_type this are meters or floors, no range limit */
832 double altitude_res
; /* the uncertainty of the altitude in either:
833 - altitude-type=meters: "10" means 10 meters which means +-10 meters from the altitude
834 - altitude-type=floors: either 0 (unknown) or 30 (exact) */
835 int altitude_type
; /* the type of the altitude, allowed values are
837 1: altitude in meters
838 2: altitude in floors */
839 int datum_type
; /* the map datum used for the coordinates.
840 All values are allowed although currently only the
841 following ones are defined:
847 /* For managing split options with RFC 3396 */
848 struct rfc3396_for_option_t
{
849 unsigned int total_number_of_block
;
850 unsigned int index_current_block
;
851 tvbuff_t
* tvb_composite
;
859 static void dissect_vendor_avaya_param(proto_tree
*tree
, packet_info
*pinfo
, proto_item
*vti
,
860 tvbuff_t
*tvb
, int optoff
, wmem_strbuf_t
*avaya_param_buf
);
862 /* converts fixpoint presentation into decimal presentation
863 also converts values which are out of range to allow decoding of received data */
864 static int rfc3825_fixpoint_to_decimal(struct rfc3825_location_fixpoint_t
*fixpoint
, struct rfc3825_location_decimal_t
*decimal
);
866 /* decodes the LCI string received from DHCP into the fixpoint values */
867 static void rfc3825_lci_to_fixpoint(const unsigned char lci
[16], struct rfc3825_location_fixpoint_t
*fixpoint
);
870 /* Map Datum Types used for the coordinates (RFC 3825) */
871 static const value_string map_datum_type_values
[] = {
873 { 2, "NAD83 (NAVD88)" },
874 { 3, "NAD83 (MLLW)" },
879 /* Altitude Types used for the coordinates (RFC 3825) */
880 static const value_string altitude_type_values
[] = {
886 /* AutoConfigure (RFC 2563) */
887 static const value_string dhcp_autoconfig
[] = {
888 { 0, "DoNotAutoConfigure"},
889 { 1, "AutoConfigure"},
893 /* Error Types for RFC 3825 coordinate location decoding */
894 static const value_string rfc3825_error_types
[] = {
895 { 1, "Latitude is out of range [-90,90]"},
896 { 2, "Latitude Uncertainty is out of range [0,90]"},
897 { 3, "Longitude is out of range [-180,180]"},
898 { 4, "Longitude Uncertainty is out of range [0,180]"},
899 { 5, "Altitude is out of range [-(2^21),(2^21)-1]"},
900 { 6, "Altitude Uncertainty is out of range [0,2^20]"},
901 { 7, "Altitude Type is out of range [0,2]"},
902 { 8, "Datum is out of range [1,3]"},
908 /* Civic Address What field (RFC 4776) */
909 static const value_string civic_address_what_values
[] = {
910 { 0, "Location of the DHCP server" },
911 { 1, "Location of the network element believed to be closest to the client" },
912 { 2, "Location of the client"},
916 /* Civic Address Type field (RFC 4119, RFC 4776, RFC 5139) */
917 static const value_string civic_address_type_values
[] = {
925 { 16, "PRD (Leading street direction)" },
926 { 17, "POD (Trailing street suffix)" },
927 { 18, "STS (Street suffix)" },
928 { 19, "HNO (House number)" },
929 { 20, "HNS (House number suffix)" },
930 { 21, "LMK (Landmark or vanity address)" },
931 { 22, "LOC (Additional location information)" },
933 { 24, "PC (Postal/ZIP code)" },
934 { 25, "BLD (Building)" },
936 { 27, "FLR (Floor)" },
938 { 29, "PLC (Place-type)" },
939 { 30, "PCN (Postal community name)" },
941 { 32, "ADDCODE (Additional Code)" },
943 { 34, "RD (Primary road or street)" },
944 { 35, "RDSEC (Road section)" },
945 { 36, "RDBR (Road branch)" },
946 { 37, "RDSUBBR (Road sub-branch)" },
947 { 38, "PRM (Road pre-modifier)" },
948 { 39, "POM (Road post-modifier" },
953 static const value_string cablelab_ipaddr_mode_vals
[] = {
959 static const value_string duidtype_vals
[] =
961 { DUID_LLT
, "link-layer address plus time" },
962 { DUID_EN
, "assigned by vendor based on Enterprise number" },
963 { DUID_LL
, "link-layer address" },
967 static const value_string forcerenew_nonce_algo_vals
[] = {
972 static const value_string rdnss_pref_vals
[] = {
980 static const value_string bulk_lease_dhcp_status_code_vals
[] = {
983 { 2, "QueryTerminated" },
984 { 3, "MalformedQuery" },
986 { 5, "DataMissing" },
987 { 6, "ConnectionActive" },
988 { 7, "CatchUpComplete" },
989 { 8, "TLSConnectionRefused" },
993 static const value_string bulk_lease_dhcp_state_vals
[] = {
1001 { 8, "Transitioning" },
1005 static const value_string o43pxeclient_boot_server_types
[] = {
1006 { 0, "PXE bootstrap server" },
1007 { 1, "Microsoft Windows NT Boot Server" },
1008 { 2, "Intel LCM Boot Server" },
1009 { 3, "DOS/UNDI Boot Server" },
1010 { 4, "NEC ESMPRO Boot Server" },
1011 { 5, "IBM WSoD Boot Server" },
1012 { 6, "IBM LCCM Boot Server" },
1013 { 7, "CA Unicenter TNG Boot Server" },
1014 { 8, "HP OpenView Boot Server" },
1015 { 65535, "PXE API Test server" },
1019 static const value_string o43pxeclient_boot_menu_types
[] = {
1020 { 0, "Local boot" },
1024 static bool novell_string
;
1026 static int dhcp_uuid_endian
= ENC_LITTLE_ENDIAN
;
1028 static const enum_val_t dhcp_uuid_endian_vals
[] = {
1029 { "LE", "Little Endian", ENC_LITTLE_ENDIAN
},
1030 { "BE", "Big Endian", ENC_BIG_ENDIAN
},
1034 #define DHCP_SECS_ENDIAN_AUTODETECT -1
1036 static int dhcp_secs_endian
= DHCP_SECS_ENDIAN_AUTODETECT
;
1038 static const enum_val_t dhcp_secs_endian_vals
[] = {
1039 { "Autodetect", "Autodetect", DHCP_SECS_ENDIAN_AUTODETECT
},
1040 { "LE", "Little Endian", ENC_LITTLE_ENDIAN
},
1041 { "BE", "Big Endian", ENC_BIG_ENDIAN
},
1045 #define DHCP_UDP_PORT_RANGE "67-68,4011"
1046 #define PROXYDHCP_UDP_PORT 4011
1048 #define BOOTP_BC 0x8000
1049 #define BOOTP_MBZ 0x7FFF
1052 #define F_FQDN_S 0x01
1053 #define F_FQDN_O 0x02
1054 #define F_FQDN_E 0x04
1055 #define F_FQDN_N 0x08
1056 #define F_FQDN_MBZ 0xf0
1058 #define ISNS_BITFIELD_NZ_MUST_BE_IGNORED(mask, ena_flag) \
1059 ((mask) && !((mask) & (ena_flag)))
1061 /* iSNS bit fields */
1062 #define F_ISNS_FUNCTIONS_ENABLED 0x0001
1063 #define F_ISNS_FUNCTIONS_DD_AUTH 0x0002
1064 #define F_ISNS_FUNCTIONS_SEC_POLICY 0x0004
1065 #define F_ISNS_FUNCTIONS_RESERVED 0xFFF8
1067 #define F_ISNS_DD_ACCESS_ENABLED 0x0001
1068 #define F_ISNS_DD_ACCESS_CTRL_NODE 0x0002
1069 #define F_ISNS_DD_ACCESS_ISCSI_TARGET 0x0004
1070 #define F_ISNS_DD_ACCESS_ISCSI_INITIATOR 0x0008
1071 #define F_ISNS_DD_ACCESS_IFCP_TARGET_PORT 0x0010
1072 #define F_ISNS_DD_ACCESS_IFCP_INITIATOR_PORT 0x0020
1073 #define F_ISNS_DD_ACCESS_RESERVED 0xFFC0
1075 #define F_ISNS_ADMIN_FLAGS_ENABLED 0x0001
1076 #define F_ISNS_ADMIN_FLAGS_HEARTBEAT 0x0002
1077 #define F_ISNS_ADMIN_FLAGS_MANAGEMENT_SCNS 0x0004
1078 #define F_ISNS_ADMIN_FLAGS_DEFAULT_DD 0x0008
1079 #define F_ISNS_ADMIN_FLAGS_RESERVED 0xFFF0
1081 #define F_ISNS_SRV_SEC_BITMAP_ENABLED 0x0001
1082 #define F_ISNS_SRV_SEC_BITMAP_IKE_IPSEC 0x0002
1083 #define F_ISNS_SRV_SEC_BITMAP_MAIN_MODE 0x0004
1084 #define F_ISNS_SRV_SEC_BITMAP_AGGRESSIVE 0x0008
1085 #define F_ISNS_SRV_SEC_BITMAP_PFS 0x0010
1086 #define F_ISNS_SRV_SEC_BITMAP_TRASPORT_MODE 0x0020
1087 #define F_ISNS_SRV_SEC_BITMAP_TUNNEL_MODE 0x0040
1088 #define F_ISNS_SRV_SEC_BITMAP_RESERVED 0xFF80
1091 static const true_false_string tfs_fqdn_o
= {
1096 static const true_false_string tfs_fqdn_e
= {
1101 static const true_false_string tfs_fqdn_n
= {
1102 "No server updates",
1103 "Some server updates"
1106 static const true_false_string tfs_isns_function_dd_based_auth
= {
1107 "Automatically allowed access",
1108 "Explicitly performed",
1111 static const true_false_string tfs_isns_functions_sec_distrib
= {
1112 "Download from iSNS server",
1116 static const true_false_string tfs_bulk_lease_data_source
= {
1125 ipv4
, /* single IPv4 address */
1126 ipv4_list
, /* list of IPv4 addresses */
1136 time_in_s_secs
, /* Signed */
1137 time_in_u_secs
, /* Unsigned (not micro) */
1145 enum field_type ftype
;
1149 static const true_false_string flag_set_broadcast
= {
1154 #define BOOTP_MAX_NO_CHAR 64
1156 /* PacketCable/DOCSIS definitions */
1157 #define PACKETCABLE_MTA_CAP10 "pktc1.0:"
1158 #define PACKETCABLE_MTA_CAP15 "pktc1.5:"
1159 #define PACKETCABLE_MTA_CAP20 "pktc2.0:"
1160 #define PACKETCABLE_CM_CAP11 "docsis1.1:"
1161 #define PACKETCABLE_CM_CAP20 "docsis2.0:"
1162 #define PACKETCABLE_CM_CAP30 "docsis3.0:"
1164 #define PACKETCABLE_CCC_I05 1
1165 #define PACKETCABLE_CCC_DRAFT5 2
1166 #define PACKETCABLE_CCC_RFC_3495 3
1168 static const enum_val_t pkt_ccc_protocol_versions
[] = {
1169 { "ccc_i05", "PKT-SP-PROV-I05-021127", PACKETCABLE_CCC_I05
},
1170 { "ccc_draft_5", "IETF Draft 5", PACKETCABLE_CCC_DRAFT5
},
1171 { "rfc_3495", "RFC 3495", PACKETCABLE_CCC_RFC_3495
},
1175 #define APPLE_BSDP_SERVER "AAPLBSDPC"
1176 #define APPLE_BSDP_CLIENT "AAPLBSDPC/"
1178 #define CISCO_VCID "cisco"
1180 #define AEROHIVE_VCID "AEROHIVE"
1182 static int pkt_ccc_protocol_version
= PACKETCABLE_CCC_RFC_3495
;
1183 static unsigned pkt_ccc_option
= 122;
1185 static void dissect_docsis_cm_cap(packet_info
*pinfo
, proto_tree
*v_tree
, tvbuff_t
*tvb
,
1186 int voff
, int len
, bool opt125
);
1188 #define ARUBA_INSTANT_AP "ArubaInstantAP"
1189 #define ARUBA_AP "ArubaAP"
1191 #define OPT53_DISCOVER "Discover"
1192 /* https://www.iana.org/assignments/bootp-dhcp-parameters */
1193 static const value_string opt53_text
[] = {
1194 { 1, OPT53_DISCOVER
},
1202 { 9, "Force Renew" },
1203 { 10, "Lease query" }, /* RFC4388 */
1204 { 11, "Lease Unassigned" }, /* RFC4388 */
1205 { 12, "Lease Unknown" }, /* RFC4388 */
1206 { 13, "Lease Active" }, /* RFC4388 */
1207 { 14, "Bulk Lease Query" }, /* RFC6926 */
1208 { 15, "Lease Query Done" }, /* RFC6926 */
1209 { 16, "Active LeaseQuery" }, /* RFC7724 */
1210 { 17, "Lease Query Status" }, /* RFC7724 */
1211 { 18, "TLS" }, /* RFC7724 */
1215 /* DHCP Authentication protocols */
1216 #define AUTHEN_PROTO_CONFIG_TOKEN 0
1217 #define AUTHEN_PROTO_DELAYED_AUTHEN 1
1219 /* DHCP Authentication algorithms for delayed authentication */
1220 #define AUTHEN_DELAYED_ALGO_HMAC_MD5 1
1222 /* DHCP Authentication Replay Detection Methods */
1223 #define AUTHEN_RDM_MONOTONIC_COUNTER 0x00
1225 /* DHCP Option Overload (option code 52) */
1226 #define OPT_OVERLOAD_FILE 1
1227 #define OPT_OVERLOAD_SNAME 2
1228 #define OPT_OVERLOAD_BOTH 3
1230 /* Server name and boot file offsets and lengths */
1231 #define SERVER_NAME_OFFSET 44
1232 #define SERVER_NAME_LEN 64
1233 #define FILE_NAME_OFFSET 108
1234 #define FILE_NAME_LEN 128
1235 #define VENDOR_INFO_OFFSET 236
1237 static const value_string dhcp_nbnt_vals
[] = {
1246 * There is confusion around some Client Architecture IDs: RFC 4578 section 2.1
1247 * lists *requested* architecture IDs, however the actual assigned IDs
1248 * (https://www.ietf.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml#processor-architecture)
1249 * differ. Specifically,
1251 * EFI Byte Code (EFI BC, EBC) was 7 in RFC 4578, but is assigned 9 by IETF.
1252 * EFI x64 was 9 in RFC 4578, but is assigned 7 by IETF.
1254 * For confirmation, refer to RFC erratum 4624:
1255 * https://www.rfc-editor.org/errata/eid4624
1257 static const value_string dhcp_client_arch
[] = {
1258 { 0x0000, "IA x86 PC" },
1259 { 0x0001, "NEC/PC98" },
1260 { 0x0002, "IA64 PC" },
1261 { 0x0003, "DEC Alpha" },
1262 { 0x0004, "ArcX86" },
1263 { 0x0005, "Intel Lean Client" },
1264 { 0x0006, "EFI IA32" },
1265 { 0x0007, "EFI x64" }, /* *Not* EFI BC. See comment above. */
1266 { 0x0008, "EFI Xscale" },
1267 { 0x0009, "EFI BC" }, /* *Not* EFI x64. See comment above. */
1268 { 0x000a, "ARM 32-bit UEFI" },
1269 { 0x000b, "ARM 64-bit UEFI" },
1270 { 0x000c, "PowerPC Open Firmware" },
1271 { 0x000d, "PowerPC ePAPR" },
1272 { 0x000e, "POWER OPAL v3" },
1273 { 0x000f, "x86 UEFI HTTP" },
1274 { 0x0010, "x64 UEFI HTTP" },
1275 { 0x0011, "EBC UEFI HTTP" },
1276 { 0x0012, "ARM 32-bit UEFI HTTP" },
1277 { 0x0013, "ARM 64-bit UEFI HTTP" },
1278 { 0x0014, "PC/AT HTTP" },
1279 { 0x0015, "ARM 32-bit uboot" },
1280 { 0x0016, "ARM 64-bit uboot" },
1281 { 0x0017, "ARM 32-bit uboot HTTP" },
1282 { 0x0018, "ARM 64-bit uboot HTTP" },
1283 { 0x0019, "RISC-V 32-bit UEFI" },
1284 { 0x001a, "RISC-V 32-bit UEFI HTTP" },
1285 { 0x001b, "RISC-V 64-bit UEFI" },
1286 { 0x001c, "RISC-V 64-bit UEFI HTTP" },
1287 { 0x001d, "RISC-V 128-bit UEFI" },
1288 { 0x001e, "RISC-V 128-bit UEFI HTTP" },
1289 { 0x001f, "s390 Basic" },
1290 { 0x0020, "s390 Extended" },
1294 static const value_string opt_overload_vals
[] = {
1295 { OPT_OVERLOAD_FILE
, "Boot file name holds options", },
1296 { OPT_OVERLOAD_SNAME
, "Server host name holds options", },
1297 { OPT_OVERLOAD_BOTH
, "Boot file and server host names hold options" },
1300 static const value_string slpda_vals
[] = {
1301 {0x00, "Dynamic Discovery" },
1302 {0x01, "Static Discovery" },
1303 {0x80, "Backwards compatibility" },
1306 static const value_string slp_scope_vals
[] = {
1307 {0x00, "Preferred Scope" },
1308 {0x01, "Mandatory Scope" },
1311 static const value_string authen_protocol_vals
[] = {
1312 {AUTHEN_PROTO_CONFIG_TOKEN
, "configuration token" },
1313 {AUTHEN_PROTO_DELAYED_AUTHEN
, "delayed authentication" },
1316 static const value_string authen_da_algo_vals
[] = {
1317 {AUTHEN_DELAYED_ALGO_HMAC_MD5
, "HMAC_MD5" },
1320 static const value_string authen_rdm_vals
[] = {
1321 {AUTHEN_RDM_MONOTONIC_COUNTER
, "Monotonically-increasing counter" },
1324 static const value_string cl_dss_id_type_vals
[] = {
1325 {1, "Primary DSS_ID" },
1326 {2, "Secondary DSS_ID" },
1330 static const value_string sip_server_enc_vals
[] = {
1331 {0, "Fully Qualified Domain Name" },
1332 {1, "IPv4 Address" },
1336 static const value_string o43_bsdp_boot_image_install_vals
[] = {
1337 { 0, "non-install" },
1342 static const value_string o43_bsdp_boot_image_kind_vals
[] = {
1345 { 2, "Mac OS X Server" },
1346 { 3, "Hardware Diagnostics" },
1350 static const value_string o43_bsdp_message_type_vals
[] = {
1357 static const string_string option242_avaya_phystat_vals
[] = {
1358 { "0", "Disabled" },
1360 { "2", "10Mbps half" },
1361 { "3", "10Mbps full" },
1362 { "4", "100Mbps half" },
1363 { "5", "100Mbps full" },
1364 { "6", "1000Mbps full" },
1368 static const string_string option242_avaya_l2q_vals
[] = {
1371 { "2", "Disabled" },
1375 static const string_string option242_avaya_dot1x_vals
[] = {
1376 { "0", "With PAE pass-through" },
1377 { "1", "With PAE pass-through and proxy Logoff" },
1378 { "2", "Without PAE pass-through or proxy Logoff" },
1382 static const string_string option242_avaya_icmpdu_vals
[] = {
1383 { "0", "No ICMP Destination Unreachable messages" },
1384 { "1", "Send limited Port Unreachable messages" },
1385 { "2", "Send Protocol and Port Unreachable messages" },
1389 static const string_string option242_avaya_icmpred_vals
[] = {
1390 { "0", "Ignore ICMP Redirect messages" },
1391 { "1", "Process ICMP Redirect messages" },
1395 static const string_string option242_avaya_loglocal_vals
[] = {
1396 { "0", "Disabled" },
1397 { "1", "Emergency" },
1399 { "3", "Critical" },
1401 { "5", "Warnings" },
1403 { "7", "Information" },
1408 static const string_string option242_avaya_procstat_vals
[] = {
1409 { "0", "All administrative options" },
1410 { "1", "Only view administrative options" },
1414 static const string_string option242_avaya_static_vals
[] = {
1415 { "0", "Static programming never overrides call server (DHCP) or call server administered data" },
1416 { "1", "Static programming overrides only file server administered data" },
1417 { "2", "Static programming overrides only call server administered data" },
1418 { "3", "Static programming overrides both file server- and call server-administered data" },
1422 /* dhcp options administration */
1423 #define DHCP_OPT_NUM 256
1425 /* All of the options that have a "basic" type that can be handled by dissect_dhcpopt_basic_type() */
1426 #define DHCP_OPTION_BASICTYPE_RANGE "1-20,22-32,34-42,44-51,53-54,56-59,62,64-76,86-87,91-92,100-101,108,112-113,116,118,136-138,142,147-148,150,153,156-157,161,209-211,252"
1428 /* Re-define structure. Values to be updated by dhcp_init_protocol */
1429 static struct opt_info dhcp_opt
[DHCP_OPT_NUM
];
1431 static const struct opt_info default_dhcp_opt
[DHCP_OPT_NUM
] = {
1432 /* 0 */ { "Padding", none
, &hf_dhcp_option_padding
},
1433 /* 1 */ { "Subnet Mask", ipv4
, &hf_dhcp_option_subnet_mask
},
1434 /* 2 */ { "Time Offset", time_in_s_secs
, &hf_dhcp_option_time_offset
},
1435 /* 3 */ { "Router", ipv4_list
, &hf_dhcp_option_router
},
1436 /* 4 */ { "Time Server", ipv4_list
, &hf_dhcp_option_time_server
},
1437 /* 5 */ { "Name Server", ipv4_list
, &hf_dhcp_option_name_server
},
1438 /* 6 */ { "Domain Name Server", ipv4_list
, &hf_dhcp_option_domain_name_server
},
1439 /* 7 */ { "Log Server", ipv4_list
, &hf_dhcp_option_log_server
},
1440 /* 8 */ { "Quotes Server", ipv4_list
, &hf_dhcp_option_quotes_server
},
1441 /* 9 */ { "LPR Server", ipv4_list
, &hf_dhcp_option_lpr_server
},
1442 /* 10 */ { "Impress Server", ipv4_list
, &hf_dhcp_option_impress_server
},
1443 /* 11 */ { "Resource Location Server", ipv4_list
, &hf_dhcp_option_resource_location_server
},
1444 /* 12 */ { "Host Name", string
, &hf_dhcp_option_hostname
},
1445 /* 13 */ { "Boot File Size", val_u_short
, &hf_dhcp_option_boot_file_size
},
1446 /* 14 */ { "Merit Dump File", string
, &hf_dhcp_option_merit_dump_file
},
1447 /* 15 */ { "Domain Name", string
, &hf_dhcp_option_domain_name
},
1448 /* 16 */ { "Swap Server", ipv4
, &hf_dhcp_option_swap_server
},
1449 /* 17 */ { "Root Path", string
, &hf_dhcp_option_root_path
},
1450 /* 18 */ { "Extensions Path", string
, &hf_dhcp_option_extension_path
},
1451 /* 19 */ { "IP Forwarding", val_boolean
, &hf_dhcp_option_ip_forwarding
},
1452 /* 20 */ { "Non-Local Source Routing", val_boolean
, &hf_dhcp_option_non_local_source_routing
},
1453 /* 21 */ { "Policy Filter", special
, NULL
},
1454 /* 22 */ { "Maximum Datagram Reassembly Size", val_u_short
, &hf_dhcp_option_max_datagram_reassembly_size
},
1455 /* 23 */ { "Default IP Time-to-Live", val_u_byte
, &hf_dhcp_option_default_ip_ttl
},
1456 /* 24 */ { "Path MTU Aging Timeout", time_in_u_secs
, &hf_dhcp_option_path_mtu_aging_timeout
},
1457 /* 25 */ { "Path MTU Plateau Table", val_u_short_list
, &hf_dhcp_option_path_mtu_plateau_table_item
},
1458 /* 26 */ { "Interface MTU", val_u_short
, &hf_dhcp_option_interface_mtu
},
1459 /* 27 */ { "All Subnets are Local", val_boolean
, &hf_dhcp_option_all_subnets_are_local
},
1460 /* 28 */ { "Broadcast Address", ipv4
, &hf_dhcp_option_broadcast_address
},
1461 /* 29 */ { "Perform Mask Discovery", val_boolean
, &hf_dhcp_option_perform_mask_discovery
},
1462 /* 30 */ { "Mask Supplier", val_boolean
, &hf_dhcp_option_mask_supplier
},
1463 /* 31 */ { "Perform Router Discover", val_boolean
, &hf_dhcp_option_perform_router_discover
},
1464 /* 32 */ { "Router Solicitation Address", ipv4
, &hf_dhcp_option_router_solicitation_address
},
1465 /* 33 */ { "Static Route", special
, NULL
},
1466 /* 34 */ { "Trailer Encapsulation", val_boolean
, &hf_dhcp_option_trailer_encapsulation
},
1467 /* 35 */ { "ARP Cache Timeout", time_in_u_secs
, &hf_dhcp_option_arp_cache_timeout
},
1468 /* 36 */ { "Ethernet Encapsulation", val_boolean
, &hf_dhcp_option_ethernet_encapsulation
},
1469 /* 37 */ { "TCP Default TTL", val_u_byte
, &hf_dhcp_option_tcp_default_ttl
},
1470 /* 38 */ { "TCP Keepalive Interval", time_in_u_secs
, &hf_dhcp_option_tcp_keepalive_interval
},
1471 /* 39 */ { "TCP Keepalive Garbage", val_boolean
, &hf_dhcp_option_tcp_keepalive_garbage
},
1472 /* 40 */ { "Network Information Service Domain", string
, &hf_dhcp_option_nis_domain
},
1473 /* 41 */ { "Network Information Service Servers", ipv4_list
, &hf_dhcp_option_nis_server
},
1474 /* 42 */ { "Network Time Protocol Servers", ipv4_list
, &hf_dhcp_option_ntp_server
},
1475 /* 43 */ { "Vendor-Specific Information", special
, NULL
},
1476 /* 44 */ { "NetBIOS over TCP/IP Name Server", ipv4_list
, &hf_dhcp_option_netbios_over_tcpip_name_server
},
1477 /* 45 */ { "NetBIOS over TCP/IP Datagram Distribution Name Server", ipv4_list
, &hf_dhcp_option_netbios_over_tcpip_dd_name_server
},
1478 /* 46 */ { "NetBIOS over TCP/IP Node Type", val_u_byte
, &hf_dhcp_option_netbios_over_tcpip_node_type
},
1479 /* 47 */ { "NetBIOS over TCP/IP Scope", string
, &hf_dhcp_option_netbios_over_tcpip_scope
},
1480 /* 48 */ { "X Window System Font Server", ipv4_list
, &hf_dhcp_option_xwindows_system_font_server
},
1481 /* 49 */ { "X Window System Display Manager", ipv4_list
, &hf_dhcp_option_xwindows_system_display_manager
},
1482 /* 50 */ { "Requested IP Address", ipv4
, &hf_dhcp_option_requested_ip_address
},
1483 /* 51 */ { "IP Address Lease Time", time_in_u_secs
, &hf_dhcp_option_ip_address_lease_time
},
1484 /* 52 */ { "Option Overload", special
, &hf_dhcp_option_option_overload
},
1485 /* 53 */ { "DHCP Message Type", val_u_byte
, &hf_dhcp_option_dhcp
},
1486 /* 54 */ { "DHCP Server Identifier", ipv4
, &hf_dhcp_option_dhcp_server_id
},
1487 /* 55 */ { "Parameter Request List", special
, &hf_dhcp_option_parameter_request_list_item
},
1488 /* 56 */ { "Message", string
, &hf_dhcp_option_message
},
1489 /* 57 */ { "Maximum DHCP Message Size", val_u_short
, &hf_dhcp_option_dhcp_max_message_size
},
1490 /* 58 */ { "Renewal Time Value", time_in_u_secs
, &hf_dhcp_option_renewal_time_value
},
1491 /* 59 */ { "Rebinding Time Value", time_in_u_secs
, &hf_dhcp_option_rebinding_time_value
},
1492 /* 60 */ { "Vendor class identifier", special
, NULL
},
1493 /* 61 */ { "Client identifier", special
, NULL
},
1494 /* 62 */ { "Novell/Netware IP domain", string
, &hf_dhcp_option_novell_netware_ip_domain
},
1495 /* 63 */ { "Novell Options", special
, NULL
},
1496 /* 64 */ { "Network Information Service+ Domain", string
, &hf_dhcp_option_nis_plus_domain
},
1497 /* 65 */ { "Network Information Service+ Servers", ipv4_list
, &hf_dhcp_option_nis_plus_server
},
1498 /* 66 */ { "TFTP Server Name", string
, &hf_dhcp_option_tftp_server_name
},
1499 /* 67 */ { "Bootfile name", string
, &hf_dhcp_option_bootfile_name
},
1500 /* 68 */ { "Mobile IP Home Agent", ipv4_list
, &hf_dhcp_option_mobile_ip_home_agent
},
1501 /* 69 */ { "SMTP Server", ipv4_list
, &hf_dhcp_option_smtp_server
},
1502 /* 70 */ { "POP3 Server", ipv4_list
, &hf_dhcp_option_pop3_server
},
1503 /* 71 */ { "NNTP Server", ipv4_list
, &hf_dhcp_option_nntp_server
},
1504 /* 72 */ { "Default WWW Server", ipv4_list
, &hf_dhcp_option_default_www_server
},
1505 /* 73 */ { "Default Finger Server", ipv4_list
, &hf_dhcp_option_default_finger_server
},
1506 /* 74 */ { "Default IRC Server", ipv4_list
, &hf_dhcp_option_default_irc_server
},
1507 /* 75 */ { "StreetTalk Server", ipv4_list
, &hf_dhcp_option_streettalk_server
},
1508 /* 76 */ { "StreetTalk Directory Assistance Server", ipv4_list
, &hf_dhcp_option_streettalk_da_server
},
1509 /* 77 */ { "User Class Information", special
, NULL
},
1510 /* 78 */ { "Directory Agent Information", special
, NULL
},
1511 /* 79 */ { "Service Location Agent Scope", special
, NULL
},
1512 /* 80 */ { "Rapid commit", opaque
, NULL
},
1513 /* 81 */ { "Client Fully Qualified Domain Name", special
, NULL
},
1514 /* 82 */ { "Agent Information Option", special
, NULL
},
1515 /* 83 */ { "iSNS", opaque
, NULL
},
1516 /* 84 */ { "Removed/Unassigned", opaque
, NULL
},
1517 /* 85 */ { "Novell Directory Services Servers", special
, NULL
},
1518 /* 86 */ { "Novell Directory Services Tree Name", string
, &hf_dhcp_option_novell_ds_tree_name
},
1519 /* 87 */ { "Novell Directory Services Context", string
, &hf_dhcp_option_novell_ds_context
},
1520 /* 88 */ { "BCMCS Controller Domain Name [TODO:RFC4280]", opaque
, NULL
},
1521 /* 89 */ { "BCMCS Controller IPv4 address [TODO:RFC4280]", opaque
, NULL
},
1522 /* 90 */ { "Authentication", special
, NULL
},
1523 /* 91 */ { "Client last transaction time", time_in_u_secs
, &hf_dhcp_option_client_last_transaction_time
},
1524 /* 92 */ { "Associated IP option", ipv4_list
, &hf_dhcp_option_associated_ip_option
},
1525 /* 93 */ { "Client System Architecture", special
, NULL
},
1526 /* 94 */ { "Client Network Device Interface", special
, NULL
},
1527 /* 95 */ { "LDAP [TODO:RFC3679]", opaque
, NULL
},
1528 /* 96 */ { "Removed/Unassigned", opaque
, NULL
},
1529 /* 97 */ { "UUID/GUID-based Client Identifier", special
, NULL
},
1530 /* 98 */ { "Open Group's User Authentication [TODO:RFC2485]", opaque
, NULL
},
1531 /* 99 */ { "Civic Addresses Configuration", special
, NULL
},
1532 /* 100 */ { "PCode", string
, &hf_dhcp_option_tz_pcode
},
1533 /* 101 */ { "TCode", string
, &hf_dhcp_option_tz_tcode
},
1534 /* 102 */ { "Removed/unassigned", opaque
, NULL
},
1535 /* 103 */ { "Removed/unassigned", opaque
, NULL
},
1536 /* 104 */ { "Removed/unassigned", opaque
, NULL
},
1537 /* 105 */ { "Removed/unassigned", opaque
, NULL
},
1538 /* 106 */ { "Removed/unassigned", opaque
, NULL
},
1539 /* 107 */ { "Removed/unassigned", opaque
, NULL
},
1540 /* 108 */ { "IPv6-Only Preferred", time_in_u_secs
, &hf_dhcp_option_ipv6_only_preferred_wait_time
},
1541 /* 109 */ { "Unassigned", opaque
, NULL
},
1542 /* 110 */ { "Removed/Unassigned", opaque
, NULL
},
1543 /* 111 */ { "Unassigned", opaque
, NULL
},
1544 /* 112 */ { "NetInfo Parent Server Address", ipv4_list
, &hf_dhcp_option_netinfo_parent_server_address
},
1545 /* 113 */ { "NetInfo Parent Server Tag", string
, &hf_dhcp_option_netinfo_parent_server_tag
},
1546 /* 114 */ { "DHCP Captive-Portal", special
, NULL
},
1547 /* 115 */ { "Removed/Unassigned", opaque
, NULL
},
1548 /* 116 */ { "DHCP Auto-Configuration", val_u_byte
, &hf_dhcp_option_dhcp_auto_configuration
},
1549 /* 117 */ { "Name Service Search", special
, NULL
},
1550 /* 118 */ { "Subnet Selection Option", ipv4_list
, &hf_dhcp_option_subnet_selection_option
},
1551 /* 119 */ { "Domain Search", special
, NULL
},
1552 /* 120 */ { "SIP Servers", special
, NULL
},
1553 /* 121 */ { "Classless Static Route", special
, NULL
},
1554 /* 122 */ { "CableLabs Client Configuration [TODO:RFC3495]", opaque
, NULL
},
1555 /* 123 */ { "Coordinate-based Location Configuration", special
, NULL
},
1556 /* 124 */ { "V-I Vendor Class", special
, NULL
},
1557 /* 125 */ { "V-I Vendor-specific Information", special
, NULL
},
1558 /* 126 */ { "Removed/Unassigned", opaque
, NULL
},
1559 /* 127 */ { "Removed/Unassigned", opaque
, NULL
},
1560 /* 128 */ { "DOCSIS full security server IP [TODO]", opaque
, NULL
},
1561 /* 129 */ { "PXE - undefined (vendor specific)", opaque
, NULL
},
1562 /* 130 */ { "PXE - undefined (vendor specific)", opaque
, NULL
},
1563 /* 131 */ { "PXE - undefined (vendor specific)", opaque
, NULL
},
1564 /* 132 */ { "PXE - undefined (vendor specific)", opaque
, NULL
},
1565 /* 133 */ { "PXE - undefined (vendor specific)", opaque
, NULL
},
1566 /* 134 */ { "PXE - undefined (vendor specific)", opaque
, NULL
},
1567 /* 135 */ { "PXE - undefined (vendor specific)", opaque
, NULL
},
1568 /* 136 */ { "PANA Authentication Agent", ipv4_list
, &hf_dhcp_option_pana_agent
},
1569 /* 137 */ { "LoST Server Domain Name", string
, &hf_dhcp_option_lost_server_domain_name
},
1570 /* 138 */ { "CAPWAP Access Controllers", ipv4_list
, &hf_dhcp_option_capwap_access_controller
},
1571 /* 139 */ { "IPv4 Address-MoS", opaque
, NULL
},
1572 /* 140 */ { "IPv4 FQDN-MoS", opaque
, NULL
},
1573 /* 141 */ { "SIP UA Configuration Domains", opaque
, NULL
},
1574 /* 142 */ { "IPv4 Address ANDSF", ipv4_list
, &hf_dhcp_option_andsf_server
},
1575 /* 143 */ { "Zerotouch Redirect [TODO: draft-ietf-netconf-zerotouch]", opaque
, NULL
},
1576 /* 144 */ { "Geospatial Location [TODO:RFC6225]", opaque
, NULL
},
1577 /* 145 */ { "Forcerenew Nonce Capable", special
, NULL
},
1578 /* 146 */ { "RDNSS Selection", special
, NULL
},
1579 /* 147 */ { "DOTS Reference Identifier", string
, &hf_dhcp_option_dots_ri
},
1580 /* 148 */ { "DOTS Address", ipv4_list
, &hf_dhcp_option_dots_address
},
1581 /* 149 */ { "Unassigned", opaque
, NULL
},
1582 /* 150 */ { "TFTP Server Address", ipv4_list
, &hf_dhcp_option_tftp_server_address
},
1583 /* 151 */ { "Leasequery Status code", special
, NULL
},
1584 /* 152 */ { "Leasequery Base Time", special
, NULL
},
1585 /* 153 */ { "Leasequery Start Time of State", time_in_u_secs
, &hf_dhcp_option_bulk_lease_start_time_of_state
},
1586 /* 154 */ { "Leasequery Query Start Time", special
, NULL
},
1587 /* 155 */ { "Leasequery Query End Time", special
, NULL
},
1588 /* 156 */ { "Leasequery Dhcp State", val_u_byte
, &hf_dhcp_option_bulk_lease_dhcp_state
},
1589 /* 157 */ { "Leasequery Data Source", val_boolean
, &hf_dhcp_option_bulk_lease_data_source
},
1590 /* 158 */ { "PCP Server", special
, NULL
},
1591 /* 159 */ { "Portparams", special
, NULL
},
1592 /* 160 */ { "Unassigned (ex DHCP Captive-Portal)", special
, NULL
}, /* Previously assigned by [RFC7710]; known to also be used by Polycom. */
1593 /* 161 */ { "Manufacturer Usage Description", string
, &hf_dhcp_option_mudurl
},
1594 /* 162 */ { "Unassigned", opaque
, NULL
},
1595 /* 163 */ { "Unassigned", opaque
, NULL
},
1596 /* 164 */ { "Unassigned", opaque
, NULL
},
1597 /* 165 */ { "Unassigned", opaque
, NULL
},
1598 /* 166 */ { "Unassigned", opaque
, NULL
},
1599 /* 167 */ { "Unassigned", opaque
, NULL
},
1600 /* 168 */ { "Unassigned", opaque
, NULL
},
1601 /* 169 */ { "Unassigned", opaque
, NULL
},
1602 /* 170 */ { "Unassigned", opaque
, NULL
},
1603 /* 171 */ { "Unassigned", opaque
, NULL
},
1604 /* 172 */ { "Unassigned", opaque
, NULL
},
1605 /* 173 */ { "Unassigned", opaque
, NULL
},
1606 /* 174 */ { "Unassigned", opaque
, NULL
},
1607 /* 175 */ { "Etherboot", opaque
, NULL
},
1608 /* 176 */ { "IP Telephone", opaque
, NULL
},
1609 /* 177 */ { "Etherboot", opaque
, NULL
},
1610 /* 178 */ { "Unassigned", opaque
, NULL
},
1611 /* 179 */ { "Unassigned", opaque
, NULL
},
1612 /* 180 */ { "Unassigned", opaque
, NULL
},
1613 /* 181 */ { "Unassigned", opaque
, NULL
},
1614 /* 182 */ { "Unassigned", opaque
, NULL
},
1615 /* 183 */ { "Unassigned", opaque
, NULL
},
1616 /* 184 */ { "Unassigned", opaque
, NULL
},
1617 /* 185 */ { "Unassigned", opaque
, NULL
},
1618 /* 186 */ { "Unassigned", opaque
, NULL
},
1619 /* 187 */ { "Unassigned", opaque
, NULL
},
1620 /* 188 */ { "Unassigned", opaque
, NULL
},
1621 /* 189 */ { "Unassigned", opaque
, NULL
},
1622 /* 190 */ { "Unassigned", opaque
, NULL
},
1623 /* 191 */ { "Unassigned", opaque
, NULL
},
1624 /* 192 */ { "Unassigned", opaque
, NULL
},
1625 /* 193 */ { "Unassigned", opaque
, NULL
},
1626 /* 194 */ { "Unassigned", opaque
, NULL
},
1627 /* 195 */ { "Unassigned", opaque
, NULL
},
1628 /* 196 */ { "Unassigned", opaque
, NULL
},
1629 /* 197 */ { "Unassigned", opaque
, NULL
},
1630 /* 198 */ { "Unassigned", opaque
, NULL
},
1631 /* 199 */ { "Unassigned", opaque
, NULL
},
1632 /* 200 */ { "Unassigned", opaque
, NULL
},
1633 /* 201 */ { "Unassigned", opaque
, NULL
},
1634 /* 202 */ { "Unassigned", opaque
, NULL
},
1635 /* 203 */ { "Unassigned", opaque
, NULL
},
1636 /* 204 */ { "Unassigned", opaque
, NULL
},
1637 /* 205 */ { "Unassigned", opaque
, NULL
},
1638 /* 206 */ { "Unassigned", opaque
, NULL
},
1639 /* 207 */ { "Unassigned", opaque
, NULL
},
1640 /* 208 */ { "PXELINUX Magic", opaque
, NULL
},
1641 /* 209 */ { "PXE Configuration file", string
, &hf_dhcp_option_pxe_config_file
},
1642 /* 210 */ { "PXE Path Prefix", string
, &hf_dhcp_option_pxe_path_prefix
},
1643 /* 211 */ { "Reboot Time", time_in_u_secs
, &hf_dhcp_option_pxe_reboot_time
},
1644 /* 212 */ { "6RD", opaque
, NULL
},
1645 /* 213 */ { "V4 Access Domain", opaque
, NULL
},
1646 /* 214 */ { "Unassigned", opaque
, NULL
},
1647 /* 215 */ { "Unassigned", opaque
, NULL
},
1648 /* 216 */ { "Unassigned", opaque
, NULL
},
1649 /* 217 */ { "Unassigned", opaque
, NULL
},
1650 /* 218 */ { "Unassigned", opaque
, NULL
},
1651 /* 219 */ { "Unassigned", opaque
, NULL
},
1652 /* 220 */ { "Subnet Allocation", opaque
, NULL
},
1653 /* 221 */ { "Virtual Subnet Selection", opaque
, NULL
},
1654 /* 222 */ { "Unassigned", opaque
, NULL
},
1655 /* 223 */ { "Unassigned", opaque
, NULL
},
1656 /* 224 */ { "Private", opaque
, NULL
},
1657 /* 225 */ { "Private", opaque
, NULL
},
1658 /* 226 */ { "Private", opaque
, NULL
},
1659 /* 227 */ { "Private", opaque
, NULL
},
1660 /* 228 */ { "Private", opaque
, NULL
},
1661 /* 229 */ { "Private", opaque
, NULL
},
1662 /* 230 */ { "Private", opaque
, NULL
},
1663 /* 231 */ { "Private", opaque
, NULL
},
1664 /* 232 */ { "Private", opaque
, NULL
},
1665 /* 233 */ { "Private", opaque
, NULL
},
1666 /* 234 */ { "Private", opaque
, NULL
},
1667 /* 235 */ { "Private", opaque
, NULL
},
1668 /* 236 */ { "Private", opaque
, NULL
},
1669 /* 237 */ { "Private", opaque
, NULL
},
1670 /* 238 */ { "Private", opaque
, NULL
},
1671 /* 239 */ { "Private", opaque
, NULL
},
1672 /* 240 */ { "Private", opaque
, NULL
},
1673 /* 241 */ { "Private", opaque
, NULL
},
1674 /* 242 */ { "Private/Avaya IP Telephone", special
, NULL
},
1675 /* 243 */ { "Private", opaque
, NULL
},
1676 /* 244 */ { "Private", opaque
, NULL
},
1677 /* 245 */ { "Private", opaque
, NULL
},
1678 /* 246 */ { "Private", opaque
, NULL
},
1679 /* 247 */ { "Private", opaque
, NULL
},
1680 /* 248 */ { "Private", opaque
, NULL
},
1681 /* 249 */ { "Private/Classless Static Route (Microsoft)", special
, NULL
},
1682 /* 250 */ { "Private", opaque
, NULL
},
1683 /* 251 */ { "Private", opaque
, NULL
},
1684 /* 252 */ { "Private/Proxy autodiscovery", string
, &hf_dhcp_option_private_proxy_autodiscovery
},
1685 /* 253 */ { "Private", opaque
, NULL
},
1686 /* 254 */ { "Private", opaque
, NULL
},
1687 /* 255 */ { "End", opaque
, NULL
}
1691 dhcp_time_in_s_secs_fmt(char *s
, uint32_t v
)
1693 /* Only used by option 2 Time Offset, which is deprecated. */
1694 char* secs_str
= signed_time_secs_to_str(NULL
, (int32_t)v
);
1695 snprintf(s
, ITEM_LABEL_LENGTH
, "%s (%d)", secs_str
, (int32_t)v
);
1696 wmem_free(NULL
, secs_str
);
1700 dhcp_time_in_u_secs_fmt(char *s
, uint32_t v
)
1702 /* RFC 2131: 3.3 Interpretation and representation of time values */
1703 if (v
!= 0xffffffff) {
1704 char* secs_str
= unsigned_time_secs_to_str(NULL
, v
);
1705 snprintf(s
, ITEM_LABEL_LENGTH
, "%s (%d)", secs_str
, v
);
1706 wmem_free(NULL
, secs_str
);
1708 snprintf(s
, ITEM_LABEL_LENGTH
, "infinity (%d)", v
);
1712 /*-------------------------------------
1714 *-------------------------------------
1716 /* UAT entry structure. */
1720 enum field_type ftype
;
1722 } uat_dhcp_record_t
;
1724 static uat_dhcp_record_t
*uat_dhcp_records
;
1725 static uat_t
*dhcp_uat
;
1726 static unsigned num_dhcp_records_uat
;
1727 static wmem_list_t
*saved_uat_opts
; /* List of previous options from UAT to "free" from dissection */
1729 static void* uat_dhcp_record_copy_cb(void* n
, const void* o
, size_t siz _U_
) {
1730 uat_dhcp_record_t
* new_record
= (uat_dhcp_record_t
*)n
;
1731 const uat_dhcp_record_t
* old_record
= (const uat_dhcp_record_t
*)o
;
1733 new_record
->text
= g_strdup(old_record
->text
);
1738 static bool uat_dhcp_record_update_cb(void* r
, char** err
) {
1739 uat_dhcp_record_t
* rec
= (uat_dhcp_record_t
*)r
;
1741 if ((rec
->opt
== 0) || (rec
->opt
>=DHCP_OPT_NUM
-1)) {
1742 *err
= ws_strdup_printf("Option must be between 1 and %d", DHCP_OPT_NUM
-2);
1748 static void uat_dhcp_record_free_cb(void*r
) {
1749 uat_dhcp_record_t
* rec
= (uat_dhcp_record_t
*)r
;
1754 UAT_DEC_CB_DEF(uat_dhcp_records
, opt
, uat_dhcp_record_t
)
1755 UAT_CSTRING_CB_DEF(uat_dhcp_records
, text
, uat_dhcp_record_t
)
1756 UAT_VS_DEF(uat_dhcp_records
, ftype
, uat_dhcp_record_t
, enum field_type
, special
, "string")
1759 static const struct opt_info
* dhcp_get_opt(unsigned int idx
)
1761 if(idx
>=DHCP_OPT_NUM
)
1764 return &dhcp_opt
[idx
];
1768 dhcp_get_opt_text(unsigned int idx
)
1770 if(idx
>=DHCP_OPT_NUM
)
1772 return dhcp_opt
[idx
].text
;
1775 struct basic_types_hfs
{
1783 int* val_u_short_list
;
1785 int* time_in_s_secs
;
1786 int* time_in_u_secs
;
1789 /* Handle "basic" datatypes adding to a tree */
1791 dhcp_handle_basic_types(packet_info
*pinfo
, proto_tree
*tree
, proto_item
*item
, tvbuff_t
*tvb
,
1792 enum field_type ftype
, int offset
, int total_len
,
1793 int *hf
, const struct basic_types_hfs
* hf_default
)
1801 proto_tree_add_item(tree
, *hf
, tvb
, offset
, total_len
, ENC_BIG_ENDIAN
);
1802 else if (hf_default
->bytes
!= NULL
)
1803 proto_tree_add_item(tree
, *hf_default
->bytes
, tvb
, offset
, total_len
, ENC_BIG_ENDIAN
);
1804 consumed
= total_len
;
1808 if (total_len
!= 4) {
1809 expert_add_info_format(pinfo
, item
, &ei_dhcp_bad_length
, "length isn't 4");
1814 proto_tree_add_item(tree
, *hf
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1815 else if (hf_default
->ipv4
!= NULL
)
1816 proto_tree_add_item(tree
, *hf_default
->ipv4
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1818 /* Show IP address in root of option */
1819 proto_item_append_text(tree
, " (%s)", tvb_ip_to_str(pinfo
->pool
, tvb
, offset
));
1824 for (i
= offset
, left
= total_len
; left
> 0; i
+= 4, left
-= 4) {
1826 expert_add_info_format(pinfo
, item
, &ei_dhcp_bad_length
, "Option length isn't a multiple of 4");
1831 proto_tree_add_item(tree
, *hf
, tvb
, i
, 4, ENC_BIG_ENDIAN
);
1832 else if (hf_default
->ipv4_list
!= NULL
)
1833 proto_tree_add_item(tree
, *hf_default
->ipv4_list
, tvb
, i
, 4, ENC_BIG_ENDIAN
);
1841 proto_tree_add_item(tree
, *hf
, tvb
, offset
, total_len
, ENC_BIG_ENDIAN
);
1842 else if (hf_default
->string
!= NULL
)
1843 proto_tree_add_item(tree
, *hf_default
->string
, tvb
, offset
, total_len
, ENC_BIG_ENDIAN
);
1844 consumed
= total_len
;
1848 if (total_len
!= 1) {
1849 expert_add_info_format(pinfo
, item
, &ei_dhcp_bad_length
, "length isn't 1");
1854 proto_tree_add_item(tree
, *hf
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1855 else if (hf_default
->val_boolean
!= NULL
)
1856 proto_tree_add_item(tree
, *hf_default
->val_boolean
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1861 if (total_len
!= 1) {
1862 expert_add_info_format(pinfo
, item
, &ei_dhcp_bad_length
, "length isn't 1");
1867 proto_tree_add_item(tree
, *hf
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1868 else if (hf_default
->val_u_byte
!= NULL
)
1869 proto_tree_add_item(tree
, *hf_default
->val_u_byte
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1874 if (total_len
!= 2) {
1875 expert_add_info_format(pinfo
, item
, &ei_dhcp_bad_length
, "length isn't 2");
1880 proto_tree_add_item(tree
, *hf
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1881 else if (hf_default
->val_u_short
!= NULL
)
1882 proto_tree_add_item(tree
, *hf_default
->val_u_short
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1886 case val_u_le_short
:
1887 if (total_len
!= 2) {
1888 expert_add_info_format(pinfo
, item
, &ei_dhcp_bad_length
, "length isn't 2");
1893 proto_tree_add_item(tree
, *hf
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1894 else if (hf_default
->val_u_short
!= NULL
)
1895 proto_tree_add_item(tree
, *hf_default
->val_u_short
, tvb
, offset
, 2, ENC_LITTLE_ENDIAN
);
1899 case val_u_short_list
:
1900 for (i
= offset
, left
= total_len
; left
> 0; i
+= 2, left
-= 2) {
1902 expert_add_info_format(pinfo
, item
, &ei_dhcp_bad_length
, "Option length isn't a multiple of 2");
1907 proto_tree_add_item(tree
, *hf
, tvb
, i
, 2, ENC_BIG_ENDIAN
);
1908 else if (hf_default
->val_u_short_list
!= NULL
)
1909 proto_tree_add_item(tree
, *hf_default
->val_u_short_list
, tvb
, i
, 2, ENC_BIG_ENDIAN
);
1915 if (total_len
!= 4) {
1916 expert_add_info_format(pinfo
, item
, &ei_dhcp_bad_length
, "length isn't 4");
1921 proto_tree_add_item(tree
, *hf
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1922 else if (hf_default
->val_u_long
!= NULL
)
1923 proto_tree_add_item(tree
, *hf_default
->val_u_long
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1927 case time_in_s_secs
:
1928 if (total_len
!= 4) {
1929 expert_add_info_format(pinfo
, item
, &ei_dhcp_bad_length
, "length isn't 4");
1934 proto_tree_add_item(tree
, *hf
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1936 else if (hf_default
->time_in_s_secs
!= NULL
)
1937 proto_tree_add_item(tree
, *hf_default
->time_in_s_secs
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1942 case time_in_u_secs
:
1943 if (total_len
!= 4) {
1944 expert_add_info_format(pinfo
, item
, &ei_dhcp_bad_length
, "length isn't 4");
1949 proto_tree_add_item(tree
, *hf
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1951 else if (hf_default
->time_in_u_secs
!= NULL
)
1952 proto_tree_add_item(tree
, *hf_default
->time_in_u_secs
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1956 /* Ignore other field_types */
1964 dissect_dhcpopt_basic_type(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data
)
1966 const struct opt_info
*opt
;
1967 dhcp_option_data_t
*option_data
= (dhcp_option_data_t
*)data
;
1968 static const struct basic_types_hfs default_hfs
= {
1969 &hf_dhcp_option_value
,
1970 &hf_dhcp_option_value_ip_address
,
1971 &hf_dhcp_option_value_ip_address
,
1972 &hf_dhcp_option_value_stringz
,
1973 &hf_dhcp_option_value_boolean
,
1974 &hf_dhcp_option_value_8
,
1975 &hf_dhcp_option_value_16
,
1976 &hf_dhcp_option_value_16
,
1977 &hf_dhcp_option_value_u32
,
1978 &hf_dhcp_option_value_s_secs
,
1979 &hf_dhcp_option_value_u_secs
,
1982 opt
= dhcp_get_opt(option_data
->option
);
1986 return dhcp_handle_basic_types(pinfo
, tree
, tree
, tvb
, opt
->ftype
,
1987 0, tvb_reported_length(tvb
), opt
->phf
, &default_hfs
);
1990 /* Returns the number of bytes consumed by this option. */
1992 dhcp_option(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*bp_tree
, int voff
,
1993 int eoff
, bool first_pass
, bool *at_end
, const char **dhcp_type_p
,
1994 const uint8_t **vendor_class_id_p
, uint8_t *overload_p
,
1995 wmem_map_t
*rfc3396_map
)
1997 const struct opt_info
*opt
;
1998 unsigned char code
= tvb_get_uint8(tvb
, voff
);
2002 proto_item
*vti
, *ti_value
;
2003 tvbuff_t
*option_tvb
;
2004 dhcp_option_data_t option_data
;
2006 /* Note overload_p is NULL inside the overloaded areas; it makes no
2007 * sense to set it again. */
2008 /* Options whose length isn't "optlen + 2". */
2011 case 0: /* Padding */
2012 /* check how much padding we have */
2013 for (i
= voff
+ 1; i
< eoff
; i
++ ) {
2014 if (tvb_get_uint8(tvb
, i
) != 0) {
2020 if (bp_tree
!= NULL
) {
2021 vti
= proto_tree_add_uint_format_value(bp_tree
, hf_dhcp_option_type
,
2022 tvb
, voff
, 1, 0, "(0) Padding");
2023 v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option
);
2024 proto_tree_add_item(v_tree
, hf_dhcp_option_padding
, tvb
, voff
, i
, ENC_NA
);
2030 case 255: /* End Option */
2032 if (bp_tree
!= NULL
) {
2033 vti
= proto_tree_add_uint_format_value(bp_tree
, hf_dhcp_option_type
,
2034 tvb
, voff
, 1, 0, "(255) End");
2035 v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option
);
2036 if (overload_p
== NULL
)
2037 proto_tree_add_item(v_tree
, hf_dhcp_option_end_overload
, tvb
, voff
, 1, ENC_BIG_ENDIAN
);
2039 proto_tree_add_item(v_tree
, hf_dhcp_option_end
, tvb
, voff
, 1, ENC_BIG_ENDIAN
);
2048 * Get the length of the option, and the number of bytes it
2049 * consumes (the length doesn't include the option code or
2052 * On the first pass, check first whether we have the length
2053 * byte, so that we don't throw an exception; if we throw an
2054 * exception in the first pass, which is only checking for options
2055 * whose values we need in order to properly dissect the packet
2056 * on the second pass, we won't actually dissect the options, so
2057 * you won't be able to see which option had the problem.
2060 if (!tvb_bytes_exist(tvb
, voff
+1, 1)) {
2062 * We don't have the length byte; just return 1
2063 * as the number of bytes we consumed, to count
2069 optlen
= tvb_get_uint8(tvb
, voff
+1);
2070 consumed
= optlen
+ 2;
2072 struct rfc3396_for_option_t
*rfc3396_data
= wmem_map_lookup(rfc3396_map
, GUINT_TO_POINTER(code
));
2073 if (rfc3396_data
== NULL
) {
2074 rfc3396_data
= wmem_new0(pinfo
->pool
, struct rfc3396_for_option_t
);
2075 wmem_map_insert(rfc3396_map
, GUINT_TO_POINTER(code
), rfc3396_data
);
2079 * In the first pass, we don't put anything into the protocol
2080 * tree; we just check for some options we have to look at
2081 * in order to properly process the packet:
2083 * 52 (Overload) - we need this to properly dissect the
2084 * file and sname fields
2086 * 53 (DHCP message type) - if this is present, this is DHCP
2088 * 60 (Vendor class identifier) - we need this in order to
2089 * interpret the vendor-specific info
2091 * We also check, before fetching anything, to make sure we
2092 * have the entire item we're fetching, so that we don't throw
2096 if (tvb_bytes_exist(tvb
, voff
+2, consumed
-2)) {
2100 if (overload_p
!= NULL
) {
2101 *overload_p
= tvb_get_uint8(tvb
, voff
+2);
2107 val_to_str(tvb_get_uint8(tvb
, voff
+2),
2109 "Unknown Message Type (0x%02x)");
2113 *vendor_class_id_p
=
2114 tvb_get_string_enc(pinfo
->pool
,
2115 tvb
, voff
+2, consumed
-2, ENC_ASCII
);
2120 rfc3396_data
->total_number_of_block
++;
2123 * We don't do anything else here.
2129 opt
= dhcp_get_opt(code
);
2132 /* THIS SHOULD NEVER HAPPEN!!! */
2136 vti
= proto_tree_add_uint_format_value(bp_tree
, hf_dhcp_option_type
,
2137 tvb
, voff
, consumed
, code
, "(%d) %s", code
, opt
->text
);
2138 v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option
);
2139 proto_tree_add_item(v_tree
, hf_dhcp_option_length
, tvb
, voff
+1, 1, ENC_BIG_ENDIAN
);
2141 ti_value
= proto_tree_add_item(v_tree
, hf_dhcp_option_value
, tvb
, voff
+2, optlen
, ENC_NA
);
2142 proto_item_set_hidden(ti_value
);
2144 /* prepare data for dissector table */
2145 option_tvb
= tvb_new_subset_length(tvb
, voff
+2, optlen
);
2146 option_data
.option
= code
;
2147 option_data
.overload
= overload_p
;
2148 option_data
.dhcp_type
= *dhcp_type_p
;
2149 option_data
.vendor_class_id
= *vendor_class_id_p
;
2151 /* RFC 3396 4 Applicability and 7 Decoding Agent Behavior both clearly
2152 * state that decoding agents MUST consider any case where an option
2153 * code is repeated as a split option and reassemble it, even for
2154 * options that are not "concatenation-requiring."
2157 * https://www.ietf.org/archive/id/draft-tojens-dhcp-option-concat-considerations-00.html
2158 * which notes that real world DHCP implementations do not do this, and
2159 * that, especially in the case of fixed length option types, this is
2160 * less robust than actually used approaches of intepreting the options
2161 * separately, and choosing one option while discarding others.
2163 * XXX - Perhaps we want a preference of which options to concatenate?
2165 if (rfc3396_data
->total_number_of_block
== 1) {
2166 if (!dissector_try_uint_with_data(dhcp_option_table
, code
, option_tvb
, pinfo
, v_tree
, false, &option_data
)) {
2167 /* hf_dhcp_option_value is already in tree, just make it visible */
2168 proto_item_set_visible(ti_value
);
2172 rfc3396_data
->index_current_block
++;
2173 ti
= proto_tree_add_string(v_tree
, hf_dhcp_option_rfc_3396_detected
, tvb
, voff
+2, optlen
,
2174 wmem_strdup_printf(pinfo
->pool
, "%u/%u", rfc3396_data
->index_current_block
, rfc3396_data
->total_number_of_block
));
2176 if (rfc3396_data
->tvb_composite
== NULL
) {
2177 rfc3396_data
->tvb_composite
= tvb_new_composite();
2179 tvb_composite_append(rfc3396_data
->tvb_composite
, option_tvb
);
2181 if (rfc3396_data
->index_current_block
!= rfc3396_data
->total_number_of_block
) {
2182 expert_add_info_format(pinfo
, ti
, &ei_dhcp_rfc3396_refer_last_option
, "For the data, please refer to the last option %u, %u/%u", code
, rfc3396_data
->total_number_of_block
, rfc3396_data
->total_number_of_block
);
2183 } else if (rfc3396_data
->tvb_composite
!= NULL
) {
2184 tvb_composite_finalize(rfc3396_data
->tvb_composite
);
2185 add_new_data_source(pinfo
, rfc3396_data
->tvb_composite
, "RFC 3396 Long Option");
2186 if (!dissector_try_uint_with_data(dhcp_option_table
, code
, rfc3396_data
->tvb_composite
, pinfo
, v_tree
, false, &option_data
)) {
2187 proto_tree_add_item(v_tree
, hf_dhcp_option_value
, rfc3396_data
->tvb_composite
, 0, tvb_reported_length(rfc3396_data
->tvb_composite
), ENC_NA
);
2190 expert_add_info_format(pinfo
, ti
, &ei_dhcp_bad_length
, "RFC 3396 Long Option with combined length 0");
2198 dissect_dhcpopt_policy_filter(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2202 while (tvb_reported_length_remaining(tvb
, offset
) >= 8) {
2203 proto_tree_add_item(tree
, hf_dhcp_option_policy_filter_ip
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2205 proto_tree_add_item(tree
, hf_dhcp_option_policy_filter_subnet_mask
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2209 if (tvb_reported_length_remaining(tvb
, offset
) > 0) {
2210 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "Option length isn't a multiple of 8");
2213 return tvb_captured_length(tvb
);
2217 dissect_dhcpopt_static_route(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2221 while (tvb_reported_length_remaining(tvb
, offset
) >= 8) {
2222 proto_tree_add_item(tree
, hf_dhcp_option_static_route_ip
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2224 proto_tree_add_item(tree
, hf_dhcp_option_static_route_router
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2228 if (tvb_reported_length_remaining(tvb
, offset
) > 0) {
2229 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "Option length isn't a multiple of 8");
2232 return tvb_captured_length(tvb
);
2235 typedef unsigned(*test_option_len_t
)(unsigned);
2237 /* Look for 'encapsulated vendor-specific options' */
2239 test_encapsulated_vendor_options(tvbuff_t
*tvb
, int optoff
, int optend
, test_option_len_t test_len
)
2244 while (optoff
< optend
) {
2245 subopt
= tvb_get_uint8(tvb
, optoff
);
2251 /* We are done, skip any remaining bytes */
2255 /* We expect a length byte next */
2256 if (optoff
>= optend
)
2258 subopt_len
= tvb_get_uint8(tvb
, optoff
);
2261 unsigned expected_subopt_len
= test_len(subopt
);
2262 if (expected_subopt_len
&& expected_subopt_len
!= subopt_len
)
2267 /* Check remaining room for suboption in option */
2268 if (optoff
+ subopt_len
> optend
)
2270 optoff
+= subopt_len
;
2275 /* Note that Option 43 encapsulated vendor-specific options (RFC 2132 8.4)
2276 * treat option 0 as padding and option 255 as end of suboptions, unlike
2277 * Option 125 which does not treat them specially (RFC 3925 4).
2280 dissect_option43_generic_suboption(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
,
2283 unsigned suboptoff
= 0;
2284 unsigned optend
= tvb_reported_length(tvb
);
2286 uint32_t subopt_len
;
2288 proto_tree
*sub_tree
;
2290 item
= proto_tree_add_item(v_tree
, hf_dhcp_option43_suboption
, tvb
, suboptoff
, 1, ENC_NA
);
2291 subopt
= tvb_get_uint8(tvb
, suboptoff
);
2300 if (subopt
== 255) {
2302 /* XXX - Should there be expert info if there are more bytes? */
2306 if (suboptoff
>= optend
) {
2307 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
2308 "Suboption %d: no room left in option for suboption length", subopt
);
2312 sub_tree
= proto_item_add_subtree(item
, ett_dhcp_option43_suboption
);
2313 proto_tree_add_item_ret_uint(sub_tree
, hf_dhcp_suboption_length
, tvb
, suboptoff
, 1, ENC_NA
, &subopt_len
);
2316 if (suboptoff
+subopt_len
> optend
) {
2317 expert_add_info_format(pinfo
, item
, &ei_dhcp_missing_subopt_value
,
2318 "Suboption %d: no room left in option for suboption value", subopt
);
2322 proto_tree_add_item(sub_tree
, hf_dhcp_option43_value
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
2323 suboptoff
+= subopt_len
;
2330 dissect_dhcpopt_vendor_specific_info(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data
)
2332 heur_dtbl_entry_t
*hdtbl_entry
;
2334 if (!dissector_try_heuristic(dhcp_vendor_info_subdissector
, tvb
, pinfo
, tree
, &hdtbl_entry
, data
)) {
2336 if (test_encapsulated_vendor_options(tvb
, offset
, tvb_reported_length(tvb
), NULL
)) {
2337 /* Generic encapsulated options per RFC 2132 8.4 */
2338 while (tvb_reported_length_remaining(tvb
, offset
)) {
2339 offset
+= dissect_option43_generic_suboption(pinfo
, proto_tree_get_parent(tree
), tree
, tvb_new_subset_remaining(tvb
, offset
));
2342 /* Default Vendor-Specific Info.. display in bytes */
2343 proto_tree_add_item(tree
, hf_dhcp_option43_value
, tvb
, offset
, tvb_reported_length(tvb
), ENC_NA
);
2347 return tvb_captured_length(tvb
);
2351 dissect_dhcpopt_option_overload(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data
)
2354 dhcp_option_data_t
*option_data
= (dhcp_option_data_t
*)data
;
2356 if (tvb_reported_length(tvb
) < 1) {
2357 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length isn't >= 1");
2361 proto_tree_add_item(tree
, hf_dhcp_option_option_overload
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2362 if (option_data
->overload
== NULL
) {
2363 // Option Overload inside the overloaded fields is nonsensical
2364 expert_add_info(pinfo
, tree
, &ei_dhcp_opt_overload_wrong_field
);
2367 return tvb_captured_length(tvb
);
2371 dissect_dhcpopt_dhcp(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
2375 proto_tree_add_item_ret_uint(tree
, hf_dhcp_option_dhcp
, tvb
, 0, 1, ENC_NA
, &type
);
2376 /* Show the message type name on the Message Type option, and in the protocol root */
2377 proto_item_append_text(tree
, " (%s)", val_to_str(type
, opt53_text
, "Unknown Message Type (0x%02x)"));
2378 proto_item_append_text(proto_item_get_parent(tree
), " (%s)", val_to_str(type
, opt53_text
, "Unknown Message Type (0x%02x)"));
2380 return tvb_captured_length(tvb
);
2384 dissect_dhcpopt_param_request_list(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
2389 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
2390 byte
= tvb_get_uint8(tvb
, offset
);
2391 proto_tree_add_uint_format_value(tree
, hf_dhcp_option_parameter_request_list_item
,
2392 tvb
, offset
, 1, byte
, "(%d) %s", byte
, dhcp_get_opt_text(byte
));
2396 return tvb_captured_length(tvb
);
2400 dissect_dhcpopt_vendor_class_identifier(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data
)
2402 heur_dtbl_entry_t
*hdtbl_entry
;
2405 * XXX - RFC 2132 says this is a string of octets;
2406 * should we check for non-printables?
2408 proto_tree_add_item(tree
, hf_dhcp_option_vendor_class_id
, tvb
, 0, tvb_reported_length(tvb
), ENC_ASCII
);
2409 dissector_try_heuristic(dhcp_vendor_id_subdissector
, tvb
, pinfo
, tree
, &hdtbl_entry
, data
);
2411 return tvb_captured_length(tvb
);
2415 dissect_dhcpopt_client_identifier(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2418 int length
= tvb_reported_length(tvb
);
2422 byte
= tvb_get_uint8(tvb
, offset
);
2426 /* We *MAY* use hwtype/hwaddr. If we have 7 bytes, I'll
2427 guess that the first is the hwtype, and the last 6
2429 /* See https://www.iana.org/assignments/arp-parameters */
2430 /* RFC2132 9.14 Client-identifier has the following to say:
2431 A hardware type of 0 (zero) should be used when the value
2432 field contains an identifier other than a hardware address
2433 (e.g. a fully qualified domain name). */
2435 if (length
== 7 && byte
> 0 && byte
< 48) {
2436 proto_tree_add_item(tree
, hf_dhcp_hw_type
, tvb
, offset
, 1, ENC_NA
);
2438 if (byte
== ARPHRD_ETHER
|| byte
== ARPHRD_IEEE802
)
2439 proto_tree_add_item(tree
, hf_dhcp_hw_ether_addr
, tvb
, offset
+1, 6, ENC_NA
);
2441 proto_tree_add_string(tree
, hf_dhcp_client_hardware_address
, tvb
, offset
+1, 6,
2442 tvb_arphrdaddr_to_str(pinfo
->pool
, tvb
, offset
+1, 6, byte
));
2443 } else if (length
== 17 && byte
== 0) {
2444 /* Identifier is a UUID */
2445 proto_tree_add_item(tree
, hf_dhcp_client_identifier_uuid
, tvb
, offset
+ 1, 16, dhcp_uuid_endian
);
2447 /* From RFC 4361 paragraph 6.1 DHCPv4 Client Behavior:
2448 To send an RFC 3315-style binding identifier in a DHCPv4 'client
2449 identifier' option, the type of the 'client identifier' option is set
2451 } else if (byte
== 255) {
2455 /* The type field is immediately followed by the IAID, which is
2456 an opaque 32-bit quantity */
2457 proto_tree_add_string(tree
, hf_dhcp_client_id_iaid
, tvb
, offset
+1, 4,
2458 tvb_arphrdaddr_to_str(pinfo
->pool
, tvb
, offset
+1, 4, byte
));
2460 duidtype
= tvb_get_ntohs(tvb
, offset
);
2461 proto_tree_add_item(tree
, hf_dhcp_client_id_duid_type
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2465 expert_add_info(pinfo
, tree
, &ei_dhcp_mal_duid
);
2468 hwtype
=tvb_get_ntohs(tvb
, offset
+ 2);
2469 proto_tree_add_item(tree
, hf_dhcp_client_identifier_duid_llt_hw_type
,
2470 tvb
, offset
+ 2, 2, ENC_BIG_ENDIAN
);
2472 /* XXX seconds since Jan 1 2000 */
2473 proto_tree_add_item(tree
, hf_dhcp_client_identifier_time
, tvb
, offset
+ 4, 4, ENC_BIG_ENDIAN
);
2475 proto_tree_add_string(tree
, hf_dhcp_client_identifier_link_layer_address
, tvb
, offset
+ 8,
2476 length
- 13, tvb_arphrdaddr_to_str(pinfo
->pool
, tvb
, offset
+8, length
-13, hwtype
));
2477 if(DHCP_HW_IS_ETHER(hwtype
, length
-13)) {
2478 proto_tree_add_item(tree
, hf_dhcp_client_identifier_link_layer_address_ether
,
2479 tvb
, offset
+8, length
-13, ENC_NA
);
2485 expert_add_info(pinfo
, tree
, &ei_dhcp_mal_duid
);
2488 proto_tree_add_item(tree
, hf_dhcp_client_identifier_enterprise_num
, tvb
, offset
+ 2, 4, ENC_BIG_ENDIAN
);
2490 proto_tree_add_item(tree
, hf_dhcp_client_identifier
, tvb
, offset
+ 6, length
- 11, ENC_NA
);
2495 expert_add_info(pinfo
, tree
, &ei_dhcp_mal_duid
);
2498 hwtype
=tvb_get_ntohs(tvb
, offset
+ 2);
2499 proto_tree_add_item(tree
, hf_dhcp_client_identifier_duid_ll_hw_type
,
2500 tvb
, offset
+ 2, 2, ENC_BIG_ENDIAN
);
2503 proto_tree_add_string(tree
, hf_dhcp_client_identifier_link_layer_address
, tvb
, offset
+ 4,
2504 length
- 9, tvb_arphrdaddr_to_str(pinfo
->pool
, tvb
, offset
+4, length
-9, hwtype
));
2505 if(DHCP_HW_IS_ETHER(hwtype
, length
-9)) {
2506 proto_tree_add_item(tree
, hf_dhcp_client_identifier_link_layer_address_ether
,
2507 tvb
, offset
+4, length
-9, ENC_NA
);
2512 } else if (byte
== 0 && length
> 1) {
2513 /* identifier other than a hardware address (e.g. a fully qualified domain name) */
2514 proto_tree_add_item(tree
, hf_dhcp_client_identifier_type
, tvb
, offset
, 1, ENC_NA
);
2515 proto_tree_add_item(tree
, hf_dhcp_client_identifier_undef
, tvb
, offset
+1, length
-1, ENC_ASCII
);
2517 /* otherwise, it's opaque data */
2520 return tvb_captured_length(tvb
);
2524 dissect_dhcpopt_user_class_information(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2526 unsigned char user_class_instance_index
= 0;
2528 proto_item
*vtix
, *len_item
;
2529 proto_tree
*o77_v_tree
;
2530 unsigned class_length
, uci_len
= tvb_reported_length(tvb
);
2532 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length isn't >= 2");
2536 /* First byte is the length of User Class data. If it is zero, then let's assume this
2537 * is a Microsoft variant that has the two-byte length field with most-significant byte
2540 uint16_t ms_data_length
= tvb_get_uint16(tvb
, offset
, ENC_BIG_ENDIAN
);
2541 if (ms_data_length
<= 0xff) {
2542 /* MSB is zero, this is Microsoft */
2543 proto_tree_add_uint(tree
, hf_dhcp_option77_user_class_binary_data_length
, tvb
, offset
, 2, ms_data_length
);
2545 proto_tree_add_item(tree
, hf_dhcp_option77_user_class_binary_data
, tvb
, offset
, ms_data_length
, ENC_STRING
);
2546 offset
+= ms_data_length
;
2547 /* User Class Binary Data is padded to 4-byte boundary */
2548 uint16_t padding_length
= (4 - (ms_data_length
% 4)) & 0x3;
2549 if (padding_length
> 0) {
2550 proto_tree_add_item(tree
, hf_dhcp_option77_user_class_padding
, tvb
, offset
, padding_length
, ENC_NA
);
2551 offset
+= padding_length
;
2554 proto_tree_add_item_ret_uint(tree
, hf_dhcp_option77_user_class_name_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &len
);
2556 proto_tree_add_item(tree
, hf_dhcp_option77_user_class_name
, tvb
, offset
, len
, ENC_UTF_16
);
2558 proto_tree_add_item_ret_uint(tree
, hf_dhcp_option77_user_class_description_length
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &len
);
2560 proto_tree_add_item(tree
, hf_dhcp_option77_user_class_description
, tvb
, offset
, len
, ENC_UTF_16
);
2562 return tvb_captured_length(tvb
);
2565 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
2566 class_length
= tvb_get_uint8(tvb
, offset
);
2567 if (class_length
>= uci_len
) {
2568 /* Having the sum of the User Class data lengths exceed the total User Option Information length (uci_len)
2569 * is a violation of RFC 3004. In that case the remaining data is treated as a non-conformant (text) option.
2570 * This check will also catch the Microsoft 'variation' implementation (when Vendor class identifier contains
2571 * "MSFT 5.0") such as "RRAS.Microsoft" and others like "iPXE".
2572 * In the unlikely case that the first character can be interpreted as a valid length the next iteration
2573 * of this while loop will catch that.
2574 * https://gitlab.com/wireshark/wireshark/-/issues/16349
2575 * https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dhcpe/fe8a2dd4-1e8c-4546-bacd-4ae10de02058
2577 proto_item
*expert_ti
= proto_tree_add_item(tree
, hf_dhcp_option77_user_class_text
, tvb
, offset
, uci_len
, ENC_ASCII
);
2578 expert_add_info(pinfo
, expert_ti
, &ei_dhcp_nonstd_option_data
);
2582 /* Create subtree for instance of User Class. */
2583 vtix
= proto_tree_add_uint_format_value(tree
, hf_dhcp_option77_user_class
,
2584 tvb
, offset
, 1, user_class_instance_index
, "[%d]", user_class_instance_index
);
2585 o77_v_tree
= proto_item_add_subtree(vtix
, ett_dhcp_option77_instance
);
2587 /* Add length for instance of User Class. */
2588 len_item
= proto_tree_add_uint(o77_v_tree
, hf_dhcp_option77_user_class_length
, tvb
, offset
, 1, class_length
);
2589 proto_item_set_len(vtix
, class_length
+1);
2592 if (class_length
== 0) {
2593 expert_add_info_format(pinfo
, len_item
, &ei_dhcp_bad_length
, "UC_Len_%u isn't >= 1 (UC_Len_%u = 0)", user_class_instance_index
, user_class_instance_index
);
2597 /* Add data for instance of User Class. */
2598 proto_tree_add_item(o77_v_tree
, hf_dhcp_option77_user_class_data
, tvb
, offset
, class_length
, ENC_NA
);
2600 offset
+= class_length
;
2601 uci_len
-= class_length
+ 1;
2602 user_class_instance_index
++;
2605 return tvb_captured_length(tvb
);
2609 dissect_dhcpopt_slp_directory_agent(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2614 if (tvb_reported_length(tvb
) < 1) {
2615 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length isn't >= 1");
2619 proto_tree_add_item_ret_uint(tree
, hf_dhcp_option_slp_directory_agent_value
, tvb
, offset
, 1, ENC_BIG_ENDIAN
, &byte
);
2623 if (tvb_reported_length_remaining(tvb
, offset
) == 0)
2629 while (tvb_reported_length_remaining(tvb
, offset
) >= 4) {
2630 proto_tree_add_item(tree
, hf_dhcp_option_slp_directory_agent_slpda_address
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2634 if (tvb_reported_length_remaining(tvb
, offset
) > 0) {
2635 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "Option length isn't a multiple of 4");
2638 return tvb_captured_length(tvb
);
2642 dissect_dhcpopt_slp_service_scope(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
2646 proto_tree_add_item(tree
, hf_dhcp_option_slp_service_scope_value
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2649 proto_tree_add_item(tree
, hf_dhcp_option_slp_service_scope_string
, tvb
, offset
, tvb_reported_length_remaining(tvb
, offset
), ENC_ASCII
);
2651 return tvb_captured_length(tvb
);
2655 dissect_dhcpopt_client_full_domain_name(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2657 static int * const fqdn_hf_flags
[] = {
2666 int offset
= 0, length
= tvb_reported_length(tvb
);
2667 const unsigned char *dns_name
;
2671 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length isn't >= 3");
2675 fqdn_flags
= tvb_get_uint8(tvb
, offset
);
2676 proto_tree_add_bitmask(tree
, tvb
, offset
, hf_dhcp_fqdn_flags
,
2677 ett_dhcp_fqdn_flags
, fqdn_hf_flags
, ENC_BIG_ENDIAN
);
2679 /* XXX: use code from packet-dns for return code decoding */
2680 proto_tree_add_item(tree
, hf_dhcp_fqdn_rcode1
, tvb
, offset
+1, 1, ENC_BIG_ENDIAN
);
2681 /* XXX: use code from packet-dns for return code decoding */
2682 proto_tree_add_item(tree
, hf_dhcp_fqdn_rcode2
, tvb
, offset
+2, 1, ENC_BIG_ENDIAN
);
2685 if (fqdn_flags
& F_FQDN_E
) {
2686 get_dns_name(tvb
, offset
+3, length
-3, offset
+3, (const char **)&dns_name
, &dns_name_len
);
2687 proto_tree_add_string(tree
, hf_dhcp_fqdn_name
,
2688 tvb
, offset
+3, length
-3, format_text(pinfo
->pool
, dns_name
, dns_name_len
));
2690 proto_tree_add_item(tree
, hf_dhcp_fqdn_asciiname
, tvb
, offset
+3, length
-3, ENC_ASCII
);
2694 return tvb_captured_length(tvb
);
2698 dissect_dhcpopt_novell_servers(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2702 /* Option 85 can be sent as a string */
2703 /* Added by Greg Morris (gmorris[AT]novell.com) */
2704 if (novell_string
) {
2705 proto_tree_add_item(tree
, hf_dhcp_option_novell_dss_string
, tvb
, offset
, tvb_reported_length(tvb
), ENC_ASCII
);
2708 while (tvb_reported_length_remaining(tvb
, offset
) >= 4) {
2710 proto_tree_add_item(tree
, hf_dhcp_option_novell_dss_ip
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2714 if (tvb_reported_length_remaining(tvb
, offset
) > 0) {
2715 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "Option length isn't a multiple of 4");
2719 return tvb_captured_length(tvb
);
2723 dissect_dhcpopt_dhcp_authentication(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data
)
2726 dhcp_option_data_t
*option_data
= (dhcp_option_data_t
*)data
;
2727 uint32_t protocol
, rdm
;
2730 if (tvb_reported_length(tvb
) < 11) {
2731 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length isn't >= 11");
2735 proto_tree_add_item_ret_uint(tree
, hf_dhcp_option_dhcp_authentication_protocol
, tvb
, offset
, 1, ENC_BIG_ENDIAN
, &protocol
);
2738 algorithm
= tvb_get_uint8(tvb
, offset
);
2741 case AUTHEN_PROTO_DELAYED_AUTHEN
:
2742 proto_tree_add_item(tree
, hf_dhcp_option_dhcp_authentication_alg_delay
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2746 proto_tree_add_item(tree
, hf_dhcp_option_dhcp_authentication_algorithm
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2751 proto_tree_add_item_ret_uint(tree
, hf_dhcp_option_dhcp_authentication_rdm
, tvb
, offset
, 1, ENC_BIG_ENDIAN
, &rdm
);
2756 case AUTHEN_RDM_MONOTONIC_COUNTER
:
2757 proto_tree_add_item(tree
, hf_dhcp_option_dhcp_authentication_rdm_replay_detection
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2761 proto_tree_add_item(tree
, hf_dhcp_option_dhcp_authentication_rdm_rdv
, tvb
, offset
, 8, ENC_ASCII
);
2768 case AUTHEN_PROTO_DELAYED_AUTHEN
:
2769 switch (algorithm
) {
2771 case AUTHEN_DELAYED_ALGO_HMAC_MD5
:
2772 if (option_data
->dhcp_type
&& !strcmp(option_data
->dhcp_type
, OPT53_DISCOVER
)) {
2773 /* Discover has no Secret ID nor HMAC MD5 Hash */
2776 if (tvb_reported_length_remaining(tvb
, offset
) < 20) {
2777 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length isn't >= 20");
2781 proto_tree_add_item(tree
, hf_dhcp_option_dhcp_authentication_secret_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2783 proto_tree_add_item(tree
, hf_dhcp_option_dhcp_authentication_hmac_md5_hash
, tvb
, offset
, 16, ENC_NA
);
2788 if (tvb_reported_length_remaining(tvb
, offset
) == 0)
2791 proto_tree_add_item(tree
, hf_dhcp_option_dhcp_authentication_information
, tvb
, offset
, tvb_reported_length_remaining(tvb
, offset
), ENC_ASCII
);
2797 if (tvb_reported_length_remaining(tvb
, offset
) == 0)
2800 proto_tree_add_item(tree
, hf_dhcp_option_dhcp_authentication_information
, tvb
, offset
, tvb_reported_length_remaining(tvb
, offset
), ENC_ASCII
);
2804 return tvb_captured_length(tvb
);
2808 dissect_dhcpopt_client_architecture(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2812 while (tvb_reported_length_remaining(tvb
, offset
) > 1) {
2813 uint32_t architecture_id
;
2816 pi
= proto_tree_add_item_ret_uint(tree
, hf_dhcp_option_client_system_architecture
, tvb
, offset
, 2, ENC_BIG_ENDIAN
, &architecture_id
);
2820 * Some Client Architecture IDs are widely misused. For
2821 * details, refer to the comment at the definition of
2824 * The most common problem is a client using architecture ID 9
2825 * when performing an EFI x64 boot. Windows Server 2008 WDS
2826 * does not recognize ID 9, but most other DHCP servers
2827 * (including newer versions of WDS) silently map architecture
2828 * ID 9 to x64 in order to accommodate these clients.
2830 if (architecture_id
== 9) {
2831 expert_add_info_format(pinfo
, pi
, &ei_dhcp_option93_client_arch_ambiguous
, "Client Architecture ID 9 is often incorrectly used for EFI x64");
2835 * Technically, architecture ID 7 is ambiguous for the same
2836 * reason, but it's extremely unlikely to be a real world
2837 * problem, so a warning would probably just be unwelcome
2841 if (tvb_reported_length_remaining(tvb
, offset
) > 0) {
2842 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "Option length isn't a multiple of 2");
2845 return tvb_captured_length(tvb
);
2849 dissect_dhcpopt_client_network_interface_id(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
2854 id_type
= tvb_get_uint8(tvb
, offset
);
2857 if (id_type
== 0x01) {
2858 proto_tree_add_item(tree
, hf_dhcp_option_client_network_id_major_ver
,
2859 tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
2861 proto_tree_add_item(tree
, hf_dhcp_option_client_network_id_minor_ver
,
2862 tvb
, offset
, 1, ENC_LITTLE_ENDIAN
);
2865 return tvb_captured_length(tvb
);
2869 dissect_dhcpopt_client_identifier_uuid(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2871 int offset
= 0, length
= tvb_reported_length(tvb
);
2875 byte
= tvb_get_uint8(tvb
, offset
);
2879 /* We *MAY* use hwtype/hwaddr. If we have 7 bytes, I'll
2880 guess that the first is the hwtype, and the last 6
2882 /* See https://www.iana.org/assignments/arp-parameters */
2883 /* RFC2132 9.14 Client-identifier has the following to say:
2884 A hardware type of 0 (zero) should be used when the value
2885 field contains an identifier other than a hardware address
2886 (e.g. a fully qualified domain name). */
2888 if (length
== 7 && byte
> 0 && byte
< 48) {
2889 proto_tree_add_item(tree
, hf_dhcp_hw_type
, tvb
, offset
, 1, ENC_NA
);
2890 if (byte
== ARPHRD_ETHER
|| byte
== ARPHRD_IEEE802
)
2891 proto_tree_add_item(tree
, hf_dhcp_hw_ether_addr
, tvb
, offset
+1, 6, ENC_NA
);
2893 proto_tree_add_string(tree
, hf_dhcp_client_hardware_address
, tvb
, offset
+1, 6,
2894 tvb_arphrdaddr_to_str(pinfo
->pool
, tvb
, offset
+1, 6, byte
));
2895 } else if (length
== 17 && byte
== 0) {
2896 /* Identifier is a UUID */
2897 proto_tree_add_item(tree
, hf_dhcp_client_identifier_uuid
, tvb
, offset
+ 1, 16, dhcp_uuid_endian
);
2899 /* otherwise, it's opaque data */
2902 return tvb_captured_length(tvb
);
2906 dissect_dhcpopt_civic_location(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2910 if (tvb_reported_length(tvb
) >= 3)
2912 proto_tree_add_item(tree
, hf_dhcp_option_civic_location_what
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2914 proto_tree_add_item(tree
, hf_dhcp_option_civic_location_country
, tvb
, offset
, 2, ENC_ASCII
);
2917 while (tvb_reported_length_remaining(tvb
, offset
) >= 2)
2920 proto_tree_add_item(tree
, hf_dhcp_option_civic_location_ca_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2922 proto_tree_add_item_ret_uint(tree
, hf_dhcp_option_civic_location_ca_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
, &calength
);
2928 if (tvb_reported_length_remaining(tvb
, offset
) >= (int)calength
)
2930 proto_tree_add_item(tree
, hf_dhcp_option_civic_location_ca_value
, tvb
, offset
, calength
, ENC_ASCII
);
2935 expert_add_info(pinfo
, tree
, &ei_dhcp_option_civic_location_bad_cattype
);
2941 return tvb_captured_length(tvb
);
2945 dissect_dhcpopt_name_server_search(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2947 int offset
= 0, length
= tvb_reported_length(tvb
);
2951 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length isn't >= 2");
2953 } else if (length
& 1) {
2954 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length (%u) isn't even number", length
);
2958 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
2959 ns
= tvb_get_ntohs(tvb
, offset
);
2960 /* XXX - Make this a value_string */
2962 case RFC2937_LOCAL_NAMING_INFORMATION
:
2963 proto_tree_add_string(tree
, hf_dhcp_option_dhcp_name_service_search_option
, tvb
, offset
, 2, "Local naming information (e.g., an /etc/hosts file on a UNIX machine) (0)");
2965 case RFC2937_DOMAIN_NAME_SERVER_OPTION
:
2966 proto_tree_add_string(tree
, hf_dhcp_option_dhcp_name_service_search_option
, tvb
, offset
, 2, "Domain Name Server Option (6)");
2968 case RFC2937_NETWORK_INFORMATION_SERVERS_OPTION
:
2969 proto_tree_add_string(tree
, hf_dhcp_option_dhcp_name_service_search_option
, tvb
, offset
, 2, "Network Information Servers Option (41)");
2971 case RFC2937_NETBIOS_OVER_TCP_IP_NAME_SERVER_OPTION
:
2972 proto_tree_add_string(tree
, hf_dhcp_option_dhcp_name_service_search_option
, tvb
, offset
, 2, "NetBIOS over TCP/IP Name Server Option (44)");
2974 case RFC2937_NETWORK_INFORMATION_SERVICE_PLUS_SERVERS_OPTION
:
2975 proto_tree_add_string(tree
, hf_dhcp_option_dhcp_name_service_search_option
, tvb
, offset
, 2, "Network Information Service+ Servers Option (65)");
2978 expert_add_info_format(pinfo
, tree
, &ei_dhcp_option_dhcp_name_service_invalid
,
2979 "Invalid Name Service (%u). RFC 2937 defines only 0, 6, 41, 44, and 65 as possible values.", ns
);
2985 return tvb_captured_length(tvb
);
2989 dissect_dhcpopt_dhcp_domain_search(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2991 int length
= tvb_reported_length(tvb
);
2994 const unsigned char *dns_name
;
2997 /* Domain Names - Implementation And Specification (RFC 1035) */
2999 /* We will display the information about fqdn */
3002 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
3003 /* use the get_dns_name method that manages all techniques of RFC 1035 (compression pointer and so on) */
3004 consumedx
= get_dns_name(tvb
, offset
,
3005 length
, 0, (const char **)&dns_name
, &dns_name_len
);
3006 name_out
= format_text(pinfo
->pool
, dns_name
, dns_name_len
);
3007 proto_tree_add_string(tree
, hf_dhcp_option_dhcp_dns_domain_search_list_fqdn
, tvb
, offset
, consumedx
, name_out
);
3008 offset
+= consumedx
;
3011 return tvb_captured_length(tvb
);
3015 dissect_dhcpopt_sip_servers(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3017 int length
= tvb_reported_length(tvb
);
3019 const unsigned char *dns_name
;
3023 /* Domain Names - Implementation And Specification (RFC 1035) */
3024 /* We will display the information about SIP server */
3027 proto_tree_add_item_ret_uint(tree
, hf_dhcp_option_sip_server_enc
, tvb
, offset
, 1, ENC_NA
, &enc
);
3031 case RFC_3361_ENC_FQDN
: {
3034 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length isn't >= 3 (len = %u)", length
);
3038 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
3039 /* use the get_dns_name method that manages all techniques of RFC 1035 (compression pointer and so on) */
3040 consumedx
= get_dns_name(tvb
, offset
, length
,
3041 1 /* ignore enc */, (const char **)&dns_name
, &dns_name_len
);
3042 name_out
= format_text(pinfo
->pool
, dns_name
, dns_name_len
);
3044 proto_tree_add_string(tree
, hf_dhcp_option_sip_server_name
, tvb
, offset
, consumedx
, name_out
);
3045 offset
+= consumedx
;
3049 case RFC_3361_ENC_IPADDR
:
3051 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length isn't >= 5 (len = %u)", length
);
3054 /* x % 2^n == x & (2^n - 1) note : (assuming x is a positive integer) */
3055 if ((length
- 1) & 3) {
3056 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length isn't a multiple of 4 plus 1 (len = %u).", length
);
3059 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
3060 proto_tree_add_item(tree
, hf_dhcp_option_sip_server_address
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3065 expert_add_info_format(pinfo
, tree
, &ei_dhcp_option_sip_server_address_encoding
, "RFC 3361 defines only 0 and 1 for Encoding byte (Encoding = %u).", enc
);
3069 return tvb_captured_length(tvb
);
3073 dissect_dhcpopt_classless_static_route(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3076 int i
, mask_width
, significant_octets
;
3077 proto_item
* route_item
;
3079 /* minimum length is 5 bytes */
3080 if (tvb_reported_length(tvb
) < 5) {
3081 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length isn't >= 5");
3084 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
3085 mask_width
= tvb_get_uint8(tvb
, offset
);
3086 /* mask_width <= 32 */
3087 if (mask_width
> 32) {
3088 expert_add_info_format(pinfo
, tree
, &ei_dhcp_option_classless_static_route
, "Mask width (%d) > 32", mask_width
);
3091 significant_octets
= (mask_width
+ 7) / 8;
3092 route_item
= proto_tree_add_bytes_format(tree
, hf_dhcp_option_classless_static_route
, tvb
, offset
,
3093 1 + significant_octets
+ 4, NULL
, " ");
3095 /* significant octets + router(4) */
3096 if (tvb_reported_length_remaining(tvb
, offset
+ significant_octets
+ 4) < 0) {
3097 expert_add_info_format(pinfo
, route_item
, &ei_dhcp_bad_length
, "Remaining length (%d) < %d bytes", tvb_reported_length_remaining(tvb
, offset
), significant_octets
+ 4);
3101 proto_item_append_text(route_item
, "default");
3103 for(i
= 0 ; i
< significant_octets
; i
++) {
3105 proto_item_append_text(route_item
, ".");
3106 proto_item_append_text(route_item
, "%d", tvb_get_uint8(tvb
, offset
++));
3108 for(i
= significant_octets
; i
< 4 ; i
++)
3109 proto_item_append_text(route_item
, ".0");
3110 proto_item_append_text(route_item
, "/%d", mask_width
);
3112 proto_item_append_text(route_item
, "-%s", tvb_ip_to_str(pinfo
->pool
, tvb
, offset
));
3116 return tvb_captured_length(tvb
);
3120 dissect_dhcpopt_coordinate_based_location(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3122 int offset
= 0, length
= tvb_reported_length(tvb
);
3127 unsigned char lci
[16];
3128 struct rfc3825_location_fixpoint_t location_fp
;
3129 struct rfc3825_location_decimal_t location
;
3131 tvb_memcpy(tvb
, lci
, offset
, 16);
3133 /* convert lci encoding into fixpoint location */
3134 rfc3825_lci_to_fixpoint(lci
, &location_fp
);
3136 /* convert location from decimal to fixpoint */
3137 ret
= rfc3825_fixpoint_to_decimal(&location_fp
, &location
);
3139 if (ret
!= RFC3825_NOERROR
) {
3140 ti
= proto_tree_add_uint(tree
, hf_dhcp_option_rfc3825_error
, tvb
, offset
, 1, ret
);
3141 proto_item_set_len(ti
, length
);
3143 proto_tree_add_double_format_value(tree
, hf_dhcp_option_rfc3825_latitude
, tvb
, offset
, 5, location
.latitude
, "%15.10f", location
.latitude
);
3144 proto_tree_add_double_format_value(tree
, hf_dhcp_option_rfc3825_longitude
, tvb
, offset
+5, 5, location
.longitude
, "%15.10f", location
.longitude
);
3145 proto_tree_add_double_format_value(tree
, hf_dhcp_option_rfc3825_latitude_res
, tvb
, offset
, 1, location
.latitude_res
, "%15.10f", location
.latitude_res
);
3146 proto_tree_add_double_format_value(tree
, hf_dhcp_option_rfc3825_longitude_res
, tvb
, offset
+5, 1, location
.longitude_res
, "%15.10f", location
.longitude_res
);
3147 proto_tree_add_double_format_value(tree
, hf_dhcp_option_rfc3825_altitude
, tvb
, offset
+12, 4, location
.altitude
, "%15.10f", location
.altitude
);
3148 proto_tree_add_double_format_value(tree
, hf_dhcp_option_rfc3825_altitude_res
, tvb
, offset
+10, 2, location
.altitude_res
, "%15.10f", location
.altitude_res
);
3149 proto_tree_add_uint(tree
, hf_dhcp_option_rfc3825_altitude_type
, tvb
, offset
+10, 1, location
.altitude_type
);
3150 proto_tree_add_uint(tree
, hf_dhcp_option_rfc3825_map_datum
, tvb
, offset
+15, 1, location
.datum_type
);
3152 } else if (length
< 69) { /* CableLabs DSS_ID */
3155 proto_tree_add_item(tree
, hf_dhcp_option_cl_dss_id_option
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3156 proto_tree_add_item(tree
, hf_dhcp_option_cl_dss_id_len
, tvb
, offset
+1, 1, ENC_BIG_ENDIAN
);
3157 s_len
= tvb_get_uint8(tvb
, offset
+1);
3158 proto_tree_add_item(tree
, hf_dhcp_option_cl_dss_id
, tvb
, offset
+2, s_len
, ENC_ASCII
);
3160 if (length
> s_len
+2) { /* Second DSS_ID*/
3162 proto_tree_add_item(tree
, hf_dhcp_option_cl_dss_id_option
, tvb
, offset
+2+s_len
, 1, ENC_BIG_ENDIAN
);
3163 proto_tree_add_item(tree
, hf_dhcp_option_cl_dss_id_len
, tvb
, offset
+1+2+s_len
, 1, ENC_BIG_ENDIAN
);
3164 s_len
= tvb_get_uint8(tvb
, offset
+1+2+s_len
);
3165 proto_tree_add_item(tree
, hf_dhcp_option_cl_dss_id
, tvb
, offset
+2+2+s_len
, s_len
, ENC_ASCII
);
3168 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "Invalid length of DHCP option!");
3171 return tvb_captured_length(tvb
);
3175 dissect_dhcpopt_vi_vendor_class(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3178 uint32_t enterprise
= 0;
3179 uint32_t option_data_len
= 0;
3182 proto_item
*eti
, *expert_ti
;
3184 proto_tree
*vcdi_tree
;
3186 if (tvb_reported_length(tvb
) == 1) {
3187 /* CableLab specific */
3188 proto_tree_add_item(tree
, hf_dhcp_option_vi_class_cl_address_mode
, tvb
, 0, 1, ENC_BIG_ENDIAN
);
3192 while (tvb_reported_length_remaining(tvb
, offset
) >= 5) {
3194 eti
= proto_tree_add_item_ret_uint(tree
, hf_dhcp_option_vi_class_enterprise
, tvb
, offset
, 4, ENC_BIG_ENDIAN
, &enterprise
);
3195 e_tree
= proto_item_add_subtree(eti
, ett_dhcp_option
);
3197 proto_tree_add_item_ret_uint(e_tree
, hf_dhcp_option_vi_class_data_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
, &option_data_len
);
3200 s_end
= offset
+ option_data_len
;
3201 if ( tvb_reported_length_remaining(tvb
, s_end
) < 0) {
3205 while (offset
< s_end
) {
3206 tvbuff_t
*enterprise_tvb
= tvb_new_subset_length(tvb
, offset
, option_data_len
);
3207 /* XXX - Do we really want to try the dissector table for *each*
3208 * vendor-class-data for the same enterprise? This tvb is too long on
3209 * subsequent iterations. Only giving the table dissector one attempt
3210 * (and skipping past bytes it doesn't dissect to s_end) might be simpler.
3212 int bytes_dissected
= dissector_try_uint(dhcp_enterprise_class_table
, enterprise
, enterprise_tvb
, pinfo
, e_tree
);
3213 if (bytes_dissected
== 0) {
3214 vcdi_tree
= proto_tree_add_subtree(e_tree
, tvb
, offset
, option_data_len
, ett_dhcp_option124_vendor_class_data_item
, NULL
, "Vendor Class Data Item");
3215 /* According to RFC 3925, *each* vendor-class-data instance has
3216 * its own length, but in practice some vendors have only included
3217 * the overall per-enterprise option length. See the dhcwg m-l:
3218 * https://mailarchive.ietf.org/arch/msg/dhcwg/B4fNsvUR0EHxcrKDsKCf7lBrc3s/
3220 data_len
= tvb_get_uint8(tvb
, offset
);
3221 if (offset
+ data_len
>= s_end
) {
3222 expert_ti
= proto_tree_add_item(vcdi_tree
, hf_dhcp_option_vi_class_data_item_data
, tvb
, offset
, s_end
- offset
, ENC_NA
);
3223 expert_add_info(pinfo
, expert_ti
, &ei_dhcp_nonstd_option_data
);
3227 proto_tree_add_item(vcdi_tree
, hf_dhcp_option_vi_class_data_item_length
, tvb
, offset
, 1, ENC_NA
);
3229 proto_tree_add_item(vcdi_tree
, hf_dhcp_option_vi_class_data_item_data
, tvb
, offset
, data_len
, ENC_NA
);
3231 /* look for next vendor-class-data-item */
3234 offset
+= bytes_dissected
;
3238 /* loop for the next Enterprise number */
3241 if (tvb_reported_length_remaining(tvb
, offset
) > 0) {
3242 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length < 5");
3245 return tvb_captured_length(tvb
);
3249 dissect_dhcpopt_forcerenew_nonce(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
3252 while ( tvb_reported_length_remaining(tvb
, offset
) > 0) {
3253 proto_tree_add_item(tree
, hf_dhcp_option_forcerenew_nonce_algo
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3257 return tvb_captured_length(tvb
);
3261 dissect_dhcpopt_rdnss(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3264 const unsigned char *dns_name
;
3267 if (tvb_reported_length(tvb
) < 10) {
3268 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length must be >= 10");
3271 proto_tree_add_item(tree
, hf_dhcp_option_rdnss_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3272 proto_tree_add_item(tree
, hf_dhcp_option_rdnss_pref
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3274 proto_tree_add_item(tree
, hf_dhcp_option_rdnss_prim_dns_server
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3276 proto_tree_add_item(tree
, hf_dhcp_option_rdnss_sec_dns_server
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3279 get_dns_name(tvb
, offset
, tvb_reported_length_remaining(tvb
,offset
), offset
, (const char **)&dns_name
, &dns_name_len
);
3280 proto_tree_add_string(tree
, hf_dhcp_option_rdnss_domain
, tvb
, offset
,
3281 tvb_reported_length_remaining(tvb
,offset
), format_text(pinfo
->pool
, dns_name
, dns_name_len
));
3283 return tvb_captured_length(tvb
);
3287 dissect_dhcpopt_dhcp_captive_portal(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
3290 ti_cp
= proto_tree_add_item(tree
, hf_dhcp_option_captive_portal
, tvb
, 0, tvb_reported_length(tvb
), ENC_ASCII
);
3291 proto_item_set_url(ti_cp
);
3293 return tvb_captured_length(tvb
);
3297 dissect_dhcpopt_bulk_lease_query_start(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3299 if (tvb_reported_length(tvb
) != 4) {
3300 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length must be 4");
3303 proto_tree_add_item(tree
, hf_dhcp_option_bulk_lease_query_start
, tvb
, 0, 4, ENC_TIME_SECS_NTP
|ENC_BIG_ENDIAN
);
3305 return tvb_captured_length(tvb
);
3309 dissect_dhcpopt_bulk_lease_query_end(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void* data _U_
)
3311 if (tvb_reported_length(tvb
) != 4) {
3312 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length must be 4");
3315 proto_tree_add_item(tree
, hf_dhcp_option_bulk_lease_query_end
, tvb
, 0, 4, ENC_TIME_SECS_NTP
|ENC_BIG_ENDIAN
);
3317 return tvb_captured_length(tvb
);
3321 dissect_dhcpopt_bulk_lease_base_time(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3323 if (tvb_reported_length(tvb
) != 4) {
3324 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length must be 4");
3327 proto_tree_add_item(tree
, hf_dhcp_option_bulk_lease_base_time
, tvb
, 0, 4, ENC_TIME_SECS_NTP
|ENC_BIG_ENDIAN
);
3329 return tvb_captured_length(tvb
);
3333 dissect_dhcpopt_bulk_lease_status_code(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3335 if (tvb_reported_length(tvb
) < 1) {
3336 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length must >= 1");
3339 proto_tree_add_item(tree
, hf_dhcp_option_bulk_lease_status_code
, tvb
, 0, 1, ENC_BIG_ENDIAN
);
3340 if ( tvb_reported_length_remaining(tvb
, 1) > 0) {
3341 proto_tree_add_item(tree
, hf_dhcp_option_bulk_lease_status_message
, tvb
, 1, tvb_reported_length_remaining(tvb
, 1), ENC_UTF_8
);
3344 return tvb_captured_length(tvb
);
3348 dissect_dhcpopt_pcp_server(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3350 proto_tree
*tree_pcp
;
3352 uint8_t list_length
;
3353 uint8_t ip_list_length
;
3356 if (tvb_reported_length(tvb
) < 5) {
3357 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length must >= 5");
3360 while (tvb_reported_length_remaining(tvb
, offset
) >= 5) {
3362 list_length
= tvb_get_uint8(tvb
, offset
);
3363 tree_pcp
= proto_tree_add_subtree(tree
, tvb
, offset
, list_length
, ett_dhcp_option158_pcp_list
,
3364 &ti_pcp
, "PCP server list");
3365 proto_tree_add_item(tree_pcp
, hf_dhcp_option_pcp_list_length
, tvb
, offset
, 1, ENC_NA
);
3367 ip_list_length
+= 1;
3368 while (((list_length
- 1)%4 == 0) && (ip_list_length
< list_length
) && tvb_reported_length_remaining(tvb
,offset
) >= 4) {
3369 proto_tree_add_item(tree_pcp
, hf_dhcp_option_pcp_server
, tvb
, offset
, 4, ENC_NA
);
3371 ip_list_length
+= 4;
3375 return tvb_captured_length(tvb
);
3379 dissect_dhcpopt_portparams(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3381 if (tvb_reported_length(tvb
) != 4) {
3382 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length must be 4");
3385 proto_tree_add_item(tree
, hf_dhcp_option_portparams_offset
, tvb
, 0, 1, ENC_NA
);
3386 proto_tree_add_item(tree
, hf_dhcp_option_portparams_psid_length
, tvb
, 1, 1, ENC_NA
);
3387 proto_tree_add_item(tree
, hf_dhcp_option_portparams_psid
, tvb
, 2, 2, ENC_NA
);
3389 return tvb_captured_length(tvb
);
3393 dissect_dhcpopt_6RD_option(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3397 if (tvb_reported_length(tvb
) < 22) {
3398 expert_add_info(pinfo
, tree
, &ei_dhcp_option_6RD_malformed
);
3402 proto_tree_add_item(tree
, hf_dhcp_option_6RD_ipv4_mask_len
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3403 proto_tree_add_item(tree
, hf_dhcp_option_6RD_prefix_len
, tvb
, offset
+1, 1, ENC_BIG_ENDIAN
);
3404 proto_tree_add_item(tree
, hf_dhcp_option_6RD_prefix
, tvb
, offset
+2, 16, ENC_NA
);
3405 proto_tree_add_item(tree
, hf_dhcp_option_6RD_border_relay_ip
, tvb
, offset
+18, 4, ENC_BIG_ENDIAN
);
3407 /* More Border Relay IPv4 addresses included */
3408 if (tvb_reported_length(tvb
) > 22) {
3410 while (tvb_reported_length_remaining(tvb
, offset
) >= 4) {
3411 proto_tree_add_item(tree
, hf_dhcp_option_6RD_border_relay_ip
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3414 if (tvb_reported_length_remaining(tvb
, offset
) > 0) {
3415 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "Option length isn't a multiple of 4");
3419 return tvb_captured_length(tvb
);
3423 dissect_dhcpopt_avaya_ip_telephone(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3426 proto_tree
*o242avaya_v_tree
;
3427 proto_item
*avaya_ti
;
3428 const char *avaya_option
= NULL
;
3429 wmem_strbuf_t
*avaya_param_buf
= NULL
;
3431 /* minimum length is 5 bytes */
3432 if (tvb_reported_length(tvb
) < 5) {
3433 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "Avaya IP Telephone option length isn't >= 5");
3436 avaya_ti
= proto_tree_add_item_ret_string(tree
, hf_dhcp_option242_avaya
, tvb
, offset
, tvb_reported_length(tvb
), ENC_ASCII
|ENC_NA
, pinfo
->pool
, (const uint8_t **)&avaya_option
);
3437 o242avaya_v_tree
= proto_item_add_subtree(avaya_ti
, ett_dhcp_option242_suboption
);
3438 avaya_param_buf
= wmem_strbuf_new(pinfo
->pool
, "");
3439 char **fields
= wmem_strsplit(pinfo
->pool
, avaya_option
, ",", -1);
3440 for (int i
= 0; fields
[i
]; i
++) {
3441 const char *field
= fields
[i
];
3442 if (!strchr(field
, '=')) {
3443 if (wmem_strbuf_get_len(avaya_param_buf
) == 0) {
3444 expert_add_info_format(pinfo
, avaya_ti
, &ei_dhcp_subopt_unknown_type
, "ERROR, Unknown parameter %s", field
);
3445 offset
+= (int)strlen(field
);
3448 wmem_strbuf_append_printf(avaya_param_buf
,",%s", field
);
3451 if (wmem_strbuf_get_len(avaya_param_buf
) > 0) {
3452 dissect_vendor_avaya_param(o242avaya_v_tree
, pinfo
, avaya_ti
, tvb
, offset
, avaya_param_buf
);
3453 offset
+= (int)wmem_strbuf_get_len(avaya_param_buf
) + 1;
3454 wmem_strbuf_truncate(avaya_param_buf
, 0);
3456 wmem_strbuf_append(avaya_param_buf
, field
);
3459 if (wmem_strbuf_get_len(avaya_param_buf
) > 0) {
3460 dissect_vendor_avaya_param(o242avaya_v_tree
, pinfo
, avaya_ti
, tvb
, offset
, avaya_param_buf
);
3463 return tvb_captured_length(tvb
);
3466 static const value_string option82_suboption_vals
[] = {
3468 { 1, "Agent Circuit ID" },
3469 { 2, "Agent Remote ID" },
3471 { 4, "DOCSIS Device Class" },
3472 { 5, "Link selection" },
3473 { 6, "Subscriber ID" },
3474 { 7, "RADIUS Attributes" },
3475 { 8, "Authentication" },
3476 { 9, "Vendor-Specific Information" },
3478 { 11, "Server ID Override" },
3479 { 12, "Relay Agent Identifier" },
3480 { 13, "Access Technology Type" },
3481 { 14, "Access Network Name" },
3482 { 15, "Access Point Name" },
3483 { 16, "Access Point BSSID" },
3484 { 17, "Access Network Operator ID" },
3485 { 18, "Access Network Operator Realm" },
3486 { 19, "Source Port" },
3487 { 150, "Link selection (Cisco proprietary)" },
3488 { 151, "VRF name/VPN ID" },
3489 { 152, "Server ID Override (Cisco proprietary)" },
3493 #define CL_AI_OPTION_DOCSIS_VERSION 1 /* 82:9:4491:1 */
3494 #define CL_AI_OPTION_DPOE_SYSTEM_VERSION 2 /* 82:9:4491:2 */
3495 #define CL_AI_OPTION_DPOE_SYSTEM_DHCPV4_PBB_SERVICE 4 /* 82:9:4491:4 */
3496 #define CL_AI_OPTION_CMTS_CM_SERVICE_CLASS 5 /* 82:9:4491:5 */
3497 #define CL_AI_OPTION_CMTS_MSO_DEFINED_TEXT 6 /* 82:9:4491:6 */
3498 #define CL_AI_OPTION_SECURE_FILE_TRANSFER_URI 7 /* 82:9:4491:7 */
3500 static const value_string option82_cl_tag_vals
[] = {
3501 { CL_AI_OPTION_DOCSIS_VERSION
, "CMTS DOCSIS version number" },
3502 { CL_AI_OPTION_DPOE_SYSTEM_VERSION
, "DPOE System version number" },
3503 { CL_AI_OPTION_DPOE_SYSTEM_DHCPV4_PBB_SERVICE
, "DPOE System DHCPv4 PBB service option" },
3504 { CL_AI_OPTION_CMTS_CM_SERVICE_CLASS
, "Service Class or QoS Profile Name" },
3505 { CL_AI_OPTION_CMTS_MSO_DEFINED_TEXT
, "MSO Defined Text" },
3506 { CL_AI_OPTION_SECURE_FILE_TRANSFER_URI
, "Secure File Transfer URI" },
3511 dhcp_dhcp_decode_agent_info(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
, tvbuff_t
*tvb
, int optoff
,
3514 int suboptoff
= optoff
;
3515 uint8_t subopt
, idx
, vs_opt
, vs_len
;
3516 int subopt_len
, subopt_end
, datalen
;
3517 uint32_t enterprise
;
3518 proto_item
*vti
, *ti
;
3519 proto_tree
*o82_v_tree
, *o82_sub_tree
;
3520 int clsuboptoff
, clsubopt_end
;
3522 static const struct basic_types_hfs default_hfs
= {
3523 &hf_dhcp_option82_value
,
3524 &hf_dhcp_option82_value_ip_address
,
3525 &hf_dhcp_option82_value_ip_address
,
3526 &hf_dhcp_option82_value_stringz
,
3528 &hf_dhcp_option82_value_8
,
3529 &hf_dhcp_option82_value_16
,
3531 &hf_dhcp_option82_value_32
,
3538 struct opt_info info
;
3540 static const struct opt82_info o82_opt
[]= {
3541 {0, {"nop", bytes
, &hf_dhcp_option82_padding
}}, /* dummy */
3542 {1, {"Agent Circuit ID", bytes
, &hf_dhcp_option82_agent_circuit_id
}}, /* [RFC3046] */
3543 {2, {"Agent Remote ID", bytes
, &hf_dhcp_option82_agent_remote_id
}}, /* [RFC3046] */
3544 {3, {"Reserved", bytes
, &hf_dhcp_option82_reserved
}},
3545 {4, {"DOCSIS Device Class", val_u_long
, &hf_dhcp_option82_docsis_device_class
}}, /* [RFC3256] */
3546 {5, {"Link selection", ipv4
, &hf_dhcp_option82_link_selection
}}, /* [RFC3527] */
3547 {6, {"Subscriber ID", string
, &hf_dhcp_option82_subscriber_id
}}, /* [RFC3993] */ /***** CHECK STRING TYPE */
3548 {7, {"RADIUS Attributes", bytes
, &hf_dhcp_option82_radius_attributes
}}, /* [RFC4014] */
3549 {8, {"Authentication", bytes
, &hf_dhcp_option82_authentication
}}, /* [RFC4030] */
3550 {9, {"Vendor-Specific Information", special
, &hf_dhcp_option82_vi
}}, /* [RFC 4243] */
3551 {10, {"Flags", val_u_byte
, &hf_dhcp_option82_flags
}}, /* [RFC5010] */
3552 {11, {"Server ID Override", ipv4
, &hf_dhcp_option82_server_id_override
}}, /* [RFC 5107] */
3553 {12, {"Relay Agent Identifier", bytes
, &hf_dhcp_option82_relay_agent_id
}}, /* [RFC 6925] */
3554 {13, {"Access Technology Type", bytes
, &hf_dhcp_option82_option_ani_att
}}, /* [RFC7839] */
3555 {14, {"Access Network Name", string
, &hf_dhcp_option82_option_ani_network_name
}}, /* [RFC7839] */
3556 {15, {"Access Point Name", string
, &hf_dhcp_option82_option_ani_ap_name
}}, /* [RFC7839] */
3557 {16, {"Access Point BSSID", special
, &hf_dhcp_option82_option_ani_ap_bssid
}}, /* [RFC7839] */
3558 {17, {"Access Network Operator ID", bytes
, &hf_dhcp_option82_option_ani_operator_id
}}, /* [RFC7839] */
3559 {18, {"Access Network Operator Realm", string
, &hf_dhcp_option82_option_ani_operator_realm
}}, /* [RFC7839] */
3560 {19, {"Source Port", presence
, &hf_dhcp_option82_option_source_port
}}, /* [RFC8357] */
3561 {150, {"Link selection (Cisco proprietary)", ipv4
, &hf_dhcp_option82_link_selection_cisco
}}, /* [RFC3527] */
3562 {151, {"VRF name/VPN ID", special
, &hf_dhcp_option82_vrf_name_vpn_id
}}, /* [RFC2685] */
3563 {152, {"Server ID Override (Cisco proprietary)", ipv4
, &hf_dhcp_option82_server_id_override_cisco
}} /* [RFC 5107] */
3566 subopt
= tvb_get_uint8(tvb
, optoff
);
3569 if (suboptoff
>= optend
) {
3570 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
3571 "Suboption %d: no room left in option for suboption length", subopt
);
3575 subopt_len
= tvb_get_uint8(tvb
, suboptoff
);
3576 vti
= proto_tree_add_uint_format_value(v_tree
, hf_dhcp_option82_suboption
,
3577 tvb
, optoff
, subopt_len
+2, subopt
, "(%d) %s", subopt
, val_to_str_const(subopt
, option82_suboption_vals
, "Unknown"));
3579 o82_v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option82_suboption
);
3580 proto_tree_add_item(o82_v_tree
, hf_dhcp_suboption_length
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
);
3583 subopt_end
= suboptoff
+subopt_len
;
3584 if (subopt_end
> optend
) {
3585 expert_add_info_format(pinfo
, vti
, &ei_dhcp_missing_subopt_value
,
3586 "Suboption %d: no room left in option for suboption value", subopt
);
3590 for (idx
= 0; idx
< array_length(o82_opt
); idx
++) {
3591 if (o82_opt
[idx
].id
== subopt
) {
3596 ti
= proto_tree_add_item(o82_v_tree
, hf_dhcp_option82_value
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
3598 if ( (idx
>= 1 ) && (idx
< array_length(o82_opt
)) ) {
3599 proto_item_set_hidden(ti
);
3600 if (o82_opt
[idx
].info
.ftype
== special
) {
3604 while (suboptoff
< subopt_end
) {
3605 enterprise
= tvb_get_ntohl(tvb
, suboptoff
);
3606 vti
= proto_tree_add_item(o82_v_tree
, hf_dhcp_option82_vi_enterprise
, tvb
, suboptoff
, 4, ENC_BIG_ENDIAN
);
3609 o82_sub_tree
= proto_item_add_subtree(vti
, ett_dhcp_option82_suboption9
);
3610 datalen
= tvb_get_uint8(tvb
, suboptoff
);
3611 proto_tree_add_item(o82_sub_tree
, hf_dhcp_option82_vi_data_length
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
);
3614 switch (enterprise
) {
3615 case VENDOR_CABLELABS
: /* CableLabs */
3616 /* Compare CL-SP-CANN-DHCP-Reg-I06-110210 (2011) and
3617 * CL-SP-CANN-DHCP-Reg-I13-160317 (2016) */
3618 clsuboptoff
= suboptoff
;
3619 clsubopt_end
= clsuboptoff
+ datalen
;
3620 while (clsuboptoff
< clsubopt_end
) {
3621 vs_opt
= tvb_get_uint8(tvb
, clsuboptoff
);
3622 vs_len
= tvb_get_uint8(tvb
, clsuboptoff
+1);
3623 if (vs_opt
== CL_AI_OPTION_DOCSIS_VERSION
&&
3626 /* Superseded version with a redundant option code and option-length */
3627 proto_tree_add_item(o82_sub_tree
, hf_dhcp_option82_vi_cl_option
, tvb
, clsuboptoff
, 1, ENC_BIG_ENDIAN
);
3629 proto_tree_add_item(o82_sub_tree
, hf_dhcp_option82_vi_cl_option_length
, tvb
, clsuboptoff
, 1, ENC_BIG_ENDIAN
);
3632 vs_opt
= tvb_get_uint8(tvb
, clsuboptoff
);
3633 vs_len
= tvb_get_uint8(tvb
, clsuboptoff
+1);
3635 proto_tree_add_item(o82_sub_tree
, hf_dhcp_option82_vi_cl_tag
, tvb
, clsuboptoff
, 1, ENC_BIG_ENDIAN
);
3637 proto_tree_add_item(o82_sub_tree
, hf_dhcp_option82_vi_cl_tag_length
, tvb
, clsuboptoff
, 1, ENC_BIG_ENDIAN
);
3640 case CL_AI_OPTION_DOCSIS_VERSION
:
3641 proto_tree_add_uint_format_value(o82_sub_tree
, hf_dhcp_option82_vi_cl_docsis_version
,
3642 tvb
, clsuboptoff
, 2, 0, "%d.%d",
3643 tvb_get_uint8(tvb
, clsuboptoff
), tvb_get_uint8(tvb
, clsuboptoff
+1));
3646 case CL_AI_OPTION_DPOE_SYSTEM_VERSION
:
3647 proto_tree_add_uint_format_value(o82_sub_tree
, hf_dhcp_option82_vi_cl_dpoe_system_version
,
3648 tvb
, clsuboptoff
, 2, 0, "%d.%d",
3649 tvb_get_uint8(tvb
, clsuboptoff
), tvb_get_uint8(tvb
, clsuboptoff
+1));
3652 case CL_AI_OPTION_DPOE_SYSTEM_DHCPV4_PBB_SERVICE
:
3653 proto_tree_add_item(o82_sub_tree
, hf_dhcp_option82_vi_cl_dpoe_system_pbb_service
, tvb
, clsuboptoff
, vs_len
, ENC_NA
);
3655 case CL_AI_OPTION_CMTS_CM_SERVICE_CLASS
:
3656 proto_tree_add_item(o82_sub_tree
, hf_dhcp_option82_vi_cl_service_class_name
, tvb
, clsuboptoff
, vs_len
, ENC_ASCII
);
3657 clsuboptoff
+= vs_len
;
3659 case CL_AI_OPTION_CMTS_MSO_DEFINED_TEXT
:
3660 proto_tree_add_item(o82_sub_tree
, hf_dhcp_option82_vi_cl_mso_defined_text
, tvb
, clsuboptoff
, vs_len
, ENC_ASCII
);
3661 clsuboptoff
+= vs_len
;
3663 case CL_AI_OPTION_SECURE_FILE_TRANSFER_URI
:
3664 proto_tree_add_item(o82_sub_tree
, hf_dhcp_option82_vi_cl_secure_file_transfer_uri
, tvb
, clsuboptoff
, vs_len
, ENC_ASCII
);
3665 clsuboptoff
+= vs_len
;
3668 expert_add_info_format(pinfo
, vti
, &ei_dhcp_option82_vi_cl_tag_unknown
, "Unknown tag %d (%d bytes)", vs_opt
, vs_len
);
3669 clsuboptoff
+= vs_len
;
3673 suboptoff
= clsuboptoff
;
3676 proto_tree_add_item(o82_v_tree
, hf_dhcp_option82_value
, tvb
, suboptoff
, datalen
, ENC_NA
);
3677 suboptoff
+= datalen
;
3682 case 13: /* Access Technology Type */
3683 if (subopt_len
!= 2) {
3684 expert_add_info_format(pinfo
, vti
, &ei_dhcp_bad_length
, "length isn't 2");
3687 proto_tree_add_item(o82_v_tree
, hf_dhcp_option82_option_ani_att_res
, tvb
, suboptoff
, 1, ENC_NA
);
3688 proto_tree_add_item(o82_v_tree
, hf_dhcp_option82_option_ani_att_att
, tvb
, suboptoff
+1, 1, ENC_NA
);
3692 if (subopt_len
== 1) {
3693 proto_tree_add_item(o82_v_tree
, hf_dhcp_option82_vrf_name_global
, tvb
, suboptoff
, 1, ENC_NA
);
3695 else if (subopt_len
!= 7) {
3696 proto_tree_add_item(o82_v_tree
, hf_dhcp_option82_vrf_name
, tvb
, suboptoff
, subopt_len
, ENC_ASCII
);
3698 proto_tree_add_item(o82_v_tree
, hf_dhcp_option82_vrf_name_vpn_id_oui
, tvb
, suboptoff
, 3, ENC_BIG_ENDIAN
);
3699 proto_tree_add_item(o82_v_tree
, hf_dhcp_option82_vrf_name_vpn_id_index
, tvb
, suboptoff
+3, 4, ENC_BIG_ENDIAN
);
3703 if (o82_opt
[idx
].info
.phf
!= NULL
)
3704 proto_tree_add_item(o82_v_tree
, *o82_opt
[idx
].info
.phf
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
3706 proto_tree_add_item(o82_v_tree
, hf_dhcp_option82_value
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
3711 dhcp_handle_basic_types(pinfo
, o82_v_tree
, vti
, tvb
, o82_opt
[idx
].info
.ftype
,
3712 suboptoff
, subopt_len
, o82_opt
[idx
].info
.phf
, &default_hfs
);
3716 optoff
+= (subopt_len
+ 2);
3721 dissect_dhcpopt_relay_agent_info(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3725 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
3726 offset
= dhcp_dhcp_decode_agent_info(pinfo
, tree
, tree
, tvb
, offset
, tvb_reported_length(tvb
));
3729 return tvb_captured_length(tvb
);
3732 # define O43PXE_DISCOVERY 6
3733 # define O43PXE_BOOT_SERVER 8
3734 # define O43PXE_BOOT_MENU 9
3735 # define O43PXE_MENU_PROMPT 10
3736 # define O43PXE_BOOT_ITEM 71
3738 static const value_string option43_pxeclient_suboption_vals
[] = {
3740 { 1, "PXE mtftp IP" },
3741 { 2, "PXE mtftp client port" },
3742 { 3, "PXE mtftp server port" },
3743 { 4, "PXE mtftp timeout" },
3744 { 5, "PXE mtftp delay" },
3745 { O43PXE_DISCOVERY
, "PXE discovery control" },
3746 { 7, "PXE multicast address" },
3747 { O43PXE_BOOT_SERVER
, "PXE boot servers" },
3748 { O43PXE_BOOT_MENU
, "PXE boot menu" },
3749 { O43PXE_MENU_PROMPT
, "PXE menu prompt" },
3750 { 11, "PXE multicast address alloc", },
3751 { 12, "PXE credential types" },
3752 { O43PXE_BOOT_ITEM
, "PXE boot item" },
3753 { 179, "PXE LCM Server" },
3754 { 180, "PXE LCM Domain" },
3755 { 181, "PXE LCM NIC option 0" },
3756 { 190, "PXE LCM Workgroup" },
3757 { 191, "PXE Discovery" },
3758 { 192, "PXE Configured" },
3759 { 193, "PXE LCM version" },
3760 { 194, "PXE LCM Serial Number" },
3766 dissect_vendor_pxeclient_suboption(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
,
3767 tvbuff_t
*tvb
, int optoff
, int optend
)
3769 int suboptoff
= optoff
;
3770 int suboptoff_start
;
3773 proto_tree
*o43pxeclient_v_tree
, *o43pxeclient_suboption_tree
;
3774 proto_item
*vti
, *ti
;
3775 uint32_t boot_server_ip_count
;
3776 uint32_t boot_menu_length
;
3778 static const struct basic_types_hfs default_hfs
= {
3780 &hf_dhcp_option43_value_ip_address
,
3781 &hf_dhcp_option43_value_ip_address
,
3784 &hf_dhcp_option43_value_8
,
3792 static int * const o43pxe_discovery_hf_flags
[] = {
3793 &hf_dhcp_option43_pxeclient_discovery_control_bc
,
3794 &hf_dhcp_option43_pxeclient_discovery_control_mc
,
3795 &hf_dhcp_option43_pxeclient_discovery_control_serverlist
,
3796 &hf_dhcp_option43_pxeclient_discovery_control_bstrap
,
3800 static const struct opt_info o43pxeclient_opt
[]= {
3801 /* 0 */ {"nop", special
, &hf_dhcp_option43_pxeclient_padding
}, /* dummy */
3802 /* 1 */ {"PXE mtftp IP", ipv4_list
, &hf_dhcp_option43_pxeclient_mtftp_ip
},
3803 /* 2 */ {"PXE mtftp client port", val_u_le_short
, &hf_dhcp_option43_pxeclient_mtftp_client_port
},
3804 /* 3 */ {"PXE mtftp server port",val_u_le_short
, &hf_dhcp_option43_pxeclient_mtftp_server_port
},
3805 /* 4 */ {"PXE mtftp timeout", val_u_byte
, &hf_dhcp_option43_pxeclient_mtftp_timeout
},
3806 /* 5 */ {"PXE mtftp delay", val_u_byte
, &hf_dhcp_option43_pxeclient_mtftp_delay
},
3807 /* 6 */ {"PXE discovery control", special
, NULL
},
3808 /* 7 */ {"PXE multicast address", ipv4_list
, &hf_dhcp_option43_pxeclient_multicast_address
},
3809 /* 8 */ {"PXE boot servers", special
, NULL
},
3810 /* 9 */ {"PXE boot menu", special
, NULL
},
3811 /* 10 */ {"PXE menu prompt", special
, NULL
},
3812 /* 11 */ {"PXE multicast address alloc", special
, &hf_dhcp_option43_pxeclient_multicast_address_alloc
},
3813 /* 12 */ {"PXE credential types", special
, &hf_dhcp_option43_pxeclient_credential_types
},
3814 /* 13 */ {"Unassigned", opaque
, NULL
},
3815 /* 14 */ {"Unassigned", opaque
, NULL
},
3816 /* 15 */ {"Unassigned", opaque
, NULL
},
3817 /* 16 */ {"Unassigned", opaque
, NULL
},
3818 /* 17 */ {"Unassigned", opaque
, NULL
},
3819 /* 18 */ {"Unassigned", opaque
, NULL
},
3820 /* 19 */ {"Unassigned", opaque
, NULL
},
3821 /* 20 */ {"Unassigned", opaque
, NULL
},
3822 /* 21 */ {"Unassigned", opaque
, NULL
},
3823 /* 22 */ {"Unassigned", opaque
, NULL
},
3824 /* 23 */ {"Unassigned", opaque
, NULL
},
3825 /* 24 */ {"Unassigned", opaque
, NULL
},
3826 /* 25 */ {"Unassigned", opaque
, NULL
},
3827 /* 26 */ {"Unassigned", opaque
, NULL
},
3828 /* 27 */ {"Unassigned", opaque
, NULL
},
3829 /* 28 */ {"Unassigned", opaque
, NULL
},
3830 /* 29 */ {"Unassigned", opaque
, NULL
},
3831 /* 30 */ {"Unassigned", opaque
, NULL
},
3832 /* 31 */ {"Unassigned", opaque
, NULL
},
3833 /* 32 */ {"Unassigned", opaque
, NULL
},
3834 /* 33 */ {"Unassigned", opaque
, NULL
},
3835 /* 34 */ {"Unassigned", opaque
, NULL
},
3836 /* 35 */ {"Unassigned", opaque
, NULL
},
3837 /* 36 */ {"Unassigned", opaque
, NULL
},
3838 /* 37 */ {"Unassigned", opaque
, NULL
},
3839 /* 38 */ {"Unassigned", opaque
, NULL
},
3840 /* 39 */ {"Unassigned", opaque
, NULL
},
3841 /* 40 */ {"Unassigned", opaque
, NULL
},
3842 /* 41 */ {"Unassigned", opaque
, NULL
},
3843 /* 42 */ {"Unassigned", opaque
, NULL
},
3844 /* 43 */ {"Unassigned", opaque
, NULL
},
3845 /* 44 */ {"Unassigned", opaque
, NULL
},
3846 /* 45 */ {"Unassigned", opaque
, NULL
},
3847 /* 46 */ {"Unassigned", opaque
, NULL
},
3848 /* 47 */ {"Unassigned", opaque
, NULL
},
3849 /* 48 */ {"Unassigned", opaque
, NULL
},
3850 /* 49 */ {"Unassigned", opaque
, NULL
},
3851 /* 50 */ {"Unassigned", opaque
, NULL
},
3852 /* 51 */ {"Unassigned", opaque
, NULL
},
3853 /* 52 */ {"Unassigned", opaque
, NULL
},
3854 /* 53 */ {"Unassigned", opaque
, NULL
},
3855 /* 54 */ {"Unassigned", opaque
, NULL
},
3856 /* 55 */ {"Unassigned", opaque
, NULL
},
3857 /* 56 */ {"Unassigned", opaque
, NULL
},
3858 /* 57 */ {"Unassigned", opaque
, NULL
},
3859 /* 58 */ {"Unassigned", opaque
, NULL
},
3860 /* 59 */ {"Unassigned", opaque
, NULL
},
3861 /* 60 */ {"Unassigned", opaque
, NULL
},
3862 /* 61 */ {"Unassigned", opaque
, NULL
},
3863 /* 62 */ {"Unassigned", opaque
, NULL
},
3864 /* 63 */ {"Unassigned", opaque
, NULL
},
3865 /* 64 */ {"Unassigned", opaque
, NULL
},
3866 /* 65 */ {"Unassigned", opaque
, NULL
},
3867 /* 66 */ {"Unassigned", opaque
, NULL
},
3868 /* 67 */ {"Unassigned", opaque
, NULL
},
3869 /* 68 */ {"Unassigned", opaque
, NULL
},
3870 /* 69 */ {"Unassigned", opaque
, NULL
},
3871 /* 70 */ {"Unassigned", opaque
, NULL
},
3872 /* 71 */ {"PXE boot item", special
, NULL
},
3873 /* 72 */ {"Unassigned", opaque
, NULL
},
3874 /* 73 */ {"Unassigned", opaque
, NULL
},
3875 /* 74 */ {"Unassigned", opaque
, NULL
},
3876 /* 75 */ {"Unassigned", opaque
, NULL
},
3877 /* 76 */ {"Unassigned", opaque
, NULL
},
3878 /* 77 */ {"Unassigned", opaque
, NULL
},
3879 /* 78 */ {"Unassigned", opaque
, NULL
},
3880 /* 79 */ {"Unassigned", opaque
, NULL
},
3881 /* 80 */ {"Unassigned", opaque
, NULL
},
3882 /* 81 */ {"Unassigned", opaque
, NULL
},
3883 /* 82 */ {"Unassigned", opaque
, NULL
},
3884 /* 83 */ {"Unassigned", opaque
, NULL
},
3885 /* 84 */ {"Unassigned", opaque
, NULL
},
3886 /* 85 */ {"Unassigned", opaque
, NULL
},
3887 /* 86 */ {"Unassigned", opaque
, NULL
},
3888 /* 87 */ {"Unassigned", opaque
, NULL
},
3889 /* 88 */ {"Unassigned", opaque
, NULL
},
3890 /* 89 */ {"Unassigned", opaque
, NULL
},
3891 /* 90 */ {"Unassigned", opaque
, NULL
},
3892 /* 91 */ {"Unassigned", opaque
, NULL
},
3893 /* 92 */ {"Unassigned", opaque
, NULL
},
3894 /* 93 */ {"Unassigned", opaque
, NULL
},
3895 /* 94 */ {"Unassigned", opaque
, NULL
},
3896 /* 95 */ {"Unassigned", opaque
, NULL
},
3897 /* 96 */ {"Unassigned", opaque
, NULL
},
3898 /* 97 */ {"Unassigned", opaque
, NULL
},
3899 /* 98 */ {"Unassigned", opaque
, NULL
},
3900 /* 99 */ {"Unassigned", opaque
, NULL
},
3901 /* 100 */ {"Unassigned", opaque
, NULL
},
3902 /* 101 */ {"Unassigned", opaque
, NULL
},
3903 /* 102 */ {"Unassigned", opaque
, NULL
},
3904 /* 103 */ {"Unassigned", opaque
, NULL
},
3905 /* 104 */ {"Unassigned", opaque
, NULL
},
3906 /* 105 */ {"Unassigned", opaque
, NULL
},
3907 /* 106 */ {"Unassigned", opaque
, NULL
},
3908 /* 107 */ {"Unassigned", opaque
, NULL
},
3909 /* 108 */ {"Unassigned", opaque
, NULL
},
3910 /* 109 */ {"Unassigned", opaque
, NULL
},
3911 /* 110 */ {"Unassigned", opaque
, NULL
},
3912 /* 111 */ {"Unassigned", opaque
, NULL
},
3913 /* 112 */ {"Unassigned", opaque
, NULL
},
3914 /* 113 */ {"Unassigned", opaque
, NULL
},
3915 /* 114 */ {"Unassigned", opaque
, NULL
},
3916 /* 115 */ {"Unassigned", opaque
, NULL
},
3917 /* 116 */ {"Unassigned", opaque
, NULL
},
3918 /* 117 */ {"Unassigned", opaque
, NULL
},
3919 /* 118 */ {"Unassigned", opaque
, NULL
},
3920 /* 119 */ {"Unassigned", opaque
, NULL
},
3921 /* 120 */ {"Unassigned", opaque
, NULL
},
3922 /* 121 */ {"Unassigned", opaque
, NULL
},
3923 /* 122 */ {"Unassigned", opaque
, NULL
},
3924 /* 123 */ {"Unassigned", opaque
, NULL
},
3925 /* 124 */ {"Unassigned", opaque
, NULL
},
3926 /* 125 */ {"Unassigned", opaque
, NULL
},
3927 /* 126 */ {"Unassigned", opaque
, NULL
},
3928 /* 127 */ {"Unassigned", opaque
, NULL
},
3929 /* 128 */ {"Unassigned", opaque
, NULL
},
3930 /* 129 */ {"Unassigned", opaque
, NULL
},
3931 /* 130 */ {"Unassigned", opaque
, NULL
},
3932 /* 131 */ {"Unassigned", opaque
, NULL
},
3933 /* 132 */ {"Unassigned", opaque
, NULL
},
3934 /* 133 */ {"Unassigned", opaque
, NULL
},
3935 /* 134 */ {"Unassigned", opaque
, NULL
},
3936 /* 135 */ {"Unassigned", opaque
, NULL
},
3937 /* 136 */ {"Unassigned", opaque
, NULL
},
3938 /* 137 */ {"Unassigned", opaque
, NULL
},
3939 /* 138 */ {"Unassigned", opaque
, NULL
},
3940 /* 139 */ {"Unassigned", opaque
, NULL
},
3941 /* 140 */ {"Unassigned", opaque
, NULL
},
3942 /* 141 */ {"Unassigned", opaque
, NULL
},
3943 /* 142 */ {"Unassigned", opaque
, NULL
},
3944 /* 143 */ {"Unassigned", opaque
, NULL
},
3945 /* 144 */ {"Unassigned", opaque
, NULL
},
3946 /* 145 */ {"Unassigned", opaque
, NULL
},
3947 /* 146 */ {"Unassigned", opaque
, NULL
},
3948 /* 147 */ {"Unassigned", opaque
, NULL
},
3949 /* 148 */ {"Unassigned", opaque
, NULL
},
3950 /* 149 */ {"Unassigned", opaque
, NULL
},
3951 /* 150 */ {"Unassigned", opaque
, NULL
},
3952 /* 151 */ {"Unassigned", opaque
, NULL
},
3953 /* 152 */ {"Unassigned", opaque
, NULL
},
3954 /* 153 */ {"Unassigned", opaque
, NULL
},
3955 /* 154 */ {"Unassigned", opaque
, NULL
},
3956 /* 155 */ {"Unassigned", opaque
, NULL
},
3957 /* 156 */ {"Unassigned", opaque
, NULL
},
3958 /* 157 */ {"Unassigned", opaque
, NULL
},
3959 /* 158 */ {"Unassigned", opaque
, NULL
},
3960 /* 159 */ {"Unassigned", opaque
, NULL
},
3961 /* 160 */ {"Unassigned", opaque
, NULL
},
3962 /* 161 */ {"Unassigned", opaque
, NULL
},
3963 /* 162 */ {"Unassigned", opaque
, NULL
},
3964 /* 163 */ {"Unassigned", opaque
, NULL
},
3965 /* 164 */ {"Unassigned", opaque
, NULL
},
3966 /* 165 */ {"Unassigned", opaque
, NULL
},
3967 /* 166 */ {"Unassigned", opaque
, NULL
},
3968 /* 167 */ {"Unassigned", opaque
, NULL
},
3969 /* 168 */ {"Unassigned", opaque
, NULL
},
3970 /* 169 */ {"Unassigned", opaque
, NULL
},
3971 /* 170 */ {"Unassigned", opaque
, NULL
},
3972 /* 171 */ {"Unassigned", opaque
, NULL
},
3973 /* 172 */ {"Unassigned", opaque
, NULL
},
3974 /* 173 */ {"Unassigned", opaque
, NULL
},
3975 /* 174 */ {"Unassigned", opaque
, NULL
},
3976 /* 175 */ {"Unassigned", opaque
, NULL
},
3977 /* 176 */ {"Unassigned", opaque
, NULL
},
3978 /* 177 */ {"Unassigned", opaque
, NULL
},
3979 /* 178 */ {"Unassigned", opaque
, NULL
},
3980 /* 179 */ {"LCM Server", string
, &hf_dhcp_option43_pxeclient_lcm_server
},
3981 /* 180 */ {"LCM Domain", string
, &hf_dhcp_option43_pxeclient_lcm_domain
},
3982 /* 181 */ {"LCM NIC Option 0", bytes
, &hf_dhcp_option43_pxeclient_lcm_nic_option
},
3983 /* 182 */ {"Unassigned", opaque
, NULL
},
3984 /* 183 */ {"Unassigned", opaque
, NULL
},
3985 /* 184 */ {"Unassigned", opaque
, NULL
},
3986 /* 185 */ {"Unassigned", opaque
, NULL
},
3987 /* 186 */ {"Unassigned", opaque
, NULL
},
3988 /* 187 */ {"Unassigned", opaque
, NULL
},
3989 /* 188 */ {"Unassigned", opaque
, NULL
},
3990 /* 189 */ {"Unassigned", opaque
, NULL
},
3991 /* 190 */ {"LCM Workgroup", string
, &hf_dhcp_option43_pxeclient_lcm_workgroup
},
3992 /* 191 */ {"Discovery", val_boolean
, &hf_dhcp_option43_pxeclient_discovery
},
3993 /* 192 */ {"Configured", val_boolean
, &hf_dhcp_option43_pxeclient_configured
},
3994 /* 193 */ {"LCM Version", val_u_long
, &hf_dhcp_option43_pxeclient_lcm_version
},
3995 /* 194 */ {"LCM Serial Number", string
, &hf_dhcp_option43_pxeclient_lcm_serial
},
3996 /* 255 {"PXE end options", special, &hf_dhcp_option43_pxeclient_end} */
3999 subopt
= tvb_get_uint8(tvb
, optoff
);
4003 proto_tree_add_item(v_tree
, hf_dhcp_option43_pxeclient_padding
, tvb
, optoff
, 1, ENC_BIG_ENDIAN
);
4005 } else if (subopt
== 255) { /* End Option */
4006 proto_tree_add_item(v_tree
, hf_dhcp_option43_pxeclient_end
, tvb
, optoff
, 1, ENC_BIG_ENDIAN
);
4007 /* Make sure we skip any junk left this option */
4011 if (suboptoff
>= optend
) {
4012 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
4013 "Suboption %d: no room left in option for suboption length", subopt
);
4017 subopt_len
= tvb_get_uint8(tvb
, suboptoff
);
4018 vti
= proto_tree_add_uint_format_value(v_tree
, hf_dhcp_option43_pxeclient_suboption
,
4019 tvb
, optoff
, subopt_len
+2, subopt
, "(%d) %s",
4020 subopt
, val_to_str_const(subopt
, option43_pxeclient_suboption_vals
, "Unknown"));
4022 o43pxeclient_v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option43_suboption
);
4023 proto_tree_add_item(o43pxeclient_v_tree
, hf_dhcp_suboption_length
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
);
4026 ti
= proto_tree_add_item(o43pxeclient_v_tree
, hf_dhcp_option43_value
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
4027 proto_item_set_hidden(ti
);
4029 if ((subopt
< 1) || (subopt
>= array_length(o43pxeclient_opt
))) {
4030 expert_add_info_format(pinfo
, vti
, &ei_dhcp_suboption_invalid
, "Unknown suboption %d (%d bytes)", subopt
, subopt_len
);
4031 } else if (o43pxeclient_opt
[subopt
].ftype
== special
) {
4032 /* I may need to decode that properly one day */
4033 if (o43pxeclient_opt
[subopt
].phf
!= NULL
)
4034 proto_tree_add_item(o43pxeclient_v_tree
, *o43pxeclient_opt
[subopt
].phf
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
4038 case O43PXE_DISCOVERY
:
4039 proto_tree_add_bitmask(o43pxeclient_v_tree
, tvb
, suboptoff
, hf_dhcp_option43_pxeclient_discovery_control
,
4040 ett_dhcp_option43_suboption_discovery
, o43pxe_discovery_hf_flags
, ENC_BIG_ENDIAN
);
4042 case O43PXE_BOOT_SERVER
:
4043 suboptoff_start
= suboptoff
;
4044 ti
= proto_tree_add_item(o43pxeclient_v_tree
, hf_dhcp_option43_pxeclient_boot_servers
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
4045 o43pxeclient_suboption_tree
= proto_item_add_subtree(ti
, ett_dhcp_option43_suboption_tree
);
4046 while((suboptoff
- suboptoff_start
) < (subopt_len
- 1)) {
4047 proto_tree_add_item(o43pxeclient_suboption_tree
, hf_dhcp_option43_pxeclient_boot_server_type
, tvb
, suboptoff
, 2, ENC_BIG_ENDIAN
);
4049 proto_tree_add_item_ret_uint(o43pxeclient_suboption_tree
, hf_dhcp_option43_pxeclient_boot_server_count
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
, &boot_server_ip_count
);
4051 while(boot_server_ip_count
> 0) {
4052 proto_tree_add_item(o43pxeclient_suboption_tree
, hf_dhcp_option43_pxeclient_boot_server_ip
, tvb
, suboptoff
, 4, ENC_BIG_ENDIAN
);
4054 boot_server_ip_count
-=1;
4058 case O43PXE_BOOT_MENU
:
4059 suboptoff_start
= suboptoff
;
4060 ti
= proto_tree_add_item(o43pxeclient_v_tree
, hf_dhcp_option43_pxeclient_boot_menu
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
4061 o43pxeclient_suboption_tree
= proto_item_add_subtree(ti
, ett_dhcp_option43_suboption_tree
);
4062 while((suboptoff
- suboptoff_start
) < (subopt_len
- 1)) {
4063 proto_tree_add_item(o43pxeclient_suboption_tree
, hf_dhcp_option43_pxeclient_boot_menu_type
, tvb
, suboptoff
, 2, ENC_BIG_ENDIAN
);
4065 proto_tree_add_item_ret_uint(o43pxeclient_suboption_tree
, hf_dhcp_option43_pxeclient_boot_menu_length
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
, &boot_menu_length
);
4067 proto_tree_add_item(o43pxeclient_suboption_tree
, hf_dhcp_option43_pxeclient_boot_menu_desc
, tvb
, suboptoff
, boot_menu_length
, ENC_ASCII
);
4068 suboptoff
+= boot_menu_length
;
4071 case O43PXE_MENU_PROMPT
:
4072 ti
= proto_tree_add_item(o43pxeclient_v_tree
, hf_dhcp_option43_pxeclient_menu_prompt
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
4073 o43pxeclient_suboption_tree
= proto_item_add_subtree(ti
, ett_dhcp_option43_suboption_tree
);
4074 proto_tree_add_item(o43pxeclient_suboption_tree
, hf_dhcp_option43_pxeclient_menu_prompt_timeout
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
);
4076 proto_tree_add_item(o43pxeclient_suboption_tree
, hf_dhcp_option43_pxeclient_menu_prompt_prompt
, tvb
, suboptoff
, subopt_len
- 1, ENC_ASCII
);
4078 case O43PXE_BOOT_ITEM
:
4079 ti
= proto_tree_add_item(o43pxeclient_v_tree
, hf_dhcp_option43_pxeclient_boot_item
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
4080 o43pxeclient_suboption_tree
= proto_item_add_subtree(ti
, ett_dhcp_option43_suboption_tree
);
4081 proto_tree_add_item(o43pxeclient_suboption_tree
, hf_dhcp_option43_pxeclient_boot_item_type
, tvb
, suboptoff
, 2, ENC_BIG_ENDIAN
);
4083 proto_tree_add_item(o43pxeclient_suboption_tree
, hf_dhcp_option43_pxeclient_boot_item_layer
, tvb
, suboptoff
, 2, ENC_NA
);
4086 proto_tree_add_item(o43pxeclient_v_tree
, hf_dhcp_option43_value
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
4091 if (dhcp_handle_basic_types(pinfo
, o43pxeclient_v_tree
, vti
, tvb
, o43pxeclient_opt
[subopt
].ftype
,
4092 suboptoff
, subopt_len
, o43pxeclient_opt
[subopt
].phf
, &default_hfs
) == 0)
4094 expert_add_info_format(pinfo
, vti
, &ei_dhcp_subopt_unknown_type
, "ERROR, please report: Unknown subopt type handler %d", subopt
);
4098 optoff
+= (subopt_len
+ 2);
4103 dissect_pxeclient_vendor_info_heur( tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data
)
4106 dhcp_option_data_t
*option_data
= (dhcp_option_data_t
*)data
;
4107 proto_tree
* vendor_tree
;
4109 /* PXE protocol 2.1 as described in the Intel specs */
4110 if ((option_data
->vendor_class_id
== NULL
) ||
4111 (strncmp((const char*)option_data
->vendor_class_id
, "PXEClient", strlen("PXEClient")) != 0))
4114 proto_item_append_text(tree
, " (PXEClient)");
4115 vendor_tree
= proto_item_add_subtree(tree
, ett_dhcp_option
);
4117 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
4118 offset
= dissect_vendor_pxeclient_suboption(pinfo
, tree
, vendor_tree
,
4119 tvb
, offset
, tvb_reported_length(tvb
));
4126 dissect_vendor_avaya_param(proto_tree
*tree
, packet_info
*pinfo
, proto_item
*vti
,
4127 tvbuff_t
*tvb
, int optoff
, wmem_strbuf_t
*avaya_param_buf
)
4132 field
= wmem_strbuf_get_str(avaya_param_buf
);
4133 len
= (int)wmem_strbuf_get_len(avaya_param_buf
);
4135 if((strncmp(field
, "TLSSRVR=", 8) == 0) && ( len
> 8 )) {
4136 proto_tree_add_string(tree
, hf_dhcp_option242_avaya_tlssrvr
, tvb
, optoff
, len
, field
+ 8);
4138 else if((strncmp(field
, "HTTPSRVR=", 9) == 0) && ( len
> 9)) {
4139 proto_tree_add_string(tree
, hf_dhcp_option242_avaya_httpsrvr
, tvb
, optoff
, len
, field
+ 9);
4141 else if((strncmp(field
, "HTTPDIR=", 8) == 0) && ( len
> 8)) {
4142 proto_tree_add_string(tree
, hf_dhcp_option242_avaya_httpdir
, tvb
, optoff
, len
, field
+ 8);
4144 else if((strncmp(field
, "STATIC=", 7) == 0) && ( len
> 7)) {
4145 proto_tree_add_string_format_value(tree
, hf_dhcp_option242_avaya_static
, tvb
, optoff
, len
, field
+ 7, "%s (%s)", field
+ 7, str_to_str(field
+ 7, option242_avaya_static_vals
, "Unknown (%s)"));
4147 else if((strncmp(field
, "MCIPADD=", 8) == 0) && ( len
> 8)) {
4148 proto_tree_add_string(tree
, hf_dhcp_option242_avaya_mcipadd
, tvb
, optoff
, len
, field
+ 8);
4150 else if((strncmp(field
, "DOT1X=", 6) == 0) && ( len
> 6)) {
4151 proto_tree_add_string_format_value(tree
, hf_dhcp_option242_avaya_dot1x
, tvb
, optoff
, len
, field
+ 6, "%s (%s)", field
+ 6, str_to_str(field
+ 6, option242_avaya_dot1x_vals
, "Unknown (%s)"));
4153 else if((strncmp(field
, "ICMPDU=", 7) == 0) && ( len
> 7)) {
4154 proto_tree_add_string_format_value(tree
, hf_dhcp_option242_avaya_icmpdu
, tvb
, optoff
, len
, field
+ 7, "%s (%s)", field
+ 7, str_to_str(field
+ 7, option242_avaya_icmpdu_vals
, "Unknown (%s)"));
4156 else if((strncmp(field
, "ICMPRED=", 8) == 0) && ( len
> 8)) {
4157 proto_tree_add_string_format_value(tree
, hf_dhcp_option242_avaya_icmpred
, tvb
, optoff
, len
, field
+ 8, "%s (%s)", field
+ 8, str_to_str(field
+ 8, option242_avaya_icmpred_vals
, "Unknown (%s)"));
4159 else if((strncmp(field
, "L2Q=", 4) == 0) && ( len
> 4)) {
4160 proto_tree_add_string_format_value(tree
, hf_dhcp_option242_avaya_l2q
, tvb
, optoff
, len
, field
+ 4, "%s (%s)", field
+ 4, str_to_str(field
+ 4, option242_avaya_l2q_vals
, "Unknown (%s)"));
4162 else if((strncmp(field
, "L2QVLAN=", 8) == 0) && ( len
> 8)) {
4167 val_valid
= ws_strtoi32(field
+ 8, NULL
, &val
);
4168 pi
= proto_tree_add_int(tree
, hf_dhcp_option242_avaya_l2qvlan
, tvb
, optoff
, len
, val
);
4170 expert_add_info(pinfo
, pi
, &ei_dhcp_option242_avaya_l2qvlan_invalid
);
4172 else if((strncmp(field
, "LOGLOCAL=", 9) == 0) && ( len
> 9)) {
4173 proto_tree_add_string_format_value(tree
, hf_dhcp_option242_avaya_loglocal
, tvb
, optoff
, len
, field
+ 9, "%s (%s)", field
+ 9, str_to_str(field
+ 9, option242_avaya_loglocal_vals
, "Unknown (%s)"));
4175 else if((strncmp(field
, "PHY1STAT=", 9) == 0) && ( len
> 9)) {
4176 proto_tree_add_string_format_value(tree
, hf_dhcp_option242_avaya_phy1stat
, tvb
, optoff
, len
, field
+ 9, "%s (%s)", field
+ 9, str_to_str(field
+ 9, option242_avaya_phystat_vals
, "Unknown (%s)"));
4178 else if((strncmp(field
, "PHY2STAT=", 9) == 0) && ( len
> 9)) {
4179 proto_tree_add_string_format_value(tree
, hf_dhcp_option242_avaya_phy2stat
, tvb
, optoff
, len
, field
+ 9, "%s (%s)", field
+ 9, str_to_str(field
+ 9, option242_avaya_phystat_vals
, "Unknown (%s)"));
4181 else if((strncmp(field
, "PROCPSWD=", 9) == 0) && ( len
> 9)) {
4182 proto_tree_add_string(tree
, hf_dhcp_option242_avaya_procpswd
, tvb
, optoff
, len
, field
+ 9);
4184 else if((strncmp(field
, "PROCSTAT=", 9) == 0) && ( len
> 9)) {
4185 proto_tree_add_string_format_value(tree
, hf_dhcp_option242_avaya_procstat
, tvb
, optoff
, len
, field
+ 9, "%s (%s)", field
+ 9, str_to_str(field
+ 9, option242_avaya_procstat_vals
, "Unknown (%s)"));
4187 else if((strncmp(field
, "SNMPADD=", 8) == 0) && ( len
> 8)) {
4188 proto_tree_add_string(tree
, hf_dhcp_option242_avaya_snmpadd
, tvb
, optoff
, len
, field
+ 8);
4190 else if((strncmp(field
, "SNMPSTRING=", 11) == 0) && ( len
> 11)) {
4191 proto_tree_add_string(tree
, hf_dhcp_option242_avaya_snmpstring
, tvb
, optoff
, len
, field
+ 11);
4193 else if((strncmp(field
, "VLANTEST=", 9) == 0) && ( len
> 9)) {
4198 val_valid
= ws_strtoi32(field
+ 9, NULL
, &val
);
4199 pi
= proto_tree_add_int(tree
, hf_dhcp_option242_avaya_vlantest
, tvb
, optoff
, len
, val
);
4201 expert_add_info(pinfo
, pi
, &ei_dhcp_option242_avaya_vlantest_invalid
);
4204 expert_add_info_format(pinfo
, vti
, &ei_dhcp_subopt_unknown_type
, "ERROR, Unknown Avaya IP Telephone parameter %s", field
);
4210 * https://web.archive.org/web/20100312054301/http://www.enum.at/rfc3825encoder.529.0.html
4212 * The code is no longer available.
4215 rfc3825_lci_to_fixpoint(const unsigned char lci
[16], struct rfc3825_location_fixpoint_t
*fixpoint
)
4217 fixpoint
->latitude_res
= (lci
[0]>>2) & 0x3F; /* make sure that right-shift does not copy sign bit */
4218 if (lci
[0] & 2) { /* LSB<<1 contains the sign of the latitude */
4219 /* Latitude is negative, expand two's complement */
4220 fixpoint
->latitude
= (((int64_t)lci
[0] & 3)<<32) | ((int64_t)lci
[1]<<24) |
4221 ((int64_t)lci
[2]<<16) | ((int64_t)lci
[3]<<8) |
4222 (int64_t)lci
[4] | ((int64_t)0x3FFFFFFF<<34);
4225 /* Latitude is positive */
4226 fixpoint
->latitude
= (((int64_t)lci
[0] & 3)<<32) | ((int64_t)lci
[1]<<24) |
4227 ((int64_t)lci
[2]<<16) | ((int64_t)lci
[3]<<8) |
4230 fixpoint
->longitude_res
= (lci
[5]>>2) & 0x3F; /* make sure that right-shift does not copy sign bit */
4231 if (lci
[5] & 2) { /* LSB<<1 contains the sign of the latitude */
4232 /* Longitude is negative, expand two's complement */
4233 fixpoint
->longitude
= (((int64_t)lci
[5] & 3)<<32) | ((int64_t)lci
[6]<<24) |
4234 ((int64_t)lci
[7]<<16) | ((int64_t)lci
[8]<<8) |
4235 (int64_t)lci
[9] | ((int64_t)0x3FFFFFFF<<34);
4238 /* Longitude is positive */
4239 fixpoint
->longitude
= (((int64_t)lci
[5] & 3)<<32) | ((int64_t)lci
[6]<<24) |
4240 ((int64_t)lci
[7]<<16) | ((int64_t)lci
[8]<<8) |
4243 fixpoint
->altitude_type
= (lci
[10]>>4) & 0x0F; /* make sure that right-shift does not copy sign bit */
4244 fixpoint
->altitude_res
= ((lci
[10] & 0x0F) << 2) | ((lci
[11]>>6) & 0x03);
4245 if (lci
[11] & 0x20) { /* LSB<<1 contains the sign of the latitude */
4246 /* Altitude is negative, expand two's complement */
4247 fixpoint
->altitude
= (((int32_t)lci
[11] & 0x3F)<<24) | ((int32_t)lci
[12]<<16) |
4248 ((int32_t)lci
[13]<<8) | ((int32_t)lci
[14]) |
4249 ((int32_t)0x03<<30);
4252 /* Altitude is positive */
4253 fixpoint
->altitude
= (((int32_t)lci
[11] & 0x3F)<<24) | ((int32_t)lci
[12]<<16) |
4254 ((int32_t)lci
[13]<<8) | ((int32_t)lci
[14]);
4257 fixpoint
->datum_type
= lci
[15];
4263 * https://web.archive.org/web/20100312054301/http://www.enum.at/rfc3825encoder.529.0.html
4265 * The code is no longer available.
4268 rfc3825_fixpoint_to_decimal(struct rfc3825_location_fixpoint_t
*fixpoint
, struct rfc3825_location_decimal_t
*decimal
)
4271 decimal
->latitude
= (double) fixpoint
->latitude
/ (1 << 25);
4272 if ((decimal
->latitude
> 90) || (decimal
->latitude
< -90)) {
4273 return RFC3825_LATITUDE_OUTOFRANGE
;
4276 /* Latitude Uncertainty */
4277 if (fixpoint
->latitude_res
> 34) {
4278 return RFC3825_LATITUDE_UNCERTAINTY_OUTOFRANGE
;
4280 if (fixpoint
->latitude_res
> 8 ) {
4281 decimal
->latitude_res
= (double) 1 / (UINT64_C(1) << (fixpoint
->latitude_res
- 8));
4283 decimal
->latitude_res
= (double) (UINT64_C(1) << (8 - fixpoint
->latitude_res
));
4287 decimal
->longitude
= (double) fixpoint
->longitude
/ (1 << 25);
4288 if ((decimal
->longitude
> 180) || (decimal
->longitude
< -180)) {
4289 return RFC3825_LONGITUDE_OUTOFRANGE
;
4292 /* Longitude Uncertainty */
4293 if (fixpoint
->longitude_res
> 34) {
4294 return RFC3825_LONGITUDE_UNCERTAINTY_OUTOFRANGE
;
4296 if (fixpoint
->longitude_res
> 8 ) {
4297 decimal
->longitude_res
= (double) 1 / (UINT64_C(1) << (fixpoint
->longitude_res
- 8));
4299 decimal
->longitude_res
= (double) (UINT64_C(1) << (8 - fixpoint
->longitude_res
));
4303 decimal
->altitude_type
= fixpoint
->altitude_type
;
4304 decimal
->altitude
= 0;
4305 decimal
->altitude_res
= 0;
4307 if (decimal
->altitude_type
== 0) { /* Unknown */
4308 } else if (decimal
->altitude_type
== 1) { /* Meters */
4310 decimal
->altitude
= (double) fixpoint
->altitude
/ (1 << 8);
4311 if ((decimal
->altitude
> ((int32_t) 1<<21)-1) || (decimal
->altitude
< ((int32_t) -(1<<21))))
4312 return RFC3825_ALTITUDE_OUTOFRANGE
;
4314 /* Altitude Uncertainty */
4315 if (fixpoint
->altitude_res
> 30) {
4316 return RFC3825_ALTITUDE_UNCERTAINTY_OUTOFRANGE
;
4318 if (fixpoint
->altitude_res
> 21 ) {
4319 decimal
->altitude_res
= (double) 1 / (UINT64_C(1) << (fixpoint
->altitude_res
- 21));
4321 decimal
->altitude_res
= (double) (UINT64_C(1) << (21 - fixpoint
->altitude_res
));
4323 } else if (decimal
->altitude_type
== 2) { /* Floors */
4325 if ((fixpoint
->altitude_res
!= 30) && (fixpoint
->altitude_res
!= 0)) {
4326 return RFC3825_ALTITUDE_UNCERTAINTY_OUTOFRANGE
;
4328 decimal
->altitude
= (double) fixpoint
->altitude
/ (1 << 8);
4329 } else { /* invalid type */
4330 return RFC3825_ALTITUDE_TYPE_OUTOFRANGE
;
4334 decimal
->datum_type
= 0;
4335 if ((fixpoint
->datum_type
> 3) || (fixpoint
->datum_type
< 1)) {
4336 return RFC3825_DATUM_TYPE_OUTOFRANGE
;
4338 decimal
->datum_type
= fixpoint
->datum_type
;
4340 return RFC3825_NOERROR
;
4344 dissect_dhcpopt_isns(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
4346 static int * const isns_functions_hf_flags
[] = {
4347 &hf_dhcp_option_isns_functions_enabled
,
4348 &hf_dhcp_option_isns_functions_dd_authorization
,
4349 &hf_dhcp_option_isns_functions_sec_policy_distibution
,
4350 &hf_dhcp_option_isns_functions_reserved
,
4354 static int * const isns_dda_hf_flags
[] = {
4355 &hf_dhcp_option_isns_discovery_domain_access_enabled
,
4356 &hf_dhcp_option_isns_discovery_domain_access_control_node
,
4357 &hf_dhcp_option_isns_discovery_domain_access_iscsi_target
,
4358 &hf_dhcp_option_isns_discovery_domain_access_iscsi_inititator
,
4359 &hf_dhcp_option_isns_discovery_domain_access_ifcp_target_port
,
4360 &hf_dhcp_option_isns_discovery_domain_access_ifcp_initiator_port
,
4361 &hf_dhcp_option_isns_discovery_domain_access_reserved
,
4365 static int * const isns_administrative_flags
[] = {
4366 &hf_dhcp_option_isns_administrative_flags_enabled
,
4367 &hf_dhcp_option_isns_administrative_flags_heartbeat
,
4368 &hf_dhcp_option_isns_administrative_flags_management_scns
,
4369 &hf_dhcp_option_isns_administrative_flags_default_dd
,
4370 &hf_dhcp_option_isns_administrative_flags_reserved
,
4374 static int * const isns_server_security_flags
[] = {
4375 &hf_dhcp_option_isns_server_security_bitmap_enabled
,
4376 &hf_dhcp_option_isns_server_security_bitmap_ike_ipsec_enabled
,
4377 &hf_dhcp_option_isns_server_security_bitmap_main_mode
,
4378 &hf_dhcp_option_isns_server_security_bitmap_aggressive_mode
,
4379 &hf_dhcp_option_isns_server_security_bitmap_pfs
,
4380 &hf_dhcp_option_isns_server_security_bitmap_transport_mode
,
4381 &hf_dhcp_option_isns_server_security_bitmap_tunnel_mode
,
4382 &hf_dhcp_option_isns_server_security_bitmap_reserved
,
4386 uint16_t function_flags
, dd_access_flags
, administrative_flags
;
4387 uint32_t server_security_flags
;
4388 proto_tree
*server_tree
;
4390 int length
= tvb_reported_length(tvb
);
4391 int offset
= 0, heartbeat_set
= 0;
4394 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length must be >= 14");
4398 item
= proto_tree_add_bitmask(tree
, tvb
, offset
, hf_dhcp_option_isns_functions
,
4399 ett_dhcp_isns_functions
, isns_functions_hf_flags
, ENC_BIG_ENDIAN
);
4400 function_flags
= tvb_get_ntohs(tvb
, offset
);
4401 /* RFC 4174, section "2.1. iSNS Functions Field" specifies that if
4402 * the field "Function Fields Enabled" is set to 0, then "the contents
4403 * of all other iSNS Function fields MUST be ignored. We will display
4404 * the fields but add an informational expert info. This goes for all
4405 * the bitmasks: iSNS Functions, DD Access, Administrative Flags, iSNS
4406 * Server Security Bitmap */
4407 if (ISNS_BITFIELD_NZ_MUST_BE_IGNORED(function_flags
, F_ISNS_FUNCTIONS_ENABLED
))
4408 expert_add_info(pinfo
, item
, &ei_dhcp_option_isns_ignored_bitfield
);
4411 item
= proto_tree_add_bitmask(tree
, tvb
, offset
, hf_dhcp_option_isns_discovery_domain_access
,
4412 ett_dhcp_isns_discovery_domain_access
, isns_dda_hf_flags
, ENC_BIG_ENDIAN
);
4413 dd_access_flags
= tvb_get_ntohs(tvb
, offset
);
4414 if (ISNS_BITFIELD_NZ_MUST_BE_IGNORED(dd_access_flags
, F_ISNS_DD_ACCESS_ENABLED
))
4415 expert_add_info(pinfo
, item
, &ei_dhcp_option_isns_ignored_bitfield
);
4418 administrative_flags
= tvb_get_ntohs(tvb
, offset
);
4419 if (administrative_flags
& F_ISNS_ADMIN_FLAGS_ENABLED
) {
4420 if ((administrative_flags
& F_ISNS_ADMIN_FLAGS_HEARTBEAT
)) {
4422 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length must be >= 18");
4428 item
= proto_tree_add_bitmask(tree
, tvb
, offset
, hf_dhcp_option_isns_administrative_flags
,
4429 ett_dhcp_isns_administrative_flags
, isns_administrative_flags
, ENC_BIG_ENDIAN
);
4430 if (ISNS_BITFIELD_NZ_MUST_BE_IGNORED(administrative_flags
, F_ISNS_ADMIN_FLAGS_ENABLED
))
4431 expert_add_info(pinfo
, item
, &ei_dhcp_option_isns_ignored_bitfield
);
4434 item
= proto_tree_add_bitmask(tree
, tvb
, offset
, hf_dhcp_option_isns_server_security_bitmap
,
4435 ett_dhcp_isns_server_security_bitmap
, isns_server_security_flags
, ENC_BIG_ENDIAN
);
4436 server_security_flags
= tvb_get_ntohl(tvb
, offset
);
4437 if (ISNS_BITFIELD_NZ_MUST_BE_IGNORED(server_security_flags
, F_ISNS_SRV_SEC_BITMAP_ENABLED
))
4438 expert_add_info(pinfo
, item
, &ei_dhcp_option_isns_ignored_bitfield
);
4441 if (heartbeat_set
) {
4442 proto_tree_add_item(tree
, hf_dhcp_option_isns_heartbeat_originator_addr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4446 proto_tree_add_item(tree
, hf_dhcp_option_isns_primary_server_addr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
4449 if (tvb_reported_length_remaining(tvb
, offset
) > 0) {
4450 server_tree
= proto_tree_add_subtree(tree
, tvb
, offset
, 0, ett_dhcp_isns_secondary_server_addr
,
4451 &item
, "Secondary iSNS Servers");
4452 dhcp_handle_basic_types(pinfo
, server_tree
, item
, tvb
, ipv4_list
, offset
, tvb_reported_length_remaining(tvb
, offset
),
4453 &hf_dhcp_option_isns_secondary_server_addr_list
, NULL
);
4456 return tvb_captured_length(tvb
);
4459 static const value_string option43_cl_suboption_vals
[] = {
4461 { 1, "Suboption Request List" },
4462 { 2, "Device Type" },
4463 { 3, "eSAFE Types" },
4464 { 4, "Serial Number" },
4465 { 5, "Hardware Version" },
4466 { 6, "Software Version" },
4467 { 7, "Boot ROM version" },
4468 { 8, "Organizationally Unique Identifier" },
4469 { 9, "Model Number" },
4470 { 10, "Vendor Name" },
4471 { 11, "Address Realm" },
4472 { 12, "CM/PS System Description" },
4473 { 13, "CM/PS Firmware Revision" },
4474 { 14, "Firewall Policy File Version" },
4475 { 15, "eSafe Config File Devices" },
4476 { 18, "Video Security Type" },
4477 { 31, "MTA MAC Address" },
4478 { 32, "Correlation ID" },
4479 { 51, "Vendor Name" },
4480 { 52, "CableCARD Capability" },
4481 { 53, "Device Identification (CA)" },
4482 { 54, "Device Identification (X.509)" },
4483 { 179, "LCM Server" },
4484 { 180, "LCM Domain" },
4485 { 181, "LCM NIC option 0" },
4486 { 190, "LCM Workgroup" },
4487 { 191, "Discovery" },
4488 { 192, "HH Configured" },
4489 { 193, "LCM Version" },
4490 { 194, "LCM Serial Number" },
4495 static const value_string cablehome_subopt11_vals
[] = {
4496 { 1, "PS WAN-Man" },
4497 { 2, "PS WAN-Data" },
4502 dissect_vendor_cablelabs_suboption(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
,
4503 tvbuff_t
*tvb
, int optoff
, int optend
)
4505 int suboptoff
= optoff
;
4508 proto_tree
*o43cl_v_tree
;
4511 static const struct basic_types_hfs default_hfs
= {
4512 &hf_dhcp_option43_value
,
4515 &hf_dhcp_option43_value_stringz
,
4517 &hf_dhcp_option43_value_8
,
4520 &hf_dhcp_option43_value_32
,
4525 static const struct opt_info o43cablelabs_opt
[]= {
4526 /* 0 */ {"nop", special
, &hf_dhcp_option43_cl_padding
}, /* dummy */
4527 /* 1 */ {"Suboption Request List", string
, &hf_dhcp_option43_cl_suboption_request_list
},
4528 /* 2 */ {"Device Type", string
, &hf_dhcp_option43_cl_device_type
},
4529 /* 3 */ {"eSAFE Types", string
, &hf_dhcp_option43_cl_esafe_type
},
4530 /* 4 */ {"Serial Number", string
, &hf_dhcp_option43_cl_serial_number
},
4531 /* 5 */ {"Hardware Version", string
, &hf_dhcp_option43_cl_hardware_version
},
4532 /* 6 */ {"Software Version", string
, &hf_dhcp_option43_cl_software_version
},
4533 /* 7 */ {"Boot ROM version", string
, &hf_dhcp_option43_cl_boot_rom_version
},
4534 /* 8 */ {"Organizationally Unique Identifier", special
, &hf_dhcp_option43_cl_oui_bytes
},
4535 /* 9 */ {"Model Number", string
, &hf_dhcp_option43_cl_model_number
},
4536 /* 10 */ {"Vendor Name", string
, &hf_dhcp_option43_cl_vendor_name10
},
4537 /* *** 11-30: CableHome *** */
4538 /* 11 */ {"Address Realm", val_u_byte
, &hf_dhcp_option43_cl_address_realm
},
4539 /* 12 */ {"CM/PS System Description", string
, &hf_dhcp_option43_cl_cm_ps_system_desc
},
4540 /* 13 */ {"CM/PS Firmware Revision", string
, &hf_dhcp_option43_cl_cm_ps_firmware_revision
},
4541 /* 14 */ {"Firewall Policy File Version", string
, &hf_dhcp_option43_cl_firewall_policy_file_version
},
4542 /* 15 */ {"eSafe Config File Devices", string
, &hf_dhcp_option43_cl_esafe_config_file_devices
},
4543 /* 16 */ {"Unassigned (CableHome)", special
, NULL
},
4544 /* 17 */ {"Unassigned (CableHome)", special
, NULL
},
4545 /* 18 */ {"Video Security Type", string
, &hf_dhcp_option43_cl_video_security_tape
},
4546 /* 19 */ {"Unassigned (CableHome)", special
, NULL
},
4547 /* 20 */ {"Unassigned (CableHome)", special
, NULL
},
4548 /* 21 */ {"Unassigned (CableHome)", special
, NULL
},
4549 /* 22 */ {"Unassigned (CableHome)", special
, NULL
},
4550 /* 23 */ {"Unassigned (CableHome)", special
, NULL
},
4551 /* 24 */ {"Unassigned (CableHome)", special
, NULL
},
4552 /* 25 */ {"Unassigned (CableHome)", special
, NULL
},
4553 /* 26 */ {"Unassigned (CableHome)", special
, NULL
},
4554 /* 27 */ {"Unassigned (CableHome)", special
, NULL
},
4555 /* 28 */ {"Unassigned (CableHome)", special
, NULL
},
4556 /* 29 */ {"Unassigned (CableHome)", special
, NULL
},
4557 /* 30 */ {"Unassigned (CableHome)", special
, NULL
},
4558 /* *** 31-50: PacketCable *** */
4559 /* 31 */ {"MTA MAC Address", special
, &hf_dhcp_option43_cl_mta_mac_address
},
4560 /* 32 */ {"Correlation ID", val_u_long
, &hf_dhcp_option43_cl_correlation_ID
},
4561 /* 33 */ {"Unassigned (PacketCable)", special
, NULL
},
4562 /* 34 */ {"Unassigned (PacketCable)", special
, NULL
},
4563 /* 35 */ {"Unassigned (PacketCable)", special
, NULL
},
4564 /* 36 */ {"Unassigned (PacketCable)", special
, NULL
},
4565 /* 37 */ {"Unassigned (PacketCable)", special
, NULL
},
4566 /* 38 */ {"Unassigned (PacketCable)", special
, NULL
},
4567 /* 39 */ {"Unassigned (PacketCable)", special
, NULL
},
4568 /* 40 */ {"Unassigned (PacketCable)", special
, NULL
},
4569 /* 41 */ {"Unassigned (PacketCable)", special
, NULL
},
4570 /* 42 */ {"Unassigned (PacketCable)", special
, NULL
},
4571 /* 43 */ {"Unassigned (PacketCable)", special
, NULL
},
4572 /* 44 */ {"Unassigned (PacketCable)", special
, NULL
},
4573 /* 45 */ {"Unassigned (PacketCable)", special
, NULL
},
4574 /* 46 */ {"Unassigned (PacketCable)", special
, NULL
},
4575 /* 47 */ {"Unassigned (PacketCable)", special
, NULL
},
4576 /* 48 */ {"Unassigned (PacketCable)", special
, NULL
},
4577 /* 49 */ {"Unassigned (PacketCable)", special
, NULL
},
4578 /* 50 */ {"Unassigned (PacketCable)", special
, NULL
},
4579 /* *** 51-127: CableLabs *** */
4580 /* 51 */ {"Vendor Name", string
, &hf_dhcp_option43_cl_vendor_name51
},
4581 /* 52 */ {"CableCARD Capability", special
, &hf_dhcp_option43_cl_cablecard_capability
},
4582 /* 53 */ {"Device Identification (CA)", special
, &hf_dhcp_option43_cl_device_id_ca
},
4583 /* 54 */ {"Device Identification (X.509)", string
, &hf_dhcp_option43_cl_device_id_x509
},
4584 /* 55 */ {"Unassigned (CableLabs)", special
, NULL
},
4585 /* *** 128-254: Vendors *** */
4586 /* 128-254 {"Unassigned (Vendors)", special, NULL}, */
4587 /* 255 {"end options", special, &hf_dhcp_option43_cl_end} */
4590 subopt
= tvb_get_uint8(tvb
, optoff
);
4594 proto_tree_add_item(v_tree
, hf_dhcp_option43_cl_padding
, tvb
, optoff
, 1, ENC_BIG_ENDIAN
);
4596 } else if (subopt
== 255) { /* End Option */
4597 proto_tree_add_item(v_tree
, hf_dhcp_option43_cl_end
, tvb
, optoff
, 1, ENC_BIG_ENDIAN
);
4598 /* Make sure we skip any junk left this option */
4602 if (suboptoff
>= optend
) {
4603 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
4604 "Suboption %d: no room left in option for suboption length", subopt
);
4608 subopt_len
= tvb_get_uint8(tvb
, suboptoff
);
4609 vti
= proto_tree_add_uint_format_value(v_tree
, hf_dhcp_option43_cl_suboption
,
4610 tvb
, optoff
, subopt_len
+2, subopt
, "(%d) %s",
4611 subopt
, val_to_str_const(subopt
, option43_cl_suboption_vals
, "Unknown"));
4613 o43cl_v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option43_suboption
);
4614 proto_tree_add_item(o43cl_v_tree
, hf_dhcp_suboption_length
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
);
4617 if (suboptoff
+subopt_len
> optend
) {
4618 expert_add_info_format(pinfo
, vti
, &ei_dhcp_missing_subopt_value
,
4619 "Suboption %d: no room left in option for suboption value", subopt
);
4623 if ( (subopt
< 1 ) || (subopt
>= array_length(o43cablelabs_opt
)) ) {
4624 proto_tree_add_item(o43cl_v_tree
, hf_dhcp_option43_value
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
4625 } else if (o43cablelabs_opt
[subopt
].ftype
== special
) {
4629 /* CableLabs specs treat 43.8 inconsistently
4630 * as either binary (3b) or string (6b) */
4631 if (subopt_len
== 3) {
4632 proto_tree_add_bytes_format_value(o43cl_v_tree
, hf_dhcp_option43_cl_oui_bytes
, tvb
, suboptoff
, subopt_len
, NULL
,
4633 "%02x:%02x:%02x", tvb_get_uint8(tvb
, suboptoff
), tvb_get_uint8(tvb
, suboptoff
+1), tvb_get_uint8(tvb
, suboptoff
+2));
4634 } else if (subopt_len
== 6) {
4635 proto_tree_add_item(o43cl_v_tree
, hf_dhcp_option43_cl_oui_string
, tvb
, suboptoff
, subopt_len
, ENC_ASCII
);
4637 expert_add_info_format(pinfo
, vti
, &ei_dhcp_bad_length
, "length isn't 3 or 6");
4640 case 31: /* MTA MAC address */
4641 if (subopt_len
!= 6) {
4642 expert_add_info_format(pinfo
, vti
, &ei_dhcp_bad_length
, "length isn't 6");
4646 proto_tree_add_item(o43cl_v_tree
, hf_dhcp_option43_cl_mta_mac_address
, tvb
, suboptoff
, 6, ENC_NA
);
4649 if (o43cablelabs_opt
[subopt
].phf
!= NULL
)
4650 proto_tree_add_item(o43cl_v_tree
, *o43cablelabs_opt
[subopt
].phf
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
4652 proto_tree_add_item(o43cl_v_tree
, hf_dhcp_option43_value
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
4656 if (dhcp_handle_basic_types(pinfo
, o43cl_v_tree
, vti
, tvb
, o43cablelabs_opt
[subopt
].ftype
,
4657 suboptoff
, subopt_len
, o43cablelabs_opt
[subopt
].phf
, &default_hfs
) == 0) {
4658 expert_add_info_format(pinfo
, vti
, &ei_dhcp_subopt_unknown_type
, "ERROR, please report: Unknown subopt type handler %d", subopt
);
4662 optoff
+= (subopt_len
+ 2);
4667 dissect_cablelabs_vendor_info_heur( tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data
)
4670 dhcp_option_data_t
*option_data
= (dhcp_option_data_t
*)data
;
4671 proto_tree
* vendor_tree
;
4675 * CableHome - CableHome
4676 * OpenCable2.0 - OpenCable2.0
4677 * PacketCable - pktc
4681 * eDOCSIS - PTA or ECM
4682 * OpenCable TRIF - TR
4685 if ((option_data
->vendor_class_id
!= NULL
) &&
4686 ((strncmp((const char*)option_data
->vendor_class_id
, "pktc", strlen("pktc")) == 0) ||
4687 (strncmp((const char*)option_data
->vendor_class_id
, "docsis", strlen("docsis")) == 0) ||
4688 (strncmp((const char*)option_data
->vendor_class_id
, "OpenCable2.0", strlen("OpenCable2.0")) == 0) ||
4689 (strncmp((const char*)option_data
->vendor_class_id
, "CableHome", strlen("CableHome")) == 0) ||
4690 (strncmp((const char*)option_data
->vendor_class_id
, "RPD", strlen("RPD")) == 0) ||
4691 (strncmp((const char*)option_data
->vendor_class_id
, "RMD", strlen("RMD")) == 0) ||
4692 (strncmp((const char*)option_data
->vendor_class_id
, "ECM", strlen("ECM")) == 0) ||
4693 (strncmp((const char*)option_data
->vendor_class_id
, "PTA", strlen("PTA")) == 0) ||
4694 (strncmp((const char*)option_data
->vendor_class_id
, "DEMARC", strlen("DEMARC")) == 0) ||
4695 (strncmp((const char*)option_data
->vendor_class_id
, "TR", strlen("TR")) == 0) ||
4696 (strncmp((const char*)option_data
->vendor_class_id
, "SROUTER", strlen("SROUTER")) == 0))) {
4697 /* CableLabs standard - see www.cablelabs.com/projects */
4698 proto_item_append_text(tree
, " (CableLabs)");
4699 vendor_tree
= proto_item_add_subtree(tree
, ett_dhcp_option
);
4701 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
4702 offset
= dissect_vendor_cablelabs_suboption(pinfo
, tree
, vendor_tree
,
4703 tvb
, offset
, tvb_reported_length(tvb
));
4712 dissect_aruba_ap_vendor_info_heur( tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void *data
)
4715 dhcp_option_data_t
*option_data
= (dhcp_option_data_t
*)data
;
4716 proto_tree
* vendor_tree
;
4718 if ((option_data
->vendor_class_id
== NULL
) ||
4719 (strncmp((const char*)option_data
->vendor_class_id
, ARUBA_AP
, strlen(ARUBA_AP
)) != 0))
4722 proto_item_append_text(tree
, " (Aruba AP)");
4723 vendor_tree
= proto_item_add_subtree(tree
, ett_dhcp_option
);
4725 proto_tree_add_item(vendor_tree
, hf_dhcp_option43_arubaap_controllerip
, tvb
, offset
, tvb_reported_length(tvb
), ENC_ASCII
);
4730 dissect_aruba_instant_ap_vendor_info_heur( tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void *data
)
4733 int reported_len
= tvb_reported_length(tvb
);
4734 dhcp_option_data_t
*option_data
= (dhcp_option_data_t
*)data
;
4735 proto_tree
* vendor_tree
;
4736 proto_item
* vendor_item
;
4737 int32_t nameorglen
, ampiplen
;
4739 /* Aruba Instant AP */
4740 if ((option_data
->vendor_class_id
== NULL
) ||
4741 (strncmp((const char*)option_data
->vendor_class_id
, ARUBA_INSTANT_AP
, strlen(ARUBA_INSTANT_AP
)) != 0))
4744 proto_item_append_text(tree
, " (Aruba Instant AP)");
4746 vendor_item
= proto_tree_add_item(tree
, hf_dhcp_option43_arubaiap
, tvb
, offset
, reported_len
, ENC_ASCII
);
4747 vendor_tree
= proto_item_add_subtree(vendor_item
, ett_dhcp_option43_suboption
);
4748 nameorglen
= tvb_find_uint8(tvb
, offset
, tvb_reported_length(tvb
), ',');
4749 proto_tree_add_item(vendor_tree
, hf_dhcp_option43_arubaiap_nameorg
, tvb
, offset
, nameorglen
, ENC_ASCII
);
4750 offset
+= (nameorglen
+1);
4751 ampiplen
= tvb_find_uint8(tvb
, offset
, reported_len
-nameorglen
-1, ',') - offset
;
4752 proto_tree_add_item(vendor_tree
, hf_dhcp_option43_arubaiap_ampip
, tvb
, offset
, ampiplen
, ENC_ASCII
);
4753 offset
+= (ampiplen
+1);
4754 proto_tree_add_item(vendor_tree
, hf_dhcp_option43_arubaiap_password
, tvb
, offset
, tvb_reported_length_remaining(tvb
, offset
), ENC_ASCII
);
4759 static const value_string option43_bsdp_suboption_vals
[] = {
4761 { 1, "Message Type" },
4763 { 3, "Server Identifier" },
4764 { 4, "Server Priority" },
4765 { 5, "Reply Port" },
4766 { 6, "Boot Image List Path" },
4767 { 7, "Default Boot Image" },
4768 { 8, "Selected Boot Image" },
4769 { 9, "Boot Image List" },
4770 { 10, "NetBoot 1.0 Firmware" },
4771 { 11, "Boot Image Attributes Filter List" },
4772 { 12, "Maximum Message Size" },
4778 dissect_vendor_bsdp_boot_image(proto_tree
*v_tree
, tvbuff_t
*tvb
, int optoff
)
4780 static int * const dhcp_o43_bsdp_attributes_flags
[] = {
4781 &hf_dhcp_option43_bsdp_boot_image_attribute_install
,
4782 &hf_dhcp_option43_bsdp_boot_image_attribute_kind
,
4783 &hf_dhcp_option43_bsdp_boot_image_attribute_reserved
,
4787 proto_tree_add_bitmask(v_tree
, tvb
, optoff
, hf_dhcp_option43_bsdp_boot_image_attribute
, ett_dhcp_o43_bsdp_attributes_flags
, dhcp_o43_bsdp_attributes_flags
, ENC_NA
);
4791 dissect_vendor_bsdp_suboption(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
,
4792 tvbuff_t
*tvb
, int optoff
, int optend
)
4794 int suboptoff
= optoff
;
4796 uint8_t subopt
, string_len
;
4797 uint8_t subopt_len
, attributes_len
;
4799 proto_tree
*o43bsdp_v_tree
, *o43bsdp_va_tree
, *o43bsdp_vb_tree
, *o43bsdp_vc_tree
, *o43bsdp_vd_tree
;
4800 proto_item
*vti
, *ti
, *tj
;
4802 subopt
= tvb_get_uint8(tvb
, optoff
);
4805 if (subopt
== 0 || subopt
== 255) {
4806 /* Pad (0) and End (255) have implicit length of 1. */
4808 } else if (suboptoff
>= optend
) {
4809 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
4810 "Suboption %d: no room left in option for suboption length", subopt
);
4813 subopt_len
= tvb_get_uint8(tvb
, suboptoff
);
4814 item_len
= subopt_len
+ 2;
4817 vti
= proto_tree_add_uint_format_value(v_tree
, hf_dhcp_option43_bsdp_suboption
,
4818 tvb
, optoff
, item_len
, subopt
, "(%d) %s",
4819 subopt
, val_to_str_const(subopt
, option43_bsdp_suboption_vals
, "Unknown"));
4820 if (item_len
== 1) {
4821 return (optoff
+ 1);
4824 o43bsdp_v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option43_suboption
);
4825 proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_suboption_length
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
);
4828 if (suboptoff
+subopt_len
> optend
) {
4829 expert_add_info_format(pinfo
, vti
, &ei_dhcp_missing_subopt_value
,
4830 "Suboption %d: no room left in option for suboption value", subopt
);
4837 proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_message_type
, tvb
, suboptoff
, subopt_len
, ENC_ASCII
|ENC_NA
);
4840 proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_version
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
4843 proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_server_identifier
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
4846 proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_server_priority
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
4849 proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_reply_port
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
4852 proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_boot_image_list_path
, tvb
, suboptoff
, subopt_len
, ENC_ASCII
);
4855 ti
= proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_default_boot_image_id
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
|ENC_NA
);
4856 o43bsdp_va_tree
= proto_item_add_subtree(ti
, ett_dhcp_o43_bsdp_boot_image
);
4857 dissect_vendor_bsdp_boot_image(o43bsdp_va_tree
, tvb
, suboptoff
);
4858 proto_tree_add_item(o43bsdp_va_tree
, hf_dhcp_option43_bsdp_boot_image_index
, tvb
, suboptoff
+2, subopt_len
-2, ENC_BIG_ENDIAN
|ENC_NA
);
4861 ti
= proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_selected_boot_image_id
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
|ENC_NA
);
4862 o43bsdp_vc_tree
= proto_item_add_subtree(ti
, ett_dhcp_o43_bsdp_boot_image
);
4863 dissect_vendor_bsdp_boot_image(o43bsdp_vc_tree
, tvb
, suboptoff
);
4864 proto_tree_add_item(o43bsdp_vc_tree
, hf_dhcp_option43_bsdp_boot_image_index
, tvb
, suboptoff
+2, subopt_len
-2, ENC_BIG_ENDIAN
|ENC_NA
);
4867 ti
= proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_boot_image_list
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
|ENC_NA
);
4868 attributes_len
= subopt_len
;
4869 attributes_off
= suboptoff
;
4870 o43bsdp_vd_tree
= proto_item_add_subtree(ti
, ett_dhcp_o43_bsdp_image_desc_list
);
4871 while (attributes_len
>= 5) {
4872 string_len
= tvb_get_uint8(tvb
, attributes_off
+4);
4873 if (string_len
> 0) {
4874 tj
= proto_tree_add_item(o43bsdp_vd_tree
, hf_dhcp_option43_bsdp_image_desc
, tvb
, attributes_off
, string_len
+5, ENC_BIG_ENDIAN
|ENC_NA
);
4875 o43bsdp_vb_tree
= proto_item_add_subtree(tj
, ett_dhcp_o43_bsdp_image_desc
);
4876 dissect_vendor_bsdp_boot_image(o43bsdp_vb_tree
, tvb
, attributes_off
);
4877 proto_tree_add_item(o43bsdp_vb_tree
, hf_dhcp_option43_bsdp_boot_image_index
, tvb
, attributes_off
+2, 2, ENC_BIG_ENDIAN
|ENC_NA
);
4878 proto_tree_add_item(o43bsdp_vb_tree
, hf_dhcp_option43_bsdp_boot_image_name_len
, tvb
, attributes_off
+4, 1, ENC_BIG_ENDIAN
|ENC_NA
);
4879 proto_tree_add_item(o43bsdp_vb_tree
, hf_dhcp_option43_bsdp_boot_image_name
, tvb
, attributes_off
+5, string_len
, ENC_UTF_8
);
4881 attributes_off
+= 5 + string_len
;
4882 attributes_len
-= 5 + string_len
;
4886 proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_netboot_firmware
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
4889 ti
= proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_attributes_filter_list
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
|ENC_NA
);
4890 attributes_len
= subopt_len
;
4891 attributes_off
= suboptoff
;
4892 o43bsdp_va_tree
= proto_item_add_subtree(ti
, ett_dhcp_o43_bsdp_attributes
);
4893 while (attributes_len
>= 2) {
4894 dissect_vendor_bsdp_boot_image(o43bsdp_va_tree
, tvb
, attributes_off
);
4900 proto_tree_add_item(o43bsdp_v_tree
, hf_dhcp_option43_bsdp_message_size
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
|ENC_NA
);
4909 dissect_apple_bsdp_vendor_info_heur(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data
)
4912 dhcp_option_data_t
*option_data
= (dhcp_option_data_t
*)data
;
4913 proto_tree
* vendor_tree
;
4915 if ((option_data
->vendor_class_id
== NULL
) ||
4916 (strncmp((const char*)option_data
->vendor_class_id
, APPLE_BSDP_SERVER
, strlen(APPLE_BSDP_SERVER
)) != 0))
4920 proto_item_append_text(tree
, " (Boot Server Discovery Protocol (BSDP))");
4921 vendor_tree
= proto_item_add_subtree(tree
, ett_dhcp_option
);
4923 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
4924 offset
= dissect_vendor_bsdp_suboption(pinfo
, tree
, vendor_tree
,
4925 tvb
, offset
, tvb_reported_length(tvb
));
4931 /* Cisco Vendor Specific Information */
4934 { 1, "1" }, * D,R: 03 *
4935 { 2, "2" }, * D,R: 01 *
4936 { 3, "3" }, * D,R: 00 01 # O,A: 00 02 *
4937 { 4, "Node ID" }, * O,A: 00 00 00 ca *
4938 { 5, "5" }, * O,A: 01 *
4939 { 6, "6" }, * D,R: 01 # O,A: 01 *
4940 { 7, "Model" }, * D,R: N9K-C9336PQ *
4941 { 8, "APIC UUID" }, * O,A: 09bced36-69f1-11e6-96ce-8baf09371338 *
4942 { 9, "Fabricname" }, * O,A: ams-fab1 *
4943 { 10, "10" }, * D,R: 00 00 00 01 *
4944 { 11, "SerialNo" }, * D,R: SAL1926J4QW *
4945 { 12, "Client Int" }, * D,O: eth1/20.20 # R,A: eth1/20.20 *
4947 static const value_string option43_cisco_suboption_vals
[] = {
4948 { 1, "Unk-1 (Node role?)" }, /* uint8 */
4949 { 2, "Unk-2 (Spine level?)" }, /* uint8 */
4950 { 3, "Unk-3 (Pod ID?)" }, /* uint16 */
4951 { 4, "Node ID" }, /* uint32 */
4952 { 5, "Unk-5" }, /* uint8 */
4953 { 6, "Unk-6" }, /* uint8 */
4954 { 7, "Model" }, /* String */
4955 { 8, "APIC UUID" }, /* String */
4956 { 9, "Fabricname" }, /* String */
4957 { 10, "Unk-10" }, /* uint32 */
4958 { 11, "SerialNo" }, /* String */
4959 { 12, "Interfacename" }, /* String */
4965 dissect_vendor_cisco_suboption(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
,
4966 tvbuff_t
*tvb
, int optoff
, int optend
)
4968 int suboptoff
= optoff
;
4972 proto_tree
*o43cisco_v_tree
;
4975 subopt
= tvb_get_uint8(tvb
, optoff
);
4978 if (suboptoff
>= optend
) {
4979 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
4980 "Suboption %d: No room left in option for suboption length", subopt
);
4983 subopt_len
= tvb_get_uint8(tvb
, suboptoff
);
4984 item_len
= subopt_len
+ 2;
4987 vti
= proto_tree_add_uint_format_value(v_tree
, hf_dhcp_option43_cisco_suboption
,
4988 tvb
, optoff
, item_len
, subopt
, "(%d) %s",
4989 subopt
, val_to_str_const(subopt
, option43_cisco_suboption_vals
, "Unknown"));
4991 o43cisco_v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option43_suboption
);
4992 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_suboption_length
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
);
4995 if (suboptoff
+subopt_len
> optend
) {
4996 expert_add_info_format(pinfo
, vti
, &ei_dhcp_missing_subopt_value
,
4997 "Suboption %d: Not sufficient room left in option for suboption value", subopt
);
5004 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_unknown1
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
5007 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_unknown2
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
5010 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_unknown3
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
5013 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_nodeid
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
5016 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_unknown5
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
5019 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_unknown6
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
5022 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_model
, tvb
, suboptoff
, subopt_len
, ENC_ASCII
);
5025 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_apicuuid
, tvb
, suboptoff
, subopt_len
, ENC_ASCII
);
5028 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_fabricname
, tvb
, suboptoff
, subopt_len
, ENC_ASCII
);
5031 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_unknown10
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
5034 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_serialno
, tvb
, suboptoff
, subopt_len
, ENC_ASCII
);
5037 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_clientint
, tvb
, suboptoff
, subopt_len
, ENC_ASCII
);
5040 proto_tree_add_item(o43cisco_v_tree
, hf_dhcp_option43_cisco_unknown
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
5048 dissect_cisco_vendor_info_heur(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data
)
5051 dhcp_option_data_t
*option_data
= (dhcp_option_data_t
*)data
;
5052 proto_tree
* vendor_tree
;
5054 if ((option_data
->vendor_class_id
== NULL
) ||
5055 (strncmp((const char*)option_data
->vendor_class_id
, CISCO_VCID
, strlen(CISCO_VCID
)) != 0))
5058 /* Cisco ACI Fabric*/
5059 proto_item_append_text(tree
, " (Cisco ACI Fabric)");
5060 vendor_tree
= proto_item_add_subtree(tree
, ett_dhcp_option
);
5062 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
5063 offset
= dissect_vendor_cisco_suboption(pinfo
, tree
, vendor_tree
,
5064 tvb
, offset
, tvb_reported_length(tvb
));
5070 /* Aerohive (Extremenetworks) Vendor Specific Information */
5072 static const value_string option43_aerohive_suboption_vals
[] = {
5073 { 225, "XiqHostname" }, /* String */
5074 { 226, "XiqIpAddress" }, /* Ipv4address */
5080 dissect_vendor_aerohive_suboption(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
,
5081 tvbuff_t
*tvb
, int optoff
, int optend
)
5083 int suboptoff
= optoff
;
5087 proto_tree
*o43aerohive_v_tree
;
5090 subopt
= tvb_get_uint8(tvb
, optoff
);
5093 if (suboptoff
>= optend
) {
5094 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
5095 "Suboption %d: No room left in option for suboption length", subopt
);
5098 subopt_len
= tvb_get_uint8(tvb
, suboptoff
);
5099 item_len
= subopt_len
+ 2;
5102 vti
= proto_tree_add_uint_format_value(v_tree
, hf_dhcp_option43_aerohive_suboption
,
5103 tvb
, optoff
, item_len
, subopt
, "(%d) %s",
5104 subopt
, val_to_str_const(subopt
, option43_aerohive_suboption_vals
, "Unknown"));
5106 o43aerohive_v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option43_suboption
);
5107 proto_tree_add_item(o43aerohive_v_tree
, hf_dhcp_suboption_length
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
);
5110 if (suboptoff
+subopt_len
> optend
) {
5111 expert_add_info_format(pinfo
, vti
, &ei_dhcp_missing_subopt_value
,
5112 "Suboption %d: Not sufficient room left in option for suboption value", subopt
);
5119 proto_tree_add_item(o43aerohive_v_tree
, hf_dhcp_option43_aerohive_xiqhostname
, tvb
, suboptoff
, subopt_len
, ENC_ASCII
);
5122 proto_tree_add_item(o43aerohive_v_tree
, hf_dhcp_option43_aerohive_xiqipaddress
, tvb
, suboptoff
, subopt_len
, ENC_BIG_ENDIAN
);
5125 proto_tree_add_item(o43aerohive_v_tree
, hf_dhcp_option43_aerohive_unknown
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
5133 dissect_aerohive_vendor_info_heur(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data
)
5136 dhcp_option_data_t
*option_data
= (dhcp_option_data_t
*)data
;
5137 proto_tree
* vendor_tree
;
5139 if ((option_data
->vendor_class_id
== NULL
) ||
5140 (strncmp((const char*)option_data
->vendor_class_id
, AEROHIVE_VCID
, strlen(AEROHIVE_VCID
)) != 0))
5143 /* Cisco ACI Fabric*/
5144 proto_item_append_text(tree
, " (Aerohive)");
5145 vendor_tree
= proto_item_add_subtree(tree
, ett_dhcp_option
);
5147 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
5148 offset
= dissect_vendor_aerohive_suboption(pinfo
, tree
, vendor_tree
,
5149 tvb
, offset
, tvb_reported_length(tvb
));
5156 dissect_vendor_generic_suboption(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
,
5157 tvbuff_t
*tvb
, uint32_t optoff
, uint32_t optend
)
5159 uint32_t suboptoff
= optoff
;
5161 uint32_t subopt_len
;
5163 proto_tree
*sub_tree
;
5165 item
= proto_tree_add_item(v_tree
, hf_dhcp_vendor_unknown_suboption
, tvb
, optoff
, 1, ENC_NA
);
5166 subopt
= tvb_get_uint8(tvb
, optoff
);
5170 if (suboptoff
>= optend
) {
5171 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
5172 "Suboption %d: no room left in option for suboption length", subopt
);
5176 sub_tree
= proto_item_add_subtree(item
, ett_dhcp_option125_suboption
);
5177 proto_tree_add_item_ret_uint(sub_tree
, hf_dhcp_suboption_length
, tvb
, suboptoff
, 1, ENC_NA
, &subopt_len
);
5180 if (suboptoff
+subopt_len
> optend
) {
5181 expert_add_info_format(pinfo
, item
, &ei_dhcp_missing_subopt_value
,
5182 "Suboption %d: no room left in option for suboption value", subopt
);
5186 proto_tree_add_item(sub_tree
, hf_dhcp_suboption_data
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
5187 suboptoff
+= subopt_len
;
5194 dissect_dhcpopt_vi_vendor_specific_info(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
5196 uint32_t offset
= 0;
5197 uint32_t enterprise
= 0;
5199 uint32_t option_data_len
= 0;
5203 while (tvb_reported_length_remaining(tvb
, offset
) >= 5) {
5205 vti
= proto_tree_add_item_ret_uint(tree
, hf_dhcp_option125_enterprise
, tvb
, offset
, 4, ENC_BIG_ENDIAN
, &enterprise
);
5206 e_tree
= proto_item_add_subtree(vti
, ett_dhcp_option
);
5209 proto_tree_add_item_ret_uint(e_tree
, hf_dhcp_option125_length
, tvb
, offset
, 1, ENC_NA
, &option_data_len
);
5212 s_end
= offset
+ option_data_len
;
5213 if ( tvb_reported_length_remaining(tvb
, s_end
) < 0 ) {
5214 expert_add_info_format(pinfo
, vti
, &ei_dhcp_option125_enterprise_malformed
, "no room left in option for enterprise %u data", enterprise
);
5218 while (offset
< s_end
) {
5219 tvbuff_t
*enterprise_tvb
= tvb_new_subset_length(tvb
, offset
, option_data_len
);
5220 int bytes_dissected
= dissector_try_uint(dhcp_enterprise_specific_table
, enterprise
, enterprise_tvb
, pinfo
, e_tree
);
5221 if (bytes_dissected
== 0) {
5222 offset
= dissect_vendor_generic_suboption(pinfo
, vti
, e_tree
, tvb
, offset
, s_end
);
5224 offset
+= bytes_dissected
;
5229 if (tvb_reported_length_remaining(tvb
, offset
) > 0) {
5230 expert_add_info_format(pinfo
, tree
, &ei_dhcp_bad_length
, "length < 5");
5233 return tvb_captured_length(tvb
);
5236 static const value_string option43_alcatel_suboption_vals
[] = {
5238 { 58, "Voice VLAN ID" },
5239 { 64, "Spatial Redundancy TFTP1" },
5240 { 65, "Spatial Redundancy TFTP2" },
5241 { 66, "Application Type" },
5243 { 255, "Alcatel-Lucent End" },
5247 static const value_string option43_alcatel_app_type_vals
[] = {
5253 /* If an Alcatel-Lucent Option 43 suboption has a known fixed length,
5254 * return that length. Returns 0 for variable length options and unknown
5258 get_alcatel_suboption_len(unsigned subopt
)
5261 case 58: /* 0x3A - Alcatel-Lucent AVA VLAN Id */
5263 case 64: /* 0x40 - Alcatel-Lucent TFTP1 */
5265 case 65: /* 0x41 - Alcatel-Lucent TFTP2 */
5267 case 66: /* 0x42 - Alcatel-Lucent APPLICATION TYPE */
5269 case 0: /* Alcatel-Lucent Padding */
5270 case 67: /* 0x43 - Alcatel-Lucent SIP URL */
5271 case 255: /* Alcatel-Lucent End */
5278 dissect_vendor_alcatel_suboption(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
,
5279 tvbuff_t
*tvb
, int optoff
, int optend
)
5281 int suboptoff
= optoff
;
5285 proto_tree
*o43alcatel_v_tree
;
5287 subopt
= tvb_get_uint8(tvb
, optoff
);
5291 proto_tree_add_item(v_tree
, hf_dhcp_option43_alcatel_padding
, tvb
, optoff
, 1, ENC_BIG_ENDIAN
);
5293 } else if (subopt
== 255) { /* End Option */
5294 proto_tree_add_item(v_tree
, hf_dhcp_option43_alcatel_end
, tvb
, optoff
, 1, ENC_BIG_ENDIAN
);
5295 /* Make sure we skip any junk left this option */
5299 if (suboptoff
>= optend
) {
5300 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
5301 "Suboption %d: no room left in option for suboption length", subopt
);
5305 subopt_len
= tvb_get_uint8(tvb
, suboptoff
);
5306 vti
= proto_tree_add_uint_format_value(v_tree
, hf_dhcp_option43_alcatel_suboption
,
5307 tvb
, optoff
, subopt_len
+2, subopt
, "(%d) %s",
5308 subopt
, val_to_str_const(subopt
, option43_alcatel_suboption_vals
, "Unknown"));
5310 o43alcatel_v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option43_suboption
);
5311 proto_tree_add_item(o43alcatel_v_tree
, hf_dhcp_suboption_length
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
);
5314 if (suboptoff
+subopt_len
> optend
) {
5315 expert_add_info_format(pinfo
, vti
, &ei_dhcp_missing_subopt_value
,
5316 "Suboption %d: no room left in option for suboption value", subopt
);
5320 unsigned subopt_len_expected
= get_alcatel_suboption_len(subopt
);
5321 if (subopt_len_expected
&& subopt_len_expected
!= subopt_len
) {
5322 expert_add_info_format(pinfo
, vti
, &ei_dhcp_bad_length
, "length isn't %u", subopt_len_expected
);
5327 case 58: /* 0x3A - Alcatel-Lucent AVA VLAN Id */
5328 proto_tree_add_item(o43alcatel_v_tree
, hf_dhcp_option43_alcatel_vlan_id
, tvb
, suboptoff
, 2, ENC_BIG_ENDIAN
);
5330 case 64: /* 0x40 - Alcatel-Lucent TFTP1 */
5331 proto_tree_add_item(o43alcatel_v_tree
, hf_dhcp_option43_alcatel_tftp1
, tvb
, suboptoff
, 4, ENC_BIG_ENDIAN
);
5333 case 65: /* 0x41 - Alcatel-Lucent TFTP2 */
5334 proto_tree_add_item(o43alcatel_v_tree
, hf_dhcp_option43_alcatel_tftp2
, tvb
, suboptoff
, 4, ENC_BIG_ENDIAN
);
5336 case 66: /* 0x42 - Alcatel-Lucent APPLICATION TYPE */
5337 proto_tree_add_item(o43alcatel_v_tree
, hf_dhcp_option43_alcatel_app_type
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
);
5339 case 67: /* 0x43 - Alcatel-Lucent SIP URL */
5340 proto_tree_add_item(o43alcatel_v_tree
, hf_dhcp_option43_alcatel_sip_url
, tvb
, suboptoff
, subopt_len
, ENC_ASCII
);
5343 expert_add_info_format(pinfo
, vti
, &ei_dhcp_subopt_unknown_type
, "ERROR, please report: Unknown subopt type handler %d", subopt
);
5347 optoff
+= (subopt_len
+ 2);
5352 dissect_alcatel_lucent_vendor_info_heur( tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
5356 proto_tree
* vendor_tree
;
5358 if (tvb_reported_length(tvb
) < 1)
5361 s_option
= tvb_get_uint8(tvb
, offset
);
5362 if ((s_option
==58 || s_option
==64 || s_option
==65
5363 || s_option
==66 || s_option
==67)
5364 && test_encapsulated_vendor_options(tvb
, offset
, tvb_reported_length(tvb
), get_alcatel_suboption_len
)) {
5366 /* Alcatel-Lucent DHCP Extensions */
5367 proto_item_append_text(tree
, " (Alcatel-Lucent)");
5368 vendor_tree
= proto_item_add_subtree(tree
, ett_dhcp_option
);
5370 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
5371 offset
= dissect_vendor_alcatel_suboption(pinfo
, tree
, vendor_tree
,
5372 tvb
, offset
, tvb_reported_length(tvb
));
5380 static const value_string option63_suboption_vals
[] = {
5381 { 1, "NWIP does not exist on subnet" },
5382 { 2, "NWIP exists in options area" },
5383 { 3, "NWIP exists in sname/file" },
5384 { 4, "NWIP exists, but too big" },
5385 { 5, "Broadcast for nearest Netware server" },
5386 { 6, "Preferred DSS server" },
5387 { 7, "Nearest NWIP server" },
5388 { 8, "Autoretries" },
5389 { 9, "Autoretry delay, secs" },
5390 { 10, "Support NetWare/IP v1.1" },
5391 { 11, "Primary DSS" },
5396 dissect_netware_ip_suboption(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
,
5397 tvbuff_t
*tvb
, int optoff
, int optend
)
5399 int suboptoff
= optoff
;
5400 uint8_t subopt
, subopt_len
;
5401 proto_tree
*o63_v_tree
;
5402 proto_item
*vti
, *ti
;
5404 static const struct basic_types_hfs default_hfs
= {
5406 &hf_dhcp_option63_value_ip_address
,
5407 &hf_dhcp_option63_value_ip_address
,
5409 &hf_dhcp_option63_value_boolean
,
5410 &hf_dhcp_option63_value_8
,
5418 static const struct opt_info o63_opt
[]= {
5419 /* 0 */ {"",none
,NULL
},
5420 /* 1 */ {"NWIP does not exist on subnet",presence
,NULL
},
5421 /* 2 */ {"NWIP exists in options area",presence
,NULL
},
5422 /* 3 */ {"NWIP exists in sname/file",presence
,NULL
},
5423 /* 4 */ {"NWIP exists, but too big",presence
,NULL
},
5424 /* 5 */ {"Broadcast for nearest Netware server",val_boolean
, &hf_dhcp_option63_broadcast
},
5425 /* 6 */ {"Preferred DSS server",ipv4_list
,&hf_dhcp_option63_preferred_dss_server
},
5426 /* 7 */ {"Nearest NWIP server",ipv4_list
,&hf_dhcp_option63_nearest_nwip_server
},
5427 /* 8 */ {"Autoretries",val_u_byte
,&hf_dhcp_option63_autoretries
},
5428 /* 9 */ {"Autoretry delay, secs",val_u_byte
,&hf_dhcp_option63_autoretry_delay
},
5429 /* 10*/ {"Support NetWare/IP v1.1",val_boolean
,&hf_dhcp_option63_support_netware_v1_1
},
5430 /* 11*/ {"Primary DSS",ipv4
,&hf_dhcp_option63_primary_dss
}
5433 subopt
= tvb_get_uint8(tvb
, optoff
);
5436 if (suboptoff
>= optend
) {
5437 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
5438 "Suboption %d: no room left in option for suboption length", subopt
);
5442 subopt_len
= tvb_get_uint8(tvb
, suboptoff
);
5443 vti
= proto_tree_add_uint_format_value(v_tree
, hf_dhcp_option63_suboption
,
5444 tvb
, optoff
, subopt_len
+2, subopt
, "(%d) %s",
5445 subopt
, val_to_str_const(subopt
, option63_suboption_vals
, "Unknown"));
5447 o63_v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option63_suboption
);
5448 proto_tree_add_item(o63_v_tree
, hf_dhcp_suboption_length
, tvb
, suboptoff
, 1, ENC_BIG_ENDIAN
);
5451 ti
= proto_tree_add_item(o63_v_tree
, hf_dhcp_option63_value
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
5452 proto_item_set_hidden(ti
);
5454 if (subopt
< array_length(o63_opt
)) {
5455 if (dhcp_handle_basic_types(pinfo
, o63_v_tree
, vti
, tvb
, o63_opt
[subopt
].ftype
,
5456 suboptoff
, subopt_len
, o63_opt
[subopt
].phf
, &default_hfs
) == 0) {
5457 switch(o63_opt
[subopt
].ftype
)
5460 if (subopt_len
!= 0) {
5461 expert_add_info_format(pinfo
, vti
, &ei_dhcp_bad_length
, "length isn't 0");
5465 if (o63_opt
[subopt
].phf
== NULL
)
5466 proto_tree_add_item(o63_v_tree
, hf_dhcp_option63_value
, tvb
, suboptoff
, subopt_len
, ENC_NA
);
5471 optoff
+= (subopt_len
+ 2);
5476 dissect_dhcpopt_netware_ip(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
5480 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
5481 offset
= dissect_netware_ip_suboption(pinfo
, tree
, tree
, tvb
, offset
, tvb_reported_length(tvb
));
5484 return tvb_captured_length(tvb
);
5487 static const value_string option125_tr111_suboption_vals
[] = {
5488 { 1, "DeviceManufacturerOUI" },
5489 { 2, "DeviceSerialNumber" },
5490 { 3, "DeviceProductClass" },
5491 { 4, "GatewayManufacturerOUI" },
5492 { 5, "GatewaySerialNumber" },
5493 { 6, "GatewayProductClass" },
5498 dissect_vendor_tr111_suboption(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
5501 proto_tree
*o125_v_tree
;
5502 proto_item
*vti
, *ti
;
5503 uint8_t subopt
, subopt_len
;
5505 static const struct basic_types_hfs default_hfs
= {
5509 &hf_dhcp_option125_value_stringz
,
5519 /* Reference: TR-111 DHCP Option 125 Sub-Option Data Fields
5523 static const struct opt_info o125_tr111_opt
[]= {
5524 /* 0 */ {"nop", special
, NULL
}, /* dummy */
5525 /* 1 */ {"DeviceManufacturerOUI", oui
, &hf_dhcp_option125_tr111_device_manufacturer_oui
},
5526 /* 2 */ {"DeviceSerialNumber", string
, &hf_dhcp_option125_tr111_device_serial_number
},
5527 /* 3 */ {"DeviceProductClass", string
, &hf_dhcp_option125_tr111_device_product_class
},
5528 /* 4 */ {"GatewayManufacturerOUI", string
, &hf_dhcp_option125_tr111_gateway_manufacturer_oui
},
5529 /* 5 */ {"GatewaySerialNumber", string
, &hf_dhcp_option125_tr111_gateway_serial_number
},
5530 /* 6 */ {"GatewayProductClass", string
, &hf_dhcp_option125_tr111_gateway_product_class
},
5533 subopt
= tvb_get_uint8(tvb
, offset
);
5536 if (tvb_reported_length_remaining(tvb
, offset
) < 1) {
5537 expert_add_info_format(pinfo
, tree
, &ei_dhcp_missing_subopt_length
,
5538 "Suboption %d: no room left in option for suboption length", subopt
);
5542 subopt_len
= tvb_get_uint8(tvb
, offset
);
5543 vti
= proto_tree_add_uint_format_value(tree
, hf_dhcp_option125_tr111_suboption
,
5544 tvb
, offset
, subopt_len
+2, subopt
, "(%d) %s",
5545 subopt
, val_to_str_const(subopt
, option125_tr111_suboption_vals
, "Unknown"));
5547 o125_v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option125_tr111_suboption
);
5548 proto_tree_add_item(o125_v_tree
, hf_dhcp_suboption_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5551 if (tvb_reported_length_remaining(tvb
, offset
) < subopt_len
) {
5552 expert_add_info_format(pinfo
, vti
, &ei_dhcp_missing_subopt_value
,
5553 "Suboption %d: no room left in option for suboption value", subopt
);
5557 ti
= proto_tree_add_item(tree
, hf_dhcp_option125_value
, tvb
, offset
, subopt_len
, ENC_NA
);
5558 proto_item_set_hidden(ti
);
5560 if (subopt
< array_length(o125_tr111_opt
)) {
5561 if (dhcp_handle_basic_types(pinfo
, o125_v_tree
, vti
, tvb
, o125_tr111_opt
[subopt
].ftype
, offset
, subopt_len
, o125_tr111_opt
[subopt
].phf
, &default_hfs
) == 0) {
5562 if (o125_tr111_opt
[subopt
].ftype
== special
) {
5563 if (o125_tr111_opt
[subopt
].phf
!= NULL
)
5564 proto_tree_add_item(o125_v_tree
, *o125_tr111_opt
[subopt
].phf
, tvb
, offset
, subopt_len
, ENC_BIG_ENDIAN
);
5566 proto_tree_add_item(o125_v_tree
, hf_dhcp_option125_value
, tvb
, offset
, subopt_len
, ENC_NA
);
5568 else if (o125_tr111_opt
[subopt
].ftype
== oui
) {
5569 /* Get hex string. Expecting 6 characters. */
5570 const char *oui_string
= (char *)tvb_get_string_enc(pinfo
->pool
, tvb
, offset
, subopt_len
, ENC_ASCII
);
5571 /* Convert to OUI number. Only 3 bytes so no data lost in downcast. */
5572 uint32_t oui_number
= (uint32_t)strtol(oui_string
, NULL
, 16);
5573 /* Add item using oui_vals */
5574 proto_tree_add_uint(o125_v_tree
, *o125_tr111_opt
[subopt
].phf
, tvb
, offset
, subopt_len
, oui_number
);
5575 } else if (o125_tr111_opt
[subopt
].phf
== NULL
)
5576 proto_tree_add_item(o125_v_tree
, hf_dhcp_option125_value
, tvb
, offset
, subopt_len
, ENC_NA
);
5580 return subopt_len
+ 2;
5583 static const value_string option125_cl_suboption_vals
[] = {
5584 { 1, "Option Request" },
5585 { 2, "TFTP Server Addresses" },
5586 { 3, "eRouter Container Option" },
5587 { 4, "MIB Environment Indicator Option" },
5588 { 5, "Modem Capabilities" },
5592 static const value_string pkt_mib_env_ind_opt_vals
[] = {
5593 { 0x00, "Reserved" },
5594 { 0x01, "CableLabs" },
5596 { 0x03, "EuroCableLabs" },
5601 dissect_vendor_cl_suboption(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
5604 uint8_t subopt
, subopt_len
;
5605 proto_tree
*o125_v_tree
;
5608 static const struct basic_types_hfs default_hfs
= {
5609 &hf_dhcp_option125_value
,
5610 &hf_dhcp_option125_value_ip_address
,
5611 &hf_dhcp_option125_value_ip_address
,
5612 &hf_dhcp_option125_value_stringz
,
5614 &hf_dhcp_option125_value_8
,
5615 &hf_dhcp_option125_value_16
,
5622 static const struct opt_info o125_cl_opt
[]= {
5623 /* 0 */ {"nop", special
, NULL
}, /* dummy */
5624 /* 1 */ {"Option Request = ", bytes
, &hf_dhcp_option125_cl_option_request
},
5625 /* 2 */ {"TFTP Server Addresses : ", ipv4_list
, &hf_dhcp_option125_cl_tftp_server_addresses
},
5626 /* 3 */ {"eRouter Container Option : ", bytes
, &hf_dhcp_option125_cl_erouter_container_option
},
5627 /* 4 */ {"MIB Environment Indicator Option = ", val_u_byte
, &hf_dhcp_option125_cl_mib_environment_indicator_option
},
5628 /* 5 */ {"Modem Capabilities : ", special
, &hf_dhcp_option125_cl_modem_capabilities
},
5631 subopt
= tvb_get_uint8(tvb
, offset
);
5634 if (tvb_reported_length_remaining(tvb
, offset
) < 1) {
5635 expert_add_info_format(pinfo
, tree
, &ei_dhcp_missing_subopt_length
,
5636 "Suboption %d: no room left in option for suboption length", subopt
);
5640 subopt_len
= tvb_get_uint8(tvb
, offset
);
5641 vti
= proto_tree_add_uint_format_value(tree
, hf_dhcp_option125_cl_suboption
,
5642 tvb
, offset
, subopt_len
+2, subopt
, "(%d) %s",
5643 subopt
, val_to_str_const(subopt
, option125_cl_suboption_vals
, "Unknown"));
5645 o125_v_tree
= proto_item_add_subtree(vti
, ett_dhcp_option125_cl_suboption
);
5646 proto_tree_add_item(o125_v_tree
, hf_dhcp_suboption_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
5649 if (tvb_reported_length_remaining(tvb
, offset
) < subopt_len
) {
5650 expert_add_info_format(pinfo
, vti
, &ei_dhcp_missing_subopt_value
,
5651 "Suboption %d: no room left in option for suboption value", subopt
);
5655 if (subopt
< array_length(o125_cl_opt
)) {
5656 if (dhcp_handle_basic_types(pinfo
, o125_v_tree
, vti
, tvb
, o125_cl_opt
[subopt
].ftype
,
5657 offset
, subopt_len
, o125_cl_opt
[subopt
].phf
, &default_hfs
) == 0) {
5659 switch(o125_cl_opt
[subopt
].ftype
) {
5661 if (o125_cl_opt
[subopt
].phf
!= NULL
)
5662 proto_tree_add_item(o125_v_tree
, *o125_cl_opt
[subopt
].phf
, tvb
, offset
, subopt_len
, ENC_BIG_ENDIAN
);
5664 proto_tree_add_item(o125_v_tree
, hf_dhcp_option125_value
, tvb
, offset
, subopt_len
, ENC_NA
);
5666 case 5: /* Modem Capabilities */
5667 dissect_docsis_cm_cap(pinfo
, o125_v_tree
, tvb
, offset
-2, subopt_len
+2, true);
5672 if (o125_cl_opt
[subopt
].phf
== NULL
)
5673 proto_tree_add_item(o125_v_tree
, hf_dhcp_option125_value
, tvb
, offset
, subopt_len
, ENC_NA
);
5679 return subopt_len
+ 2;
5682 /* PacketCable Multimedia Terminal Adapter device capabilities (option 60).
5683 Ref: PKT-SP-I05-021127 sections 8.2 and 10 */
5685 #define PKT_MDC_TLV_OFF 10
5688 /* These are ASCII-encoded hexadecimal digits. We use the raw hex equivalent for
5690 #define PKT_MDC_VERSION 0x3031 /* "01" */
5691 #define PKT_MDC_TEL_END 0x3032 /* "02" */
5692 #define PKT_MDC_TGT 0x3033 /* "03" */
5693 #define PKT_MDC_HTTP_ACC 0x3034 /* "04" */
5694 #define PKT_MDC_SYSLOG 0x3035 /* "05" */
5695 #define PKT_MDC_NCS 0x3036 /* "06" */
5696 #define PKT_MDC_PRI_LINE 0x3037 /* "07" */
5697 #define PKT_MDC_VENDOR_TLV 0x3038 /* "08" */
5698 #define PKT_MDC_NVRAM_STOR 0x3039 /* "09" */
5699 #define PKT_MDC_PROV_REP 0x3041 /* "0A" */
5700 #define PKT_MDC_PROV_REP_LC 0x3061 /* "0a" */
5701 #define PKT_MDC_SUPP_CODECS 0x3042 /* "0B" */
5702 #define PKT_MDC_SUPP_CODECS_LC 0x3062 /* "0b" */
5703 #define PKT_MDC_SILENCE 0x3043 /* "0C" */
5704 #define PKT_MDC_SILENCE_LC 0x3063 /* "0c" */
5705 #define PKT_MDC_ECHO_CANCEL 0x3044 /* "0D" */
5706 #define PKT_MDC_ECHO_CANCEL_LC 0x3064 /* "0d" */
5707 #define PKT_MDC_RSVP 0x3045 /* "0E" */
5708 #define PKT_MDC_RSVP_LC 0x3065 /* "0e" */
5709 #define PKT_MDC_UGS_AD 0x3046 /* "0F" */
5710 #define PKT_MDC_UGS_AD_LC 0x3066 /* "0f" */
5711 #define PKT_MDC_IF_INDEX 0x3130 /* "10" */
5712 #define PKT_MDC_FLOW_LOG 0x3131 /* "11" */
5713 #define PKT_MDC_PROV_FLOWS 0x3132 /* "12" */
5714 /* PacketCable 1.5: */
5715 #define PKT_MDC_T38_VERSION 0x3133 /* "13" */
5716 #define PKT_MDC_T38_EC 0x3134 /* "14" */
5717 #define PKT_MDC_RFC2833_DTMF 0x3135 /* "15" */
5718 #define PKT_MDC_VOICE_METRICS 0x3136 /* "16" */
5719 #define PKT_MDC_MIBS 0x3137 /* "17" */
5720 #define PKT_MDC_MGPI 0x3138 /* "18" */
5721 #define PKT_MDC_V152 0x3139 /* "19" */
5722 #define PKT_MDC_CBS 0x3141 /* "1A" */
5723 #define PKT_MDC_CBS_LC 0x3161 /* "1a" */
5725 static const value_string pkt_mdc_type_vals
[] = {
5726 { PKT_MDC_VERSION
, "PacketCable Version" },
5727 { PKT_MDC_TEL_END
, "Number Of Telephony Endpoints" },
5728 { PKT_MDC_TGT
, "TGT Support" },
5729 { PKT_MDC_HTTP_ACC
, "HTTP Download File Access Method Support" },
5730 { PKT_MDC_SYSLOG
, "MTA-24 Event SYSLOG Notification Support" },
5731 { PKT_MDC_NCS
, "NCS Service Flow Support" },
5732 { PKT_MDC_PRI_LINE
, "Primary Line Support" },
5733 { PKT_MDC_VENDOR_TLV
, "Vendor Specific TLV Type(s)" },
5734 { PKT_MDC_NVRAM_STOR
, "NVRAM Ticket/Session Keys Storage Support" },
5735 { PKT_MDC_PROV_REP
, "Provisioning Event Reporting Support" },
5736 { PKT_MDC_PROV_REP_LC
, "Provisioning Event Reporting Support" },
5737 { PKT_MDC_SUPP_CODECS
, "Supported CODEC(s)" },
5738 { PKT_MDC_SUPP_CODECS_LC
, "Supported CODEC(s)" },
5739 { PKT_MDC_SILENCE
, "Silence Suppression Support" },
5740 { PKT_MDC_SILENCE_LC
, "Silence Suppression Support" },
5741 { PKT_MDC_ECHO_CANCEL
, "Echo Cancellation Support" },
5742 { PKT_MDC_ECHO_CANCEL_LC
, "Echo Cancellation Support" },
5743 { PKT_MDC_RSVP
, "RSVP Support/ Reserved" },
5744 { PKT_MDC_RSVP_LC
, "RSVP Support/ Reserved" },
5745 { PKT_MDC_UGS_AD
, "UGS-AD Support" },
5746 { PKT_MDC_UGS_AD_LC
, "UGS-AD Support" },
5747 { PKT_MDC_IF_INDEX
, "MTA's \"ifIndex\" starting number in \"ifTable\"" },
5748 { PKT_MDC_FLOW_LOG
, "Provisioning Flow Logging Support" },
5749 { PKT_MDC_PROV_FLOWS
, "Supported Provisioning Flows" },
5750 /* PacketCable 1.5: */
5751 { PKT_MDC_T38_VERSION
, "T38 Version Support" },
5752 { PKT_MDC_T38_EC
, "T38 Error Correction Support" },
5753 { PKT_MDC_RFC2833_DTMF
, "RFC 2833 DTMF Support" },
5754 { PKT_MDC_VOICE_METRICS
, "Voice Metrics Support" },
5755 { PKT_MDC_MIBS
, "MIB Support" },
5756 { PKT_MDC_MGPI
, "Multiple Grants Per Interval Support" },
5757 { PKT_MDC_V152
, "V.152 Support" },
5758 /* PacketCable 2.0: */
5759 { PKT_MDC_CBS
, "Certificate Bootstrapping Support" },
5760 { PKT_MDC_CBS_LC
, "Certificate Bootstrapping Support" },
5764 static const value_string pkt_mdc_version_vals
[] = {
5765 { 0x3030, "PacketCable 1.0" },
5766 { 0x3031, "PacketCable 1.1/1.5" }, /* 1.5 replaces 1.1-1.3 */
5767 { 0x3032, "PacketCable 2.0" },
5771 static const value_string pkt_mdc_boolean_vals
[] = {
5777 static const value_string pkt_mdc_codec_vals
[] = {
5778 { 0x3031, "other" }, /* "01" */
5779 { 0x3032, "unknown" },
5780 { 0x3033, "G.729" },
5781 { 0x3034, "reserved" },
5782 { 0x3035, "G.729E" },
5784 { 0x3037, "G.726-32" },
5785 { 0x3038, "G.728" },
5786 { 0x3039, "PCMA" }, /* "09" */
5787 { 0x3041, "G.726-16" }, /* "0A" */
5788 { 0x3042, "G.726-24" },
5789 { 0x3043, "G.726-40" },
5792 { 0x3046, "telephone-event" }, /* "0F" */
5796 static const value_string pkt_mdc_t38_version_vals
[] = {
5797 { 0x3030, "Unsupported" },
5798 { 0x3031, "T.38 Version Zero" }, /* default */
5799 { 0x3032, "T.38 Version One" },
5800 { 0x3033, "T.38 Version Two" },
5801 { 0x3035, "T.38 Version Three" },
5805 static const value_string pkt_mdc_t38_ec_vals
[] = {
5807 { 0x3031, "Redundancy" }, /* default */
5812 static const value_string pkt_mdc_mib_orgs
[] = {
5813 { 0x3030, "CableLabs" },
5815 { 0x3032, "EuroCableLabs" },
5816 { 0x3033, "Reserved" },
5817 { 0x3034, "Reserved" },
5818 { 0x3035, "Reserved" },
5819 { 0x3036, "Reserved" },
5820 { 0x3037, "Reserved" },
5821 { 0x3038, "Reserved" },
5822 { 0x3039, "Reserved" },
5826 static int hf_dhcp_pkt_mdc_supp_flow_secure
;
5827 static int hf_dhcp_pkt_mdc_supp_flow_hybrid
;
5828 static int hf_dhcp_pkt_mdc_supp_flow_basic
;
5830 #define PKT_MDC_MIB_CL 0x3030
5831 static int hf_dhcp_pkt_mdc_mib_cl_mta
;
5832 static int hf_dhcp_pkt_mdc_mib_cl_signaling
;
5833 static int hf_dhcp_pkt_mdc_mib_cl_management_event
;
5834 static int hf_dhcp_pkt_mdc_mib_cl_mta_extension
;
5835 static int hf_dhcp_pkt_mdc_mib_cl_mta_signaling_extension
;
5836 static int hf_dhcp_pkt_mdc_mib_cl_mta_mem_extension
;
5837 static int hf_dhcp_pkt_mdc_mib_cl_reserved
;
5839 #define PKT_MDC_MIB_IETF 0x3031
5840 static int hf_dhcp_pkt_mdc_mib_ietf_mta
;
5841 static int hf_dhcp_pkt_mdc_mib_ietf_signaling
;
5842 static int hf_dhcp_pkt_mdc_mib_ietf_management_event
;
5843 static int hf_dhcp_pkt_mdc_mib_ietf_reserved
;
5845 #define PKT_MDC_MIB_EURO 0x3032
5846 static int hf_dhcp_pkt_mdc_mib_euro_mta
;
5847 static int hf_dhcp_pkt_mdc_mib_euro_signaling
;
5848 static int hf_dhcp_pkt_mdc_mib_euro_management_event
;
5849 static int hf_dhcp_pkt_mdc_mib_euro_mta_extension
;
5850 static int hf_dhcp_pkt_mdc_mib_euro_mta_signaling_extension
;
5851 static int hf_dhcp_pkt_mdc_mib_euro_mta_mem_extension
;
5852 static int hf_dhcp_pkt_mdc_mib_euro_reserved
;
5856 dissect_packetcable_mta_cap(proto_tree
*v_tree
, packet_info
*pinfo
, tvbuff_t
*tvb
, int voff
, int len
)
5859 uint32_t flow_val
= 0;
5860 int off
= PKT_MDC_TLV_OFF
+ voff
;
5861 int subopt_off
, max_len
;
5862 unsigned tlv_len
, i
, mib_val
;
5863 uint8_t flow_val_str
[5];
5865 proto_item
*ti
, *mib_ti
;
5866 proto_tree
*subtree
, *subtree2
;
5868 asc_val
= tvb_get_string_enc(pinfo
->pool
, tvb
, off
, 2, ENC_ASCII
);
5869 if (sscanf((char*)asc_val
, "%x", &tlv_len
) != 1 || tlv_len
> 0xff) {
5870 proto_tree_add_expert_format(v_tree
, pinfo
, &ei_dhcp_bad_length
, tvb
, off
, len
- off
,
5872 format_text_string(pinfo
->pool
, asc_val
));
5875 proto_tree_add_uint(v_tree
, hf_dhcp_pkt_mta_cap_len
, tvb
, off
, 2, tlv_len
);
5878 while (off
- voff
< len
) {
5880 raw_val
= tvb_get_ntohs (tvb
, off
);
5883 asc_val
= tvb_get_string_enc(pinfo
->pool
, tvb
, off
+ 2, 2, ENC_ASCII
);
5884 if (sscanf((char*)asc_val
, "%x", &tlv_len
) != 1
5885 || tlv_len
< 1 || tlv_len
> UINT16_MAX
) {
5886 proto_tree_add_expert_format(v_tree
, pinfo
, &ei_dhcp_bad_length
, tvb
, off
, len
- off
,
5888 format_text_string(pinfo
->pool
, asc_val
));
5893 ti
= proto_tree_add_uint_format(v_tree
, hf_dhcp_pkt_mta_cap_type
,
5894 tvb
, off
, 2, raw_val
, "0x%s: %s = ",
5895 tvb_format_text(pinfo
->pool
, tvb
, off
, 2),
5896 val_to_str_const(raw_val
, pkt_mdc_type_vals
, "unknown"));
5897 proto_item_set_len(ti
, (tlv_len
* 2) + 4);
5900 case PKT_MDC_VERSION
:
5901 raw_val
= tvb_get_ntohs(tvb
, off
+ 4);
5902 proto_item_append_text(ti
,
5904 val_to_str_const(raw_val
, pkt_mdc_version_vals
, "Reserved"),
5905 tvb_format_stringzpad(pinfo
->pool
, tvb
, off
+ 4, 2) );
5908 case PKT_MDC_TEL_END
:
5909 case PKT_MDC_IF_INDEX
:
5910 proto_item_append_text(ti
,
5912 tvb_format_stringzpad(pinfo
->pool
, tvb
, off
+ 4, 2) );
5916 case PKT_MDC_HTTP_ACC
:
5917 case PKT_MDC_SYSLOG
:
5919 case PKT_MDC_PRI_LINE
:
5920 case PKT_MDC_NVRAM_STOR
:
5921 case PKT_MDC_PROV_REP
:
5922 case PKT_MDC_PROV_REP_LC
:
5923 case PKT_MDC_SILENCE
:
5924 case PKT_MDC_SILENCE_LC
:
5925 case PKT_MDC_ECHO_CANCEL
:
5926 case PKT_MDC_ECHO_CANCEL_LC
:
5928 case PKT_MDC_RSVP_LC
:
5929 case PKT_MDC_UGS_AD
:
5930 case PKT_MDC_UGS_AD_LC
:
5931 case PKT_MDC_FLOW_LOG
:
5932 case PKT_MDC_RFC2833_DTMF
:
5933 case PKT_MDC_VOICE_METRICS
:
5937 case PKT_MDC_CBS_LC
:
5938 raw_val
= tvb_get_ntohs(tvb
, off
+ 4);
5939 proto_item_append_text(ti
,
5941 val_to_str_const(raw_val
, pkt_mdc_boolean_vals
, "unknown"),
5942 tvb_format_stringzpad(pinfo
->pool
, tvb
, off
+ 4, 2) );
5945 case PKT_MDC_SUPP_CODECS
:
5946 case PKT_MDC_SUPP_CODECS_LC
:
5947 for (i
= 0; i
< tlv_len
; i
++) {
5948 raw_val
= tvb_get_ntohs(tvb
, off
+ 4 + (i
* 2) );
5949 proto_item_append_text(ti
,
5951 plurality(i
+ 1, "", ", "),
5952 val_to_str_const(raw_val
, pkt_mdc_codec_vals
, "unknown"),
5953 tvb_format_stringzpad(pinfo
->pool
, tvb
, off
+ 4 + (i
* 2), 2) );
5957 case PKT_MDC_PROV_FLOWS
:
5958 tvb_memcpy(tvb
, flow_val_str
, off
+ 4, 4);
5959 flow_val_str
[4] = '\0';
5960 /* We are only reading 4 digits which should fit in 32 bits */
5961 flow_val
= (uint32_t)strtoul((char*)flow_val_str
, NULL
, 16);
5962 proto_item_append_text(ti
,
5963 "0x%04x", flow_val
);
5966 case PKT_MDC_T38_VERSION
:
5967 raw_val
= tvb_get_ntohs(tvb
, off
+ 4);
5968 proto_item_append_text(ti
,
5970 val_to_str_const(raw_val
, pkt_mdc_t38_version_vals
, "unknown"),
5971 tvb_format_stringzpad(pinfo
->pool
, tvb
, off
+ 4, 2) );
5974 case PKT_MDC_T38_EC
:
5975 raw_val
= tvb_get_ntohs(tvb
, off
+ 4);
5976 proto_item_append_text(ti
,
5978 val_to_str_const(raw_val
, pkt_mdc_t38_ec_vals
, "unknown"),
5979 tvb_format_stringzpad(pinfo
->pool
, tvb
, off
+ 4, 2) );
5985 case PKT_MDC_VENDOR_TLV
:
5987 proto_item_append_text(ti
,
5989 tvb_format_stringzpad(pinfo
->pool
, tvb
, off
+ 4, tlv_len
* 2) );
5993 subtree
= proto_item_add_subtree(ti
, ett_dhcp_option
);
5994 if (raw_val
== PKT_MDC_PROV_FLOWS
) {
5995 static int * const flows
[] = {
5996 &hf_dhcp_pkt_mdc_supp_flow_secure
,
5997 &hf_dhcp_pkt_mdc_supp_flow_hybrid
,
5998 &hf_dhcp_pkt_mdc_supp_flow_basic
,
6002 proto_tree_add_bitmask_list_value(subtree
, tvb
, off
+ 4, 4, flows
, flow_val
);
6003 } else if (raw_val
== PKT_MDC_MIBS
) {
6004 /* 17 06 02 00 38 02 01 07 */
6005 subopt_off
= off
+ 4;
6006 max_len
= subopt_off
+ (tlv_len
* 2);
6007 while (subopt_off
< max_len
) {
6008 raw_val
= tvb_get_ntohs(tvb
, subopt_off
);
6009 if (raw_val
!= 0x3032) { /* We only know how to handle a length of 2 */
6010 asc_val
= tvb_get_string_enc(pinfo
->pool
, tvb
, subopt_off
, 2, ENC_ASCII
);
6011 proto_tree_add_expert_format(subtree
, pinfo
, &ei_dhcp_bad_length
, tvb
, subopt_off
, 2,
6013 format_text_string(pinfo
->pool
, asc_val
));
6018 raw_val
= tvb_get_ntohs(tvb
, subopt_off
);
6019 asc_val
= tvb_get_string_enc(pinfo
->pool
, tvb
, subopt_off
, 2, ENC_ASCII
);
6020 subtree2
= proto_tree_add_subtree_format(subtree
, tvb
, subopt_off
, 2,
6021 ett_dhcp_option
, &mib_ti
, "%s (%s)",
6022 val_to_str_const(raw_val
, pkt_mdc_mib_orgs
, "Unknown"),
6023 format_text_string(pinfo
->pool
, asc_val
));
6024 if (subopt_off
> off
+ 4 + 2) {
6025 proto_item_append_text(ti
, ", ");
6027 proto_item_append_text(ti
, "%s", val_to_str_const(raw_val
, pkt_mdc_mib_orgs
, "Unknown"));
6030 asc_val
= tvb_get_string_enc(pinfo
->pool
, tvb
, subopt_off
, 2, ENC_ASCII
);
6031 if (sscanf((char*)asc_val
, "%x", &mib_val
) != 1) {
6032 proto_tree_add_expert_format(v_tree
, pinfo
, &ei_dhcp_bad_bitfield
, tvb
, subopt_off
, 2,
6033 "Bogus bitfield: %s", format_text_string(pinfo
->pool
, asc_val
));
6038 case PKT_MDC_MIB_CL
: {
6039 static int * const cl_flags
[] = {
6040 &hf_dhcp_pkt_mdc_mib_cl_mta
,
6041 &hf_dhcp_pkt_mdc_mib_cl_signaling
,
6042 &hf_dhcp_pkt_mdc_mib_cl_management_event
,
6043 &hf_dhcp_pkt_mdc_mib_cl_mta_extension
,
6044 &hf_dhcp_pkt_mdc_mib_cl_mta_signaling_extension
,
6045 &hf_dhcp_pkt_mdc_mib_cl_mta_mem_extension
,
6046 &hf_dhcp_pkt_mdc_mib_cl_reserved
,
6050 proto_tree_add_bitmask_list_value(subtree2
, tvb
, subopt_off
, 2, cl_flags
, mib_val
);
6054 case PKT_MDC_MIB_IETF
: {
6055 static int * const ietf_flags
[] = {
6056 &hf_dhcp_pkt_mdc_mib_ietf_mta
,
6057 &hf_dhcp_pkt_mdc_mib_ietf_signaling
,
6058 &hf_dhcp_pkt_mdc_mib_ietf_management_event
,
6059 &hf_dhcp_pkt_mdc_mib_ietf_reserved
,
6063 proto_tree_add_bitmask_list_value(subtree2
, tvb
, subopt_off
, 2, ietf_flags
, mib_val
);
6067 case PKT_MDC_MIB_EURO
: {
6068 static int * const euro_flags
[] = {
6069 &hf_dhcp_pkt_mdc_mib_euro_mta
,
6070 &hf_dhcp_pkt_mdc_mib_euro_signaling
,
6071 &hf_dhcp_pkt_mdc_mib_euro_management_event
,
6072 &hf_dhcp_pkt_mdc_mib_euro_mta_extension
,
6073 &hf_dhcp_pkt_mdc_mib_euro_mta_signaling_extension
,
6074 &hf_dhcp_pkt_mdc_mib_euro_mta_mem_extension
,
6075 &hf_dhcp_pkt_mdc_mib_euro_reserved
,
6079 proto_tree_add_bitmask_list_value(subtree2
, tvb
, subopt_off
, 2, euro_flags
, mib_val
);
6090 off
+= (tlv_len
* 2) + 4;
6096 dissect_packetcable_mta_vendor_id_heur( tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
6100 if (tvb_reported_length(tvb
) < 8) {
6104 vendor_id
= tvb_get_string_enc(pinfo
->pool
, tvb
, 0, 8, ENC_ASCII
|ENC_NA
);
6105 if ((strcmp((const char*)vendor_id
, PACKETCABLE_MTA_CAP10
) == 0) ||
6106 (strcmp((const char*)vendor_id
, PACKETCABLE_MTA_CAP15
) == 0) ||
6107 (strcmp((const char*)vendor_id
, PACKETCABLE_MTA_CAP20
) == 0)) {
6108 dissect_packetcable_mta_cap(tree
, pinfo
, tvb
, 0, tvb_reported_length(tvb
));
6115 /* DOCSIS Cable Modem device capabilities (option 60/option 125). */
6116 #define DOCSIS_CM_CAP_TLV_OFF 12
6118 #define DOCSIS_CM_CAP_CONCAT_SUP 0x01
6119 #define DOCSIS_CM_CAP_DOCSIS_VER 0x02
6120 #define DOCSIS_CM_CAP_FRAG_SUP 0x03
6121 #define DOCSIS_CM_CAP_PHS_SUP 0x04
6122 #define DOCSIS_CM_CAP_IGMP_SUP 0x05
6123 #define DOCSIS_CM_CAP_PRIV_SUP 0x06
6124 #define DOCSIS_CM_CAP_DSAID_SUP 0x07
6125 #define DOCSIS_CM_CAP_USSF_SUP 0x08
6126 #define DOCSIS_CM_CAP_FILT_SUP 0x09
6127 #define DOCSIS_CM_CAP_TET_MI 0x0a
6128 #define DOCSIS_CM_CAP_TET 0x0b
6129 #define DOCSIS_CM_CAP_DCC_SUP 0x0c
6130 #define DOCSIS_CM_CAP_IPFILT_SUP 0x0d
6131 #define DOCSIS_CM_CAP_LLCFILT_SUP 0x0e
6132 #define DOCSIS_CM_CAP_EXPUNI_SPACE 0x0f
6133 #define DOCSIS_CM_CAP_RNGHLDOFF_SUP 0x10
6134 #define DOCSIS_CM_CAP_L2VPN_SUP 0x11
6135 #define DOCSIS_CM_CAP_L2VPN_HOST_SUP 0x12
6136 #define DOCSIS_CM_CAP_DUTFILT_SUP 0x13
6137 #define DOCSIS_CM_CAP_USFREQRNG_SUP 0x14
6138 #define DOCSIS_CM_CAP_USSYMRATE_SUP 0x15
6139 #define DOCSIS_CM_CAP_SACM2_SUP 0x16
6140 #define DOCSIS_CM_CAP_SACM2HOP_SUP 0x17
6141 #define DOCSIS_CM_CAP_MULTTXCHAN_SUP 0x18
6142 #define DOCSIS_CM_CAP_512USTXCHAN_SUP 0x19
6143 #define DOCSIS_CM_CAP_256USTXCHAN_SUP 0x1a
6144 #define DOCSIS_CM_CAP_TOTALSIDCLU_SUP 0x1b
6145 #define DOCSIS_CM_CAP_SIDCLUPERSF_SUP 0x1c
6146 #define DOCSIS_CM_CAP_MULTRXCHAN_SUP 0x1d
6147 #define DOCSIS_CM_CAP_TOTALDSID_SUP 0x1e
6148 #define DOCSIS_CM_CAP_RESEQDSID_SUP 0x1f
6149 #define DOCSIS_CM_CAP_MULTDSID_SUP 0x20
6150 #define DOCSIS_CM_CAP_MULTDSIDFW_SUP 0x21
6151 #define DOCSIS_CM_CAP_FCTF_SUP 0x22
6152 #define DOCSIS_CM_CAP_DPV_SUP 0x23
6153 #define DOCSIS_CM_CAP_UGSPERUSFLOW_SUP 0x24
6154 #define DOCSIS_CM_CAP_MAPUCDRECEIPT_SUP 0x25
6155 #define DOCSIS_CM_CAP_USDROPCLASSIF_SUP 0x26
6156 #define DOCSIS_CM_CAP_IPV6_SUP 0x27
6157 #define DOCSIS_CM_CAP_ExUsTrPow 0x28
6158 #define DOCSIS_CM_CAP_Opt802MPLSSup 0x29
6159 #define DOCSIS_CM_CAP_DounEnc 0x2a
6160 #define DOCSIS_CM_CAP_EnrgMang 0x2c
6162 static const value_string docsis_cm_cap_type_vals
[] = {
6163 { DOCSIS_CM_CAP_CONCAT_SUP
, "Concatenation Support" },
6164 { DOCSIS_CM_CAP_DOCSIS_VER
, "DOCSIS Version" },
6165 { DOCSIS_CM_CAP_FRAG_SUP
, "Fragmentation Support" },
6166 { DOCSIS_CM_CAP_PHS_SUP
, "Payload Header Suppression Support" },
6167 { DOCSIS_CM_CAP_IGMP_SUP
, "IGMP Support" },
6168 { DOCSIS_CM_CAP_PRIV_SUP
, "Privacy Support" },
6169 { DOCSIS_CM_CAP_DSAID_SUP
, "Downstream SAID Support" },
6170 { DOCSIS_CM_CAP_USSF_SUP
, "Upstream Service Flow Support" },
6171 { DOCSIS_CM_CAP_FILT_SUP
, "Optional Filtering Support" },
6172 { DOCSIS_CM_CAP_TET_MI
, "Transmit Equalizer Taps per Modulation Interval" },
6173 { DOCSIS_CM_CAP_TET
, "Number of Transmit Equalizer Taps" },
6174 { DOCSIS_CM_CAP_DCC_SUP
, "DCC Support" },
6175 { DOCSIS_CM_CAP_IPFILT_SUP
, "IP Filters Support" },
6176 { DOCSIS_CM_CAP_LLCFILT_SUP
, "LLC Filters Support" },
6177 { DOCSIS_CM_CAP_EXPUNI_SPACE
, "Expanded Unicast SID Space" },
6178 { DOCSIS_CM_CAP_RNGHLDOFF_SUP
, "Ranging Hold-Off Support" },
6179 { DOCSIS_CM_CAP_L2VPN_SUP
, "L2VPN Capability" },
6180 { DOCSIS_CM_CAP_L2VPN_HOST_SUP
, "L2VPN eSAFE Host Capability" },
6181 { DOCSIS_CM_CAP_DUTFILT_SUP
, "Downstream Unencrypted Traffic (DUT) Filtering" },
6182 { DOCSIS_CM_CAP_USFREQRNG_SUP
, "Upstream Frequency Range Support" },
6183 { DOCSIS_CM_CAP_USSYMRATE_SUP
, "Upstream Symbol Rate Support" },
6184 { DOCSIS_CM_CAP_SACM2_SUP
, "Selectable Active Code Mode 2 Support" },
6185 { DOCSIS_CM_CAP_SACM2HOP_SUP
, "Code Hopping Mode 2 Support" },
6186 { DOCSIS_CM_CAP_MULTTXCHAN_SUP
, "Multiple Transmit Channel Support" },
6187 { DOCSIS_CM_CAP_512USTXCHAN_SUP
, "5.12 Msps Upstream Transmit Channel Support" },
6188 { DOCSIS_CM_CAP_256USTXCHAN_SUP
, "2.56 Msps Upstream Transmit Channel Support" },
6189 { DOCSIS_CM_CAP_TOTALSIDCLU_SUP
, "Total SID Cluster Support" },
6190 { DOCSIS_CM_CAP_SIDCLUPERSF_SUP
, "SID Clusters per Service Flow Support" },
6191 { DOCSIS_CM_CAP_MULTRXCHAN_SUP
, "Multiple Receive Channel Support" },
6192 { DOCSIS_CM_CAP_TOTALDSID_SUP
, "Total Downstream Service ID (DSID) Support" },
6193 { DOCSIS_CM_CAP_RESEQDSID_SUP
, "Resequencing Downstream Service ID (DSID) Support" },
6194 { DOCSIS_CM_CAP_MULTDSID_SUP
, "Multicast Downstream Service ID (DSID) Support" },
6195 { DOCSIS_CM_CAP_MULTDSIDFW_SUP
, "Multicast DSID Forwarding" },
6196 { DOCSIS_CM_CAP_FCTF_SUP
, "Frame Control Type Forwarding Capability" },
6197 { DOCSIS_CM_CAP_DPV_SUP
, "DPV Capability" },
6198 { DOCSIS_CM_CAP_UGSPERUSFLOW_SUP
, "Unsolicited Grant Service/Upstream Service Flow Support" },
6199 { DOCSIS_CM_CAP_MAPUCDRECEIPT_SUP
, "MAP and UCD Receipt Support" },
6200 { DOCSIS_CM_CAP_USDROPCLASSIF_SUP
, "Upstream Drop Classifier Support" },
6201 { DOCSIS_CM_CAP_IPV6_SUP
, "IPv6 Support" },
6202 { DOCSIS_CM_CAP_ExUsTrPow
, "Extended Upstream Transmit Power Capability (1/4 dB)" },
6203 { DOCSIS_CM_CAP_Opt802MPLSSup
, "Optional 802.1ad, 802.1ah, MPLS Classification Support" },
6204 { DOCSIS_CM_CAP_DounEnc
, "D-ONU Capabilities Encoding" },
6205 { DOCSIS_CM_CAP_EnrgMang
, "Energy Management Capabilities" },
6209 static const value_string docsis_cm_cap_supported_vals
[] = {
6210 { 0x00, "Not Support" },
6211 { 0x01, "Supported" },
6215 static const value_string docsis_cm_cap_version_vals
[] = {
6216 { 0x00, "DOCSIS 1.0" },
6217 { 0x01, "DOCSIS 1.1" },
6218 { 0x02, "DOCSIS 2.0" },
6219 { 0x03, "DOCSIS 3.0" },
6223 static const value_string docsis_cm_cap_privacy_vals
[] = {
6224 { 0x00, "BPI Support" },
6225 { 0x01, "BPI Plus Support" },
6229 static int hf_dhcp_docsis_cm_cap_ranging_hold_off_cm
;
6230 static int hf_dhcp_docsis_cm_cap_ranging_hold_off_eps
;
6231 static int hf_dhcp_docsis_cm_cap_ranging_hold_off_emta
;
6232 static int hf_dhcp_docsis_cm_cap_ranging_hold_off_dsg
;
6234 static const value_string docsis_cm_cap_l2vpn_vals
[] = {
6235 { 0x00, "CM not compliant with DOCSIS L2VPN Section 7 (default)" },
6236 { 0x01, "CM compliant with DOCSIS L2VPN Section 7" },
6240 static const value_string docsis_cm_cap_filt_vals
[] = {
6241 { 0x00, "802.1P Filtering" },
6242 { 0x01, "802.1Q Filtering" },
6246 static int hf_dhcp_docsis_cm_cap_mpls_stpid
;
6247 static int hf_dhcp_docsis_cm_cap_mpls_svid
;
6248 static int hf_dhcp_docsis_cm_cap_mpls_spcp
;
6249 static int hf_dhcp_docsis_cm_cap_mpls_sdei
;
6250 static int hf_dhcp_docsis_cm_cap_mpls_ctpid
;
6251 static int hf_dhcp_docsis_cm_cap_mpls_cvid
;
6252 static int hf_dhcp_docsis_cm_cap_mpls_cpcp
;
6253 static int hf_dhcp_docsis_cm_cap_mpls_ccfi
;
6254 static int hf_dhcp_docsis_cm_cap_mpls_stci
;
6255 static int hf_dhcp_docsis_cm_cap_mpls_ctci
;
6256 static int hf_dhcp_docsis_cm_cap_mpls_itpid
;
6257 static int hf_dhcp_docsis_cm_cap_mpls_isid
;
6258 static int hf_dhcp_docsis_cm_cap_mpls_itci
;
6259 static int hf_dhcp_docsis_cm_cap_mpls_ipcp
;
6260 static int hf_dhcp_docsis_cm_cap_mpls_idei
;
6261 static int hf_dhcp_docsis_cm_cap_mpls_iuca
;
6262 static int hf_dhcp_docsis_cm_cap_mpls_btpid
;
6263 static int hf_dhcp_docsis_cm_cap_mpls_btci
;
6264 static int hf_dhcp_docsis_cm_cap_mpls_bpcp
;
6265 static int hf_dhcp_docsis_cm_cap_mpls_bdei
;
6266 static int hf_dhcp_docsis_cm_cap_mpls_bvid
;
6267 static int hf_dhcp_docsis_cm_cap_mpls_bda
;
6268 static int hf_dhcp_docsis_cm_cap_mpls_bsa
;
6269 static int hf_dhcp_docsis_cm_cap_mpls_tc
;
6270 static int hf_dhcp_docsis_cm_cap_mpls_label
;
6272 static const value_string docsis_cm_cap_enrgmang_vals
[] = {
6273 { 0x00, "Energy Management 1x1 Feature" },
6277 static const value_string docsis_cm_cap_usfreqrng_vals
[] = {
6278 { 0x00, "Standard Upstream Frequency Range" },
6279 { 0x01, "Standard Upstream Frequency Range and Extended Upstream Frequency Range" },
6283 static const value_string docsis_cm_cap_map_ucd_receipt_vals
[] = {
6284 { 0x00, "CM cannot support the receipt of MAPs and UCDs on downstreams other than the Primary Downstream Channel" },
6285 { 0x01, "CM can support the receipt of MAPs and UCDs on downstreams other than the Primary Downstream Channel" },
6289 static const value_string docsis_cm_cap_map_dpv_support_vals
[] = {
6290 { 0x00, "U1 supported as a Start Reference Point for DPV per Path" },
6291 { 0x01, "U1 supported as a Start Reference Point for DPV per Packet" },
6295 static const value_string docsis_cm_cap_map_multDsidForward_support_vals
[] = {
6296 { 0x00, "No support for multicast DSID forwarding" },
6297 { 0x01, "Support for GMAC explicit multicast DSID forwarding" },
6298 { 0x02, "Support for GMAC promiscuous multicast DSID forwarding" },
6302 static const value_string docsis_cm_cap_map_fctfc_support_vals
[] = {
6303 { 0x00, "Isolation Packet PDU MAC Header (FC_Type of 10) is not forwarded" },
6304 { 0x01, "Isolation Packet PDU MAC Header (FC_Type of 10) is forwarded" },
6308 static const value_string docsis_cm_cap_map_l2vpn_esafe_index_support_vals
[] = {
6309 { 0x01, "ePs or eRouter" },
6311 { 0x11, "eSTB-IP" },
6312 { 0x12, "eSTB-DSG" },
6317 static int hf_dhcp_docsis_cm_cap_ussymrate_160
;
6318 static int hf_dhcp_docsis_cm_cap_ussymrate_320
;
6319 static int hf_dhcp_docsis_cm_cap_ussymrate_640
;
6320 static int hf_dhcp_docsis_cm_cap_ussymrate_1280
;
6321 static int hf_dhcp_docsis_cm_cap_ussymrate_2560
;
6322 static int hf_dhcp_docsis_cm_cap_ussymrate_5120
;
6325 display_uint_with_range_checking(proto_item
*ti
, uint8_t val_byte
, uint16_t val_uint16
, int min_value
, int max_value
)
6337 proto_item_append_text(ti
, "%i", value
);
6338 if ((value
< min_value
) ||
6339 (value
> max_value
))
6341 proto_item_append_text(ti
, " (Value Out-of-Range [%i..%i])", min_value
, max_value
);
6345 static void get_opt125_tlv(wmem_allocator_t
*scope
, tvbuff_t
*tvb
, unsigned off
, uint8_t *tlvtype
, uint8_t *tlvlen
, uint8_t **value
)
6348 *tlvtype
= tvb_get_uint8(tvb
, off
);
6350 *tlvlen
= tvb_get_uint8(tvb
, off
+1);
6352 *value
= (uint8_t *)tvb_memdup(scope
, tvb
, off
+ 2, *tlvlen
);
6355 static void get_opt60_tlv(wmem_allocator_t
*scope
, tvbuff_t
*tvb
, unsigned off
, uint8_t *tlvtype
, uint8_t *tlvlen
, uint8_t **value
)
6360 val_asc
= (uint8_t *)wmem_alloc0(scope
, 4);
6362 tvb_memcpy(tvb
, val_asc
, off
, 2);
6363 *tlvtype
= (uint8_t)strtoul((char*)val_asc
, NULL
, 16);
6365 tvb_memcpy(tvb
, val_asc
, off
+ 2, 2);
6366 *tlvlen
= (uint8_t)strtoul((char*)val_asc
, NULL
, 16);
6368 *value
= (uint8_t *)wmem_alloc0(scope
, *tlvlen
);
6369 for (i
=0; i
<*tlvlen
; i
++)
6371 memset(val_asc
, 0, 4);
6372 tvb_memcpy(tvb
, val_asc
, off
+ ((i
*2) + 4), 2);
6373 (*value
)[i
] = (uint8_t)strtoul((char*)val_asc
, NULL
, 16);
6378 dissect_docsis_cm_cap(packet_info
*pinfo
, proto_tree
*v_tree
, tvbuff_t
*tvb
, int voff
, int len
, bool opt125
)
6382 proto_tree
*subtree
;
6385 uint8_t val_byte
= 0;
6386 uint16_t val_uint16
= 0;
6387 uint8_t *val_other
= NULL
;
6388 unsigned off
= voff
;
6390 asc_val
= (uint8_t*)wmem_alloc0(pinfo
->pool
, 4);
6394 /* Option 125 is formatted as uint8's */
6396 tlv_type
= tvb_get_uint8(tvb
, off
);
6398 tlv_len
= tvb_get_uint8(tvb
, off
+1);
6399 proto_tree_add_uint(v_tree
, hf_dhcp_docsis_cm_cap_len
, tvb
, off
+1, 1, tlv_len
);
6403 /* Option 60 is formatted as an ASCII string.
6404 Since the capabilities are the same for both options
6405 I am converting the Option 60 values from ASCII to
6406 uint8s to allow the same parser to work for both */
6407 off
+= DOCSIS_CM_CAP_TLV_OFF
;
6408 tvb_memcpy (tvb
, asc_val
, off
, 2);
6409 tlv_len
= (uint8_t)strtoul((char*)asc_val
, NULL
, 16);
6410 proto_tree_add_uint_format_value(v_tree
, hf_dhcp_docsis_cm_cap_len
, tvb
, off
+2, 2,
6411 tlv_len
, "%d", tlv_len
);
6416 while (off
- ((unsigned) voff
) < ((unsigned) len
))
6425 get_opt125_tlv(pinfo
->pool
, tvb
, off
, &tlv_type
, &tlv_len
, &val_other
);
6426 ti
= proto_tree_add_uint_format(v_tree
, hf_dhcp_docsis_cm_cap_type
, tvb
, off
,
6431 val_to_str_const(tlv_type
, docsis_cm_cap_type_vals
, "unknown"));
6435 /* Option 60 is formatted as an ASCII string. Since the capabilities
6436 are the same for both options I am converting the Option 60 values
6437 from ASCII to uint8s to allow the same parser to work for both */
6438 get_opt60_tlv(pinfo
->pool
, tvb
, off
, &tlv_type
, &tlv_len
, &val_other
);
6439 ti
= proto_tree_add_uint_format(v_tree
, hf_dhcp_docsis_cm_cap_type
, tvb
, off
,
6444 val_to_str_const(tlv_type
, docsis_cm_cap_type_vals
, "unknown"));
6449 /* The value refers to a byte. */
6450 val_byte
= val_other
[0];
6456 /* The value refers to a uint16. */
6457 val_uint16
= (val_other
[0] << 8) + val_other
[1];
6463 case DOCSIS_CM_CAP_CONCAT_SUP
:
6464 case DOCSIS_CM_CAP_FRAG_SUP
:
6465 case DOCSIS_CM_CAP_PHS_SUP
:
6466 case DOCSIS_CM_CAP_IGMP_SUP
:
6467 case DOCSIS_CM_CAP_DCC_SUP
:
6468 case DOCSIS_CM_CAP_EXPUNI_SPACE
:
6469 case DOCSIS_CM_CAP_DUTFILT_SUP
:
6470 case DOCSIS_CM_CAP_SACM2_SUP
:
6471 case DOCSIS_CM_CAP_SACM2HOP_SUP
:
6472 case DOCSIS_CM_CAP_IPV6_SUP
:
6473 proto_item_append_text(ti
,
6475 val_to_str_const(val_byte
, docsis_cm_cap_supported_vals
, "Reserved"));
6477 case DOCSIS_CM_CAP_DOCSIS_VER
:
6478 proto_item_append_text(ti
,
6480 val_to_str_const(val_byte
, docsis_cm_cap_version_vals
, "Reserved"));
6482 case DOCSIS_CM_CAP_PRIV_SUP
:
6483 proto_item_append_text(ti
,
6485 val_to_str_const(val_byte
, docsis_cm_cap_privacy_vals
, "Reserved"));
6487 case DOCSIS_CM_CAP_FILT_SUP
:
6488 proto_item_append_text(ti
,
6490 val_to_str_const(val_byte
, docsis_cm_cap_filt_vals
, "Reserved"));
6492 case DOCSIS_CM_CAP_L2VPN_SUP
:
6493 proto_item_append_text(ti
,
6495 val_to_str_const(val_byte
, docsis_cm_cap_l2vpn_vals
, "Reserved"));
6497 case DOCSIS_CM_CAP_L2VPN_HOST_SUP
:
6499 proto_item_append_text(ti
,
6500 "eSAFE ifIndex %s (%i)/eSAFE MAC %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x",
6501 val_to_str_const(val_other
[0], docsis_cm_cap_map_l2vpn_esafe_index_support_vals
, "Reserved"),
6510 proto_item_append_text(ti
,
6511 "Invalid (length should be 7, is %d)",
6515 case DOCSIS_CM_CAP_USFREQRNG_SUP
:
6516 proto_item_append_text(ti
,
6518 val_to_str_const(val_byte
, docsis_cm_cap_usfreqrng_vals
, "Reserved"));
6520 case DOCSIS_CM_CAP_MAPUCDRECEIPT_SUP
:
6521 proto_item_append_text(ti
,
6523 val_to_str_const(val_byte
, docsis_cm_cap_map_ucd_receipt_vals
, "Reserved"));
6525 case DOCSIS_CM_CAP_DPV_SUP
:
6526 proto_item_append_text(ti
,
6528 val_to_str_const(val_byte
, docsis_cm_cap_map_dpv_support_vals
, "Reserved"));
6530 case DOCSIS_CM_CAP_DSAID_SUP
:
6531 case DOCSIS_CM_CAP_MULTTXCHAN_SUP
:
6532 case DOCSIS_CM_CAP_512USTXCHAN_SUP
:
6533 case DOCSIS_CM_CAP_256USTXCHAN_SUP
:
6534 case DOCSIS_CM_CAP_TOTALSIDCLU_SUP
:
6535 case DOCSIS_CM_CAP_MULTRXCHAN_SUP
:
6536 case DOCSIS_CM_CAP_UGSPERUSFLOW_SUP
:
6537 case DOCSIS_CM_CAP_USSF_SUP
:
6538 display_uint_with_range_checking(ti
, val_byte
, val_uint16
, 0, 255);
6540 case DOCSIS_CM_CAP_RESEQDSID_SUP
:
6541 case DOCSIS_CM_CAP_MULTDSID_SUP
:
6542 display_uint_with_range_checking(ti
, val_byte
, val_uint16
, 16, 255);
6544 case DOCSIS_CM_CAP_SIDCLUPERSF_SUP
:
6545 display_uint_with_range_checking(ti
, val_byte
, val_uint16
, 2, 8);
6547 case DOCSIS_CM_CAP_TOTALDSID_SUP
:
6548 display_uint_with_range_checking(ti
, val_byte
, val_uint16
, 32, 255);
6550 case DOCSIS_CM_CAP_TET
:
6551 display_uint_with_range_checking(ti
, val_byte
, val_uint16
, 8, 64);
6553 case DOCSIS_CM_CAP_TET_MI
:
6554 if ((val_byte
== 1) ||
6558 proto_item_append_text(ti
,
6564 proto_item_append_text(ti
,
6565 " (Invalid Value %i : Should be [1,2,4]",
6569 case DOCSIS_CM_CAP_IPFILT_SUP
:
6570 case DOCSIS_CM_CAP_USDROPCLASSIF_SUP
:
6571 display_uint_with_range_checking(ti
, val_byte
, val_uint16
, 64, 65535);
6573 case DOCSIS_CM_CAP_LLCFILT_SUP
:
6574 display_uint_with_range_checking(ti
, val_byte
, val_uint16
, 10, 65535);
6576 case DOCSIS_CM_CAP_ExUsTrPow
:
6579 proto_item_append_text(ti
, "%i", val_byte
);
6583 display_uint_with_range_checking(ti
, val_byte
, val_uint16
, 205, 244);
6586 case DOCSIS_CM_CAP_Opt802MPLSSup
:
6587 proto_item_append_text(ti
,
6588 "0x%02x", val_byte
);
6589 case DOCSIS_CM_CAP_DounEnc
:
6590 /* TODO: add D-ONU Capabilities Encoding according DPoE-SP-MULPIv1.0-I02-120607 */
6592 case DOCSIS_CM_CAP_EnrgMang
:
6593 proto_item_append_text(ti
,
6595 val_to_str_const(val_byte
, docsis_cm_cap_enrgmang_vals
, "Reserved"));
6597 case DOCSIS_CM_CAP_RNGHLDOFF_SUP
:
6598 proto_item_append_text(ti
,
6602 proto_item_append_text(ti
,
6603 "(0x%04x)", (val_other
[0] << sizeof(uint8_t)) + val_other
[1]);
6604 proto_item_append_text(ti
,
6605 " Component Bit Mask ");
6606 proto_item_append_text(ti
,
6607 "(0x%04x)", (val_other
[2] << sizeof(uint8_t)) + val_other
[3]);
6611 proto_item_append_text(ti
,
6612 " (Invalid Length %u : Should be 4",
6616 case DOCSIS_CM_CAP_USSYMRATE_SUP
:
6617 proto_item_append_text(ti
,
6618 "0x%02x", val_byte
);
6620 case DOCSIS_CM_CAP_FCTF_SUP
:
6621 proto_item_append_text(ti
,
6623 val_to_str_const(val_byte
, docsis_cm_cap_map_fctfc_support_vals
, "Reserved"));
6625 case DOCSIS_CM_CAP_MULTDSIDFW_SUP
:
6626 proto_item_append_text(ti
,
6628 val_to_str_const(val_byte
, docsis_cm_cap_map_multDsidForward_support_vals
, "Reserved"));
6632 subtree
= proto_item_add_subtree(ti
, ett_dhcp_option
);
6633 if (tlv_type
== DOCSIS_CM_CAP_RNGHLDOFF_SUP
&& tlv_len
>= 4)
6635 static int * const flags
[] = {
6636 &hf_dhcp_docsis_cm_cap_ranging_hold_off_cm
,
6637 &hf_dhcp_docsis_cm_cap_ranging_hold_off_eps
,
6638 &hf_dhcp_docsis_cm_cap_ranging_hold_off_emta
,
6639 &hf_dhcp_docsis_cm_cap_ranging_hold_off_dsg
,
6642 val_uint16
= (val_other
[2] << sizeof(uint8_t)) + val_other
[3];
6644 proto_tree_add_bitmask_list_value(subtree
, tvb
, off
+ 2, 4, flags
, val_uint16
);
6646 if (tlv_type
== DOCSIS_CM_CAP_USSYMRATE_SUP
)
6648 static int * const flags
[] = {
6649 &hf_dhcp_docsis_cm_cap_ussymrate_160
,
6650 &hf_dhcp_docsis_cm_cap_ussymrate_320
,
6651 &hf_dhcp_docsis_cm_cap_ussymrate_640
,
6652 &hf_dhcp_docsis_cm_cap_ussymrate_1280
,
6653 &hf_dhcp_docsis_cm_cap_ussymrate_2560
,
6654 &hf_dhcp_docsis_cm_cap_ussymrate_5120
,
6658 proto_tree_add_bitmask_list_value(subtree
, tvb
, off
+ 2, 1, flags
, val_byte
);
6660 if (tlv_type
== DOCSIS_CM_CAP_Opt802MPLSSup
&& tlv_len
>= 4)
6662 static int * const flags
[] = {
6663 &hf_dhcp_docsis_cm_cap_mpls_stpid
,
6664 &hf_dhcp_docsis_cm_cap_mpls_svid
,
6665 &hf_dhcp_docsis_cm_cap_mpls_spcp
,
6666 &hf_dhcp_docsis_cm_cap_mpls_sdei
,
6667 &hf_dhcp_docsis_cm_cap_mpls_ctpid
,
6668 &hf_dhcp_docsis_cm_cap_mpls_cvid
,
6669 &hf_dhcp_docsis_cm_cap_mpls_cpcp
,
6670 &hf_dhcp_docsis_cm_cap_mpls_ccfi
,
6671 &hf_dhcp_docsis_cm_cap_mpls_stci
,
6672 &hf_dhcp_docsis_cm_cap_mpls_ctci
,
6673 &hf_dhcp_docsis_cm_cap_mpls_itpid
,
6674 &hf_dhcp_docsis_cm_cap_mpls_isid
,
6675 &hf_dhcp_docsis_cm_cap_mpls_itci
,
6676 &hf_dhcp_docsis_cm_cap_mpls_ipcp
,
6677 &hf_dhcp_docsis_cm_cap_mpls_idei
,
6678 &hf_dhcp_docsis_cm_cap_mpls_iuca
,
6679 &hf_dhcp_docsis_cm_cap_mpls_btpid
,
6680 &hf_dhcp_docsis_cm_cap_mpls_btci
,
6681 &hf_dhcp_docsis_cm_cap_mpls_bpcp
,
6682 &hf_dhcp_docsis_cm_cap_mpls_bdei
,
6683 &hf_dhcp_docsis_cm_cap_mpls_bvid
,
6684 &hf_dhcp_docsis_cm_cap_mpls_bda
,
6685 &hf_dhcp_docsis_cm_cap_mpls_bsa
,
6686 &hf_dhcp_docsis_cm_cap_mpls_tc
,
6687 &hf_dhcp_docsis_cm_cap_mpls_label
,
6690 val_uint16
= (val_other
[2] << sizeof(uint8_t)) + val_other
[3];
6692 proto_tree_add_bitmask_list_value(subtree
, tvb
, off
+ 2, 4, flags
, val_uint16
);
6696 off
+= (tlv_len
) + 2;
6700 off
+= (tlv_len
*2) + 4;
6707 dissect_packetcable_cm_vendor_id_heur( tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
6711 if (tvb_reported_length(tvb
) < 10) {
6715 vendor_id
= tvb_get_string_enc(pinfo
->pool
, tvb
, 0, 10, ENC_ASCII
|ENC_NA
);
6716 if ((strcmp((const char*)vendor_id
, PACKETCABLE_CM_CAP11
) == 0) ||
6717 (strcmp((const char*)vendor_id
, PACKETCABLE_CM_CAP20
) == 0)) {
6718 dissect_docsis_cm_cap(pinfo
, tree
, tvb
, 0, tvb_reported_length(tvb
), false);
6722 if ((strcmp((const char*)vendor_id
, PACKETCABLE_CM_CAP30
) == 0)) {
6723 proto_tree_add_item(tree
, hf_dhcp_option_vendor_class_data
, tvb
, 0, tvb_reported_length(tvb
), ENC_ASCII
);
6731 dissect_apple_bsdp_vendor_id_heur(tvbuff_t
*tvb
, packet_info
*pinfo _U_
, proto_tree
*tree
, void *data _U_
)
6734 int vendor_id_len
= (int)strlen(APPLE_BSDP_CLIENT
);
6735 if ((int)tvb_reported_length(tvb
) < vendor_id_len
) {
6739 if (tvb_memeql(tvb
, 0, (const uint8_t*)APPLE_BSDP_CLIENT
, vendor_id_len
) == 0) {
6740 proto_tree_add_item(tree
, hf_dhcp_option_vendor_class_data
, tvb
, vendor_id_len
, tvb_reported_length_remaining(tvb
, vendor_id_len
), ENC_ASCII
);
6748 /* Definitions specific to PKT-SP-PROV-I05-021127 begin with "PKT_CCC_I05".
6749 Definitions specific to IETF draft 5 and RFC 3495 begin with "PKT_CCC_IETF".
6750 Shared definitions begin with "PKT_CCC".
6752 #define PKT_CCC_PRI_DHCP 1
6753 #define PKT_CCC_SEC_DHCP 2
6754 #define PKT_CCC_I05_SNMP 3
6755 #define PKT_CCC_IETF_PROV_SRV 3
6756 #define PKT_CCC_I05_PRI_DNS 4
6757 #define PKT_CCC_IETF_AS_KRB 4
6758 #define PKT_CCC_I05_SEC_DNS 5
6759 #define PKT_CCC_IETF_AP_KRB 5
6760 #define PKT_CCC_KRB_REALM 6
6761 #define PKT_CCC_TGT_FLAG 7
6762 #define PKT_CCC_PROV_TIMER 8
6763 #define PKT_CCC_CMS_FQDN 9
6764 #define PKT_CCC_IETF_SEC_TKT 9
6765 #define PKT_CCC_AS_KRB 10
6766 #define PKT_CCC_AP_KRB 11
6767 #define PKT_CCC_MTA_KRB_CLEAR 12
6769 static const value_string pkt_i05_ccc_opt_vals
[] = {
6770 { PKT_CCC_PRI_DHCP
, "Primary DHCP Server" },
6771 { PKT_CCC_SEC_DHCP
, "Secondary DHCP Server" },
6772 { PKT_CCC_I05_SNMP
, "SNMP Entity" },
6773 { PKT_CCC_I05_PRI_DNS
, "Primary DNS Server" },
6774 { PKT_CCC_I05_SEC_DNS
, "Secondary DNS Server" },
6775 { PKT_CCC_KRB_REALM
, "Kerberos Realm" },
6776 { PKT_CCC_TGT_FLAG
, "MTA should fetch TGT?" },
6777 { PKT_CCC_PROV_TIMER
, "Provisioning Timer" },
6778 { PKT_CCC_CMS_FQDN
, "CMS FQDN" },
6779 { PKT_CCC_AS_KRB
, "AS-REQ/AS-REP Backoff and Retry" },
6780 { PKT_CCC_AP_KRB
, "AP-REQ/AP-REP Backoff and Retry" },
6781 { PKT_CCC_MTA_KRB_CLEAR
, "MTA should clear Kerberos tickets?" },
6785 static const value_string pkt_draft5_ccc_opt_vals
[] = {
6786 { PKT_CCC_PRI_DHCP
, "TSP's Primary DHCP Server" },
6787 { PKT_CCC_SEC_DHCP
, "TSP's Secondary DHCP Server" },
6788 { PKT_CCC_IETF_PROV_SRV
, "TSP's Provisioning Server" },
6789 { PKT_CCC_IETF_AS_KRB
, "TSP's AS-REQ/AS-REP Backoff and Retry" },
6790 { PKT_CCC_IETF_AP_KRB
, "TSP's AP-REQ/AP-REP Backoff and Retry" },
6791 { PKT_CCC_KRB_REALM
, "TSP's Kerberos Realm Name" },
6792 { PKT_CCC_TGT_FLAG
, "TSP's Ticket Granting Server Utilization" },
6793 { PKT_CCC_PROV_TIMER
, "TSP's Provisioning Timer Value" },
6794 { PKT_CCC_IETF_SEC_TKT
, "PacketCable Security Ticket Control" },
6798 static const value_string pkt_i05_ccc_ticket_ctl_vals
[] = {
6799 { 1, "Invalidate Provisioning Application Server's ticket" },
6800 { 2, "Invalidate all CMS Application Server tickets" },
6801 { 3, "Invalidate all Application Server tickets" },
6806 dissect_packetcable_i05_ccc(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
,
6807 tvbuff_t
*tvb
, int optoff
, int optend
)
6809 int suboptoff
= optoff
;
6810 uint8_t subopt
, subopt_len
, fetch_tgt
, timer_val
, ticket_ctl
;
6811 proto_tree
*pkt_s_tree
;
6814 subopt
= tvb_get_uint8(tvb
, optoff
);
6817 if (suboptoff
>= optend
) {
6818 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
6819 "Suboption %d: no room left in option for suboption length", subopt
);
6823 subopt_len
= tvb_get_uint8(tvb
, optoff
);
6826 vti
= proto_tree_add_uint(v_tree
, hf_dhcp_pc_i05_ccc_suboption
, tvb
, optoff
, 1, subopt
);
6827 proto_item_set_len(vti
, subopt_len
+ 2);
6828 proto_item_append_text(vti
, ": ");
6832 case PKT_CCC_PRI_DHCP
: /* String values */
6833 case PKT_CCC_SEC_DHCP
:
6834 case PKT_CCC_I05_SNMP
:
6835 case PKT_CCC_I05_PRI_DNS
:
6836 case PKT_CCC_I05_SEC_DNS
:
6837 case PKT_CCC_KRB_REALM
:
6838 case PKT_CCC_CMS_FQDN
:
6839 proto_item_append_text(vti
, "%s (%u byte%s)",
6840 tvb_format_stringzpad(pinfo
->pool
, tvb
, suboptoff
, subopt_len
),
6842 plurality(subopt_len
, "", "s") );
6843 suboptoff
+= subopt_len
;
6846 case PKT_CCC_TGT_FLAG
:
6847 if (suboptoff
+1 > optend
) {
6848 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
6851 fetch_tgt
= tvb_get_uint8(tvb
, suboptoff
);
6852 proto_item_append_text(vti
, "%s (%u byte%s%s)",
6853 fetch_tgt
? "Yes" : "No",
6855 plurality(subopt_len
, "", "s"),
6856 subopt_len
!= 1 ? " [Invalid]" : "");
6857 suboptoff
+= subopt_len
;
6860 case PKT_CCC_PROV_TIMER
:
6861 if (suboptoff
+1 > optend
) {
6862 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
6865 timer_val
= tvb_get_uint8(tvb
, suboptoff
);
6866 proto_item_append_text(vti
, "%u%s (%u byte%s%s)", timer_val
,
6867 timer_val
> 30 ? " [Invalid]" : "",
6869 plurality(subopt_len
, "", "s"),
6870 subopt_len
!= 1 ? " [Invalid]" : "");
6871 suboptoff
+= subopt_len
;
6874 case PKT_CCC_AS_KRB
:
6875 if (suboptoff
+12 > optend
) {
6876 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
6879 proto_item_append_text(vti
, "(%u byte%s%s)", subopt_len
,
6880 plurality(subopt_len
, "", "s"),
6881 subopt_len
!= 12 ? " [Invalid]" : "");
6882 if (subopt_len
== 12) {
6883 pkt_s_tree
= proto_item_add_subtree(vti
, ett_dhcp_option
);
6884 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_nom_timeout
, tvb
, suboptoff
, 4, ENC_BIG_ENDIAN
);
6885 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_max_timeout
, tvb
, suboptoff
+ 4, 4, ENC_BIG_ENDIAN
);
6886 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_max_retries
, tvb
, suboptoff
+ 8, 4, ENC_BIG_ENDIAN
);
6888 suboptoff
+= subopt_len
;
6891 case PKT_CCC_AP_KRB
:
6892 if (suboptoff
+12 > optend
) {
6893 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
6896 proto_item_append_text(vti
, "(%u byte%s%s)", subopt_len
,
6897 plurality(subopt_len
, "", "s"),
6898 subopt_len
!= 12 ? " [Invalid]" : "");
6899 if (subopt_len
== 12) {
6900 pkt_s_tree
= proto_item_add_subtree(vti
, ett_dhcp_option
);
6901 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_nom_timeout
, tvb
, suboptoff
+ 8, 4, ENC_BIG_ENDIAN
);
6902 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_max_timeout
, tvb
, suboptoff
+ 8, 4, ENC_BIG_ENDIAN
);
6903 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_max_retries
, tvb
, suboptoff
+ 8, 4, ENC_BIG_ENDIAN
);
6905 suboptoff
+= subopt_len
;
6908 case PKT_CCC_MTA_KRB_CLEAR
:
6909 if (suboptoff
+1 > optend
) {
6910 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
6913 ticket_ctl
= tvb_get_uint8(tvb
, suboptoff
);
6914 proto_item_append_text(vti
, "%s (%u) (%u byte%s%s)",
6915 val_to_str_const (ticket_ctl
, pkt_i05_ccc_ticket_ctl_vals
, "unknown/invalid"),
6918 plurality(subopt_len
, "", "s"),
6919 subopt_len
!= 1 ? " [Invalid]" : "");
6920 suboptoff
+= subopt_len
;
6924 suboptoff
+= subopt_len
;
6931 static int hf_dhcp_ccc_ietf_sec_tkt_pc_provision_server
;
6932 static int hf_dhcp_ccc_ietf_sec_tkt_all_pc_call_management
;
6935 dissect_packetcable_ietf_ccc(packet_info
*pinfo
, proto_item
*v_ti
, proto_tree
*v_tree
,
6936 tvbuff_t
*tvb
, int optoff
, int optend
, int revision
)
6938 int suboptoff
= optoff
;
6939 uint8_t subopt
, subopt_len
;
6940 uint8_t prov_type
, fetch_tgt
, timer_val
;
6942 proto_tree
*pkt_s_tree
;
6944 int max_timer_val
= 255;
6945 const unsigned char *dns_name
;
6948 subopt
= tvb_get_uint8(tvb
, suboptoff
);
6951 if (suboptoff
>= optend
) {
6952 expert_add_info_format(pinfo
, v_ti
, &ei_dhcp_missing_subopt_length
,
6953 "Suboption %d: no room left in option for suboption length", subopt
);
6956 subopt_len
= tvb_get_uint8(tvb
, suboptoff
);
6959 vti
= proto_tree_add_uint(v_tree
, hf_dhcp_pc_ietf_ccc_suboption
, tvb
, optoff
, 1, subopt
);
6960 proto_item_set_len(vti
, subopt_len
+ 2);
6961 proto_item_append_text(vti
, ": ");
6965 case PKT_CCC_PRI_DHCP
: /* IPv4 values */
6966 case PKT_CCC_SEC_DHCP
:
6967 if (suboptoff
+4 > optend
) {
6968 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
6971 proto_item_append_text(vti
, "%s (%u byte%s%s)",
6972 tvb_ip_to_str(pinfo
->pool
, tvb
, suboptoff
),
6974 plurality(subopt_len
, "", "s"),
6975 subopt_len
!= 4 ? " [Invalid]" : "");
6976 suboptoff
+= subopt_len
;
6979 case PKT_CCC_IETF_PROV_SRV
:
6980 if (suboptoff
+1 > optend
) {
6981 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
6984 prov_type
= tvb_get_uint8(tvb
, suboptoff
);
6986 switch (prov_type
) {
6989 get_dns_name(tvb
, suboptoff
, subopt_len
, suboptoff
, (const char **)&dns_name
, &dns_name_len
);
6990 proto_item_append_text(vti
, "%s (%u byte%s)", format_text(pinfo
->pool
, dns_name
, dns_name_len
),
6991 subopt_len
- 1, plurality(subopt_len
, "", "s") );
6995 if (suboptoff
+4 > optend
) {
6996 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
6999 proto_item_append_text(vti
, "%s (%u byte%s%s)",
7000 tvb_ip_to_str(pinfo
->pool
, tvb
, suboptoff
),
7002 plurality(subopt_len
, "", "s"),
7003 subopt_len
!= 5 ? " [Invalid]" : "");
7007 proto_item_append_text(vti
, "Invalid type: %u (%u byte%s)",
7010 plurality(subopt_len
, "", "s") );
7013 suboptoff
+= subopt_len
- 1;
7016 case PKT_CCC_IETF_AS_KRB
:
7017 if (suboptoff
+12 > optend
) {
7018 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
7021 proto_item_append_text(vti
, "(%u byte%s%s)", subopt_len
,
7022 plurality(subopt_len
, "", "s"),
7023 subopt_len
!= 12 ? " [Invalid]" : "");
7024 if (subopt_len
== 12) {
7025 pkt_s_tree
= proto_item_add_subtree(vti
, ett_dhcp_option
);
7026 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_nom_timeout
, tvb
, suboptoff
, 4, ENC_BIG_ENDIAN
);
7027 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_max_timeout
, tvb
, suboptoff
+ 4, 4, ENC_BIG_ENDIAN
);
7028 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_max_retries
, tvb
, suboptoff
+ 8, 4, ENC_BIG_ENDIAN
);
7030 suboptoff
+= subopt_len
;
7033 case PKT_CCC_IETF_AP_KRB
:
7034 proto_item_append_text(vti
, "(%u byte%s%s)", subopt_len
,
7035 plurality(subopt_len
, "", "s"),
7036 subopt_len
!= 12 ? " [Invalid]" : "");
7037 if (subopt_len
== 12) {
7038 pkt_s_tree
= proto_item_add_subtree(vti
, ett_dhcp_option
);
7039 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_nom_timeout
, tvb
, suboptoff
, 4, ENC_BIG_ENDIAN
);
7040 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_max_timeout
, tvb
, suboptoff
+ 4, 4, ENC_BIG_ENDIAN
);
7041 proto_tree_add_item(pkt_s_tree
, hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_max_retries
, tvb
, suboptoff
+ 8, 4, ENC_BIG_ENDIAN
);
7043 suboptoff
+= subopt_len
;
7046 case PKT_CCC_KRB_REALM
: /* String values */
7047 get_dns_name(tvb
, suboptoff
, subopt_len
, suboptoff
, (const char **)&dns_name
, &dns_name_len
);
7048 proto_item_append_text(vti
, "%s (%u byte%s)", format_text(pinfo
->pool
, dns_name
, dns_name_len
),
7049 subopt_len
, plurality(subopt_len
, "", "s") );
7050 suboptoff
+= subopt_len
;
7053 case PKT_CCC_TGT_FLAG
:
7054 if (suboptoff
+1 > optend
) {
7055 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
7058 fetch_tgt
= tvb_get_uint8(tvb
, suboptoff
);
7059 proto_item_append_text(vti
, "%s (%u byte%s%s)",
7060 fetch_tgt
? "Yes" : "No",
7062 plurality(subopt_len
, "", "s"),
7063 subopt_len
!= 1 ? " [Invalid]" : "");
7067 case PKT_CCC_PROV_TIMER
:
7068 if (suboptoff
+1 > optend
) {
7069 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
7072 if (revision
== PACKETCABLE_CCC_DRAFT5
)
7074 timer_val
= tvb_get_uint8(tvb
, suboptoff
);
7075 proto_item_append_text(vti
, "%u%s (%u byte%s%s)", timer_val
,
7076 timer_val
> max_timer_val
? " [Invalid]" : "",
7078 plurality(subopt_len
, "", "s"),
7079 subopt_len
!= 1 ? " [Invalid]" : "");
7083 case PKT_CCC_IETF_SEC_TKT
:
7084 if (suboptoff
+2 > optend
) {
7085 expert_add_info(pinfo
, vti
, &ei_dhcp_missing_subopt_value
);
7088 sec_tcm
= tvb_get_ntohs(tvb
, suboptoff
);
7089 proto_item_append_text(vti
, "0x%04x (%u byte%s%s)", sec_tcm
, subopt_len
,
7090 plurality(subopt_len
, "", "s"),
7091 subopt_len
!= 2 ? " [Invalid]" : "");
7092 if (subopt_len
== 2) {
7093 pkt_s_tree
= proto_item_add_subtree(vti
, ett_dhcp_option
);
7094 proto_tree_add_boolean(pkt_s_tree
, hf_dhcp_ccc_ietf_sec_tkt_pc_provision_server
, tvb
, suboptoff
, 2, sec_tcm
);
7095 proto_tree_add_boolean(pkt_s_tree
, hf_dhcp_ccc_ietf_sec_tkt_all_pc_call_management
, tvb
, suboptoff
, 2, sec_tcm
);
7097 suboptoff
+= subopt_len
;
7101 suboptoff
+= subopt_len
;
7108 dissect_dhcpopt_packetcable_ccc(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
7112 while (tvb_reported_length_remaining(tvb
, offset
) > 0) {
7113 switch (pkt_ccc_protocol_version
) {
7115 case PACKETCABLE_CCC_I05
:
7116 offset
= dissect_packetcable_i05_ccc(pinfo
, tree
, tree
, tvb
, offset
, tvb_reported_length(tvb
));
7118 case PACKETCABLE_CCC_DRAFT5
:
7119 case PACKETCABLE_CCC_RFC_3495
:
7120 offset
= dissect_packetcable_ietf_ccc(pinfo
, tree
, tree
, tvb
, offset
, tvb_reported_length(tvb
), pkt_ccc_protocol_version
);
7122 default: /* XXX Should we do something here? */
7127 return tvb_captured_length(tvb
);
7130 #define BOOTREQUEST 1
7133 static const value_string op_vals
[] = {
7134 { BOOTREQUEST
, "Boot Request" },
7135 { BOOTREPLY
, "Boot Reply" },
7140 dissect_dhcp(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
7142 proto_tree
*bp_tree
;
7143 proto_item
*bp_ti
, *ti
;
7144 proto_item
*file_ti
, *sname_ti
;
7145 proto_item
*fi
, *hidden_item
;
7147 uint8_t htype
, hlen
;
7148 int voff
, eoff
; /* vendor offset, end offset */
7149 int tmpvoff
, tmpvoff_end
;
7153 const char *dhcp_type
= NULL
;
7154 const uint8_t *vendor_class_id
= NULL
;
7155 uint16_t flags
, secs
;
7157 uint8_t overload
= 0; /* DHCP option overload */
7158 static int * const dhcp_flags
[] = {
7159 &hf_dhcp_flags_broadcast
,
7160 &hf_dhcp_flags_reserved
,
7164 if (pinfo
->srcport
== PROXYDHCP_UDP_PORT
||
7165 pinfo
->destport
== PROXYDHCP_UDP_PORT
) {
7166 /* The "DHCP magic" is mandatory for proxyDHCP. Use it as a heuristic. */
7167 if (!tvb_bytes_exist(tvb
, VENDOR_INFO_OFFSET
, 4) ||
7168 tvb_get_ntohl(tvb
, VENDOR_INFO_OFFSET
) != 0x63825363) {
7169 /* Not a DHCP packet at all. */
7174 isProxyDhcp
= false;
7177 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "BOOTP");
7179 * In case we throw an exception fetching the opcode, etc.
7181 col_clear(pinfo
->cinfo
, COL_INFO
);
7183 op
= tvb_get_uint8(tvb
, 0);
7184 htype
= tvb_get_uint8(tvb
, 1);
7185 hlen
= tvb_get_uint8(tvb
, 2);
7189 if ((htype
== ARPHRD_ETHER
|| htype
== ARPHRD_IEEE802
)
7191 col_add_fstr(pinfo
->cinfo
, COL_INFO
, "Boot Request from %s (%s)",
7192 tvb_arphrdaddr_to_str(pinfo
->pool
, tvb
, 28, hlen
, htype
),
7193 tvb_get_ether_name(tvb
, 28));
7196 col_add_fstr(pinfo
->cinfo
, COL_INFO
, "Boot Request from %s",
7197 tvb_arphrdaddr_to_str(pinfo
->pool
, tvb
, 28, hlen
, htype
));
7202 col_set_str(pinfo
->cinfo
, COL_INFO
, "Boot Reply");
7206 col_add_fstr(pinfo
->cinfo
, COL_INFO
, "Unknown BOOTP message type (%u)", op
);
7210 voff
= VENDOR_INFO_OFFSET
;
7212 /* rfc2132 says it SHOULD exist, not that it MUST exist */
7213 if (tvb_bytes_exist(tvb
, voff
, 4) &&
7214 (tvb_get_ntohl(tvb
, voff
) == 0x63825363)) {
7219 eoff
= tvb_reported_length(tvb
);
7221 bp_ti
= proto_tree_add_item(tree
, proto_dhcp
, tvb
, 0, -1, ENC_NA
);
7222 bp_tree
= proto_item_add_subtree(bp_ti
, ett_dhcp
);
7224 wmem_map_t
*rfc3396_map
= wmem_map_new(pinfo
->pool
, g_direct_hash
, g_direct_equal
);
7226 * In the first pass, we just look for the overload, DHCP message type
7227 * and Vendor class identifier options, and any repeated options for
7228 * RFC 3396 long option concatenation.
7232 while (tmpvoff
< eoff
&& !at_end
) {
7233 offset_delta
= dhcp_option(tvb
, pinfo
, NULL
, tmpvoff
, eoff
, true, &at_end
,
7234 &dhcp_type
, &vendor_class_id
, &overload
, rfc3396_map
);
7235 if (offset_delta
<= 0) {
7236 proto_tree_add_expert(bp_tree
, pinfo
, &ei_dhcp_option_parse_err
,
7237 tvb
, tmpvoff
, eoff
);
7240 tmpvoff
+= offset_delta
;
7244 * If there was a DHCP message type option, flag this packet
7247 if (dhcp_type
!= NULL
) {
7249 * Yes, this is a DHCP packet, and "dhcp_type" is the
7252 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "DHCP");
7254 col_add_fstr(pinfo
->cinfo
, COL_INFO
, "%sDHCP %-8s - Transaction ID 0x%x",
7255 isProxyDhcp
? "proxy" : "", dhcp_type
, tvb_get_ntohl(tvb
, 4));
7256 tap_queue_packet( dhcp_bootp_tap
, pinfo
, dhcp_type
);
7260 * OK, now populate the protocol tree.
7263 proto_tree_add_uint(bp_tree
, hf_dhcp_type
, tvb
,
7266 proto_tree_add_item(bp_tree
, hf_dhcp_hw_type
, tvb
,
7267 1, 1, ENC_BIG_ENDIAN
);
7268 proto_tree_add_uint(bp_tree
, hf_dhcp_hw_len
, tvb
,
7270 proto_tree_add_item(bp_tree
, hf_dhcp_hops
, tvb
,
7271 3, 1, ENC_BIG_ENDIAN
);
7272 proto_tree_add_item(bp_tree
, hf_dhcp_id
, tvb
,
7273 4, 4, ENC_BIG_ENDIAN
);
7275 * Windows (98, XP and Vista tested) sends the "secs" value on
7276 * the wire formatted as little-endian. See if the LE value
7277 * makes sense, if autodetect is used.
7279 if (dhcp_secs_endian
== DHCP_SECS_ENDIAN_AUTODETECT
) {
7280 secs
= tvb_get_letohs(tvb
, 8);
7281 if (secs
> 0 && secs
<= 0xff) {
7282 ti
= proto_tree_add_uint(bp_tree
, hf_dhcp_secs
, tvb
, 8, 2, secs
);
7283 expert_add_info_format(pinfo
, ti
, &ei_dhcp_secs_le
, "Seconds elapsed appears to be encoded as little-endian");
7285 proto_tree_add_item(bp_tree
, hf_dhcp_secs
, tvb
,
7286 8, 2, ENC_BIG_ENDIAN
);
7290 /* Use whatever endianness is configured */
7291 proto_tree_add_item(bp_tree
, hf_dhcp_secs
, tvb
, 8, 2, dhcp_secs_endian
);
7293 flags
= tvb_get_ntohs(tvb
, 10);
7294 fi
= proto_tree_add_bitmask(bp_tree
, tvb
, 10, hf_dhcp_flags
,
7295 ett_dhcp_flags
, dhcp_flags
, ENC_NA
);
7296 proto_item_append_text(fi
, " (%s)",
7297 (flags
& BOOTP_BC
) ? "Broadcast" : "Unicast");
7299 proto_tree_add_item(bp_tree
, hf_dhcp_ip_client
, tvb
,
7300 12, 4, ENC_BIG_ENDIAN
);
7301 proto_tree_add_item(bp_tree
, hf_dhcp_ip_your
, tvb
,
7302 16, 4, ENC_BIG_ENDIAN
);
7303 proto_tree_add_item(bp_tree
, hf_dhcp_ip_server
, tvb
,
7304 20, 4, ENC_BIG_ENDIAN
);
7305 proto_tree_add_item(bp_tree
, hf_dhcp_ip_relay
, tvb
,
7306 24, 4, ENC_BIG_ENDIAN
);
7308 if (hlen
> 0 && hlen
<= 16) {
7309 if ((htype
== ARPHRD_ETHER
|| htype
== ARPHRD_IEEE802
)
7311 proto_tree_add_item(bp_tree
, hf_dhcp_hw_ether_addr
, tvb
, 28, 6, ENC_NA
);
7313 /* The chaddr element is 16 bytes in length,
7314 although only the first hlen bytes are used */
7315 proto_tree_add_bytes_format_value(bp_tree
, hf_dhcp_hw_addr
, tvb
, 28, 16,
7316 NULL
, "%s", tvb_arphrdaddr_to_str(pinfo
->pool
, tvb
, 28, hlen
, htype
));
7317 if ((16 - hlen
) > 0)
7318 proto_tree_add_item(bp_tree
, hf_dhcp_hw_addr_padding
, tvb
, 28+hlen
, 16-hlen
, ENC_NA
);
7320 proto_tree_add_expert(bp_tree
, pinfo
, &ei_dhcp_client_address_not_given
, tvb
, 28, 16);
7323 /* RFC 3396 5: "The aggregate option buffer is made up of the optional
7324 * parameters field, the file field, and the sname field, in that order.
7325 * WARNING: This is not the physical ordering of these fields in the
7328 * RFC 3396 6: "[I]f an option were split into three parts and each
7329 * part went into one of the possible option fields, the first part
7330 * would go into the optional parameters field, the second part would
7331 * go into the file field, and the third part would go into the sname
7334 * So we process and reassemble the options in the order listed above,
7335 * and move the items after processing so that they are generally in
7336 * physical ordering in the tree. (Whichever ordering choice we make
7337 * is bound to confused someone.)
7340 if (overload
& OPT_OVERLOAD_FILE
) {
7341 file_ti
= proto_tree_add_expert(bp_tree
, pinfo
, &ei_dhcp_boot_filename_overloaded_by_dhcp
, tvb
,
7342 FILE_NAME_OFFSET
, FILE_NAME_LEN
);
7343 tmpvoff
= FILE_NAME_OFFSET
;
7344 tmpvoff_end
= FILE_NAME_OFFSET
+ FILE_NAME_LEN
;
7346 while (tmpvoff
< tmpvoff_end
&& !at_end
) {
7347 tmpvoff
+= dhcp_option(tvb
, pinfo
, NULL
, tmpvoff
,
7348 tmpvoff_end
, true, &at_end
,
7349 &dhcp_type
, &vendor_class_id
,
7353 /* Boot file is optional */
7354 if (tvb_get_uint8(tvb
, FILE_NAME_OFFSET
) != '\0') {
7355 file_ti
= proto_tree_add_item(bp_tree
, hf_dhcp_file
, tvb
,
7357 FILE_NAME_LEN
, ENC_ASCII
);
7359 file_ti
= proto_tree_add_string_format(bp_tree
, hf_dhcp_file
, tvb
,
7362 "", "Boot file name not given");
7367 if (overload
& OPT_OVERLOAD_SNAME
) {
7368 sname_ti
= proto_tree_add_expert(bp_tree
, pinfo
, &ei_dhcp_server_name_overloaded_by_dhcp
, tvb
,
7369 SERVER_NAME_OFFSET
, SERVER_NAME_LEN
);
7370 tmpvoff
= SERVER_NAME_OFFSET
;
7371 tmpvoff_end
= SERVER_NAME_OFFSET
+ SERVER_NAME_LEN
;
7373 while (tmpvoff
< tmpvoff_end
&& !at_end
) {
7374 tmpvoff
+= dhcp_option(tvb
, pinfo
, NULL
, tmpvoff
,
7375 tmpvoff_end
, true, &at_end
,
7376 &dhcp_type
, &vendor_class_id
,
7380 /* The server host name is optional */
7381 if (tvb_get_uint8(tvb
, SERVER_NAME_OFFSET
) != '\0') {
7382 sname_ti
= proto_tree_add_item(bp_tree
, hf_dhcp_server
, tvb
,
7384 SERVER_NAME_LEN
, ENC_ASCII
);
7387 sname_ti
= proto_tree_add_string_format(bp_tree
, hf_dhcp_server
, tvb
,
7390 "", "Server host name not given");
7394 proto_tree_move_item(bp_tree
, sname_ti
, file_ti
);
7396 voff
= VENDOR_INFO_OFFSET
;
7397 if (dhcp_type
== NULL
) {
7398 hidden_item
= proto_tree_add_boolean(bp_tree
, hf_dhcp_bootp
, tvb
, 0, 0, 1);
7399 proto_item_set_hidden(hidden_item
);
7401 if (tvb_bytes_exist(tvb
, voff
, 4) &&
7402 (tvb_get_ntohl(tvb
, voff
) == 0x63825363)) {
7403 ip_addr
= tvb_get_ipv4(tvb
, voff
);
7404 proto_tree_add_ipv4_format_value(bp_tree
, hf_dhcp_cookie
, tvb
,
7405 voff
, 4, ip_addr
, "DHCP");
7408 proto_tree_add_item(bp_tree
, hf_dhcp_vendor_specific_options
, tvb
,
7414 while (voff
< eoff
&& !at_end
) {
7415 offset_delta
= dhcp_option(tvb
, pinfo
, bp_tree
, voff
, eoff
, false, &at_end
,
7416 &dhcp_type
, &vendor_class_id
, &overload
, rfc3396_map
);
7417 if (offset_delta
<= 0) {
7418 proto_tree_add_expert(bp_tree
, pinfo
, &ei_dhcp_option_parse_err
,
7422 voff
+= offset_delta
;
7424 if ((dhcp_type
!= NULL
) && (!at_end
))
7426 expert_add_info(pinfo
, bp_ti
, &ei_dhcp_end_option_missing
);
7429 if (overload
& OPT_OVERLOAD_FILE
) {
7431 proto_tree
*overload_tree
= proto_tree_add_subtree(bp_tree
, tvb
,
7432 FILE_NAME_OFFSET
, FILE_NAME_LEN
, ett_dhcp_filename_option
, &oti
,
7433 "Boot file name option overload");
7434 tmpvoff
= FILE_NAME_OFFSET
;
7435 tmpvoff_end
= FILE_NAME_OFFSET
+ FILE_NAME_LEN
;
7437 while (tmpvoff
< tmpvoff_end
&& !at_end
) {
7438 tmpvoff
+= dhcp_option(tvb
, pinfo
, overload_tree
, tmpvoff
,
7439 tmpvoff_end
, false, &at_end
,
7440 &dhcp_type
, &vendor_class_id
,
7445 expert_add_info(pinfo
, oti
, &ei_dhcp_opt_overload_file_end_missing
);
7447 proto_tree_move_item(bp_tree
, file_ti
, oti
);
7449 if (overload
& OPT_OVERLOAD_SNAME
) {
7451 proto_tree
*overload_tree
= proto_tree_add_subtree(bp_tree
, tvb
,
7452 SERVER_NAME_OFFSET
, SERVER_NAME_LEN
, ett_dhcp_server_hostname
, &oti
,
7453 "Server host name option overload");
7454 tmpvoff
= SERVER_NAME_OFFSET
;
7455 tmpvoff_end
= SERVER_NAME_OFFSET
+ SERVER_NAME_LEN
;
7457 while (tmpvoff
< tmpvoff_end
&& !at_end
) {
7458 tmpvoff
+= dhcp_option(tvb
, pinfo
, overload_tree
, tmpvoff
,
7459 tmpvoff_end
, false, &at_end
,
7460 &dhcp_type
, &vendor_class_id
,
7465 expert_add_info(pinfo
, oti
, &ei_dhcp_opt_overload_sname_end_missing
);
7467 proto_tree_move_item(bp_tree
, sname_ti
, oti
);
7472 * Padding after the end option.
7474 proto_tree_add_item(bp_tree
, hf_dhcp_option_padding
, tvb
, voff
, eoff
- voff
, ENC_NA
);
7477 return tvb_captured_length(tvb
);
7481 dhcp_init_protocol(void)
7485 /* first copy default_dhcp_opt[] to dhcp_opt[]. This resets all values to default */
7486 memcpy(dhcp_opt
, default_dhcp_opt
, sizeof(dhcp_opt
));
7488 if ((num_dhcp_records_uat
> 0) && (saved_uat_opts
== NULL
))
7490 saved_uat_opts
= wmem_list_new(NULL
);
7493 /* Now apply the custom options */
7494 for (i
= 0; i
< num_dhcp_records_uat
; i
++)
7496 dhcp_opt
[uat_dhcp_records
[i
].opt
].text
= wmem_strdup(wmem_file_scope(), uat_dhcp_records
[i
].text
);
7497 dhcp_opt
[uat_dhcp_records
[i
].opt
].ftype
= uat_dhcp_records
[i
].ftype
;
7498 dhcp_opt
[uat_dhcp_records
[i
].opt
].phf
= NULL
;
7500 /* Apply the custom option to the dissection table*/
7501 dissector_change_uint("dhcp.option", uat_dhcp_records
[i
].opt
, dhcpopt_basic_handle
);
7503 /* Save the option so it can be cleared later */
7504 wmem_list_append(saved_uat_opts
, GUINT_TO_POINTER(uat_dhcp_records
[i
].opt
));
7509 dhcp_clear_uat_dhcpopt(void *data
, void *user_data _U_
)
7511 dissector_reset_uint("dhcp.option", GPOINTER_TO_UINT(data
));
7515 dhcp_cleanup_protocol(void)
7517 if (saved_uat_opts
!= NULL
) {
7518 wmem_list_foreach(saved_uat_opts
, dhcp_clear_uat_dhcpopt
,
7521 wmem_destroy_list(saved_uat_opts
);
7522 saved_uat_opts
= NULL
;
7530 MESSAGE_TYPE_COLUMN
= 0,
7532 } dhcp_stat_columns
;
7534 static stat_tap_table_item dhcp_stat_fields
[] = {{TABLE_ITEM_STRING
, TAP_ALIGN_LEFT
, "DHCP Message Type", "%-25s"}, {TABLE_ITEM_UINT
, TAP_ALIGN_RIGHT
, "Packets", "%d"}};
7536 static void dhcp_stat_init(stat_tap_table_ui
* new_stat
)
7538 const char *table_name
= "DHCP Statistics";
7539 int num_fields
= array_length(dhcp_stat_fields
);
7540 stat_tap_table
*table
;
7542 stat_tap_table_item_type items
[array_length(dhcp_stat_fields
)];
7544 table
= stat_tap_find_table(new_stat
, table_name
);
7546 if (new_stat
->stat_tap_reset_table_cb
) {
7547 new_stat
->stat_tap_reset_table_cb(table
);
7552 table
= stat_tap_init_table(table_name
, num_fields
, 0, NULL
);
7553 stat_tap_add_table(new_stat
, table
);
7555 memset(items
, 0x0, sizeof(items
));
7556 /* Add a row for each value type */
7557 while (opt53_text
[i
].strptr
)
7559 items
[MESSAGE_TYPE_COLUMN
].type
= TABLE_ITEM_STRING
;
7560 items
[MESSAGE_TYPE_COLUMN
].value
.string_value
= opt53_text
[i
].strptr
;
7561 items
[PACKET_COLUMN
].type
= TABLE_ITEM_UINT
;
7562 items
[PACKET_COLUMN
].value
.uint_value
= 0;
7564 stat_tap_init_table_row(table
, i
, num_fields
, items
);
7569 static tap_packet_status
7570 dhcp_stat_packet(void *tapdata
, packet_info
*pinfo _U_
, epan_dissect_t
*edt _U_
, const void *data
, tap_flags_t flags _U_
)
7572 stat_data_t
* stat_data
= (stat_data_t
*)tapdata
;
7573 const char* value
= (const char*)data
;
7574 stat_tap_table
* table
;
7575 stat_tap_table_item_type
* msg_data
;
7578 idx
= str_to_val_idx(value
, opt53_text
);
7580 return TAP_PACKET_DONT_REDRAW
;
7582 table
= g_array_index(stat_data
->stat_tap_data
->tables
, stat_tap_table
*, 0);
7583 msg_data
= stat_tap_get_field_data(table
, idx
, PACKET_COLUMN
);
7584 msg_data
->value
.uint_value
++;
7585 stat_tap_set_field_data(table
, idx
, PACKET_COLUMN
, msg_data
);
7587 return TAP_PACKET_REDRAW
;
7591 dhcp_stat_reset(stat_tap_table
* table
)
7594 stat_tap_table_item_type
* item_data
;
7596 for (element
= 0; element
< table
->num_elements
; element
++)
7598 item_data
= stat_tap_get_field_data(table
, element
, PACKET_COLUMN
);
7599 item_data
->value
.uint_value
= 0;
7600 stat_tap_set_field_data(table
, element
, PACKET_COLUMN
, item_data
);
7605 proto_register_dhcp(void)
7607 static const value_string dhcp_custom_type_vals
[] = {
7608 { ipv4
, "IP Address"},
7609 { ipv4_list
, "IP Address List" },
7610 { string
, "string" },
7612 { val_boolean
, "boolean" },
7613 { val_u_byte
, "byte" },
7614 { val_u_short
, "unsigned short" },
7615 { val_u_short_list
, "unsigned short list" },
7616 { val_u_long
, "unsigned long" },
7617 { time_in_s_secs
, "integer time in seconds" },
7618 { time_in_u_secs
, "unsigned integer time in seconds" },
7622 static hf_register_info hf
[] = {
7624 { "Frame is BOOTP", "dhcp.bootp",
7625 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x0,
7629 { "Message type", "dhcp.type",
7630 FT_UINT8
, BASE_DEC
, VALS(op_vals
), 0x0,
7634 { "Hardware type", "dhcp.hw.type",
7635 FT_UINT8
, BASE_HEX
, VALS(arp_hrd_vals
), 0x0,
7639 { "Hardware address length", "dhcp.hw.len",
7640 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7644 { "Hops", "dhcp.hops",
7645 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7649 { "Transaction ID", "dhcp.id",
7650 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
7654 { "Seconds elapsed", "dhcp.secs",
7655 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7659 { "Bootp flags", "dhcp.flags",
7660 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
7663 { &hf_dhcp_flags_broadcast
,
7664 { "Broadcast flag", "dhcp.flags.bc",
7665 FT_BOOLEAN
, 16, TFS(&flag_set_broadcast
), BOOTP_BC
,
7668 { &hf_dhcp_flags_reserved
,
7669 { "Reserved flags", "dhcp.flags.reserved",
7670 FT_UINT16
, BASE_HEX
, NULL
, BOOTP_MBZ
,
7673 { &hf_dhcp_ip_client
,
7674 { "Client IP address", "dhcp.ip.client",
7675 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
7679 { "Your (client) IP address", "dhcp.ip.your",
7680 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
7683 { &hf_dhcp_ip_server
,
7684 { "Next server IP address", "dhcp.ip.server",
7685 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
7688 { &hf_dhcp_ip_relay
,
7689 { "Relay agent IP address", "dhcp.ip.relay",
7690 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
7694 { "Client hardware address", "dhcp.hw.addr",
7695 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7698 { &hf_dhcp_hw_addr_padding
,
7699 { "Client hardware address padding", "dhcp.hw.addr_padding",
7700 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7703 { &hf_dhcp_hw_ether_addr
,
7704 { "Client MAC address", "dhcp.hw.mac_addr",
7705 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
7709 { "Server host name", "dhcp.server",
7710 FT_STRING
, BASE_NONE
, NULL
, 0x0,
7714 { "Boot file name", "dhcp.file",
7715 FT_STRING
, BASE_NONE
, NULL
, 0x0,
7719 { "Magic cookie", "dhcp.cookie",
7720 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
7723 { &hf_dhcp_vendor_specific_options
,
7724 { "Bootp vendor specific options", "dhcp.vendor_specific_options",
7725 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
7729 { "Server", "dhcp.fqdn.s",
7730 FT_BOOLEAN
, 8, TFS(&tfs_server_client
), F_FQDN_S
,
7731 "If true, server should do DDNS update", HFILL
}},
7734 { "Server overrides", "dhcp.fqdn.o",
7735 FT_BOOLEAN
, 8, TFS(&tfs_fqdn_o
), F_FQDN_O
,
7736 "If true, server insists on doing DDNS update", HFILL
}},
7739 { "Encoding", "dhcp.fqdn.e",
7740 FT_BOOLEAN
, 8, TFS(&tfs_fqdn_e
), F_FQDN_E
,
7741 "If true, name is binary encoded", HFILL
}},
7744 { "Server DDNS", "dhcp.fqdn.n",
7745 FT_BOOLEAN
, 8, TFS(&tfs_fqdn_n
), F_FQDN_N
,
7746 "If true, server should not do any DDNS updates", HFILL
}},
7748 { &hf_dhcp_fqdn_flags
,
7749 { "Flags", "dhcp.fqdn.flags",
7750 FT_UINT8
, BASE_HEX
, NULL
, 0,
7753 { &hf_dhcp_fqdn_mbz
,
7754 { "Reserved flags", "dhcp.fqdn.mbz",
7755 FT_UINT8
, BASE_HEX
, NULL
, F_FQDN_MBZ
,
7758 { &hf_dhcp_fqdn_rcode1
,
7759 { "A-RR result", "dhcp.fqdn.rcode1",
7760 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7761 "Result code of A-RR update", HFILL
}},
7763 { &hf_dhcp_fqdn_rcode2
,
7764 { "PTR-RR result", "dhcp.fqdn.rcode2",
7765 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7766 "Result code of PTR-RR update", HFILL
}},
7768 { &hf_dhcp_fqdn_name
,
7769 { "Client name", "dhcp.fqdn.name",
7770 FT_STRING
, BASE_NONE
, NULL
, 0x0,
7771 "Name to register via DDNS", HFILL
}},
7773 { &hf_dhcp_fqdn_asciiname
,
7774 { "Client name", "dhcp.fqdn.name",
7775 FT_STRING
, BASE_NONE
, NULL
, 0x0,
7776 "Name to register via DDNS", HFILL
}},
7778 { &hf_dhcp_pkt_mta_cap_len
,
7779 { "MTA DC Length", "dhcp.vendor.pktc.mta_cap_len",
7780 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
7781 "PacketCable MTA Device Capabilities Length", HFILL
}},
7783 { &hf_dhcp_pkt_mta_cap_type
,
7784 { "Type", "dhcp.vendor.pktc.mta_cap_type",
7785 FT_UINT16
, BASE_DEC
, VALS(pkt_mdc_type_vals
), 0x0,
7788 { &hf_dhcp_pkt_mdc_supp_flow_secure
,
7789 { "Secure Flow (Full Secure Provisioning Flow)", "dhcp.vendor.pktc.mdc.supp_flow.secure",
7790 FT_BOOLEAN
, 16, TFS(&tfs_supported_not_supported
), 0x0001,
7793 { &hf_dhcp_pkt_mdc_supp_flow_hybrid
,
7794 { "Hybrid Flow", "dhcp.vendor.pktc.mdc.supp_flow.hybrid",
7795 FT_BOOLEAN
, 16, TFS(&tfs_supported_not_supported
), 0x0002,
7798 { &hf_dhcp_pkt_mdc_supp_flow_basic
,
7799 { "Basic Flow", "dhcp.vendor.pktc.mdc.supp_flow.basic",
7800 FT_BOOLEAN
, 16, TFS(&tfs_supported_not_supported
), 0x0004,
7803 { &hf_dhcp_pkt_mdc_mib_cl_mta
,
7804 { "PacketCable 1.5 MTA MIB", "dhcp.vendor.pktc.mdc_cl.mib.mta",
7805 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x01,
7808 { &hf_dhcp_pkt_mdc_mib_cl_signaling
,
7809 { "PacketCable 1.5 Signaling MIB", "dhcp.vendor.pktc.mdc_cl.mib.signaling",
7810 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x02,
7813 { &hf_dhcp_pkt_mdc_mib_cl_management_event
,
7814 { "PacketCable 1.5 Management Event MIB", "dhcp.vendor.pktc.mdc_cl.mib.management_event",
7815 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x04,
7818 { &hf_dhcp_pkt_mdc_mib_cl_mta_extension
,
7819 { "PacketCable 1.5 MTA Extension MIB", "dhcp.vendor.pktc.mdc_cl.mib.mta_extension",
7820 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x08,
7823 { &hf_dhcp_pkt_mdc_mib_cl_mta_signaling_extension
,
7824 { "PacketCable 1.5 Signaling Extension MIB", "dhcp.vendor.pktc.mdc_cl.mib.signaling_extension",
7825 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x10,
7828 { &hf_dhcp_pkt_mdc_mib_cl_mta_mem_extension
,
7829 { "PacketCable 1.5 MEM Extension MIB", "dhcp.vendor.pktc.mdc_cl.mib.mem_extension",
7830 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x20,
7833 { &hf_dhcp_pkt_mdc_mib_cl_reserved
,
7834 { "Reserved", "dhcp.vendor.pktc.mdc_cl.mib.reserved",
7835 FT_UINT8
, BASE_HEX
, NULL
, 0xC0,
7838 { &hf_dhcp_pkt_mdc_mib_ietf_mta
,
7839 { "IETF MTA MIB", "dhcp.vendor.pktc.mdc_ietf.mib.mta",
7840 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x01,
7843 { &hf_dhcp_pkt_mdc_mib_ietf_signaling
,
7844 { "IETF Signaling MIB", "dhcp.vendor.pktc.mdc_ietf.mib.signaling",
7845 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x02,
7848 { &hf_dhcp_pkt_mdc_mib_ietf_management_event
,
7849 { "IETF Management Event MIB", "dhcp.vendor.pktc.mdc_ietf.mib.management_event",
7850 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x04,
7853 { &hf_dhcp_pkt_mdc_mib_ietf_reserved
,
7854 { "Reserved", "dhcp.vendor.pktc.mdc_ietf.mib.reserved",
7855 FT_UINT8
, BASE_HEX
, NULL
, 0xF8,
7858 { &hf_dhcp_pkt_mdc_mib_euro_mta
,
7859 { "PacketCable 1.5 MTA MIB", "dhcp.vendor.pktc.mdc_euro.mib.mta",
7860 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x01,
7863 { &hf_dhcp_pkt_mdc_mib_euro_signaling
,
7864 { "PacketCable 1.5 Signaling MIB", "dhcp.vendor.pktc.mdc_euro.mib.signaling",
7865 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x02,
7868 { &hf_dhcp_pkt_mdc_mib_euro_management_event
,
7869 { "PacketCable 1.5 Management Event MIB", "dhcp.vendor.pktc.mdc_euro.mib.management_event",
7870 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x04,
7873 { &hf_dhcp_pkt_mdc_mib_euro_mta_extension
,
7874 { "PacketCable 1.5 MTA Extension MIB", "dhcp.vendor.pktc.mdc_euro.mib.mta_extension",
7875 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x08,
7878 { &hf_dhcp_pkt_mdc_mib_euro_mta_signaling_extension
,
7879 { "PacketCable 1.5 Signaling Extension MIB", "dhcp.vendor.pktc.mdc_euro.mib.signaling_extension",
7880 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x10,
7883 { &hf_dhcp_pkt_mdc_mib_euro_mta_mem_extension
,
7884 { "PacketCable 1.5 MEM Extension MIB", "dhcp.vendor.pktc.mdc_euro.mib.mem_extension",
7885 FT_BOOLEAN
, 8, TFS(&tfs_present_not_present
), 0x20,
7888 { &hf_dhcp_pkt_mdc_mib_euro_reserved
,
7889 { "Reserved", "dhcp.vendor.pktc.mdc_euro.mib.reserved",
7890 FT_UINT8
, BASE_HEX
, NULL
, 0xC0,
7893 { &hf_dhcp_docsis_cm_cap_len
,
7894 { "CM DC Length", "dhcp.vendor.docsis.cm_cap_len",
7895 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
7896 "DOCSIS Cable Modem Device Capabilities Length", HFILL
}},
7898 { &hf_dhcp_docsis_cm_cap_type
,
7899 { "CM DC Type", "dhcp.docsis_cm_cap_type",
7900 FT_UINT16
, BASE_DEC
, VALS(docsis_cm_cap_type_vals
), 0x0,
7901 "Docsis Cable Modem Device Capability type", HFILL
}},
7903 { &hf_dhcp_docsis_cm_cap_ranging_hold_off_cm
,
7904 { "CM", "dhcp.docsis_cm_cap.ranging_hold_off.cm",
7905 FT_BOOLEAN
, 16, TFS(&tfs_supported_not_supported
), 0x0001,
7908 { &hf_dhcp_docsis_cm_cap_ranging_hold_off_eps
,
7909 { "ePS or eRouter", "dhcp.docsis_cm_cap.ranging_hold_off.eps",
7910 FT_BOOLEAN
, 16, TFS(&tfs_supported_not_supported
), 0x0002,
7913 { &hf_dhcp_docsis_cm_cap_ranging_hold_off_emta
,
7914 { "EMTA or EDVA", "dhcp.docsis_cm_cap.ranging_hold_off.emta",
7915 FT_BOOLEAN
, 16, TFS(&tfs_supported_not_supported
), 0x0004,
7918 { &hf_dhcp_docsis_cm_cap_ranging_hold_off_dsg
,
7919 { "DSG/eSTB", "dhcp.docsis_cm_cap.ranging_hold_off.dsg",
7920 FT_BOOLEAN
, 16, TFS(&tfs_supported_not_supported
), 0x0008,
7924 { &hf_dhcp_docsis_cm_cap_mpls_stpid
,
7925 { "[IEEE 802.1ad] S-TPID", "dhcp.docsis_cm_cap.mpls.stpid",
7926 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000001,
7929 { &hf_dhcp_docsis_cm_cap_mpls_svid
,
7930 { "[IEEE 802.1ad] S-VID", "dhcp.docsis_cm_cap.mpls.svid",
7931 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000002,
7934 { &hf_dhcp_docsis_cm_cap_mpls_spcp
,
7935 { "[IEEE 802.1ad] S-PCP", "dhcp.docsis_cm_cap.mpls.spcp",
7936 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000004,
7939 { &hf_dhcp_docsis_cm_cap_mpls_sdei
,
7940 { "[IEEE 802.1ad] S-DEI", "dhcp.docsis_cm_cap.mpls.sdei",
7941 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000008,
7944 { &hf_dhcp_docsis_cm_cap_mpls_ctpid
,
7945 { "[IEEE 802.1ad] C-TPID", "dhcp.docsis_cm_cap.mpls.ctpid",
7946 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000010,
7949 { &hf_dhcp_docsis_cm_cap_mpls_cvid
,
7950 { "[IEEE 802.1ad] C-VID", "dhcp.docsis_cm_cap.mpls.cvid",
7951 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000020,
7954 { &hf_dhcp_docsis_cm_cap_mpls_cpcp
,
7955 { "[IEEE 802.1ad] C-PCP", "dhcp.docsis_cm_cap.mpls.cpcp",
7956 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000040,
7959 { &hf_dhcp_docsis_cm_cap_mpls_ccfi
,
7960 { "[IEEE 802.1ad] C-CFI", "dhcp.docsis_cm_cap.mpls.ccfi",
7961 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000080,
7964 { &hf_dhcp_docsis_cm_cap_mpls_stci
,
7965 { "[IEEE 802.1ad] S-TCI", "dhcp.docsis_cm_cap.mpls.stci",
7966 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000100,
7969 { &hf_dhcp_docsis_cm_cap_mpls_ctci
,
7970 { "[IEEE 802.1ad] C-TCI", "dhcp.docsis_cm_cap.mpls.ctci",
7971 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000200,
7974 { &hf_dhcp_docsis_cm_cap_mpls_itpid
,
7975 { "[IEEE 802.1ad] I-TPID", "dhcp.docsis_cm_cap.mpls.itpid",
7976 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000400,
7979 { &hf_dhcp_docsis_cm_cap_mpls_isid
,
7980 { "[IEEE 802.1ad] I-SID", "dhcp.docsis_cm_cap.mpls.isid",
7981 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00000800,
7984 { &hf_dhcp_docsis_cm_cap_mpls_itci
,
7985 { "[IEEE 802.1ad] I-TCI", "dhcp.docsis_cm_cap.mpls.itci",
7986 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00001000,
7989 { &hf_dhcp_docsis_cm_cap_mpls_ipcp
,
7990 { "[IEEE 802.1ad] I-PCP", "dhcp.docsis_cm_cap.mpls.ipcp",
7991 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00002000,
7994 { &hf_dhcp_docsis_cm_cap_mpls_idei
,
7995 { "[IEEE 802.1ad] I-DEI", "dhcp.docsis_cm_cap.mpls.idei",
7996 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00004000,
7999 { &hf_dhcp_docsis_cm_cap_mpls_iuca
,
8000 { "[IEEE 802.1ad] I-UCA", "dhcp.docsis_cm_cap.mpls.iuca",
8001 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00008000,
8004 { &hf_dhcp_docsis_cm_cap_mpls_btpid
,
8005 { "[IEEE 802.1ad] B-TPID", "dhcp.docsis_cm_cap.mpls.btpid",
8006 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00010000,
8009 { &hf_dhcp_docsis_cm_cap_mpls_btci
,
8010 { "[IEEE 802.1ad] B-TCI", "dhcp.docsis_cm_cap.mpls.btci",
8011 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00020000,
8014 { &hf_dhcp_docsis_cm_cap_mpls_bpcp
,
8015 { "[IEEE 802.1ad] B-PCP", "dhcp.docsis_cm_cap.mpls.bpcp",
8016 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00040000,
8019 { &hf_dhcp_docsis_cm_cap_mpls_bdei
,
8020 { "[IEEE 802.1ad] B-DEI", "dhcp.docsis_cm_cap.mpls.bdei",
8021 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00080000,
8024 { &hf_dhcp_docsis_cm_cap_mpls_bvid
,
8025 { "[IEEE 802.1ad] B-VID", "dhcp.docsis_cm_cap.mpls.bvid",
8026 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00100000,
8029 { &hf_dhcp_docsis_cm_cap_mpls_bda
,
8030 { "[IEEE 802.1ad] B-DA", "dhcp.docsis_cm_cap.mpls.bda",
8031 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00200000,
8034 { &hf_dhcp_docsis_cm_cap_mpls_bsa
,
8035 { "[IEEE 802.1ad] B-SA", "dhcp.docsis_cm_cap.mpls.bsa",
8036 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00400000,
8039 { &hf_dhcp_docsis_cm_cap_mpls_tc
,
8040 { "MPLS TC", "dhcp.docsis_cm_cap.mpls.tc",
8041 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x00800000,
8044 { &hf_dhcp_docsis_cm_cap_mpls_label
,
8045 { "MPLS Label", "dhcp.docsis_cm_cap.mpls.label",
8046 FT_BOOLEAN
, 32, TFS(&tfs_supported_not_supported
), 0x01000000,
8050 { &hf_dhcp_docsis_cm_cap_ussymrate_160
,
8051 { "160 ksps symbol rate", "dhcp.docsis_cm_cap.ussymrate.160",
8052 FT_BOOLEAN
, 8, TFS(&tfs_supported_not_supported
), 0x01,
8055 { &hf_dhcp_docsis_cm_cap_ussymrate_320
,
8056 { "320 ksps symbol rate", "dhcp.docsis_cm_cap.ussymrate.320",
8057 FT_BOOLEAN
, 8, TFS(&tfs_supported_not_supported
), 0x02,
8060 { &hf_dhcp_docsis_cm_cap_ussymrate_640
,
8061 { "640 ksps symbol rate", "dhcp.docsis_cm_cap.ussymrate.640",
8062 FT_BOOLEAN
, 8, TFS(&tfs_supported_not_supported
), 0x04,
8065 { &hf_dhcp_docsis_cm_cap_ussymrate_1280
,
8066 { "1280 ksps symbol rate", "dhcp.docsis_cm_cap.ussymrate.1280",
8067 FT_BOOLEAN
, 8, TFS(&tfs_supported_not_supported
), 0x08,
8070 { &hf_dhcp_docsis_cm_cap_ussymrate_2560
,
8071 { "2560 ksps symbol rate", "dhcp.docsis_cm_cap.ussymrate.2560",
8072 FT_BOOLEAN
, 8, TFS(&tfs_supported_not_supported
), 0x10,
8075 { &hf_dhcp_docsis_cm_cap_ussymrate_5120
,
8076 { "5120 ksps symbol rate", "dhcp.docsis_cm_cap.ussymrate.5120",
8077 FT_BOOLEAN
, 8, TFS(&tfs_supported_not_supported
), 0x20,
8080 { &hf_dhcp_client_identifier_uuid
,
8081 { "Client Identifier (UUID)", "dhcp.client_id.uuid",
8082 FT_GUID
, BASE_NONE
, NULL
, 0x0,
8083 "Client Machine Identifier (UUID)", HFILL
}},
8085 { &hf_dhcp_client_hardware_address
,
8086 { "Client hardware address", "dhcp.client_hardware_address",
8087 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8090 { &hf_dhcp_client_id_iaid
,
8091 { "IAID", "dhcp.client_id.iaid",
8092 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8095 { &hf_dhcp_client_id_duid_type
,
8096 { "DUID Type", "dhcp.client_id.duid_type",
8097 FT_UINT16
, BASE_DEC
, VALS(duidtype_vals
), 0x0,
8100 { &hf_dhcp_client_identifier_duid_llt_hw_type
,
8101 { "Hardware type", "dhcp.client_id.duid_llt_hw_type",
8102 FT_UINT16
, BASE_DEC
, VALS(arp_hrd_vals
), 0x0,
8103 "Client Identifier DUID LLT Hardware type", HFILL
}},
8105 { &hf_dhcp_client_identifier_duid_ll_hw_type
,
8106 { "Hardware type", "dhcp.client_id.duid_ll_hw_type",
8107 FT_UINT16
, BASE_DEC
, VALS(arp_hrd_vals
), 0x0,
8108 "Client Identifier DUID LL Hardware type", HFILL
}},
8110 { &hf_dhcp_client_identifier_time
,
8111 { "Time", "dhcp.client_id.time",
8112 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8115 { &hf_dhcp_client_identifier_link_layer_address
,
8116 { "Link layer address", "dhcp.client_id.link_layer_address",
8117 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8120 { &hf_dhcp_client_identifier_link_layer_address_ether
,
8121 { "Link layer address (Ethernet)", "dhcp.client_id.link_layer_address_ether",
8122 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
8125 { &hf_dhcp_client_identifier_enterprise_num
,
8126 { "Enterprise-number", "dhcp.client_id.enterprise_num",
8127 FT_UINT32
, BASE_ENTERPRISES
, STRINGS_ENTERPRISES
, 0x0,
8130 { &hf_dhcp_client_identifier
,
8131 { "Identifier", "dhcp.client_id",
8132 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8135 { &hf_dhcp_client_identifier_type
,
8136 { "Type", "dhcp.client_id.type",
8137 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8140 { &hf_dhcp_client_identifier_undef
,
8141 { "Client Identifier", "dhcp.client_id.undef",
8142 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8145 { &hf_dhcp_option_type
,
8146 { "Option", "dhcp.option.type",
8147 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8148 "DHCP/BOOTP option type", HFILL
}},
8150 { &hf_dhcp_option_length
,
8151 { "Length", "dhcp.option.length",
8152 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8153 "DHCP/BOOTP option length", HFILL
}},
8155 { &hf_dhcp_suboption_length
,
8156 { "Length", "dhcp.option.suboption_length",
8157 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8158 "Suboption length", HFILL
}},
8160 { &hf_dhcp_option_value
,
8161 { "Value", "dhcp.option.value",
8162 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8163 "DHCP/BOOTP option value", HFILL
}},
8165 { &hf_dhcp_option_value_8
,
8166 { "Value", "dhcp.option.value.uint",
8167 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8168 "8-bit DHCP/BOOTP option value", HFILL
}},
8170 { &hf_dhcp_option_value_16
,
8171 { "Value", "dhcp.option.value.uint",
8172 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8173 "16-bit DHCP/BOOTP option value", HFILL
}},
8175 { &hf_dhcp_option_value_u32
,
8176 { "Value", "dhcp.option.value.uint",
8177 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8178 "32-bit DHCP/BOOTP option value", HFILL
}},
8180 { &hf_dhcp_option_value_s_secs
,
8181 { "Value", "dhcp.option.value.secs",
8182 FT_INT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_s_secs_fmt
), 0x0,
8183 "32-bit DHCP/BOOTP option value", HFILL
}},
8185 { &hf_dhcp_option_value_u_secs
,
8186 { "Value", "dhcp.option.value.usecs",
8187 FT_UINT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_u_secs_fmt
), 0x0,
8188 "32-bit DHCP/BOOTP option value", HFILL
}},
8190 { &hf_dhcp_option_value_stringz
,
8191 { "Value", "dhcp.option.value.string",
8192 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8193 "Z-String DHCP/BOOTP option value", HFILL
}},
8195 { &hf_dhcp_option_value_ip_address
,
8196 { "Value", "dhcp.option.value.address",
8197 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8198 "IP address DHCP/BOOTP option value", HFILL
}},
8200 { &hf_dhcp_option_value_boolean
,
8201 { "Value", "dhcp.option.value.bool",
8202 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x00,
8203 "Boolean DHCP/BOOTP option value", HFILL
}},
8205 { &hf_dhcp_option_rfc_3396_detected
,
8206 { "Encoding Long Options detected (RFC 3396)", "dhcp.option.rfc_3396_detected",
8207 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8210 { &hf_dhcp_option_padding
,
8211 { "Padding", "dhcp.option.padding",
8212 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8213 "Option 0: Padding", HFILL
}},
8215 { &hf_dhcp_option_subnet_mask
,
8216 { "Subnet Mask", "dhcp.option.subnet_mask",
8217 FT_IPv4
, BASE_NETMASK
, NULL
, 0x00,
8218 "Option 1: Subnet Mask", HFILL
}},
8220 { &hf_dhcp_option_time_offset
,
8221 { "Time Offset", "dhcp.option.time_offset",
8222 FT_INT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_s_secs_fmt
), 0x0,
8223 "Option 2: Time Offset", HFILL
}},
8225 { &hf_dhcp_option_router
,
8226 { "Router", "dhcp.option.router",
8227 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8228 "Option 3: Router", HFILL
}},
8230 { &hf_dhcp_option_time_server
,
8231 { "Time Server", "dhcp.option.time_server",
8232 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8233 "Option 4: Time Server", HFILL
}},
8235 { &hf_dhcp_option_name_server
,
8236 { "Name Server", "dhcp.option.name_server",
8237 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8238 "Option 5: Name Server", HFILL
}},
8240 { &hf_dhcp_option_domain_name_server
,
8241 { "Domain Name Server", "dhcp.option.domain_name_server",
8242 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8243 "Option 6: Domain Name Server", HFILL
}},
8245 { &hf_dhcp_option_log_server
,
8246 { "Log Server", "dhcp.option.log_server",
8247 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8248 "Option 7: Log Server", HFILL
}},
8250 { &hf_dhcp_option_quotes_server
,
8251 { "Quotes Server", "dhcp.option.quotes_server",
8252 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8253 "Option 8: Quotes Server", HFILL
}},
8255 { &hf_dhcp_option_lpr_server
,
8256 { "LPR Server", "dhcp.option.lpr_server",
8257 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8258 "Option 9: LPR Server", HFILL
}},
8260 { &hf_dhcp_option_impress_server
,
8261 { "Impress Server", "dhcp.option.impress_server",
8262 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8263 "Option 10: Impress Server", HFILL
}},
8265 { &hf_dhcp_option_resource_location_server
,
8266 { "Resource Location Server", "dhcp.option.resource_location_server",
8267 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8268 "Option 11: Resource Location Server", HFILL
}},
8270 { &hf_dhcp_option_hostname
,
8271 { "Host Name", "dhcp.option.hostname",
8272 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8273 "Option 12: Host Name", HFILL
}},
8275 { &hf_dhcp_option_boot_file_size
,
8276 { "Boot File Size", "dhcp.option.boot_file_size",
8277 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8278 "Option 13: Boot File Size", HFILL
}},
8280 { &hf_dhcp_option_merit_dump_file
,
8281 { "Merit Dump File", "dhcp.option.merit_dump_file",
8282 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8283 "Option 14: Merit Dump File", HFILL
}},
8285 { &hf_dhcp_option_domain_name
,
8286 { "Domain Name", "dhcp.option.domain_name",
8287 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8288 "Option 15: Domain Name", HFILL
}},
8290 { &hf_dhcp_option_swap_server
,
8291 { "Swap Server", "dhcp.option.swap_server",
8292 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8293 "Option 16: Swap Server", HFILL
}},
8295 { &hf_dhcp_option_root_path
,
8296 { "Root Path", "dhcp.option.root_path",
8297 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8298 "Option 17: Root Path", HFILL
}},
8300 { &hf_dhcp_option_extension_path
,
8301 { "Extensions Path", "dhcp.option.extension_path",
8302 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8303 "Option 18: Extensions Path", HFILL
}},
8305 { &hf_dhcp_option_ip_forwarding
,
8306 { "IP Forwarding", "dhcp.option.ip_forwarding",
8307 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_enabled_disabled
), 0x00,
8308 "Option 19: IP Forwarding", HFILL
}},
8310 { &hf_dhcp_option_policy_filter_ip
,
8311 { "IP Address", "dhcp.option.policy_filter.ip",
8312 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8313 "Option 21: IP address", HFILL
}},
8315 { &hf_dhcp_option_policy_filter_subnet_mask
,
8316 { "Subnet Mask", "dhcp.option.policy_filter.subnet_mask",
8317 FT_IPv4
, BASE_NETMASK
, NULL
, 0x00,
8318 "Option 21: Subnet Mask", HFILL
}},
8320 { &hf_dhcp_option_non_local_source_routing
,
8321 { "Non-Local Source Routing", "dhcp.option.non_local_source_routing",
8322 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_enabled_disabled
), 0x00,
8323 "Option 20: Non-Local Source Routing", HFILL
}},
8325 { &hf_dhcp_option_max_datagram_reassembly_size
,
8326 { "Maximum Datagram Reassembly Size", "dhcp.option.max_datagram_reassembly_size",
8327 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8328 "Option 22: Maximum Datagram Reassembly Size", HFILL
}},
8330 { &hf_dhcp_option_default_ip_ttl
,
8331 { "Default IP Time-to-Live", "dhcp.option.default_ip_ttl",
8332 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8333 "Option 23: Default IP Time-to-Live", HFILL
}},
8335 { &hf_dhcp_option_path_mtu_aging_timeout
,
8336 { "Path MTU Aging Timeout", "dhcp.option.path_mtu_aging_timeout",
8337 FT_UINT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_u_secs_fmt
), 0x0,
8338 "Option 24: Path MTU Aging Timeout", HFILL
}},
8340 { &hf_dhcp_option_path_mtu_plateau_table_item
,
8341 { "Path MTU Plateau Table Item", "dhcp.option.path_mtu_plateau_table_item",
8342 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8343 "Option 25: Path MTU Plateau Table Item", HFILL
}},
8345 { &hf_dhcp_option_interface_mtu
,
8346 { "Interface MTU", "dhcp.option.interface_mtu",
8347 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8348 "Option 26: Interface MTU", HFILL
}},
8350 { &hf_dhcp_option_all_subnets_are_local
,
8351 { "All Subnets are Local", "dhcp.option.all_subnets_are_local",
8352 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_yes_no
), 0x00,
8353 "Option 27: All Subnets are Local", HFILL
}},
8355 { &hf_dhcp_option_broadcast_address
,
8356 { "Broadcast Address", "dhcp.option.broadcast_address",
8357 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8358 "Option 28: Broadcast Address", HFILL
}},
8360 { &hf_dhcp_option_perform_mask_discovery
,
8361 { "Perform Mask Discovery", "dhcp.option.perform_mask_discovery",
8362 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_enabled_disabled
), 0x00,
8363 "Option 29: Perform Mask Discovery", HFILL
}},
8365 { &hf_dhcp_option_mask_supplier
,
8366 { "Mask Supplier", "dhcp.option.mask_supplier",
8367 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_yes_no
), 0x00,
8368 "Option 30: Mask Supplier", HFILL
}},
8370 { &hf_dhcp_option_perform_router_discover
,
8371 { "Perform Router Discover", "dhcp.option.perform_router_discover",
8372 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_enabled_disabled
), 0x00,
8373 "Option 31: Perform Router Discover", HFILL
}},
8375 { &hf_dhcp_option_router_solicitation_address
,
8376 { "Router Solicitation Address", "dhcp.option.router_solicitation_address",
8377 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8378 "Option 32: Router Solicitation Address", HFILL
}},
8380 { &hf_dhcp_option_static_route_ip
,
8381 { "Destination IP Address", "dhcp.option.static_route.ip",
8382 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8383 "Option 33: Destination IP address", HFILL
}},
8385 { &hf_dhcp_option_static_route_router
,
8386 { "Destination Router", "dhcp.option.static_route.router",
8387 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8388 "Option 33: Destination Router", HFILL
}},
8390 { &hf_dhcp_option_trailer_encapsulation
,
8391 { "Trailer Encapsulation", "dhcp.option.trailer_encapsulation",
8392 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_enabled_disabled
), 0x00,
8393 "Option 34: Trailer Encapsulation", HFILL
}},
8395 { &hf_dhcp_option_arp_cache_timeout
,
8396 { "ARP Cache Timeout", "dhcp.option.arp_cache_timeout",
8397 FT_UINT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_u_secs_fmt
), 0x0,
8398 "Option 35: ARP Cache Timeout", HFILL
}},
8400 { &hf_dhcp_option_ethernet_encapsulation
,
8401 { "Ethernet Encapsulation", "dhcp.option.ethernet_encapsulation",
8402 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_enabled_disabled
), 0x00,
8403 "Option 36: Ethernet Encapsulation", HFILL
}},
8405 { &hf_dhcp_option_tcp_default_ttl
,
8406 { "TCP Default TTL", "dhcp.option.tcp_default_ttl",
8407 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8408 "Option 37: TCP Default TTL", HFILL
}},
8410 { &hf_dhcp_option_tcp_keepalive_interval
,
8411 { "TCP Keepalive Interval", "dhcp.option.tcp_keepalive_interval",
8412 FT_UINT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_u_secs_fmt
), 0x0,
8413 "Option 38: TCP Keepalive Interval", HFILL
}},
8415 { &hf_dhcp_option_tcp_keepalive_garbage
,
8416 { "TCP Keepalive Garbage", "dhcp.option.tcp_keepalive_garbage",
8417 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_enabled_disabled
), 0x00,
8418 "Option 39: TCP Keepalive Garbage", HFILL
}},
8420 { &hf_dhcp_option_nis_domain
,
8421 { "Network Information Service Domain", "dhcp.option.nis_domain",
8422 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8423 "Option 40: Network Information Service Domain", HFILL
}},
8425 { &hf_dhcp_option_nis_server
,
8426 { "Network Information Service Server", "dhcp.option.nis_server",
8427 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8428 "Option 41: Network Information Service Server", HFILL
}},
8430 { &hf_dhcp_option_ntp_server
,
8431 { "Network Time Protocol Server", "dhcp.option.ntp_server",
8432 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8433 "Option 42: Network Time Protocol Server", HFILL
}},
8435 { &hf_dhcp_option43_suboption
,
8436 { "Option 43 Suboption", "dhcp.option.vendor.suboption",
8437 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8440 { &hf_dhcp_option43_value
,
8441 { "Value", "dhcp.option.vendor.value",
8442 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8443 "Option 43: Suboption value", HFILL
}},
8445 { &hf_dhcp_option43_value_8
,
8446 { "Value", "dhcp.option.vendor.value.uint",
8447 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8448 "Option 43: Suboption 8-bit value", HFILL
}},
8450 { &hf_dhcp_option43_value_32
,
8451 { "Value", "dhcp.option.vendor.value.uint",
8452 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8453 "Option 43: Suboption 32-bit value", HFILL
}},
8455 { &hf_dhcp_option43_value_stringz
,
8456 { "Value", "dhcp.option.vendor.value.string",
8457 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8458 "Option 43: Suboption Z-String value", HFILL
}},
8460 { &hf_dhcp_option43_value_ip_address
,
8461 { "Value", "dhcp.option.vendor.value.address",
8462 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8463 "Option 43: Suboption IP address", HFILL
}},
8466 { &hf_dhcp_option43_pxeclient_suboption
,
8467 { "Option 43 Suboption", "dhcp.option.vendor.pxeclient.suboption",
8468 FT_UINT8
, BASE_DEC
, VALS(option43_pxeclient_suboption_vals
), 0x0,
8469 "Option 43:PXE Client Suboption", HFILL
}},
8471 { &hf_dhcp_option43_pxeclient_padding
,
8472 { "Padding", "dhcp.option.vendor.pxeclient.padding",
8473 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8474 "Option 43:PXE Client 0 Padding", HFILL
}},
8476 { &hf_dhcp_option43_pxeclient_mtftp_ip
,
8477 { "mtftp IP", "dhcp.option.vendor.pxeclient.mtftp_ip",
8478 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8479 "Option 43:PXE Client 1 mtftp IP", HFILL
}},
8481 { &hf_dhcp_option43_pxeclient_mtftp_client_port
,
8482 { "mtftp client port", "dhcp.option.vendor.pxeclient.mtftp_client_port",
8483 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
8484 "Option 43:PXE Client 2 mtftp client port", HFILL
}},
8486 { &hf_dhcp_option43_pxeclient_mtftp_server_port
,
8487 { "mtftp server port", "dhcp.option.vendor.pxeclient.mtftp_server_port",
8488 FT_UINT16
, BASE_DEC
, NULL
, 0x00,
8489 "Option 43:PXE Client 3 mtftp server port", HFILL
}},
8491 { &hf_dhcp_option43_pxeclient_mtftp_timeout
,
8492 { "mtftp timeout", "dhcp.option.vendor.pxeclient.mtftp_timeout",
8493 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8494 "Option 43:PXE Client 4 mtftp timeout", HFILL
}},
8496 { &hf_dhcp_option43_pxeclient_mtftp_delay
,
8497 { "mtftp delay", "dhcp.option.vendor.pxeclient.mtftp_delay",
8498 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8499 "Option 43:PXE Client 5 mtftp delay", HFILL
}},
8501 { &hf_dhcp_option43_pxeclient_discovery_control
,
8502 { "discovery control", "dhcp.option.vendor.pxeclient.discovery_control",
8503 FT_UINT8
, BASE_HEX
, NULL
, 0x0,
8504 "Option 43:PXE Client 6 discovery control", HFILL
}},
8506 { &hf_dhcp_option43_pxeclient_discovery_control_bc
,
8507 { "Disable Broadcast", "dhcp.option.vendor.pxeclient.discovery_control.broadcast",
8508 FT_BOOLEAN
, 8, TFS(&tfs_set_notset
), 0x01,
8511 { &hf_dhcp_option43_pxeclient_discovery_control_mc
,
8512 { "Disable Multicast", "dhcp.option.vendor.pxeclient.discovery_control.multicast",
8513 FT_BOOLEAN
, 8, TFS(&tfs_set_notset
), 0x02,
8516 { &hf_dhcp_option43_pxeclient_discovery_control_serverlist
,
8517 { "Serverlist only", "dhcp.option.vendor.pxeclient.discovery_control.serverlist",
8518 FT_BOOLEAN
, 8, TFS(&tfs_set_notset
), 0x04,
8521 { &hf_dhcp_option43_pxeclient_discovery_control_bstrap
,
8522 { "Bootstrap override", "dhcp.option.vendor.pxeclient.discovery_control.bstrap",
8523 FT_BOOLEAN
, 8, TFS(&tfs_set_notset
), 0x08,
8526 { &hf_dhcp_option43_pxeclient_multicast_address
,
8527 { "multicast address", "dhcp.option.vendor.pxeclient.multicast_address",
8528 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8529 "Option 43:PXE Client 7 multicast address", HFILL
}},
8531 { &hf_dhcp_option43_pxeclient_boot_servers
,
8532 { "boot servers", "dhcp.option.vendor.pxeclient.boot_servers",
8533 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8534 "Option 43:PXE Client 8 boot servers", HFILL
}},
8536 { &hf_dhcp_option43_pxeclient_boot_server_type
,
8537 { "Type", "dhcp.option.vendor.pxeclient.boot_servers.type",
8538 FT_UINT16
, BASE_DEC
, VALS(o43pxeclient_boot_server_types
), 0x0,
8541 { &hf_dhcp_option43_pxeclient_boot_server_count
,
8542 { "IP count", "dhcp.option.vendor.pxeclient.boot_servers.count",
8543 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8546 { &hf_dhcp_option43_pxeclient_boot_server_ip
,
8547 { "IP", "dhcp.option.vendor.pxeclient.boot_servers.ip",
8548 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
8551 { &hf_dhcp_option43_pxeclient_boot_menu
,
8552 { "boot menu", "dhcp.option.vendor.pxeclient.boot_menu",
8553 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8554 "Option 43:PXE Client 9 boot menu", HFILL
}},
8556 { &hf_dhcp_option43_pxeclient_boot_menu_type
,
8557 { "Type", "dhcp.option.vendor.pxeclient.boot_menu.type",
8558 FT_UINT16
, BASE_DEC
, VALS(o43pxeclient_boot_menu_types
), 0x0,
8561 { &hf_dhcp_option43_pxeclient_boot_menu_length
,
8562 { "Length", "dhcp.option.vendor.pxeclient.boot_menu.length",
8563 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8566 { &hf_dhcp_option43_pxeclient_boot_menu_desc
,
8567 { "Description", "dhcp.option.vendor.pxeclient.boot_menu.desc",
8568 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8571 { &hf_dhcp_option43_pxeclient_menu_prompt
,
8572 { "menu prompt", "dhcp.option.vendor.pxeclient.menu_prompt",
8573 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8574 "Option 43:PXE Client 10 menu prompt", HFILL
}},
8576 { &hf_dhcp_option43_pxeclient_menu_prompt_timeout
,
8577 { "Timeout", "dhcp.option.vendor.pxeclient.menu_prompt.timeout",
8578 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8581 { &hf_dhcp_option43_pxeclient_menu_prompt_prompt
,
8582 { "Prompt", "dhcp.option.vendor.pxeclient.menu_prompt.prompt",
8583 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8586 { &hf_dhcp_option43_pxeclient_multicast_address_alloc
,
8587 { "multicast address alloc", "dhcp.option.vendor.pxeclient.multicast_address_alloc",
8588 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8589 "Option 43:PXE Client 11 multicast address alloc", HFILL
}},
8591 { &hf_dhcp_option43_pxeclient_credential_types
,
8592 { "credential types", "dhcp.option.vendor.pxeclient.credential_types",
8593 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8594 "Option 43:PXE Client 12 credential types", HFILL
}},
8596 { &hf_dhcp_option43_pxeclient_boot_item
,
8597 { "boot item", "dhcp.option.vendor.pxeclient.boot_item",
8598 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8599 "Option 43:PXE Client 71 boot item", HFILL
}},
8601 { &hf_dhcp_option43_pxeclient_boot_item_type
,
8602 { "Type", "dhcp.option.vendor.pxeclient.boot_item.type",
8603 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8606 { &hf_dhcp_option43_pxeclient_boot_item_layer
,
8607 { "Layer", "dhcp.option.vendor.pxeclient.boot_item.layer",
8608 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8611 { &hf_dhcp_option43_pxeclient_lcm_server
,
8612 { "LCM Server Name", "dhcp.option.vendor.pxeclient.lcm_server",
8613 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8614 "Option 43:PXE Client 179 LCM Server", HFILL
}},
8616 { &hf_dhcp_option43_pxeclient_lcm_domain
,
8617 { "LCM Domain", "dhcp.option.vendor.pxeclient.lcm_domain",
8618 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8619 "Option 43:PXE Client 180 LCM Domain", HFILL
}},
8621 { &hf_dhcp_option43_pxeclient_lcm_nic_option
,
8622 { "LCM NIC option", "dhcp.option.vendor.pxeclient.lcm_nic_option",
8623 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8624 "Option 43:PXE Client 181 LCM NIC Option", HFILL
}},
8626 { &hf_dhcp_option43_pxeclient_lcm_workgroup
,
8627 { "LCM Workgroup", "dhcp.option.vendor.pxeclient.lcm_workgroup",
8628 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8629 "Option 43:PXE Client 190 LCM Workgroup", HFILL
}},
8631 { &hf_dhcp_option43_pxeclient_discovery
,
8632 { "Discovery", "dhcp.option.vendor.pxeclient.discovery",
8633 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_yes_no
), 0x0,
8634 "Option 43:PXE Client 191 Discovery", HFILL
}},
8636 { &hf_dhcp_option43_pxeclient_configured
,
8637 { "Configured", "dhcp.option.vendor.pxeclient.configured",
8638 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_yes_no
), 0x0,
8639 "Option 43:PXE Client 192 Configured", HFILL
}},
8641 { &hf_dhcp_option43_pxeclient_lcm_version
,
8642 { "LCM Version", "dhcp.option.vendor.pxeclient.lcm_version",
8643 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8644 "Option 43:PXE Client 193 LCM Version", HFILL
}},
8646 { &hf_dhcp_option43_pxeclient_lcm_serial
,
8647 { "LCM Serial Number", "dhcp.option.vendor.pxeclient.lcm_serial",
8648 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8649 "Option 43:PXE Client 194 LCM Serial Number", HFILL
}},
8651 { &hf_dhcp_option43_pxeclient_end
,
8652 { "PXE Client End", "dhcp.option.vendor.pxeclient.end",
8653 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8654 "Option 43:PXE Client 255 End", HFILL
}},
8657 /* AEROHIVE (Extremenetworks) vendor suboptions */
8658 { &hf_dhcp_option43_aerohive_suboption
,
8659 { "Option 43 Suboption", "dhcp.option.vendor.aerohive.suboption",
8660 FT_UINT8
, BASE_DEC
, VALS(option43_aerohive_suboption_vals
), 0x0,
8661 "Option 43:AEROHIVE Suboption", HFILL
}},
8663 { &hf_dhcp_option43_aerohive_unknown
,
8664 { "Unknown", "dhcp.option.vendor.aerohive.unknown",
8665 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8668 { &hf_dhcp_option43_aerohive_xiqhostname
,
8669 { "HM FQDN", "dhcp.option.vendor.aerohive.xiqhostname",
8670 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8671 "Hive Manager NG FQDN", HFILL
}},
8673 { &hf_dhcp_option43_aerohive_xiqipaddress
,
8674 { "HM IP", "dhcp.option.vendor.aerohive.xiqipaddress",
8675 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
8676 "Hive Manager NG IP address", HFILL
}},
8679 { &hf_dhcp_option43_cl_suboption
,
8680 { "Option 43 Suboption", "dhcp.option.vendor.cl.suboption",
8681 FT_UINT8
, BASE_DEC
, VALS(option43_cl_suboption_vals
), 0x0,
8682 "Option 43:CL Suboption", HFILL
}},
8684 { &hf_dhcp_option43_cl_padding
,
8685 { "Padding", "dhcp.option.vendor.cl.padding",
8686 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8687 "Option 43:CL 0 Padding", HFILL
}},
8689 { &hf_dhcp_option43_cl_suboption_request_list
,
8690 { "Suboption Request List", "dhcp.option.vendor.cl.suboption_request_list",
8691 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8692 "Option 43:CL 1 Suboption Request List", HFILL
}},
8694 { &hf_dhcp_option43_cl_device_type
,
8695 { "Device Type", "dhcp.option.vendor.cl.device_type",
8696 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8697 "Option 43:CL 2 Device Type", HFILL
}},
8699 { &hf_dhcp_option43_cl_esafe_type
,
8700 { "eSAFE Types", "dhcp.option.vendor.cl.esafe_type",
8701 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8702 "Option 43:CL 3 eSAFE Types", HFILL
}},
8704 { &hf_dhcp_option43_cl_serial_number
,
8705 { "Serial Number", "dhcp.option.vendor.cl.serial_number",
8706 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8707 "Option 43:CL 4 Serial Number", HFILL
}},
8709 { &hf_dhcp_option43_cl_hardware_version
,
8710 { "Hardware Version", "dhcp.option.vendor.cl.hardware_version",
8711 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8712 "Option 43:CL 5 Hardware Version", HFILL
}},
8714 { &hf_dhcp_option43_cl_software_version
,
8715 { "Software Version", "dhcp.option.vendor.cl.software_version",
8716 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8717 "Option 43:CL 6 Software Version", HFILL
}},
8719 { &hf_dhcp_option43_cl_boot_rom_version
,
8720 { "Boot ROM version", "dhcp.option.vendor.cl.boot_rom_version",
8721 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8722 "Option 43:CL 7 Boot ROM version", HFILL
}},
8724 { &hf_dhcp_option43_cl_oui_string
,
8725 { "Organizationally Unique Identifier", "dhcp.option.vendor.cl.oui_string",
8726 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8727 "Option 43:CL 8 Organizationally Unique Identifier", HFILL
}},
8729 { &hf_dhcp_option43_cl_oui_bytes
,
8730 { "Organizationally Unique Identifier", "dhcp.option.vendor.cl.oui_bytes",
8731 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8732 "Option 43:CL 8 Organizationally Unique Identifier", HFILL
}},
8734 { &hf_dhcp_option43_cl_model_number
,
8735 { "Model Number", "dhcp.option.vendor.cl.model_number",
8736 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8737 "Option 43:CL 9 Model Number", HFILL
}},
8739 { &hf_dhcp_option43_cl_vendor_name10
,
8740 { "Vendor Name", "dhcp.option.vendor.cl.vendor_name10",
8741 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8742 "Option 43:CL 10 Vendor Name", HFILL
}},
8744 { &hf_dhcp_option43_cl_address_realm
,
8745 { "Address Realm", "dhcp.option.vendor.cl.address_realm",
8746 FT_UINT8
, BASE_DEC
, VALS(cablehome_subopt11_vals
), 0x0,
8747 "Option 43:CL 11 Address Realm", HFILL
}},
8749 { &hf_dhcp_option43_cl_cm_ps_system_desc
,
8750 { "CM/PS System Description", "dhcp.option.vendor.cl.cm_ps_system_desc",
8751 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8752 "Option 43:CL 12 CM/PS System Description", HFILL
}},
8754 { &hf_dhcp_option43_cl_cm_ps_firmware_revision
,
8755 { "CM/PS Firmware Revision", "dhcp.option.vendor.cl.cm_ps_firmware_revision",
8756 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8757 "Option 43:CL 13 CM/PS Firmware Revision", HFILL
}},
8759 { &hf_dhcp_option43_cl_firewall_policy_file_version
,
8760 { "Firewall Policy File Version", "dhcp.option.vendor.cl.firewall_policy_file_version",
8761 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8762 "Option 43:CL 14 Firewall Policy File Version", HFILL
}},
8764 { &hf_dhcp_option43_cl_esafe_config_file_devices
,
8765 { "eSafe Config File Devices", "dhcp.option.vendor.cl.esafe_config_file_devices",
8766 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8767 "Option 43:CL 15 eSafe Config File Devices", HFILL
}},
8769 { &hf_dhcp_option43_cl_video_security_tape
,
8770 { "Video Security Type", "dhcp.option.vendor.cl.video_security_tape",
8771 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8772 "Option 43:CL 18 Video Security Type", HFILL
}},
8774 { &hf_dhcp_option43_cl_mta_mac_address
,
8775 { "MTA MAC Address", "dhcp.option.vendor.cl.mta_mac_address",
8776 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
8777 "Option 43:CL 31 MTA MAC Address", HFILL
}},
8779 { &hf_dhcp_option43_cl_correlation_ID
,
8780 { "Correlation ID", "dhcp.option.vendor.cl.correlation_ID",
8781 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
8782 "Option 43: CL 32 Correlation ID", HFILL
}},
8784 { &hf_dhcp_option43_cl_vendor_name51
,
8785 { "Vendor Name", "dhcp.option.vendor.cl.vendor_name51",
8786 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8787 "Option 43:CL 51 Vendor Name", HFILL
}},
8789 { &hf_dhcp_option43_cl_cablecard_capability
,
8790 { "CableCARD Capability", "dhcp.option.vendor.cl.cablecard_capability",
8791 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8792 "Option 43:CL 52 CableCARD Capability", HFILL
}},
8794 { &hf_dhcp_option43_cl_device_id_ca
,
8795 { "Device Identification (CA)", "dhcp.option.vendor.cl.device_id_ca",
8796 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8797 "Option 43:CL 53 Device Identification (CA)", HFILL
}},
8799 { &hf_dhcp_option43_cl_device_id_x509
,
8800 { "Device Identification (X.509)", "dhcp.option.vendor.cl.device_id_x509",
8801 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
8802 "Option 43:CL 54 Device Identification (X.509)", HFILL
}},
8804 { &hf_dhcp_option43_cl_end
,
8805 { "CL End", "dhcp.option.vendor.cl.end",
8806 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8807 "Option 43:CL 255 End", HFILL
}},
8810 { &hf_dhcp_option43_alcatel_suboption
,
8811 { "Option 43 Suboption", "dhcp.option.vendor.alu.suboption",
8812 FT_UINT8
, BASE_DEC
, VALS(option43_alcatel_suboption_vals
), 0x0,
8813 "Option 43:Alcatel Suboption", HFILL
}},
8815 { &hf_dhcp_option43_alcatel_padding
,
8816 { "Padding", "dhcp.option.vendor.alu.padding",
8817 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8818 "Option 43:Alcatel 0 Padding", HFILL
}},
8820 { &hf_dhcp_option43_alcatel_vlan_id
,
8821 { "Voice VLAN ID", "dhcp.option.vendor.alu.vid",
8822 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8823 "Option 43:Alcatel 58 Voice VLAN ID", HFILL
}},
8825 { &hf_dhcp_option43_alcatel_tftp1
,
8826 { "Spatial Redundancy TFTP1", "dhcp.option.vendor.alu.tftp1",
8827 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
8828 "Option 43:Alcatel 64 Spatial Redundancy TFTP1", HFILL
}},
8830 { &hf_dhcp_option43_alcatel_tftp2
,
8831 { "Spatial Redundancy TFTP2", "dhcp.option.vendor.alu.tftp2",
8832 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
8833 "Option 43:Alcatel 65 Spatial Redundancy TFTP2", HFILL
}},
8835 { &hf_dhcp_option43_alcatel_app_type
,
8836 { "Application Type", "dhcp.option.vendor.alu.app_type",
8837 FT_UINT8
, BASE_DEC
, VALS(option43_alcatel_app_type_vals
), 0x0,
8838 "Option 43:Alcatel 66 Application Type", HFILL
}},
8840 { &hf_dhcp_option43_alcatel_sip_url
,
8841 { "SIP URL", "dhcp.option.vendor.alu.sip_url",
8842 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8843 "Option 43:Alcatel 67 SIP URL", HFILL
}},
8845 { &hf_dhcp_option43_alcatel_end
,
8846 { "Alcatel End", "dhcp.option.vendor.alu.end",
8847 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8848 "Option 43:Alcatel 255 End", HFILL
}},
8850 { &hf_dhcp_option43_arubaap_controllerip
,
8851 { "Aruba Controller IP", "dhcp.option.vendor.arubaap.controllerip",
8852 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8853 "Address IP of Aruba controller", HFILL
}},
8855 { &hf_dhcp_option43_arubaiap
,
8856 { "Aruba Instant AP", "dhcp.option.vendor.arubaiap",
8857 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8858 "nameorg,amp-ip-address,password", HFILL
}},
8860 { &hf_dhcp_option43_arubaiap_nameorg
,
8861 { "Name Organisation", "dhcp.option.vendor.arubaiap.name_org",
8862 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8865 { &hf_dhcp_option43_arubaiap_ampip
,
8866 { "AMP IP Address", "dhcp.option.vendor.arubaiap.amp_ip",
8867 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8868 "Address IP of Airwave server (AMP)", HFILL
}},
8870 { &hf_dhcp_option43_arubaiap_password
,
8871 { "Password", "dhcp.option.vendor.arubaiap.password",
8872 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8873 "Password for Instant AP Airwave server (AMP)", HFILL
}},
8876 { &hf_dhcp_option43_bsdp_suboption
,
8877 { "Option 43 Suboption", "dhcp.option.vendor.bsdp.suboption",
8878 FT_UINT8
, BASE_DEC
, VALS(option43_cl_suboption_vals
), 0x0,
8879 "Option 43:BSDP Suboption", HFILL
}},
8881 { &hf_dhcp_option43_bsdp_message_type
,
8882 { "Message Type", "dhcp.option.vendor.bsdp.message_type",
8883 FT_UINT8
, BASE_DEC
, VALS(o43_bsdp_message_type_vals
), 0x0,
8886 { &hf_dhcp_option43_bsdp_version
,
8887 { "Version", "dhcp.option.vendor.bsdp.version",
8888 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8891 { &hf_dhcp_option43_bsdp_server_identifier
,
8892 { "Server Identifier", "dhcp.option.vendor.bsdp.server_identifier",
8893 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
8896 { &hf_dhcp_option43_bsdp_server_priority
,
8897 { "Server Priority", "dhcp.option.vendor.bsdp.server_priority",
8898 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8901 { &hf_dhcp_option43_bsdp_reply_port
,
8902 { "Reply Port", "dhcp.option.vendor.bsdp.reply_port",
8903 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8906 { &hf_dhcp_option43_bsdp_boot_image_list_path
,
8907 { "Boot Image List Path", "dhcp.option.vendor.bsdp.boot_image_list_path",
8908 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8911 { &hf_dhcp_option43_bsdp_boot_image_index
,
8912 { "Boot Image Index", "dhcp.option.vendor.bsdp.boot_image.index",
8913 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8916 { &hf_dhcp_option43_bsdp_default_boot_image_id
,
8917 { "Default Boot Image ID", "dhcp.option.vendor.bsdp.default_boot_image_id",
8918 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8921 { &hf_dhcp_option43_bsdp_selected_boot_image_id
,
8922 { "Selected Boot Image ID", "dhcp.option.vendor.bsdp.selected_boot_image_id",
8923 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
8926 { &hf_dhcp_option43_bsdp_boot_image_list
,
8927 { "Boot Image List", "dhcp.option.vendor.bsdp.boot_image_list",
8928 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8931 { &hf_dhcp_option43_bsdp_image_desc
,
8932 { "Boot Image Description", "dhcp.option.vendor.bsdp.boot_image.desc",
8933 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8936 { &hf_dhcp_option43_bsdp_boot_image_name_len
,
8937 { "Boot Image Name Length", "dhcp.option.vendor.bsdp.boot_image.name_len",
8938 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
8941 { &hf_dhcp_option43_bsdp_boot_image_name
,
8942 { "Boot Image Name", "dhcp.option.vendor.bsdp.boot_image.name",
8943 FT_STRING
, BASE_NONE
, NULL
, 0x0,
8946 { &hf_dhcp_option43_bsdp_netboot_firmware
,
8947 { "NetBoot 1.0 Firmware", "dhcp.option.vendor.bsdp.netboot_firmware",
8948 FT_NONE
, BASE_NONE
, NULL
, 0x0,
8951 { &hf_dhcp_option43_bsdp_attributes_filter_list
,
8952 { "Boot Image Attributes Filter List", "dhcp.option.vendor.bsdp.attributes_filter_list",
8953 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
8956 { &hf_dhcp_option43_bsdp_boot_image_attribute
,
8957 { "Boot Image Attribute", "dhcp.option.vendor.bsdp.boot_image.attribute",
8958 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
8961 { &hf_dhcp_option43_bsdp_boot_image_attribute_install
,
8962 { "Install", "dhcp.option.vendor.bsdp.boot_image.attribute.install",
8963 FT_UINT16
, BASE_HEX
, VALS(o43_bsdp_boot_image_install_vals
), 0x8000,
8964 "Boot Image Attribute Install", HFILL
}},
8966 { &hf_dhcp_option43_bsdp_boot_image_attribute_kind
,
8967 { "Kind", "dhcp.option.vendor.bsdp.boot_image.attribute.kind",
8968 FT_UINT16
, BASE_HEX
, VALS(o43_bsdp_boot_image_kind_vals
), 0x7f00,
8969 "Boot Image Attribute Kind", HFILL
}},
8971 { &hf_dhcp_option43_bsdp_boot_image_attribute_reserved
,
8972 { "Reserved", "dhcp.option.vendor.bsdp.boot_image.attribute.reserved",
8973 FT_UINT16
, BASE_HEX
, NULL
, 0x00ff,
8974 "Boot Image Attribute Reserved", HFILL
}},
8976 { &hf_dhcp_option43_bsdp_message_size
,
8977 { "Message Size", "dhcp.option.vendor.bsdp.message_size",
8978 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
8982 { &hf_dhcp_option_netbios_over_tcpip_name_server
,
8983 { "NetBIOS over TCP/IP Name Server", "dhcp.option.netbios_over_tcpip_name_server",
8984 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8985 "Option 44: NetBIOS over TCP/IP Name Server", HFILL
}},
8987 { &hf_dhcp_option_netbios_over_tcpip_dd_name_server
,
8988 { "NetBIOS over TCP/IP Datagram Distribution Name Server", "dhcp.option.netbios_over_tcpip_dd_name_server",
8989 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
8990 "Option 45: NetBIOS over TCP/IP Datagram Distribution Name Server", HFILL
}},
8992 { &hf_dhcp_option_netbios_over_tcpip_node_type
,
8993 { "NetBIOS over TCP/IP Node Type", "dhcp.option.netbios_over_tcpip_node_type",
8994 FT_UINT8
, BASE_DEC
, VALS(dhcp_nbnt_vals
), 0x0,
8995 "Option 46: NetBIOS over TCP/IP Node Type", HFILL
}},
8997 { &hf_dhcp_option_netbios_over_tcpip_scope
,
8998 { "NetBIOS over TCP/IP Scope", "dhcp.option.netbios_over_tcpip_scope",
8999 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9000 "Option 47: NetBIOS over TCP/IP Scope", HFILL
}},
9002 { &hf_dhcp_option_xwindows_system_font_server
,
9003 { "X Window System Font Server", "dhcp.option.xwindows_system_font_server",
9004 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9005 "Option 48: X Window System Font Server", HFILL
}},
9007 { &hf_dhcp_option_xwindows_system_display_manager
,
9008 { "X Window System Display Manager", "dhcp.option.xwindows_system_display_manager",
9009 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9010 "Option 49: X Window System Display Manager", HFILL
}},
9012 { &hf_dhcp_option_requested_ip_address
,
9013 { "Requested IP Address", "dhcp.option.requested_ip_address",
9014 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9015 "Option 50: Requested IP Address", HFILL
}},
9017 { &hf_dhcp_option_ip_address_lease_time
,
9018 { "IP Address Lease Time", "dhcp.option.ip_address_lease_time",
9019 FT_UINT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_u_secs_fmt
), 0x0,
9020 "Option 51: IP Address Lease Time", HFILL
}},
9022 { &hf_dhcp_option_option_overload
,
9023 { "Option Overload", "dhcp.option.option_overload",
9024 FT_UINT8
, BASE_DEC
, VALS(opt_overload_vals
), 0x0,
9025 "Option 52: Option Overload", HFILL
}},
9027 { &hf_dhcp_option_dhcp
,
9028 { "DHCP", "dhcp.option.dhcp",
9029 FT_UINT8
, BASE_DEC
, VALS(opt53_text
), 0x0,
9030 "Option 53: DHCP option", HFILL
}},
9032 { &hf_dhcp_option_dhcp_server_id
,
9033 { "DHCP Server Identifier", "dhcp.option.dhcp_server_id",
9034 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9035 "Option 54: DHCP Server Identifier", HFILL
}},
9037 { &hf_dhcp_option_parameter_request_list_item
,
9038 { "Parameter Request List Item", "dhcp.option.request_list_item",
9039 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9040 "Option 55: Parameter Request List Item", HFILL
}},
9042 { &hf_dhcp_option_message
,
9043 { "Message", "dhcp.option.message",
9044 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9045 "Option 56: Option message", HFILL
}},
9047 { &hf_dhcp_option_dhcp_max_message_size
,
9048 { "Maximum DHCP Message Size", "dhcp.option.dhcp_max_message_size",
9049 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9050 "Option 57: Maximum DHCP Message Size", HFILL
}},
9052 { &hf_dhcp_option_renewal_time_value
,
9053 { "Renewal Time Value", "dhcp.option.renewal_time_value",
9054 FT_UINT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_u_secs_fmt
), 0x0,
9055 "Option 58: Renewal Time Value", HFILL
}},
9057 { &hf_dhcp_option_rebinding_time_value
,
9058 { "Rebinding Time Value", "dhcp.option.rebinding_time_value",
9059 FT_UINT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_u_secs_fmt
), 0x0,
9060 "Option 59: Rebinding Time Value", HFILL
}},
9062 { &hf_dhcp_option_vendor_class_id
,
9063 { "Vendor class identifier", "dhcp.option.vendor_class_id",
9064 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9065 "Option 60: Vendor class identifier", HFILL
}},
9067 { &hf_dhcp_option_vendor_class_data
,
9068 { "vendor-class-data", "dhcp.option.vendor_class_data",
9069 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9070 "Option 60: Vendor class data", HFILL
}},
9072 { &hf_dhcp_option_novell_netware_ip_domain
,
9073 { "Novell/Netware IP domain", "dhcp.option.novell_netware_ip_domain",
9074 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9075 "Option 62: Novell/Netware IP domain", HFILL
}},
9077 { &hf_dhcp_option63_suboption
,
9078 { "Option 63 Suboption", "dhcp.option.novell_options.suboption",
9079 FT_UINT8
, BASE_DEC
, VALS(option63_suboption_vals
), 0x0,
9080 "Option 63: Suboption", HFILL
}},
9082 { &hf_dhcp_option63_value
,
9083 { "Value", "dhcp.option.novell_options.value",
9084 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9085 "Option 63: Suboption value", HFILL
}},
9087 { &hf_dhcp_option63_value_8
,
9088 { "Value", "dhcp.option.novell_options.value.uint",
9089 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9090 "Option 63: Suboption 8-bit value", HFILL
}},
9092 { &hf_dhcp_option63_value_ip_address
,
9093 { "Value", "dhcp.option.novell_options.value.address",
9094 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9095 "Option 63: Suboption IP address", HFILL
}},
9097 { &hf_dhcp_option63_value_boolean
,
9098 { "Value", "dhcp.option.novell_options.value.bool",
9099 FT_BOOLEAN
, BASE_NONE
, NULL
, 0x00,
9100 "Option 63: Suboption Boolean value", HFILL
}},
9102 { &hf_dhcp_option63_broadcast
,
9103 { "Broadcast for nearest Netware server", "dhcp.option.novell_options.broadcast",
9104 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_yes_no
), 0x00,
9105 "Option 63:5 Broadcast for nearest Netware server", HFILL
}},
9107 { &hf_dhcp_option63_preferred_dss_server
,
9108 { "Preferred DSS server", "dhcp.option.novell_options.preferred_dss_server",
9109 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9110 "Option 63:6 Preferred DSS server", HFILL
}},
9112 { &hf_dhcp_option63_nearest_nwip_server
,
9113 { "Nearest NWIP server", "dhcp.option.novell_options.nearest_nwip_server",
9114 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9115 "Option 63:7 Nearest NWIP server", HFILL
}},
9117 { &hf_dhcp_option63_autoretries
,
9118 { "Autoretries", "dhcp.option.novell_options.autoretries",
9119 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9120 "Option 63:8 Autoretries", HFILL
}},
9122 { &hf_dhcp_option63_autoretry_delay
,
9123 { "Autoretry delay, sec",
9124 "dhcp.option.novell_options.autoretry_delay", FT_UINT8
, BASE_DEC
, NULL
,
9125 0x0, "Option 63:9 Autoretry delay, sec", HFILL
}},
9127 { &hf_dhcp_option63_support_netware_v1_1
,
9128 { "Broadcast for nearest Netware server", "dhcp.option.novell_options.support_netware_v1_1",
9129 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_yes_no
), 0x00,
9130 "Option 63:10 Broadcast for nearest Netware server", HFILL
}},
9132 { &hf_dhcp_option63_primary_dss
,
9133 { "Primary DSS", "dhcp.option.novell_options.primary_dss",
9134 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9135 "Option 63:11 Primary DSS", HFILL
}},
9138 { &hf_dhcp_option_nis_plus_domain
,
9139 { "Network Information Service+ Domain", "dhcp.option.nis_plus_domain",
9140 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9141 "Option 64: Network Information Service+ Domain", HFILL
}},
9143 { &hf_dhcp_option_nis_plus_server
,
9144 { "Network Information Service+ Server", "dhcp.option.nis_plus_server",
9145 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9146 "Option 65: Network Information Service+ Server", HFILL
}},
9148 { &hf_dhcp_option_tftp_server_name
,
9149 { "TFTP Server Name", "dhcp.option.tftp_server_name",
9150 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9151 "Option 66: TFTP Server Name", HFILL
}},
9153 { &hf_dhcp_option_bootfile_name
,
9154 { "Bootfile name", "dhcp.option.bootfile_name",
9155 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9156 "Option 67: Bootfile name", HFILL
}},
9158 { &hf_dhcp_option_mobile_ip_home_agent
,
9159 { "Mobile IP Home Agent", "dhcp.option.mobile_ip_home_agent",
9160 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9161 "Option 68: Mobile IP Home Agent", HFILL
}},
9163 { &hf_dhcp_option_smtp_server
,
9164 { "SMTP Server", "dhcp.option.smtp_server",
9165 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9166 "Option 69: SMTP Server", HFILL
}},
9168 { &hf_dhcp_option_pop3_server
,
9169 { "POP3 Server", "dhcp.option.pop3_server",
9170 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9171 "Option 70: POP3 Server", HFILL
}},
9173 { &hf_dhcp_option_nntp_server
,
9174 { "NNTP Server", "dhcp.option.nntp_server",
9175 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9176 "Option 71: NNTP Server", HFILL
}},
9178 { &hf_dhcp_option_default_www_server
,
9179 { "Default WWW Server", "dhcp.option.default_www_server",
9180 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9181 "Option 72: Default WWW Server", HFILL
}},
9183 { &hf_dhcp_option_default_finger_server
,
9184 { "Default Finger Server", "dhcp.option.default_finger_server",
9185 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9186 "Option 73: Default Finger Server", HFILL
}},
9188 { &hf_dhcp_option_default_irc_server
,
9189 { "Default IRC Server", "dhcp.option.default_irc_server",
9190 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9191 "Option 74: Default IRC Server", HFILL
}},
9193 { &hf_dhcp_option_streettalk_server
,
9194 { "StreetTalk Server", "dhcp.option.streettalk_server",
9195 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9196 "Option 75: StreetTalk Server", HFILL
}},
9198 { &hf_dhcp_option_streettalk_da_server
,
9199 { "StreetTalk Directory Assistance Server", "dhcp.option.streettalk_da_server",
9200 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9201 "Option 76: StreetTalk Directory Assistance Server", HFILL
}},
9203 { &hf_dhcp_option77_user_class
,
9204 { "Instance of User Class", "dhcp.option.user_class",
9205 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9208 { &hf_dhcp_option77_user_class_length
,
9209 { "User Class Length", "dhcp.option.user_class.length",
9210 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9211 "Length of User Class Instance", HFILL
}},
9213 { &hf_dhcp_option77_user_class_data
,
9214 { "User Class Data", "dhcp.option.user_class.data",
9215 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9216 "Data of User Class Instance", HFILL
}},
9218 { &hf_dhcp_option77_user_class_text
,
9219 { "User Class Data (Text)", "dhcp.option.user_class.text",
9220 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9221 "Text of User Class Instance", HFILL
}},
9223 { &hf_dhcp_option77_user_class_binary_data_length
,
9224 { "User Class Binary Data Length", "dhcp.option.user_class_binary_data_length",
9225 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9226 "Length of User Class Binary Data (Microsoft)", HFILL
}},
9228 { &hf_dhcp_option77_user_class_binary_data
,
9229 { "User Class Binary Data", "dhcp.option.user_class_binary_data",
9230 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9231 "User Class Binary Data (Microsoft)", HFILL
}},
9233 { &hf_dhcp_option77_user_class_padding
,
9234 { "User Class padding", "dhcp.option.user_class_padding",
9235 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9236 "User Class padding (Microsoft)", HFILL
}},
9238 { &hf_dhcp_option77_user_class_name_length
,
9239 { "User Class Name Length", "dhcp.option.user_class_name_length",
9240 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9241 "Length of User Class Name (Microsoft)", HFILL
}},
9243 { &hf_dhcp_option77_user_class_name
,
9244 { "User Class Name", "dhcp.option.user_class_name",
9245 FT_STRINGZPAD
, BASE_NONE
, NULL
, 0x0,
9246 "User Class Name (Microsoft)", HFILL
}},
9248 { &hf_dhcp_option77_user_class_description_length
,
9249 { "User Class Description Length", "dhcp.option.user_class_description_length",
9250 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9251 "Length of User Class Description (Microsoft)", HFILL
}},
9253 { &hf_dhcp_option77_user_class_description
,
9254 { "User Class Description", "dhcp.option.user_class_description",
9255 FT_STRINGZPAD
, BASE_NONE
, NULL
, 0x0,
9256 "User Class Description (Microsoft)", HFILL
}},
9258 { &hf_dhcp_option_slp_directory_agent_value
,
9259 { "Value", "dhcp.option.slp_directory_agent.value",
9260 FT_UINT8
, BASE_DEC
, VALS(slpda_vals
), 0x0,
9261 "Option 78: SLPDA Value", HFILL
}},
9263 { &hf_dhcp_option_slp_directory_agent_slpda_address
,
9264 { "IP Address", "dhcp.option.slp_directory_agent.slpda_address",
9265 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9266 "Option 78: SLPDA Address", HFILL
}},
9268 { &hf_dhcp_option_slp_service_scope_value
,
9269 { "Value", "dhcp.option.slp_service_scope.value",
9270 FT_UINT8
, BASE_DEC
, VALS(slp_scope_vals
), 0x0,
9271 "Option 79: SLP Service Scope Value", HFILL
}},
9273 { &hf_dhcp_option_slp_service_scope_string
,
9274 { "SLP Service Scope", "dhcp.option.slp_service_scope.string",
9275 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9276 "Option 79: SLP Service Scope", HFILL
}},
9279 { &hf_dhcp_option82_suboption
,
9280 { "Option 82 Suboption", "dhcp.option.agent_information_option.suboption",
9281 FT_UINT8
, BASE_DEC
, VALS(option82_suboption_vals
), 0x0,
9282 "Option 82: Suboption", HFILL
}},
9284 { &hf_dhcp_option82_value
,
9285 { "Value", "dhcp.option.agent_information_option.value",
9286 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9287 "Option 82: Suboption value", HFILL
}},
9289 { &hf_dhcp_option82_value_8
,
9290 { "Value", "dhcp.option.agent_information_option.value.uint",
9291 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9292 "Option 82: Suboption 8-bit value", HFILL
}},
9294 { &hf_dhcp_option82_value_16
,
9295 { "Value", "dhcp.option.agent_information_option.value.uint",
9296 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9297 "Option 162: Suboption 16-bit value", HFILL
}},
9299 { &hf_dhcp_option82_value_32
,
9300 { "Value", "dhcp.option.agent_information_option.value.uint",
9301 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
9302 "Option 82: Suboption 32-bit value", HFILL
}},
9304 { &hf_dhcp_option82_value_ip_address
,
9305 { "Value", "dhcp.option.agent_information_option.value.address",
9306 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9307 "Option 82: Suboption IP address", HFILL
}},
9309 { &hf_dhcp_option82_value_stringz
,
9310 { "Value", "dhcp.option.agent_information_option.value.string",
9311 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9312 "Option 82: Suboption Z-String value", HFILL
}},
9314 { &hf_dhcp_option82_padding
,
9315 { "Padding", "dhcp.option.agent_information_option.padding",
9316 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9317 "Option 82:0 Padding", HFILL
}},
9319 { &hf_dhcp_option82_agent_circuit_id
,
9320 { "Agent Circuit ID", "dhcp.option.agent_information_option.agent_circuit_id",
9321 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9322 "Option 82:1 Agent Circuit ID", HFILL
}},
9324 { &hf_dhcp_option82_agent_remote_id
,
9325 { "Agent Remote ID", "dhcp.option.agent_information_option.agent_remote_id",
9326 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9327 "Option 82:2 Agent Remote ID", HFILL
}},
9329 { &hf_dhcp_option82_reserved
,
9330 { "Reserved", "dhcp.option.agent_information_option.reserved",
9331 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9332 "Option 82:3 Reserved", HFILL
}},
9334 { &hf_dhcp_option82_docsis_device_class
,
9335 { "DOCSIS Device Class", "dhcp.option.agent_information_option.docsis_device_class",
9336 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9337 "Option 82:4 DOCSIS Device Class", HFILL
}},
9339 { &hf_dhcp_option82_link_selection
,
9340 { "Link selection", "dhcp.option.agent_information_option.link_selection",
9341 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9342 "Option 82:5 Link selection", HFILL
}},
9344 { &hf_dhcp_option82_subscriber_id
,
9345 { "Subscriber ID", "dhcp.option.agent_information_option.subscriber_id",
9346 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9347 "Option 82:6 Subscriber ID", HFILL
}},
9349 { &hf_dhcp_option82_radius_attributes
,
9350 { "RADIUS Attributes", "dhcp.option.agent_information_option.radius_attributes",
9351 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9352 "Option 82:7 RADIUS Attributes", HFILL
}},
9354 { &hf_dhcp_option82_authentication
,
9355 { "Authentication", "dhcp.option.agent_information_option.authentication",
9356 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9357 "Option 82:8 Authentication", HFILL
}},
9359 { &hf_dhcp_option82_vi
,
9360 { "Vendor-Specific Information", "dhcp.option.agent_information_option.vi",
9361 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9362 "Option 82:9 Vendor-Specific Information", HFILL
}},
9364 { &hf_dhcp_option82_vi_enterprise
,
9365 { "Enterprise", "dhcp.option.agent_information_option.vi.enterprise",
9366 FT_UINT32
, BASE_ENTERPRISES
, STRINGS_ENTERPRISES
, 0x0,
9367 "Option 82:9 VI Enterprise", HFILL
}},
9369 { &hf_dhcp_option82_vi_data_length
,
9370 { "Data Length", "dhcp.option.agent_information_option.vi.data_length",
9371 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9372 "Option 82:9 VI Data Length", HFILL
}},
9374 { &hf_dhcp_option82_vi_cl_option
,
9375 { "Option", "dhcp.option.agent_information_option.vi.cl.option",
9376 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9377 "Option 82:9 VI CL Option", HFILL
}},
9379 { &hf_dhcp_option82_vi_cl_option_length
,
9380 { "Option Length", "dhcp.option.agent_information_option.vi.cl.option_length",
9381 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9382 "Option 82:9 VI CL Option Length", HFILL
}},
9384 { &hf_dhcp_option82_vi_cl_tag
,
9385 { "Tag", "dhcp.option.agent_information_option.vi.cl.tag",
9386 FT_UINT8
, BASE_DEC
, VALS(option82_cl_tag_vals
), 0x0,
9387 "Option 82:9 VI CL Tag", HFILL
}},
9389 { &hf_dhcp_option82_vi_cl_tag_length
,
9390 { "Tag Length", "dhcp.option.agent_information_option.vi.cl.tag_length",
9391 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9392 "Option 82:9 VI CL Tag Length", HFILL
}},
9394 { &hf_dhcp_option82_vi_cl_docsis_version
,
9395 { "DOCSIS Version Number", "dhcp.option.agent_information_option.vi.cl.docsis_version",
9396 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
9397 "Option 82:9 VI CL DOCSIS Version Number", HFILL
}},
9399 { &hf_dhcp_option82_vi_cl_dpoe_system_version
,
9400 { "DPoE System Version Number", "dhcp.option.agent_information_option.vi.cl.dpoe_system_version",
9401 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
9402 "Option 82:9 VI CL DPoE System Version Number", HFILL
}},
9404 { &hf_dhcp_option82_vi_cl_dpoe_system_pbb_service
,
9405 { "DPoE System PBB Service", "dhcp.option.agent_information_option.vi.cl.dpoe_system_pbb_service",
9406 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9407 "Option 82:9 VI CL DPoE System PBB Service", HFILL
}},
9409 { &hf_dhcp_option82_vi_cl_service_class_name
,
9410 { "Service Class Name", "dhcp.option.agent_information_option.vi.cl.service_class_name",
9411 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9412 "Option 82:9 VI CL Service Class Name", HFILL
}},
9414 { &hf_dhcp_option82_vi_cl_mso_defined_text
,
9415 { "MSO Defined Text", "dhcp.option.agent_information_option.vi.cl.mso_defined_text",
9416 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9417 "Option 82:9 VI CL MSO Defined Text", HFILL
}},
9419 { &hf_dhcp_option82_vi_cl_secure_file_transfer_uri
,
9420 { "Secure File Transfer URI", "dhcp.option.agent_information_option.vi.cl.secure_file_transfer_uri",
9421 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9422 "Option 82:9 VI CL Secure File Transfer URI", HFILL
}},
9424 { &hf_dhcp_option82_flags
,
9425 { "Flags", "dhcp.option.agent_information_option.flags",
9426 FT_UINT8
, BASE_HEX
, NULL
, 0x0,
9427 "Option 82:10 Flags", HFILL
}},
9429 { &hf_dhcp_option82_server_id_override
,
9430 { "Server ID Override", "dhcp.option.agent_information_option.server_id_override",
9431 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9432 "Option 82:11 Server ID Override", HFILL
}},
9434 { &hf_dhcp_option82_relay_agent_id
,
9435 { "Relay Agent Identifier", "dhcp.option.agent_information_option.relay_agent_id",
9436 FT_BYTES
, BASE_NONE
, NULL
, 0x00,
9437 "Option 82:12 Relay Agent Identifier", HFILL
}},
9439 { &hf_dhcp_option82_option_ani_att
,
9440 { "Access Technology Type", "dhcp.option.agent_information_option.ani_att",
9441 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
9442 "Option 82:13 Access Technology Type", HFILL
}},
9444 { &hf_dhcp_option82_option_ani_att_res
,
9445 { "Access Technology Type", "dhcp.option.agent_information_option.ani_att.res",
9446 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
9447 "Option 82:13 Access Technology Type Reserved", HFILL
}},
9449 { &hf_dhcp_option82_option_ani_att_att
,
9450 { "Access Technology Type", "dhcp.option.agent_information_option.ani_att.att",
9451 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
9452 "Option 82:13 Access Technology Type Value", HFILL
}},
9454 { &hf_dhcp_option82_option_ani_network_name
,
9455 { "Access Network Name", "dhcp.option.agent_information_option.ani_network_name",
9456 FT_STRING
, BASE_NONE
, NULL
, 0x00,
9457 "Option 82:14 Access Network Name", HFILL
}},
9459 { &hf_dhcp_option82_option_ani_ap_name
,
9460 { "Access Point Name", "dhcp.option.agent_information_option.ani_ap_name",
9461 FT_STRING
, BASE_NONE
, NULL
, 0x00,
9462 "Option 82:15 Access Point Name", HFILL
}},
9464 { &hf_dhcp_option82_option_ani_ap_bssid
,
9465 { "Access Point BSSID", "dhcp.option.agent_information_option.ani_ap_bssid",
9466 FT_ETHER
, BASE_NONE
, NULL
, 0x0,
9467 "Option 82:16 Access Point BSSID", HFILL
}},
9469 { &hf_dhcp_option82_option_ani_operator_id
,
9470 { "Access Network Operator ID", "dhcp.option.agent_information_option.ani_operator_id",
9471 FT_BYTES
, BASE_NONE
, NULL
, 0x00,
9472 "Option 82:17 Access Network Operator ID", HFILL
}},
9474 { &hf_dhcp_option82_option_ani_operator_realm
,
9475 { "Access Network Operator Realm", "dhcp.option.agent_information_option.ani_operator_realm",
9476 FT_STRING
, BASE_NONE
, NULL
, 0x00,
9477 "Option 82:18 Access Network Operator Realm", HFILL
}},
9479 { &hf_dhcp_option82_option_source_port
,
9480 { "Source Port", "dhcp.option.agent_information_option.source_port",
9481 FT_NONE
, BASE_NONE
, NULL
, 0x00,
9482 "Option 82:19 Source Port", HFILL
}},
9484 { &hf_dhcp_option82_link_selection_cisco
,
9485 { "Link selection (Cisco proprietary)", "dhcp.option.agent_information_option.link_selection_cisco",
9486 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9487 "Option 82:150 Link selection (Cisco proprietary)", HFILL
}},
9489 { &hf_dhcp_option82_vrf_name_vpn_id
,
9490 { "VRF name/VPN ID", "dhcp.option.agent_information_option.vrf_name.vpn_id",
9491 FT_BYTES
, BASE_NONE
, NULL
, 0x00,
9492 "Option 82:151 VRF name/VPN ID", HFILL
}},
9494 { &hf_dhcp_option82_vrf_name_global
,
9495 { "Global, default VPN", "dhcp.option.agent_information_option.vrf_name.global",
9496 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
9497 "Option 82:151 Global, default VPN", HFILL
}},
9499 { &hf_dhcp_option82_vrf_name
,
9500 { "VRF name", "dhcp.option.agent_information_option.vrf_name",
9501 FT_STRING
, BASE_NONE
, NULL
, 0x00,
9502 "Option 82:151 VRF name", HFILL
}},
9504 { &hf_dhcp_option82_vrf_name_vpn_id_oui
,
9505 { "VRF name/VPN ID OUI", "dhcp.option.agent_information_option.vrf_name.vpn_id.oui",
9506 FT_UINT24
, BASE_HEX
, NULL
, 0x00,
9507 "Option 82:151 VRF name/VPN ID OUI", HFILL
}},
9509 { &hf_dhcp_option82_vrf_name_vpn_id_index
,
9510 { "VRF name/VPN ID Index", "dhcp.option.agent_information_option.vrf_name.vpn_id.index",
9511 FT_UINT32
, BASE_HEX
, NULL
, 0x00,
9512 "Option 82:151 VRF name/VPN ID Index", HFILL
}},
9514 { &hf_dhcp_option82_server_id_override_cisco
,
9515 { "Server ID Override (Cisco proprietary)", "dhcp.option.agent_information_option.server_id_override_cisco",
9516 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9517 "Option 82:152 Server ID Override (Cisco proprietary)", HFILL
}},
9520 { &hf_dhcp_option_isns_functions
,
9521 { "iSNS Functions", "dhcp.option.isns.functions",
9522 FT_UINT16
, BASE_HEX
, NULL
, 0x00,
9523 "iSNS: the functions supported by the iSNS servers", HFILL
}},
9525 { &hf_dhcp_option_isns_functions_enabled
,
9526 { "Function Fields Enabled", "dhcp.option.isns.functions.enabled",
9527 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_FUNCTIONS_ENABLED
,
9528 "If set to zero, then the contents of all other iSNS Function fields MUST be ignored", HFILL
}},
9530 { &hf_dhcp_option_isns_functions_dd_authorization
,
9531 { "Discovery Domain based Authorization", "dhcp.option.isns.functions.dd_base_authorization",
9532 FT_BOOLEAN
, 16, TFS(&tfs_isns_function_dd_based_auth
), F_ISNS_FUNCTIONS_DD_AUTH
,
9533 "If set to zero, then access authorization must be explicitly performed by each device", HFILL
}},
9535 { &hf_dhcp_option_isns_functions_sec_policy_distibution
,
9536 { "Security Policy Distribution", "dhcp.option.isns.functions.sec_policy_distribution",
9537 FT_BOOLEAN
, 16, TFS(&tfs_isns_functions_sec_distrib
), F_ISNS_FUNCTIONS_SEC_POLICY
,
9540 { &hf_dhcp_option_isns_functions_reserved
,
9541 { "Reserved flags", "dhcp.option.isns.functions.reserved",
9542 FT_UINT16
, BASE_HEX
, NULL
, F_ISNS_FUNCTIONS_RESERVED
,
9545 { &hf_dhcp_option_isns_discovery_domain_access
,
9546 { "Discovery Domain Access flags", "dhcp.option.isns.discovery_domain_access",
9547 FT_UINT16
, BASE_HEX
, NULL
, 0x00,
9548 "iSNS: the types of iSNS clients that are allowed to modify Discovery Domains", HFILL
}},
9550 { &hf_dhcp_option_isns_discovery_domain_access_enabled
,
9551 { "Discovery Domain Enabled", "dhcp.option.isns.discovery_domain_access.enabled",
9552 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_DD_ACCESS_ENABLED
,
9553 "If set to zero, then the contents of the remainder of this field MUST be ignored", HFILL
}},
9555 { &hf_dhcp_option_isns_discovery_domain_access_control_node
,
9556 { "Control Node", "dhcp.option.isns.discovery_domain_access_control.node",
9557 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_DD_ACCESS_CTRL_NODE
,
9560 { &hf_dhcp_option_isns_discovery_domain_access_iscsi_target
,
9561 { "iSCSI Target", "dhcp.option.isns.discovery_domain_access.iscsi_target",
9562 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_DD_ACCESS_ISCSI_TARGET
,
9565 { &hf_dhcp_option_isns_discovery_domain_access_iscsi_inititator
,
9566 { "iSCSI Initiator", "dhcp.option.isns.discovery_domain_access.iscsi_initiator",
9567 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_DD_ACCESS_ISCSI_INITIATOR
,
9570 { &hf_dhcp_option_isns_discovery_domain_access_ifcp_target_port
,
9571 { "iFCP Target Port", "dhcp.option.isns.discovery_domain_access.ifcp_target_port",
9572 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_DD_ACCESS_IFCP_TARGET_PORT
,
9575 { &hf_dhcp_option_isns_discovery_domain_access_ifcp_initiator_port
,
9576 { "iFCP Initiator Port", "dhcp.option.isns.discovery_domain_access.initiator_target_port",
9577 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_DD_ACCESS_IFCP_INITIATOR_PORT
,
9580 { &hf_dhcp_option_isns_discovery_domain_access_reserved
,
9581 { "Reserved Flags", "dhcp.option.isns.discovery_domain_access.reserved",
9582 FT_UINT16
, BASE_HEX
, NULL
, F_ISNS_DD_ACCESS_RESERVED
,
9585 { &hf_dhcp_option_isns_administrative_flags
,
9586 { "Administrative Flags", "dhcp.option.isns.administrative_flags",
9587 FT_UINT16
, BASE_HEX
, NULL
, 0x00,
9588 "iSNS: administrative settings for the iSNS servers discovered through the DHCP query", HFILL
}},
9590 { &hf_dhcp_option_isns_administrative_flags_enabled
,
9591 { "Administrative Flags Enabled", "dhcp.option.isns.administrative_flags.enabled",
9592 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_ADMIN_FLAGS_ENABLED
,
9595 { &hf_dhcp_option_isns_administrative_flags_heartbeat
,
9596 { "Heartbeat", "dhcp.option.isns.administrative_flags.heartbeat",
9597 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_ADMIN_FLAGS_HEARTBEAT
,
9600 { &hf_dhcp_option_isns_administrative_flags_management_scns
,
9601 { "Management SCNs", "dhcp.option.isns.administrative_flags.management_scns",
9602 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_ADMIN_FLAGS_MANAGEMENT_SCNS
,
9605 { &hf_dhcp_option_isns_administrative_flags_default_dd
,
9606 { "Default Discovery Domain", "dhcp.option.isns.administrative_flags.default_discovery_domain",
9607 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_ADMIN_FLAGS_DEFAULT_DD
,
9610 { &hf_dhcp_option_isns_administrative_flags_reserved
,
9611 { "Reserved Flags", "dhcp.option.isns.administrative_flags.reserved",
9612 FT_UINT16
, BASE_HEX
, NULL
, F_ISNS_ADMIN_FLAGS_RESERVED
,
9615 { &hf_dhcp_option_isns_server_security_bitmap
,
9616 { "iSNS Server Security Bitmap", "dhcp.option.isns.server_security_bitmap",
9617 FT_UINT32
, BASE_HEX
, NULL
, 0x00,
9618 "iSNS: server security settings", HFILL
}},
9620 { &hf_dhcp_option_isns_server_security_bitmap_enabled
,
9621 { "Server Security Bitmap Enabled", "dhcp.option.isns.server_security_bitmap.enabled",
9622 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), F_ISNS_SRV_SEC_BITMAP_ENABLED
,
9625 { &hf_dhcp_option_isns_server_security_bitmap_ike_ipsec_enabled
,
9626 { "IKE/IPSec", "dhcp.option.isns.server_security_bitmap.ike_ipsec_enabled",
9627 FT_BOOLEAN
, 16, TFS(&tfs_enabled_disabled
), F_ISNS_SRV_SEC_BITMAP_IKE_IPSEC
,
9630 { &hf_dhcp_option_isns_server_security_bitmap_main_mode
,
9631 { "Main Mode", "dhcp.option.isns.server_security_bitmap.main_mode",
9632 FT_BOOLEAN
, 16, TFS(&tfs_enabled_disabled
), F_ISNS_SRV_SEC_BITMAP_MAIN_MODE
,
9635 { &hf_dhcp_option_isns_server_security_bitmap_aggressive_mode
,
9636 { "Aggressive Mode", "dhcp.option.isns.server_security_bitmap.aggressive_mode",
9637 FT_BOOLEAN
, 16, TFS(&tfs_enabled_disabled
), F_ISNS_SRV_SEC_BITMAP_AGGRESSIVE
,
9640 { &hf_dhcp_option_isns_server_security_bitmap_pfs
,
9641 { "PFS", "dhcp.option.isns.server_security_bitmap.pfs",
9642 FT_BOOLEAN
, 16, TFS(&tfs_enabled_disabled
), F_ISNS_SRV_SEC_BITMAP_PFS
,
9645 { &hf_dhcp_option_isns_server_security_bitmap_transport_mode
,
9646 { "Transport Mode", "dhcp.option.isns.server_security_bitmap.transport_mode",
9647 FT_BOOLEAN
, 16, TFS(&tfs_preferred_no_preference
), F_ISNS_SRV_SEC_BITMAP_TRASPORT_MODE
,
9650 { &hf_dhcp_option_isns_server_security_bitmap_tunnel_mode
,
9651 { "Tunnel Mode", "dhcp.option.isns.server_security_bitmap.tunnel_mode",
9652 FT_BOOLEAN
, 16, TFS(&tfs_preferred_no_preference
), F_ISNS_SRV_SEC_BITMAP_TUNNEL_MODE
,
9655 { &hf_dhcp_option_isns_server_security_bitmap_reserved
,
9656 { "Reserved Flags", "dhcp.option.isns.server_security_bitmap.reserved",
9657 FT_UINT16
, BASE_HEX
, NULL
, F_ISNS_SRV_SEC_BITMAP_RESERVED
,
9660 { &hf_dhcp_option_isns_primary_server_addr
,
9661 { "Primary Server Address", "dhcp.option.isns.primary_server_addr",
9662 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9663 "iSNS: IP address of the primary server", HFILL
}},
9665 { &hf_dhcp_option_isns_heartbeat_originator_addr
,
9666 { "Heartbeat Originator Address", "dhcp.option.isns.heartbeat_originator_addr",
9667 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9668 "iSNS: IP address from which the iSNS heartbeat originates", HFILL
}},
9670 { &hf_dhcp_option_isns_secondary_server_addr_list
,
9671 { "Secondary Server Address", "dhcp.option.isns.secondary_server_addr",
9672 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9673 "iSNS: a list of IP addresses of the secondary iSNS servers", HFILL
}},
9676 { &hf_dhcp_option_novell_dss_string
,
9677 { "Novell Directory Services Servers String", "dhcp.option.novell_dss.string",
9678 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9679 "Option 85: Novell Directory Services Servers String", HFILL
}},
9681 { &hf_dhcp_option_novell_dss_ip
,
9682 { "IP Address", "dhcp.option.novell_dss.ip",
9683 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9684 "Option 85: Novell Directory Services Servers IP Address", HFILL
}},
9686 { &hf_dhcp_option_novell_ds_tree_name
,
9687 { "Novell Directory Services Tree Name", "dhcp.option.novell_ds_tree_name",
9688 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9689 "Option 86: Novell Directory Services Tree Name", HFILL
}},
9691 { &hf_dhcp_option_novell_ds_context
,
9692 { "Novell Directory Services Context", "dhcp.option.novell_ds_context",
9693 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9694 "Option 87: Novell Directory Services Context", HFILL
}},
9696 { &hf_dhcp_option_dhcp_authentication_protocol
,
9697 { "Protocol", "dhcp.option.dhcp_authentication.protocol",
9698 FT_UINT8
, BASE_DEC
, VALS(authen_protocol_vals
), 0x0,
9699 "Option 90: Authentication Protocol", HFILL
}},
9701 { &hf_dhcp_option_dhcp_authentication_alg_delay
,
9702 { "Delay Algorithm", "dhcp.option.dhcp_authentication.alg_delay",
9703 FT_UINT8
, BASE_DEC
, VALS(authen_da_algo_vals
), 0x0,
9704 "Option 90: Delayed Authentication Algorithm", HFILL
}},
9706 { &hf_dhcp_option_dhcp_authentication_algorithm
,
9707 { "Algorithm", "dhcp.option.dhcp_authentication.algorithm",
9708 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9709 "Option 90: Authentication Algorithm", HFILL
}},
9711 { &hf_dhcp_option_dhcp_authentication_rdm
,
9712 { "Replay Detection Method", "dhcp.option.dhcp_authentication.rdm",
9713 FT_UINT8
, BASE_DEC
, VALS(authen_rdm_vals
), 0x0,
9714 "Option 90: Replay Detection Method", HFILL
}},
9716 { &hf_dhcp_option_dhcp_authentication_rdm_replay_detection
,
9717 { "RDM Replay Detection Value", "dhcp.option.dhcp_authentication.rdm_replay_detection",
9718 FT_UINT64
, BASE_HEX
, NULL
, 0x0,
9719 "Option 90: RDM Replay Detection Value", HFILL
}},
9721 { &hf_dhcp_option_dhcp_authentication_rdm_rdv
,
9722 { "Replay Detection Value", "dhcp.option.dhcp_authentication.rdm_rdv",
9723 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9724 "Option 90: Replay Detection Value", HFILL
}},
9726 { &hf_dhcp_option_dhcp_authentication_secret_id
,
9727 { "Secret ID", "dhcp.option.dhcp_authentication.secret_id",
9728 FT_UINT32
, BASE_HEX
, NULL
, 0x0,
9729 "Option 90: Secret ID", HFILL
}},
9731 { &hf_dhcp_option_dhcp_authentication_hmac_md5_hash
,
9732 { "HMAC MD5 Hash", "dhcp.option.dhcp_authentication.hmac_md5_hash",
9733 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9734 "Option 90: HMAC MD5 Hash", HFILL
}},
9736 { &hf_dhcp_option_dhcp_authentication_information
,
9737 { "Authentication Information", "dhcp.option.dhcp_authentication.information",
9738 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9739 "Option 90: Authentication Information", HFILL
}},
9741 { &hf_dhcp_option_client_last_transaction_time
,
9742 { "Client last transaction time", "dhcp.option.client_last_transaction_time",
9743 FT_UINT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_u_secs_fmt
), 0x0,
9744 "Option 91: Client last transaction time", HFILL
}},
9746 { &hf_dhcp_option_associated_ip_option
,
9747 { "Associated IP option", "dhcp.option.associated_ip_option",
9748 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9749 "Option 92: Associated IP option", HFILL
}},
9751 { &hf_dhcp_option_client_system_architecture
,
9752 { "Client System Architecture", "dhcp.option.client_system_architecture",
9753 FT_UINT16
, BASE_DEC
, VALS(dhcp_client_arch
), 0x0,
9754 "Option 93: Client System Architecture", HFILL
}},
9756 { &hf_dhcp_option_client_network_id_major_ver
,
9757 { "Major Version", "dhcp.client_network_id_major",
9758 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9759 "Option 94: Major Version", HFILL
}},
9761 { &hf_dhcp_option_client_network_id_minor_ver
,
9762 { "Minor Version", "dhcp.client_network_id_minor",
9763 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9764 "Option 94: Minor Version", HFILL
}},
9766 { &hf_dhcp_option_civic_location_what
,
9767 { "What", "dhcp.option.civic_location.what",
9768 FT_UINT8
, BASE_DEC
, VALS(civic_address_what_values
), 0x0,
9769 "Option 99: What", HFILL
}},
9771 { &hf_dhcp_option_civic_location_country
,
9772 { "Country", "dhcp.option.civic_location.country",
9773 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9774 "Option 99: Country", HFILL
}},
9776 { &hf_dhcp_option_civic_location_ca_type
,
9777 { "CA Type", "dhcp.option.civic_location.ca_type",
9778 FT_UINT8
, BASE_DEC
, VALS(civic_address_type_values
), 0x0,
9779 "Option 99: CA Type", HFILL
}},
9781 { &hf_dhcp_option_civic_location_ca_length
,
9782 { "CA Length", "dhcp.option.civic_location.ca_length",
9783 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9784 "Option 99: CA Length", HFILL
}},
9786 { &hf_dhcp_option_civic_location_ca_value
,
9787 { "CA Value", "dhcp.option.civic_location.ca_value",
9788 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9789 "Option 99: CA Value", HFILL
}},
9791 { &hf_dhcp_option_tz_pcode
,
9792 { "TZ PCode", "dhcp.option.tz_pcode",
9793 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9794 "Option 100: TZ PCode", HFILL
}},
9796 { &hf_dhcp_option_tz_tcode
,
9797 { "TZ TCode", "dhcp.option.tz_tcode",
9798 FT_STRING
, BASE_NONE
, NULL
, 0x0,
9799 "Option 101: TZ TCode", HFILL
}},
9801 { &hf_dhcp_option_ipv6_only_preferred_wait_time
,
9802 { "IPv6-Only Preferred wait time", "dhcp.option.ipv6only_preferred_wait_time",
9803 FT_UINT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_u_secs_fmt
), 0x0,
9804 "Option 108: IPv6-Only Preferred wait time", HFILL
}},
9806 { &hf_dhcp_option_netinfo_parent_server_address
,
9807 { "NetInfo Parent Server Address", "dhcp.option.netinfo_parent_server_address",
9808 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9809 "Option 112: NetInfo Parent Server Address", HFILL
}},
9811 { &hf_dhcp_option_netinfo_parent_server_tag
,
9812 { "NetInfo Parent Server Tag", "dhcp.option.netinfo_parent_server_tag",
9813 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9814 "Option 113: NetInfo Parent Server Tag", HFILL
}},
9816 { &hf_dhcp_option_dhcp_auto_configuration
,
9817 { "DHCP Auto-Configuration", "dhcp.option.dhcp_auto_configuration",
9818 FT_UINT8
, BASE_DEC
, VALS(dhcp_autoconfig
), 0x0,
9819 "Option 116: DHCP Auto-Configuration", HFILL
}},
9821 { &hf_dhcp_option_dhcp_name_service_search_option
,
9822 { "Name Service", "dhcp.option.dhcp_name_service_search_option",
9823 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9824 "Option 117: Name Service", HFILL
}},
9826 { &hf_dhcp_option_dhcp_dns_domain_search_list_fqdn
,
9827 { "FQDN", "dhcp.option.dhcp_dns_domain_search_list_fqdn",
9828 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9829 "Option 119: FQDN", HFILL
}},
9831 { &hf_dhcp_option_sip_server_enc
,
9832 { "SIP Server Encoding", "dhcp.option.sip_server.encoding",
9833 FT_UINT8
, BASE_DEC
, VALS(sip_server_enc_vals
), 0x0,
9834 "Option 120: SIP Server encoding", HFILL
}},
9836 { &hf_dhcp_option_sip_server_name
,
9837 { "SIP Server Name", "dhcp.option.sip_server.name",
9838 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9839 "Option 120: SIP Server Name", HFILL
}},
9841 { &hf_dhcp_option_sip_server_address
,
9842 { "SIP Server Address", "dhcp.option.sip_server.address",
9843 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
9844 "Option 120: SIP Server Address", HFILL
}},
9846 { &hf_dhcp_option_classless_static_route
,
9847 { "Subnet/MaskWidth-Router", "dhcp.option.classless_static_route",
9848 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9849 "Option 121: Subnet/MaskWidth-Router", HFILL
}},
9851 { &hf_dhcp_option_rfc3825_error
,
9852 { "Error", "dhcp.option.rfc3825.error",
9853 FT_UINT8
, BASE_DEC
, VALS(rfc3825_error_types
), 0x0,
9854 "Option 123: Error", HFILL
}},
9856 { &hf_dhcp_option_rfc3825_latitude
,
9857 { "Latitude", "dhcp.option.rfc3825.latitude",
9858 FT_DOUBLE
, BASE_NONE
, NULL
, 0x0,
9859 "Option 123: Latitude", HFILL
}},
9861 { &hf_dhcp_option_rfc3825_longitude
,
9862 { "Longitude", "dhcp.option.rfc3825.longitude",
9863 FT_DOUBLE
, BASE_NONE
, NULL
, 0x0,
9864 "Option 123: Longitude", HFILL
}},
9866 { &hf_dhcp_option_rfc3825_latitude_res
,
9867 { "Latitude resolution", "dhcp.option.rfc3825.latitude_res",
9868 FT_DOUBLE
, BASE_NONE
, NULL
, 0x0,
9869 "Option 123: Latitude resolution", HFILL
}},
9871 { &hf_dhcp_option_rfc3825_longitude_res
,
9872 { "Longitude resolution", "dhcp.option.rfc3825.longitude_res",
9873 FT_DOUBLE
, BASE_NONE
, NULL
, 0x0,
9874 "Option 123: Longitude resolution", HFILL
}},
9876 { &hf_dhcp_option_rfc3825_altitude
,
9877 { "Altitude", "dhcp.option.rfc3825.altitude",
9878 FT_DOUBLE
, BASE_NONE
, NULL
, 0x0,
9879 "Option 123: Altitude", HFILL
}},
9881 { &hf_dhcp_option_rfc3825_altitude_res
,
9882 { "Altitude resolution", "dhcp.option.rfc3825.altitude_res",
9883 FT_DOUBLE
, BASE_NONE
, NULL
, 0x0,
9884 "Option 123: Altitude resolution", HFILL
}},
9886 { &hf_dhcp_option_rfc3825_altitude_type
,
9887 { "Altitude type", "dhcp.option.rfc3825.altitude_type",
9888 FT_UINT8
, BASE_DEC
, VALS(altitude_type_values
), 0x0,
9889 "Option 123: Altitude type", HFILL
}},
9891 { &hf_dhcp_option_rfc3825_map_datum
,
9892 { "Map Datum", "dhcp.option.rfc3825.map_datum",
9893 FT_UINT8
, BASE_DEC
, VALS(map_datum_type_values
), 0x0,
9894 "Option 123: Map Datum", HFILL
}},
9896 { &hf_dhcp_option_cl_dss_id_option
,
9897 { "DSS_ID Type", "dhcp.option.cl_dss_id.option",
9898 FT_UINT8
, BASE_DEC
, VALS(cl_dss_id_type_vals
), 0x0,
9899 "Option 123:CL DSS_ID Type", HFILL
}},
9901 { &hf_dhcp_option_cl_dss_id_len
,
9902 { "DSS_ID Length", "dhcp.option.cl_dss_id.len",
9903 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9904 "Option 123:CL DSS_ID Length", HFILL
}},
9906 { &hf_dhcp_option_cl_dss_id
,
9907 { "Country", "dhcp.option.cl_dss_id",
9908 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9909 "Option 123:CL DSS_ID", HFILL
}},
9911 { &hf_dhcp_option_vi_class_cl_address_mode
,
9912 { "CableLab Address Mode", "dhcp.option.vi_class.cl_address_mode",
9913 FT_UINT8
, BASE_DEC
, VALS(cablelab_ipaddr_mode_vals
), 0x0,
9914 "Option 124: CableLab Address Mode", HFILL
}},
9916 { &hf_dhcp_option_vi_class_enterprise
,
9917 { "Enterprise", "dhcp.option.vi_class.enterprise",
9918 FT_UINT32
, BASE_ENTERPRISES
, STRINGS_ENTERPRISES
, 0x00,
9919 "Option 124: Enterprise", HFILL
}},
9921 { &hf_dhcp_option_vi_class_data_length
,
9922 { "Length", "dhcp.option.vi_class.length",
9923 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9924 "Option 124: Length", HFILL
}},
9926 { &hf_dhcp_option_vi_class_data_item_length
,
9927 { "Length", "dhcp.option.vi_class.vendor_class_data.item.length",
9928 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9929 "Option 124: Length", HFILL
}},
9931 { &hf_dhcp_option_vi_class_data_item_data
,
9932 { "Data", "dhcp.option.vi_class.vendor_class_data.item.data",
9933 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9934 "Option 124: Data", HFILL
}},
9936 { &hf_dhcp_option125_enterprise
,
9937 { "Enterprise", "dhcp.option.vi.enterprise",
9938 FT_UINT32
, BASE_ENTERPRISES
, STRINGS_ENTERPRISES
, 0x00,
9939 "Option 125: Enterprise", HFILL
}},
9941 { &hf_dhcp_option125_length
,
9942 { "Length", "dhcp.option.vi.length",
9943 FT_UINT8
, BASE_DEC
, NULL
, 0x00,
9944 "Option 125: Length", HFILL
}},
9946 { &hf_dhcp_option125_value
,
9947 { "Value", "dhcp.option.vi.value",
9948 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
9949 "Option 125: Suboption value", HFILL
}},
9951 { &hf_dhcp_option125_value_8
,
9952 { "Value", "dhcp.option.vi.value.uint",
9953 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
9954 "Option 125: Suboption 8-bit value", HFILL
}},
9956 { &hf_dhcp_option125_value_16
,
9957 { "Value", "dhcp.option.vi.value.uint",
9958 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
9959 "Option 125: Suboption 16-bit value", HFILL
}},
9961 { &hf_dhcp_option125_value_ip_address
,
9962 { "Value", "dhcp.option.vi.value.address",
9963 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
9964 "Option 125: Suboption IP address value", HFILL
}},
9966 { &hf_dhcp_option125_value_stringz
,
9967 { "Value", "dhcp.option.vi.value.string",
9968 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9969 "Option 125: Suboption Z-String value", HFILL
}},
9971 { &hf_dhcp_option125_tr111_suboption
,
9972 { "Option 125 Suboption", "dhcp.option.vi.tr111.suboption",
9973 FT_UINT8
, BASE_DEC
, VALS(option125_tr111_suboption_vals
), 0x0,
9974 "Option 125:TR 111 Suboption", HFILL
}},
9976 { &hf_dhcp_option125_tr111_device_manufacturer_oui
,
9977 { "DeviceManufacturerOUI", "dhcp.option.vi.tr111.device_manufacturer_oui",
9978 FT_UINT24
, BASE_OUI
, NULL
, 0x0,
9979 "Option 125:TR 111 1 DeviceManufacturerOUI", HFILL
}},
9981 { &hf_dhcp_option125_tr111_device_serial_number
,
9982 { "DeviceSerialNumber", "dhcp.option.vi.tr111.device_serial_number",
9983 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9984 "Option 125:TR 111 2 DeviceSerialNumber", HFILL
}},
9986 { &hf_dhcp_option125_tr111_device_product_class
,
9987 { "DeviceProductClass", "dhcp.option.vi.tr111.device_product_class",
9988 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9989 "Option 125:TR 111 3 DeviceProductClass", HFILL
}},
9991 { &hf_dhcp_option125_tr111_gateway_manufacturer_oui
,
9992 { "GatewayManufacturerOUI", "dhcp.option.vi.tr111.gateway_manufacturer_oui",
9993 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9994 "Option 125:TR 111 4 GatewayManufacturerOUI", HFILL
}},
9996 { &hf_dhcp_option125_tr111_gateway_serial_number
,
9997 { "GatewaySerialNumber", "dhcp.option.vi.tr111.gateway_serial_number",
9998 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
9999 "Option 125:TR 111 5 GatewaySerialNumber", HFILL
}},
10001 { &hf_dhcp_option125_tr111_gateway_product_class
,
10002 { "GatewayProductClass", "dhcp.option.vi.tr111.gateway_product_class",
10003 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10004 "Option 125:TR 111 6 GatewayProductClass", HFILL
}},
10006 { &hf_dhcp_option125_cl_suboption
,
10007 { "Option 125 Suboption", "dhcp.option.vi.cl.suboption",
10008 FT_UINT8
, BASE_DEC
, VALS(option125_cl_suboption_vals
), 0x0,
10009 "Option 125:CL Suboption", HFILL
}},
10011 { &hf_dhcp_option125_cl_option_request
,
10012 { "Option Request", "dhcp.option.vi.cl.option_request",
10013 FT_BYTES
, SEP_SPACE
, NULL
, 0x0,
10014 "Option 125:CL 1 Option Request", HFILL
}},
10016 { &hf_dhcp_option125_cl_tftp_server_addresses
,
10017 { "TFTP Server Addresses", "dhcp.option.vi.cl.tftp_server_addresses",
10018 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
10019 "Option 125:CL 2 TFTP Server Addresses", HFILL
}},
10021 { &hf_dhcp_option125_cl_erouter_container_option
,
10022 { "eRouter Container Option", "dhcp.option.vi.cl.erouter_container_option",
10023 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10024 "Option 125:CL 3 eRouter Container Option", HFILL
}},
10026 { &hf_dhcp_option125_cl_mib_environment_indicator_option
,
10027 { "MIB Environment Indicator Option", "dhcp.option.vi.cl.mib_environment_indicator_option",
10028 FT_UINT8
, BASE_DEC
, VALS(pkt_mib_env_ind_opt_vals
), 0x0,
10029 "Option 125:CL 4 MIB Environment Indicator Option", HFILL
}},
10031 { &hf_dhcp_option125_cl_modem_capabilities
,
10032 { "Modem Capabilities", "dhcp.option.vi.cl.modem_capabilities",
10033 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10034 "Option 125:CL 5 Modem Capabilities", HFILL
}},
10036 { &hf_dhcp_option_subnet_selection_option
,
10037 { "Subnet Selection Option", "dhcp.option.subnet_selection_option",
10038 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
10039 "Option 118: Subnet Selection Option", HFILL
}},
10041 { &hf_dhcp_option_pana_agent
,
10042 { "PAA IPv4 Address", "dhcp.option.pana_agent",
10043 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
10044 "Protocol for Carrying Authentication for Network Access (PANA) Authentication Agents IPv4 Address", HFILL
}},
10046 { &hf_dhcp_option_lost_server_domain_name
,
10047 { "LoST Server Domain Name", "dhcp.option.lost_server_domain_name",
10048 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10049 "Option 137: LoST Server Domain Name", HFILL
}},
10051 { &hf_dhcp_option_capwap_access_controller
,
10052 { "CAPWAP Access Controllers", "dhcp.option.capwap_access_controller",
10053 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
10054 "Option 138: CAPWAP Access Controllers", HFILL
}},
10056 { &hf_dhcp_option_andsf_server
,
10057 { "ANDSF Server", "dhcp.option.andsf_server",
10058 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
10059 "ANDSF (Access Network Discovery and Selection Function) Server", HFILL
}},
10061 { &hf_dhcp_option_forcerenew_nonce_algo
,
10062 { "Algorithm", "dhcp.option.forcerenew_nonce.algorithm",
10063 FT_UINT8
, BASE_DEC
, VALS(forcerenew_nonce_algo_vals
), 0x00,
10064 "Forcenew Nonce Algorithm", HFILL
}},
10066 { &hf_dhcp_option_rdnss_reserved
,
10067 { "Reserved", "dhcp.option.rdnss.reserved",
10068 FT_UINT8
, BASE_HEX
, NULL
, 0xfc,
10069 "RDNSS Reserved", HFILL
}},
10071 { &hf_dhcp_option_rdnss_pref
,
10072 { "Preference", "dhcp.option.rdnss.preference",
10073 FT_UINT8
, BASE_DEC
, VALS(rdnss_pref_vals
), 0x03,
10074 "RDNSS (Recursive DNS Server) Preference", HFILL
}},
10076 { &hf_dhcp_option_rdnss_prim_dns_server
,
10077 { "Primary DNS", "dhcp.option.rdnss.primary_dns",
10078 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
10079 "RDNSS Primary DNS-recursive-name-server's IPv4 address", HFILL
}},
10081 { &hf_dhcp_option_rdnss_sec_dns_server
,
10082 { "Secondary DNS", "dhcp.option.rdnss.secondary_dns",
10083 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
10084 "RDNSS Secondary DNS-recursive-name-server's IPv4 address", HFILL
}},
10086 { &hf_dhcp_option_rdnss_domain
,
10087 { "Domains and networks", "dhcp.option.rdnss.domain",
10088 FT_STRING
, BASE_NONE
, NULL
, 0x00,
10089 "RDNSS Domains and networks", HFILL
}},
10091 { &hf_dhcp_option_dots_ri
,
10092 { "DOTS Reference Identifier", "dhcp.option.dots.ri",
10093 FT_STRING
, BASE_NONE
, NULL
, 0x00,
10094 "Peer DOTS Agent name", HFILL
}},
10096 { &hf_dhcp_option_dots_address
,
10097 { "DOTS Address", "dhcp.option.dots.address",
10098 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
10099 "Peer DOTS Agent Address", HFILL
}},
10101 { &hf_dhcp_option_tftp_server_address
,
10102 { "TFTP Server Address", "dhcp.option.tftp_server_address",
10103 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
10104 "Option 150: TFTP Server Address", HFILL
}},
10106 { &hf_dhcp_option_bulk_lease_status_code
,
10107 { "Status Code", "dhcp.option.bulk_lease.status_code",
10108 FT_UINT8
, BASE_DEC
, VALS(bulk_lease_dhcp_status_code_vals
), 0x00,
10109 "DHCPv4 Bulk Leasequery Status Code", HFILL
}},
10111 { &hf_dhcp_option_bulk_lease_status_message
,
10112 { "Status Code Message", "dhcp.option.bulk_lease.status_code_message",
10113 FT_STRING
, BASE_NONE
, NULL
, 0x00,
10114 "DHCPv4 Bulk Leasequery Status Code Message", HFILL
}},
10116 { &hf_dhcp_option_bulk_lease_base_time
,
10117 { "Base Time", "dhcp.option.bulk_lease.base_time",
10118 FT_ABSOLUTE_TIME
, ABSOLUTE_TIME_LOCAL
, NULL
, 0x00,
10119 "DHCPv4 Bulk Leasequery Base Time", HFILL
}},
10121 { &hf_dhcp_option_bulk_lease_start_time_of_state
,
10122 { "Start Time Of State", "dhcp.option.bulk_lease.start_time_of_state",
10123 FT_UINT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_u_secs_fmt
), 0x0,
10124 "DHCPv4 Bulk Leasequery Start Time Of State", HFILL
}},
10126 { &hf_dhcp_option_bulk_lease_query_start
,
10127 { "Query Start Time", "dhcp.option.bulk_lease.query_start_time",
10128 FT_ABSOLUTE_TIME
, ABSOLUTE_TIME_LOCAL
, NULL
, 0x00,
10129 "DHCPv4 Bulk Leasequery Query Start Time", HFILL
}},
10131 { &hf_dhcp_option_bulk_lease_query_end
,
10132 { "Query End Time", "dhcp.option.bulk_lease.query_end_time",
10133 FT_ABSOLUTE_TIME
, ABSOLUTE_TIME_LOCAL
, NULL
, 0x00,
10134 "DHCPv4 Bulk Leasequery Query End Time", HFILL
}},
10136 { &hf_dhcp_option_bulk_lease_dhcp_state
,
10137 { "Dhcp State", "dhcp.option.bulk_lease.dhcp_state",
10138 FT_UINT8
, BASE_DEC
, VALS(bulk_lease_dhcp_state_vals
), 0x00,
10139 "DHCPv4 Bulk Leasequery Dhcp State", HFILL
}},
10141 { &hf_dhcp_option_bulk_lease_data_source
,
10142 { "Data Source", "dhcp.option.bulk_lease.data_source",
10143 FT_BOOLEAN
, BASE_NONE
, TFS(&tfs_bulk_lease_data_source
), 0x00,
10144 "DHCPv4 Bulk Leasequery Data Source", HFILL
}},
10146 { &hf_dhcp_option_pcp_list_length
,
10147 { "List-Length", "dhcp.option.pcp.list_length",
10148 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10149 "Port Control Protocol (PCP) List Length", HFILL
}},
10151 { &hf_dhcp_option_pcp_server
,
10152 { "PCP Server", "dhcp.option.pcp.server",
10153 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
10154 "Port Control Protocol (PCP) Server", HFILL
}},
10156 { &hf_dhcp_option_portparams_offset
,
10157 { "Offset", "dhcp.option.portparams.offset",
10158 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10159 "Port Set ID (PSID) offset", HFILL
}},
10161 { &hf_dhcp_option_portparams_psid_length
,
10162 { "PSID-Length", "dhcp.option.portparams.psid_length",
10163 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10164 "Port Set ID (PSID) Length", HFILL
}},
10166 { &hf_dhcp_option_portparams_psid
,
10167 { "PSID", "dhcp.option.portparams.psid",
10168 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10169 "Port Set ID (PSID)", HFILL
}},
10171 { &hf_dhcp_option_mudurl
,
10172 { "MUDURL", "dhcp.option.mudurl",
10173 FT_STRING
, BASE_NONE
, NULL
, 0x0,
10174 "Option 161: MUDURL", HFILL
}},
10176 { &hf_dhcp_option_pxe_config_file
,
10177 { "PXELINUX configuration file", "dhcp.option.pxe_config_file",
10178 FT_STRING
, BASE_NONE
, NULL
, 0x0,
10179 "Option 209: PXE Configuration File", HFILL
}},
10181 { &hf_dhcp_option_pxe_path_prefix
,
10182 { "PXELINUX path prefix", "dhcp.option.pxe_path_prefix",
10183 FT_STRING
, BASE_NONE
, NULL
, 0x0,
10184 "Option 210: PXE Path Prefix", HFILL
}},
10186 { &hf_dhcp_option_pxe_reboot_time
,
10187 { "PXELINUX Reboot Time", "dhcp.option.pxe_reboot_time",
10188 FT_UINT32
, BASE_CUSTOM
, CF_FUNC(dhcp_time_in_u_secs_fmt
), 0x0,
10189 "Option 211: PXE Reboot Time", HFILL
}},
10191 { &hf_dhcp_option_captive_portal
,
10192 { "Captive Portal", "dhcp.option.captive_portal",
10193 FT_STRING
, BASE_NONE
, NULL
, 0x0,
10194 "The contact URI for the captive portal that the user should connect to", HFILL
}},
10196 { &hf_dhcp_option_6RD_ipv4_mask_len
,
10197 { "6RD IPv4 Mask Length", "dhcp.option.6RD.ipv4_mask_len",
10198 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10199 "Option 212: 6RD IPv4 Mask Length", HFILL
}},
10201 { &hf_dhcp_option_6RD_prefix_len
,
10202 { "6RD Prefix Length", "dhcp.option.6RD.prefix_len",
10203 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10204 "Option 212: 6RD Prefix Length", HFILL
}},
10206 { &hf_dhcp_option_6RD_prefix
,
10207 { "6RD Prefix", "dhcp.option.6RD.prefix",
10208 FT_IPv6
, BASE_NONE
, NULL
, 0x00,
10209 "Option 212: 6RD Prefix", HFILL
}},
10211 { &hf_dhcp_option_6RD_border_relay_ip
,
10212 { "Border Relay IP", "dhcp.option.6RD.border_relay_ip",
10213 FT_IPv4
, BASE_NONE
, NULL
, 0x00,
10214 "Option 212: Border Relay IP", HFILL
}},
10216 { &hf_dhcp_option_private_proxy_autodiscovery
,
10217 { "Private/Proxy autodiscovery", "dhcp.option.private_proxy_autodiscovery",
10218 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10219 "Option 252: Private/Proxy autodiscovery", HFILL
}},
10221 { &hf_dhcp_option_end
,
10222 { "Option End", "dhcp.option.end",
10223 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10224 "Option 255: End", HFILL
}},
10226 { &hf_dhcp_option_end_overload
,
10227 { "Option End (Overload)", "dhcp.option.end",
10228 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10229 "Option 255: End (Overload)", HFILL
}},
10231 { &hf_dhcp_vendor_unknown_suboption
,
10232 { "Option 125 Suboption", "dhcp.vendor.suboption",
10233 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10236 { &hf_dhcp_suboption_data
,
10237 { "Data", "dhcp.vendor.data",
10238 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10241 { &hf_dhcp_pc_ietf_ccc_suboption
,
10242 { "Suboption", "dhcp.vendor.pc.ietf_ccc.suboption",
10243 FT_UINT8
, BASE_DEC
, VALS(pkt_draft5_ccc_opt_vals
), 0x0,
10246 { &hf_dhcp_pc_i05_ccc_suboption
,
10247 { "Suboption", "dhcp.vendor.pc.i05_ccc.suboption",
10248 FT_UINT8
, BASE_DEC
, VALS(pkt_i05_ccc_opt_vals
), 0x0,
10251 { &hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_nom_timeout
,
10252 { "pktcMtaDevRealmUnsolicitedKeyNomTimeout", "dhcp.cl.ietf_ccc.dev_realm_unc_key_nom_timeout",
10253 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10256 { &hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_max_timeout
,
10257 { "pktcMtaDevRealmUnsolicitedKeyMaxTimeout", "dhcp.cl.ietf_ccc.dev_realm_unc_key_max_timeout",
10258 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10261 { &hf_dhcp_cl_ietf_ccc_dev_realm_unc_key_max_retries
,
10262 { "pktcMtaDevRealmUnsolicitedKeyMaxRetries", "dhcp.cl.ietf_ccc.dev_realm_unc_key_max_retries",
10263 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10266 { &hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_nom_timeout
,
10267 { "pktcMtaDevProvUnsolicitedKeyNomTimeout", "dhcp.cl.ietf_ccc.dev_prov_unc_key_nom_timeout",
10268 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10271 { &hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_max_timeout
,
10272 { "pktcMtaDevProvUnsolicitedKeyMaxTimeout", "dhcp.cl.ietf_ccc.dev_prov_unc_key_max_timeout",
10273 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10276 { &hf_dhcp_cl_ietf_ccc_dev_prov_unc_key_max_retries
,
10277 { "pktcMtaDevProvUnsolicitedKeyMaxRetries", "dhcp.cl.ietf_ccc.dev_prov_unc_key_max_retries",
10278 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10281 { &hf_dhcp_ccc_ietf_sec_tkt_pc_provision_server
,
10282 { "Invalidate PacketCable Provisioning Server", "dhcp.ccc.ietf.sec_tkt.pc_provision_server",
10283 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), 0x0001,
10286 { &hf_dhcp_ccc_ietf_sec_tkt_all_pc_call_management
,
10287 { "Invalidate All PacketCable Call Management Servers", "dhcp.ccc.ietf.sec_tkt.all_pc_call_management",
10288 FT_BOOLEAN
, 16, TFS(&tfs_yes_no
), 0x0002,
10291 { &hf_dhcp_option242_avaya
,
10292 { "Private/Avaya IP Telephone", "dhcp.option.vendor.avaya",
10293 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10294 "Option 242: Private/Avaya IP Telephone", HFILL
}},
10296 { &hf_dhcp_option242_avaya_tlssrvr
,
10297 { "TLSSRVR", "dhcp.option.vendor.avaya.tlssrvr",
10298 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10299 "Option 242: TLSSRVR (HTTPS server(s) to download configuration)", HFILL
}},
10301 { &hf_dhcp_option242_avaya_httpsrvr
,
10302 { "HTTPSRVR", "dhcp.option.vendor.avaya.httpsrvr",
10303 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10304 "Option 242: HTTPSRVR (HTTP server(s) to download configuration)", HFILL
}},
10306 { &hf_dhcp_option242_avaya_httpdir
,
10307 { "HTTPDIR", "dhcp.option.vendor.avaya.httpdir",
10308 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10309 "Option 242: HTTPDIR (Path to configuration files)", HFILL
}},
10311 { &hf_dhcp_option242_avaya_static
,
10312 { "STATIC", "dhcp.option.vendor.avaya.static",
10313 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10314 "Option 242: STATIC (Static programming override flag)", HFILL
}},
10316 { &hf_dhcp_option242_avaya_mcipadd
,
10317 { "MCIPADD", "dhcp.option.vendor.avaya.mcipadd",
10318 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10319 "Option 242: MCIPADD (List of CM server(s))", HFILL
}},
10321 { &hf_dhcp_option242_avaya_dot1x
,
10322 { "DOT1X", "dhcp.option.vendor.avaya.dot1x",
10323 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10324 "Option 242: DOT1X (802.1X Supplicant operation mode)", HFILL
}},
10326 { &hf_dhcp_option242_avaya_icmpdu
,
10327 { "ICMPDU", "dhcp.option.vendor.avaya.icmpdu",
10328 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10329 "Option 242: ICMPDU (ICMP Destination Unreachable processing)", HFILL
}},
10331 { &hf_dhcp_option242_avaya_icmpred
,
10332 { "ICMPRED", "dhcp.option.vendor.avaya.icmpred",
10333 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10334 "Option 242: ICMPRED (ICMP Redirect handling)", HFILL
}},
10336 { &hf_dhcp_option242_avaya_l2q
,
10337 { "L2Q", "dhcp.option.vendor.avaya.l2q",
10338 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10339 "Option 242: L2Q (Controls 802.1Q tagging)", HFILL
}},
10341 { &hf_dhcp_option242_avaya_l2qvlan
,
10342 { "L2QVLAN", "dhcp.option.vendor.avaya.l2qvlan",
10343 FT_INT32
, BASE_DEC
, NULL
, 0x0,
10344 "Option 242: L2QVLAN (VLAN ID)", HFILL
}},
10346 { &hf_dhcp_option242_avaya_loglocal
,
10347 { "LOGLOCAL", "dhcp.option.vendor.avaya.loglocal",
10348 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10349 "Option 242: LOGLOCAL (Log level)", HFILL
}},
10351 { &hf_dhcp_option242_avaya_phy1stat
,
10352 { "PHY1STAT", "dhcp.option.vendor.avaya.phy1stat",
10353 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10354 "Option 242: PHY1STAT (Interface configuration)", HFILL
}},
10356 { &hf_dhcp_option242_avaya_phy2stat
,
10357 { "PHY2STAT", "dhcp.option.vendor.avaya.phy2stat",
10358 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10359 "Option 242: PHY2STAT (Interface configuration)", HFILL
}},
10361 { &hf_dhcp_option242_avaya_procpswd
,
10362 { "PROCPSWD", "dhcp.option.vendor.avaya.procpswd",
10363 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10364 "Option 242: PROCPSWD (Security string used to access local procedures)", HFILL
}},
10366 { &hf_dhcp_option242_avaya_procstat
,
10367 { "PROCSTAT", "dhcp.option.vendor.avaya.procstat",
10368 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10369 "Option 242: PROCSTAT (Local (dialpad) Administrative access)", HFILL
}},
10371 { &hf_dhcp_option242_avaya_snmpadd
,
10372 { "SNMPADD", "dhcp.option.vendor.avaya.snmpadd",
10373 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10374 "Option 242: SNMPADD (Allowable source IP Address(es) for SNMP queries)", HFILL
}},
10376 { &hf_dhcp_option242_avaya_snmpstring
,
10377 { "SNMPSTRING", "dhcp.option.vendor.avaya.snmpstring",
10378 FT_STRINGZ
, BASE_NONE
, NULL
, 0x0,
10379 "Option 242: SNMPSTRING (SNMP community string)", HFILL
}},
10381 { &hf_dhcp_option242_avaya_vlantest
,
10382 { "VLANTEST", "dhcp.option.vendor.avaya.vlantest",
10383 FT_INT32
, BASE_DEC
, NULL
, 0x0,
10384 "Option 242: VLANTEST (Timeout in seconds)", HFILL
}},
10386 /* Cisco vendor suboptions */
10387 { &hf_dhcp_option43_cisco_suboption
,
10388 { "Option 43 Suboption", "dhcp.option.vendor.cisco.suboption",
10389 FT_UINT8
, BASE_DEC
, VALS(option43_cisco_suboption_vals
), 0x0,
10390 "Option 43:Cisco Suboption", HFILL
}},
10392 { &hf_dhcp_option43_cisco_unknown
,
10393 { "Unknown", "dhcp.option.vendor.cisco.unknown",
10394 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
10397 { &hf_dhcp_option43_cisco_unknown1
,
10398 { "Unknown1", "dhcp.option.vendor.cisco.unknown1",
10399 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10402 { &hf_dhcp_option43_cisco_unknown2
,
10403 { "Unknown2", "dhcp.option.vendor.cisco.unknown2",
10404 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10407 { &hf_dhcp_option43_cisco_unknown3
,
10408 { "Unknown3", "dhcp.option.vendor.cisco.unknown3",
10409 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
10412 { &hf_dhcp_option43_cisco_nodeid
,
10413 { "Node ID", "dhcp.option.vendor.cisco.nodeid",
10414 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10417 { &hf_dhcp_option43_cisco_unknown5
,
10418 { "Unknown5", "dhcp.option.vendor.cisco.unknown5",
10419 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10422 { &hf_dhcp_option43_cisco_unknown6
,
10423 { "Unknown6", "dhcp.option.vendor.cisco.unknown6",
10424 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
10427 { &hf_dhcp_option43_cisco_model
,
10428 { "Model", "dhcp.option.vendor.cisco.model",
10429 FT_STRING
, BASE_NONE
, NULL
, 0x0,
10432 { &hf_dhcp_option43_cisco_apicuuid
,
10433 { "APIC UUID", "dhcp.option.vendor.cisco.apicuuid",
10434 FT_STRING
, BASE_NONE
, NULL
, 0x0,
10437 { &hf_dhcp_option43_cisco_fabricname
,
10438 { "Fabricname", "dhcp.option.vendor.cisco.fabricname",
10439 FT_STRING
, BASE_NONE
, NULL
, 0x0,
10442 { &hf_dhcp_option43_cisco_unknown10
,
10443 { "Unknown10", "dhcp.option.vendor.cisco.unknown10",
10444 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
10447 { &hf_dhcp_option43_cisco_serialno
,
10448 { "SerialNo", "dhcp.option.vendor.cisco.serialno",
10449 FT_STRING
, BASE_NONE
, NULL
, 0x0,
10452 { &hf_dhcp_option43_cisco_clientint
,
10453 { "Client Int", "dhcp.option.vendor.cisco.clientint",
10454 FT_STRING
, BASE_NONE
, NULL
, 0x0,
10458 static uat_field_t dhcp_uat_flds
[] = {
10459 UAT_FLD_DEC(uat_dhcp_records
, opt
, "Option number", "Custom Option Number"),
10460 UAT_FLD_CSTRING(uat_dhcp_records
, text
, "Option Name", "Custom Option Name"),
10461 UAT_FLD_VS(uat_dhcp_records
, ftype
, "Option type", dhcp_custom_type_vals
, "Option datatype"),
10465 static int *ett
[] = {
10469 &ett_dhcp_option43_suboption
,
10470 &ett_dhcp_option43_suboption_discovery
,
10471 &ett_dhcp_option43_suboption_tree
,
10472 &ett_dhcp_option63_suboption
,
10473 &ett_dhcp_option77_instance
,
10474 &ett_dhcp_option82_suboption
,
10475 &ett_dhcp_option82_suboption9
,
10476 &ett_dhcp_option124_vendor_class_data_item
,
10477 &ett_dhcp_option125_suboption
,
10478 &ett_dhcp_option125_tr111_suboption
,
10479 &ett_dhcp_option125_cl_suboption
,
10480 &ett_dhcp_option242_suboption
,
10482 &ett_dhcp_filename_option
,
10483 &ett_dhcp_server_hostname
,
10484 &ett_dhcp_fqdn_flags
,
10485 &ett_dhcp_isns_functions
,
10486 &ett_dhcp_isns_discovery_domain_access
,
10487 &ett_dhcp_isns_administrative_flags
,
10488 &ett_dhcp_isns_server_security_bitmap
,
10489 &ett_dhcp_isns_secondary_server_addr
,
10490 &ett_dhcp_o43_bsdp_boot_image
,
10491 &ett_dhcp_o43_bsdp_attributes
,
10492 &ett_dhcp_o43_bsdp_image_desc_list
,
10493 &ett_dhcp_o43_bsdp_image_desc
,
10494 &ett_dhcp_o43_bsdp_attributes_flags
,
10495 &ett_dhcp_option158_pcp_list
,
10498 static ei_register_info ei
[] = {
10499 { &ei_dhcp_bad_length
, { "dhcp.bad_length", PI_PROTOCOL
, PI_ERROR
, "length isn't 0", EXPFILL
}},
10500 { &ei_dhcp_bad_bitfield
, { "dhcp.bad_bitfield", PI_PROTOCOL
, PI_ERROR
, "Bogus bitfield", EXPFILL
}},
10501 { &ei_dhcp_missing_subopt_length
, { "dhcp.missing_subopt_length", PI_PROTOCOL
, PI_ERROR
, "no room left in option for suboption length", EXPFILL
}},
10502 { &ei_dhcp_missing_subopt_value
, { "dhcp.missing_subopt_value", PI_PROTOCOL
, PI_ERROR
, "no room left in option for suboption value", EXPFILL
}},
10503 { &ei_dhcp_mal_duid
, { "dhcp.malformed.duid", PI_PROTOCOL
, PI_ERROR
, "DUID: malformed option", EXPFILL
}},
10504 { &ei_dhcp_rfc3396_refer_last_option
, { "dhcp.option.refer_last_option", PI_REASSEMBLE
, PI_CHAT
, "For the data, please refer to the last option of this type", EXPFILL
}},
10505 { &ei_dhcp_opt_overload_wrong_field
, { "dhcp.option.option_overload.wrong_field", PI_PROTOCOL
, PI_WARN
, "overload option makes no sense in the file or sname field", EXPFILL
}},
10506 { &ei_dhcp_opt_overload_file_end_missing
, { "dhcp.option.option_overload.file_end_missing", PI_PROTOCOL
, PI_ERROR
, "file overload end option missing", EXPFILL
}},
10507 { &ei_dhcp_opt_overload_sname_end_missing
, { "dhcp.option.option_overload.sname_end_missing", PI_PROTOCOL
, PI_ERROR
, "sname overload end option missing", EXPFILL
}},
10508 { &ei_dhcp_subopt_unknown_type
, { "dhcp.subopt.unknown_type", PI_PROTOCOL
, PI_ERROR
, "ERROR, please report: Unknown subopt type handler", EXPFILL
}},
10509 { &ei_dhcp_option_civic_location_bad_cattype
, { "dhcp.option.civic_location.bad_cattype", PI_PROTOCOL
, PI_ERROR
, "Error with CAType", EXPFILL
}},
10510 { &ei_dhcp_option_dhcp_name_service_invalid
, { "dhcp.option.dhcp_name_service.invalid", PI_PROTOCOL
, PI_ERROR
, "Invalid Name Service", EXPFILL
}},
10511 { &ei_dhcp_option_sip_server_address_encoding
, { "dhcp.option.sip_server_address.encoding", PI_PROTOCOL
, PI_ERROR
, "RFC 3361 defines only 0 and 1 for Encoding byte", EXPFILL
}},
10512 { &ei_dhcp_option_classless_static_route
, { "dhcp.option.classless_static.route", PI_PROTOCOL
, PI_ERROR
, "Mask width > 32", EXPFILL
}},
10513 { &ei_dhcp_option125_enterprise_malformed
, { "dhcp.option.enterprise.malformed", PI_PROTOCOL
, PI_ERROR
, "no room left in option for enterprise data", EXPFILL
}},
10514 { &ei_dhcp_option_6RD_malformed
, { "dhcp.option.6RD.malformed", PI_PROTOCOL
, PI_ERROR
, "6RD: malformed option", EXPFILL
}},
10515 { &ei_dhcp_option82_vi_cl_tag_unknown
, { "dhcp.option.option.vi.cl.tag_unknown", PI_PROTOCOL
, PI_ERROR
, "Unknown tag", EXPFILL
}},
10516 { &ei_dhcp_option_parse_err
, { "dhcp.option.parse_err", PI_PROTOCOL
, PI_ERROR
, "Parse error", EXPFILL
}},
10517 { &ei_dhcp_nonstd_option_data
, { "dhcp.option.nonstd_data", PI_PROTOCOL
, PI_NOTE
, "Non standard compliant option data", EXPFILL
}},
10518 { &ei_dhcp_suboption_invalid
, { "dhcp.suboption_invalid", PI_PROTOCOL
, PI_ERROR
, "Invalid suboption", EXPFILL
}},
10519 { &ei_dhcp_secs_le
, { "dhcp.secs_le", PI_PROTOCOL
, PI_NOTE
, "Seconds elapsed appears to be encoded as little-endian", EXPFILL
}},
10520 { &ei_dhcp_end_option_missing
, { "dhcp.end_option_missing", PI_PROTOCOL
, PI_ERROR
, "End option missing", EXPFILL
}},
10521 { &ei_dhcp_client_address_not_given
, { "dhcp.client_address_not_given", PI_PROTOCOL
, PI_NOTE
, "Client address not given", EXPFILL
}},
10522 { &ei_dhcp_server_name_overloaded_by_dhcp
, { "dhcp.server_name_overloaded_by_dhcp", PI_PROTOCOL
, PI_NOTE
, "Server name option overloaded by DHCP", EXPFILL
}},
10523 { &ei_dhcp_boot_filename_overloaded_by_dhcp
, { "dhcp.boot_filename_overloaded_by_dhcp", PI_PROTOCOL
, PI_NOTE
, "Boot file name option overloaded by DHCP", EXPFILL
}},
10524 { &ei_dhcp_option_isns_ignored_bitfield
, { "dhcp.option.isns.ignored_bitfield", PI_PROTOCOL
, PI_NOTE
, "Enabled field is not set - non-zero bitmask ignored", EXPFILL
}},
10525 { &ei_dhcp_option242_avaya_l2qvlan_invalid
, { "dhcp.option.vendor.avaya.l2qvlan.invalid", PI_PROTOCOL
, PI_ERROR
, "Option 242 (L2QVLAN) invalid", EXPFILL
}},
10526 { &ei_dhcp_option242_avaya_vlantest_invalid
, { "dhcp.option.vendor.avaya.vlantest.invalid", PI_PROTOCOL
, PI_ERROR
, "Option 242 (avaya vlantest) invalid", EXPFILL
}},
10527 { &ei_dhcp_option93_client_arch_ambiguous
, { "dhcp.option.client_architecture.ambiguous", PI_PROTOCOL
, PI_WARN
, "Client Architecture ID may be ambiguous", EXPFILL
}},
10530 static tap_param dhcp_stat_params
[] = {
10531 { PARAM_FILTER
, "filter", "Filter", NULL
, true }
10534 static stat_tap_table_ui dhcp_stat_table
= {
10535 REGISTER_PACKET_STAT_GROUP_UNSORTED
,
10536 "DHCP (BOOTP) Statistics",
10544 array_length(dhcp_stat_fields
), dhcp_stat_fields
,
10545 array_length(dhcp_stat_params
), dhcp_stat_params
,
10550 module_t
*dhcp_module
;
10551 expert_module_t
* expert_dhcp
;
10553 proto_dhcp
= proto_register_protocol("Dynamic Host Configuration Protocol", "DHCP/BOOTP", "dhcp");
10554 proto_register_field_array(proto_dhcp
, hf
, array_length(hf
));
10555 proto_register_alias(proto_dhcp
, "bootp");
10556 proto_register_subtree_array(ett
, array_length(ett
));
10557 dhcp_bootp_tap
= register_tap("dhcp");
10559 expert_dhcp
= expert_register_protocol(proto_dhcp
);
10560 expert_register_field_array(expert_dhcp
, ei
, array_length(ei
));
10562 dhcp_option_table
= register_dissector_table("dhcp.option", "BOOTP Options", proto_dhcp
, FT_UINT8
, BASE_DEC
);
10563 dhcp_vendor_id_subdissector
= register_heur_dissector_list_with_description("dhcp.vendor_id", "DHCP Vendor ID", proto_dhcp
);
10564 dhcp_vendor_info_subdissector
= register_heur_dissector_list_with_description("dhcp.vendor_info", "DHCP Vendor Info", proto_dhcp
);
10565 dhcp_enterprise_class_table
= register_dissector_table("dhcp.enterprise_class", "V-I Vendor Class Enterprise", proto_dhcp
, FT_UINT32
, BASE_DEC
);
10566 dhcp_enterprise_specific_table
= register_dissector_table("dhcp.enterprise", "V-I Vendor Specific Enterprise", proto_dhcp
, FT_UINT32
, BASE_DEC
);
10568 /* register init/cleanup routine to handle the custom dhcp options */
10569 register_init_routine(&dhcp_init_protocol
);
10570 register_cleanup_routine(&dhcp_cleanup_protocol
);
10572 /* Allow dissector to find be found by name. */
10573 dhcp_handle
= register_dissector("dhcp", dissect_dhcp
, proto_dhcp
);
10575 dhcp_module
= prefs_register_protocol(proto_dhcp
, NULL
);
10577 prefs_register_bool_preference(dhcp_module
, "novellserverstring",
10578 "Decode Option 85 as String",
10579 "Novell Servers option 85 can be configured as a string instead of address",
10582 prefs_register_enum_preference(dhcp_module
, "pkt.ccc.protocol_version",
10583 "PacketCable CCC protocol version",
10584 "The PacketCable CCC protocol version",
10585 &pkt_ccc_protocol_version
,
10586 pkt_ccc_protocol_versions
,
10589 prefs_register_uint_preference(dhcp_module
, "pkt.ccc.option",
10590 "PacketCable CCC option",
10591 "Option Number for PacketCable CableLabs Client Configuration",
10595 prefs_register_enum_preference(dhcp_module
, "uuid.endian",
10596 "Endianness of UUID",
10597 "Endianness applied to UUID fields",
10599 dhcp_uuid_endian_vals
,
10602 prefs_register_enum_preference(dhcp_module
, "secs.endian",
10603 "Endianness of seconds elapsed field",
10604 "Endianness applied to seconds elapsed field",
10606 dhcp_secs_endian_vals
,
10609 prefs_register_obsolete_preference(dhcp_module
, "displayasstring");
10611 dhcp_uat
= uat_new("Custom DHCP/BootP Options (Excl. suboptions)",
10612 sizeof(uat_dhcp_record_t
), /* record size */
10613 "custom_bootp", /* filename */
10614 true, /* from_profile */
10615 &uat_dhcp_records
, /* data_ptr */
10616 &num_dhcp_records_uat
, /* numitems_ptr */
10617 UAT_AFFECTS_DISSECTION
, /* affects dissection of packets, but not set of named fields */
10619 uat_dhcp_record_copy_cb
, /* copy callback */
10620 uat_dhcp_record_update_cb
, /* update callback */
10621 uat_dhcp_record_free_cb
, /* free callback */
10622 NULL
, /* post update callback */
10623 NULL
, /* reset callback */
10624 dhcp_uat_flds
); /* UAT field definitions */
10626 prefs_register_uat_preference(dhcp_module
,
10627 "custom_dhcp_table",
10628 "Custom DHCP/BootP Options (Excl. suboptions)",
10629 "Custom DHCP/BootP Options (Excl. suboptions)",
10632 register_stat_tap_table_ui(&dhcp_stat_table
);
10636 proto_reg_handoff_dhcp(void)
10638 range_t
*dhcpopt_basictype_range
;
10640 dissector_add_uint_range_with_preference("udp.port", DHCP_UDP_PORT_RANGE
, dhcp_handle
);
10642 /* Create dissection function handles for all DHCP/BOOTP options */
10643 dhcpopt_basic_handle
= create_dissector_handle( dissect_dhcpopt_basic_type
, proto_dhcp
);
10644 range_convert_str(wmem_epan_scope(), &dhcpopt_basictype_range
, DHCP_OPTION_BASICTYPE_RANGE
, 0xFF);
10645 dissector_add_uint_range("dhcp.option", dhcpopt_basictype_range
, dhcpopt_basic_handle
);
10647 dissector_add_uint("dhcp.option", 21, create_dissector_handle( dissect_dhcpopt_policy_filter
, proto_dhcp
));
10648 dissector_add_uint("dhcp.option", 33, create_dissector_handle( dissect_dhcpopt_static_route
, proto_dhcp
));
10649 dissector_add_uint("dhcp.option", 43, create_dissector_handle( dissect_dhcpopt_vendor_specific_info
, proto_dhcp
));
10650 dissector_add_uint("dhcp.option", 52, create_dissector_handle( dissect_dhcpopt_option_overload
, proto_dhcp
));
10651 dissector_add_uint("dhcp.option", 53, create_dissector_handle( dissect_dhcpopt_dhcp
, proto_dhcp
));
10652 dissector_add_uint("dhcp.option", 55, create_dissector_handle( dissect_dhcpopt_param_request_list
, proto_dhcp
));
10653 dissector_add_uint("dhcp.option", 60, create_dissector_handle( dissect_dhcpopt_vendor_class_identifier
, proto_dhcp
));
10654 dissector_add_uint("dhcp.option", 61, create_dissector_handle( dissect_dhcpopt_client_identifier
, proto_dhcp
));
10655 dissector_add_uint("dhcp.option", 63, create_dissector_handle( dissect_dhcpopt_netware_ip
, proto_dhcp
));
10656 dissector_add_uint("dhcp.option", 77, create_dissector_handle( dissect_dhcpopt_user_class_information
, proto_dhcp
));
10657 dissector_add_uint("dhcp.option", 78, create_dissector_handle( dissect_dhcpopt_slp_directory_agent
, proto_dhcp
));
10658 dissector_add_uint("dhcp.option", 79, create_dissector_handle( dissect_dhcpopt_slp_service_scope
, proto_dhcp
));
10659 dissector_add_uint("dhcp.option", 81, create_dissector_handle( dissect_dhcpopt_client_full_domain_name
, proto_dhcp
));
10660 dissector_add_uint("dhcp.option", 82, create_dissector_handle( dissect_dhcpopt_relay_agent_info
, proto_dhcp
));
10661 dissector_add_uint("dhcp.option", 83, create_dissector_handle( dissect_dhcpopt_isns
, proto_dhcp
));
10662 dissector_add_uint("dhcp.option", 85, create_dissector_handle( dissect_dhcpopt_novell_servers
, proto_dhcp
));
10663 dissector_add_uint("dhcp.option", 90, create_dissector_handle( dissect_dhcpopt_dhcp_authentication
, proto_dhcp
));
10664 dissector_add_uint("dhcp.option", 93, create_dissector_handle( dissect_dhcpopt_client_architecture
, proto_dhcp
));
10665 dissector_add_uint("dhcp.option", 94, create_dissector_handle( dissect_dhcpopt_client_network_interface_id
, proto_dhcp
));
10666 dissector_add_uint("dhcp.option", 97, create_dissector_handle( dissect_dhcpopt_client_identifier_uuid
, proto_dhcp
));
10667 dissector_add_uint("dhcp.option", 99, create_dissector_handle( dissect_dhcpopt_civic_location
, proto_dhcp
));
10668 dissector_add_uint("dhcp.option", 114, create_dissector_handle( dissect_dhcpopt_dhcp_captive_portal
, proto_dhcp
));
10669 dissector_add_uint("dhcp.option", 117, create_dissector_handle( dissect_dhcpopt_name_server_search
, proto_dhcp
));
10670 dissector_add_uint("dhcp.option", 119, create_dissector_handle( dissect_dhcpopt_dhcp_domain_search
, proto_dhcp
));
10671 dissector_add_uint("dhcp.option", 120, create_dissector_handle( dissect_dhcpopt_sip_servers
, proto_dhcp
));
10672 dissector_add_uint("dhcp.option", 121, create_dissector_handle( dissect_dhcpopt_classless_static_route
, proto_dhcp
));
10673 /* The PacketCable CCC option number can vary. Still handled through preference */
10674 dissector_add_uint("dhcp.option", 122, create_dissector_handle( dissect_dhcpopt_packetcable_ccc
, proto_dhcp
));
10676 dissector_add_uint("dhcp.option", 123, create_dissector_handle( dissect_dhcpopt_coordinate_based_location
, proto_dhcp
));
10677 dissector_add_uint("dhcp.option", 124, create_dissector_handle( dissect_dhcpopt_vi_vendor_class
, proto_dhcp
));
10678 dissector_add_uint("dhcp.option", 125, create_dissector_handle( dissect_dhcpopt_vi_vendor_specific_info
, proto_dhcp
));
10679 dissector_add_uint("dhcp.option", 145, create_dissector_handle( dissect_dhcpopt_forcerenew_nonce
, proto_dhcp
));
10680 dissector_add_uint("dhcp.option", 146, create_dissector_handle( dissect_dhcpopt_rdnss
, proto_dhcp
));
10681 dissector_add_uint("dhcp.option", 151, create_dissector_handle( dissect_dhcpopt_bulk_lease_status_code
, proto_dhcp
));
10682 dissector_add_uint("dhcp.option", 152, create_dissector_handle( dissect_dhcpopt_bulk_lease_base_time
, proto_dhcp
));
10683 dissector_add_uint("dhcp.option", 154, create_dissector_handle( dissect_dhcpopt_bulk_lease_query_start
, proto_dhcp
));
10684 dissector_add_uint("dhcp.option", 155, create_dissector_handle( dissect_dhcpopt_bulk_lease_query_end
, proto_dhcp
));
10685 dissector_add_uint("dhcp.option", 158, create_dissector_handle( dissect_dhcpopt_pcp_server
, proto_dhcp
));
10686 dissector_add_uint("dhcp.option", 159, create_dissector_handle( dissect_dhcpopt_portparams
, proto_dhcp
));
10687 dissector_add_uint("dhcp.option", 160, create_dissector_handle( dissect_dhcpopt_dhcp_captive_portal
, proto_dhcp
));
10688 dissector_add_uint("dhcp.option", 212, create_dissector_handle( dissect_dhcpopt_6RD_option
, proto_dhcp
));
10689 dissector_add_uint("dhcp.option", 242, create_dissector_handle( dissect_dhcpopt_avaya_ip_telephone
, proto_dhcp
));
10690 dissector_add_uint("dhcp.option", 249, create_dissector_handle( dissect_dhcpopt_classless_static_route
, proto_dhcp
));
10692 /* Create heuristic dissection for DHCP vendor class id */
10693 heur_dissector_add( "dhcp.vendor_id", dissect_packetcable_mta_vendor_id_heur
, "PacketCable MTA", "packetcable_mta_dhcp", proto_dhcp
, HEURISTIC_ENABLE
);
10694 heur_dissector_add( "dhcp.vendor_id", dissect_packetcable_cm_vendor_id_heur
, "PacketCable CM", "packetcable_cm_dhcp", proto_dhcp
, HEURISTIC_ENABLE
);
10695 heur_dissector_add( "dhcp.vendor_id", dissect_apple_bsdp_vendor_id_heur
, "Apple BSDP", "apple_bsdp_dhcp", proto_dhcp
, HEURISTIC_ENABLE
);
10697 /* Create heuristic dissection for DHCP vendor specific information */
10699 /* Note that this is a rather weak (permissive) heuristic,
10700 it's put first so it ends up at the end of the list, I guess this is OK.
10701 Add any stronger (less permissive) heuristics after this!
10702 XXX - Should we just disable by default? */
10703 heur_dissector_add( "dhcp.vendor_info", dissect_alcatel_lucent_vendor_info_heur
, "Alcatel-Lucent", "alcatel_lucent_dhcp", proto_dhcp
, HEURISTIC_ENABLE
);
10705 heur_dissector_add( "dhcp.vendor_info", dissect_pxeclient_vendor_info_heur
, "PXEClient", "pxeclient_dhcp", proto_dhcp
, HEURISTIC_ENABLE
);
10706 heur_dissector_add( "dhcp.vendor_info", dissect_cablelabs_vendor_info_heur
, "CableLabs", "cablelabs_dhcp", proto_dhcp
, HEURISTIC_ENABLE
);
10707 heur_dissector_add( "dhcp.vendor_info", dissect_aruba_ap_vendor_info_heur
, ARUBA_AP
, "aruba_ap_dhcp", proto_dhcp
, HEURISTIC_ENABLE
);
10708 heur_dissector_add( "dhcp.vendor_info", dissect_aruba_instant_ap_vendor_info_heur
, ARUBA_INSTANT_AP
, "aruba_instant_ap_dhcp", proto_dhcp
, HEURISTIC_ENABLE
);
10709 heur_dissector_add( "dhcp.vendor_info", dissect_apple_bsdp_vendor_info_heur
, "Apple BSDP", "apple_bsdp_info_dhcp", proto_dhcp
, HEURISTIC_ENABLE
);
10710 heur_dissector_add( "dhcp.vendor_info", dissect_aerohive_vendor_info_heur
, "AEROHIVE", "aerohive_info_dhcp", proto_dhcp
, HEURISTIC_ENABLE
);
10711 heur_dissector_add( "dhcp.vendor_info", dissect_cisco_vendor_info_heur
, "Cisco", "cisco_info_dhcp", proto_dhcp
, HEURISTIC_ENABLE
);
10713 /* Create dissection function handles for DHCP Enterprise dissection */
10714 dissector_add_uint("dhcp.enterprise", 4491, create_dissector_handle( dissect_vendor_cl_suboption
, proto_dhcp
));
10715 dissector_add_uint("dhcp.enterprise", 3561, create_dissector_handle( dissect_vendor_tr111_suboption
, proto_dhcp
));
10719 * Editor modelines - https://www.wireshark.org/tools/modelines.html
10722 * c-basic-offset: 8
10724 * indent-tabs-mode: t
10727 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
10728 * :indentSize=8:tabSize=8:noTabs=false: