3 * Definitions and Routines for Mobile IPv6 dissection (RFC 3775)
4 * Copyright 2003 Oy L M Ericsson Ab <teemu.rinta-aho@ericsson.fi>
6 * FMIPv6 (RFC 4068) support added by Martin Andre <andre@clarinet.u-strasbg.fr>
7 * Copyright 2006, Nicolas DICHTEL - 6WIND - <nicolas.dichtel@6wind.com>
9 * Modifications for NEMO packets (RFC 3963): Bruno Deniaud
10 * (bdeniaud@irisa.fr, nono@chez.com) 12 Oct 2005
12 * Wireshark - Network traffic analyzer
13 * By Gerald Combs <gerald@wireshark.org>
14 * Copyright 1998 Gerald Combs
16 * SPDX-License-Identifier: GPL-2.0-or-later
19 * RFC 3775, Mobility Support in IPv6
20 * RFC 4285, Authentication Protocol for Mobile IPv6
21 * RFC 4866, Enhanced Route Optimization for Mobile IPv6
22 * RFC 5026, Mobile IPv6 Bootstrapping in Split Scenario
23 * RFC 5094, Mobile IPv6 Vendor Specific Option
24 * RFC 5096, Mobile IPv6 Experimental Messages
25 * RFC 5213, Proxy Mobile IPv6
26 * RFC 5555, Mobile IPv6 Support for Dual Stack Hosts and Routers (Errata)
27 * RFC 5568. Mobile IPv6 Fast Handovers
28 * RFC 5648, Multiple Care-of Addresses Registration
29 * RFC 5844, IPv4 Support for Proxy Mobile IPv6
30 * RFC 5949, Fast Handovers for Proxy Mobile IPv6
31 * RFC 6275, Mobility Support in IPv6 (Obsoletes RFC 3775).
32 * RFC 6602, Bulk Binding Update Support for Proxy Mobile IPv6
33 * RFC 6705, Localized Routing for Proxy Mobile IPv6
34 * RFC 6757, Access Network Identifier (ANI) Option for Proxy Mobile IPv6
35 * RFC 7148, Prefix Delegation Support for Proxy Mobile IPv6
41 #include <epan/packet.h>
42 #include <epan/to_str.h>
44 #include <epan/ipproto.h>
45 #include <epan/expert.h>
46 #include <epan/sminmpec.h>
47 #include <epan/addr_resolv.h>
49 #include <epan/unit_strings.h>
51 #include <wsutil/array.h>
52 #include <wsutil/str_util.h>
54 #include "packet-gtpv2.h"
55 #include "packet-e164.h"
56 #include "packet-e212.h"
57 #include "packet-gsm_a_common.h"
58 #include "packet-ip.h"
60 void proto_register_mip6(void);
61 void proto_reg_handoff_mip6(void);
63 static dissector_handle_t mip6_handle
;
65 #define UDP_PORT_PMIP6_CNTL 5436
67 static dissector_table_t mip6_vsm_dissector_table
;
69 /* Mobility Header types */
92 /* http://www.iana.org/assignments/mobility-parameters/mobility-parameters.xhtml */
93 static const value_string mip6_mh_types
[] = {
94 {MIP6_BRR
, "Binding Refresh Request"}, /* [RFC3775] */
95 {MIP6_HOTI
, "Home Test Init"}, /* [RFC3775] */
96 {MIP6_MHCOTI
, "Care-of Test Init"}, /* [RFC3775] */
97 {MIP6_HOT
, "Home Test"}, /* [RFC3775] */
98 {MIP6_MHCOT
, "Care-of Test"}, /* [RFC3775] */
99 {MIP6_BU
, "Binding Update"}, /* [RFC3775] */
100 {MIP6_BA
, "Binding Acknowledgement"}, /* [RFC3775] */
101 {MIP6_BE
, "Binding Error"}, /* [RFC3775] */
102 {MIP6_FBU
, "Fast Binding Update"}, /* [RFC5568] */
103 {MIP6_FBACK
, "Fast Binding Acknowledgment"}, /* [RFC5568] */
104 {MIP6_FNA
, "Fast Neighbor Advertisement"}, /* [RFC5568] */
105 {MIP6_EMH
, "Experimental Mobility Header"}, /* [RFC5096] */
106 {MIP6_HAS
, "Home Agent Switch"}, /* [RFC5142] */
107 {MIP6_HB
, "Heartbeat"}, /* [RFC5847] */
108 {MIP6_HI
, "Handover Initiate"}, /* [RFC5568] */
109 {MIP6_HAck
, "Handover Acknowledge"}, /* [RFC5568] */
110 {MIP6_BR
, "Binding Revocation"}, /* [RFC5846] */
111 {MIP6_LRI
, "Localized Routing Initiation"}, /* [RFC6705] */
112 {MIP6_LRA
, "Localized Routing Acknowledgment"}, /* [RFC6705] */
116 static value_string_ext mip6_mh_types_ext
= VALUE_STRING_EXT_INIT(mip6_mh_types
);
118 /* Mobility Option types
119 * http://www.iana.org/assignments/mobility-parameters/mobility-parameters.xhtml
122 MIP6_PAD1
= 0, /* 0 Pad1 [RFC3775] */
123 MIP6_PADN
= 1, /* 1 PadN [RFC3775] */
124 MIP6_BRA
= 2, /* 2 Binding Refresh Advice */
125 MIP6_ACOA
= 3, /* 3 Alternate Care-of Address */
126 MIP6_NI
= 4, /* 4 Nonce Indices */
127 MIP6_AUTD
= 5, /* 5 Authorization Data */
128 MIP6_MNP
= 6, /* 6 Mobile Network Prefix Option */
129 MIP6_MHLLA
= 7, /* 7 Mobility Header Link-Layer Address option [RFC5568] */
130 MIP6_MNID
= 8, /* 8 MN-ID-OPTION-TYPE */
131 MIP6_AUTH
= 9, /* 9 AUTH-OPTION-TYPE */
132 MIP6_MESGID
= 10, /* 10 MESG-ID-OPTION-TYPE [RFC4285] */
133 MIP6_CGAPR
= 11, /* 11 CGA Parameters Request [RFC4866] */
134 MIP6_CGAR
= 12, /* 12 CGA Parameters [RFC4866] */
135 MIP6_SIGN
= 13, /* 13 Signature [RFC4866] */
136 MIP6_PHKT
= 14, /* 14 Permanent Home Keygen Token [RFC4866] */
137 MIP6_MOCOTI
= 15, /* 15 Care-of Test Init [RFC4866] */
138 MIP6_MOCOT
= 16, /* 16 Care-of Test [RFC4866] */
139 MIP6_DNSU
= 17, /* 17 DNS-UPDATE-TYPE [RFC5026] */
140 MIP6_EM
= 18, /* 18 Experimental Mobility Option [RFC5096] */
141 MIP6_VSM
= 19, /* 19 Vendor Specific Mobility Option [RFC5094] */
142 MIP6_SSM
= 20, /* 20 Service Selection Mobility Option [RFC5149] */
143 MIP6_BADFF
= 21, /* 21 Binding Authorization Data for FMIPv6 (BADF) [RFC5568] */
144 MIP6_HNP
= 22, /* 22 Home Network Prefix Option [RFC5213] */
145 MIP6_MOHI
= 23, /* 23 Handoff Indicator Option [RFC5213] */
146 MIP6_ATT
= 24, /* 24 Access Technology Type Option [RFC5213] */
147 MIP6_MNLLI
= 25, /* 25 Mobile Node Link-layer Identifier Option [RFC5213] */
148 MIP6_LLA
= 26, /* 26 Link-local Address Option [RFC5213 */
149 MIP6_TS
= 27, /* 27 Timestamp */
150 MIP6_RC
= 28, /* 28 Restart Counter [RFC5847] */
151 MIP6_IPV4HA
= 29, /* 29 IPv4 Home Address [RFC5555] */
152 MIP6_IPV4AA
= 30, /* 30 IPv4 Address Acknowledgement [RFC5555] */
153 MIP6_NATD
= 31, /* 31 NAT Detection [RFC5555] */
154 MIP6_IPV4COA
= 32, /* 32 IPv4 Care-of Address [RFC5555] */
155 MIP6_GREK
= 33, /* 33 GRE Key Option [RFC5845] */
156 MIP6_MHIPV6AP
= 34, /* 34 Mobility Header IPv6 Address/Prefix [RFC5568] */
157 MIP6_BI
= 35, /* 35 Binding Identifier [RFC5648] */
158 MIP6_IPV4HAREQ
= 36, /* 36 IPv4 Home Address Request [RFC5844] */
159 MIP6_IPV4HAREP
= 37, /* 37 IPv4 Home Address Reply [RFC5844] */
160 MIP6_IPV4DRA
= 38, /* 38 IPv4 Default-Router Address [RFC5844] */
161 MIP6_IPV4DSM
= 39, /* 39 IPv4 DHCP Support Mode [RFC5844] */
162 MIP6_CR
= 40, /* 40 Context Request Option [RFC5949] */
163 MIP6_LMAA
= 41, /* 41 Local Mobility Anchor Address Option [RFC5949] */
164 MIP6_MNLLAII
= 42, /* 42 Mobile Node Link-local Address Interface Identifier Option [RFC5949] */
165 MIP6_TB
= 43, /* 43 Transient Binding [RFC-ietf-mipshop-transient-bce-pmipv6-07] */
166 MIP6_FS
= 44, /* 44 Flow Summary Mobility Option [RFC-ietf-mext-flow-binding-11] */
167 MIP6_FI
= 45, /* 45 Flow Identification Mobility Option [RFC-ietf-mext-flow-binding-11]] */
168 MIP6_RECAP
= 46, /* 46 Redirect-Capability Mobility Option [RFC6463] */
169 MIP6_REDIR
= 47, /* 47 Redirect Mobility Option [RFC6463] */
170 MIP6_LOAD_INF
= 48, /* 48 Load Information Mobility Option [RFC6463] */
171 MIP6_ALT_IP4_CO
= 49, /* 49 Alternate IPv4 Care-of Address [RFC6463] */
172 MIP6_MNG
= 50, /* 50 Mobile Node Group Identifier [RFC6602] */
173 MIP6_MAG_IPv6
= 51, /* 51 MAG IPv6 Address [RFC6705] */
174 MIP6_ACC_NET_ID
= 52, /* 52 Access Network Identifier [RFC6757] */
175 MIP6_DMNP
= 55 /* 55 Delegated Mobile Network Prefix Option [RFC7148] */
179 /* Mobility Option types
180 * http://www.iana.org/assignments/mobility-parameters/mobility-parameters.xhtml
183 static const value_string mip6_mobility_options
[] = {
184 { MIP6_PAD1
, "Pad1"}, /* RFC3775 */
185 { MIP6_PADN
, "PadN"}, /* RFC3775 */
186 { MIP6_BRA
, "Binding Refresh Advice"}, /* RFC3775 */
187 { MIP6_ACOA
, "Alternate Care-of Address"}, /* RFC3775 */
188 { MIP6_NI
, "Nonce Indices"}, /* RFC3775 */
189 { MIP6_AUTD
, "Authorization Data"}, /* RFC3775 */
190 { MIP6_MNP
, "Mobile Network Prefix"}, /* RFC3963 */
191 { MIP6_MHLLA
, "Mobility Header Link-Layer Address"}, /* RFC5568 */
192 { MIP6_MNID
, "Mobile Node Identifier"}, /* RFC4283 MN-ID*/
193 { MIP6_AUTH
, "AUTH"}, /* RFC4285 */
194 { MIP6_MESGID
, "MESG-ID"}, /* RFC4285 */
195 { MIP6_CGAPR
, "CGA Parameters Request"}, /* RFC4866 */
196 { MIP6_CGAR
, "CGA Parameters"}, /* RFC4866 */
197 { MIP6_SIGN
, "Signature"}, /* RFC4866 */
198 { MIP6_PHKT
, "Permanent Home Keygen Token"}, /* RFC4866 */
199 { MIP6_MOCOTI
, "Care-of Test Init"}, /* RFC4866 */
200 { MIP6_MOCOT
, "Care-of Test"}, /* RFC4866 */
201 { MIP6_DNSU
, "DNS-UPDATE-TYPE"}, /* RFC5026 */
202 { MIP6_EM
, "Experimental"}, /* RFC5096 */
203 { MIP6_VSM
, "Vendor Specific"}, /* RFC5094 */
204 { MIP6_SSM
, "Service Selection"}, /* RFC5149 */
205 { MIP6_BADFF
, "Binding Authorization Data for FMIPv6 (BADF)"}, /* RFC5568 */
206 { MIP6_HNP
, "Home Network Prefix"}, /* RFC5213 */
207 { MIP6_MOHI
, "Handoff Indicator"}, /* RFC5213 */
208 { MIP6_ATT
, "Access Technology Type"}, /* RFC5213 */
209 { MIP6_MNLLI
, "Mobile Node Link-layer Identifier"}, /* RFC5213 */
210 { MIP6_LLA
, "Link-local Address"}, /* RFC5213 */
211 { MIP6_TS
, "Timestamp"}, /* RFC5213 */
212 { MIP6_RC
, "Restart Counter"}, /* RFC5847 */
213 { MIP6_IPV4HA
, "IPv4 Home Address"}, /* RFC5555 */
214 { MIP6_IPV4AA
, "IPv4 Address Acknowledgement"}, /* RFC5555 */
215 { MIP6_NATD
, "NAT Detection"}, /* RFC5555 */
216 { MIP6_IPV4COA
, "IPv4 Care-of Address"}, /* RFC5555 */
217 { MIP6_GREK
, "GRE Key"}, /* RFC5845 */
218 { MIP6_MHIPV6AP
, "Mobility Header IPv6 Address/Prefix"}, /* RFC5568 */
219 { MIP6_BI
, "Binding Identifier"}, /* RFC5648 */
220 { MIP6_IPV4HAREQ
, "IPv4 Home Address Request"}, /* RFC5844 */
221 { MIP6_IPV4HAREP
, "IPv4 Home Address Reply"}, /* RFC5844 */
222 { MIP6_IPV4DRA
, "IPv4 Default-Router Address"}, /* RFC5844 */
223 { MIP6_IPV4DSM
, "IPv4 DHCP Support Mode"}, /* RFC5844 */
224 { MIP6_CR
, "Context Request"}, /* RFC5949 */
225 { MIP6_LMAA
, "Local Mobility Anchor Address"}, /* RFC5949 */
226 { MIP6_MNLLAII
, "Mobile Node Link-local Address Interface Identifier"}, /* RFC5949 */
227 { MIP6_TB
, "Transient Binding"}, /* RFC6058 */
228 { MIP6_FS
, "Flow Summary"}, /* RFC6089 */
229 { MIP6_FI
, "Flow Identification"}, /* RFC6089 */
230 { MIP6_RECAP
, "Redirect-Capability"}, /* RFC6463 */
231 { MIP6_REDIR
, "Redirect"}, /* RFC6463 */
232 { MIP6_LOAD_INF
, "Load Information"}, /* RFC6463 */
233 { MIP6_ALT_IP4_CO
, "Alternate IPv4 Care-of Address"}, /* RFC6463 */
234 { MIP6_MNG
, "Mobile Node Group Identifier"}, /* RFC6602 */
235 { MIP6_MAG_IPv6
, "MAG IPv6 Address"}, /* RFC6705 */
236 { MIP6_ACC_NET_ID
, "Access Network Identifier"}, /* RFC6757 */
237 { MIP6_DMNP
, "Delegated Mobile Network Prefix"}, /* RFC7148 */
241 static value_string_ext mip6_mobility_options_ext
= VALUE_STRING_EXT_INIT(mip6_mobility_options
);
244 * Status Codes (DNS Update Mobility Option)
245 * http://www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#mobility-parameters-3
248 static const value_string mip6_dnsu_status_values
[] = {
249 { 0, "DNS update performed"}, /* [RFC5026] */
250 /* 1-127 Unassigned */
251 { 128, "Reason unspecified"}, /* [RFC5026] */
252 { 129, "Administratively prohibited"}, /* [RFC5026] */
253 { 130, "DNS Update Failed"}, /* [RFC5026] */
254 /* 131-255 Unassigned */
259 static const true_false_string mip6_dnsu_r_flag_value
= {
260 "Mobile Node is requesting the HA to remove the DNS entry",
261 "Mobile Node is requesting the HA to create or update a DNS entry"
265 /* Binding Update flag description */
266 static const true_false_string mip6_bu_a_flag_value
= {
267 "Binding Acknowledgement requested",
268 "Binding Acknowledgement not requested"
271 static const true_false_string mip6_bu_h_flag_value
= {
273 "No Home Registration"
276 static const true_false_string mip6_bu_l_flag_value
= {
277 "Link-Local Address Compatibility",
278 "No Link-Local Address Compatibility"
281 static const true_false_string mip6_bu_k_flag_value
= {
282 "Key Management Mobility Compatibility",
283 "No Key Management Mobility Compatibility"
286 static const true_false_string mip6_bu_m_flag_value
= {
287 "MAP Registration Compatibility",
288 "No MAP Registration Compatibility",
291 static const true_false_string mip6_nemo_bu_r_flag_value
= {
292 "Mobile Router Compatibility",
293 "No Mobile Router Compatibility"
296 static const true_false_string pmip6_bu_p_flag_value
= {
297 "Proxy Registration",
298 "No Proxy Registration"
301 static const true_false_string mip6_bu_f_flag_value
= {
302 "Forcing UDP encapsulation used",
303 "No Forcing UDP encapsulation"
306 static const true_false_string pmip6_bu_t_flag_value
= {
307 "TLV-header format used",
308 "No TLV-header format"
311 static const true_false_string pmip6_bu_b_flag_value
= {
312 "Enable bulk binding update support",
313 "Disable bulk binding update support"
316 static const true_false_string pmip6_ba_b_flag_value
= {
317 "Enabled bulk binding update support",
318 "Disabled bulk binding update support"
321 /* Binding Acknowledgement status values
322 * http://www.iana.org/assignments/mobility-parameters/mobility-parameters.xhtml
324 static const value_string mip6_ba_status_value
[] = {
325 { 0, "Binding Update accepted" },
326 { 1, "Accepted but prefix discovery necessary" },
327 { 2, "GRE_KEY_OPTION_NOT_REQUIRED" }, /* [RFC5845] */
328 { 3, "GRE_TUNNELING_BUT_TLV_HEADER_NOT_SUPPORTED" }, /* [RFC5845] */
329 { 4, "MCOA NOTCOMPLETE" }, /* [RFC5648] */
330 { 5, "MCOA RETURNHOME WO/NDP" }, /* [RFC5648] */
331 { 6, "PBU_ACCEPTED_TB_IGNORED_SETTINGSMISMATCH" }, /* [RFC-ietf-mipshop-transient-bce-pmipv6-07] */
332 /* 7-127 Unassigned */
334 { 128, "Reason unspecified" },
335 { 129, "Administratively prohibited" },
336 { 130, "Insufficient resources" },
337 { 131, "Home registration not supported" },
338 { 132, "Not home subnet" },
339 { 133, "Not home agent for this mobile node" },
340 { 134, "Duplicate Address Detection failed" },
341 { 135, "Sequence number out of window" },
342 { 136, "Expired home nonce index" },
343 { 137, "Expired care-of nonce index" },
344 { 138, "Expired nonces" },
345 { 139, "Registration type change disallowed" },
346 { 140, "Mobile Router Operation not permitted" },
347 { 141, "Invalid Prefix" },
348 { 142, "Not Authorized for Prefix" },
349 { 143, "Mobile Network Prefix information unavailable" },
350 { 145, "Proxy Registration not supported by the LMA" },
351 { 146, "Proxy Registrations from this MAG not allowed" },
352 { 147, "No home address for this NAI" },
353 { 148, "Invalid Time Stamp Option" },
354 { 149, "Permanent home keygen token exists" }, /* [RFC4866] */
355 { 150, "Non-null home nonce index expected" }, /* [RFC4866] */
356 { 151, "SERVICE_AUTHORIZATION_FAILED" }, /* [RFC5149] */
357 { 152, "PROXY_REG_NOT_ENABLED" }, /* [RFC5213] */
358 { 153, "NOT_LMA_FOR_THIS_MOBILE_NODE" }, /* [RFC5213] */
359 { 154, "MAG_NOT_AUTHORIZED_FOR_PROXY_REG" }, /* [RFC5213] */
360 { 155, "NOT_AUTHORIZED_FOR_HOME_NETWORK_PREFIX" }, /* [RFC5213] */
361 { 156, "TIMESTAMP_MISMATCH" }, /* [RFC5213] */
362 { 157, "TIMESTAMP_LOWER_THAN_PREV_ACCEPTED" }, /* [RFC5213] */
363 { 158, "MISSING_HOME_NETWORK_PREFIX_OPTION" }, /* [RFC5213] */
364 { 159, "BCE_PBU_PREFIX_SET_DO_NOT_MATCH" }, /* [RFC5213] */
365 { 160, "MISSING_MN_IDENTIFIER_OPTION" }, /* [RFC5213] */
366 { 161, "MISSING_HANDOFF_INDICATOR_OPTION" }, /* [RFC5213] */
367 { 162, "MISSING_ACCESS_TECH_TYPE_OPTION" }, /* [RFC5213] */
368 { 163, "GRE_KEY_OPTION_REQUIRED" }, /* [RFC5845] */
369 { 164, "MCOA MALFORMED" }, /* [RFC5648] */
370 { 165, "MCOA NON-MCOA BINDING EXISTS" }, /* [RFC5648] */
371 { 166, "MCOA PROHIBITED" }, /* [RFC5648] */
372 { 167, "MCOA UNKNOWN COA" }, /* [RFC5648] */
373 { 168, "MCOA BULK REGISTRATION PROHIBITED" }, /* [RFC5648] */
374 { 169, "MCOA SIMULTANEOUS HOME AND FOREIGN PROHIBITED" }, /* [RFC5648] */
375 { 170, "NOT_AUTHORIZED_FOR_IPV4_MOBILITY_SERVICE" }, /* [RFC5844] */
376 { 171, "NOT_AUTHORIZED_FOR_IPV4_HOME_ADDRESS" }, /* [RFC5844] */
377 { 172, "NOT_AUTHORIZED_FOR_IPV6_MOBILITY_SERVICE" }, /* [RFC5844] */
378 { 173, "MULTIPLE_IPV4_HOME_ADDRESS_ASSIGNMENT_NOT_SUPPORTED" }, /* [RFC5844] */
379 { 174, "Invalid Care-of Address" }, /* [RFC6275] */
380 { 175, "INVALID_MOBILE_NODE_GROUP_IDENTIFIER" }, /* [RFC6602] */
381 { 176, "REINIT_SA_WITH_HAC" }, /* [RFC6618] */
382 { 177, "NOT_AUTHORIZED_FOR_DELEGATED_MNP" }, /* [RFC7148] */
383 { 178, "REQUESTED_DMNP_IN_USE" }, /* [RFC7148] */
388 static value_string_ext mip6_ba_status_value_ext
= VALUE_STRING_EXT_INIT(mip6_ba_status_value
);
390 /* Binding Error status values */
391 static const value_string mip6_be_status_value
[] = {
392 { 1, "Unknown binding for Home Address destination option" },
393 { 2, "Unrecognized MH type value" },
397 /* Fast Binding Update flag description */
398 static const true_false_string fmip6_fbu_a_flag_value
= {
399 "Fast Binding Acknowledgement requested",
400 "Fast Binding Acknowledgement not requested"
403 static const true_false_string fmip6_fbu_h_flag_value
= {
405 "No Home Registration"
408 static const true_false_string fmip6_fbu_l_flag_value
= {
409 "Link-Local Address Compatibility",
410 "No Link-Local Address Compatibility"
413 static const true_false_string fmip6_fbu_k_flag_value
= {
414 "Key Management Mobility Compatibility",
415 "No Key Management Mobility Compatibility"
418 /* Fast Binding Acknowledgement status values */
419 static const value_string fmip6_fback_status_value
[] = {
420 { 0, "Fast Binding Update accepted" },
421 { 1, "Accepted but use supplied NCoA" },
422 { 128, "Reason unspecified" },
423 { 129, "Administratively prohibited" },
424 { 130, "Insufficient resources" },
425 { 131, "Incorrect interface identifier length" },
429 /* Heartbeat flag description */
430 static const true_false_string mip6_hb_u_flag_value
= {
431 "Unsolicited Heartbeat Response",
435 static const true_false_string mip6_hb_r_flag_value
= {
436 "Heartbeat Response",
440 /* MH LLA Option code */
441 static const value_string fmip6_lla_optcode_value
[] = {
442 { 2, "Link Layer Address of the MN" },
446 /* Mobile Node Identifier Option code */
447 static const value_string mip6_mnid_subtype_value
[] = {
448 { 1, "Network Access Identifier (NAI)" },
453 /* Enumerating Algorithms */
454 static const value_string mip6_auth_subtype_value
[] = {
455 { 0, "Reserved (not available for assignment)" },
456 { 3, "HMAC_SHA1_SPI" },
457 { 5, "Reserved for use by 3GPP2" },
461 /* mobile network prefix flag description */
462 static const true_false_string mip6_ipv4ha_p_flag_value
= {
463 "mobile network prefix requested",
464 "mobile network prefix not requested"
467 /* NAT Detection Option F flag values */
468 static const true_false_string mip6_natd_f_flag_value
= {
469 "MUST use UDP encapsulation",
470 "Do not use UDP encapsulation"
474 /* NAT Detection Option F flag values */
475 static const true_false_string mip6_ipv4dsm_s_flag_value
= {
480 /* Vendor-Specific Mobility Option */
481 static const value_string mip6_vsm_subtype_value
[] = {
485 /* Vendor-Specific Mobility Option (3GPP TS29.282) */
486 static const value_string mip6_vsm_subtype_3gpp_value
[] = {
487 { 1, "Protocol Configuration Options" },
488 { 2, "3GPP Specific PMIPv6 Error Code" },
489 { 3, "PMIPv6 PDN GW IP Address" },
490 { 4, "PMIPv6 DHCPv4 Address Allocation Procedure Indication" },
491 { 5, "PMIPv6 Fully Qualified PDN Connection Set Identifier" },
492 { 6, "PMIPv6 PDN type indication" },
493 { 7, "Charging ID" },
494 { 8, "Selection Mode" },
495 { 9, "I-WLAN Mobility Access Point Name (APN)" },
496 { 10, "Charging Characteristics" },
497 { 11, "Mobile Equipment Identity (MEI)" },
499 { 13, "Serving Network" },
500 { 14, "APN Restriction" },
501 { 15, "Maximum APN Restriction" },
502 { 16, "Unauthenticated IMSI" },
503 { 17, "PDN Connection ID" },
504 { 18, "PGW Back-Off Time" }, /* 3GPP TS 29.275 [7] */
505 { 19, "Signalling Priority Indication" }, /* 3GPP TS 29.275 [7] */
506 { 20, "Additional Protocol Configuration Options" }, /* 3GPP TS 29.275 [7] */
507 { 21, "Static IP Address Allocation Indications" }, /* 3GPP TS 29.275 [7] */
508 { 22, "MME / SGSN Identifier" }, /* 3GPP TS 29.275 [7] */
509 { 23, "End Marker Notification" }, /* 3GPP TS 29.275 [7] */
510 { 24, "Trusted WLAN Mode Indication" }, /* 3GPP TS 29.275 [7] */
511 { 25, "UE Time Zone" }, /* 3GPP TS 29.275 [7] */
512 { 26, "Access Network Identifier Timestamp" }, /* 3GPP TS 29.275 [7] */
513 { 27, "Logical Access ID" }, /* 3GPP TS 29.275 [7] */
514 { 28, "Origination Time Stamp" }, /* 3GPP TS 29.275 [7] */
515 { 29, "Maximum Wait Time" }, /* 3GPP TS 29.275 [7] */
516 { 30, "TWAN Capabilities" }, /* 3GPP TS 29.275 [7] */
520 static value_string_ext mip6_vsm_subtype_3gpp_value_ext
= VALUE_STRING_EXT_INIT(mip6_vsm_subtype_3gpp_value
);
523 /* Handoff Indicator Option type
524 * http://www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#mobility-parameters-9
526 static const value_string pmip6_hi_opttype_value
[] = {
528 { 1, "Attachment over a new interface" },
529 { 2, "Handoff between two different interfaces of the mobile node" },
530 { 3, "Handoff between mobile access gateways for the same interface" },
531 { 4, "Handoff state unknown" },
532 { 5, "Handoff state not changed (Re-registration)" },
536 /* Access Technology Type Option type
537 * http://www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#mobility-parameters-10
539 static const value_string pmip6_att_att_value
[] = {
544 { 4, "IEEE 802.11a/b/g" },
545 { 5, "IEEE 802.16e" },
548 { 8, "3GPP E-UTRAN" },
549 { 9, "3GPP2 eHRPD" },
550 { 10, "3GPP2 HRPD" },
551 { 11, "3GPP2 1xRTT" },
555 static value_string_ext pmip6_att_att_value_ext
= VALUE_STRING_EXT_INIT(pmip6_att_att_value
);
557 /* IPv4 Home Address Reply Status Codes [RFC5844]
558 * http://www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#home-address-reply
561 static const value_string pmip6_ipv4aa_status_values
[] = {
563 /* 1-127 Unassigned */
566 { 130, "IEEE 802.3" },
567 { 131, "IEEE 802.11a/b/g" },
568 { 132, "IEEE 802.16e" },
569 /* 133-255 Unassigned */
573 /* PMIP6 BRI R. Trigger values */
574 static const value_string pmip6_bri_rtrigger
[] = {
576 { 1, "Administrative Reason"},
577 { 2, "Inter-MAG Handover - same Access Type"},
578 { 3, "Inter-MAG Handover - different Access Type"},
579 { 4, "Inter-MAG Handover - Unknown"},
580 { 5, "User Initiated Session(s) Termination"},
581 { 6, "Access Network Session(s) Termination"},
582 { 7, "Possible Out-of Sync BCE State"},
583 /* 8-127 Unassigned */
584 { 128, "Per-Peer Policy"},
585 { 129, "Revoking Mobility Node Local Policy"},
586 /* 130-249 Unassigned */
587 /* 250-255 Reserved for Testing Purposes Only */
591 /* PMIP6 BRI Status values */
592 static const value_string pmip6_bri_status
[] = {
594 { 0x01, "Partial Success"},
595 { 0x02, "Binding Does NOT Exist"},
596 { 0x03, "IPv4 HoA Binding Does NOT Exist"},
597 { 0x04, "Global Revocation NOT Authorized"},
598 { 0x05, "CAN NOT Identify Binding"},
599 { 0x06, "Revocation Failed, MN is Attached"},
604 /* Handoff Indicator values */
605 static const range_string handoff_indicator
[] = {
606 { 0x00, 0x00, "Reserved" },
607 { 0x01, 0x01, "Attachment over a new interface" },
608 { 0x02, 0x02, "Handoff between two different interfaces of the mobile node" },
609 { 0x03, 0x03, "Handoff between mobile access gateways for the same interface" },
610 { 0x04, 0x04, "Handoff state unknown" },
611 { 0x05, 0x05, "Handoff state not changed (Re-registration)" },
612 { 0x06, 0xff, "Unassigned" },
617 /* Mobile Node Group Identifier Type
618 * http://www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#mobile-node-group-id-type
621 static const value_string mip6_mng_id_type_vals
[] = {
623 { 0x01, "Bulk Binding Update Group"},
627 static const value_string pmip6_lra_status_vals
[] = {
629 { 128, "Localized Routing Not Allowed"},
630 { 129, "MN Not Attached"},
634 /* Delegated Mobile Network Prefix V Flag Values */
635 static const true_false_string mip6_dmnp_v_flag_value
= {
640 /* Message lengths */
641 #define MIP6_BRR_LEN 2
642 #define MIP6_HOTI_LEN 10
643 #define MIP6_COTI_LEN 10
644 #define MIP6_HOT_LEN 18
645 #define MIP6_COT_LEN 18
646 #define MIP6_BU_LEN 6
647 #define MIP6_BA_LEN 6
648 #define MIP6_BE_LEN 18
649 #define FMIP6_FBU_LEN 6
650 #define FMIP6_FBACK_LEN 6
651 #define FMIP6_FNA_LEN 2
652 #define MIP6_EMH_LEN 0
653 #define MIP6_HB_LEN 6
654 #define MIP6_HI_LEN 4
655 #define MIP6_HAck_LEN 4
656 #define MIP6_BR_LEN 6
658 #define PMIP6_BRI_LEN 6
660 /* Field offsets & lengths for mobility headers */
661 #define MIP6_PROTO_OFF 0
662 #define MIP6_HLEN_OFF 1
663 #define MIP6_TYPE_OFF 2
664 #define MIP6_RES_OFF 3
665 #define MIP6_CSUM_OFF 4
666 #define MIP6_DATA_OFF 6
667 #define MIP6_PROTO_LEN 1
668 #define MIP6_HLEN_LEN 1
669 #define MIP6_TYPE_LEN 1
670 #define MIP6_RES_LEN 1
671 #define MIP6_CSUM_LEN 2
673 #define MIP6_BRR_RES_OFF 6
674 #define MIP6_BRR_OPTS_OFF 8
675 #define MIP6_BRR_RES_LEN 2
677 #define MIP6_HOTI_RES_OFF 6
678 #define MIP6_HOTI_COOKIE_OFF 8
679 #define MIP6_HOTI_OPTS_OFF 16
680 #define MIP6_HOTI_RES_LEN 2
681 #define MIP6_HOTI_COOKIE_LEN 8
683 #define MIP6_COTI_RES_OFF 6
684 #define MIP6_COTI_COOKIE_OFF 8
685 #define MIP6_COTI_OPTS_OFF 16
686 #define MIP6_COTI_RES_LEN 2
687 #define MIP6_COTI_COOKIE_LEN 8
689 #define MIP6_HOT_INDEX_OFF 6
690 #define MIP6_HOT_COOKIE_OFF 8
691 #define MIP6_HOT_TOKEN_OFF 16
692 #define MIP6_HOT_OPTS_OFF 24
693 #define MIP6_HOT_INDEX_LEN 2
694 #define MIP6_HOT_COOKIE_LEN 8
695 #define MIP6_HOT_TOKEN_LEN 8
697 #define MIP6_COT_INDEX_OFF 6
698 #define MIP6_COT_COOKIE_OFF 8
699 #define MIP6_COT_TOKEN_OFF 16
700 #define MIP6_COT_OPTS_OFF 24
701 #define MIP6_COT_INDEX_LEN 2
702 #define MIP6_COT_COOKIE_LEN 8
703 #define MIP6_COT_TOKEN_LEN 8
705 #define MIP6_BU_SEQNR_OFF 6
706 #define MIP6_BU_FLAGS_OFF 8
707 #define MIP6_BU_RES_OFF 9
708 #define MIP6_BU_LIFETIME_OFF 10
709 #define MIP6_BU_OPTS_OFF 12
710 #define MIP6_BU_SEQNR_LEN 2
711 #define MIP6_BU_FLAGS_LEN 2
712 #define MIP6_BU_RES_LEN 0
713 #define MIP6_BU_LIFETIME_LEN 2
715 #define MIP6_BA_STATUS_OFF 6
716 #define MIP6_BA_FLAGS_OFF 7
717 #define MIP6_BA_SEQNR_OFF 8
718 #define MIP6_BA_LIFETIME_OFF 10
719 #define MIP6_BA_OPTS_OFF 12
720 #define MIP6_BA_STATUS_LEN 1
721 #define MIP6_BA_FLAGS_LEN 1
722 #define MIP6_BA_SEQNR_LEN 2
723 #define MIP6_BA_LIFETIME_LEN 2
725 #define MIP6_BE_STATUS_OFF 6
726 #define MIP6_BE_RES_OFF 7
727 #define MIP6_BE_HOA_OFF 8
728 #define MIP6_BE_OPTS_OFF 24
729 #define MIP6_BE_STATUS_LEN 1
730 #define MIP6_BE_RES_LEN 1
731 #define MIP6_BE_HOA_LEN 16
733 #define FMIP6_FBU_SEQNR_OFF 6
734 #define FMIP6_FBU_FLAGS_OFF 8
735 #define FMIP6_FBU_RES_OFF 9
736 #define FMIP6_FBU_LIFETIME_OFF 10
737 #define FMIP6_FBU_OPTS_OFF 12
738 #define FMIP6_FBU_SEQNR_LEN 2
739 #define FMIP6_FBU_FLAGS_LEN 1
740 #define FMIP6_FBU_RES_LEN 1
741 #define FMIP6_FBU_LIFETIME_LEN 2
743 #define FMIP6_FBACK_STATUS_OFF 6
744 #define FMIP6_FBACK_FLAGS_OFF 7
745 #define FMIP6_FBACK_SEQNR_OFF 8
746 #define FMIP6_FBACK_LIFETIME_OFF 10
747 #define FMIP6_FBACK_OPTS_OFF 12
748 #define FMIP6_FBACK_STATUS_LEN 1
749 #define FMIP6_FBACK_FLAGS_LEN 1
750 #define FMIP6_FBACK_SEQNR_LEN 2
751 #define FMIP6_FBACK_LIFETIME_LEN 2
753 #define FMIP6_FNA_RES_OFF 6
754 #define FMIP6_FNA_OPTS_OFF 8
755 #define FMIP6_FNA_RES_LEN 2
757 #define MIP6_HB_RES_OFF 6
758 #define MIP6_HB_FLAGS_OFF 7
759 #define MIP6_HB_SEQNR_OFF 8
760 #define MIP6_HB_OPTS_OFF 12
761 #define MIP6_HB_RES_LEN 1
762 #define MIP6_HB_FLAGS_LEN 1
763 #define MIP6_HB_SEQNR_LEN 4
765 #define MIP6_HI_SEQNR_OFF 6
766 #define MIP6_HI_FLAGS_OFF 8
767 #define MIP6_HI_CODE_OFF 9
768 #define MIP6_HI_OPTS_OFF 10
769 #define MIP6_HI_SEQNR_LEN 2
770 #define MIP6_HI_FLAGS_LEN 1
771 #define MIP6_HI_CODE_LEN 1
773 #define MIP6_HAck_SEQNR_OFF 6
774 #define MIP6_HAck_RES_OFF 8
775 #define MIP6_HAck_CODE_OFF 9
776 #define MIP6_HAck_OPTS_OFF 10
777 #define MIP6_HAck_SEQNR_LEN 2
778 #define MIP6_HAck_RES_LEN 1
779 #define MIP6_HAck_CODE_LEN 1
781 #define MIP6_BR_TYPE_OFF 6
782 #define MIP6_BR_TRGR_OFF 7
783 #define MIP6_BR_SEQNR_OFF 8
784 #define MIP6_BR_FLAGS_OFF 10
785 #define MIP6_BR_RES_OFF 11
786 #define MIP6_BR_OPTS_OFF 12
787 #define MIP6_BR_TYPE_LEN 1
788 #define MIP6_BR_TRGR_LEN 1
789 #define MIP6_BR_SEQNR_LEN 2
790 #define MIP6_BR_FLAGS_LEN 1
791 #define MIP6_BR_RES_LEN 1
794 #define PMIP6_BRI_BRTYPE_OFF 6
795 #define PMIP6_BRI_RTRIGGER_OFF 7
796 #define PMIP6_BRI_STATUS_OFF 7
797 #define PMIP6_BRI_SEQNR_OFF 8
798 #define PMIP6_BRI_FLAGS_OFF 10
799 #define PMIP6_BRI_RES_OFF 11
800 #define PMIP6_BRI_BRTYPE_LEN 1
801 #define PMIP6_BRI_RTRIGGER_LEN 1
802 #define PMIP6_BRI_STATUS_LEN 1
803 #define PMIP6_BRI_SEQNR_LEN 2
804 #define PMIP6_BRI_FLAGS_LEN 2
806 /* Field offsets & field and option lengths for mobility options.
807 * The option length does *not* include the option type and length
808 * fields. The field offsets, however, do include the type and
810 #define MIP6_BRA_LEN 2
811 #define MIP6_BRA_RI_LEN 2
813 #define MIP6_ACOA_LEN 16
814 #define MIP6_ACOA_ACOA_LEN 16
816 #define MIP6_NEMO_MNP_LEN 18
817 #define MIP6_NEMO_MNP_MNP_LEN 16
819 #define MIP6_NI_LEN 4
820 #define MIP6_NI_HNI_LEN 2
821 #define MIP6_NI_CNI_LEN 2
823 #define FMIP6_LLA_MINLEN 1
824 #define FMIP6_LLA_OPTCODE_LEN 1
826 #define MIP6_MNID_MINLEN 2
827 #define MIP6_MNID_SUBTYPE_LEN 1
829 #define MIP6_AUTH_MINLEN 6
830 #define MIP6_CGAPR_MINLEN 0
831 #define MIP6_CGAR_MINLEN 1
832 #define MIP6_SIGN_MINLEN 1
833 #define MIP6_PHKT_MINLEN 1
834 #define MIP6_MOCOTI_MINLEN 0
835 #define MIP6_MOCOT_MINLEN 8
836 #define MIP6_DNSU_MINLEN 5
837 #define MIP6_EM_MINLEN 1
838 #define MIP6_MESG_ID_LEN 8
840 #define MIP6_VSM_MINLEN 2
841 #define MIP6_VSM_VID_LEN 4
842 #define MIP6_VSM_SUBTYPE_LEN 1
844 #define MIP6_SSM_MINLEN 1
846 #define MIP6_BADFF_MINLEN 4
848 #define PMIP6_HI_LEN 2
849 #define PMIP6_HI_HI_LEN 1
851 #define PMIP6_ATT_LEN 2
852 #define PMIP6_ATT_ATT_LEN 1
854 #define PMIP6_MNLLI_MIN_LEN 1
856 #define PMIP6_LLA_LEN 16
858 #define PMIP6_TS_LEN 8
860 #define PMIP6_RC_LEN 4
861 #define PMIP6_RC_RC_LEN 4
863 #define MIP6_IPV4HA_LEN 6
864 #define MIP6_IPV4HA_PREFIXL_LEN 1
865 #define MIP6_IPV4HA_HA_LEN 4
867 #define MIP6_IPV4AA_LEN 6
868 #define MIP6_IPV4AA_STATUS_LEN 1
869 #define MIP6_IPV4AA_PREFIXL_LEN 1
870 #define MIP6_IPV4AA_HA_LEN 4
872 #define MIP6_NATD_LEN 6
874 #define MIP6_IPV4COA_LEN 6
876 #define PMIP6_GREK_MIN_LEN 2
877 #define PMIP6_GREK_ID_LEN 4
879 #define MIP6_MHIPV6AP_LEN 18
881 #define MIP6_BI_MIN_LEN 4
883 #define MIP6_IPV4HAREQ_LEN 6
884 #define MIP6_IPV4HAREQ_PREFIXL_LEN 1
885 #define MIP6_IPV4HAREQ_HA_LEN 4
887 #define MIP6_IPV4HAREP_LEN 6
888 #define MIP6_IPV4HAREP_STATUS_LEN 1
889 #define MIP6_IPV4HAREP_PREFIXL_LEN 1
890 #define MIP6_IPV4HAREP_HA_LEN 4
892 #define MIP6_IPV4DRA_LEN 6
893 #define MIP6_IPV4DRA_RES_LEN 2
894 #define MIP6_IPV4DRA_DRA_LEN 4
896 #define MIP6_IPV4DSM_LEN 2
898 #define MIP6_CR_MIN_LEN 4
900 #define MIP6_LMAA_MIN_LEN 6
902 #define MIP6_RECAP_LEN 2
903 #define MIP6_REDIR_MIN_LEN 6
904 #define MIP6_REDIR_FLAG_K 0x8000
905 #define MIP6_REDIR_FLAG_N 0x4000
906 #define MIP6_REDIR_FLAG_RSV 0x3FFF
908 #define MIP6_LOAD_INF_LEN 18
909 #define MIP6_ALT_IP4_LEN 4
911 #define MIP6_MNG_LEN 6
913 #define MIP6_MAG_IPv6_LEN 16
915 #define MIP6_ACC_NET_ID_MIN_LEN 3
917 #define MIP6_DMNP_MIN_LEN 6
919 static dissector_table_t ip_dissector_table
;
921 /* Initialize the protocol and registered header fields */
922 static int proto_mip6
;
923 static int proto_nemo
;
924 static int proto_mip6_option_pad1
;
925 static int proto_mip6_option_padn
;
926 static int proto_mip6_option_bra
;
927 static int proto_mip6_option_acoa
;
928 static int proto_mip6_option_ni
;
929 static int proto_mip6_option_bad_auth
;
930 static int proto_mip6_option_mnp
;
931 static int proto_mip6_option_mhlla
;
932 static int proto_mip6_option_mnid
;
933 static int proto_mip6_option_auth
;
934 static int proto_mip6_option_mseg_id
;
935 static int proto_mip6_option_cgapr
;
936 static int proto_mip6_option_cgar
;
937 static int proto_mip6_option_sign
;
938 static int proto_mip6_option_phkt
;
939 static int proto_mip6_option_coti
;
940 static int proto_mip6_option_cot
;
941 static int proto_mip6_option_dnsu
;
942 static int proto_mip6_option_em
;
943 static int proto_mip6_option_vsm
;
944 static int proto_mip6_option_ssm
;
945 static int proto_mip6_option_badff
;
946 static int proto_mip6_option_hnp
;
947 static int proto_mip6_option_hi
;
948 static int proto_mip6_option_att
;
949 static int proto_mip6_option_mnlli
;
950 static int proto_mip6_option_lla
;
951 static int proto_mip6_option_ts
;
952 static int proto_mip6_option_rc
;
953 static int proto_mip6_option_ipv4ha
;
954 static int proto_mip6_option_ipv4aa
;
955 static int proto_mip6_option_natd
;
956 static int proto_mip6_option_ipv4coa
;
957 static int proto_mip6_option_grek
;
958 static int proto_mip6_option_mhipv6ap
;
959 static int proto_mip6_option_bi
;
960 static int proto_mip6_option_ipv4hareq
;
961 static int proto_mip6_option_ipv4harep
;
962 static int proto_mip6_option_ipv4dra
;
963 static int proto_mip6_option_ipv4dsm
;
964 static int proto_mip6_option_cr
;
965 static int proto_mip6_option_lmaa
;
966 static int proto_mip6_option_recap
;
967 static int proto_mip6_option_redir
;
968 static int proto_mip6_option_load_inf
;
969 static int proto_mip6_option_alt_ip4
;
970 static int proto_mip6_option_mng
;
971 static int proto_mip6_option_mag_ipv6
;
972 static int proto_mip6_option_acc_net_id
;
973 static int proto_mip6_option_dmnp
;
975 static int hf_mip6_proto
;
976 static int hf_mip6_hlen
;
977 static int hf_mip6_mhtype
;
978 static int hf_mip6_reserved
;
979 static int hf_mip6_csum
;
981 static int hf_mip6_hoti_cookie
;
983 static int hf_mip6_coti_cookie
;
985 static int hf_mip6_hot_nindex
;
986 static int hf_mip6_hot_cookie
;
987 static int hf_mip6_hot_token
;
989 static int hf_mip6_cot_nindex
;
990 static int hf_mip6_cot_cookie
;
991 /* static int hf_mip6_cot_token; */
993 static int hf_mip6_bu_seqnr
;
994 static int hf_mip6_bu_a_flag
;
995 static int hf_mip6_bu_h_flag
;
996 static int hf_mip6_bu_l_flag
;
997 static int hf_mip6_bu_k_flag
;
998 static int hf_mip6_bu_m_flag
;
999 static int hf_mip6_nemo_bu_r_flag
;
1000 static int hf_pmip6_bu_p_flag
;
1001 static int hf_mip6_bu_f_flag
;
1002 static int hf_pmip6_bu_t_flag
;
1003 static int hf_pmip6_bu_b_flag
;
1004 static int hf_mip6_bu_lifetime
;
1006 static int hf_mip6_ba_status
;
1007 static int hf_mip6_ba_k_flag
;
1008 static int hf_mip6_nemo_ba_r_flag
;
1009 static int hf_pmip6_ba_p_flag
;
1010 static int hf_pmip6_ba_t_flag
;
1011 static int hf_pmip6_ba_b_flag
;
1012 static int hf_mip6_ba_seqnr
;
1013 static int hf_mip6_ba_lifetime
;
1015 static int hf_mip6_be_status
;
1016 static int hf_mip6_be_haddr
;
1018 static int hf_fmip6_fbu_seqnr
;
1019 static int hf_fmip6_fbu_a_flag
;
1020 static int hf_fmip6_fbu_h_flag
;
1021 static int hf_fmip6_fbu_l_flag
;
1022 static int hf_fmip6_fbu_k_flag
;
1023 static int hf_fmip6_fbu_lifetime
;
1025 static int hf_fmip6_fback_status
;
1026 static int hf_fmip6_fback_k_flag
;
1027 static int hf_fmip6_fback_seqnr
;
1028 static int hf_fmip6_fback_lifetime
;
1030 static int hf_mip6_has_num_addrs
;
1031 static int hf_mip6_has_reserved
;
1032 static int hf_mip6_has_address
;
1034 static int hf_mip6_hb_u_flag
;
1035 static int hf_mip6_hb_r_flag
;
1036 static int hf_mip6_hb_seqnr
;
1038 static int hf_mip6_hi_seqnr
;
1039 static int hf_mip6_hi_s_flag
;
1040 static int hf_mip6_hi_u_flag
;
1041 static int hf_mip6_hi_code
;
1043 static int hf_mip6_hack_seqnr
;
1044 static int hf_mip6_hack_code
;
1046 static int hf_mip6_opt_3gpp_reserved
;
1047 static int hf_mip6_opt_3gpp_flag_m
;
1048 static int hf_mip6_opt_3gpp_spec_pmipv6_err_code
;
1049 static int hf_mip6_opt_3gpp_pdn_gw_ipv4_addr
;
1050 static int hf_mip6_opt_3gpp_pdn_gw_ipv6_addr
;
1051 static int hf_mip6_opt_3gpp_dhcpv4_addr_all_proc_ind
;
1052 static int hf_mip6_opt_3gpp_pdn_type
;
1053 static int hf_mip6_opt_3gpp_pdn_ind_cause
;
1054 static int hf_mip6_opt_3gpp_chg_id
;
1055 static int hf_mip6_opt_3gpp_charging_characteristic
;
1056 static int hf_mip6_opt_3gpp_mei
;
1057 static int hf_mip6_opt_3gpp_msisdn
;
1058 static int hf_mip6_opt_3gpp_apn_rest
;
1059 static int hf_mip6_opt_3gpp_max_apn_rest
;
1060 static int hf_mip6_opt_3gpp_imsi
;
1061 static int hf_mip6_opt_3gpp_pdn_conn_id
;
1062 static int hf_mip6_opt_3gpp_lapi
;
1064 static int hf_mip6_bra_interval
;
1066 static int hf_mip6_acoa_acoa
;
1067 static int hf_mip6_nemo_mnp_mnp
;
1068 static int hf_mip6_nemo_mnp_pfl
;
1070 static int hf_mip6_ni_hni
;
1071 static int hf_mip6_ni_cni
;
1073 static int hf_mip6_bad_auth
;
1075 static int hf_fmip6_lla
;
1076 static int hf_fmip6_lla_optcode
;
1078 static int hf_mip6_mnid_subtype
;
1079 static int hf_mip6_mnid_identifier
;
1080 static int hf_mip6_vsm_vid
;
1081 static int hf_mip6_vsm_subtype
;
1082 static int hf_mip6_vsm_subtype_3gpp
;
1084 static int hf_mip6_opt_ss_identifier
;
1086 static int hf_mip6_opt_badff_spi
;
1087 static int hf_mip6_opt_badff_auth
;
1089 static int hf_mip6_opt_auth_sub_type
;
1090 static int hf_mip6_opt_auth_mobility_spi
;
1091 static int hf_mip6_opt_auth_auth_data
;
1092 static int hf_mip6_opt_mseg_id_timestamp
;
1094 static int hf_mip6_opt_cgar_cga_par
;
1095 static int hf_mip6_opt_sign_sign
;
1096 static int hf_mip6_opt_phkt_phkt
;
1097 static int hf_mip6_opt_mocot_co_keygen_tok
;
1099 static int hf_mip6_opt_dnsu_status
;
1100 static int hf_mip6_opt_dnsu_flag_r
;
1101 static int hf_mip6_opt_dnsu_mn_id
;
1103 static int hf_mip6_opt_em_data
;
1105 static int hf_pmip6_hi_hi
;
1106 static int hf_pmip6_hi_reserved
;
1108 static int hf_pmip6_att_reserved
;
1109 static int hf_pmip6_att_att
;
1111 static int hf_mip6_opt_mnlli_reserved
;
1112 static int hf_mip6_opt_mnlli_lli
;
1114 static int hf_pmip6_timestamp
;
1115 static int hf_pmip6_rc
;
1116 static int hf_mip6_ipv4ha_preflen
;
1117 static int hf_mip6_ipv4ha_p_flag
;
1118 static int hf_mip6_ipv4ha_ha
;
1119 static int hf_mip6_ipv4ha_reserved
;
1120 static int hf_mip6_ipv4aa_status
;
1122 static int hf_mip6_opt_natd_f_flag
;
1123 static int hf_mip6_opt_natd_reserved
;
1124 static int hf_mip6_opt_natd_refresh_t
;
1126 static int hf_mip6_opt_ipv4coa_reserved
;
1127 static int hf_mip6_opt_ipv4coa_addr
;
1129 static int hf_pmip6_gre_key
;
1130 static int hf_mip6_opt_mhipv6ap_opt_code
;
1131 static int hf_mip6_opt_mhipv6ap_prefix_l
;
1132 static int hf_mip6_opt_mhipv6ap_ipv6_address
;
1133 static int hf_mip6_opt_mhipv6ap_ipv6_address_prefix
;
1134 static int hf_mip6_ipv4dra_reserved
;
1135 static int hf_mip6_ipv4dra_dra
;
1137 static int hf_mip6_ipv4dsm_reserved
;
1138 static int hf_mip6_ipv4dsm_s_flag
;
1139 static int hf_mip6_cr_reserved
;
1140 static int hf_mip6_cr_req_type
;
1141 static int hf_mip6_cr_req_length
;
1143 static int hf_mip6_lmaa_opt_code
;
1144 static int hf_mip6_lmaa_reserved
;
1145 static int hf_mip6_lmaa_ipv4
;
1146 static int hf_mip6_lmaa_ipv6
;
1148 static int hf_mip6_mobility_opt
;
1149 static int hf_mip6_opt_len
;
1151 static int hf_mip6_opt_bi_bid
;
1152 static int hf_mip6_opt_bi_status
;
1153 static int hf_mip6_bi_h_flag
;
1154 static int hf_mip6_bi_coa_ipv4
;
1155 static int hf_mip6_bi_coa_ipv6
;
1157 static int hf_mip6_binding_refresh_request
;
1158 static int hf_mip6_unknown_type_data
;
1159 static int hf_mip6_fast_neighbor_advertisement
;
1160 static int hf_mip6_vsm_data
;
1161 static int hf_mip6_vsm_req_data
;
1162 static int hf_mip6_opt_padn
;
1165 static int hf_pmip6_bri_brtype
;
1166 static int hf_pmip6_bri_rtrigger
;
1167 static int hf_pmip6_bri_status
;
1168 static int hf_pmip6_bri_seqnr
;
1169 static int hf_pmip6_bri_ip_flag
;
1170 static int hf_pmip6_bri_ap_flag
;
1171 static int hf_pmip6_bri_iv_flag
;
1172 static int hf_pmip6_bri_av_flag
;
1173 static int hf_pmip6_bri_ig_flag
;
1174 static int hf_pmip6_bri_ag_flag
;
1175 static int hf_pmip6_bri_res
;
1177 static int hf_pmip6_lri_sequence
;
1178 static int hf_pmip6_lri_reserved
;
1179 static int hf_pmip6_lri_lifetime
;
1181 static int hf_pmip6_lra_sequence
;
1182 static int hf_pmip6_lra_u
;
1183 static int hf_pmip6_lra_reserved
;
1184 static int hf_pmip6_lra_status
;
1185 static int hf_pmip6_lra_lifetime
;
1187 static int hf_mip6_opt_recap_reserved
;
1188 static int hf_mip6_opt_redir_k
;
1189 static int hf_mip6_opt_redir_n
;
1190 static int hf_mip6_opt_redir_reserved
;
1191 static int hf_mip6_opt_redir_addr_r2LMA_ipv6
;
1192 static int hf_mip6_opt_redir_addr_r2LMA_ipv4
;
1193 static int hf_mip6_opt_load_inf_priority
;
1194 static int hf_mip6_opt_load_inf_sessions_in_use
;
1195 static int hf_mip6_opt_load_inf_maximum_sessions
;
1196 static int hf_mip6_opt_load_inf_used_capacity
;
1197 static int hf_mip6_opt_load_inf_maximum_capacity
;
1198 static int hf_mip6_opt_alt_ip4
;
1200 /* Mobile Node Group Identifier Optionm */
1201 static int hf_mip6_opt_mng_sub_type
;
1202 static int hf_mip6_opt_mng_reserved
;
1203 static int hf_mip6_opt_mng_mng_id
;
1205 static int hf_mip6_opt_mag_ipv6_reserved
;
1206 static int hf_mip6_opt_mag_ipv6_address_length
;
1207 static int hf_mip6_opt_mag_ipv6_address
;
1209 static int hf_mip6_opt_acc_net_id_sub
;
1210 static int hf_mip6_opt_acc_net_id_sub_opt
;
1211 static int hf_mip6_opt_acc_net_id_sub_opt_len
;
1212 static int hf_mip6_opt_acc_net_id_sub_opt_e_bit
;
1213 static int hf_mip6_opt_acc_net_id_sub_opt_net_name_len
;
1214 static int hf_mip6_opt_acc_net_id_sub_opt_net_name
;
1215 static int hf_mip6_opt_acc_net_id_sub_opt_net_name_data
;
1216 static int hf_mip6_opt_acc_net_id_sub_opt_ap_name_len
;
1217 static int hf_mip6_opt_acc_net_id_sub_opt_ap_name
;
1218 static int hf_mip6_opt_acc_net_id_sub_opt_geo_latitude_degrees
;
1219 static int hf_mip6_opt_acc_net_id_sub_opt_geo_longitude_degrees
;
1220 static int hf_mip6_opt_acc_net_id_sub_opt_op_id_type
;
1221 static int hf_mip6_opt_acc_net_id_sub_opt_op_id
;
1223 static int hf_pmip6_opt_lila_lla
;
1225 /* Delegated Mobile Network Prefix Option */
1226 static int hf_mip6_opt_dmnp_v_flag
;
1227 static int hf_mip6_opt_dmnp_reserved
;
1228 static int hf_mip6_opt_dmnp_prefix_len
;
1229 static int hf_mip6_opt_dmnp_dmnp_ipv4
;
1230 static int hf_mip6_opt_dmnp_dmnp_ipv6
;
1232 /* Initialize the subtree pointers */
1233 static int ett_mip6
;
1234 static int ett_mip6_opt_pad1
;
1235 static int ett_mip6_opt_padn
;
1236 static int ett_mip6_opts
;
1237 static int ett_mip6_opt_bra
;
1238 static int ett_mip6_opt_acoa
;
1239 static int ett_mip6_opt_ni
;
1240 static int ett_mip6_opt_bad
;
1241 static int ett_mip6_nemo_opt_mnp
;
1242 static int ett_fmip6_opt_lla
;
1243 static int ett_mip6_opt_mnid
;
1244 static int ett_mip6_opt_auth
;
1245 static int ett_mip6_opt_mesgid
;
1246 static int ett_mip6_opt_cgapr
;
1247 static int ett_mip6_opt_cgar
;
1248 static int ett_mip6_opt_sign
;
1249 static int ett_mip6_opt_phkt
;
1250 static int ett_mip6_opt_mocoti
;
1251 static int ett_mip6_opt_mocot
;
1252 static int ett_mip6_opt_dnsu
;
1253 static int ett_mip6_opt_em
;
1254 static int ett_mip6_opt_vsm
;
1255 static int ett_mip6_opt_ssm
;
1256 static int ett_mip6_opt_badff
;
1257 static int ett_mip6_opt_unknown
;
1258 static int ett_pmip6_opt_hnp
;
1259 static int ett_pmip6_opt_hi
;
1260 static int ett_pmip6_opt_att
;
1261 static int ett_pmip6_opt_mnlli
;
1262 static int ett_pmip6_opt_lla
;
1263 static int ett_pmip6_opt_ts
;
1264 static int ett_pmip6_opt_rc
;
1265 static int ett_mip6_opt_ipv4ha
;
1266 static int ett_mip6_opt_ipv4aa
;
1267 static int ett_mip6_opt_natd
;
1268 static int ett_mip6_opt_ipv4coa
;
1269 static int ett_pmip6_opt_grek
;
1270 static int ett_pmip6_opt_mhipv6ap
;
1271 static int ett_pmip6_opt_bi
;
1272 static int ett_mip6_opt_ipv4hareq
;
1273 static int ett_mip6_opt_ipv4harep
;
1274 static int ett_mip6_opt_ipv4dra
;
1275 static int ett_mip6_opt_ipv4dsm
;
1276 static int ett_mip6_opt_cr
;
1277 static int ett_mip6_opt_lmaa
;
1278 static int ett_mip6_opt_recap
;
1279 static int ett_mip6_opt_redir
;
1280 static int ett_mip6_opt_load_inf
;
1281 static int ett_mip6_opt_alt_ip4
;
1282 static int ett_mip6_opt_mng
;
1283 static int ett_mip6_opt_mag_ipv6
;
1284 static int ett_mip6_opt_acc_net_id
;
1285 static int ett_mip6_sub_opt_acc_net_id
;
1286 static int ett_mip6_opt_dmnp
;
1288 static expert_field ei_mip6_ie_not_dissected
;
1289 static expert_field ei_mip6_ani_type_not_dissected
;
1290 static expert_field ei_mip6_opt_len_invalid
;
1291 static expert_field ei_mip6_vsm_data_not_dissected
;
1292 static expert_field ei_mip6_bogus_header_length
;
1294 static dissector_table_t mip6_option_table
;
1296 /* Functions to dissect the mobility headers */
1298 dissect_mip6_brr(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1300 proto_tree_add_item(mip6_tree
, hf_mip6_binding_refresh_request
, tvb
, MIP6_DATA_OFF
, MIP6_BRR_LEN
, ENC_NA
);
1302 return MIP6_DATA_OFF
+ MIP6_BRR_LEN
;
1306 dissect_mip6_hoti(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1309 proto_tree
*data_tree
;
1311 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1312 MIP6_HOTI_LEN
, ett_mip6
, NULL
, "Home Test Init");
1314 proto_tree_add_item(data_tree
, hf_mip6_hoti_cookie
, tvb
,
1315 MIP6_HOTI_COOKIE_OFF
, MIP6_HOTI_COOKIE_LEN
, ENC_BIG_ENDIAN
);
1318 return MIP6_DATA_OFF
+ MIP6_HOTI_LEN
;
1322 dissect_mip6_coti(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1325 proto_tree
*data_tree
;
1327 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1328 MIP6_COTI_LEN
, ett_mip6
, NULL
, "Care-of Test Init");
1330 proto_tree_add_item(data_tree
, hf_mip6_coti_cookie
, tvb
,
1331 MIP6_COTI_COOKIE_OFF
, MIP6_COTI_COOKIE_LEN
, ENC_BIG_ENDIAN
);
1334 return MIP6_DATA_OFF
+ MIP6_COTI_LEN
;
1338 dissect_mip6_hot(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1341 proto_tree
*data_tree
;
1343 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1344 MIP6_HOT_LEN
, ett_mip6
, NULL
, "Home Test");
1346 proto_tree_add_item(data_tree
, hf_mip6_hot_nindex
, tvb
,
1347 MIP6_HOT_INDEX_OFF
, MIP6_HOT_INDEX_LEN
, ENC_BIG_ENDIAN
);
1348 proto_tree_add_item(data_tree
, hf_mip6_hot_cookie
, tvb
,
1349 MIP6_HOT_COOKIE_OFF
, MIP6_HOT_COOKIE_LEN
, ENC_BIG_ENDIAN
);
1350 proto_tree_add_item(data_tree
, hf_mip6_hot_token
, tvb
,
1351 MIP6_HOT_TOKEN_OFF
, MIP6_HOT_TOKEN_LEN
, ENC_BIG_ENDIAN
);
1354 return MIP6_DATA_OFF
+ MIP6_HOT_LEN
;
1358 dissect_mip6_cot(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1361 proto_tree
*data_tree
;
1363 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1364 MIP6_COT_LEN
, ett_mip6
, NULL
, "Care-of Test");
1366 proto_tree_add_item(data_tree
, hf_mip6_cot_nindex
, tvb
,
1367 MIP6_COT_INDEX_OFF
, MIP6_COT_INDEX_LEN
, ENC_BIG_ENDIAN
);
1368 proto_tree_add_item(data_tree
, hf_mip6_cot_cookie
, tvb
,
1369 MIP6_COT_COOKIE_OFF
, MIP6_COT_COOKIE_LEN
, ENC_BIG_ENDIAN
);
1370 proto_tree_add_item(data_tree
, hf_mip6_hot_token
, tvb
,
1371 MIP6_COT_TOKEN_OFF
, MIP6_COT_TOKEN_LEN
, ENC_BIG_ENDIAN
);
1374 return MIP6_DATA_OFF
+ MIP6_COT_LEN
;
1380 http://www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#mobility-parameters-11
1393 dissect_mip6_bu(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1396 proto_tree
*data_tree
;
1399 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1400 MIP6_BU_LEN
, ett_mip6
, NULL
, "Binding Update");
1402 proto_tree_add_item(data_tree
, hf_mip6_bu_seqnr
, tvb
,
1403 MIP6_BU_SEQNR_OFF
, MIP6_BU_SEQNR_LEN
, ENC_BIG_ENDIAN
);
1405 proto_tree_add_item(data_tree
, hf_mip6_bu_a_flag
, tvb
,
1406 MIP6_BU_FLAGS_OFF
, MIP6_BU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1407 proto_tree_add_item(data_tree
, hf_mip6_bu_h_flag
, tvb
,
1408 MIP6_BU_FLAGS_OFF
, MIP6_BU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1409 proto_tree_add_item(data_tree
, hf_mip6_bu_l_flag
, tvb
,
1410 MIP6_BU_FLAGS_OFF
, MIP6_BU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1411 proto_tree_add_item(data_tree
, hf_mip6_bu_k_flag
, tvb
,
1412 MIP6_BU_FLAGS_OFF
, MIP6_BU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1413 proto_tree_add_item(data_tree
, hf_mip6_bu_m_flag
, tvb
,
1414 MIP6_BU_FLAGS_OFF
, MIP6_BU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1415 proto_tree_add_item(data_tree
, hf_mip6_nemo_bu_r_flag
, tvb
,
1416 MIP6_BU_FLAGS_OFF
, MIP6_BU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1417 proto_tree_add_item(data_tree
, hf_pmip6_bu_p_flag
, tvb
,
1418 MIP6_BU_FLAGS_OFF
, MIP6_BU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1419 proto_tree_add_item(data_tree
, hf_mip6_bu_f_flag
, tvb
,
1420 MIP6_BU_FLAGS_OFF
, MIP6_BU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1421 proto_tree_add_item(data_tree
, hf_pmip6_bu_t_flag
, tvb
,
1422 MIP6_BU_FLAGS_OFF
, MIP6_BU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1423 proto_tree_add_item(data_tree
, hf_pmip6_bu_b_flag
, tvb
,
1424 MIP6_BU_FLAGS_OFF
, MIP6_BU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1426 if ((tvb_get_uint8(tvb
, MIP6_BU_FLAGS_OFF
) & 0x0004 ) == 0x0004)
1429 lifetime
= tvb_get_ntohs(tvb
, MIP6_BU_LIFETIME_OFF
);
1430 proto_tree_add_uint_format_value(data_tree
, hf_mip6_bu_lifetime
, tvb
,
1431 MIP6_BU_LIFETIME_OFF
,
1432 MIP6_BU_LIFETIME_LEN
, lifetime
,
1434 lifetime
, (long)lifetime
* 4);
1437 return MIP6_DATA_OFF
+ MIP6_BU_LEN
;
1441 dissect_mip6_ba(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1444 proto_tree
*data_tree
;
1447 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1448 MIP6_BA_LEN
, ett_mip6
, NULL
, "Binding Acknowledgement");
1450 proto_tree_add_item(data_tree
, hf_mip6_ba_status
, tvb
,
1451 MIP6_BA_STATUS_OFF
, MIP6_BA_STATUS_LEN
, ENC_BIG_ENDIAN
);
1452 proto_tree_add_item(data_tree
, hf_mip6_ba_k_flag
, tvb
,
1453 MIP6_BA_FLAGS_OFF
, MIP6_BA_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1454 proto_tree_add_item(data_tree
, hf_mip6_nemo_ba_r_flag
, tvb
,
1455 MIP6_BA_FLAGS_OFF
, MIP6_BA_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1456 proto_tree_add_item(data_tree
, hf_pmip6_ba_p_flag
, tvb
,
1457 MIP6_BA_FLAGS_OFF
, MIP6_BA_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1458 proto_tree_add_item(data_tree
, hf_pmip6_ba_t_flag
, tvb
,
1459 MIP6_BA_FLAGS_OFF
, MIP6_BA_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1460 proto_tree_add_item(data_tree
, hf_pmip6_ba_b_flag
, tvb
,
1461 MIP6_BA_FLAGS_OFF
, MIP6_BA_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1462 if ((tvb_get_uint8(tvb
, MIP6_BA_FLAGS_OFF
) & 0x0040 ) == 0x0040)
1465 proto_tree_add_item(data_tree
, hf_mip6_ba_seqnr
, tvb
,
1466 MIP6_BA_SEQNR_OFF
, MIP6_BA_SEQNR_LEN
, ENC_BIG_ENDIAN
);
1468 lifetime
= tvb_get_ntohs(tvb
, MIP6_BA_LIFETIME_OFF
);
1469 proto_tree_add_uint_format_value(data_tree
, hf_mip6_ba_lifetime
, tvb
,
1470 MIP6_BA_LIFETIME_OFF
,
1471 MIP6_BA_LIFETIME_LEN
, lifetime
,
1473 lifetime
, (long)lifetime
* 4);
1476 return MIP6_DATA_OFF
+ MIP6_BA_LEN
;
1480 dissect_mip6_be(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1483 proto_tree
*data_tree
;
1485 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1486 MIP6_BE_LEN
, ett_mip6
, NULL
, "Binding Error");
1488 proto_tree_add_item(data_tree
, hf_mip6_be_status
, tvb
,
1489 MIP6_BE_STATUS_OFF
, MIP6_BE_STATUS_LEN
, ENC_BIG_ENDIAN
);
1490 proto_tree_add_item(data_tree
, hf_mip6_be_haddr
, tvb
,
1491 MIP6_BE_HOA_OFF
, MIP6_BE_HOA_LEN
, ENC_NA
);
1494 return MIP6_DATA_OFF
+ MIP6_BE_LEN
;
1497 /* Home Agent Switch Message */
1500 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1501 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1502 |# of Addresses | Reserved |
1503 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1507 . Home Agent Addresses .
1511 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1515 . Mobility Options .
1519 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1523 dissect_mip6_has(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1525 unsigned num_addrs
, len
;
1527 num_addrs
= tvb_get_uint8(tvb
, MIP6_DATA_OFF
);
1528 len
= 2 + num_addrs
* 16;
1531 proto_tree
*data_tree
;
1535 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1536 len
, ett_mip6
, NULL
, "Home Agent Switch");
1538 proto_tree_add_item(data_tree
, hf_mip6_has_num_addrs
, tvb
,
1539 MIP6_DATA_OFF
, 1, ENC_BIG_ENDIAN
);
1541 proto_tree_add_item(data_tree
, hf_mip6_has_reserved
, tvb
,
1542 MIP6_DATA_OFF
+ 1, 1, ENC_BIG_ENDIAN
);
1544 for (i
= 0, off
= MIP6_DATA_OFF
+ 2; i
< num_addrs
; i
++, off
+= 16) {
1545 proto_tree_add_item(data_tree
, hf_mip6_has_address
, tvb
, off
, 16, ENC_NA
);
1553 dissect_mip6_hb(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1556 proto_tree
*data_tree
;
1558 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1559 MIP6_HB_LEN
, ett_mip6
, NULL
, "Heartbeat");
1561 proto_tree_add_item(data_tree
, hf_mip6_hb_u_flag
, tvb
,
1562 MIP6_HB_FLAGS_OFF
, MIP6_HB_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1563 proto_tree_add_item(data_tree
, hf_mip6_hb_r_flag
, tvb
,
1564 MIP6_HB_FLAGS_OFF
, MIP6_HB_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1566 proto_tree_add_item(data_tree
, hf_mip6_hb_seqnr
, tvb
,
1567 MIP6_HB_SEQNR_OFF
, MIP6_HB_SEQNR_LEN
, ENC_BIG_ENDIAN
);
1571 return MIP6_DATA_OFF
+ MIP6_HB_LEN
;
1575 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1576 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1578 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1579 |S|U| Reserved | Code | |
1580 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ .
1583 . Mobility options .
1586 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1588 Figure 6: Handover Initiate (HI) Message
1592 dissect_mip6_hi(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1595 proto_tree
*data_tree
;
1597 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
, 4, ett_mip6
, NULL
, "Handover Initiate");
1599 proto_tree_add_item(data_tree
, hf_mip6_hi_seqnr
, tvb
,
1600 MIP6_DATA_OFF
, 2, ENC_BIG_ENDIAN
);
1602 proto_tree_add_item(data_tree
, hf_mip6_hi_s_flag
, tvb
,
1603 MIP6_DATA_OFF
+2, 1, ENC_BIG_ENDIAN
);
1604 proto_tree_add_item(data_tree
, hf_mip6_hi_u_flag
, tvb
,
1605 MIP6_DATA_OFF
+2, 1, ENC_BIG_ENDIAN
);
1607 proto_tree_add_item(data_tree
, hf_mip6_hi_code
, tvb
,
1608 MIP6_DATA_OFF
+3, 1, ENC_BIG_ENDIAN
);
1612 return MIP6_DATA_OFF
+ 4;
1617 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1618 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1620 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1621 | Reserved | Code | |
1622 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ .
1625 . Mobility options .
1628 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1630 Figure 7: Handover Acknowledge (HAck) Message
1635 dissect_mip6_hack(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1638 proto_tree
*data_tree
;
1640 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
, 4, ett_mip6
, NULL
, "Handover Acknowledge ");
1642 proto_tree_add_item(data_tree
, hf_mip6_hack_seqnr
, tvb
,
1643 MIP6_DATA_OFF
, 2, ENC_BIG_ENDIAN
);
1646 proto_tree_add_item(data_tree
, hf_mip6_hack_code
, tvb
,
1647 MIP6_DATA_OFF
+3, 1, ENC_BIG_ENDIAN
);
1651 return MIP6_DATA_OFF
+ 4;
1655 dissect_mip6_unknown(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1657 unsigned hdr_len
, data_len
;
1659 hdr_len
= (tvb_get_uint8(tvb
, MIP6_HLEN_OFF
) + 1) * 8;
1660 data_len
= hdr_len
- MIP6_DATA_OFF
;
1662 proto_tree_add_item(mip6_tree
, hf_mip6_unknown_type_data
, tvb
, MIP6_DATA_OFF
, data_len
, ENC_NA
);
1668 dissect_fmip6_fbu(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1671 proto_tree
*data_tree
;
1674 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1675 MIP6_BU_LEN
, ett_mip6
, NULL
, "Fast Binding Update");
1677 proto_tree_add_item(data_tree
, hf_fmip6_fbu_seqnr
, tvb
,
1678 FMIP6_FBU_SEQNR_OFF
, FMIP6_FBU_SEQNR_LEN
, ENC_BIG_ENDIAN
);
1680 proto_tree_add_item(data_tree
, hf_fmip6_fbu_a_flag
, tvb
,
1681 FMIP6_FBU_FLAGS_OFF
, FMIP6_FBU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1682 proto_tree_add_item(data_tree
, hf_fmip6_fbu_h_flag
, tvb
,
1683 FMIP6_FBU_FLAGS_OFF
, FMIP6_FBU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1684 proto_tree_add_item(data_tree
, hf_fmip6_fbu_l_flag
, tvb
,
1685 FMIP6_FBU_FLAGS_OFF
, FMIP6_FBU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1686 proto_tree_add_item(data_tree
, hf_fmip6_fbu_k_flag
, tvb
,
1687 FMIP6_FBU_FLAGS_OFF
, FMIP6_FBU_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1689 lifetime
= tvb_get_ntohs(tvb
, FMIP6_FBU_LIFETIME_OFF
);
1690 proto_tree_add_uint_format_value(data_tree
, hf_fmip6_fbu_lifetime
, tvb
,
1691 FMIP6_FBU_LIFETIME_OFF
,
1692 FMIP6_FBU_LIFETIME_LEN
, lifetime
,
1694 lifetime
, (long)lifetime
* 4);
1697 return MIP6_DATA_OFF
+ FMIP6_FBU_LEN
;
1701 dissect_fmip6_fback(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1704 proto_tree
*data_tree
;
1707 data_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1708 FMIP6_FBACK_LEN
, ett_mip6
, NULL
, "Fast Binding Acknowledgement");
1710 proto_tree_add_item(data_tree
, hf_fmip6_fback_status
, tvb
,
1711 FMIP6_FBACK_STATUS_OFF
, FMIP6_FBACK_STATUS_LEN
, ENC_BIG_ENDIAN
);
1712 proto_tree_add_item(data_tree
, hf_fmip6_fback_k_flag
, tvb
,
1713 FMIP6_FBACK_FLAGS_OFF
, FMIP6_FBACK_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1714 proto_tree_add_item(data_tree
, hf_fmip6_fback_seqnr
, tvb
,
1715 FMIP6_FBACK_SEQNR_OFF
, FMIP6_FBACK_SEQNR_LEN
, ENC_BIG_ENDIAN
);
1716 lifetime
= tvb_get_ntohs(tvb
, FMIP6_FBACK_LIFETIME_OFF
);
1717 proto_tree_add_uint_format_value(data_tree
, hf_fmip6_fback_lifetime
, tvb
,
1718 FMIP6_FBACK_LIFETIME_OFF
,
1719 FMIP6_FBACK_LIFETIME_LEN
, lifetime
,
1721 lifetime
, (long)lifetime
* 4);
1724 return MIP6_DATA_OFF
+ FMIP6_FBACK_LEN
;
1728 dissect_fmip6_fna(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
)
1730 proto_tree_add_item(mip6_tree
, hf_mip6_fast_neighbor_advertisement
, tvb
, MIP6_DATA_OFF
, FMIP6_FNA_LEN
, ENC_NA
);
1732 return MIP6_DATA_OFF
+ FMIP6_FNA_LEN
;
1735 /* PMIP Binding Revocation Indication / Acknowledge */
1737 dissect_pmip6_bri(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo
)
1739 #define INDICATION 1
1740 #define ACKNOWLEDGE 2
1742 proto_tree
*field_tree
;
1745 br_type
= tvb_get_uint8(tvb
, PMIP6_BRI_BRTYPE_OFF
);
1747 /* Branch between BR Indication and BR Acknowledge */
1748 if ( br_type
== INDICATION
)
1750 col_append_str(pinfo
->cinfo
, COL_INFO
, " Indication");
1754 field_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1755 PMIP6_BRI_LEN
, ett_mip6
, NULL
, "Binding Revocation Indication");
1757 proto_tree_add_item(field_tree
, hf_pmip6_bri_brtype
, tvb
,
1758 PMIP6_BRI_BRTYPE_OFF
, PMIP6_BRI_BRTYPE_LEN
, ENC_BIG_ENDIAN
);
1760 proto_tree_add_item(field_tree
, hf_pmip6_bri_rtrigger
, tvb
,
1761 PMIP6_BRI_RTRIGGER_OFF
, PMIP6_BRI_RTRIGGER_LEN
, ENC_BIG_ENDIAN
);
1763 proto_tree_add_item(field_tree
, hf_pmip6_bri_seqnr
, tvb
,
1764 PMIP6_BRI_SEQNR_OFF
, PMIP6_BRI_SEQNR_LEN
, ENC_BIG_ENDIAN
);
1766 proto_tree_add_item(field_tree
, hf_pmip6_bri_ip_flag
, tvb
,
1767 PMIP6_BRI_FLAGS_OFF
, PMIP6_BRI_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1769 proto_tree_add_item(field_tree
, hf_pmip6_bri_iv_flag
, tvb
,
1770 PMIP6_BRI_FLAGS_OFF
, PMIP6_BRI_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1772 proto_tree_add_item(field_tree
, hf_pmip6_bri_ig_flag
, tvb
,
1773 PMIP6_BRI_FLAGS_OFF
, PMIP6_BRI_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1775 proto_tree_add_item(field_tree
, hf_pmip6_bri_res
, tvb
,
1776 PMIP6_BRI_FLAGS_OFF
, PMIP6_BRI_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1778 } else if ( br_type
== ACKNOWLEDGE
) {
1780 col_append_str(pinfo
->cinfo
, COL_INFO
, " Acknowledge");
1784 field_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, MIP6_DATA_OFF
,
1785 PMIP6_BRI_LEN
, ett_mip6
, NULL
, "Binding Revocation Acknowledge");
1787 proto_tree_add_item(field_tree
, hf_pmip6_bri_brtype
, tvb
,
1788 PMIP6_BRI_BRTYPE_OFF
, PMIP6_BRI_BRTYPE_LEN
, ENC_BIG_ENDIAN
);
1790 proto_tree_add_item(field_tree
, hf_pmip6_bri_status
, tvb
,
1791 PMIP6_BRI_STATUS_OFF
, PMIP6_BRI_STATUS_LEN
, ENC_BIG_ENDIAN
);
1793 proto_tree_add_item(field_tree
, hf_pmip6_bri_seqnr
, tvb
,
1794 PMIP6_BRI_SEQNR_OFF
, PMIP6_BRI_SEQNR_LEN
, ENC_BIG_ENDIAN
);
1796 proto_tree_add_item(field_tree
, hf_pmip6_bri_ap_flag
, tvb
,
1797 PMIP6_BRI_FLAGS_OFF
, PMIP6_BRI_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1799 proto_tree_add_item(field_tree
, hf_pmip6_bri_av_flag
, tvb
,
1800 PMIP6_BRI_FLAGS_OFF
, PMIP6_BRI_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1802 proto_tree_add_item(field_tree
, hf_pmip6_bri_ag_flag
, tvb
,
1803 PMIP6_BRI_FLAGS_OFF
, PMIP6_BRI_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1805 proto_tree_add_item(field_tree
, hf_pmip6_bri_res
, tvb
,
1806 PMIP6_BRI_FLAGS_OFF
, PMIP6_BRI_FLAGS_LEN
, ENC_BIG_ENDIAN
);
1810 return MIP6_DATA_OFF
+ PMIP6_BRI_LEN
;
1815 10.1. Localized Routing Initiation (LRI)
1818 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1819 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1821 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1822 | Reserved | Lifetime |
1823 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1826 . Mobility options .
1829 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1834 dissect_pmip6_lri(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
, int offset
)
1836 proto_tree_add_item(mip6_tree
, hf_pmip6_lri_sequence
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1839 proto_tree_add_item(mip6_tree
, hf_pmip6_lri_reserved
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1842 proto_tree_add_item(mip6_tree
, hf_pmip6_lri_lifetime
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1850 10.2. Localized Routing Acknowledgment (LRA)
1853 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1854 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1856 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1857 |U| Reserved | Status | Lifetime |
1858 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1861 . Mobility options .
1864 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1869 dissect_pmip6_lra(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, packet_info
*pinfo _U_
, int offset
)
1871 proto_tree_add_item(mip6_tree
, hf_pmip6_lra_sequence
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1874 proto_tree_add_item(mip6_tree
, hf_pmip6_lra_u
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1875 proto_tree_add_item(mip6_tree
, hf_pmip6_lra_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1878 proto_tree_add_item(mip6_tree
, hf_pmip6_lra_status
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1881 proto_tree_add_item(mip6_tree
, hf_pmip6_lra_lifetime
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
1886 /* Functions to dissect the mobility options */
1887 /*Dissect vendor option 3GPP
1888 * Ref Mobile IPv6 vendor specific option format and usage within 3GPP
1889 * (3GPP TS 29.282 version 10.2.0 Release 10)
1895 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
1896 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1898 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1900 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1901 | Sub-Type | Reserved |M| 3GPP Specific IE Data Fragment
1902 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
1907 dissect_mip6_opt_vsm_3gpp(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data _U_
)
1909 proto_item
*hdr_item
= tree
;
1910 int len
= tvb_reported_length(tvb
);
1912 uint8_t sub_type
, m_flag
;
1919 /* offset points to the sub type */
1920 sub_type
= tvb_get_uint8(tvb
,offset
);
1921 proto_tree_add_item(tree
, hf_mip6_vsm_subtype_3gpp
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1922 proto_item_append_text(hdr_item
, " %s", val_to_str_ext_const(sub_type
, &mip6_vsm_subtype_3gpp_value_ext
, "<unknown>"));
1924 m_flag
= tvb_get_uint8(tvb
,offset
) & 0x01;
1925 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1926 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_flag_m
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1929 /* set len to the length of the data section */
1933 proto_tree_add_expert_format(tree
, pinfo
, &ei_mip6_vsm_data_not_dissected
, tvb
, offset
, len
, "Data fragment, handling not implemented yet");
1937 /* see 3GPP TS 29.275 version 10.5.0 Release 10 */
1939 /* 1, Protocol Configuration Options
1940 * 3GPP PCO data, in the format from 3GPP TS 24.008 [16] subclause 10.5.6.3, starting with octet 3
1941 * de_sm_pco(tvb, tree, pinfo, 0, length, NULL, 0);
1942 * Note needs pinfo->link_dir ?
1945 pinfo
->link_dir
= P2P_DIR_DL
;
1946 de_sm_pco(tvb
, tree
, pinfo
, offset
, len
, NULL
, 0);
1948 /* 2, 3GPP Specific PMIPv6 Error Code */
1950 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_spec_pmipv6_err_code
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1952 /* 3, PMIPv6 PDN GW IP Address
1953 * PDN GW IP address, as specified in subclause 12.1.1.4
1958 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_pdn_gw_ipv4_addr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1959 }else if(len
== 16){
1961 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_pdn_gw_ipv6_addr
, tvb
, offset
, 16, ENC_NA
);
1964 /* 4, PMIPv6 DHCPv4 Address Allocation Procedure Indication
1965 * DHCPv4 Address Allocation Procedure Indication, as specified in subclause 12.1.1.5
1968 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_dhcpv4_addr_all_proc_ind
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1970 /* 5, PMIPv6 Fully Qualified PDN Connection Set Identifier
1971 * FQ-CSID as specified in subclause 12.1.1.2
1974 next_tvb
= tvb_new_subset_length(tvb
, offset
, len
);
1975 dissect_gtpv2_fq_csid(next_tvb
, pinfo
, tree
, hdr_item
, len
, 0, 0, NULL
);
1977 /* 6, PMIPv6 PDN type indication */
1979 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_pdn_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1981 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_pdn_ind_cause
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
1984 * Charging ID as specified in subclause 12.1.1.6
1987 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_chg_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
1988 proto_item_append_text(hdr_item
, " %u", tvb_get_ntohl(tvb
, offset
));
1990 /* 8, Selection Mode */
1992 next_tvb
= tvb_new_subset_length(tvb
, offset
, len
);
1993 dissect_gtpv2_selec_mode(next_tvb
, pinfo
, tree
, hdr_item
, len
, 0, 0, NULL
);
1995 /* 9, I-WLAN Mobility Access Point Name (APN) */
1996 /* 10, Charging Characteristics */
1998 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_charging_characteristic
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2000 /* 11, Mobile Equipment Identity (MEI) */
2002 proto_tree_add_item_ret_display_string(tree
, hf_mip6_opt_3gpp_mei
, tvb
, offset
, len
, ENC_BCD_DIGITS_0_9
|ENC_LITTLE_ENDIAN
, pinfo
->pool
, &mei_str
);
2003 proto_item_append_text(hdr_item
, " %s", mei_str
);
2007 dissect_e164_cc(tvb
, tree
, offset
, E164_ENC_BCD
);
2008 proto_tree_add_item_ret_display_string(tree
, hf_mip6_opt_3gpp_msisdn
, tvb
, offset
, len
, ENC_BCD_DIGITS_0_9
|ENC_LITTLE_ENDIAN
, pinfo
->pool
, &digit_str
);
2009 proto_item_append_text(hdr_item
, " %s", digit_str
);
2011 /* 13, Serving Network */
2013 mcc_mnc_str
= dissect_e212_mcc_mnc_wmem_packet_str(tvb
, pinfo
, tree
, offset
, E212_SERV_NET
, true);
2014 proto_item_append_text(hdr_item
," %s", mcc_mnc_str
);
2016 /* 14, APN Restriction */
2018 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_apn_rest
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2020 /* 15, Maximum APN Restriction */
2022 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_max_apn_rest
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2024 /* 16, Unauthenticated IMSI */
2026 proto_tree_add_item_ret_display_string(tree
, hf_mip6_opt_3gpp_imsi
, tvb
, offset
, len
, ENC_BCD_DIGITS_0_9
|ENC_LITTLE_ENDIAN
, pinfo
->pool
, &imsi_str
);
2027 proto_item_append_text(hdr_item
," %s", imsi_str
);
2029 /* 17, PDN Connection ID */
2031 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_pdn_conn_id
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2033 /* 18, PGW Back-Off Time */
2035 next_tvb
= tvb_new_subset_length(tvb
, offset
, len
);
2036 dissect_gtpv2_epc_timer(next_tvb
, pinfo
, tree
, hdr_item
, len
, 0, 0, NULL
);
2038 /* 19, Signalling Priority Indication */
2040 proto_tree_add_item(tree
, hf_mip6_opt_3gpp_lapi
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2042 /* 20, Additional Protocol Configuration Options
2043 * 12.1.1.19 Additional Protocol Configuration Options
2044 * The Additional Protocol Configuration Options IE contains additional 3GPP protocol configuration options
2045 * information. The IE is in the same format as the PCO IE specified in 3GPP TS 24.008 [16] subclause 10.5.6.3, starting
2049 proto_tree_add_expert(tree
, pinfo
, &ei_mip6_vsm_data_not_dissected
, tvb
, offset
, len
);
2057 mip6_fixed_option_header(proto_tree
* tree
, packet_info
*pinfo
, tvbuff_t
*tvb
, int proto
, int ett
, proto_item
** ti
, unsigned len
, unsigned optlen
)
2059 proto_tree
*field_tree
;
2062 *ti
= proto_tree_add_item(tree
, proto
, tvb
, 0, -1, ENC_NA
);
2063 field_tree
= proto_item_add_subtree(*ti
, ett
);
2065 tf
= proto_tree_add_item(field_tree
, hf_mip6_opt_len
, tvb
, 1, 1, ENC_NA
);
2067 if (len
!= optlen
) {
2068 /* Bogus - option length isn't what it's supposed to be for this option. */
2069 expert_add_info_format(pinfo
, tf
, &ei_mip6_opt_len_invalid
,
2070 "%s (with option length = %u byte%s; should be %u)",
2071 proto_get_protocol_short_name(find_protocol_by_id(proto
)),
2072 len
, plurality(len
, "", "s"), optlen
);
2079 mip6_var_option_header(proto_tree
* tree
, packet_info
*pinfo
, tvbuff_t
*tvb
, int proto
, int ett
, proto_item
** ti
, unsigned len
, unsigned optlen
)
2081 proto_tree
*field_tree
;
2084 *ti
= proto_tree_add_item(tree
, proto
, tvb
, 0, -1, ENC_NA
);
2085 field_tree
= proto_item_add_subtree(*ti
, ett
);
2087 tf
= proto_tree_add_item(field_tree
, hf_mip6_opt_len
, tvb
, 1, 1, ENC_NA
);
2089 expert_add_info_format(pinfo
, tf
, &ei_mip6_opt_len_invalid
,
2090 "%s (with option length = %u byte%s; should be >= %u)", proto_get_protocol_short_name(find_protocol_by_id(proto
)),
2091 len
, plurality(len
, "", "s"), optlen
);
2098 /* 1 PadN [RFC3775] */
2100 dissect_mip6_opt_padn(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2102 proto_tree
* opt_tree
;
2104 int option_len
= tvb_reported_length(tvb
)-2;
2107 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_padn
, ett_mip6_opt_padn
, &ti
, option_len
, 0);
2109 if (option_len
> 0) {
2110 proto_tree_add_item(opt_tree
, hf_mip6_opt_padn
, tvb
, offset
, option_len
, ENC_NA
);
2113 return tvb_captured_length(tvb
);
2116 /* 2 Binding Refresh Advice */
2118 dissect_mip6_opt_bra(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2120 proto_tree
* opt_tree
;
2122 int option_len
= tvb_reported_length(tvb
)-2;
2126 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_bra
, ett_mip6_opt_bra
, &ti
, option_len
, MIP6_BRA_LEN
);
2128 ri
= tvb_get_ntohs(tvb
, offset
);
2129 proto_tree_add_uint_format_value(opt_tree
, hf_mip6_bra_interval
, tvb
,
2131 ri
, "%d (%ld seconds)",
2134 return tvb_captured_length(tvb
);
2137 /*3 Alternate Care-of Address */
2139 dissect_mip6_opt_acoa(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2141 proto_tree
* opt_tree
;
2143 int option_len
= tvb_reported_length(tvb
)-2;
2146 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_acoa
, ett_mip6_opt_acoa
, &ti
, option_len
, MIP6_ACOA_LEN
);
2148 proto_tree_add_item(opt_tree
, hf_mip6_acoa_acoa
, tvb
,
2149 offset
, MIP6_ACOA_ACOA_LEN
, ENC_NA
);
2151 return tvb_captured_length(tvb
);
2154 /* 4 Nonce Indices */
2156 dissect_mip6_opt_ni(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2158 proto_tree
* opt_tree
;
2160 int option_len
= tvb_reported_length(tvb
)-2;
2163 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_ni
, ett_mip6_opt_ni
, &ti
, option_len
, MIP6_NI_LEN
);
2165 proto_tree_add_item(opt_tree
, hf_mip6_ni_hni
, tvb
, offset
, MIP6_NI_HNI_LEN
, ENC_BIG_ENDIAN
);
2166 offset
+= MIP6_NI_HNI_LEN
;
2167 proto_tree_add_item(opt_tree
, hf_mip6_ni_cni
, tvb
, offset
, MIP6_NI_CNI_LEN
, ENC_BIG_ENDIAN
);
2169 return tvb_captured_length(tvb
);
2172 /* 5 Authorization Data */
2174 dissect_mip6_opt_bad(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2176 proto_tree
* opt_tree
;
2178 int option_len
= tvb_reported_length(tvb
)-2;
2181 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_bad_auth
, ett_mip6_opt_bad
, &ti
, option_len
, 0);
2183 proto_tree_add_item(opt_tree
, hf_mip6_bad_auth
, tvb
, offset
, option_len
, ENC_NA
);
2185 return tvb_captured_length(tvb
);
2189 dissect_mip6_network_prefix_option(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, int proto
, int ett
, int optlen
)
2191 proto_tree
* field_tree
;
2193 int option_len
= tvb_reported_length(tvb
)-2;
2195 uint32_t prefix_len
;
2197 field_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto
, ett
, &ti
, option_len
, optlen
);
2199 proto_tree_add_item_ret_uint(field_tree
, hf_mip6_nemo_mnp_pfl
, tvb
,
2200 offset
, 1, ENC_BIG_ENDIAN
, &prefix_len
);
2203 proto_tree_add_item(field_tree
, hf_mip6_nemo_mnp_mnp
, tvb
, offset
, MIP6_NEMO_MNP_MNP_LEN
, ENC_NA
);
2204 proto_item_append_text(ti
, ": %s/%u", tvb_ip6_to_str(pinfo
->pool
, tvb
, offset
), prefix_len
);
2206 return tvb_captured_length(tvb
);
2209 /* 6 Mobile Network Prefix Option */
2211 dissect_mip6_nemo_opt_mnp(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2213 return dissect_mip6_network_prefix_option(tvb
, pinfo
, tree
, proto_mip6_option_mnp
, ett_mip6_nemo_opt_mnp
, MIP6_NEMO_MNP_LEN
);
2216 /* 7 Mobility Header Link-Layer Address option [RFC5568] */
2218 dissect_fmip6_opt_lla(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2220 proto_tree
* opt_tree
;
2222 int option_len
= tvb_reported_length(tvb
)-2;
2225 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_mhlla
, ett_fmip6_opt_lla
, &ti
, option_len
, FMIP6_LLA_MINLEN
);
2227 proto_tree_add_item(opt_tree
, hf_fmip6_lla_optcode
, tvb
,
2228 offset
, FMIP6_LLA_OPTCODE_LEN
, ENC_BIG_ENDIAN
);
2229 offset
+= FMIP6_LLA_OPTCODE_LEN
;
2231 if (option_len
> FMIP6_LLA_OPTCODE_LEN
) {
2232 proto_tree_add_item(opt_tree
, hf_fmip6_lla
, tvb
, offset
, option_len
-FMIP6_LLA_OPTCODE_LEN
, ENC_NA
);
2235 return tvb_captured_length(tvb
);
2238 /* 8 MN-ID-OPTION-TYPE RFC4283 MN-ID
2239 https://tools.ietf.org/html/rfc4283
2242 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2243 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2244 | Option Type | Option Length |
2245 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2246 | Subtype | Identifier ...
2247 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2251 8-bit unsigned integer, representing the length in octets of
2252 the Subtype and Identifier fields.
2256 dissect_mip6_opt_mnid(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2258 proto_tree
* opt_tree
;
2260 int option_len
= tvb_reported_length(tvb
)-2;
2264 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_mnid
, ett_mip6_opt_mnid
, &ti
, option_len
, MIP6_MNID_MINLEN
);
2266 proto_tree_add_item(opt_tree
, hf_mip6_mnid_subtype
, tvb
,
2267 offset
, 1, ENC_BIG_ENDIAN
);
2270 if (option_len
- offset
> 0) {
2271 proto_tree_add_item_ret_string(opt_tree
, hf_mip6_mnid_identifier
, tvb
, offset
, option_len
- 1, ENC_UTF_8
|ENC_NA
, pinfo
->pool
, &str
);
2272 proto_item_append_text(ti
, ": %s", str
);
2275 return tvb_captured_length(tvb
);
2278 /* 9 AUTH-OPTION-TYPE
2279 https://tools.ietf.org/html/rfc4285
2282 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2283 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2284 | Option Type | Option Length | Subtype |
2285 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2287 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2288 | Authentication Data ....
2289 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2290 Figure 2: Mobility Message Authentication Option
2293 dissect_mip6_opt_auth(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2295 proto_tree
* opt_tree
;
2297 int option_len
= tvb_reported_length(tvb
)-2;
2300 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_auth
, ett_mip6_opt_auth
, &ti
, option_len
, MIP6_AUTH_MINLEN
);
2302 proto_tree_add_item(opt_tree
, hf_mip6_opt_auth_sub_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2304 proto_tree_add_item(opt_tree
, hf_mip6_opt_auth_mobility_spi
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2306 proto_tree_add_item(opt_tree
, hf_mip6_opt_auth_auth_data
, tvb
, offset
, option_len
-offset
, ENC_NA
);
2308 return tvb_captured_length(tvb
);
2311 /* 10 MESG-ID-OPTION-TYPE [RFC4285] */
2314 dissect_mip6_opt_mseg_id(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2316 proto_tree
* opt_tree
;
2318 int option_len
= tvb_reported_length(tvb
)-2;
2321 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_mseg_id
, ett_mip6_opt_mesgid
, &ti
, option_len
, MIP6_MESG_ID_LEN
);
2323 proto_tree_add_item(opt_tree
, hf_mip6_opt_mseg_id_timestamp
, tvb
, offset
, 8, ENC_BIG_ENDIAN
);
2325 return tvb_captured_length(tvb
);
2329 /* 11 CGA Parameters Request [RFC4866] */
2330 /* Carries no data */
2332 dissect_mip6_opt_cgapr(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2334 int option_len
= tvb_reported_length(tvb
)-2;
2337 mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_cgapr
, ett_mip6_opt_cgapr
, &ti
, option_len
, MIP6_CGAPR_MINLEN
);
2339 return tvb_captured_length(tvb
);
2342 /* 12 CGA Parameters [RFC4866] */
2344 dissect_mip6_opt_cgar(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2346 proto_tree
* opt_tree
;
2348 int option_len
= tvb_reported_length(tvb
)-2;
2351 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_cgar
, ett_mip6_opt_cgar
, &ti
, option_len
, MIP6_CGAR_MINLEN
);
2353 proto_tree_add_item(opt_tree
, hf_mip6_opt_cgar_cga_par
, tvb
, offset
, option_len
-2, ENC_NA
);
2355 return tvb_captured_length(tvb
);
2358 /* 13 Signature [RFC4866] */
2360 dissect_mip6_opt_sign(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2362 proto_tree
* opt_tree
;
2364 int option_len
= tvb_reported_length(tvb
)-2;
2367 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_sign
, ett_mip6_opt_sign
, &ti
, option_len
, MIP6_SIGN_MINLEN
);
2369 proto_tree_add_item(opt_tree
, hf_mip6_opt_sign_sign
, tvb
, offset
, option_len
-2, ENC_NA
);
2371 return tvb_captured_length(tvb
);
2374 /* 14 Permanent Home Keygen Token [RFC4866] */
2376 dissect_mip6_opt_phkt(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2378 proto_tree
* opt_tree
;
2380 int option_len
= tvb_reported_length(tvb
)-2;
2383 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_phkt
, ett_mip6_opt_phkt
, &ti
, option_len
, MIP6_PHKT_MINLEN
);
2385 proto_tree_add_item(opt_tree
, hf_mip6_opt_phkt_phkt
, tvb
, offset
, option_len
-2, ENC_NA
);
2387 return tvb_captured_length(tvb
);
2390 /* 15 Care-of Test Init [RFC4866]
2391 * No data in this option.
2394 dissect_mip6_opt_coti(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2396 int option_len
= tvb_reported_length(tvb
)-2;
2399 mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_coti
, ett_mip6_opt_mocoti
, &ti
, option_len
, MIP6_MOCOTI_MINLEN
);
2401 return tvb_captured_length(tvb
);
2404 /* 16 Care-of Test [RFC4866] */
2406 dissect_mip6_opt_mocot(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2408 proto_tree
* opt_tree
;
2410 int option_len
= tvb_reported_length(tvb
)-2;
2413 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_cot
, ett_mip6_opt_mocot
, &ti
, option_len
, MIP6_MOCOT_MINLEN
);
2415 proto_tree_add_item(opt_tree
, hf_mip6_opt_mocot_co_keygen_tok
, tvb
, offset
, option_len
-2, ENC_NA
);
2417 return tvb_captured_length(tvb
);
2420 /* 17 DNS-UPDATE-TYPE [RFC5026]
2423 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2424 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2425 | Option Type | Option Length |
2426 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2427 | Status |R| Reserved | MN identity (FQDN) ...
2428 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2432 DNS-UPDATE-TYPE (17)
2436 dissect_mip6_opt_dnsu(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2438 proto_tree
* opt_tree
;
2440 int option_len
= tvb_reported_length(tvb
)-2;
2443 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_dnsu
, ett_mip6_opt_dnsu
, &ti
, option_len
, MIP6_DNSU_MINLEN
);
2445 proto_tree_add_item(opt_tree
, hf_mip6_opt_dnsu_status
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2448 proto_tree_add_item(opt_tree
, hf_mip6_opt_dnsu_flag_r
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2451 proto_tree_add_item(opt_tree
, hf_mip6_opt_dnsu_mn_id
, tvb
, offset
, option_len
-2-2, ENC_NA
);
2453 return tvb_captured_length(tvb
);
2456 /* 18 Experimental Mobility Option [RFC5096] */
2458 dissect_mip6_opt_em(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2460 proto_tree
* opt_tree
;
2462 int option_len
= tvb_reported_length(tvb
)-2;
2465 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_em
, ett_mip6_opt_em
, &ti
, option_len
, MIP6_EM_MINLEN
);
2467 proto_tree_add_item(opt_tree
, hf_mip6_opt_em_data
, tvb
, offset
, option_len
-2, ENC_NA
);
2469 return tvb_captured_length(tvb
);
2472 /* 19 Vendor Specific Mobility Option [RFC5094] */
2476 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2477 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2479 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2481 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2482 | Sub-Type | Data.......
2483 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2487 dissect_mip6_opt_vsm(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2489 proto_tree
* opt_tree
;
2491 int option_len
= tvb_reported_length(tvb
)-2;
2496 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_vsm
, ett_mip6_opt_vsm
, &ti
, option_len
, MIP6_VSM_MINLEN
);
2498 proto_tree_add_item_ret_uint(opt_tree
, hf_mip6_vsm_vid
, tvb
,
2499 offset
, MIP6_VSM_VID_LEN
, ENC_BIG_ENDIAN
, &vendorid
);
2500 proto_item_append_text(ti
, ": %s", enterprises_lookup(vendorid
, "<unknown>"));
2503 next_tvb
= tvb_new_subset_remaining(tvb
, offset
);
2504 if (!dissector_try_uint(mip6_vsm_dissector_table
, vendorid
, next_tvb
, pinfo
, opt_tree
)){
2505 proto_tree_add_item(opt_tree
, hf_mip6_vsm_subtype
, tvb
,
2506 offset
, MIP6_VSM_SUBTYPE_LEN
, ENC_BIG_ENDIAN
);
2509 if (option_len
-offset
> 0){
2510 proto_tree_add_item(opt_tree
, hf_mip6_vsm_data
, tvb
, offset
, option_len
-offset
, ENC_NA
);
2514 return tvb_captured_length(tvb
);
2517 /* 20 Service Selection Mobility Option [RFC5149] */
2520 dissect_mip6_opt_ssm(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2522 proto_tree
* opt_tree
;
2524 int option_len
= tvb_reported_length(tvb
)-2;
2526 uint8_t *apn
= NULL
;
2529 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_ssm
, ett_mip6_opt_ssm
, &ti
, option_len
, MIP6_SSM_MINLEN
);
2530 /* RFC 5149 3. Service Selection Mobility Option
2531 * Identifier: A variable-length encoded service identifier string
2532 * used to identify the requested service. The identifier string
2533 * length is between 1 and 255 octets. This specification allows
2534 * international identifier strings that are based on the use of
2535 * Unicode characters, encoded as UTF-8, and formatted using
2536 * Normalization Form KC (NFKC).
2539 /* 3GPP TS 29.275 version 10.5.0 Release 10, Table 5.1.1.1-2
2540 * Set to the EPS Access Point Name to which the UE
2541 * attaches the new PDN connection.
2542 * The encoding the APN field follows 3GPP TS 23.003
2543 * [12] subclause 9.1 but excluding the trailing zero byte.
2544 * The content of the APN field shall be the full APN with
2545 * both the APN Network Identifier and default APN
2546 * Operator Identifier being present as specified in 3GPP
2547 * TS 23.003 [12] subclauses 9.1.1 and 9.1.2
2549 * NOTE 4: The APN field is not encoded as a dotted string as commonly used in documentation
2552 if (option_len
> 0) {
2553 name_len
= tvb_get_uint8(tvb
, offset
);
2555 /* As can be seen above, RFC 5149 "allows" the use of UTF-8 encoded
2556 * strings, but the 3GPP chose to encode as other APN fields,
2557 * similar to RFC 1035 DNS labels (but without pointer compression).
2558 * As a heuristic, if the first byte is less than 0x20, interpret
2559 * it as a length (rather than a control code) and use APN encoding,
2560 * otherwise interpret as a string.
2562 if (name_len
< 0x20) {
2563 apn
= tvb_get_string_enc(pinfo
->pool
, tvb
, offset
, option_len
, ENC_APN_STR
);
2566 apn
= tvb_get_string_enc(pinfo
->pool
, tvb
, offset
, option_len
, ENC_UTF_8
);
2568 proto_tree_add_string(opt_tree
, hf_mip6_opt_ss_identifier
, tvb
, offset
, option_len
, apn
);
2571 proto_item_append_text(ti
, ": %s", apn
);
2573 return tvb_captured_length(tvb
);
2576 /* 21 Binding Authorization Data for FMIPv6 (BADF) [RFC5568] */
2579 dissect_mip6_opt_badff(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2581 proto_tree
* opt_tree
;
2583 int option_len
= tvb_reported_length(tvb
)-2;
2586 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_badff
, ett_mip6_opt_badff
, &ti
, option_len
, MIP6_BADFF_MINLEN
);
2588 proto_tree_add_item(opt_tree
, hf_mip6_opt_badff_spi
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2590 proto_tree_add_item(opt_tree
, hf_mip6_opt_badff_auth
, tvb
, offset
, option_len
-offset
, ENC_NA
);
2592 return tvb_captured_length(tvb
);
2595 /* 22 Home Network Prefix Option [RFC5213] */
2597 dissect_mip6_opt_hnp(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2599 return dissect_mip6_network_prefix_option(tvb
, pinfo
, tree
, proto_mip6_option_hnp
, ett_pmip6_opt_hnp
, MIP6_NEMO_MNP_LEN
);
2602 /* 23 Handoff Indicator Option [RFC5213] */
2605 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2606 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2607 | Type | Length | Reserved (R) | HI |
2608 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2612 dissect_pmip6_opt_hi(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2614 proto_tree
* opt_tree
;
2616 int option_len
= tvb_reported_length(tvb
)-2;
2620 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_hi
, ett_pmip6_opt_hi
, &ti
, option_len
, PMIP6_HI_LEN
);
2622 proto_tree_add_item(opt_tree
, hf_pmip6_hi_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2625 proto_tree_add_item_ret_uint(opt_tree
, hf_pmip6_hi_hi
, tvb
,
2626 offset
, PMIP6_HI_HI_LEN
, ENC_BIG_ENDIAN
, &hi
);
2628 proto_item_append_text(ti
, ": %s", val_to_str_const(hi
, pmip6_hi_opttype_value
, "<unknown>"));
2630 return tvb_captured_length(tvb
);
2633 /* 24 Access Technology Type Option [RFC5213] */
2636 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2637 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2638 | Type | Length | Reserved (R) | ATT |
2639 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2643 dissect_pmip6_opt_att(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2645 proto_tree
* opt_tree
;
2647 int option_len
= tvb_reported_length(tvb
)-2;
2651 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_att
, ett_pmip6_opt_att
, &ti
, option_len
, PMIP6_ATT_LEN
);
2653 proto_tree_add_item(opt_tree
, hf_pmip6_att_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2656 att
= tvb_get_uint8(tvb
,offset
);
2657 proto_tree_add_item_ret_uint(opt_tree
, hf_pmip6_att_att
, tvb
,
2658 offset
, PMIP6_ATT_ATT_LEN
, ENC_BIG_ENDIAN
, &att
);
2659 proto_item_append_text(ti
, ": %s", val_to_str_ext_const(att
, &pmip6_att_att_value_ext
, "<unknown>"));
2661 return tvb_captured_length(tvb
);
2664 /* 25 Mobile Node Link-layer Identifier Option [RFC5213] */
2667 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2668 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2669 | Type | Length | Reserved |
2670 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2672 + Link-layer Identifier +
2675 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2679 dissect_pmip6_opt_mnlli(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void * data _U_
)
2681 proto_tree
* opt_tree
;
2683 int option_len
= tvb_reported_length(tvb
)-2;
2686 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_mnlli
, ett_pmip6_opt_mnlli
, &ti
, option_len
, PMIP6_MNLLI_MIN_LEN
);
2688 proto_tree_add_item(opt_tree
, hf_mip6_opt_mnlli_reserved
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2690 proto_tree_add_item(opt_tree
, hf_mip6_opt_mnlli_lli
, tvb
, offset
, option_len
-2, ENC_NA
);
2692 return tvb_captured_length(tvb
);
2695 /* 26 Link-local Address Option [RFC5213 */
2698 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2699 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2701 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2705 + Link-local Address +
2709 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2713 dissect_pmip6_opt_lla(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void * data _U_
)
2715 proto_tree
* field_tree
;
2717 int option_len
= tvb_reported_length(tvb
)-2;
2720 field_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_lla
, ett_pmip6_opt_lla
, &ti
, option_len
, PMIP6_LLA_LEN
);
2722 proto_tree_add_item(field_tree
, hf_pmip6_opt_lila_lla
, tvb
, offset
, 16, ENC_NA
);
2724 return tvb_captured_length(tvb
);
2730 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2731 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2733 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2737 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2741 A 64-bit unsigned integer field containing a timestamp. The
2742 value indicates the number of seconds since January 1, 1970,
2743 00:00 UTC, by using a fixed point format. In this format, the
2744 integer number of seconds is contained in the first 48 bits of
2745 the field, and the remaining 16 bits indicate the number of
2746 1/65536 fractions of a second.
2750 dissect_pmip6_opt_ts(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void * data _U_
)
2752 proto_tree
* opt_tree
;
2754 int option_len
= tvb_reported_length(tvb
)-2;
2758 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_ts
, ett_pmip6_opt_ts
, &ti
, option_len
, PMIP6_TS_LEN
);
2760 proto_tree_add_item_ret_time_string(opt_tree
, hf_pmip6_timestamp
, tvb
, offset
, 8, ENC_TIME_MIP6
|ENC_BIG_ENDIAN
, pinfo
->pool
, &str
);
2761 proto_item_append_text(ti
, ": %s", str
);
2763 return tvb_captured_length(tvb
);
2766 /* 28 Restart Counter [RFC5847] */
2768 dissect_pmip6_opt_rc(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void * data _U_
)
2770 proto_tree
* opt_tree
;
2772 int option_len
= tvb_reported_length(tvb
)-2;
2775 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_rc
, ett_pmip6_opt_rc
, &ti
, option_len
, PMIP6_RC_LEN
);
2777 proto_tree_add_item(opt_tree
, hf_pmip6_rc
, tvb
,
2778 offset
, PMIP6_RC_RC_LEN
, ENC_BIG_ENDIAN
);
2780 return tvb_captured_length(tvb
);
2783 /* 29 IPv4 Home Address [RFC5555] */
2785 dissect_pmip6_opt_ipv4ha(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void * data _U_
)
2787 proto_tree
* field_tree
;
2789 int option_len
= tvb_reported_length(tvb
)-2;
2792 field_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_ipv4ha
, ett_mip6_opt_ipv4ha
, &ti
, option_len
, MIP6_IPV4HA_LEN
);
2794 proto_tree_add_item(field_tree
, hf_mip6_ipv4ha_preflen
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2795 proto_tree_add_item(field_tree
, hf_mip6_ipv4ha_p_flag
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2798 proto_tree_add_item(field_tree
, hf_mip6_ipv4ha_ha
, tvb
,
2799 offset
, MIP6_IPV4HA_HA_LEN
, ENC_BIG_ENDIAN
);
2801 return tvb_captured_length(tvb
);
2804 /* 30 IPv4 Address Acknowledgement [RFC5555] */
2806 dissect_pmip6_opt_ipv4aa(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void * data _U_
)
2808 proto_tree
* field_tree
;
2810 int option_len
= tvb_reported_length(tvb
)-2;
2813 field_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_ipv4aa
, ett_mip6_opt_ipv4aa
, &ti
, option_len
, MIP6_IPV4AA_LEN
);
2815 proto_tree_add_item(field_tree
, hf_mip6_ipv4aa_status
, tvb
,
2816 offset
, MIP6_IPV4AA_STATUS_LEN
, ENC_BIG_ENDIAN
);
2817 offset
+= MIP6_IPV4AA_STATUS_LEN
;
2819 proto_tree_add_item(field_tree
, hf_mip6_ipv4ha_preflen
, tvb
,
2820 offset
, MIP6_IPV4AA_PREFIXL_LEN
, ENC_BIG_ENDIAN
);
2821 offset
+= MIP6_IPV4AA_PREFIXL_LEN
;
2823 proto_tree_add_item(field_tree
, hf_mip6_ipv4ha_ha
, tvb
,
2824 offset
, MIP6_IPV4AA_HA_LEN
, ENC_BIG_ENDIAN
);
2826 return tvb_captured_length(tvb
);
2829 /* 31 NAT Detection [RFC5555] */
2832 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2833 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2834 | Type | Length |F| Reserved |
2835 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2837 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2841 dissect_pmip6_opt_natd(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void * data _U_
)
2843 proto_tree
* opt_tree
;
2845 int option_len
= tvb_reported_length(tvb
)-2;
2848 uint32_t refresh_time
;
2850 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_natd
, ett_mip6_opt_natd
, &ti
, option_len
, MIP6_NATD_LEN
);
2852 proto_tree_add_item(opt_tree
, hf_mip6_opt_natd_f_flag
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2853 proto_tree_add_item(opt_tree
, hf_mip6_opt_natd_reserved
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2855 item
= proto_tree_add_item_ret_uint(opt_tree
, hf_mip6_opt_natd_refresh_t
, tvb
, offset
, 4, ENC_BIG_ENDIAN
, &refresh_time
);
2856 if (refresh_time
== 0) {
2857 proto_item_append_text(item
, " (Ignore)");
2859 if (refresh_time
== 0xffffffff) {
2860 proto_item_append_text(item
, " (keepalives are not needed, no NAT detected)");
2863 return tvb_captured_length(tvb
);
2866 /* 32 IPv4 Care-of Address [RFC5555] */
2869 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2870 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2871 | Type | Length | Reserved |
2872 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2873 | IPv4 Care-of address |
2874 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2879 dissect_pmip6_opt_ipv4coa(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void * data _U_
)
2881 proto_tree
* opt_tree
;
2883 int option_len
= tvb_reported_length(tvb
)-2;
2886 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_ipv4coa
, ett_mip6_opt_ipv4coa
, &ti
, option_len
, MIP6_IPV4COA_LEN
);
2888 proto_tree_add_item(opt_tree
, hf_mip6_opt_ipv4coa_reserved
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2890 proto_tree_add_item(opt_tree
, hf_mip6_opt_ipv4coa_addr
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
2892 return tvb_captured_length(tvb
);
2895 /* 33 GRE Key Option [RFC5845] */
2898 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2899 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2900 | Type | Length | Reserved |
2901 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2902 | GRE Key Identifier |
2903 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2907 dissect_pmip6_opt_grek(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void * data _U_
)
2909 proto_tree
* opt_tree
;
2911 int option_len
= tvb_reported_length(tvb
)-2;
2915 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_grek
, ett_pmip6_opt_grek
, &ti
, option_len
, PMIP6_GREK_MIN_LEN
);
2917 proto_tree_add_item(opt_tree
, hf_mip6_ipv4dra_reserved
, tvb
,
2918 offset
, 2, ENC_BIG_ENDIAN
);
2920 if (option_len
== 6) {
2922 proto_tree_add_item_ret_uint(opt_tree
, hf_pmip6_gre_key
, tvb
,
2923 offset
, PMIP6_GREK_ID_LEN
, ENC_BIG_ENDIAN
, &key
);
2924 proto_item_append_text(ti
, ": %u", key
);
2927 return tvb_captured_length(tvb
);
2930 /* 34 Mobility Header IPv6 Address/Prefix [RFC5568]
2932 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2933 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2934 | Type | Length | Option-Code | Prefix Length |
2935 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2939 + IPv6 Address/Prefix +
2943 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2948 dissect_pmip6_opt_mhipv6ap(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void * data _U_
)
2950 proto_tree
* opt_tree
;
2952 int option_len
= tvb_reported_length(tvb
)-2;
2956 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_mhipv6ap
, ett_pmip6_opt_mhipv6ap
, &ti
, option_len
, MIP6_MHIPV6AP_LEN
);
2958 proto_tree_add_item(opt_tree
, hf_mip6_opt_mhipv6ap_opt_code
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2961 prefix_l
= tvb_get_uint8(tvb
,offset
);
2962 proto_tree_add_item(opt_tree
, hf_mip6_opt_mhipv6ap_prefix_l
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
2965 proto_tree_add_item(opt_tree
, hf_mip6_opt_mhipv6ap_ipv6_address
, tvb
, offset
, 16, ENC_NA
);
2966 ti
= proto_tree_add_string(opt_tree
, hf_mip6_opt_mhipv6ap_ipv6_address_prefix
, tvb
, offset
-1, 16+1, tvb_ip6_to_str(pinfo
->pool
, tvb
, offset
));
2967 proto_item_append_text(ti
, "/%u", prefix_l
);
2968 proto_item_set_generated(ti
);
2970 return tvb_captured_length(tvb
);
2972 /* 35 Binding Identifier [RFC5648] */
2974 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
2975 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2976 | Type = 35 | Length |
2977 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2978 | Binding ID (BID) | Status |H| Reserved |
2979 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-------------------------------+
2981 : IPv4 or IPv6 care-of address (CoA) :
2983 +---------------------------------------------------------------+
2987 dissect_pmip6_opt_bi(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
2989 proto_tree
* opt_tree
;
2991 int option_len
= tvb_reported_length(tvb
)-2;
2994 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_bi
, ett_pmip6_opt_bi
, &ti
, option_len
, MIP6_BI_MIN_LEN
);
2996 proto_tree_add_item(opt_tree
, hf_mip6_opt_bi_bid
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
2999 proto_tree_add_item(opt_tree
, hf_mip6_opt_bi_status
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3002 proto_tree_add_item(opt_tree
, hf_mip6_bi_h_flag
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3005 if (option_len
== 8) {
3007 proto_tree_add_item(opt_tree
, hf_mip6_bi_coa_ipv4
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3008 } else if (option_len
== 20) {
3010 proto_tree_add_item(opt_tree
, hf_mip6_bi_coa_ipv6
, tvb
, offset
, 16, ENC_NA
);
3013 return tvb_captured_length(tvb
);
3017 /* 36 IPv4 Home Address Request [RFC5844] */
3020 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3021 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3022 | Type | Length |Prefix-len | Reserved |
3023 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3024 | IPv4 home address |
3025 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3029 dissect_pmip6_opt_ipv4hareq(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3031 proto_tree
* opt_tree
;
3033 int option_len
= tvb_reported_length(tvb
)-2;
3038 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_ipv4hareq
, ett_mip6_opt_ipv4hareq
, &ti
, option_len
, MIP6_IPV4HAREQ_LEN
);
3040 proto_tree_add_item(opt_tree
, hf_mip6_ipv4ha_preflen
, tvb
,
3041 offset
, 1, ENC_BIG_ENDIAN
);
3045 proto_tree_add_item(opt_tree
, hf_mip6_ipv4ha_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3048 /* Field is an IPv4 address, so can't be retrieved by proto_tree_add_item_ret_uint */
3049 dword
= tvb_get_ntohl(tvb
,offset
);
3050 item
= proto_tree_add_item(opt_tree
, hf_mip6_ipv4ha_ha
, tvb
,
3051 offset
, MIP6_IPV4HAREQ_HA_LEN
, ENC_BIG_ENDIAN
);
3053 proto_item_append_text(item
, " - Request that the local mobility anchor perform the address allocation");
3055 proto_item_append_text(ti
, ": %s", tvb_ip_to_str(pinfo
->pool
, tvb
,offset
));
3057 return tvb_captured_length(tvb
);
3060 /* 37 IPv4 Home Address Reply [RFC5844] */
3063 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3064 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3065 | Type | Length | Status |Pref-len |Res|
3066 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3067 | IPv4 home address |
3068 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3072 dissect_pmip6_opt_ipv4harep(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3074 proto_tree
* opt_tree
;
3076 int option_len
= tvb_reported_length(tvb
)-2;
3080 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_ipv4harep
, ett_mip6_opt_ipv4harep
, &ti
, option_len
, MIP6_IPV4HAREP_LEN
);
3082 proto_tree_add_item_ret_uint(opt_tree
, hf_mip6_ipv4aa_status
, tvb
,
3083 offset
, MIP6_IPV4HAREP_STATUS_LEN
, ENC_BIG_ENDIAN
, &status
);
3084 proto_item_append_text(ti
, ": %s ", val_to_str_const(status
, pmip6_ipv4aa_status_values
, "<unknown>"));
3087 proto_tree_add_item(opt_tree
, hf_mip6_ipv4ha_preflen
, tvb
,
3088 offset
, MIP6_IPV4HAREP_PREFIXL_LEN
, ENC_BIG_ENDIAN
);
3091 proto_tree_add_item(opt_tree
, hf_mip6_ipv4ha_ha
, tvb
,
3092 offset
, MIP6_IPV4HAREP_HA_LEN
, ENC_BIG_ENDIAN
);
3094 proto_item_append_text(ti
, ": %s", tvb_ip_to_str(pinfo
->pool
, tvb
,offset
));
3096 return tvb_captured_length(tvb
);
3099 /* 38 IPv4 Default-Router Address [RFC5844] */
3102 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3103 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3104 | Type | Length | Reserved (R) |
3105 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3106 | IPv4 Default-Router Address |
3107 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3111 dissect_pmip6_opt_ipv4dra(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3113 proto_tree
* opt_tree
;
3115 int option_len
= tvb_reported_length(tvb
)-2;
3118 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_ipv4dra
, ett_mip6_opt_ipv4dra
, &ti
, option_len
, MIP6_IPV4DRA_LEN
);
3120 proto_tree_add_item(opt_tree
, hf_mip6_ipv4dra_reserved
, tvb
,
3121 offset
, 2, ENC_BIG_ENDIAN
);
3124 proto_tree_add_item(opt_tree
, hf_mip6_ipv4dra_dra
, tvb
,
3125 offset
, MIP6_IPV4DRA_DRA_LEN
, ENC_BIG_ENDIAN
);
3127 proto_item_append_text(ti
, ": %s", tvb_ip_to_str(pinfo
->pool
, tvb
,offset
));
3129 return tvb_captured_length(tvb
);
3132 /* 39 IPv4 DHCP Support Mode [RFC5844] */
3135 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3136 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3137 | Type | Length | Reserved (R) |S|
3138 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3143 dissect_pmip6_opt_ipv4dsm(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3145 proto_tree
* opt_tree
;
3147 int option_len
= tvb_reported_length(tvb
)-2;
3150 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_ipv4dsm
, ett_mip6_opt_ipv4dsm
, &ti
, option_len
, MIP6_IPV4DSM_LEN
);
3152 proto_tree_add_item(opt_tree
, hf_mip6_ipv4dsm_reserved
, tvb
,
3153 offset
, 2, ENC_BIG_ENDIAN
);
3154 proto_tree_add_item(opt_tree
, hf_mip6_ipv4dsm_s_flag
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3156 return tvb_captured_length(tvb
);
3159 /* 40 Context Request Option [RFC5949] */
3162 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3163 +---------------+---------------+---------------+---------------+
3164 | Option-Type | Option-Length | Reserved |
3165 +---------------+---------------+-------------------------------+
3166 | Req-type-1 | Req-length-1 | Req-type-2 | Req-length-2 |
3167 +---------------------------------------------------------------+
3168 | Req-type-3 | Req-length-3 | Req-option-3 |
3169 +---------------------------------------------------------------+
3175 dissect_pmip6_opt_cr(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3177 proto_tree
* opt_tree
;
3179 int option_len
= tvb_reported_length(tvb
)-2;
3181 uint8_t req_type
, req_length
;
3184 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_cr
, ett_mip6_opt_cr
, &ti
, option_len
, MIP6_CR_MIN_LEN
);
3186 proto_tree_add_item(opt_tree
, hf_mip6_cr_reserved
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3189 while (offset
-2 < option_len
) {
3190 req_type
= tvb_get_uint8(tvb
,offset
);
3191 proto_tree_add_item(opt_tree
, hf_mip6_cr_req_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3194 req_length
= tvb_get_uint8(tvb
,offset
);
3195 proto_tree_add_item(opt_tree
, hf_mip6_cr_req_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3198 if (req_length
== 0)
3201 if (req_type
== MIP6_VSM
) {
3202 /* vendor specific option */
3203 proto_tree_add_item_ret_uint(opt_tree
, hf_mip6_vsm_vid
, tvb
, offset
, 4, ENC_BIG_ENDIAN
, &vendorid
);
3204 if (vendorid
== VENDOR_THE3GPP
) {
3205 proto_tree_add_item(opt_tree
, hf_mip6_vsm_subtype_3gpp
, tvb
, offset
+4, 1, ENC_BIG_ENDIAN
);
3208 proto_tree_add_item(opt_tree
, hf_mip6_vsm_subtype
, tvb
, offset
+4, 1, ENC_BIG_ENDIAN
);
3212 proto_tree_add_item(opt_tree
, hf_mip6_vsm_req_data
, tvb
, offset
, req_length
, ENC_NA
);
3214 offset
+= req_length
;
3217 return tvb_captured_length(tvb
);
3220 /* 41 Local Mobility Anchor Address Option [RFC5949] */
3223 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3224 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3225 | Option-Type | Option-Length | Option-Code | Reserved |
3226 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3227 | Local Mobility Anchor Address ... |
3231 dissect_pmip6_opt_lmaa(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3233 proto_tree
* opt_tree
;
3235 int option_len
= tvb_reported_length(tvb
)-2;
3239 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_lmaa
, ett_mip6_opt_lmaa
, &ti
, option_len
, MIP6_LMAA_MIN_LEN
);
3241 opt_code
= tvb_get_uint8(tvb
,offset
);
3242 proto_tree_add_item(opt_tree
, hf_mip6_lmaa_opt_code
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3245 proto_tree_add_item(opt_tree
, hf_mip6_lmaa_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3248 if (opt_code
== 1) {
3250 proto_tree_add_item(opt_tree
, hf_mip6_lmaa_ipv6
, tvb
, offset
, 16, ENC_NA
);
3251 proto_item_append_text(ti
, ": %s", tvb_ip6_to_str(pinfo
->pool
, tvb
,offset
));
3252 }else if (opt_code
== 2) {
3254 proto_tree_add_item(opt_tree
, hf_mip6_lmaa_ipv4
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3255 proto_item_append_text(ti
, ": %s", tvb_ip_to_str(pinfo
->pool
, tvb
,offset
));
3259 return tvb_captured_length(tvb
);
3263 dissect_pmip6_opt_recap(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3265 proto_tree
* opt_tree
;
3267 int option_len
= tvb_reported_length(tvb
)-2;
3270 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_recap
, ett_mip6_opt_recap
, &ti
, option_len
, MIP6_RECAP_LEN
);
3272 proto_tree_add_item(opt_tree
, hf_mip6_opt_recap_reserved
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3274 return tvb_captured_length(tvb
);
3278 dissect_pmip6_opt_redir(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3280 proto_tree
* opt_tree
;
3282 int option_len
= tvb_reported_length(tvb
)-2;
3286 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_redir
, ett_mip6_opt_redir
, &ti
, option_len
, MIP6_REDIR_MIN_LEN
);
3288 proto_tree_add_item(opt_tree
, hf_mip6_opt_redir_k
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3289 proto_tree_add_item(opt_tree
, hf_mip6_opt_redir_n
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3290 proto_tree_add_item(opt_tree
, hf_mip6_opt_redir_reserved
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3291 flag
= tvb_get_ntohs(tvb
,offset
);
3294 if (flag
& MIP6_REDIR_FLAG_K
) {
3295 proto_tree_add_item(opt_tree
, hf_mip6_opt_redir_addr_r2LMA_ipv6
, tvb
, offset
, 16, ENC_NA
);
3299 if (flag
& MIP6_REDIR_FLAG_N
) {
3300 proto_tree_add_item(opt_tree
, hf_mip6_opt_redir_addr_r2LMA_ipv4
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3304 return tvb_captured_length(tvb
);
3308 dissect_pmip6_opt_load_inf(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3310 proto_tree
* opt_tree
;
3312 int option_len
= tvb_reported_length(tvb
)-2;
3315 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_load_inf
, ett_mip6_opt_load_inf
, &ti
, option_len
, MIP6_LOAD_INF_LEN
);
3317 proto_tree_add_item(opt_tree
, hf_mip6_opt_load_inf_priority
, tvb
, offset
, 2, ENC_BIG_ENDIAN
);
3319 proto_tree_add_item(opt_tree
, hf_mip6_opt_load_inf_sessions_in_use
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3321 proto_tree_add_item(opt_tree
, hf_mip6_opt_load_inf_maximum_sessions
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3323 proto_tree_add_item(opt_tree
, hf_mip6_opt_load_inf_used_capacity
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3325 proto_tree_add_item(opt_tree
, hf_mip6_opt_load_inf_maximum_capacity
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3327 return tvb_captured_length(tvb
);
3331 dissect_pmip6_opt_alt_ip4(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3333 proto_tree
* opt_tree
;
3335 int option_len
= tvb_reported_length(tvb
)-2;
3338 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_alt_ip4
, ett_mip6_opt_alt_ip4
, &ti
, option_len
, MIP6_ALT_IP4_LEN
);
3340 proto_tree_add_item(opt_tree
, hf_mip6_opt_alt_ip4
, tvb
, offset
, 4, ENC_BIG_ENDIAN
);
3342 return tvb_captured_length(tvb
);
3345 The type value for this option is 50.
3348 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3349 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3350 | Type | Length | Sub-type | Reserved |
3351 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3352 | Mobile Node Group Identifier |
3353 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3358 dissect_pmip6_opt_mng(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3360 proto_tree
* opt_tree
;
3362 int option_len
= tvb_reported_length(tvb
)-2;
3367 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_mng
, ett_mip6_opt_mng
, &ti
, option_len
, MIP6_MNG_LEN
);
3369 proto_tree_add_item(opt_tree
, hf_mip6_opt_mng_sub_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3371 proto_tree_add_item(opt_tree
, hf_mip6_opt_mng_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3373 item
= proto_tree_add_item_ret_uint(opt_tree
, hf_mip6_opt_mng_mng_id
, tvb
, offset
, 4, ENC_BIG_ENDIAN
, &mng_id
);
3375 proto_item_append_text(item
, " - ALL-SESSIONS");
3378 return tvb_captured_length(tvb
);
3382 11.1. MAG IPv6 Address
3384 The MAG IPv6 address mobility option contains the IPv6 address of a
3385 MAG involved in localized routing. The MAG IPv6 address option has
3386 an alignment requirement of 8n+4.
3389 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3390 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3391 | Type | Length | Reserved | Address Length|
3392 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3396 + MAG IPv6 Address +
3400 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3403 dissect_pmip6_opt_mag_ipv6(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3405 proto_tree
* opt_tree
;
3407 int option_len
= tvb_reported_length(tvb
)-2;
3410 opt_tree
= mip6_fixed_option_header(tree
, pinfo
, tvb
, proto_mip6_option_mag_ipv6
, ett_mip6_opt_mag_ipv6
, &ti
, option_len
, MIP6_MAG_IPv6_LEN
);
3412 proto_tree_add_item(opt_tree
, hf_mip6_opt_mag_ipv6_reserved
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3414 proto_tree_add_item(opt_tree
, hf_mip6_opt_mag_ipv6_address_length
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3416 proto_tree_add_item(opt_tree
, hf_mip6_opt_mag_ipv6_address
, tvb
, offset
, 16, ENC_NA
);
3418 return tvb_captured_length(tvb
);
3423 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3424 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3426 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3427 ... ANI Sub-option(s) ... ~
3428 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3430 3.1. Format of the Access Network Identifier Sub-Option
3432 The Access Network Identifier sub-options are used for carrying
3433 information elements related to the access network to which the
3434 mobile node is attached. These sub-options can be included in the
3435 Access Network Identifier option defined in Section 3. The format of
3436 this sub-option is as follows:
3439 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3440 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3441 | ANI Type | ANI Length | Option Data ~
3442 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3444 ANI Type: 8-bit unsigned integer indicating the type of the Access
3445 Network Identifier sub-option. This specification defines the
3450 1 - Network-Identifier sub-option
3452 2 - Geo-Location sub-option
3454 3 - Operator-Identifier sub-option
3458 static const value_string mmip6_opt_acc_net_id_sub_opt_vals
[] = {
3460 { 1, "Network-Identifier"},
3461 { 2, "Geo-Location"},
3462 { 3, "Operator-Identifier"},
3466 static const true_false_string mip6_opt_acc_net_id_sub_opt_e_bit_value
= {
3468 "Encoding is undefined"
3471 static const value_string mip6_opt_acc_net_id_sub_opt_op_id_type
[] = {
3473 { 1, "Private Enterprise Number (PEN)"},
3474 { 2, "Realm of the operator"},
3479 degrees_convert_fixed_to_float(unsigned value
)
3485 * RFC 6757 section 3.1.2:
3487 * "A 24-bit {latitude,longitude} degree value encoded as a two's
3488 * complement, fixed point number with 9 whole bits."
3490 * "9 whole bits" presumably includes the sign bit; 1 sign bit
3491 * plus 8 more bits supports values between -256 and 255, which
3492 * is sufficient to cover -180 to 180. 9 bits plus a sign bit
3493 * would waste a bit.
3495 * So we have 1 sign bit plus 8 bits of integral value, followed
3496 * by a binary point, followed by 15 bits of fractional value.
3497 * That means that to get the value, we treat the fixed-point
3498 * number as an integer and divide it by 2^15 = 32768.
3501 /* Sign-extend to 32 bits */
3502 if (value
& 0x800000) {
3503 value
|= 0xFF000000;
3506 /* Cast to a signed value, and divide by 32768; do a floating-point divide */
3507 return ((float)(int)value
) / 32768.0f
;
3511 degrees_base_custom(char *str
, unsigned degrees
)
3513 snprintf(str
, ITEM_LABEL_LENGTH
, "%f", degrees_convert_fixed_to_float(degrees
) );
3517 dissect_pmip6_opt_acc_net_id(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3519 proto_tree
* opt_tree
;
3521 proto_tree
*subopt_tree
;
3522 int16_t sub_opt_len
;
3523 uint8_t sub_opt
, e_bit
, net_name_len
, ap_name_len
;
3524 const uint8_t *ap_name
;
3525 int option_len
= tvb_reported_length(tvb
)-2;
3527 int offset_end
= tvb_reported_length(tvb
);
3529 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_acc_net_id
, ett_mip6_opt_acc_net_id
, &ti
, option_len
, MIP6_ACC_NET_ID_MIN_LEN
);
3531 while(offset
< offset_end
) {
3532 ti
= proto_tree_add_item(opt_tree
, hf_mip6_opt_acc_net_id_sub
, tvb
, offset
, 2, ENC_NA
);
3533 subopt_tree
= proto_item_add_subtree(ti
, ett_mip6_sub_opt_acc_net_id
);
3535 proto_tree_add_item(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3536 sub_opt
= tvb_get_uint8(tvb
,offset
);
3539 proto_tree_add_item(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt_len
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3540 sub_opt_len
= tvb_get_uint8(tvb
,offset
);
3543 proto_item_append_text(ti
, ": %s (t=%d,l=%d)", val_to_str(sub_opt
, mmip6_opt_acc_net_id_sub_opt_vals
, "Unknown ANI Type (%02d)"), sub_opt
, sub_opt_len
);
3544 proto_item_set_len(ti
, sub_opt_len
+2);
3547 case 1: /* Network-Identifier */
3550 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3551 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3552 | ANI Type=1 | ANI Length |E| Reserved | Net-Name Len |
3553 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3554 | Network Name (e.g., SSID or PLMNID) ~
3555 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3556 | AP-Name Len | Access-Point Name ~
3557 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3559 e_bit
= tvb_get_uint8(tvb
,offset
);
3560 proto_tree_add_item(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt_e_bit
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3563 net_name_len
= tvb_get_uint8(tvb
,offset
);
3564 proto_tree_add_item(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt_net_name_len
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3568 const uint8_t* name
;
3569 proto_tree_add_item_ret_string(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt_net_name
, tvb
, offset
, net_name_len
, ENC_BIG_ENDIAN
|ENC_UTF_8
, pinfo
->pool
, &name
);
3570 proto_item_append_text(ti
, " Network Name: %s", name
);
3572 proto_tree_add_item(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt_net_name_data
, tvb
, offset
, net_name_len
, ENC_BIG_ENDIAN
|ENC_UTF_8
);
3574 offset
= offset
+net_name_len
;
3576 ap_name_len
= tvb_get_uint8(tvb
,offset
);
3577 proto_tree_add_item(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt_ap_name_len
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3580 proto_tree_add_item_ret_string(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt_ap_name
, tvb
, offset
, ap_name_len
, ENC_BIG_ENDIAN
|ENC_UTF_8
, pinfo
->pool
, &ap_name
);
3581 proto_item_append_text(ti
, " AP Name: %s", ap_name
);
3583 offset
= offset
+ap_name_len
;
3586 case 2: /* Geo-Location */
3589 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3590 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3591 | ANI Type=2 | ANI Length=6 | Latitude Degrees
3592 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3593 | Longitude Degrees |
3594 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3596 proto_tree_add_item(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt_geo_latitude_degrees
, tvb
, offset
, 3, ENC_BIG_ENDIAN
);
3599 proto_tree_add_item(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt_geo_longitude_degrees
, tvb
, offset
, 3, ENC_BIG_ENDIAN
);
3603 case 3: /* Operator-Identifier */
3606 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3607 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3608 | ANI Type=3 | ANI Length | Op-ID Type |
3609 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3610 Operator-Identifier ~
3611 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3613 proto_tree_add_item(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt_op_id_type
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3616 proto_tree_add_item(subopt_tree
, hf_mip6_opt_acc_net_id_sub_opt_op_id
, tvb
, offset
, sub_opt_len
- 1, ENC_NA
);
3617 offset
= offset
+ sub_opt_len
- 1;
3621 proto_tree_add_expert(subopt_tree
, pinfo
, &ei_mip6_ani_type_not_dissected
, tvb
, offset
, sub_opt_len
);
3622 offset
= offset
+ sub_opt_len
;
3627 return tvb_captured_length(tvb
);
3630 /* 55 Delegated Mobile Network Prefix Option [RFC7148]
3633 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
3634 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3635 | Type | Length |V| Reserved | Prefix Length |
3636 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3641 + IPv4 or IPv6 Delegated Mobile Network Prefix +
3645 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
3649 dissect_mip6_opt_dmnp(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void* data _U_
)
3651 proto_tree
* opt_tree
;
3653 int option_len
= tvb_reported_length(tvb
)-2;
3657 opt_tree
= mip6_var_option_header(tree
, pinfo
, tvb
, proto_mip6_option_dmnp
, ett_mip6_opt_dmnp
, &ti
, option_len
, MIP6_DMNP_MIN_LEN
);
3659 proto_tree_add_item(opt_tree
, hf_mip6_opt_dmnp_v_flag
, tvb
,
3660 offset
, 1, ENC_BIG_ENDIAN
);
3661 proto_tree_add_item(opt_tree
, hf_mip6_opt_dmnp_reserved
, tvb
,
3662 offset
, 1, ENC_BIG_ENDIAN
);
3665 proto_tree_add_item(opt_tree
, hf_mip6_opt_dmnp_prefix_len
, tvb
,
3666 offset
, 1, ENC_BIG_ENDIAN
);
3667 prefix_len
= tvb_get_uint8(tvb
, offset
);
3671 switch (option_len
) {
3674 proto_tree_add_item(opt_tree
, hf_mip6_opt_dmnp_dmnp_ipv4
, tvb
,
3675 offset
, 4, ENC_BIG_ENDIAN
);
3676 proto_item_append_text(ti
, ": %s/%u",
3677 tvb_ip_to_str(pinfo
->pool
, tvb
, offset
), prefix_len
);
3682 proto_tree_add_item(opt_tree
, hf_mip6_opt_dmnp_dmnp_ipv6
, tvb
,
3683 offset
, 16, ENC_NA
);
3684 proto_item_append_text(ti
, ": %s/%u",
3685 tvb_ip6_to_str(pinfo
->pool
, tvb
, offset
), prefix_len
);
3689 proto_tree_add_expert(opt_tree
, pinfo
, &ei_mip6_opt_len_invalid
,
3694 return tvb_captured_length(tvb
);
3697 /* Like "dissect_ip_tcp_options()", but assumes the length of an option
3698 * *doesn't* include the type and length bytes. The option parsers,
3699 * however, are passed a length that *does* include them.
3702 dissect_mipv6_options(tvbuff_t
*tvb
, int offset
, unsigned length
,
3703 int eol
, packet_info
*pinfo
, proto_tree
*opt_tree
)
3708 dissector_handle_t option_dissector
;
3711 proto_tree
*unknown_tree
;
3713 while ((int)length
> 0) {
3714 opt
= tvb_get_uint8(tvb
, offset
);
3715 --length
; /* account for type byte */
3717 if (opt
== MIP6_PAD1
) {
3718 /* We assume that the only option with no length is Pad1 option,
3719 so that we can treat unknown options as having a minimum length of 2,
3720 and at least be able to move on to the next option by using the length in the option. */
3722 proto_tree_add_item(opt_tree
, proto_mip6_option_pad1
, tvb
, offset
, 1, ENC_NA
);
3725 option_dissector
= dissector_get_uint_handle(mip6_option_table
, opt
);
3726 if (option_dissector
== NULL
) {
3727 name
= wmem_strdup_printf(pinfo
->pool
, "Unknown (0x%02x)", opt
);
3729 name
= dissector_handle_get_protocol_short_name(option_dissector
);
3732 /* Option has a length. Is it in the packet? */
3734 /* Bogus - packet must at least include
3735 * option code byte and length byte!
3737 proto_tree_add_expert_format(opt_tree
, pinfo
, &ei_mip6_opt_len_invalid
, tvb
, offset
, 1,
3738 "%s (length byte past end of options)", name
);
3742 len
= tvb_get_uint8(tvb
, offset
+ 1); /* Size specified in option */
3743 --length
; /* account for length byte */
3746 /* Bogus - option goes past the end of the header. */
3747 proto_tree_add_expert_format(opt_tree
, pinfo
, &ei_mip6_opt_len_invalid
, tvb
, offset
, length
,
3748 "%s (option length = %u byte%s says option goes past end of options)",
3749 name
, len
, plurality(len
, "", "s"));
3753 if (option_dissector
== NULL
) {
3754 unknown_tree
= proto_tree_add_subtree(opt_tree
, tvb
, offset
, len
+2, ett_mip6_opt_unknown
, &ti
, name
);
3755 proto_tree_add_item(unknown_tree
, hf_mip6_mobility_opt
, tvb
, offset
, 1, ENC_BIG_ENDIAN
);
3756 proto_tree_add_item(unknown_tree
, hf_mip6_opt_len
, tvb
, 1, 1, ENC_NA
);
3758 expert_add_info(pinfo
, ti
, &ei_mip6_ie_not_dissected
);
3760 next_tvb
= tvb_new_subset_length(tvb
, offset
, len
+2);
3761 call_dissector(option_dissector
, next_tvb
, pinfo
, opt_tree
);
3765 offset
+= (len
+ 2);
3773 /* Function to dissect mobility options */
3775 dissect_mip6_options(tvbuff_t
*tvb
, proto_tree
*mip6_tree
, int offset
, int len
,
3778 proto_tree
*opts_tree
;
3780 opts_tree
= proto_tree_add_subtree(mip6_tree
, tvb
, offset
, len
, ett_mip6
, NULL
, "Mobility Options");
3782 dissect_mipv6_options(tvb
, offset
, len
, -1, pinfo
, opts_tree
);
3787 /* Function that dissects the whole MIPv6 packet */
3789 dissect_mip6(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*tree
, void *data
)
3791 proto_tree
*mip6_tree
, *root_tree
;
3792 uint8_t type
, pproto
;
3793 unsigned len
, offset
= 0, start_offset
= offset
;
3794 proto_item
*ti
, *header_item
;
3797 /* Make entries in Protocol column and Info column on summary display */
3798 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "MIPv6");
3799 col_clear(pinfo
->cinfo
, COL_INFO
);
3801 len
= (tvb_get_uint8(tvb
, MIP6_HLEN_OFF
) + 1) * 8;
3802 pproto
= tvb_get_uint8(tvb
, MIP6_PROTO_OFF
);
3804 root_tree
= p_ipv6_pinfo_select_root(pinfo
, tree
);
3805 p_ipv6_pinfo_add_len(pinfo
, len
);
3807 ti
= proto_tree_add_item(root_tree
, proto_mip6
, tvb
, 0, len
, ENC_NA
);
3808 mip6_tree
= proto_item_add_subtree(ti
, ett_mip6
);
3810 /* Process header fields */
3811 proto_tree_add_item(mip6_tree
, hf_mip6_proto
, tvb
,
3812 MIP6_PROTO_OFF
, 1, ENC_BIG_ENDIAN
);
3814 header_item
= proto_tree_add_uint_format_value(mip6_tree
, hf_mip6_hlen
, tvb
,
3816 tvb_get_uint8(tvb
, MIP6_HLEN_OFF
),
3818 tvb_get_uint8(tvb
, MIP6_HLEN_OFF
),
3821 proto_tree_add_item(mip6_tree
, hf_mip6_mhtype
, tvb
,
3822 MIP6_TYPE_OFF
, 1, ENC_BIG_ENDIAN
);
3824 proto_tree_add_item(mip6_tree
, hf_mip6_reserved
, tvb
,
3825 MIP6_RES_OFF
, 1, ENC_BIG_ENDIAN
);
3827 proto_tree_add_checksum(mip6_tree
, tvb
, MIP6_CSUM_OFF
, hf_mip6_csum
,
3828 -1, NULL
, pinfo
, 0, ENC_BIG_ENDIAN
, PROTO_CHECKSUM_NO_FLAGS
);
3830 /* Process mobility header */
3831 type
= tvb_get_uint8(tvb
, MIP6_TYPE_OFF
);
3832 col_add_str(pinfo
->cinfo
, COL_INFO
, val_to_str_ext(type
, &mip6_mh_types_ext
, "Unknown Mobility Header (%u)"));
3835 /* 0 Binding Refresh Request */
3836 offset
= dissect_mip6_brr(tvb
, mip6_tree
, pinfo
);
3839 /* 1 Home Test Init */
3840 offset
= dissect_mip6_hoti(tvb
, mip6_tree
, pinfo
);
3843 /* 2 Care-of Test Init */
3844 offset
= dissect_mip6_coti(tvb
, mip6_tree
, pinfo
);
3848 offset
= dissect_mip6_hot(tvb
, mip6_tree
, pinfo
);
3851 /* 4 Care-of Test */
3852 offset
= dissect_mip6_cot(tvb
, mip6_tree
, pinfo
);
3855 /* 5 Binding Update */
3856 pinfo
->link_dir
= P2P_DIR_UL
;
3857 offset
= dissect_mip6_bu(tvb
, mip6_tree
, pinfo
);
3858 if (proto_nemo
== 1) {
3859 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "NEMO");
3863 /* 6 Binding Acknowledgement */
3864 pinfo
->link_dir
= P2P_DIR_DL
;
3865 offset
= dissect_mip6_ba(tvb
, mip6_tree
, pinfo
);
3866 if (proto_nemo
== 1) {
3867 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "NEMO");
3871 /* 7 Binding Error */
3872 offset
= dissect_mip6_be(tvb
, mip6_tree
, pinfo
);
3875 /* 8 Fast Binding Update */
3876 offset
= dissect_fmip6_fbu(tvb
, mip6_tree
, pinfo
);
3879 /* 9 Fast Binding Acknowledgment */
3880 offset
= dissect_fmip6_fback(tvb
, mip6_tree
, pinfo
);
3883 /* 10 Fast Neighbor Advertisement */
3884 offset
= dissect_fmip6_fna(tvb
, mip6_tree
, pinfo
);
3887 /* 11 Experimental Mobility Header RFC5096 */
3889 proto_tree_add_item(mip6_tree
, hf_mip6_opt_em_data
, tvb
, offset
+MIP6_DATA_OFF
, len
-MIP6_DATA_OFF
, ENC_NA
);
3894 /* 12 Home Agent Switch */
3895 offset
= dissect_mip6_has(tvb
, mip6_tree
, pinfo
);
3899 offset
= dissect_mip6_hb(tvb
, mip6_tree
, pinfo
);
3902 /* 14 Handover Initiate RFC5568 */
3903 offset
= dissect_mip6_hi(tvb
, mip6_tree
, pinfo
);
3906 /* 14 Handover Acknowledge*/
3907 offset
= dissect_mip6_hack(tvb
, mip6_tree
, pinfo
);
3910 /* 16 Binding Revocation Indication / Acknowledge */
3911 offset
= dissect_pmip6_bri(tvb
, mip6_tree
, pinfo
);
3914 /* 17 Localized Routing Initiation */
3915 offset
= dissect_pmip6_lri(tvb
, mip6_tree
, pinfo
, offset
);
3918 /* 18 Localized Routing Acknowledgment */
3919 offset
= dissect_pmip6_lra(tvb
, mip6_tree
, pinfo
, offset
);
3922 offset
= dissect_mip6_unknown(tvb
, mip6_tree
, pinfo
);
3926 /* Process mobility options */
3928 if (len
< (offset
- start_offset
)) {
3929 expert_add_info(pinfo
, header_item
, &ei_mip6_bogus_header_length
);
3932 len
-= (offset
- start_offset
);
3933 dissect_mip6_options(tvb
, mip6_tree
, offset
, len
, pinfo
);
3936 if ((type
== MIP6_FNA
) && (pproto
== IP_PROTO_IPV6
)) {
3937 col_set_str(pinfo
->cinfo
, COL_INFO
, "Fast Neighbor Advertisement[Fast Binding Update]");
3938 next_tvb
= tvb_new_subset_remaining(tvb
, len
+ 8);
3939 ipv6_dissect_next(pproto
, next_tvb
, pinfo
, tree
, (ws_ip6
*)data
);
3942 if ((type
== MIP6_FBACK
) && (pproto
== IP_PROTO_AH
)) {
3943 col_set_str(pinfo
->cinfo
, COL_INFO
, "Fast Binding Acknowledgment");
3944 next_tvb
= tvb_new_subset_remaining(tvb
, len
+ offset
);
3945 ipv6_dissect_next(pproto
, next_tvb
, pinfo
, tree
, (ws_ip6
*)data
);
3948 return tvb_captured_length(tvb
);
3951 /* Register the protocol with Wireshark */
3953 proto_register_mip6(void)
3955 /* Setup list of header fields */
3956 static hf_register_info hf
[] = {
3959 { "Payload protocol", "mip6.proto",
3960 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &ipproto_val_ext
, 0,
3964 { "Header length", "mip6.hlen",
3965 FT_UINT8
, BASE_DEC
, NULL
, 0,
3969 { "Mobility Header Type", "mip6.mhtype",
3970 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &mip6_mh_types_ext
, 0,
3973 { &hf_mip6_reserved
,
3974 { "Reserved", "mip6.reserved",
3975 FT_UINT8
, BASE_HEX
, NULL
, 0,
3979 { "Checksum", "mip6.csum",
3980 FT_UINT16
, BASE_HEX
, NULL
, 0,
3981 "Header Checksum", HFILL
}
3984 { &hf_mip6_hoti_cookie
,
3985 { "Home Init Cookie", "mip6.hoti.cookie",
3986 FT_UINT64
, BASE_HEX
, NULL
, 0,
3990 { &hf_mip6_coti_cookie
,
3991 { "Care-of Init Cookie", "mip6.coti.cookie",
3992 FT_UINT64
, BASE_HEX
, NULL
, 0,
3996 { &hf_mip6_hot_nindex
,
3997 { "Home Nonce Index", "mip6.hot.nindex",
3998 FT_UINT16
, BASE_DEC
, NULL
, 0,
4001 { &hf_mip6_hot_cookie
,
4002 { "Home Init Cookie", "mip6.hot.cookie",
4003 FT_UINT64
, BASE_HEX
, NULL
, 0,
4006 { &hf_mip6_hot_token
,
4007 { "Home Keygen Token", "mip6.hot.token",
4008 FT_UINT64
, BASE_HEX
, NULL
, 0,
4012 { &hf_mip6_cot_nindex
,
4013 { "Care-of Nonce Index", "mip6.cot.nindex",
4014 FT_UINT16
, BASE_DEC
, NULL
, 0,
4017 { &hf_mip6_cot_cookie
,
4018 { "Care-of Init Cookie", "mip6.cot.cookie",
4019 FT_UINT64
, BASE_HEX
, NULL
, 0,
4023 { &hf_mip6_cot_token
,
4024 { "Care-of Keygen Token", "mip6.cot.token",
4025 FT_UINT64
, BASE_HEX
, NULL
, 0,
4030 { &hf_mip6_bu_seqnr
,
4031 { "Sequence number", "mip6.bu.seqnr",
4032 FT_UINT16
, BASE_DEC
, NULL
, 0,
4035 { &hf_mip6_bu_a_flag
,
4036 { "Acknowledge (A) flag", "mip6.bu.a_flag",
4037 FT_BOOLEAN
, 16, TFS(&mip6_bu_a_flag_value
), 0x8000,
4040 { &hf_mip6_bu_h_flag
,
4041 { "Home Registration (H) flag", "mip6.bu.h_flag",
4042 FT_BOOLEAN
, 16, TFS(&mip6_bu_h_flag_value
), 0x4000,
4045 { &hf_mip6_bu_l_flag
,
4046 { "Link-Local Compatibility (L) flag", "mip6.bu.l_flag",
4047 FT_BOOLEAN
, 16, TFS(&mip6_bu_l_flag_value
), 0x2000,
4048 "Home Registration (H) flag", HFILL
}
4050 { &hf_mip6_bu_k_flag
,
4051 { "Key Management Compatibility (K) flag", "mip6.bu.k_flag",
4052 FT_BOOLEAN
, 16, TFS(&mip6_bu_k_flag_value
), 0x1000,
4055 { &hf_mip6_bu_m_flag
,
4056 { "MAP Registration Compatibility (M) flag", "mip6.bu.m_flag",
4057 FT_BOOLEAN
, 16, TFS(&mip6_bu_m_flag_value
), 0x0800,
4060 { &hf_mip6_nemo_bu_r_flag
,
4061 { "Mobile Router (R) flag", "mip6.nemo.bu.r_flag",
4062 FT_BOOLEAN
, 16, TFS(&mip6_nemo_bu_r_flag_value
), 0x0400,
4065 { &hf_pmip6_bu_p_flag
,
4066 { "Proxy Registration (P) flag", "mip6.bu.p_flag",
4067 FT_BOOLEAN
, 16, TFS(&pmip6_bu_p_flag_value
), 0x0200,
4070 { &hf_mip6_bu_f_flag
,
4071 { "Forcing UDP encapsulation (F) flag", "mip6.bu.f_flag",
4072 FT_BOOLEAN
, 16, TFS(&mip6_bu_f_flag_value
), 0x0100,
4075 { &hf_pmip6_bu_t_flag
,
4076 { "TLV-header format (T) flag", "mip6.bu.t_flag",
4077 FT_BOOLEAN
, 16, TFS(&pmip6_bu_t_flag_value
), 0x0080,
4080 { &hf_pmip6_bu_b_flag
,
4081 { "Bulk-Binding-Update flag (B)", "mip6.bu.b_flag",
4082 FT_BOOLEAN
, 16, TFS(&pmip6_bu_b_flag_value
), 0x0040,
4085 { &hf_mip6_bu_lifetime
,
4086 { "Lifetime", "mip6.bu.lifetime",
4087 FT_UINT16
, BASE_DEC
, NULL
, 0,
4091 { &hf_mip6_ba_status
,
4092 { "Status", "mip6.ba.status",
4093 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &mip6_ba_status_value_ext
, 0,
4094 "Binding Acknowledgement status", HFILL
}
4096 { &hf_mip6_ba_k_flag
,
4097 { "Key Management Compatibility (K) flag", "mip6.ba.k_flag",
4098 FT_BOOLEAN
, 8, TFS(&mip6_bu_k_flag_value
), 0x80,
4101 { &hf_mip6_nemo_ba_r_flag
,
4102 { "Mobile Router (R) flag", "mip6.nemo.ba.r_flag",
4103 FT_BOOLEAN
, 8, TFS(&mip6_nemo_bu_r_flag_value
), 0x40,
4106 { &hf_pmip6_ba_p_flag
,
4107 { "Proxy Registration (P) flag", "mip6.ba.p_flag",
4108 FT_BOOLEAN
, 8, TFS(&pmip6_bu_p_flag_value
), 0x20,
4111 { &hf_pmip6_ba_t_flag
,
4112 { "TLV-header format (T) flag", "mip6.ba.t_flag",
4113 FT_BOOLEAN
, 8, TFS(&pmip6_bu_t_flag_value
), 0x10,
4116 { &hf_pmip6_ba_b_flag
,
4117 { "Bulk-Binding-Update flag (B)", "mip6.ba.b_flag",
4118 FT_BOOLEAN
, 8, TFS(&pmip6_ba_b_flag_value
), 0x08,
4122 { &hf_mip6_ba_seqnr
,
4123 { "Sequence number", "mip6.ba.seqnr",
4124 FT_UINT16
, BASE_DEC
, NULL
, 0,
4127 { &hf_mip6_ba_lifetime
,
4128 { "Lifetime", "mip6.ba.lifetime",
4129 FT_UINT16
, BASE_DEC
, NULL
, 0,
4133 { &hf_mip6_be_status
,
4134 { "Status", "mip6.be.status",
4135 FT_UINT8
, BASE_DEC
, VALS(mip6_be_status_value
), 0,
4136 "Binding Error status", HFILL
}
4138 { &hf_mip6_be_haddr
,
4139 { "Home Address", "mip6.be.haddr",
4140 FT_IPv6
, BASE_NONE
, NULL
, 0,
4144 { &hf_fmip6_fbu_seqnr
,
4145 { "Sequence number", "mip6.fbu.seqnr",
4146 FT_UINT16
, BASE_DEC
, NULL
, 0,
4149 { &hf_fmip6_fbu_a_flag
,
4150 { "Acknowledge (A) flag", "mip6.fbu.a_flag",
4151 FT_BOOLEAN
, 8, TFS(&fmip6_fbu_a_flag_value
), 0x80,
4154 { &hf_fmip6_fbu_h_flag
,
4155 { "Home Registration (H) flag", "mip6.fbu.h_flag",
4156 FT_BOOLEAN
, 8, TFS(&fmip6_fbu_h_flag_value
), 0x40,
4159 { &hf_fmip6_fbu_l_flag
,
4160 { "Link-Local Compatibility (L) flag", "mip6.fbu.l_flag",
4161 FT_BOOLEAN
, 8, TFS(&fmip6_fbu_l_flag_value
), 0x20,
4162 "Home Registration (H) flag", HFILL
}
4164 { &hf_fmip6_fbu_k_flag
,
4165 { "Key Management Compatibility (K) flag", "mip6.fbu.k_flag",
4166 FT_BOOLEAN
, 8, TFS(&fmip6_fbu_k_flag_value
), 0x10,
4169 { &hf_fmip6_fbu_lifetime
,
4170 { "Lifetime", "mip6.fbu.lifetime",
4171 FT_UINT16
, BASE_DEC
, NULL
, 0,
4175 { &hf_fmip6_fback_status
,
4176 { "Status", "mip6.fback.status",
4177 FT_UINT8
, BASE_DEC
, VALS(fmip6_fback_status_value
), 0,
4178 "Fast Binding Acknowledgement status", HFILL
}
4180 { &hf_fmip6_fback_k_flag
,
4181 { "Key Management Compatibility (K) flag", "mip6.fback.k_flag",
4182 FT_BOOLEAN
, 8, TFS(&fmip6_fbu_k_flag_value
), 0x80,
4185 { &hf_fmip6_fback_seqnr
,
4186 { "Sequence number", "mip6.fback.seqnr",
4187 FT_UINT16
, BASE_DEC
, NULL
, 0,
4190 { &hf_fmip6_fback_lifetime
,
4191 { "Lifetime", "mip6.fback.lifetime",
4192 FT_UINT16
, BASE_DEC
, NULL
, 0,
4195 { &hf_mip6_has_num_addrs
,
4196 { "Number of Addresses", "mip6.has.num_addrs",
4197 FT_UINT8
, BASE_DEC
, NULL
, 0,
4200 { &hf_mip6_has_reserved
,
4201 { "Reserved", "mip6.has.reserved",
4202 FT_UINT8
, BASE_HEX
, NULL
, 0,
4205 { &hf_mip6_has_address
,
4206 { "Address", "mip6.has.address",
4207 FT_IPv6
, BASE_NONE
, NULL
, 0,
4208 "Home Agent Address", HFILL
}
4210 { &hf_mip6_hb_u_flag
,
4211 { "Unsolicited (U) flag", "mip6.hb.u_flag",
4212 FT_BOOLEAN
, 8, TFS(&mip6_hb_u_flag_value
), 0x02,
4215 { &hf_mip6_hb_r_flag
,
4216 { "Response (R) flag", "mip6.hb.r_flag",
4217 FT_BOOLEAN
, 8, TFS(&mip6_hb_r_flag_value
), 0x01,
4220 { &hf_mip6_hb_seqnr
,
4221 { "Sequence number", "mip6.hb.seqnr",
4222 FT_UINT32
, BASE_DEC
, NULL
, 0,
4225 { &hf_mip6_hi_seqnr
,
4226 { "Sequence number", "mip6.hi.seqnr",
4227 FT_UINT16
, BASE_DEC
, NULL
, 0,
4230 { &hf_mip6_hi_s_flag
,
4231 { "Assigned address configuration flag (S) flag", "mip6.hi.s_flag",
4232 FT_BOOLEAN
, 8, NULL
, 0x80,
4235 { &hf_mip6_hi_u_flag
,
4236 { "Buffer flag (U) flag", "mip6.hi.u_flag",
4237 FT_BOOLEAN
, 8, NULL
, 0x40,
4241 { "Code", "mip6.hi.code",
4242 FT_UINT8
, BASE_DEC
, NULL
, 0,
4245 { &hf_mip6_hack_seqnr
,
4246 { "Sequence number", "mip6.hack.seqnr",
4247 FT_UINT16
, BASE_DEC
, NULL
, 0,
4250 { &hf_mip6_hack_code
,
4251 { "Code", "mip6.hack.code",
4252 FT_UINT8
, BASE_DEC
, NULL
, 0,
4255 { &hf_mip6_opt_3gpp_reserved
,
4256 { "Reserved", "mip6.3gpp.reserved",
4257 FT_UINT8
, BASE_DEC
, NULL
, 0xfe,
4260 { &hf_mip6_opt_3gpp_flag_m
,
4261 { "M flag", "mip6.3gpp.flag.m",
4262 FT_BOOLEAN
, 8, NULL
, 0x01,
4265 { &hf_mip6_opt_3gpp_spec_pmipv6_err_code
,
4266 { "3GPP Specific PMIPv6 Error Code", "mip6.3gpp.spec_pmipv6_err_code",
4267 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, >pv2_cause_vals_ext
, 0x0,
4268 "GTPv2 Cause values", HFILL
}
4270 { &hf_mip6_opt_3gpp_pdn_gw_ipv4_addr
,
4271 { "PDN GW IPv4 address", "mip6.3gpp.pdn_gw_ipv4_addr",
4272 FT_IPv4
, BASE_NONE
, NULL
, 0,
4275 { &hf_mip6_opt_3gpp_pdn_gw_ipv6_addr
,
4276 { "PDN GW IPv6 address", "mip6.3gpp.pdn_gw_ipv6_addr",
4277 FT_IPv6
, BASE_NONE
, NULL
, 0,
4280 { &hf_mip6_opt_3gpp_dhcpv4_addr_all_proc_ind
,
4281 { "DHCPv4 Address Allocation Procedure Indication", "mip6.3gpp.dhcpv4_addr_all_proc_ind",
4282 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4285 { &hf_mip6_opt_3gpp_pdn_type
,
4286 { "PDN type", "mip6.3gpp.pdn_type",
4287 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4290 { &hf_mip6_opt_3gpp_pdn_ind_cause
,
4291 { "Cause", "mip6.3gpp.pdn_ind_cause",
4292 FT_UINT8
, BASE_DEC
|BASE_EXT_STRING
, >pv2_cause_vals_ext
, 0x0,
4293 "GTPv2 Cause values", HFILL
}
4295 { &hf_mip6_opt_3gpp_chg_id
,
4296 { "Charging ID", "mip6.3gpp.chg_id",
4297 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4300 { &hf_mip6_opt_3gpp_charging_characteristic
,
4301 {"Charging Characteristic", "mip6.3gpp.charging_characteristic",
4302 FT_UINT16
, BASE_HEX
, NULL
, 0xffff,
4305 { &hf_mip6_opt_3gpp_mei
,
4306 {"Mobile Equipment Identity (MEI)", "mip6.3gpp.mei",
4307 FT_STRING
, BASE_NONE
, NULL
, 0,
4310 { &hf_mip6_opt_3gpp_msisdn
,
4311 {"MSISDN", "mip6.3gpp.msisdn",
4312 FT_STRING
, BASE_NONE
, NULL
, 0,
4315 { &hf_mip6_opt_3gpp_apn_rest
,
4316 { "APN Restriction", "mip6.3gpp.apn_rest",
4317 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4320 { &hf_mip6_opt_3gpp_max_apn_rest
,
4321 { "Maximum APN Restriction", "mip6.3gpp.max_apn_rest",
4322 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4325 { &hf_mip6_opt_3gpp_imsi
,
4326 {"Unauthenticated IMSI", "mip6.3gpp.imsi",
4327 FT_STRING
, BASE_NONE
, NULL
, 0,
4330 { &hf_mip6_opt_3gpp_pdn_conn_id
,
4331 { "PDN Connection ID", "mip6.3gpp.pdn_conn_id",
4332 FT_UINT8
, BASE_DEC
, NULL
, 0x0f,
4335 { &hf_mip6_opt_3gpp_lapi
,
4336 {"LAPI (Low Access Priority Indication)", "mip6.3gpp.lapi",
4337 FT_BOOLEAN
, 8, NULL
, 0x01,
4341 { &hf_mip6_bra_interval
,
4342 { "Refresh interval", "mip6.bra.interval",
4343 FT_UINT16
, BASE_DEC
, NULL
, 0,
4347 { &hf_mip6_acoa_acoa
,
4348 { "Alternate care-of address", "mip6.acoa.acoa",
4349 FT_IPv6
, BASE_NONE
, NULL
, 0,
4354 { "Home nonce index", "mip6.ni.hni",
4355 FT_UINT16
, BASE_DEC
, NULL
, 0,
4359 { "Care-of nonce index", "mip6.ni.cni",
4360 FT_UINT16
, BASE_DEC
, NULL
, 0,
4364 { &hf_mip6_bad_auth
,
4365 { "Authenticator", "mip6.bad.auth",
4366 FT_BYTES
, BASE_NONE
, NULL
, 0,
4371 { "Link-layer address", "mip6.lla",
4372 FT_BYTES
, SEP_COLON
, NULL
, 0,
4376 { &hf_fmip6_lla_optcode
,
4377 { "Option-Code", "mip6.lla.optcode",
4378 FT_UINT8
, BASE_DEC
, VALS(fmip6_lla_optcode_value
), 0,
4382 { &hf_mip6_nemo_mnp_pfl
,
4383 { "Mobile Network Prefix Length", "mip6.nemo.mnp.pfl",
4384 FT_UINT8
, BASE_DEC
, NULL
, 0,
4388 { &hf_mip6_nemo_mnp_mnp
,
4389 { "Mobile Network Prefix", "mip6.nemo.mnp.mnp",
4390 FT_IPv6
, BASE_NONE
, NULL
, 0,
4395 { &hf_mip6_mnid_subtype
,
4396 { "Subtype", "mip6.mnid.subtype",
4397 FT_UINT8
, BASE_DEC
, VALS(mip6_mnid_subtype_value
), 0,
4400 { &hf_mip6_mnid_identifier
,
4401 { "Identifier", "mip6.mnid.identifier",
4402 FT_STRING
, BASE_NONE
, NULL
, 0x0,
4405 { &hf_mip6_opt_auth_sub_type
,
4406 { "Subtype", "mip6.auth.subtype",
4407 FT_UINT8
, BASE_DEC
, VALS(mip6_auth_subtype_value
), 0,
4410 { &hf_mip6_opt_auth_mobility_spi
,
4411 { "Mobility SPI", "mip6.auth.mobility_spi",
4412 FT_UINT32
, BASE_DEC
, NULL
, 0,
4415 { &hf_mip6_opt_auth_auth_data
,
4416 { "Authentication Data", "mip6.auth.auth_data",
4417 FT_BYTES
, BASE_NONE
, NULL
, 0,
4420 { &hf_mip6_opt_mseg_id_timestamp
,
4421 { "Timestamp", "mip6.mseg_id.timestamp",
4422 FT_ABSOLUTE_TIME
, ABSOLUTE_TIME_UTC
, NULL
, 0,
4425 { &hf_mip6_opt_cgar_cga_par
,
4426 { "CGA Parameters", "mip6.cgar.cga_par",
4427 FT_BYTES
, BASE_NONE
, NULL
, 0,
4430 { &hf_mip6_opt_sign_sign
,
4431 { "CGA Parameters", "mip6.sign.sign",
4432 FT_BYTES
, BASE_NONE
, NULL
, 0,
4435 { &hf_mip6_opt_phkt_phkt
,
4436 { "Permanent Home Keygen Token", "mip6.phkt.phkt",
4437 FT_BYTES
, BASE_NONE
, NULL
, 0,
4440 { &hf_mip6_opt_mocot_co_keygen_tok
,
4441 { "Care-of Keygen Token", "mip6.mocot.co_keygen_tok",
4442 FT_BYTES
, BASE_NONE
, NULL
, 0,
4445 { &hf_mip6_opt_dnsu_status
,
4446 { "Status", "mip6.dnsu.status",
4447 FT_UINT8
, BASE_DEC
, VALS(mip6_dnsu_status_values
), 0,
4450 { &hf_mip6_opt_dnsu_flag_r
,
4451 { "R flag", "mip6.dnsu.flag.r",
4452 FT_BOOLEAN
, 8, TFS(&mip6_dnsu_r_flag_value
), 0x80,
4455 { &hf_mip6_opt_dnsu_mn_id
,
4456 { "MN identity (FQDN)", "mip6.dnsu.mn_id",
4457 FT_BYTES
, BASE_NONE
, NULL
, 0,
4460 { &hf_mip6_opt_em_data
,
4461 { "Data", "mip6.em.data",
4462 FT_BYTES
, BASE_NONE
, NULL
, 0,
4466 { "Vendor Id", "mip6.vsm.vendorId",
4467 FT_UINT32
, BASE_ENTERPRISES
, STRINGS_ENTERPRISES
, 0x0,
4470 { &hf_mip6_vsm_subtype
,
4471 { "Subtype", "mip6.vsm.subtype",
4472 FT_UINT8
, BASE_DEC
, VALS(mip6_vsm_subtype_value
), 0,
4475 { &hf_mip6_vsm_subtype_3gpp
,
4476 { "Subtype", "mip6.vsm.subtype",
4477 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &mip6_vsm_subtype_3gpp_value_ext
, 0,
4480 { &hf_mip6_opt_ss_identifier
,
4481 { "Identifier", "mip6.ss.identifier",
4482 FT_STRING
, BASE_NONE
, NULL
, 0x0,
4485 { &hf_mip6_opt_badff_spi
,
4486 { "SPI", "mip6.badff.spi",
4487 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4490 { &hf_mip6_opt_badff_auth
,
4491 { "Authenticator", "mip6.badff.auth",
4492 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4496 { "Handoff Indicator", "mip6.hi",
4497 FT_UINT8
, BASE_DEC
, VALS(pmip6_hi_opttype_value
), 0,
4500 { &hf_pmip6_hi_reserved
,
4501 { "Reserved", "mip6.hi.reserved",
4502 FT_UINT8
, BASE_DEC
, NULL
, 0,
4505 { &hf_pmip6_att_reserved
,
4506 { "Reserved", "mip6.att.reserved",
4507 FT_UINT8
, BASE_DEC
, NULL
, 0,
4510 { &hf_pmip6_att_att
,
4511 { "Access Technology Type", "mip6.att",
4512 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &pmip6_att_att_value_ext
, 0,
4515 { &hf_mip6_opt_mnlli_reserved
,
4516 { "Reserved", "mip6.mnlli.reserved",
4517 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4520 { &hf_mip6_opt_mnlli_lli
,
4521 { "Link-layer Identifier", "mip6.mnlli.lli",
4522 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4525 { &hf_pmip6_timestamp
,
4526 { "Timestamp", "mip6.timestamp_tmp",
4527 FT_ABSOLUTE_TIME
, ABSOLUTE_TIME_UTC
, NULL
, 0,
4530 { &hf_pmip6_opt_lila_lla
,
4531 { "Link-local Address", "mip6.lila_lla",
4532 FT_IPv6
, BASE_NONE
, NULL
, 0x0,
4536 { "Restart Counter", "mip6.rc",
4537 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4540 { &hf_mip6_ipv4ha_preflen
,
4541 { "Prefix-len", "mip6.ipv4ha.preflen",
4542 FT_UINT8
, BASE_DEC
, NULL
, 0xfc,
4546 { &hf_mip6_ipv4ha_p_flag
,
4547 { "mobile network prefix (P) flag", "mip6.ipv4ha.p_flag",
4548 FT_BOOLEAN
, 16, TFS(&mip6_ipv4ha_p_flag_value
), 0x0200,
4552 { &hf_mip6_ipv4ha_ha
,
4553 { "IPv4 Home Address", "mip6.ipv4ha.ha",
4554 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
4557 { &hf_mip6_ipv4ha_reserved
,
4558 { "Reserved", "mip6.ipv4ha.reserved",
4559 FT_UINT8
, BASE_HEX
, NULL
, 0x0,
4562 { &hf_mip6_ipv4aa_status
,
4563 { "Status", "mip6.ipv4aa.sts",
4564 FT_UINT8
, BASE_DEC
, VALS(pmip6_ipv4aa_status_values
), 0x0,
4567 { &hf_mip6_opt_natd_f_flag
,
4568 { "(F) flag", "mip6.natd.f_flag",
4569 FT_BOOLEAN
, 16, TFS(&mip6_natd_f_flag_value
), 0x8000,
4572 { &hf_mip6_opt_natd_reserved
,
4573 { "Reserved", "mip6.natd.reserved",
4574 FT_UINT16
, BASE_DEC
, NULL
, 0x7fff,
4577 { &hf_mip6_opt_natd_refresh_t
,
4578 { "Refresh time", "mip6.natd.refresh_t",
4579 FT_UINT32
, BASE_DEC
|BASE_UNIT_STRING
, UNS(&units_seconds
), 0x0,
4582 { &hf_mip6_opt_ipv4coa_reserved
,
4583 { "Reserved", "mip6.ipv4coa.reserved",
4584 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4587 { &hf_mip6_opt_ipv4coa_addr
,
4588 { "IPv4 Care-of address", "mip6.ipv4coa.addr",
4589 FT_IPv4
, BASE_NONE
, NULL
, 0,
4592 { &hf_pmip6_gre_key
,
4593 { "GRE Key", "mip6.gre_key",
4594 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4598 { &hf_mip6_opt_mhipv6ap_opt_code
,
4599 { "Option-Code", "mip6.mhipv6ap.opt_code",
4600 FT_UINT8
, BASE_DEC
, NULL
, 0,
4603 { &hf_mip6_opt_mhipv6ap_prefix_l
,
4604 { "Prefix Length", "mip6.mhipv6ap.len",
4605 FT_UINT8
, BASE_DEC
, NULL
, 0,
4608 { &hf_mip6_opt_mhipv6ap_ipv6_address
,
4609 { "IPv6 Address", "mip6.mhipv6ap.ipv6_address",
4610 FT_IPv6
, BASE_NONE
, NULL
, 0,
4613 { &hf_mip6_opt_mhipv6ap_ipv6_address_prefix
,
4614 { "IPv6 Address/Prefix", "mip6.mhipv6ap.ipv6_address_prefix",
4615 FT_STRING
, BASE_NONE
, NULL
, 0,
4618 { &hf_mip6_opt_bi_bid
,
4619 { "Binding ID (BID)", "mip6.bi.bid",
4620 FT_UINT16
, BASE_DEC
, NULL
, 0,
4623 { &hf_mip6_opt_bi_status
,
4624 { "Status", "mip6.bi.status",
4625 FT_UINT8
, BASE_DEC
, NULL
, 0,
4628 { &hf_mip6_bi_h_flag
,
4629 { "Simultaneous Home and Foreign Binding (H)", "mip6.bi.h_flag",
4630 FT_BOOLEAN
, 8, NULL
, 0x80,
4633 { &hf_mip6_bi_coa_ipv4
,
4634 { "IPv4 care-of address (CoA)", "mip6.bi.coa_ipv4",
4635 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
4638 { &hf_mip6_bi_coa_ipv6
,
4639 { "IPv6 care-of address (CoA)", "mip6.bi.coa_ipv6",
4640 FT_IPv6
, BASE_NONE
, NULL
, 0x0,
4643 { &hf_mip6_binding_refresh_request
,
4644 { "Binding Refresh Request", "mip6.binding_refresh_request",
4645 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4648 { &hf_mip6_unknown_type_data
,
4649 { "Message Data", "mip6.unknown_type_data",
4650 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4653 { &hf_mip6_fast_neighbor_advertisement
,
4654 { "Fast Neighbor Advertisement", "mip6.fast_neighbor_advertisement",
4655 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4658 { &hf_mip6_vsm_data
,
4659 { "Data", "mip6.vsm.data",
4660 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4663 { &hf_mip6_vsm_req_data
,
4664 { "Req-Data", "mip6.vsm.req_data",
4665 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4668 { &hf_mip6_opt_padn
,
4669 { "PadN", "mip6.padn",
4670 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4673 { &hf_mip6_ipv4dra_reserved
,
4674 { "Reserved", "mip6.ipv4dra.reserved",
4675 FT_UINT16
, BASE_DEC
, NULL
, 0,
4678 { &hf_mip6_ipv4dra_dra
,
4679 { "IPv4 Default-Router Address", "mip6.ipv4dra.dra",
4680 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
4683 { &hf_mip6_ipv4dsm_reserved
,
4684 { "Reserved", "mip6.ipv4dsm.reserved",
4685 FT_UINT16
, BASE_DEC
, NULL
, 0xfffe,
4688 { &hf_mip6_ipv4dsm_s_flag
,
4689 { "DHCP Support Mode (S)", "mip6.ipv4dsm.s_flag",
4690 FT_BOOLEAN
, 16, TFS(&mip6_ipv4dsm_s_flag_value
), 0x0001,
4694 { &hf_mip6_cr_reserved
,
4695 { "Reserved", "mip6.cr.reserved",
4696 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4700 { &hf_mip6_cr_req_type
,
4701 { "Req-type", "mip6.cr.req_type",
4702 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &mip6_mobility_options_ext
, 0,
4705 { &hf_mip6_cr_req_length
,
4706 { "Req-length", "mip6.cr.req_length",
4707 FT_UINT8
, BASE_DEC
, NULL
, 0,
4710 { &hf_mip6_lmaa_opt_code
,
4711 { "Option-Code", "mip6.lmaa.opt_code",
4712 FT_UINT8
, BASE_DEC
, NULL
, 0,
4715 { &hf_mip6_lmaa_reserved
,
4716 { "Reserved", "mip6.lmaa.reserved",
4717 FT_UINT8
, BASE_DEC
, NULL
, 0,
4720 { &hf_mip6_lmaa_ipv4
,
4721 { "Local Mobility Anchor Address", "mip6.lmaa.ipv4",
4722 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
4725 { &hf_mip6_lmaa_ipv6
,
4726 { "Local Mobility Anchor Address", "mip6.lmaa.ipv6",
4727 FT_IPv6
, BASE_NONE
, NULL
, 0x0,
4730 { &hf_mip6_mobility_opt
,
4731 { "Mobility Option", "mip6.mobility_opt",
4732 FT_UINT8
, BASE_DEC
| BASE_EXT_STRING
, &mip6_mobility_options_ext
, 0,
4736 { "Length", "mip6.mobility_opt.len",
4737 FT_UINT8
, BASE_DEC
, NULL
, 0,
4740 { &hf_pmip6_bri_brtype
,
4741 { "B.R. Type", "mip6.bri_br.type",
4742 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4746 { &hf_pmip6_bri_rtrigger
,
4747 { "R. Trigger", "mip6.bri_r.trigger",
4748 FT_UINT8
, BASE_DEC
, VALS(pmip6_bri_rtrigger
), 0x0,
4752 { &hf_pmip6_bri_status
,
4753 { "Status", "mip6.bri_status",
4754 FT_UINT8
, BASE_DEC
, VALS(pmip6_bri_status
), 0x0,
4758 { &hf_pmip6_bri_seqnr
,
4759 { "Sequence Number", "mip6.bri_seqnr",
4760 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4764 { &hf_pmip6_bri_ip_flag
,
4765 { "Proxy Binding (P) Flag", "mip6.bri_ip",
4766 FT_BOOLEAN
, 16, TFS(&tfs_set_notset
), 0x8000,
4770 { &hf_pmip6_bri_iv_flag
,
4771 { "IPv4 HoA Binding Only (V) Flag", "mip6.bri_iv",
4772 FT_BOOLEAN
, 16, TFS(&tfs_set_notset
), 0x4000,
4776 { &hf_pmip6_bri_ig_flag
,
4777 { "Global (G) Flag", "mip6.bri_ig",
4778 FT_BOOLEAN
, 16, TFS(&tfs_set_notset
), 0x2000,
4782 { &hf_pmip6_bri_ap_flag
,
4783 { "Proxy Binding (P) Flag", "mip6.bri_ap",
4784 FT_BOOLEAN
, 16, TFS(&tfs_set_notset
), 0x8000,
4787 { &hf_pmip6_bri_av_flag
,
4788 { "IPv4 HoA Binding Only (V) Flag", "mip6.bri_av",
4789 FT_BOOLEAN
, 16, TFS(&tfs_set_notset
), 0x4000,
4793 { &hf_pmip6_bri_ag_flag
,
4794 { "Global (G) Flag", "mip6.bri_ag",
4795 FT_BOOLEAN
, 16, TFS(&tfs_set_notset
), 0x2000,
4799 { &hf_pmip6_bri_res
,
4800 { "Reserved", "mip6.bri_res",
4801 FT_UINT16
, BASE_HEX
, NULL
, 0x1FFF,
4802 "Must be zero", HFILL
}
4805 { &hf_pmip6_lri_sequence
,
4806 { "Sequence", "mip6.lri.sequence",
4807 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4808 "A monotonically increasing integer", HFILL
}
4811 { &hf_pmip6_lri_reserved
,
4812 { "Reserved", "mip6.lri.reserved",
4813 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
4814 "This field is unused and MUST be set to zero", HFILL
}
4817 { &hf_pmip6_lri_lifetime
,
4818 { "Lifetime", "mip6.lri.lifetime",
4819 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
4820 "The requested time, in seconds", HFILL
}
4823 { &hf_pmip6_lra_sequence
,
4824 { "Sequence", "mip6.lra.sequence",
4825 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4826 "A monotonically increasing integer", HFILL
}
4830 { "unsolicited", "mip6.lri.unsolicited",
4831 FT_BOOLEAN
, 8, TFS(&tfs_yes_no
), 0x80,
4832 "When set to 1, the LRA message is sent unsolicited", HFILL
}
4835 { &hf_pmip6_lra_reserved
,
4836 { "Reserved", "mip6.lra.reserved",
4837 FT_UINT8
, BASE_HEX
, NULL
, 0x7F,
4838 "This field is unused and MUST be set to zero", HFILL
}
4841 { &hf_pmip6_lra_status
,
4842 { "Status", "mip6.lra.status",
4843 FT_UINT8
, BASE_DEC
, VALS(pmip6_lra_status_vals
), 0x0,
4844 "Indicating the result of processing the Localized Routing Acknowledgment message.", HFILL
}
4847 { &hf_pmip6_lra_lifetime
,
4848 { "Lifetime", "mip6.lra.lifetime",
4849 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
4850 "The requested time, in seconds", HFILL
}
4853 { &hf_mip6_opt_recap_reserved
,
4854 { "Reserved", "mip6.recap.reserved",
4855 FT_UINT16
, BASE_HEX
, NULL
, 0x0,
4856 "Must be zero", HFILL
}
4859 { &hf_mip6_opt_redir_k
,
4860 { "K", "mip6.redir.k",
4861 FT_BOOLEAN
, 16, NULL
, MIP6_REDIR_FLAG_K
,
4862 "bit is set (1) if the Optional IPv6 r2LMA Address is included in the mobility option", HFILL
}
4864 { &hf_mip6_opt_redir_n
,
4865 { "N", "mip6.redir.n",
4866 FT_BOOLEAN
, 16, NULL
, MIP6_REDIR_FLAG_N
,
4867 "bit is set (1) if the Optional IPv4 r2LMA Address is included in the mobility option", HFILL
}
4869 { &hf_mip6_opt_redir_reserved
,
4870 { "Reserved", "mip6.redir.reserved",
4871 FT_UINT16
, BASE_HEX
, NULL
, MIP6_REDIR_FLAG_RSV
,
4872 "Must be zero", HFILL
}
4874 { &hf_mip6_opt_redir_addr_r2LMA_ipv6
,
4875 { "IPv6 r2LMA Address", "mip6.redir.addr_r2lma_ipv6",
4876 FT_IPv6
, BASE_NONE
, NULL
, 0x0,
4879 { &hf_mip6_opt_redir_addr_r2LMA_ipv4
,
4880 { "IPv4 r2LMA Address", "mip6.redir.addr_r2lma_ipv4",
4881 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
4885 { &hf_mip6_opt_load_inf_priority
,
4886 { "Priority", "mip6.load_inf.priority",
4887 FT_UINT16
, BASE_DEC
, NULL
, 0x0,
4890 { &hf_mip6_opt_load_inf_sessions_in_use
,
4891 { "Sessions in Use", "mip6.load_inf.sessions_in_use",
4892 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4895 { &hf_mip6_opt_load_inf_maximum_sessions
,
4896 { "Maximum Sessions", "mip6.load_inf.maximum_sessions",
4897 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4900 { &hf_mip6_opt_load_inf_used_capacity
,
4901 { "Used Capacity", "mip6.load_inf.used_capacity",
4902 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4905 { &hf_mip6_opt_load_inf_maximum_capacity
,
4906 { "Maximum Capacity", "mip6.load_inf.maximum_capacity",
4907 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4911 { &hf_mip6_opt_alt_ip4
,
4912 { "Alternate IPv4 Care-of Address", "mip6.alt_ip4",
4913 FT_IPv4
, BASE_NONE
, NULL
, 0x0,
4917 { &hf_mip6_opt_mng_sub_type
,
4918 { "Sub Type", "mip6.mng.sub_type",
4919 FT_UINT8
, BASE_DEC
, VALS(mip6_mng_id_type_vals
), 0x0,
4923 { &hf_mip6_opt_mng_reserved
,
4924 { "Reserved", "mip6.mng.reserved",
4925 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4929 { &hf_mip6_opt_mng_mng_id
,
4930 { "Mobile Node Group Identifier", "mip6.mng.mng_id",
4931 FT_UINT32
, BASE_DEC
, NULL
, 0x0,
4935 { &hf_mip6_opt_mag_ipv6_reserved
,
4936 { "Reserved", "mip6.mag_ipv6.reserved",
4937 FT_UINT8
, BASE_HEX
, NULL
, 0x0,
4941 { &hf_mip6_opt_mag_ipv6_address_length
,
4942 { "Address Length", "mip6.mag_ipv6.address_length",
4943 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4944 "This field MUST be set to 128", HFILL
}
4947 { &hf_mip6_opt_mag_ipv6_address
,
4948 { "Address", "mip6.mag_ipv6.address",
4949 FT_IPv6
, BASE_NONE
, NULL
, 0x0,
4953 { &hf_mip6_opt_acc_net_id_sub
,
4954 { "ANI", "mip6.acc_net_id",
4955 FT_NONE
, BASE_NONE
, NULL
, 0x0,
4960 { &hf_mip6_opt_acc_net_id_sub_opt
,
4961 { "ANI Type", "mip6.acc_net_id.ani",
4962 FT_UINT8
, BASE_DEC
, VALS(mmip6_opt_acc_net_id_sub_opt_vals
), 0x0,
4966 { &hf_mip6_opt_acc_net_id_sub_opt_len
,
4967 { "Length", "mip6.acc_net_id.sub_opt_len",
4968 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4972 { &hf_mip6_opt_acc_net_id_sub_opt_e_bit
,
4973 { "E(Encoding)", "mip6.acc_net_id.e_bit",
4974 FT_BOOLEAN
, 8, TFS(&mip6_opt_acc_net_id_sub_opt_e_bit_value
), 0x80,
4978 { &hf_mip6_opt_acc_net_id_sub_opt_net_name_len
,
4979 { "Net-Name Length", "mip6.acc_net_id.net_name_len",
4980 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
4984 { &hf_mip6_opt_acc_net_id_sub_opt_net_name
,
4985 { "Network Name", "mip6.acc_net_id.net_name",
4986 FT_STRING
, BASE_NONE
, NULL
, 0x0,
4990 { &hf_mip6_opt_acc_net_id_sub_opt_net_name_data
,
4991 { "Network Name", "mip6.acc_net_id.net_name_data",
4992 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
4993 "Network Name with undefined format", HFILL
}
4996 { &hf_mip6_opt_acc_net_id_sub_opt_ap_name_len
,
4997 { "AP-Name Length", "mip6.acc_net_id.ap_name_len",
4998 FT_UINT8
, BASE_DEC
, NULL
, 0x0,
5002 { &hf_mip6_opt_acc_net_id_sub_opt_ap_name
,
5003 { "Access-Point Name", "mip6.acc_net_id.ap_name",
5004 FT_STRING
, BASE_NONE
, NULL
, 0x0,
5008 { &hf_mip6_opt_acc_net_id_sub_opt_geo_latitude_degrees
,
5009 { "Latitude Degrees", "mip6.acc_net_id.geo.latitude_degrees",
5010 FT_INT24
, BASE_CUSTOM
, CF_FUNC(degrees_base_custom
), 0x0,
5014 { &hf_mip6_opt_acc_net_id_sub_opt_geo_longitude_degrees
,
5015 { "Longitude Degrees", "mip6.acc_net_id.geo.longitude_degrees",
5016 FT_INT24
, BASE_CUSTOM
, CF_FUNC(degrees_base_custom
), 0x0,
5020 { &hf_mip6_opt_acc_net_id_sub_opt_op_id_type
,
5021 { "Op-ID Type", "mip6.acc_net_id.op_id.type",
5022 FT_UINT8
, BASE_DEC
, VALS(mip6_opt_acc_net_id_sub_opt_op_id_type
), 0x0,
5026 { &hf_mip6_opt_acc_net_id_sub_opt_op_id
,
5027 { "Op-ID", "mip6.acc_net_id.op_id",
5028 FT_BYTES
, BASE_NONE
, NULL
, 0x0,
5032 { &hf_mip6_opt_dmnp_v_flag
,
5033 { "IPv4 Prefix (V) flag", "mip6.dmnp.v_flag",
5034 FT_BOOLEAN
, 8, TFS(&mip6_dmnp_v_flag_value
), 0x80,
5038 { &hf_mip6_opt_dmnp_reserved
,
5039 { "Reserved", "mip6.dmnp.reserved",
5040 FT_UINT8
, BASE_DEC
, NULL
, 0x7F,
5044 { &hf_mip6_opt_dmnp_prefix_len
,
5045 { "Prefix Length", "mip6.dmnp.prefix_len",
5046 FT_UINT8
, BASE_DEC
, NULL
, 0,
5049 { &hf_mip6_opt_dmnp_dmnp_ipv4
,
5050 { "IPv4 Delegated Mobile Network Prefix", "mip6.dmnp.dmnp_ipv4",
5051 FT_IPv4
, BASE_NONE
, NULL
, 0,
5054 { &hf_mip6_opt_dmnp_dmnp_ipv6
,
5055 { "IPv6 Delegated Mobile Network Prefix", "mip6.dmnp.dmnp_ipv6",
5056 FT_IPv6
, BASE_NONE
, NULL
, 0,
5062 /* Setup protocol subtree array */
5063 static int *ett
[] = {
5073 &ett_mip6_nemo_opt_mnp
,
5076 &ett_mip6_opt_mesgid
,
5077 &ett_mip6_opt_cgapr
,
5081 &ett_mip6_opt_mocoti
,
5082 &ett_mip6_opt_mocot
,
5087 &ett_mip6_opt_badff
,
5088 &ett_mip6_opt_unknown
,
5092 &ett_pmip6_opt_mnlli
,
5096 &ett_mip6_opt_ipv4ha
,
5097 &ett_mip6_opt_ipv4aa
,
5099 &ett_mip6_opt_ipv4coa
,
5100 &ett_pmip6_opt_grek
,
5101 &ett_pmip6_opt_mhipv6ap
,
5103 &ett_mip6_opt_ipv4hareq
,
5104 &ett_mip6_opt_ipv4harep
,
5105 &ett_mip6_opt_ipv4dra
,
5106 &ett_mip6_opt_ipv4dsm
,
5109 &ett_mip6_opt_recap
,
5110 &ett_mip6_opt_redir
,
5111 &ett_mip6_opt_load_inf
,
5112 &ett_mip6_opt_alt_ip4
,
5114 &ett_mip6_opt_mag_ipv6
,
5115 &ett_mip6_opt_acc_net_id
,
5116 &ett_mip6_sub_opt_acc_net_id
,
5120 static ei_register_info ei
[] = {
5121 { &ei_mip6_ie_not_dissected
, { "mip6.ie_not_dissected", PI_UNDECODED
, PI_NOTE
, "IE data not dissected yet", EXPFILL
}},
5122 { &ei_mip6_ani_type_not_dissected
, { "mip6.acc_net_id.ani.unknown", PI_UNDECODED
, PI_NOTE
, "ANI Type not dissect yet", EXPFILL
}},
5123 { &ei_mip6_opt_len_invalid
, { "mip6.opt.len.invalid", PI_PROTOCOL
, PI_WARN
, "Invalid length for option", EXPFILL
}},
5124 { &ei_mip6_vsm_data_not_dissected
, { "mip6.vsm.data_not_dissected", PI_UNDECODED
, PI_NOTE
, "Data (Not dissected yet)", EXPFILL
}},
5125 { &ei_mip6_bogus_header_length
, { "mip6.bogus_header_length", PI_PROTOCOL
, PI_WARN
, "Bogus header length", EXPFILL
}},
5128 expert_module_t
* expert_mip6
;
5130 /* Register the protocol name and description */
5131 proto_mip6
= proto_register_protocol("Mobile IPv6", "MIPv6", "mipv6");
5133 /* Register the dissector by name */
5134 mip6_handle
= register_dissector("mip6", dissect_mip6
, proto_mip6
);
5136 /* Required function calls to register the header fields and subtrees used */
5137 proto_register_field_array(proto_mip6
, hf
, array_length(hf
));
5138 proto_register_subtree_array(ett
, array_length(ett
));
5139 expert_mip6
= expert_register_protocol(proto_mip6
);
5140 expert_register_field_array(expert_mip6
, ei
, array_length(ei
));
5142 mip6_vsm_dissector_table
= register_dissector_table("mip6.vsm", "Mobile IPv6 vendor specific option", proto_mip6
, FT_UINT32
, BASE_DEC
);
5143 mip6_option_table
= register_dissector_table("mip6.option", "MIPv6 Options", proto_mip6
, FT_UINT8
, BASE_DEC
);
5145 /* Register MIPv6 options as their own protocols so we can get the name of the option */
5146 proto_mip6_option_pad1
= proto_register_protocol_in_name_only("MIPv6 Option - Pad1", "Pad1", "mip6.options.pad1", proto_mip6
, FT_BYTES
);
5147 proto_mip6_option_padn
= proto_register_protocol_in_name_only("MIPv6 Option - PadN", "PadN", "mip6.options.padn", proto_mip6
, FT_BYTES
);
5148 proto_mip6_option_bra
= proto_register_protocol_in_name_only("MIPv6 Option - Binding Refresh Advice", "Binding Refresh Advice", "mip6.options.bra", proto_mip6
, FT_BYTES
);
5149 proto_mip6_option_acoa
= proto_register_protocol_in_name_only("MIPv6 Option - Alternate Care-of Address", "Alternate Care-of Address", "mip6.options.acoa", proto_mip6
, FT_BYTES
);
5150 proto_mip6_option_ni
= proto_register_protocol_in_name_only("MIPv6 Option - Nonce Indices", "Nonce Indices", "mip6.options.ni", proto_mip6
, FT_BYTES
);
5151 proto_mip6_option_bad_auth
= proto_register_protocol_in_name_only("MIPv6 Option - Authorization Data", "Authorization Data", "mip6.options.bad_auth", proto_mip6
, FT_BYTES
);
5152 proto_mip6_option_mnp
= proto_register_protocol_in_name_only("MIPv6 Option - Mobile Network Prefix", "Mobile Network Prefix", "mip6.options.mnp", proto_mip6
, FT_BYTES
);
5153 proto_mip6_option_mhlla
= proto_register_protocol_in_name_only("MIPv6 Option - Mobility Header Link-Layer Address", "Mobility Header Link-Layer Address", "mip6.options.mhlla", proto_mip6
, FT_BYTES
);
5154 proto_mip6_option_mnid
= proto_register_protocol_in_name_only("MIPv6 Option - Mobile Node Identifier", "Mobile Node Identifier", "mip6.options.mnid", proto_mip6
, FT_BYTES
);
5155 proto_mip6_option_auth
= proto_register_protocol_in_name_only("MIPv6 Option - AUTH-OPTION-TYPE", "AUTH-OPTION-TYPE", "mip6.options.auth", proto_mip6
, FT_BYTES
);
5156 proto_mip6_option_mseg_id
= proto_register_protocol_in_name_only("MIPv6 Option - MESG-ID-OPTION-TYPE", "MESG-ID-OPTION-TYPE", "mip6.options.mseg_id", proto_mip6
, FT_BYTES
);
5157 proto_mip6_option_cgapr
= proto_register_protocol_in_name_only("MIPv6 Option - CGA Parameters Request", "CGA Parameters Request", "mip6.options.cgapr", proto_mip6
, FT_BYTES
);
5158 proto_mip6_option_cgar
= proto_register_protocol_in_name_only("MIPv6 Option - CGA Parameters", "CGA Parameters", "mip6.options.cgar", proto_mip6
, FT_BYTES
);
5159 proto_mip6_option_sign
= proto_register_protocol_in_name_only("MIPv6 Option - Signature", "Signature", "mip6.options.sign", proto_mip6
, FT_BYTES
);
5160 proto_mip6_option_phkt
= proto_register_protocol_in_name_only("MIPv6 Option - Permanent Home Keygen Token", "Permanent Home Keygen Token", "mip6.options.phkt", proto_mip6
, FT_BYTES
);
5161 proto_mip6_option_coti
= proto_register_protocol_in_name_only("MIPv6 Option - Care-of Test Init", "Care-of Test Init", "mip6.options.coti", proto_mip6
, FT_BYTES
);
5162 proto_mip6_option_cot
= proto_register_protocol_in_name_only("MIPv6 Option - Care-of Test", "Care-of Test", "mip6.options.cot", proto_mip6
, FT_BYTES
);
5163 proto_mip6_option_dnsu
= proto_register_protocol_in_name_only("MIPv6 Option - DNS-UPDATE-TYPE", "DNS-UPDATE-TYPE", "mip6.options.dnsu", proto_mip6
, FT_BYTES
);
5164 proto_mip6_option_em
= proto_register_protocol_in_name_only("MIPv6 Option - Experimental", "Experimental", "mip6.options.em", proto_mip6
, FT_BYTES
);
5165 proto_mip6_option_vsm
= proto_register_protocol_in_name_only("MIPv6 Option - Vendor Specific", "Vendor Specific", "mip6.options.vsm", proto_mip6
, FT_BYTES
);
5166 proto_mip6_option_ssm
= proto_register_protocol_in_name_only("MIPv6 Option - Service Selection", "Service Selection", "mip6.options.ssm", proto_mip6
, FT_BYTES
);
5167 proto_mip6_option_badff
= proto_register_protocol_in_name_only("MIPv6 Option - Binding Authorization Data for FMIPv6 (BADF)", "Binding Authorization Data for FMIPv6 (BADF)", "mip6.options.badff", proto_mip6
, FT_BYTES
);
5168 proto_mip6_option_hnp
= proto_register_protocol_in_name_only("MIPv6 Option - Home Network Prefix", "Home Network Prefix", "mip6.options.hnp", proto_mip6
, FT_BYTES
);
5169 proto_mip6_option_hi
= proto_register_protocol_in_name_only("MIPv6 Option - Handoff Indicator", "Handoff Indicator", "mip6.options.hi", proto_mip6
, FT_BYTES
);
5170 proto_mip6_option_att
= proto_register_protocol_in_name_only("MIPv6 Option - Access Technology Type Option", "Access Technology Type Option", "mip6.options.att", proto_mip6
, FT_BYTES
);
5171 proto_mip6_option_mnlli
= proto_register_protocol_in_name_only("MIPv6 Option - Mobile Node Link-layer Identifier", "Mobile Node Link-layer Identifier", "mip6.options.mnlli", proto_mip6
, FT_BYTES
);
5172 proto_mip6_option_lla
= proto_register_protocol_in_name_only("MIPv6 Option - Link-local Address", "Link-local Address", "mip6.options.lla", proto_mip6
, FT_BYTES
);
5173 proto_mip6_option_ts
= proto_register_protocol_in_name_only("MIPv6 Option - Timestamp", "Timestamp", "mip6.options.ts", proto_mip6
, FT_BYTES
);
5174 proto_mip6_option_rc
= proto_register_protocol_in_name_only("MIPv6 Option - Restart Counter", "Restart Counter", "mip6.options.rc", proto_mip6
, FT_BYTES
);
5175 proto_mip6_option_ipv4ha
= proto_register_protocol_in_name_only("MIPv6 Option - IPv4 Home Address", "IPv4 Home Address", "mip6.options.ipv4ha", proto_mip6
, FT_BYTES
);
5176 proto_mip6_option_ipv4aa
= proto_register_protocol_in_name_only("MIPv6 Option - IPv4 Address Acknowledgement", "IPv4 Address Acknowledgement", "mip6.options.ipv4aa", proto_mip6
, FT_BYTES
);
5177 proto_mip6_option_natd
= proto_register_protocol_in_name_only("MIPv6 Option - NAT Detection", "NAT Detection", "mip6.options.natd", proto_mip6
, FT_BYTES
);
5178 proto_mip6_option_ipv4coa
= proto_register_protocol_in_name_only("MIPv6 Option - IPv4 Care-of Address", "IPv4 Care-of Address", "mip6.options.ipv4coa", proto_mip6
, FT_BYTES
);
5179 proto_mip6_option_grek
= proto_register_protocol_in_name_only("MIPv6 Option - GRE Key", "GRE Key", "mip6.options.grek", proto_mip6
, FT_BYTES
);
5180 proto_mip6_option_mhipv6ap
= proto_register_protocol_in_name_only("MIPv6 Option - Mobility Header IPv6 Address/Prefix", "Mobility Header IPv6 Address/Prefix", "mip6.options.mhipv6ap", proto_mip6
, FT_BYTES
);
5181 proto_mip6_option_bi
= proto_register_protocol_in_name_only("MIPv6 Option - Binding Identifier", "Binding Identifier", "mip6.options.bi", proto_mip6
, FT_BYTES
);
5182 proto_mip6_option_ipv4hareq
= proto_register_protocol_in_name_only("MIPv6 Option - IPv4 Home Address Request", "IPv4 Home Address Request", "mip6.options.ipv4hareq", proto_mip6
, FT_BYTES
);
5183 proto_mip6_option_ipv4harep
= proto_register_protocol_in_name_only("MIPv6 Option - IPv4 Home Address Reply", "IPv4 Home Address Reply", "mip6.options.ipv4harep", proto_mip6
, FT_BYTES
);
5184 proto_mip6_option_ipv4dra
= proto_register_protocol_in_name_only("MIPv6 Option - IPv4 Default-Router Address", "IPv4 Default-Router Address", "mip6.options.ipv4dra", proto_mip6
, FT_BYTES
);
5185 proto_mip6_option_ipv4dsm
= proto_register_protocol_in_name_only("MIPv6 Option - IPv4 DHCP Support Mode", "IPv4 DHCP Support Mode", "mip6.options.ipv4dsm", proto_mip6
, FT_BYTES
);
5186 proto_mip6_option_cr
= proto_register_protocol_in_name_only("MIPv6 Option - Context Request", "Context Request", "mip6.options.cr", proto_mip6
, FT_BYTES
);
5187 proto_mip6_option_lmaa
= proto_register_protocol_in_name_only("MIPv6 Option - Mobile Node Link-local Address Interface Identifier", "Mobile Node Link-local Address Interface Identifier", "mip6.options.lmaa", proto_mip6
, FT_BYTES
);
5188 proto_mip6_option_recap
= proto_register_protocol_in_name_only("MIPv6 Option - Redirect-Capability", "Redirect-Capability", "mip6.options.recap", proto_mip6
, FT_BYTES
);
5189 proto_mip6_option_redir
= proto_register_protocol_in_name_only("MIPv6 Option - Redirect", "Redirect", "mip6.options.redir", proto_mip6
, FT_BYTES
);
5190 proto_mip6_option_load_inf
= proto_register_protocol_in_name_only("MIPv6 Option - Load Information", "Load Information", "mip6.options.load_inf", proto_mip6
, FT_BYTES
);
5191 proto_mip6_option_alt_ip4
= proto_register_protocol_in_name_only("MIPv6 Option - Alternate IPv4", "Alternate IPv4", "mip6.options.alt_ip4", proto_mip6
, FT_BYTES
);
5192 proto_mip6_option_mng
= proto_register_protocol_in_name_only("MIPv6 Option - Mobile Node Group Identifier", "Mobile Node Group Identifier", "mip6.options.mng", proto_mip6
, FT_BYTES
);
5193 proto_mip6_option_mag_ipv6
= proto_register_protocol_in_name_only("MIPv6 Option - MAG IPv6 Address", "MAG IPv6 Address", "mip6.options.mag_ipv6", proto_mip6
, FT_BYTES
);
5194 proto_mip6_option_acc_net_id
= proto_register_protocol_in_name_only("MIPv6 Option - Access Network Identifier", "Access Network Identifier", "mip6.options.acc_net_id", proto_mip6
, FT_BYTES
);
5195 proto_mip6_option_dmnp
= proto_register_protocol_in_name_only("MIPv6 Option - Delegated Mobile Network Prefix", "Delegated Mobile Network Prefix", "mip6.options.dmnp", proto_mip6
, FT_BYTES
);
5199 proto_reg_handoff_mip6(void)
5201 dissector_add_uint("ip.proto", IP_PROTO_MIPV6_OLD
, mip6_handle
);
5202 dissector_add_uint("ip.proto", IP_PROTO_MIPV6
, mip6_handle
);
5204 /* Add support for PMIPv6 control messages over IPV4 */
5205 dissector_add_uint_with_preference("udp.port", UDP_PORT_PMIP6_CNTL
, mip6_handle
);
5206 ip_dissector_table
= find_dissector_table("ip.proto");
5208 dissector_add_uint("mip6.vsm", VENDOR_THE3GPP
, create_dissector_handle(dissect_mip6_opt_vsm_3gpp
, proto_mip6
));
5211 /* Create dissection function handles for all MIPv6 options */
5212 dissector_add_uint("mip6.option", MIP6_PADN
, create_dissector_handle( dissect_mip6_opt_padn
, proto_mip6_option_padn
));
5213 dissector_add_uint("mip6.option", MIP6_BRA
, create_dissector_handle( dissect_mip6_opt_bra
, proto_mip6_option_bra
));
5214 dissector_add_uint("mip6.option", MIP6_ACOA
, create_dissector_handle( dissect_mip6_opt_acoa
, proto_mip6_option_acoa
));
5215 dissector_add_uint("mip6.option", MIP6_NI
, create_dissector_handle( dissect_mip6_opt_ni
, proto_mip6_option_ni
));
5216 dissector_add_uint("mip6.option", MIP6_AUTD
, create_dissector_handle( dissect_mip6_opt_bad
, proto_mip6_option_bad_auth
));
5217 dissector_add_uint("mip6.option", MIP6_MNP
, create_dissector_handle( dissect_mip6_nemo_opt_mnp
, proto_mip6_option_mnp
));
5218 dissector_add_uint("mip6.option", MIP6_MHLLA
, create_dissector_handle( dissect_fmip6_opt_lla
, proto_mip6_option_mhlla
));
5219 dissector_add_uint("mip6.option", MIP6_MNID
, create_dissector_handle( dissect_mip6_opt_mnid
, proto_mip6_option_mnid
));
5220 dissector_add_uint("mip6.option", MIP6_AUTH
, create_dissector_handle( dissect_mip6_opt_auth
, proto_mip6_option_auth
));
5221 dissector_add_uint("mip6.option", MIP6_MESGID
, create_dissector_handle( dissect_mip6_opt_mseg_id
, proto_mip6_option_mseg_id
));
5222 dissector_add_uint("mip6.option", MIP6_CGAPR
, create_dissector_handle( dissect_mip6_opt_cgapr
, proto_mip6_option_cgapr
));
5223 dissector_add_uint("mip6.option", MIP6_CGAR
, create_dissector_handle( dissect_mip6_opt_cgar
, proto_mip6_option_cgar
));
5224 dissector_add_uint("mip6.option", MIP6_SIGN
, create_dissector_handle( dissect_mip6_opt_sign
, proto_mip6_option_sign
));
5225 dissector_add_uint("mip6.option", MIP6_PHKT
, create_dissector_handle( dissect_mip6_opt_phkt
, proto_mip6_option_phkt
));
5226 dissector_add_uint("mip6.option", MIP6_MOCOTI
, create_dissector_handle( dissect_mip6_opt_coti
, proto_mip6_option_coti
));
5227 dissector_add_uint("mip6.option", MIP6_MOCOT
, create_dissector_handle( dissect_mip6_opt_mocot
, proto_mip6_option_cot
));
5228 dissector_add_uint("mip6.option", MIP6_DNSU
, create_dissector_handle( dissect_mip6_opt_dnsu
, proto_mip6_option_dnsu
));
5229 dissector_add_uint("mip6.option", MIP6_EM
, create_dissector_handle( dissect_mip6_opt_em
, proto_mip6_option_em
));
5230 dissector_add_uint("mip6.option", MIP6_VSM
, create_dissector_handle( dissect_mip6_opt_vsm
, proto_mip6_option_vsm
));
5231 dissector_add_uint("mip6.option", MIP6_SSM
, create_dissector_handle( dissect_mip6_opt_ssm
, proto_mip6_option_ssm
));
5232 dissector_add_uint("mip6.option", MIP6_BADFF
, create_dissector_handle( dissect_mip6_opt_badff
, proto_mip6_option_badff
));
5233 dissector_add_uint("mip6.option", MIP6_HNP
, create_dissector_handle( dissect_mip6_opt_hnp
, proto_mip6_option_hnp
));
5234 dissector_add_uint("mip6.option", MIP6_MOHI
, create_dissector_handle( dissect_pmip6_opt_hi
, proto_mip6_option_hi
));
5235 dissector_add_uint("mip6.option", MIP6_ATT
, create_dissector_handle( dissect_pmip6_opt_att
, proto_mip6_option_att
));
5236 dissector_add_uint("mip6.option", MIP6_MNLLI
, create_dissector_handle( dissect_pmip6_opt_mnlli
, proto_mip6_option_mnlli
));
5237 dissector_add_uint("mip6.option", MIP6_LLA
, create_dissector_handle( dissect_pmip6_opt_lla
, proto_mip6_option_lla
));
5238 dissector_add_uint("mip6.option", MIP6_TS
, create_dissector_handle( dissect_pmip6_opt_ts
, proto_mip6_option_ts
));
5239 dissector_add_uint("mip6.option", MIP6_RC
, create_dissector_handle( dissect_pmip6_opt_rc
, proto_mip6_option_rc
));
5240 dissector_add_uint("mip6.option", MIP6_IPV4HA
, create_dissector_handle( dissect_pmip6_opt_ipv4ha
, proto_mip6_option_ipv4ha
));
5241 dissector_add_uint("mip6.option", MIP6_IPV4AA
, create_dissector_handle( dissect_pmip6_opt_ipv4aa
, proto_mip6_option_ipv4aa
));
5242 dissector_add_uint("mip6.option", MIP6_NATD
, create_dissector_handle( dissect_pmip6_opt_natd
, proto_mip6_option_natd
));
5243 dissector_add_uint("mip6.option", MIP6_IPV4COA
, create_dissector_handle( dissect_pmip6_opt_ipv4coa
, proto_mip6_option_ipv4coa
));
5244 dissector_add_uint("mip6.option", MIP6_GREK
, create_dissector_handle( dissect_pmip6_opt_grek
, proto_mip6_option_grek
));
5245 dissector_add_uint("mip6.option", MIP6_MHIPV6AP
, create_dissector_handle( dissect_pmip6_opt_mhipv6ap
, proto_mip6_option_mhipv6ap
));
5246 dissector_add_uint("mip6.option", MIP6_BI
, create_dissector_handle( dissect_pmip6_opt_bi
, proto_mip6_option_bi
));
5247 dissector_add_uint("mip6.option", MIP6_IPV4HAREQ
, create_dissector_handle( dissect_pmip6_opt_ipv4hareq
, proto_mip6_option_ipv4hareq
));
5248 dissector_add_uint("mip6.option", MIP6_IPV4HAREP
, create_dissector_handle( dissect_pmip6_opt_ipv4harep
, proto_mip6_option_ipv4harep
));
5249 dissector_add_uint("mip6.option", MIP6_IPV4DRA
, create_dissector_handle( dissect_pmip6_opt_ipv4dra
, proto_mip6_option_ipv4dra
));
5250 dissector_add_uint("mip6.option", MIP6_IPV4DSM
, create_dissector_handle( dissect_pmip6_opt_ipv4dsm
, proto_mip6_option_ipv4dsm
));
5251 dissector_add_uint("mip6.option", MIP6_CR
, create_dissector_handle( dissect_pmip6_opt_cr
, proto_mip6_option_cr
));
5252 dissector_add_uint("mip6.option", MIP6_LMAA
, create_dissector_handle( dissect_pmip6_opt_lmaa
, proto_mip6_option_lmaa
));
5253 dissector_add_uint("mip6.option", MIP6_RECAP
, create_dissector_handle( dissect_pmip6_opt_recap
, proto_mip6_option_recap
));
5254 dissector_add_uint("mip6.option", MIP6_REDIR
, create_dissector_handle( dissect_pmip6_opt_redir
, proto_mip6_option_redir
));
5255 dissector_add_uint("mip6.option", MIP6_LOAD_INF
, create_dissector_handle( dissect_pmip6_opt_load_inf
, proto_mip6_option_load_inf
));
5256 dissector_add_uint("mip6.option", MIP6_ALT_IP4_CO
, create_dissector_handle( dissect_pmip6_opt_alt_ip4
, proto_mip6_option_alt_ip4
));
5257 dissector_add_uint("mip6.option", MIP6_MNG
, create_dissector_handle( dissect_pmip6_opt_mng
, proto_mip6_option_mng
));
5258 dissector_add_uint("mip6.option", MIP6_MAG_IPv6
, create_dissector_handle( dissect_pmip6_opt_mag_ipv6
, proto_mip6_option_mag_ipv6
));
5259 dissector_add_uint("mip6.option", MIP6_ACC_NET_ID
, create_dissector_handle( dissect_pmip6_opt_acc_net_id
, proto_mip6_option_acc_net_id
));
5260 dissector_add_uint("mip6.option", MIP6_DMNP
, create_dissector_handle( dissect_mip6_opt_dmnp
, proto_mip6_option_dmnp
));
5264 * Editor modelines - https://www.wireshark.org/tools/modelines.html
5269 * indent-tabs-mode: nil
5272 * vi: set shiftwidth=4 tabstop=8 expandtab:
5273 * :indentSize=4:tabSize=8:noTabs=true: