2003-02-04 20:17:01 +00:00
/* packet-mip6.c
*
2010-07-26 13:32:13 +00:00
* Definitions and Routines for Mobile IPv6 dissection ( RFC 3775 )
2003-02-04 20:17:01 +00:00
* Copyright 2003 Oy L M Ericsson Ab < teemu . rinta - aho @ ericsson . fi >
*
2005-10-29 23:22:13 +00:00
* FMIPv6 ( RFC 4068 ) support added by Martin Andre < andre @ clarinet . u - strasbg . fr >
2006-09-28 16:30:20 +00:00
* Copyright 2006 , Nicolas DICHTEL - 6 WIND - < nicolas . dichtel @ 6 wind . com >
2005-10-29 23:22:13 +00:00
*
* Modifications for NEMO packets ( RFC 3963 ) : Bruno Deniaud
* ( bdeniaud @ irisa . fr , nono @ chez . com ) 12 Oct 2005
2005-10-25 06:00:53 +00:00
*
2006-05-21 04:49:01 +00:00
* Wireshark - Network traffic analyzer
* By Gerald Combs < gerald @ wireshark . org >
2003-02-04 20:17:01 +00:00
* Copyright 1998 Gerald Combs
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
2012-06-28 23:18:38 +00:00
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
2012-10-23 16:06:57 +00:00
*
* References :
2012-10-24 13:44:25 +00:00
* RFC 3775 , Mobility Support in IPv6
* RFC 4285 , Authentication Protocol for Mobile IPv6
* RFC 4866 , Enhanced Route Optimization for Mobile IPv6
* RFC 5026 , Mobile IPv6 Bootstrapping in Split Scenario
2012-10-25 15:57:05 +00:00
* RFC 5094 , Mobile IPv6 Vendor Specific Option
2012-10-24 13:44:25 +00:00
* RFC 5096 , Mobile IPv6 Experimental Messages
2012-10-25 12:54:37 +00:00
* RFC 5213 , Proxy Mobile IPv6
* RFC 5555 , Mobile IPv6 Support for Dual Stack Hosts and Routers ( Errata )
2012-10-24 13:44:25 +00:00
* RFC 5568. Mobile IPv6 Fast Handovers
2012-10-25 12:54:37 +00:00
* RFC 5648 , Multiple Care - of Addresses Registration
2012-10-26 13:29:02 +00:00
* RFC 5844 , IPv4 Support for Proxy Mobile IPv6
* RFC 5949 , Fast Handovers for Proxy Mobile IPv6
* RFC 6275 , Mobility Support in IPv6 ( Obsoletes RFC 3775 ) .
2012-10-25 16:15:58 +00:00
* RFC 6602 , Bulk Binding Update Support for Proxy Mobile IPv6
2015-03-17 12:55:52 +00:00
* RFC 6705 , Localized Routing for Proxy Mobile IPv6
2014-12-20 14:05:07 +00:00
* RFC 6757 , Access Network Identifier ( ANI ) Option for Proxy Mobile IPv6
2015-09-18 12:08:38 +00:00
* RFC 7148 , Prefix Delegation Support for Proxy Mobile IPv6
2012-10-25 16:15:58 +00:00
*
2003-02-04 20:17:01 +00:00
*/
# include "config.h"
# include <epan/packet.h>
2013-11-09 13:41:10 +00:00
# include <epan/to_str.h>
2003-02-04 20:17:01 +00:00
2004-09-29 00:52:45 +00:00
# include <epan/ipproto.h>
2013-06-30 11:06:32 +00:00
# include <epan/expert.h>
2005-09-17 00:02:31 +00:00
# include <epan/ip_opts.h>
2010-07-17 07:55:28 +00:00
# include <epan/sminmpec.h>
2003-02-04 20:17:01 +00:00
2015-11-04 08:45:54 +00:00
# include <wsutil/str_util.h>
2012-10-25 12:54:37 +00:00
# include "packet-ntp.h"
2012-10-29 16:02:51 +00:00
# include "packet-gtpv2.h"
# include "packet-e164.h"
# include "packet-e212.h"
2013-01-18 09:49:22 +00:00
# include "packet-gsm_a_common.h"
2012-10-29 16:02:51 +00:00
2013-12-14 16:09:57 +00:00
void proto_register_mip6 ( void ) ;
void proto_reg_handoff_mip6 ( void ) ;
2016-01-13 01:16:04 +00:00
static dissector_handle_t mip6_handle ;
2012-06-27 13:27:28 +00:00
# define UDP_PORT_PMIP6_CNTL 5436
2013-04-16 18:13:40 +00:00
static dissector_table_t mip6_vsm_dissector_table ;
2010-07-26 13:32:13 +00:00
/* Mobility Header types */
typedef enum {
2011-04-12 16:48:58 +00:00
MIP6_BRR = 0 ,
MIP6_HOTI = 1 ,
MIP6_MHCOTI = 2 ,
MIP6_HOT = 3 ,
MIP6_MHCOT = 4 ,
MIP6_BU = 5 ,
MIP6_BA = 6 ,
MIP6_BE = 7 ,
MIP6_FBU = 8 ,
MIP6_FBACK = 9 ,
MIP6_FNA = 10 ,
MIP6_EMH = 11 ,
MIP6_HAS = 12 ,
MIP6_HB = 13 ,
MIP6_HI = 14 ,
MIP6_HAck = 15 ,
2012-10-23 11:47:57 +00:00
MIP6_BR = 16 ,
MIP6_LRI = 17 ,
MIP6_LRA = 18
2010-07-26 13:32:13 +00:00
} mhTypes ;
2011-01-09 17:49:31 +00:00
/* http://www.iana.org/assignments/mobility-parameters/mobility-parameters.xhtml */
2010-07-26 13:32:13 +00:00
static const value_string mip6_mh_types [ ] = {
2011-04-12 16:48:58 +00:00
{ MIP6_BRR , " Binding Refresh Request " } , /* [RFC3775] */
{ MIP6_HOTI , " Home Test Init " } , /* [RFC3775] */
{ MIP6_MHCOTI , " Care-of Test Init " } , /* [RFC3775] */
{ MIP6_HOT , " Home Test " } , /* [RFC3775] */
{ MIP6_MHCOT , " Care-of Test " } , /* [RFC3775] */
{ MIP6_BU , " Binding Update " } , /* [RFC3775] */
{ MIP6_BA , " Binding Acknowledgement " } , /* [RFC3775] */
{ MIP6_BE , " Binding Error " } , /* [RFC3775] */
{ MIP6_FBU , " Fast Binding Update " } , /* [RFC5568] */
{ MIP6_FBACK , " Fast Binding Acknowledgment " } , /* [RFC5568] */
{ MIP6_FNA , " Fast Neighbor Advertisement " } , /* [RFC5568] */
{ MIP6_EMH , " Experimental Mobility Header " } , /* [RFC5096] */
{ MIP6_HAS , " Home Agent Switch " } , /* [RFC5142] */
{ MIP6_HB , " Heartbeat " } , /* [RFC5847] */
{ MIP6_HI , " Handover Initiate " } , /* [RFC5568] */
{ MIP6_HAck , " Handover Acknowledge " } , /* [RFC5568] */
{ MIP6_BR , " Binding Revocation " } , /* [RFC5846] */
2012-10-23 11:47:57 +00:00
{ MIP6_LRI , " Localized Routing Initiation " } , /* [RFC6705] */
2012-10-25 16:15:58 +00:00
{ MIP6_LRA , " Localized Routing Acknowledgment " } , /* [RFC6705] */
2012-10-22 14:47:44 +00:00
2011-04-12 16:48:58 +00:00
{ 0 , NULL }
2010-07-26 13:32:13 +00:00
} ;
2012-10-28 19:54:29 +00:00
static value_string_ext mip6_mh_types_ext = VALUE_STRING_EXT_INIT ( mip6_mh_types ) ;
2011-01-09 17:49:31 +00:00
2010-07-26 13:32:13 +00:00
/* Mobility Option types
* http : //www.iana.org/assignments/mobility-parameters/mobility-parameters.xhtml
*/
typedef enum {
2011-04-12 16:48:58 +00:00
MIP6_PAD1 = 0 , /* 0 Pad1 [RFC3775] */
MIP6_PADN = 1 , /* 1 PadN [RFC3775] */
MIP6_BRA = 2 , /* 2 Binding Refresh Advice */
MIP6_ACOA = 3 , /* 3 Alternate Care-of Address */
MIP6_NI = 4 , /* 4 Nonce Indices */
MIP6_AUTD = 5 , /* 5 Authorization Data */
MIP6_MNP = 6 , /* 6 Mobile Network Prefix Option */
MIP6_MHLLA = 7 , /* 7 Mobility Header Link-Layer Address option [RFC5568] */
MIP6_MNID = 8 , /* 8 MN-ID-OPTION-TYPE */
MIP6_AUTH = 9 , /* 9 AUTH-OPTION-TYPE */
MIP6_MESGID = 10 , /* 10 MESG-ID-OPTION-TYPE [RFC4285] */
MIP6_CGAPR = 11 , /* 11 CGA Parameters Request [RFC4866] */
MIP6_CGAR = 12 , /* 12 CGA Parameters [RFC4866] */
MIP6_SIGN = 13 , /* 13 Signature [RFC4866] */
MIP6_PHKT = 14 , /* 14 Permanent Home Keygen Token [RFC4866] */
MIP6_MOCOTI = 15 , /* 15 Care-of Test Init [RFC4866] */
MIP6_MOCOT = 16 , /* 16 Care-of Test [RFC4866] */
MIP6_DNSU = 17 , /* 17 DNS-UPDATE-TYPE [RFC5026] */
MIP6_EM = 18 , /* 18 Experimental Mobility Option [RFC5096] */
MIP6_VSM = 19 , /* 19 Vendor Specific Mobility Option [RFC5094] */
MIP6_SSM = 20 , /* 20 Service Selection Mobility Option [RFC5149] */
MIP6_BADFF = 21 , /* 21 Binding Authorization Data for FMIPv6 (BADF) [RFC5568] */
MIP6_HNP = 22 , /* 22 Home Network Prefix Option [RFC5213] */
MIP6_MOHI = 23 , /* 23 Handoff Indicator Option [RFC5213] */
MIP6_ATT = 24 , /* 24 Access Technology Type Option [RFC5213] */
MIP6_MNLLI = 25 , /* 25 Mobile Node Link-layer Identifier Option [RFC5213] */
MIP6_LLA = 26 , /* 26 Link-local Address Option [RFC5213 */
MIP6_TS = 27 , /* 27 Timestamp */
MIP6_RC = 28 , /* 28 Restart Counter [RFC5847] */
MIP6_IPV4HA = 29 , /* 29 IPv4 Home Address [RFC5555] */
MIP6_IPV4AA = 30 , /* 30 IPv4 Address Acknowledgement [RFC5555] */
MIP6_NATD = 31 , /* 31 NAT Detection [RFC5555] */
MIP6_IPV4COA = 32 , /* 32 IPv4 Care-of Address [RFC5555] */
MIP6_GREK = 33 , /* 33 GRE Key Option [RFC5845] */
MIP6_MHIPV6AP = 34 , /* 34 Mobility Header IPv6 Address/Prefix [RFC5568] */
MIP6_BI = 35 , /* 35 Binding Identifier [RFC5648] */
MIP6_IPV4HAREQ = 36 , /* 36 IPv4 Home Address Request [RFC5844] */
MIP6_IPV4HAREP = 37 , /* 37 IPv4 Home Address Reply [RFC5844] */
MIP6_IPV4DRA = 38 , /* 38 IPv4 Default-Router Address [RFC5844] */
MIP6_IPV4DSM = 39 , /* 39 IPv4 DHCP Support Mode [RFC5844] */
MIP6_CR = 40 , /* 40 Context Request Option [RFC5949] */
MIP6_LMAA = 41 , /* 41 Local Mobility Anchor Address Option [RFC5949] */
MIP6_MNLLAII = 42 , /* 42 Mobile Node Link-local Address Interface Identifier Option [RFC5949] */
MIP6_TB = 43 , /* 43 Transient Binding [RFC-ietf-mipshop-transient-bce-pmipv6-07] */
MIP6_FS = 44 , /* 44 Flow Summary Mobility Option [RFC-ietf-mext-flow-binding-11] */
2012-10-22 14:47:44 +00:00
MIP6_FI = 45 , /* 45 Flow Identification Mobility Option [RFC-ietf-mext-flow-binding-11]] */
2012-10-25 16:15:58 +00:00
MIP6_RECAP = 46 , /* 46 Redirect-Capability Mobility Option [RFC6463] */
2012-10-22 14:47:44 +00:00
MIP6_REDIR = 47 , /* 47 Redirect Mobility Option [RFC6463] */
MIP6_LOAD_INF = 48 , /* 48 Load Information Mobility Option [RFC6463] */
MIP6_ALT_IP4_CO = 49 , /* 49 Alternate IPv4 Care-of Address [RFC6463] */
MIP6_MNG = 50 , /* 50 Mobile Node Group Identifier [RFC6602] */
MIP6_MAG_IPv6 = 51 , /* 51 MAG IPv6 Address [RFC6705] */
2015-09-18 12:08:38 +00:00
MIP6_ACC_NET_ID = 52 , /* 52 Access Network Identifier [RFC6757] */
MIP6_DMNP = 55 /* 55 Delegated Mobile Network Prefix Option [RFC7148] */
2011-01-09 20:41:19 +00:00
2010-07-26 13:32:13 +00:00
} optTypes ;
2012-10-24 13:44:25 +00:00
/* Mobility Option types
* http : //www.iana.org/assignments/mobility-parameters/mobility-parameters.xhtml
*/
static const value_string mip6_mobility_options [ ] = {
{ MIP6_PAD1 , " Pad1 " } , /* RFC3775 */
{ MIP6_PADN , " PadN " } , /* RFC3775 */
{ MIP6_BRA , " Binding Refresh Advice " } , /* RFC3775 */
{ MIP6_ACOA , " Alternate Care-of Address " } , /* RFC3775 */
{ MIP6_NI , " Nonce Indices " } , /* RFC3775 */
{ MIP6_AUTD , " Authorization Data " } , /* RFC3775 */
2012-10-25 12:54:37 +00:00
{ MIP6_MNP , " Mobile Network Prefix " } , /* RFC3963 */
{ MIP6_MHLLA , " Mobility Header Link-Layer Address " } , /* RFC5568 */
{ MIP6_MNID , " Mobile Node Identifier " } , /* RFC4283 MN-ID*/
{ MIP6_AUTH , " AUTH " } , /* RFC4285 */
{ MIP6_MESGID , " MESG-ID " } , /* RFC4285 */
2012-10-24 13:44:25 +00:00
{ MIP6_CGAPR , " CGA Parameters Request " } , /* RFC4866 */
{ MIP6_CGAR , " CGA Parameters " } , /* RFC4866 */
{ MIP6_SIGN , " Signature " } , /* RFC4866 */
{ MIP6_PHKT , " Permanent Home Keygen Token " } , /* RFC4866 */
{ MIP6_MOCOTI , " Care-of Test Init " } , /* RFC4866 */
{ MIP6_MOCOT , " Care-of Test " } , /* RFC4866 */
{ MIP6_DNSU , " DNS-UPDATE-TYPE " } , /* RFC5026 */
2012-10-25 15:57:05 +00:00
{ MIP6_EM , " Experimental " } , /* RFC5096 */
{ MIP6_VSM , " Vendor Specific " } , /* RFC5094 */
{ MIP6_SSM , " Service Selection " } , /* RFC5149 */
2012-10-24 13:44:25 +00:00
{ MIP6_BADFF , " Binding Authorization Data for FMIPv6 (BADF) " } , /* RFC5568 */
2012-10-25 12:54:37 +00:00
{ MIP6_HNP , " Home Network Prefix " } , /* RFC5213 */
{ MIP6_MOHI , " Handoff Indicator " } , /* RFC5213 */
{ MIP6_ATT , " Access Technology Type " } , /* RFC5213 */
{ MIP6_MNLLI , " Mobile Node Link-layer Identifier " } , /* RFC5213 */
{ MIP6_LLA , " Link-local Address " } , /* RFC5213 */
{ MIP6_TS , " Timestamp " } , /* RFC5213 */
2012-10-24 13:44:25 +00:00
{ MIP6_RC , " Restart Counter " } , /* RFC5847 */
{ MIP6_IPV4HA , " IPv4 Home Address " } , /* RFC5555 */
{ MIP6_IPV4AA , " IPv4 Address Acknowledgement " } , /* RFC5555 */
{ MIP6_NATD , " NAT Detection " } , /* RFC5555 */
{ MIP6_IPV4COA , " IPv4 Care-of Address " } , /* RFC5555 */
2012-10-25 12:54:37 +00:00
{ MIP6_GREK , " GRE Key " } , /* RFC5845 */
2012-10-24 13:44:25 +00:00
{ MIP6_MHIPV6AP , " Mobility Header IPv6 Address/Prefix " } , /* RFC5568 */
{ MIP6_BI , " Binding Identifier " } , /* RFC5648 */
{ MIP6_IPV4HAREQ , " IPv4 Home Address Request " } , /* RFC5844 */
{ MIP6_IPV4HAREP , " IPv4 Home Address Reply " } , /* RFC5844 */
{ MIP6_IPV4DRA , " IPv4 Default-Router Address " } , /* RFC5844 */
{ MIP6_IPV4DSM , " IPv4 DHCP Support Mode " } , /* RFC5844 */
2012-10-25 12:54:37 +00:00
{ MIP6_CR , " Context Request " } , /* RFC5949 */
{ MIP6_LMAA , " Local Mobility Anchor Address " } , /* RFC5949 */
{ MIP6_MNLLAII , " Mobile Node Link-local Address Interface Identifier " } , /* RFC5949 */
2012-10-24 13:44:25 +00:00
{ MIP6_TB , " Transient Binding " } , /* RFC6058 */
{ MIP6_FS , " Flow Summary " } , /* RFC6089 */
{ MIP6_FI , " Flow Identification " } , /* RFC6089 */
2012-10-25 16:15:58 +00:00
{ MIP6_RECAP , " Redirect-Capability " } , /* RFC6463 */
2012-10-25 12:54:37 +00:00
{ MIP6_REDIR , " Redirect " } , /* RFC6463 */
{ MIP6_LOAD_INF , " Load Information " } , /* RFC6463 */
2012-10-24 13:44:25 +00:00
{ MIP6_ALT_IP4_CO , " Alternate IPv4 Care-of Address " } , /* RFC6463 */
{ MIP6_MNG , " Mobile Node Group Identifier " } , /* RFC6602 */
2012-10-25 16:15:58 +00:00
{ MIP6_MAG_IPv6 , " MAG IPv6 Address " } , /* RFC6705 */
{ MIP6_ACC_NET_ID , " Access Network Identifier " } , /* RFC6757 */
2015-09-18 12:08:38 +00:00
{ MIP6_DMNP , " Delegated Mobile Network Prefix " } , /* RFC7148 */
2012-10-24 13:44:25 +00:00
{ 0 , NULL }
} ;
2012-10-28 19:54:29 +00:00
static value_string_ext mip6_mobility_options_ext = VALUE_STRING_EXT_INIT ( mip6_mobility_options ) ;
2012-10-24 13:44:25 +00:00
2012-10-25 16:15:58 +00:00
/*
2012-10-24 13:44:25 +00:00
* Status Codes ( DNS Update Mobility Option )
* http : //www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#mobility-parameters-3
*/
static const value_string mip6_dnsu_status_values [ ] = {
{ 0 , " DNS update performed " } , /* [RFC5026] */
/* 1-127 Unassigned */
{ 128 , " Reason unspecified " } , /* [RFC5026] */
{ 129 , " Administratively prohibited " } , /* [RFC5026] */
{ 130 , " DNS Update Failed " } , /* [RFC5026] */
/* 131-255 Unassigned */
{ 0 , NULL }
} ;
static const true_false_string mip6_dnsu_r_flag_value = {
" Mobile Node is requesting the HA to remove the DNS entry " ,
" Mobile Node is requesting the HA to create or update a DNS entry "
} ;
2010-07-26 13:32:13 +00:00
/* Binding Update flag description */
static const true_false_string mip6_bu_a_flag_value = {
2011-04-12 16:48:58 +00:00
" Binding Acknowledgement requested " ,
" Binding Acknowledgement not requested "
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string mip6_bu_h_flag_value = {
2011-04-12 16:48:58 +00:00
" Home Registration " ,
" No Home Registration "
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string mip6_bu_l_flag_value = {
2011-04-12 16:48:58 +00:00
" Link-Local Address Compatibility " ,
" No Link-Local Address Compatibility "
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string mip6_bu_k_flag_value = {
2011-04-12 16:48:58 +00:00
" Key Management Mobility Compatibility " ,
" No Key Management Mobility Compatibility "
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string mip6_bu_m_flag_value = {
2011-04-12 16:48:58 +00:00
" MAP Registration Compatibility " ,
" No MAP Registration Compatibility " ,
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string mip6_nemo_bu_r_flag_value = {
2011-04-12 16:48:58 +00:00
" Mobile Router Compatibility " ,
" No Mobile Router Compatibility "
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string pmip6_bu_p_flag_value = {
2011-04-12 16:48:58 +00:00
" Proxy Registration " ,
" No Proxy Registration "
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string mip6_bu_f_flag_value = {
2011-04-12 16:48:58 +00:00
" Forcing UDP encapsulation used " ,
" No Forcing UDP encapsulation "
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string pmip6_bu_t_flag_value = {
2011-04-12 16:48:58 +00:00
" TLV-header format used " ,
" No TLV-header format "
2010-07-26 13:32:13 +00:00
} ;
2012-10-23 16:06:57 +00:00
static const true_false_string pmip6_bu_b_flag_value = {
" Enable bulk binding update support " ,
" Disable bulk binding update support "
} ;
static const true_false_string pmip6_ba_b_flag_value = {
" Enabled bulk binding update support " ,
" Disabled bulk binding update support "
} ;
2011-02-08 03:16:35 +00:00
/* Binding Acknowledgement status values
2011-01-09 20:41:19 +00:00
* http : //www.iana.org/assignments/mobility-parameters/mobility-parameters.xhtml
*/
2010-07-26 13:32:13 +00:00
static const value_string mip6_ba_status_value [ ] = {
2011-04-12 16:48:58 +00:00
{ 0 , " Binding Update accepted " } ,
{ 1 , " Accepted but prefix discovery necessary " } ,
{ 2 , " GRE_KEY_OPTION_NOT_REQUIRED " } , /* [RFC5845] */
{ 3 , " GRE_TUNNELING_BUT_TLV_HEADER_NOT_SUPPORTED " } , /* [RFC5845] */
{ 4 , " MCOA NOTCOMPLETE " } , /* [RFC5648] */
{ 5 , " MCOA RETURNHOME WO/NDP " } , /* [RFC5648] */
{ 6 , " PBU_ACCEPTED_TB_IGNORED_SETTINGSMISMATCH " } , /* [RFC-ietf-mipshop-transient-bce-pmipv6-07] */
/* 7-127 Unassigned */
{ 128 , " Reason unspecified " } ,
{ 129 , " Administratively prohibited " } ,
{ 130 , " Insufficient resources " } ,
{ 131 , " Home registration not supported " } ,
{ 132 , " Not home subnet " } ,
{ 133 , " Not home agent for this mobile node " } ,
{ 134 , " Duplicate Address Detection failed " } ,
{ 135 , " Sequence number out of window " } ,
{ 136 , " Expired home nonce index " } ,
{ 137 , " Expired care-of nonce index " } ,
{ 138 , " Expired nonces " } ,
{ 139 , " Registration type change disallowed " } ,
{ 140 , " Mobile Router Operation not permitted " } ,
{ 141 , " Invalid Prefix " } ,
{ 142 , " Not Authorized for Prefix " } ,
{ 143 , " Mobile Network Prefix information unavailable " } ,
{ 145 , " Proxy Registration not supported by the LMA " } ,
{ 146 , " Proxy Registrations from this MAG not allowed " } ,
{ 147 , " No home address for this NAI " } ,
{ 148 , " Invalid Time Stamp Option " } ,
{ 149 , " Permanent home keygen token exists " } , /* [RFC4866] */
{ 150 , " Non-null home nonce index expected " } , /* [RFC4866] */
{ 151 , " SERVICE_AUTHORIZATION_FAILED " } , /* [RFC5149] */
{ 152 , " PROXY_REG_NOT_ENABLED " } , /* [RFC5213] */
{ 153 , " NOT_LMA_FOR_THIS_MOBILE_NODE " } , /* [RFC5213] */
{ 154 , " MAG_NOT_AUTHORIZED_FOR_PROXY_REG " } , /* [RFC5213] */
{ 155 , " NOT_AUTHORIZED_FOR_HOME_NETWORK_PREFIX " } , /* [RFC5213] */
{ 156 , " TIMESTAMP_MISMATCH " } , /* [RFC5213] */
{ 157 , " TIMESTAMP_LOWER_THAN_PREV_ACCEPTED " } , /* [RFC5213] */
{ 158 , " MISSING_HOME_NETWORK_PREFIX_OPTION " } , /* [RFC5213] */
{ 159 , " BCE_PBU_PREFIX_SET_DO_NOT_MATCH " } , /* [RFC5213] */
{ 160 , " MISSING_MN_IDENTIFIER_OPTION " } , /* [RFC5213] */
{ 161 , " MISSING_HANDOFF_INDICATOR_OPTION " } , /* [RFC5213] */
{ 162 , " MISSING_ACCESS_TECH_TYPE_OPTION " } , /* [RFC5213] */
{ 163 , " GRE_KEY_OPTION_REQUIRED " } , /* [RFC5845] */
{ 164 , " MCOA MALFORMED " } , /* [RFC5648] */
{ 165 , " MCOA NON-MCOA BINDING EXISTS " } , /* [RFC5648] */
{ 166 , " MCOA PROHIBITED " } , /* [RFC5648] */
{ 167 , " MCOA UNKNOWN COA " } , /* [RFC5648] */
{ 168 , " MCOA BULK REGISTRATION PROHIBITED " } , /* [RFC5648] */
{ 169 , " MCOA SIMULTANEOUS HOME AND FOREIGN PROHIBITED " } , /* [RFC5648] */
{ 170 , " NOT_AUTHORIZED_FOR_IPV4_MOBILITY_SERVICE " } , /* [RFC5844] */
{ 171 , " NOT_AUTHORIZED_FOR_IPV4_HOME_ADDRESS " } , /* [RFC5844] */
{ 172 , " NOT_AUTHORIZED_FOR_IPV6_MOBILITY_SERVICE " } , /* [RFC5844] */
{ 173 , " MULTIPLE_IPV4_HOME_ADDRESS_ASSIGNMENT_NOT_SUPPORTED " } , /* [RFC5844] */
2012-10-24 13:44:25 +00:00
{ 174 , " Invalid Care-of Address " } , /* [RFC6275] */
{ 175 , " INVALID_MOBILE_NODE_GROUP_IDENTIFIER " } , /* [RFC6602] */
{ 176 , " REINIT_SA_WITH_HAC " } , /* [RFC6618] */
2015-09-18 12:08:38 +00:00
{ 177 , " NOT_AUTHORIZED_FOR_DELEGATED_MNP " } , /* [RFC7148] */
{ 178 , " REQUESTED_DMNP_IN_USE " } , /* [RFC7148] */
2011-04-12 16:48:58 +00:00
{ 0 , NULL }
2010-07-26 13:32:13 +00:00
} ;
2012-10-28 19:54:29 +00:00
static value_string_ext mip6_ba_status_value_ext = VALUE_STRING_EXT_INIT ( mip6_ba_status_value ) ;
2010-07-26 13:32:13 +00:00
/* Binding Error status values */
static const value_string mip6_be_status_value [ ] = {
2011-04-12 16:48:58 +00:00
{ 1 , " Unknown binding for Home Address destination option " } ,
{ 2 , " Unrecognized MH type value " } ,
{ 0 , NULL }
2010-07-26 13:32:13 +00:00
} ;
/* Fast Binding Update flag description */
static const true_false_string fmip6_fbu_a_flag_value = {
2011-04-12 16:48:58 +00:00
" Fast Binding Acknowledgement requested " ,
" Fast Binding Acknowledgement not requested "
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string fmip6_fbu_h_flag_value = {
2011-04-12 16:48:58 +00:00
" Home Registration " ,
" No Home Registration "
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string fmip6_fbu_l_flag_value = {
2011-04-12 16:48:58 +00:00
" Link-Local Address Compatibility " ,
" No Link-Local Address Compatibility "
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string fmip6_fbu_k_flag_value = {
2011-04-12 16:48:58 +00:00
" Key Management Mobility Compatibility " ,
" No Key Management Mobility Compatibility "
2010-07-26 13:32:13 +00:00
} ;
/* Fast Binding Acknowledgement status values */
static const value_string fmip6_fback_status_value [ ] = {
2011-04-12 16:48:58 +00:00
{ 0 , " Fast Binding Update accepted " } ,
{ 1 , " Accepted but use supplied NCoA " } ,
{ 128 , " Reason unspecified " } ,
{ 129 , " Administratively prohibited " } ,
{ 130 , " Insufficient resources " } ,
{ 131 , " Incorrect interface identifier length " } ,
{ 0 , NULL }
2010-07-26 13:32:13 +00:00
} ;
/* Heartbeat flag description */
static const true_false_string mip6_hb_u_flag_value = {
2011-04-12 16:48:58 +00:00
" Unsolicited Heartbeat Response " ,
" Otherwise "
2010-07-26 13:32:13 +00:00
} ;
static const true_false_string mip6_hb_r_flag_value = {
2011-04-12 16:48:58 +00:00
" Heartbeat Response " ,
" Heartbeat Request "
2010-07-26 13:32:13 +00:00
} ;
/* MH LLA Option code */
static const value_string fmip6_lla_optcode_value [ ] = {
2011-04-12 16:48:58 +00:00
{ 2 , " Link Layer Address of the MN " } ,
{ 0 , NULL }
2010-07-26 13:32:13 +00:00
} ;
/* Mobile Node Identifier Option code */
static const value_string mip6_mnid_subtype_value [ ] = {
2011-04-12 16:48:58 +00:00
{ 1 , " Network Access Identifier (NAI) " } ,
{ 0 , NULL }
2010-07-26 13:32:13 +00:00
} ;
2012-10-24 13:44:25 +00:00
/* Enumerating Algorithms */
static const value_string mip6_auth_subtype_value [ ] = {
{ 0 , " Reserved (not available for assignment) " } ,
{ 3 , " HMAC_SHA1_SPI " } ,
{ 5 , " Reserved for use by 3GPP2 " } ,
{ 0 , NULL }
} ;
2010-07-26 13:32:13 +00:00
/* mobile network prefix flag description */
static const true_false_string mip6_ipv4ha_p_flag_value = {
2011-04-12 16:48:58 +00:00
" mobile network prefixt requested " ,
" mobile network prefix not requested "
2010-07-26 13:32:13 +00:00
} ;
2012-10-25 12:54:37 +00:00
/* NAT Detection Option F flag values */
static const true_false_string mip6_natd_f_flag_value = {
" MUST use UDP encapsulation " ,
" Do not use UDP encapsulation "
} ;
2012-10-26 13:29:02 +00:00
/* NAT Detection Option F flag values */
static const true_false_string mip6_ipv4dsm_s_flag_value = {
" DHCP Server " ,
" DHCP Relay "
} ;
2010-07-26 13:32:13 +00:00
/* Vendor-Specific Mobility Option */
static const value_string mip6_vsm_subtype_value [ ] = {
2011-04-12 16:48:58 +00:00
{ 0 , NULL }
2010-07-26 13:32:13 +00:00
} ;
/* Vendor-Specific Mobility Option (3GPP TS29.282) */
static const value_string mip6_vsm_subtype_3gpp_value [ ] = {
2011-04-12 16:48:58 +00:00
{ 1 , " Protocol Configuration Options " } ,
{ 2 , " 3GPP Specific PMIPv6 Error Code " } ,
{ 3 , " PMIPv6 PDN GW IP Address " } ,
{ 4 , " PMIPv6 DHCPv4 Address Allocation Procedure Indication " } ,
{ 5 , " PMIPv6 Fully Qualified PDN Connection Set Identifier " } ,
{ 6 , " PMIPv6 PDN type indication " } ,
{ 7 , " Charging ID " } ,
{ 8 , " Selection Mode " } ,
{ 9 , " I-WLAN Mobility Access Point Name (APN) " } ,
{ 10 , " Charging Characteristics " } ,
{ 11 , " Mobile Equipment Identity (MEI) " } ,
{ 12 , " MSISDN " } ,
{ 13 , " Serving Network " } ,
{ 14 , " APN Restriction " } ,
{ 15 , " Maximum APN Restriction " } ,
{ 16 , " Unauthenticated IMSI " } ,
{ 17 , " PDN Connection ID " } ,
2012-10-26 13:29:02 +00:00
{ 18 , " PGW Back-Off Time " } , /* 3GPP TS 29.275 [7] */
{ 19 , " Signalling Priority Indication " } , /* 3GPP TS 29.275 [7] */
{ 20 , " Additional Protocol Configuration Options " } , /* 3GPP TS 29.275 [7] */
2011-04-12 16:48:58 +00:00
{ 0 , NULL }
2010-07-26 13:32:13 +00:00
} ;
2012-10-28 19:54:29 +00:00
static value_string_ext mip6_vsm_subtype_3gpp_value_ext = VALUE_STRING_EXT_INIT ( mip6_vsm_subtype_3gpp_value ) ;
2012-10-24 13:44:25 +00:00
2012-10-25 15:57:05 +00:00
/* Handoff Indicator Option type
* http : //www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#mobility-parameters-9
*/
2010-07-26 13:32:13 +00:00
static const value_string pmip6_hi_opttype_value [ ] = {
2011-04-12 16:48:58 +00:00
{ 0 , " Reserved " } ,
{ 1 , " Attachment over a new interface " } ,
{ 2 , " Handoff between two different interfaces of the mobile node " } ,
{ 3 , " Handoff between mobile access gateways for the same interface " } ,
{ 4 , " Handoff state unknown " } ,
{ 5 , " Handoff state not changed (Re-registration) " } ,
{ 0 , NULL }
2010-07-26 13:32:13 +00:00
} ;
2012-10-25 16:15:58 +00:00
/* Access Technology Type Option type
2012-10-25 15:57:05 +00:00
* http : //www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#mobility-parameters-10
*/
static const value_string pmip6_att_att_value [ ] = {
2011-04-12 16:48:58 +00:00
{ 0 , " Reserved " } ,
{ 1 , " Virtual " } ,
{ 2 , " PPP " } ,
{ 3 , " IEEE 802.3 " } ,
{ 4 , " IEEE 802.11a/b/g " } ,
{ 5 , " IEEE 802.16e " } ,
{ 6 , " 3GPP GERAN " } ,
{ 7 , " 3GPP UTRAN " } ,
{ 8 , " 3GPP E-UTRAN " } ,
{ 9 , " 3GPP2 eHRPD " } ,
{ 10 , " 3GPP2 HRPD " } ,
{ 11 , " 3GPP2 1xRTT " } ,
{ 12 , " 3GPP2 UMB " } ,
{ 0 , NULL }
2010-07-26 13:32:13 +00:00
} ;
2012-10-28 19:54:29 +00:00
static value_string_ext pmip6_att_att_value_ext = VALUE_STRING_EXT_INIT ( pmip6_att_att_value ) ;
2010-07-26 13:32:13 +00:00
2012-10-25 15:57:05 +00:00
/* IPv4 Home Address Reply Status Codes [RFC5844]
* http : //www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#home-address-reply
*/
static const value_string pmip6_ipv4aa_status_values [ ] = {
{ 0 , " Success " } ,
/* 1-127 Unassigned */
{ 128 , " Virtual " } ,
{ 129 , " PPP " } ,
{ 130 , " IEEE 802.3 " } ,
{ 131 , " IEEE 802.11a/b/g " } ,
{ 132 , " IEEE 802.16e " } ,
/* 133-255 Unassigned */
{ 0 , NULL }
} ;
2011-01-09 17:49:31 +00:00
/* PMIP6 BRI R. Trigger values */
static const value_string pmip6_bri_rtrigger [ ] = {
2012-10-22 14:47:44 +00:00
{ 0x00 , " Unspecified " } ,
2011-04-12 16:48:58 +00:00
{ 0x01 , " Administrative Reason " } ,
{ 0x02 , " Inter-MAG Handover - same Access Type " } ,
{ 0x03 , " Inter-MAG Handover - different Access Type " } ,
{ 0x04 , " Inter-MAG Handover - Unknown " } ,
{ 0x05 , " User Initiated Session(s) Termination " } ,
{ 0x06 , " Access Network Session(s) Termination " } ,
{ 0x07 , " Possible Out-of Sync BCE State " } ,
/* 8-127 Unassigned */
{ 0x128 , " Per-Peer Policy " } ,
{ 0x129 , " Revoking Mobility Node Local Policy " } ,
/* 130-249 Unassigned */
/* 250-255 Reserved for Testing Purposes Only */
{ 0 , NULL } ,
2011-01-09 17:49:31 +00:00
} ;
/* PMIP6 BRI Status values */
static const value_string pmip6_bri_status [ ] = {
2011-04-12 16:48:58 +00:00
{ 0x00 , " Success " } ,
{ 0x01 , " Partial Success " } ,
{ 0x02 , " Binding Does NOT Exist " } ,
{ 0x03 , " IPv4 HoA Binding Does NOT Exist " } ,
{ 0x04 , " Global Revocation NOT Authorized " } ,
{ 0x05 , " CAN NOT Identify Binding " } ,
{ 0x06 , " Revocation Failed, MN is Attached " } ,
{ 0 , NULL } ,
2011-01-09 17:49:31 +00:00
} ;
2013-10-23 06:29:11 +00:00
#if 0
2011-01-09 17:49:31 +00:00
/* Handoff Indicator values */
static const range_string handoff_indicator [ ] = {
2011-04-12 16:48:58 +00:00
{ 0x00 , 0x00 , " Reserved " } ,
{ 0x01 , 0x01 , " Attachment over a new interface " } ,
{ 0x02 , 0x02 , " Handoff between two different interfaces of the mobile node " } ,
{ 0x03 , 0x03 , " Handoff between mobile access gateways for the same interface " } ,
{ 0x04 , 0x04 , " Handoff state unknown " } ,
{ 0x05 , 0x05 , " Handoff state not changed (Re-registration) " } ,
{ 0x06 , 0xff , " Unassigned " } ,
{ 0 , 0 , NULL }
2011-01-09 17:49:31 +00:00
} ;
2013-10-23 06:29:11 +00:00
# endif
2011-01-09 17:49:31 +00:00
2012-10-25 16:15:58 +00:00
/* Mobile Node Group Identifier Type
2012-10-24 13:44:25 +00:00
* http : //www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#mobile-node-group-id-type
2010-07-26 13:32:13 +00:00
*/
2012-10-24 13:44:25 +00:00
static const value_string mip6_mng_id_type_vals [ ] = {
{ 0x00 , " Reserved " } ,
{ 0x01 , " Bulk Binding Update Group " } ,
{ 0 , NULL } ,
2010-07-26 13:32:13 +00:00
} ;
2015-03-17 12:55:52 +00:00
static const value_string pmip6_lra_status_vals [ ] = {
{ 0 , " Success " } ,
{ 128 , " Localized Routing Not Allowed " } ,
{ 129 , " MN Not Attached " } ,
{ 0 , NULL } ,
} ;
2012-10-24 13:44:25 +00:00
2015-09-18 12:08:38 +00:00
/* Delegated Mobile Network Prefix V Flag Values */
static const true_false_string mip6_dmnp_v_flag_value = {
" IPv4 Prefix " ,
" IPv6 Prefix "
} ;
2010-07-26 13:32:13 +00:00
/* Message lengths */
# define MIP6_BRR_LEN 2
# define MIP6_HOTI_LEN 10
# define MIP6_COTI_LEN 10
# define MIP6_HOT_LEN 18
# define MIP6_COT_LEN 18
# define MIP6_BU_LEN 6
# define MIP6_BA_LEN 6
# define MIP6_BE_LEN 18
# define FMIP6_FBU_LEN 6
# define FMIP6_FBACK_LEN 6
# define FMIP6_FNA_LEN 2
# define MIP6_EMH_LEN 0
# define MIP6_HB_LEN 6
# define MIP6_HI_LEN 4
# define MIP6_HAck_LEN 4
# define MIP6_BR_LEN 6
2011-01-09 17:49:31 +00:00
/* PMIP BRI */
2011-04-12 16:48:58 +00:00
# define PMIP6_BRI_LEN 6
2010-07-26 13:32:13 +00:00
/* Field offsets & lengths for mobility headers */
# define MIP6_PROTO_OFF 0
# define MIP6_HLEN_OFF 1
# define MIP6_TYPE_OFF 2
# define MIP6_RES_OFF 3
# define MIP6_CSUM_OFF 4
# define MIP6_DATA_OFF 6
# define MIP6_PROTO_LEN 1
# define MIP6_HLEN_LEN 1
# define MIP6_TYPE_LEN 1
# define MIP6_RES_LEN 1
# define MIP6_CSUM_LEN 2
# define MIP6_BRR_RES_OFF 6
# define MIP6_BRR_OPTS_OFF 8
# define MIP6_BRR_RES_LEN 2
# define MIP6_HOTI_RES_OFF 6
# define MIP6_HOTI_COOKIE_OFF 8
# define MIP6_HOTI_OPTS_OFF 16
# define MIP6_HOTI_RES_LEN 2
# define MIP6_HOTI_COOKIE_LEN 8
# define MIP6_COTI_RES_OFF 6
# define MIP6_COTI_COOKIE_OFF 8
# define MIP6_COTI_OPTS_OFF 16
# define MIP6_COTI_RES_LEN 2
# define MIP6_COTI_COOKIE_LEN 8
# define MIP6_HOT_INDEX_OFF 6
# define MIP6_HOT_COOKIE_OFF 8
# define MIP6_HOT_TOKEN_OFF 16
# define MIP6_HOT_OPTS_OFF 24
# define MIP6_HOT_INDEX_LEN 2
# define MIP6_HOT_COOKIE_LEN 8
# define MIP6_HOT_TOKEN_LEN 8
# define MIP6_COT_INDEX_OFF 6
# define MIP6_COT_COOKIE_OFF 8
# define MIP6_COT_TOKEN_OFF 16
# define MIP6_COT_OPTS_OFF 24
# define MIP6_COT_INDEX_LEN 2
# define MIP6_COT_COOKIE_LEN 8
# define MIP6_COT_TOKEN_LEN 8
# define MIP6_BU_SEQNR_OFF 6
# define MIP6_BU_FLAGS_OFF 8
# define MIP6_BU_RES_OFF 9
# define MIP6_BU_LIFETIME_OFF 10
# define MIP6_BU_OPTS_OFF 12
# define MIP6_BU_SEQNR_LEN 2
# define MIP6_BU_FLAGS_LEN 2
# define MIP6_BU_RES_LEN 0
# define MIP6_BU_LIFETIME_LEN 2
# define MIP6_BA_STATUS_OFF 6
# define MIP6_BA_FLAGS_OFF 7
# define MIP6_BA_SEQNR_OFF 8
# define MIP6_BA_LIFETIME_OFF 10
# define MIP6_BA_OPTS_OFF 12
# define MIP6_BA_STATUS_LEN 1
# define MIP6_BA_FLAGS_LEN 1
# define MIP6_BA_SEQNR_LEN 2
# define MIP6_BA_LIFETIME_LEN 2
# define MIP6_BE_STATUS_OFF 6
# define MIP6_BE_RES_OFF 7
# define MIP6_BE_HOA_OFF 8
# define MIP6_BE_OPTS_OFF 24
# define MIP6_BE_STATUS_LEN 1
# define MIP6_BE_RES_LEN 1
# define MIP6_BE_HOA_LEN 16
# define FMIP6_FBU_SEQNR_OFF 6
# define FMIP6_FBU_FLAGS_OFF 8
# define FMIP6_FBU_RES_OFF 9
# define FMIP6_FBU_LIFETIME_OFF 10
# define FMIP6_FBU_OPTS_OFF 12
# define FMIP6_FBU_SEQNR_LEN 2
# define FMIP6_FBU_FLAGS_LEN 1
# define FMIP6_FBU_RES_LEN 1
# define FMIP6_FBU_LIFETIME_LEN 2
# define FMIP6_FBACK_STATUS_OFF 6
# define FMIP6_FBACK_FLAGS_OFF 7
# define FMIP6_FBACK_SEQNR_OFF 8
# define FMIP6_FBACK_LIFETIME_OFF 10
# define FMIP6_FBACK_OPTS_OFF 12
# define FMIP6_FBACK_STATUS_LEN 1
# define FMIP6_FBACK_FLAGS_LEN 1
# define FMIP6_FBACK_SEQNR_LEN 2
# define FMIP6_FBACK_LIFETIME_LEN 2
# define FMIP6_FNA_RES_OFF 6
# define FMIP6_FNA_OPTS_OFF 8
# define FMIP6_FNA_RES_LEN 2
# define MIP6_HB_RES_OFF 6
# define MIP6_HB_FLAGS_OFF 7
# define MIP6_HB_SEQNR_OFF 8
# define MIP6_HB_OPTS_OFF 12
# define MIP6_HB_RES_LEN 1
# define MIP6_HB_FLAGS_LEN 1
# define MIP6_HB_SEQNR_LEN 4
# define MIP6_HI_SEQNR_OFF 6
# define MIP6_HI_FLAGS_OFF 8
# define MIP6_HI_CODE_OFF 9
# define MIP6_HI_OPTS_OFF 10
# define MIP6_HI_SEQNR_LEN 2
# define MIP6_HI_FLAGS_LEN 1
# define MIP6_HI_CODE_LEN 1
# define MIP6_HAck_SEQNR_OFF 6
# define MIP6_HAck_RES_OFF 8
# define MIP6_HAck_CODE_OFF 9
# define MIP6_HAck_OPTS_OFF 10
# define MIP6_HAck_SEQNR_LEN 2
# define MIP6_HAck_RES_LEN 1
# define MIP6_HAck_CODE_LEN 1
# define MIP6_BR_TYPE_OFF 6
# define MIP6_BR_TRGR_OFF 7
# define MIP6_BR_SEQNR_OFF 8
# define MIP6_BR_FLAGS_OFF 10
# define MIP6_BR_RES_OFF 11
# define MIP6_BR_OPTS_OFF 12
# define MIP6_BR_TYPE_LEN 1
# define MIP6_BR_TRGR_LEN 1
# define MIP6_BR_SEQNR_LEN 2
# define MIP6_BR_FLAGS_LEN 1
# define MIP6_BR_RES_LEN 1
2011-01-09 17:49:31 +00:00
/* PMIP BRI */
2011-04-12 16:48:58 +00:00
# define PMIP6_BRI_BRTYPE_OFF 6
# define PMIP6_BRI_RTRIGGER_OFF 7
# define PMIP6_BRI_STATUS_OFF 7
# define PMIP6_BRI_SEQNR_OFF 8
# define PMIP6_BRI_FLAGS_OFF 10
# define PMIP6_BRI_RES_OFF 11
# define PMIP6_BRI_BRTYPE_LEN 1
# define PMIP6_BRI_RTRIGGER_LEN 1
# define PMIP6_BRI_STATUS_LEN 1
# define PMIP6_BRI_SEQNR_LEN 2
2014-04-19 16:52:21 +00:00
# define PMIP6_BRI_FLAGS_LEN 2
2010-07-26 13:32:13 +00:00
/* Field offsets & field and option lengths for mobility options.
* The option length does * not * include the option type and length
* fields . The field offsets , however , do include the type and
* length fields . */
# define MIP6_BRA_LEN 2
# define MIP6_BRA_RI_OFF 2
# define MIP6_BRA_RI_LEN 2
# define MIP6_ACOA_LEN 16
# define MIP6_ACOA_ACOA_OFF 2
# define MIP6_ACOA_ACOA_LEN 16
# define MIP6_NEMO_MNP_LEN 18
# define MIP6_NEMO_MNP_PL_OFF 3
# define MIP6_NEMO_MNP_MNP_OFF 4
# define MIP6_NEMO_MNP_MNP_LEN 16
# define MIP6_NI_LEN 4
# define MIP6_NI_HNI_OFF 2
# define MIP6_NI_CNI_OFF 4
# define MIP6_NI_HNI_LEN 2
# define MIP6_NI_CNI_LEN 2
# define MIP6_BAD_AUTH_OFF 2
# define FMIP6_LLA_MINLEN 1
# define FMIP6_LLA_OPTCODE_OFF 2
# define FMIP6_LLA_LLA_OFF 3
# define FMIP6_LLA_OPTCODE_LEN 1
# define MIP6_MNID_MINLEN 2
# define MIP6_MNID_SUBTYPE_OFF 2
# define MIP6_MNID_SUBTYPE_LEN 1
# define MIP6_MNID_MNID_OFF 3
2012-10-24 13:44:25 +00:00
# define MIP6_AUTH_MINLEN 6
# define MIP6_CGAPR_MINLEN 0
# define MIP6_CGAR_MINLEN 1
# define MIP6_SIGN_MINLEN 1
# define MIP6_PHKT_MINLEN 1
# define MIP6_MOCOTI_MINLEN 0
# define MIP6_MOCOT_MINLEN 8
# define MIP6_DNSU_MINLEN 5
# define MIP6_EM_MINLEN 1
2010-07-26 13:32:13 +00:00
# define MIP6_VSM_MINLEN 2
# define MIP6_VSM_VID_OFF 2
# define MIP6_VSM_VID_LEN 4
# define MIP6_VSM_SUBTYPE_OFF 6
# define MIP6_VSM_SUBTYPE_LEN 1
# define MIP6_VSM_DATA_OFF 7
2014-05-05 12:03:25 +00:00
# define MIP6_SSM_MINLEN 1
2010-07-26 13:32:13 +00:00
# define MIP6_SSM_SSM_OFF 2
2012-10-25 12:54:37 +00:00
# define MIP6_BADFF_MINLEN 4
2010-07-26 13:32:13 +00:00
# define PMIP6_HI_LEN 2
# define PMIP6_HI_HI_OFF 3
# define PMIP6_HI_HI_LEN 1
# define PMIP6_ATT_LEN 2
# define PMIP6_ATT_ATT_OFF 3
# define PMIP6_ATT_ATT_LEN 1
2012-10-25 12:54:37 +00:00
# define PMIP6_MNLLI_MIN_LEN 1
2011-01-09 17:49:31 +00:00
# define PMIP6_LLA_LEN 16
2010-07-26 13:32:13 +00:00
# define PMIP6_TS_LEN 8
# define PMIP6_RC_LEN 4
# define PMIP6_RC_RC_OFF 2
# define PMIP6_RC_RC_LEN 4
# define MIP6_IPV4HA_LEN 6
# define MIP6_IPV4HA_PREFIXL_OFF 2
# define MIP6_IPV4HA_PREFIXL_LEN 1
# define MIP6_IPV4HA_HA_OFF 4
# define MIP6_IPV4HA_HA_LEN 4
# define MIP6_IPV4AA_LEN 6
# define MIP6_IPV4AA_STATUS_OFF 2
# define MIP6_IPV4AA_STATUS_LEN 1
# define MIP6_IPV4AA_PREFIXL_OFF 3
# define MIP6_IPV4AA_PREFIXL_LEN 1
# define MIP6_IPV4AA_HA_OFF 4
# define MIP6_IPV4AA_HA_LEN 4
2012-10-25 12:54:37 +00:00
# define MIP6_NATD_LEN 6
# define MIP6_IPV4COA_LEN 6
2015-09-18 12:08:38 +00:00
# define PMIP6_GREK_MIN_LEN 2
2012-10-24 13:44:25 +00:00
# define PMIP6_GREK_ID_OFF 4
# define PMIP6_GREK_ID_LEN 4
2012-10-25 12:54:37 +00:00
# define MIP6_MHIPV6AP_MIN_LEN 2
# define MIP6_BI_MIN_LEN 4
2010-07-26 13:32:13 +00:00
# define MIP6_IPV4HAREQ_LEN 6
# define MIP6_IPV4HAREQ_PREFIXL_OFF 2
# define MIP6_IPV4HAREQ_PREFIXL_LEN 1
# define MIP6_IPV4HAREQ_HA_OFF 4
# define MIP6_IPV4HAREQ_HA_LEN 4
# define MIP6_IPV4HAREP_LEN 6
# define MIP6_IPV4HAREP_STATUS_OFF 2
# define MIP6_IPV4HAREP_STATUS_LEN 1
# define MIP6_IPV4HAREP_PREFIXL_OFF 3
# define MIP6_IPV4HAREP_PREFIXL_LEN 1
# define MIP6_IPV4HAREP_HA_OFF 4
# define MIP6_IPV4HAREP_HA_LEN 4
# define MIP6_IPV4DRA_LEN 6
# define MIP6_IPV4DRA_RES_OFF 2
# define MIP6_IPV4DRA_RES_LEN 2
# define MIP6_IPV4DRA_DRA_OFF 4
# define MIP6_IPV4DRA_DRA_LEN 4
2012-10-26 13:29:02 +00:00
# define MIP6_IPV4DSM_LEN 2
# define MIP6_CR_MIN_LEN 4
# define MIP6_LMAA_MIN_LEN 6
2014-05-05 16:12:32 +00:00
# define MIP6_RECAP_LEN 2
# define MIP6_REDIR_MIN_LEN 6
2014-10-25 23:44:56 +00:00
# define MIP6_REDIR_FLAG_K 0x8000
# define MIP6_REDIR_FLAG_N 0x4000
# define MIP6_REDIR_FLAG_RSV 0x3FFF
2014-05-05 16:12:32 +00:00
# define MIP6_LOAD_INF_LEN 18
# define MIP6_ALT_IP4_LEN 4
2012-10-24 06:07:34 +00:00
# define MIP6_MNG_LEN 6
2014-09-23 15:02:13 +00:00
# define MIP6_MAG_IPv6_LEN 16
# define MIP6_ACC_NET_ID_MIN_LEN 3
2015-09-18 12:08:38 +00:00
# define MIP6_DMNP_MIN_LEN 6
2009-08-03 15:18:44 +00:00
static dissector_table_t ip_dissector_table ;
2003-02-04 20:17:01 +00:00
/* Initialize the protocol and registered header fields */
static int proto_mip6 = - 1 ;
2010-10-10 23:28:40 +00:00
static int proto_nemo = - 1 ;
2003-02-04 20:17:01 +00:00
static int hf_mip6_proto = - 1 ;
static int hf_mip6_hlen = - 1 ;
static int hf_mip6_mhtype = - 1 ;
static int hf_mip6_reserved = - 1 ;
static int hf_mip6_csum = - 1 ;
static int hf_mip6_hoti_cookie = - 1 ;
static int hf_mip6_coti_cookie = - 1 ;
static int hf_mip6_hot_nindex = - 1 ;
static int hf_mip6_hot_cookie = - 1 ;
static int hf_mip6_hot_token = - 1 ;
static int hf_mip6_cot_nindex = - 1 ;
static int hf_mip6_cot_cookie = - 1 ;
2013-01-26 22:43:34 +00:00
/* static int hf_mip6_cot_token = -1; */
2003-02-04 20:17:01 +00:00
static int hf_mip6_bu_seqnr = - 1 ;
static int hf_mip6_bu_a_flag = - 1 ;
static int hf_mip6_bu_h_flag = - 1 ;
static int hf_mip6_bu_l_flag = - 1 ;
static int hf_mip6_bu_k_flag = - 1 ;
2005-10-20 15:51:39 +00:00
static int hf_mip6_bu_m_flag = - 1 ;
2010-07-17 21:43:25 +00:00
static int hf_mip6_nemo_bu_r_flag = - 1 ;
static int hf_pmip6_bu_p_flag = - 1 ;
static int hf_mip6_bu_f_flag = - 1 ;
static int hf_pmip6_bu_t_flag = - 1 ;
2012-10-23 16:06:57 +00:00
static int hf_pmip6_bu_b_flag = - 1 ;
2003-02-04 20:17:01 +00:00
static int hf_mip6_bu_lifetime = - 1 ;
static int hf_mip6_ba_status = - 1 ;
static int hf_mip6_ba_k_flag = - 1 ;
2010-07-17 21:43:25 +00:00
static int hf_mip6_nemo_ba_r_flag = - 1 ;
static int hf_pmip6_ba_p_flag = - 1 ;
static int hf_pmip6_ba_t_flag = - 1 ;
2012-10-23 16:06:57 +00:00
static int hf_pmip6_ba_b_flag = - 1 ;
2003-02-04 20:17:01 +00:00
static int hf_mip6_ba_seqnr = - 1 ;
static int hf_mip6_ba_lifetime = - 1 ;
static int hf_mip6_be_status = - 1 ;
static int hf_mip6_be_haddr = - 1 ;
2005-10-25 06:00:53 +00:00
static int hf_fmip6_fbu_seqnr = - 1 ;
static int hf_fmip6_fbu_a_flag = - 1 ;
static int hf_fmip6_fbu_h_flag = - 1 ;
static int hf_fmip6_fbu_l_flag = - 1 ;
static int hf_fmip6_fbu_k_flag = - 1 ;
static int hf_fmip6_fbu_lifetime = - 1 ;
static int hf_fmip6_fback_status = - 1 ;
static int hf_fmip6_fback_k_flag = - 1 ;
static int hf_fmip6_fback_seqnr = - 1 ;
static int hf_fmip6_fback_lifetime = - 1 ;
2015-12-11 04:02:20 +00:00
static int hf_mip6_has_num_addrs = - 1 ;
static int hf_mip6_has_reserved = - 1 ;
static int hf_mip6_has_address = - 1 ;
2010-06-27 08:22:50 +00:00
static int hf_mip6_hb_u_flag = - 1 ;
static int hf_mip6_hb_r_flag = - 1 ;
static int hf_mip6_hb_seqnr = - 1 ;
2012-10-30 13:06:03 +00:00
static int hf_mip6_hi_seqnr = - 1 ;
static int hf_mip6_hi_s_flag = - 1 ;
static int hf_mip6_hi_u_flag = - 1 ;
static int hf_mip6_hi_code = - 1 ;
static int hf_mip6_hack_seqnr = - 1 ;
static int hf_mip6_hack_code = - 1 ;
2012-10-26 15:35:41 +00:00
static int hf_mip6_opt_3gpp_reserved = - 1 ;
static int hf_mip6_opt_3gpp_flag_m = - 1 ;
2012-10-29 16:02:51 +00:00
static int hf_mip6_opt_3gpp_spec_pmipv6_err_code = - 1 ;
static int hf_mip6_opt_3gpp_pdn_gw_ipv4_addr = - 1 ;
static int hf_mip6_opt_3gpp_pdn_gw_ipv6_addr = - 1 ;
static int hf_mip6_opt_3gpp_dhcpv4_addr_all_proc_ind = - 1 ;
static int hf_mip6_opt_3gpp_pdn_type = - 1 ;
static int hf_mip6_opt_3gpp_pdn_ind_cause = - 1 ;
static int hf_mip6_opt_3gpp_chg_id = - 1 ;
static int hf_mip6_opt_3gpp_charging_characteristic = - 1 ;
static int hf_mip6_opt_3gpp_mei = - 1 ;
static int hf_mip6_opt_3gpp_msisdn = - 1 ;
static int hf_mip6_opt_3gpp_apn_rest = - 1 ;
static int hf_mip6_opt_3gpp_max_apn_rest = - 1 ;
static int hf_mip6_opt_3gpp_imsi = - 1 ;
static int hf_mip6_opt_3gpp_pdn_conn_id = - 1 ;
static int hf_hf_mip6_opt_3gpp_lapi = - 1 ;
2012-10-26 15:35:41 +00:00
2003-02-04 20:17:01 +00:00
static int hf_mip6_bra_interval = - 1 ;
static int hf_mip6_acoa_acoa = - 1 ;
2010-07-17 21:43:25 +00:00
static int hf_mip6_nemo_mnp_mnp = - 1 ;
static int hf_mip6_nemo_mnp_pfl = - 1 ;
2003-02-04 20:17:01 +00:00
static int hf_mip6_ni_hni = - 1 ;
static int hf_mip6_ni_cni = - 1 ;
static int hf_mip6_bad_auth = - 1 ;
2015-01-04 02:56:16 +00:00
static int hf_fmip6_lla = - 1 ;
2005-10-25 06:00:53 +00:00
static int hf_fmip6_lla_optcode = - 1 ;
2007-07-06 10:07:25 +00:00
static int hf_mip6_mnid_subtype = - 1 ;
2015-03-11 09:53:44 +00:00
static int hf_mip6_mnid_identifier = - 1 ;
2010-07-17 07:55:28 +00:00
static int hf_mip6_vsm_vid = - 1 ;
static int hf_mip6_vsm_subtype = - 1 ;
static int hf_mip6_vsm_subtype_3gpp = - 1 ;
2014-08-06 17:50:06 +00:00
static int hf_mip6_opt_ss_identifier = - 1 ;
2012-10-25 12:54:37 +00:00
static int hf_mip6_opt_badff_spi = - 1 ;
static int hf_mip6_opt_badff_auth = - 1 ;
2012-10-24 13:44:25 +00:00
static int hf_mip6_opt_auth_sub_type = - 1 ;
static int hf_mip6_opt_auth_mobility_spi = - 1 ;
static int hf_mip6_opt_auth_auth_data = - 1 ;
2014-10-25 23:44:56 +00:00
static int hf_mip6_opt_mseg_id_timestamp = - 1 ;
2012-10-24 13:44:25 +00:00
static int hf_mip6_opt_cgar_cga_par = - 1 ;
static int hf_mip6_opt_sign_sign = - 1 ;
static int hf_mip6_opt_phkt_phkt = - 1 ;
static int hf_mip6_opt_mocot_co_keygen_tok = - 1 ;
static int hf_mip6_opt_dnsu_status = - 1 ;
static int hf_mip6_opt_dnsu_flag_r = - 1 ;
static int hf_mip6_opt_dnsu_mn_id = - 1 ;
static int hf_mip6_opt_em_data = - 1 ;
2012-10-25 15:57:05 +00:00
static int hf_pmip6_hi_hi = - 1 ;
static int hf_pmip6_hi_reserved = - 1 ;
static int hf_pmip6_att_reserved = - 1 ;
static int hf_pmip6_att_att = - 1 ;
2007-07-06 10:07:25 +00:00
2012-10-25 12:54:37 +00:00
static int hf_mip6_opt_mnlli_reserved = - 1 ;
static int hf_mip6_opt_mnlli_lli = - 1 ;
2007-07-06 10:07:25 +00:00
static int hf_pmip6_timestamp = - 1 ;
2010-07-25 18:24:43 +00:00
static int hf_pmip6_rc = - 1 ;
2010-07-17 07:55:28 +00:00
static int hf_mip6_ipv4ha_preflen = - 1 ;
static int hf_mip6_ipv4ha_p_flag = - 1 ;
static int hf_mip6_ipv4ha_ha = - 1 ;
static int hf_mip6_ipv4aa_status = - 1 ;
2012-10-25 12:54:37 +00:00
static int hf_mip6_opt_natd_f_flag = - 1 ;
static int hf_mip6_opt_natd_reserved = - 1 ;
static int hf_mip6_opt_natd_refresh_t = - 1 ;
static int hf_mip6_opt_ipv4coa_reserved = - 1 ;
static int hf_mip6_opt_ipv4coa_addr = - 1 ;
2010-07-17 07:55:28 +00:00
static int hf_pmip6_gre_key = - 1 ;
2012-10-24 13:44:25 +00:00
static int hf_mip6_opt_mhipv6ap_opt_code = - 1 ;
static int hf_mip6_opt_mhipv6ap_prefix_l = - 1 ;
2014-10-18 14:31:01 +00:00
static int hf_mip6_opt_mhipv6ap_ipv6_address = - 1 ;
static int hf_mip6_opt_mhipv6ap_ipv6_address_prefix = - 1 ;
2012-10-25 15:57:05 +00:00
static int hf_mip6_ipv4dra_reserved = - 1 ;
2010-07-25 18:24:43 +00:00
static int hf_mip6_ipv4dra_dra = - 1 ;
2012-10-26 13:29:02 +00:00
static int hf_mip6_ipv4dsm_reserved = - 1 ;
static int hf_mip6_ipv4dsm_s_flag = - 1 ;
static int hf_mip6_cr_reserved = - 1 ;
static int hf_mip6_cr_req_type = - 1 ;
static int hf_mip6_cr_req_length = - 1 ;
static int hf_mip6_lmaa_opt_code = - 1 ;
static int hf_mip6_lmaa_reserved = - 1 ;
static int hf_mip6_lmaa_ipv4 = - 1 ;
static int hf_mip6_lmaa_ipv6 = - 1 ;
2015-04-01 12:11:28 +00:00
static int hf_mip6_mobility = - 1 ;
2009-09-17 13:54:54 +00:00
static int hf_mip6_mobility_opt = - 1 ;
2012-10-24 13:44:25 +00:00
static int hf_mip6_opt_len = - 1 ;
2007-07-06 10:07:25 +00:00
2012-10-25 12:54:37 +00:00
static int hf_mip6_opt_bi_bid = - 1 ;
static int hf_mip6_opt_bi_status = - 1 ;
2012-10-26 13:29:02 +00:00
static int hf_mip6_bi_h_flag = - 1 ;
static int hf_mip6_bi_coa_ipv4 = - 1 ;
static int hf_mip6_bi_coa_ipv6 = - 1 ;
2012-10-25 12:54:37 +00:00
2015-08-10 23:28:54 +00:00
static int hf_mip6_binding_refresh_request = - 1 ;
2015-12-11 01:24:45 +00:00
static int hf_mip6_unknown_type_data = - 1 ;
2015-08-10 23:28:54 +00:00
static int hf_mip6_fast_neighbor_advertisement = - 1 ;
static int hf_mip6_vsm_data = - 1 ;
static int hf_mip6_vsm_req_data = - 1 ;
static int hf_mip6_opt_padn = - 1 ;
static int hf_mip6_option_unknown = - 1 ;
2011-01-09 17:49:31 +00:00
/* PMIP BRI */
static int hf_pmip6_bri_brtype = - 1 ;
static int hf_pmip6_bri_rtrigger = - 1 ;
static int hf_pmip6_bri_status = - 1 ;
static int hf_pmip6_bri_seqnr = - 1 ;
static int hf_pmip6_bri_ip_flag = - 1 ;
static int hf_pmip6_bri_ap_flag = - 1 ;
2014-04-19 16:52:21 +00:00
static int hf_pmip6_bri_iv_flag = - 1 ;
static int hf_pmip6_bri_av_flag = - 1 ;
2011-01-09 17:49:31 +00:00
static int hf_pmip6_bri_ig_flag = - 1 ;
static int hf_pmip6_bri_ag_flag = - 1 ;
static int hf_pmip6_bri_res = - 1 ;
2015-03-17 12:55:52 +00:00
static int hf_pmip6_lri_sequence = - 1 ;
static int hf_pmip6_lri_reserved = - 1 ;
static int hf_pmip6_lri_lifetime = - 1 ;
static int hf_pmip6_lra_sequence = - 1 ;
static int hf_pmip6_lra_u = - 1 ;
static int hf_pmip6_lra_reserved = - 1 ;
static int hf_pmip6_lra_status = - 1 ;
static int hf_pmip6_lra_lifetime = - 1 ;
2014-05-05 16:12:32 +00:00
static int hf_mip6_opt_recap_reserved = - 1 ;
static int hf_mip6_opt_redir_k = - 1 ;
static int hf_mip6_opt_redir_n = - 1 ;
static int hf_mip6_opt_redir_reserved = - 1 ;
static int hf_mip6_opt_redir_addr_r2LMA_ipv6 = - 1 ;
static int hf_mip6_opt_redir_addr_r2LMA_ipv4 = - 1 ;
static int hf_mip6_opt_load_inf_priority = - 1 ;
static int hf_mip6_opt_load_inf_sessions_in_use = - 1 ;
static int hf_mip6_opt_load_inf_maximum_sessions = - 1 ;
static int hf_mip6_opt_load_inf_used_capacity = - 1 ;
static int hf_mip6_opt_load_inf_maximum_capacity = - 1 ;
static int hf_mip6_opt_alt_ip4 = - 1 ;
2012-10-24 13:44:25 +00:00
/* Mobile Node Group Identifier Optionm */
static int hf_mip6_opt_mng_sub_type = - 1 ;
static int hf_mip6_opt_mng_reserved = - 1 ;
static int hf_mip6_opt_mng_mng_id = - 1 ;
2015-03-17 12:55:52 +00:00
static int hf_mip6_opt_mag_ipv6_reserved = - 1 ;
static int hf_mip6_opt_mag_ipv6_address_length = - 1 ;
static int hf_mip6_opt_mag_ipv6_address = - 1 ;
2014-11-19 18:18:39 +00:00
static int hf_mip6_opt_acc_net_id_sub = - 1 ;
2014-09-23 15:02:13 +00:00
static int hf_mip6_opt_acc_net_id_sub_opt = - 1 ;
static int hf_mip6_opt_acc_net_id_sub_opt_len = - 1 ;
static int hf_mip6_opt_acc_net_id_sub_opt_e_bit = - 1 ;
static int hf_mip6_opt_acc_net_id_sub_opt_net_name_len = - 1 ;
static int hf_mip6_opt_acc_net_id_sub_opt_net_name = - 1 ;
2014-11-19 18:18:39 +00:00
static int hf_mip6_opt_acc_net_id_sub_opt_net_name_data = - 1 ;
2014-09-23 15:02:13 +00:00
static int hf_mip6_opt_acc_net_id_sub_opt_ap_name_len = - 1 ;
static int hf_mip6_opt_acc_net_id_sub_opt_ap_name = - 1 ;
2014-11-19 18:18:39 +00:00
static int hf_mip6_opt_acc_net_id_sub_opt_geo_latitude_degrees = - 1 ;
static int hf_mip6_opt_acc_net_id_sub_opt_geo_longitude_degrees = - 1 ;
static int hf_mip6_opt_acc_net_id_sub_opt_op_id_type = - 1 ;
static int hf_mip6_opt_acc_net_id_sub_opt_op_id = - 1 ;
2014-09-23 15:02:13 +00:00
2011-01-09 17:49:31 +00:00
static int hf_pmip6_opt_lila_lla = - 1 ;
2015-09-18 12:08:38 +00:00
/* Delegated Mobile Network Prefix Option */
static int hf_mip6_opt_dmnp_v_flag = - 1 ;
static int hf_mip6_opt_dmnp_reserved = - 1 ;
static int hf_mip6_opt_dmnp_prefix_len = - 1 ;
static int hf_mip6_opt_dmnp_dmnp_ipv4 = - 1 ;
static int hf_mip6_opt_dmnp_dmnp_ipv6 = - 1 ;
2003-02-04 20:17:01 +00:00
/* Initialize the subtree pointers */
static gint ett_mip6 = - 1 ;
2012-10-28 18:04:45 +00:00
static gint ett_mip6_opt_pad1 = - 1 ;
2003-07-11 09:30:49 +00:00
static gint ett_mip6_opt_padn = - 1 ;
2012-10-25 12:54:37 +00:00
static gint ett_mip6_opts = - 1 ;
2003-07-11 09:30:49 +00:00
static gint ett_mip6_opt_bra = - 1 ;
static gint ett_mip6_opt_acoa = - 1 ;
static gint ett_mip6_opt_ni = - 1 ;
static gint ett_mip6_opt_bad = - 1 ;
2010-07-17 21:43:25 +00:00
static gint ett_mip6_nemo_opt_mnp = - 1 ;
2005-10-25 06:00:53 +00:00
static gint ett_fmip6_opt_lla = - 1 ;
2007-07-06 10:07:25 +00:00
static gint ett_mip6_opt_mnid = - 1 ;
2012-10-24 13:44:25 +00:00
static gint ett_mip6_opt_auth = - 1 ;
static gint ett_mip6_opt_mesgid = - 1 ;
static gint ett_mip6_opt_cgapr = - 1 ;
static gint ett_mip6_opt_cgar = - 1 ;
static gint ett_mip6_opt_sign = - 1 ;
static gint ett_mip6_opt_phkt = - 1 ;
static gint ett_mip6_opt_mocoti = - 1 ;
static gint ett_mip6_opt_mocot = - 1 ;
static gint ett_mip6_opt_dnsu = - 1 ;
static gint ett_mip6_opt_em = - 1 ;
2010-07-17 07:55:28 +00:00
static gint ett_mip6_opt_vsm = - 1 ;
static gint ett_mip6_opt_ssm = - 1 ;
2012-10-25 12:54:37 +00:00
static gint ett_mip6_opt_badff = - 1 ;
2014-11-14 03:38:54 +00:00
static gint ett_mip6_opt_unknown = - 1 ;
2007-07-06 10:07:25 +00:00
static gint ett_pmip6_opt_hnp = - 1 ;
2010-07-17 07:55:28 +00:00
static gint ett_pmip6_opt_hi = - 1 ;
static gint ett_pmip6_opt_att = - 1 ;
2012-10-25 12:54:37 +00:00
static gint ett_pmip6_opt_mnlli = - 1 ;
2011-02-10 20:55:26 +00:00
static gint ett_pmip6_opt_lla = - 1 ;
2007-07-06 10:07:25 +00:00
static gint ett_pmip6_opt_ts = - 1 ;
2010-07-25 18:24:43 +00:00
static gint ett_pmip6_opt_rc = - 1 ;
2010-07-17 07:55:28 +00:00
static gint ett_mip6_opt_ipv4ha = - 1 ;
static gint ett_mip6_opt_ipv4aa = - 1 ;
2012-10-25 12:54:37 +00:00
static gint ett_mip6_opt_natd = - 1 ;
static gint ett_mip6_opt_ipv4coa = - 1 ;
2010-07-17 07:55:28 +00:00
static gint ett_pmip6_opt_grek = - 1 ;
2012-10-24 13:44:25 +00:00
static gint ett_pmip6_opt_mhipv6ap = - 1 ;
2012-10-25 12:54:37 +00:00
static gint ett_pmip6_opt_bi = - 1 ;
2010-07-25 18:24:43 +00:00
static gint ett_mip6_opt_ipv4hareq = - 1 ;
static gint ett_mip6_opt_ipv4harep = - 1 ;
static gint ett_mip6_opt_ipv4dra = - 1 ;
2012-10-26 13:29:02 +00:00
static gint ett_mip6_opt_ipv4dsm = - 1 ;
static gint ett_mip6_opt_cr = - 1 ;
static gint ett_mip6_opt_lmaa = - 1 ;
2014-05-05 16:12:32 +00:00
static gint ett_mip6_opt_recap = - 1 ;
static gint ett_mip6_opt_redir = - 1 ;
static gint ett_mip6_opt_load_inf = - 1 ;
static gint ett_mip6_opt_alt_ip4 = - 1 ;
2012-10-24 13:44:25 +00:00
static gint ett_mip6_opt_mng = - 1 ;
2014-09-23 15:02:13 +00:00
static gint ett_mip6_opt_mag_ipv6 = - 1 ;
static gint ett_mip6_opt_acc_net_id = - 1 ;
2014-11-19 18:18:39 +00:00
static gint ett_mip6_sub_opt_acc_net_id = - 1 ;
2015-09-18 12:08:38 +00:00
static gint ett_mip6_opt_dmnp = - 1 ;
2003-02-04 20:17:01 +00:00
2013-05-27 17:30:43 +00:00
static expert_field ei_mip6_ie_not_dissected = EI_INIT ;
2014-11-19 18:18:39 +00:00
static expert_field ei_mip6_ani_type_not_dissected = EI_INIT ;
2015-04-01 12:11:28 +00:00
static expert_field ei_mip6_opt_len_invalid = EI_INIT ;
2015-08-10 23:28:54 +00:00
static expert_field ei_mip6_vsm_data_not_dissected = EI_INIT ;
static expert_field ei_mip6_bogus_header_length = EI_INIT ;
2012-10-25 15:57:05 +00:00
typedef struct mip6_opt {
int optcode ; /**< code for option */
const char * name ; /**< name of option */
int * subtree_index ; /**< pointer to subtree index for option */
opt_len_type len_type ; /**< type of option length field */
int optlen ; /**< value length should be (minimum if VARIABLE) */
void ( * dissect ) ( const struct mip6_opt * ,
tvbuff_t * ,
int ,
guint ,
packet_info * ,
proto_tree * ,
2012-10-25 16:15:58 +00:00
proto_item * ) ; /**< routine to dissect option */
2012-10-25 15:57:05 +00:00
} mip6_opt ;
2003-02-04 20:17:01 +00:00
/* Functions to dissect the mobility headers */
static int
2012-10-23 12:18:25 +00:00
dissect_mip6_brr ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2003-02-04 20:17:01 +00:00
{
2015-08-10 23:28:54 +00:00
proto_tree_add_item ( mip6_tree , hf_mip6_binding_refresh_request , tvb , MIP6_DATA_OFF , MIP6_BRR_LEN , ENC_NA ) ;
2003-02-04 20:17:01 +00:00
2011-04-12 16:48:58 +00:00
return MIP6_DATA_OFF + MIP6_BRR_LEN ;
2003-02-04 20:17:01 +00:00
}
static int
2012-10-23 12:18:25 +00:00
dissect_mip6_hoti ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2003-02-04 20:17:01 +00:00
{
2011-04-12 16:48:58 +00:00
if ( mip6_tree ) {
2012-10-28 19:54:29 +00:00
proto_tree * data_tree ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
MIP6_HOTI_LEN , ett_mip6 , NULL , " Home Test Init " ) ;
2003-02-04 20:17:01 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_hoti_cookie , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_HOTI_COOKIE_OFF , MIP6_HOTI_COOKIE_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
}
2003-02-04 20:17:01 +00:00
2011-04-12 16:48:58 +00:00
return MIP6_DATA_OFF + MIP6_HOTI_LEN ;
2003-02-04 20:17:01 +00:00
}
static int
2012-10-23 12:18:25 +00:00
dissect_mip6_coti ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2003-02-04 20:17:01 +00:00
{
2011-04-12 16:48:58 +00:00
if ( mip6_tree ) {
2012-10-28 19:54:29 +00:00
proto_tree * data_tree ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
MIP6_COTI_LEN , ett_mip6 , NULL , " Care-of Test Init " ) ;
2003-02-04 20:17:01 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_coti_cookie , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_COTI_COOKIE_OFF , MIP6_COTI_COOKIE_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
}
2003-02-04 20:17:01 +00:00
2011-04-12 16:48:58 +00:00
return MIP6_DATA_OFF + MIP6_COTI_LEN ;
2003-02-04 20:17:01 +00:00
}
static int
2012-10-23 12:18:25 +00:00
dissect_mip6_hot ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2003-02-04 20:17:01 +00:00
{
2011-04-12 16:48:58 +00:00
if ( mip6_tree ) {
2012-10-28 19:54:29 +00:00
proto_tree * data_tree ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
MIP6_HOT_LEN , ett_mip6 , NULL , " Home Test " ) ;
2007-07-06 10:07:25 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_hot_nindex , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_HOT_INDEX_OFF , MIP6_HOT_INDEX_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_hot_cookie , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_HOT_COOKIE_OFF , MIP6_HOT_COOKIE_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_hot_token , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_HOT_TOKEN_OFF , MIP6_HOT_TOKEN_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
}
2007-07-06 10:07:25 +00:00
2011-04-12 16:48:58 +00:00
return MIP6_DATA_OFF + MIP6_HOT_LEN ;
2003-02-04 20:17:01 +00:00
}
static int
2012-10-23 12:18:25 +00:00
dissect_mip6_cot ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2003-02-04 20:17:01 +00:00
{
2011-04-12 16:48:58 +00:00
if ( mip6_tree ) {
2012-10-28 19:54:29 +00:00
proto_tree * data_tree ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
MIP6_COT_LEN , ett_mip6 , NULL , " Care-of Test " ) ;
2007-07-06 10:07:25 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_cot_nindex , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_COT_INDEX_OFF , MIP6_COT_INDEX_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_cot_cookie , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_COT_COOKIE_OFF , MIP6_COT_COOKIE_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_hot_token , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_COT_TOKEN_OFF , MIP6_COT_TOKEN_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
}
2007-07-06 10:07:25 +00:00
2011-04-12 16:48:58 +00:00
return MIP6_DATA_OFF + MIP6_COT_LEN ;
2003-02-04 20:17:01 +00:00
}
2011-01-09 17:49:31 +00:00
/* RFC3775 */
2012-10-23 16:06:57 +00:00
/*
http : //www.iana.org/assignments/mobility-parameters/mobility-parameters.xml#mobility-parameters-11
2012-10-25 16:15:58 +00:00
A 0x8000 [ RFC6275 ]
H 0x4000 [ RFC6275 ]
L 0x2000 [ RFC6275 ]
K 0x1000 [ RFC6275 ]
M 0x0800 [ RFC4140 ]
R 0x0400 [ RFC3963 ]
P 0x0200 [ RFC5213 ]
F 0x0100 [ RFC5555 ]
T 0x0080 [ RFC5845 ]
B 0x0040 [ RFC6602 ]
2012-10-23 16:06:57 +00:00
*/
2003-02-04 20:17:01 +00:00
static int
2012-10-23 12:18:25 +00:00
dissect_mip6_bu ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2003-02-04 20:17:01 +00:00
{
2011-04-12 16:48:58 +00:00
if ( mip6_tree ) {
2012-10-28 19:54:29 +00:00
proto_tree * data_tree ;
int lifetime ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
MIP6_BU_LEN , ett_mip6 , NULL , " Binding Update " ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_bu_seqnr , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_BU_SEQNR_OFF , MIP6_BU_SEQNR_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_bu_a_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BU_FLAGS_OFF , MIP6_BU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_bu_h_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BU_FLAGS_OFF , MIP6_BU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_bu_l_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BU_FLAGS_OFF , MIP6_BU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_bu_k_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BU_FLAGS_OFF , MIP6_BU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_bu_m_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BU_FLAGS_OFF , MIP6_BU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_nemo_bu_r_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BU_FLAGS_OFF , MIP6_BU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_pmip6_bu_p_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BU_FLAGS_OFF , MIP6_BU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_bu_f_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BU_FLAGS_OFF , MIP6_BU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_pmip6_bu_t_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BU_FLAGS_OFF , MIP6_BU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2012-10-23 16:06:57 +00:00
proto_tree_add_item ( data_tree , hf_pmip6_bu_b_flag , tvb ,
MIP6_BU_FLAGS_OFF , MIP6_BU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
if ( ( tvb_get_guint8 ( tvb , MIP6_BU_FLAGS_OFF ) & 0x0004 ) = = 0x0004 )
proto_nemo = 1 ;
lifetime = tvb_get_ntohs ( tvb , MIP6_BU_LIFETIME_OFF ) ;
2013-09-15 01:48:30 +00:00
proto_tree_add_uint_format_value ( data_tree , hf_mip6_bu_lifetime , tvb ,
2011-04-12 16:48:58 +00:00
MIP6_BU_LIFETIME_OFF ,
MIP6_BU_LIFETIME_LEN , lifetime ,
2013-09-15 01:48:30 +00:00
" %d (%ld seconds) " ,
2011-04-12 16:48:58 +00:00
lifetime , ( long ) lifetime * 4 ) ;
}
return MIP6_DATA_OFF + MIP6_BU_LEN ;
2003-02-04 20:17:01 +00:00
}
static int
2012-10-23 12:18:25 +00:00
dissect_mip6_ba ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2003-02-04 20:17:01 +00:00
{
2011-04-12 16:48:58 +00:00
if ( mip6_tree ) {
2012-10-28 19:54:29 +00:00
proto_tree * data_tree ;
int lifetime ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
MIP6_BA_LEN , ett_mip6 , NULL , " Binding Acknowledgement " ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_ba_status , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_BA_STATUS_OFF , MIP6_BA_STATUS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_ba_k_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BA_FLAGS_OFF , MIP6_BA_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_nemo_ba_r_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BA_FLAGS_OFF , MIP6_BA_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_pmip6_ba_p_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BA_FLAGS_OFF , MIP6_BA_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_pmip6_ba_t_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BA_FLAGS_OFF , MIP6_BA_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2012-10-23 16:06:57 +00:00
proto_tree_add_item ( data_tree , hf_pmip6_ba_b_flag , tvb ,
MIP6_BA_FLAGS_OFF , MIP6_BA_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
if ( ( tvb_get_guint8 ( tvb , MIP6_BA_FLAGS_OFF ) & 0x0040 ) = = 0x0040 )
proto_nemo = 1 ;
proto_tree_add_item ( data_tree , hf_mip6_ba_seqnr , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_BA_SEQNR_OFF , MIP6_BA_SEQNR_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
lifetime = tvb_get_ntohs ( tvb , MIP6_BA_LIFETIME_OFF ) ;
2013-09-15 01:48:30 +00:00
proto_tree_add_uint_format_value ( data_tree , hf_mip6_ba_lifetime , tvb ,
2011-04-12 16:48:58 +00:00
MIP6_BA_LIFETIME_OFF ,
MIP6_BA_LIFETIME_LEN , lifetime ,
2013-09-15 01:48:30 +00:00
" %d (%ld seconds) " ,
2011-04-12 16:48:58 +00:00
lifetime , ( long ) lifetime * 4 ) ;
}
return MIP6_DATA_OFF + MIP6_BA_LEN ;
2003-02-04 20:17:01 +00:00
}
static int
2012-10-23 12:18:25 +00:00
dissect_mip6_be ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2003-02-04 20:17:01 +00:00
{
2011-04-12 16:48:58 +00:00
if ( mip6_tree ) {
2012-10-28 19:54:29 +00:00
proto_tree * data_tree ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
MIP6_BE_LEN , ett_mip6 , NULL , " Binding Error " ) ;
2007-07-06 10:07:25 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_be_status , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_BE_STATUS_OFF , MIP6_BE_STATUS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_be_haddr , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_BE_HOA_OFF , MIP6_BE_HOA_LEN , ENC_NA ) ;
2011-04-12 16:48:58 +00:00
}
2007-07-06 10:07:25 +00:00
2011-04-12 16:48:58 +00:00
return MIP6_DATA_OFF + MIP6_BE_LEN ;
2003-02-04 20:17:01 +00:00
}
2015-12-11 04:02:20 +00:00
/* Home Agent Switch Message */
/*
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| # of Addresses | Reserved |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| |
+ +
. .
. Home Agent Addresses .
. .
+ +
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| |
+ +
. .
. Mobility Options .
. .
+ +
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
*/
static int
dissect_mip6_has ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
{
guint num_addrs , len ;
num_addrs = tvb_get_guint8 ( tvb , MIP6_DATA_OFF ) ;
len = 2 + num_addrs * 16 ;
if ( mip6_tree ) {
proto_tree * data_tree ;
gint off ;
guint i ;
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
len , ett_mip6 , NULL , " Home Agent Switch " ) ;
proto_tree_add_item ( data_tree , hf_mip6_has_num_addrs , tvb ,
MIP6_DATA_OFF , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( data_tree , hf_mip6_has_reserved , tvb ,
MIP6_DATA_OFF + 1 , 1 , ENC_BIG_ENDIAN ) ;
for ( i = 0 , off = MIP6_DATA_OFF + 2 ; i < num_addrs ; i + + , off + = 16 ) {
proto_tree_add_item ( data_tree , hf_mip6_has_address , tvb , off , 16 , ENC_NA ) ;
}
}
return len ;
}
2010-06-27 08:22:50 +00:00
static int
2012-10-23 12:18:25 +00:00
dissect_mip6_hb ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2010-06-27 08:22:50 +00:00
{
2011-04-12 16:48:58 +00:00
if ( mip6_tree ) {
2012-10-28 19:54:29 +00:00
proto_tree * data_tree ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
MIP6_HB_LEN , ett_mip6 , NULL , " Heartbeat " ) ;
2010-06-27 08:22:50 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_hb_u_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_HB_FLAGS_OFF , MIP6_HB_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_hb_r_flag , tvb ,
2011-10-10 00:39:31 +00:00
MIP6_HB_FLAGS_OFF , MIP6_HB_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2010-06-27 08:22:50 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_mip6_hb_seqnr , tvb ,
2011-10-06 03:35:44 +00:00
MIP6_HB_SEQNR_OFF , MIP6_HB_SEQNR_LEN , ENC_BIG_ENDIAN ) ;
2010-06-27 08:22:50 +00:00
2011-04-12 16:48:58 +00:00
}
2010-06-27 08:22:50 +00:00
2011-04-12 16:48:58 +00:00
return MIP6_DATA_OFF + MIP6_HB_LEN ;
2010-06-27 08:22:50 +00:00
}
2012-10-30 13:06:03 +00:00
/*
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Sequence # |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| S | U | Reserved | Code | |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + .
| |
. .
. Mobility options .
. .
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
Figure 6 : Handover Initiate ( HI ) Message
*/
static int
dissect_mip6_hi ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
{
if ( mip6_tree ) {
proto_tree * data_tree ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF , 4 , ett_mip6 , NULL , " Handover Initiate " ) ;
2012-10-30 13:06:03 +00:00
proto_tree_add_item ( data_tree , hf_mip6_hi_seqnr , tvb ,
MIP6_DATA_OFF , 2 , ENC_BIG_ENDIAN ) ;
2014-02-08 14:28:53 +00:00
proto_tree_add_item ( data_tree , hf_mip6_hi_s_flag , tvb ,
2012-10-30 13:06:03 +00:00
MIP6_DATA_OFF + 2 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( data_tree , hf_mip6_hi_u_flag , tvb ,
MIP6_DATA_OFF + 2 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( data_tree , hf_mip6_hi_code , tvb ,
MIP6_DATA_OFF + 3 , 1 , ENC_BIG_ENDIAN ) ;
2014-02-08 14:28:53 +00:00
}
2012-10-30 13:06:03 +00:00
return MIP6_DATA_OFF + 4 ;
}
/*
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Sequence # |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Reserved | Code | |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + .
| |
. .
. Mobility options .
. .
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
Figure 7 : Handover Acknowledge ( HAck ) Message
*/
static int
dissect_mip6_hack ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
{
if ( mip6_tree ) {
proto_tree * data_tree ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF , 4 , ett_mip6 , NULL , " Handover Acknowledge " ) ;
2012-10-30 13:06:03 +00:00
proto_tree_add_item ( data_tree , hf_mip6_hack_seqnr , tvb ,
MIP6_DATA_OFF , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( data_tree , hf_mip6_hack_code , tvb ,
MIP6_DATA_OFF + 3 , 1 , ENC_BIG_ENDIAN ) ;
2014-02-08 14:28:53 +00:00
}
2012-10-30 13:06:03 +00:00
return MIP6_DATA_OFF + 4 ;
}
2010-06-27 08:22:50 +00:00
2003-02-04 20:17:01 +00:00
static int
2012-10-23 12:18:25 +00:00
dissect_mip6_unknown ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2003-02-04 20:17:01 +00:00
{
2015-12-11 01:24:45 +00:00
guint hdr_len , data_len ;
2003-02-04 20:17:01 +00:00
2015-12-11 01:24:45 +00:00
hdr_len = ( tvb_get_guint8 ( tvb , MIP6_HLEN_OFF ) + 1 ) * 8 ;
data_len = hdr_len - MIP6_DATA_OFF ;
proto_tree_add_item ( mip6_tree , hf_mip6_unknown_type_data , tvb , MIP6_DATA_OFF , data_len , ENC_NA ) ;
return hdr_len ;
2003-02-04 20:17:01 +00:00
}
2005-10-25 06:00:53 +00:00
static int
2012-10-23 12:18:25 +00:00
dissect_fmip6_fbu ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2005-10-25 06:00:53 +00:00
{
2011-04-12 16:48:58 +00:00
if ( mip6_tree ) {
2012-10-28 19:54:29 +00:00
proto_tree * data_tree ;
int lifetime ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
MIP6_BU_LEN , ett_mip6 , NULL , " Fast Binding Update " ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_fmip6_fbu_seqnr , tvb ,
2011-10-06 03:35:44 +00:00
FMIP6_FBU_SEQNR_OFF , FMIP6_FBU_SEQNR_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_fmip6_fbu_a_flag , tvb ,
2011-10-10 00:39:31 +00:00
FMIP6_FBU_FLAGS_OFF , FMIP6_FBU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_fmip6_fbu_h_flag , tvb ,
2011-10-10 00:39:31 +00:00
FMIP6_FBU_FLAGS_OFF , FMIP6_FBU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_fmip6_fbu_l_flag , tvb ,
2011-10-10 00:39:31 +00:00
FMIP6_FBU_FLAGS_OFF , FMIP6_FBU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_fmip6_fbu_k_flag , tvb ,
2011-10-10 00:39:31 +00:00
FMIP6_FBU_FLAGS_OFF , FMIP6_FBU_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
lifetime = tvb_get_ntohs ( tvb , FMIP6_FBU_LIFETIME_OFF ) ;
2013-09-15 01:48:30 +00:00
proto_tree_add_uint_format_value ( data_tree , hf_fmip6_fbu_lifetime , tvb ,
2011-04-12 16:48:58 +00:00
FMIP6_FBU_LIFETIME_OFF ,
FMIP6_FBU_LIFETIME_LEN , lifetime ,
2013-09-15 01:48:30 +00:00
" %d (%ld seconds) " ,
2011-04-12 16:48:58 +00:00
lifetime , ( long ) lifetime * 4 ) ;
}
return MIP6_DATA_OFF + FMIP6_FBU_LEN ;
2005-10-25 06:00:53 +00:00
}
static int
2012-10-23 12:18:25 +00:00
dissect_fmip6_fback ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2005-10-25 06:00:53 +00:00
{
2011-04-12 16:48:58 +00:00
if ( mip6_tree ) {
2012-10-28 19:54:29 +00:00
proto_tree * data_tree ;
int lifetime ;
2014-07-01 22:31:05 +00:00
data_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
FMIP6_FBACK_LEN , ett_mip6 , NULL , " Fast Binding Acknowledgement " ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_fmip6_fback_status , tvb ,
2011-10-06 03:35:44 +00:00
FMIP6_FBACK_STATUS_OFF , FMIP6_FBACK_STATUS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_fmip6_fback_k_flag , tvb ,
2011-10-10 00:39:31 +00:00
FMIP6_FBACK_FLAGS_OFF , FMIP6_FBACK_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( data_tree , hf_fmip6_fback_seqnr , tvb ,
2011-10-06 03:35:44 +00:00
FMIP6_FBACK_SEQNR_OFF , FMIP6_FBACK_SEQNR_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
lifetime = tvb_get_ntohs ( tvb , FMIP6_FBACK_LIFETIME_OFF ) ;
2013-09-15 01:48:30 +00:00
proto_tree_add_uint_format_value ( data_tree , hf_fmip6_fback_lifetime , tvb ,
2011-04-12 16:48:58 +00:00
FMIP6_FBACK_LIFETIME_OFF ,
FMIP6_FBACK_LIFETIME_LEN , lifetime ,
2013-09-15 01:48:30 +00:00
" %d (%ld seconds) " ,
2011-04-12 16:48:58 +00:00
lifetime , ( long ) lifetime * 4 ) ;
}
return MIP6_DATA_OFF + FMIP6_FBACK_LEN ;
2005-10-25 06:00:53 +00:00
}
static int
2012-10-23 12:18:25 +00:00
dissect_fmip6_fna ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ )
2005-10-25 06:00:53 +00:00
{
2015-08-10 23:28:54 +00:00
proto_tree_add_item ( mip6_tree , hf_mip6_fast_neighbor_advertisement , tvb , MIP6_DATA_OFF , FMIP6_FNA_LEN , ENC_NA ) ;
2005-10-25 06:00:53 +00:00
2011-04-12 16:48:58 +00:00
return MIP6_DATA_OFF + FMIP6_FNA_LEN ;
2005-10-25 06:00:53 +00:00
}
2011-01-09 17:49:31 +00:00
/* PMIP Binding Revocation Indication / Acknowledge */
static int
dissect_pmip6_bri ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo )
{
2011-04-12 16:48:58 +00:00
# define INDICATION 1
2012-10-28 19:54:29 +00:00
# define ACKNOWLEDGE 2
2011-01-09 17:49:31 +00:00
2012-10-28 19:54:29 +00:00
proto_tree * field_tree ;
2011-04-12 16:48:58 +00:00
guint8 br_type ;
2011-01-09 17:49:31 +00:00
2011-04-12 16:48:58 +00:00
br_type = tvb_get_guint8 ( tvb , PMIP6_BRI_BRTYPE_OFF ) ;
2011-01-09 17:49:31 +00:00
2011-04-12 16:48:58 +00:00
/* Branch between BR Indication and BR Acknowledge */
if ( br_type = = INDICATION )
{
2012-10-23 11:47:57 +00:00
col_append_str ( pinfo - > cinfo , COL_INFO , " Indication " ) ;
2011-01-09 17:49:31 +00:00
2011-04-12 16:48:58 +00:00
if ( mip6_tree )
{
2014-07-01 22:31:05 +00:00
field_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
PMIP6_BRI_LEN , ett_mip6 , NULL , " Binding Revocation Indication " ) ;
2011-01-09 17:49:31 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_brtype , tvb ,
2011-10-06 03:35:44 +00:00
PMIP6_BRI_BRTYPE_OFF , PMIP6_BRI_BRTYPE_LEN , ENC_BIG_ENDIAN ) ;
2011-02-08 03:16:35 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_rtrigger , tvb ,
2011-10-06 03:35:44 +00:00
PMIP6_BRI_RTRIGGER_OFF , PMIP6_BRI_RTRIGGER_LEN , ENC_BIG_ENDIAN ) ;
2011-02-08 03:16:35 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_seqnr , tvb ,
2011-10-06 03:35:44 +00:00
PMIP6_BRI_SEQNR_OFF , PMIP6_BRI_SEQNR_LEN , ENC_BIG_ENDIAN ) ;
2011-02-08 03:16:35 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_ip_flag , tvb ,
2011-10-10 00:39:31 +00:00
PMIP6_BRI_FLAGS_OFF , PMIP6_BRI_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-01-09 17:49:31 +00:00
2014-04-19 16:52:21 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_iv_flag , tvb ,
2011-10-10 00:39:31 +00:00
PMIP6_BRI_FLAGS_OFF , PMIP6_BRI_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-01-09 17:49:31 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_ig_flag , tvb ,
2011-10-10 00:39:31 +00:00
PMIP6_BRI_FLAGS_OFF , PMIP6_BRI_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-01-09 17:49:31 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_res , tvb ,
2014-04-19 16:52:21 +00:00
PMIP6_BRI_FLAGS_OFF , PMIP6_BRI_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
}
} else if ( br_type = = ACKNOWLEDGE ) {
2012-10-23 11:47:57 +00:00
col_append_str ( pinfo - > cinfo , COL_INFO , " Acknowledge " ) ;
2011-01-09 17:49:31 +00:00
2011-04-12 16:48:58 +00:00
if ( mip6_tree )
{
2014-07-01 22:31:05 +00:00
field_tree = proto_tree_add_subtree ( mip6_tree , tvb , MIP6_DATA_OFF ,
PMIP6_BRI_LEN , ett_mip6 , NULL , " Binding Revocation Acknowledge " ) ;
2011-01-09 17:49:31 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_brtype , tvb ,
2011-10-06 03:35:44 +00:00
PMIP6_BRI_BRTYPE_OFF , PMIP6_BRI_BRTYPE_LEN , ENC_BIG_ENDIAN ) ;
2011-02-08 03:16:35 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_status , tvb ,
2011-10-06 03:35:44 +00:00
PMIP6_BRI_STATUS_OFF , PMIP6_BRI_STATUS_LEN , ENC_BIG_ENDIAN ) ;
2011-02-08 03:16:35 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_seqnr , tvb ,
2011-10-06 03:35:44 +00:00
PMIP6_BRI_SEQNR_OFF , PMIP6_BRI_SEQNR_LEN , ENC_BIG_ENDIAN ) ;
2011-02-08 03:16:35 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_ap_flag , tvb ,
2011-10-10 00:39:31 +00:00
PMIP6_BRI_FLAGS_OFF , PMIP6_BRI_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-01-09 17:49:31 +00:00
2014-04-19 16:52:21 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_av_flag , tvb ,
PMIP6_BRI_FLAGS_OFF , PMIP6_BRI_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_ag_flag , tvb ,
2011-10-10 00:39:31 +00:00
PMIP6_BRI_FLAGS_OFF , PMIP6_BRI_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-01-09 17:49:31 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_bri_res , tvb ,
2014-04-19 16:52:21 +00:00
PMIP6_BRI_FLAGS_OFF , PMIP6_BRI_FLAGS_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
}
}
2011-01-09 17:49:31 +00:00
2011-04-12 16:48:58 +00:00
return MIP6_DATA_OFF + PMIP6_BRI_LEN ;
2011-01-09 17:49:31 +00:00
}
2003-02-04 20:17:01 +00:00
2015-03-17 12:55:52 +00:00
/*
10.1 . Localized Routing Initiation ( LRI )
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Sequence # |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Reserved | Lifetime |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| |
. .
. Mobility options .
. .
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
*/
static int
dissect_pmip6_lri ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ , gint offset )
{
proto_tree_add_item ( mip6_tree , hf_pmip6_lri_sequence , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
proto_tree_add_item ( mip6_tree , hf_pmip6_lri_reserved , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
proto_tree_add_item ( mip6_tree , hf_pmip6_lri_lifetime , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
return offset ;
}
/*
10.2 . Localized Routing Acknowledgment ( LRA )
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Sequence # |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| U | Reserved | Status | Lifetime |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| |
. .
. Mobility options .
. .
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
*/
static int
dissect_pmip6_lra ( tvbuff_t * tvb , proto_tree * mip6_tree , packet_info * pinfo _U_ , gint offset )
{
proto_tree_add_item ( mip6_tree , hf_pmip6_lra_sequence , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
proto_tree_add_item ( mip6_tree , hf_pmip6_lra_u , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( mip6_tree , hf_pmip6_lra_reserved , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + = 1 ;
proto_tree_add_item ( mip6_tree , hf_pmip6_lra_status , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + = 1 ;
proto_tree_add_item ( mip6_tree , hf_pmip6_lra_lifetime , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
return offset ;
}
2007-07-06 10:07:25 +00:00
/* Functions to dissect the mobility options */
2012-10-26 15:35:41 +00:00
/*Dissect vendor option 3GPP
* Ref Mobile IPv6 vendor specific option format and usage within 3 GPP
* ( 3 GPP TS 29.282 version 10.2 .0 Release 10 )
*/
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Vendor ID |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Sub - Type | Reserved | M | 3 GPP Specific IE Data Fragment
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-26 15:35:41 +00:00
*/
2013-04-16 18:13:40 +00:00
static int
dissect_mip6_opt_vsm_3gpp ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , void * data _U_ )
2012-10-26 15:35:41 +00:00
{
2014-02-08 14:28:53 +00:00
proto_item * hdr_item = tree ;
2013-04-16 18:13:40 +00:00
int len = tvb_reported_length ( tvb ) ;
2014-02-08 14:28:53 +00:00
int offset = 0 ;
2012-10-29 16:02:51 +00:00
guint8 sub_type , m_flag ;
tvbuff_t * next_tvb ;
const gchar * mei_str ;
const char * digit_str ;
gchar * mcc_mnc_str ;
const gchar * imsi_str ;
2012-10-26 15:35:41 +00:00
/* offset points to the sub type */
sub_type = tvb_get_guint8 ( tvb , offset ) ;
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_mip6_vsm_subtype_3gpp , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
proto_item_append_text ( hdr_item , " %s " , val_to_str_ext_const ( sub_type , & mip6_vsm_subtype_3gpp_value_ext , " <unknown> " ) ) ;
2012-10-26 15:35:41 +00:00
offset + + ;
2012-10-29 16:02:51 +00:00
m_flag = tvb_get_guint8 ( tvb , offset ) & 0x01 ;
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_reserved , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_flag_m , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-26 15:35:41 +00:00
offset + + ;
2012-10-28 19:54:29 +00:00
/* set len to the length of the data section */
2013-04-16 18:13:40 +00:00
len = len - 2 ;
2012-10-29 16:02:51 +00:00
if ( m_flag ) {
2015-08-10 23:28:54 +00:00
proto_tree_add_expert_format ( tree , pinfo , & ei_mip6_vsm_data_not_dissected , tvb , offset , len , " Data fragment, handling not implemented yet " ) ;
2013-04-16 18:13:40 +00:00
return len ;
2012-10-29 16:02:51 +00:00
}
/* see 3GPP TS 29.275 version 10.5.0 Release 10 */
2012-10-28 19:54:29 +00:00
switch ( sub_type ) {
2013-06-30 11:06:32 +00:00
/* 1, Protocol Configuration Options
2012-10-29 16:02:51 +00:00
* 3 GPP PCO data , in the format from 3 GPP TS 24.008 [ 16 ] subclause 10.5 .6 .3 , starting with octet 3
* de_sm_pco ( tvb , tree , pinfo , 0 , length , NULL , 0 ) ;
* Note needs pinfo - > link_dir ?
*/
2014-02-08 14:28:53 +00:00
case 1 :
/* pinfo->link_dir == P2P_DIR_UNKNOWN */
de_sm_pco ( tvb , tree , pinfo , offset , len , NULL , 0 ) ;
break ;
2012-10-29 16:02:51 +00:00
/* 2, 3GPP Specific PMIPv6 Error Code */
case 2 :
2013-09-25 21:11:25 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_spec_pmipv6_err_code , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-29 16:02:51 +00:00
break ;
/* 3, PMIPv6 PDN GW IP Address
* PDN GW IP address , as specified in subclause 12.1 .1 .4
*/
case 3 :
if ( len = = 4 ) {
/* Ipv4 address */
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_pdn_gw_ipv4_addr , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
2012-10-29 16:02:51 +00:00
} else if ( len = = 16 ) {
/* IPv6 address */
2014-02-08 14:46:59 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_pdn_gw_ipv6_addr , tvb , offset , 16 , ENC_NA ) ;
2012-10-29 16:02:51 +00:00
}
break ;
2013-06-30 11:06:32 +00:00
/* 4, PMIPv6 DHCPv4 Address Allocation Procedure Indication
2012-10-29 16:02:51 +00:00
* DHCPv4 Address Allocation Procedure Indication , as specified in subclause 12.1 .1 .5
*/
case 4 :
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_dhcpv4_addr_all_proc_ind , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-29 16:02:51 +00:00
break ;
2013-06-30 11:06:32 +00:00
/* 5, PMIPv6 Fully Qualified PDN Connection Set Identifier
2012-10-29 16:02:51 +00:00
* FQ - CSID as specified in subclause 12.1 .1 .2
*/
case 5 :
2014-06-06 14:35:50 +00:00
next_tvb = tvb_new_subset_length ( tvb , offset , len ) ;
2016-02-23 14:34:07 +00:00
dissect_gtpv2_fq_csid ( next_tvb , pinfo , tree , hdr_item , len , 0 , 0 , NULL ) ;
2012-10-29 16:02:51 +00:00
break ;
/* 6, PMIPv6 PDN type indication */
case 6 :
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_pdn_type , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-29 16:02:51 +00:00
offset + + ;
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_pdn_ind_cause , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-29 16:02:51 +00:00
break ;
/* 7, Charging ID
* Charging ID as specified in subclause 12.1 .1 .6
*/
case 7 :
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_chg_id , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
2012-10-29 16:02:51 +00:00
proto_item_append_text ( hdr_item , " %u " , tvb_get_ntohl ( tvb , offset ) ) ;
break ;
/* 8, Selection Mode */
case 8 :
2014-06-06 14:35:50 +00:00
next_tvb = tvb_new_subset_length ( tvb , offset , len ) ;
2016-02-23 14:34:07 +00:00
dissect_gtpv2_selec_mode ( next_tvb , pinfo , tree , hdr_item , len , 0 , 0 , NULL ) ;
2012-10-29 16:02:51 +00:00
break ;
/* 9, I-WLAN Mobility Access Point Name (APN) */
/* 10, Charging Characteristics */
case 10 :
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_charging_characteristic , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
2012-10-29 16:02:51 +00:00
break ;
/* 11, Mobile Equipment Identity (MEI) */
case 11 :
2013-09-22 20:04:35 +00:00
mei_str = tvb_bcd_dig_to_wmem_packet_str ( tvb , offset , len , NULL , FALSE ) ;
2013-04-16 18:13:40 +00:00
proto_tree_add_string ( tree , hf_mip6_opt_3gpp_mei , tvb , offset , len , mei_str ) ;
2012-10-29 16:02:51 +00:00
proto_item_append_text ( hdr_item , " %s " , mei_str ) ;
break ;
/* 12, MSISDN */
case 12 :
2014-08-21 02:47:22 +00:00
dissect_e164_cc ( tvb , tree , offset , E164_ENC_BCD ) ;
2013-09-22 20:04:35 +00:00
digit_str = tvb_bcd_dig_to_wmem_packet_str ( tvb , offset , len , NULL , FALSE ) ;
2013-04-16 18:13:40 +00:00
proto_tree_add_string ( tree , hf_mip6_opt_3gpp_msisdn , tvb , offset , len , digit_str ) ;
2012-10-29 16:02:51 +00:00
proto_item_append_text ( hdr_item , " %s " , digit_str ) ;
break ;
/* 13, Serving Network */
case 13 :
2015-01-09 15:39:47 +00:00
mcc_mnc_str = dissect_e212_mcc_mnc_wmem_packet_str ( tvb , pinfo , tree , offset , E212_NONE , TRUE ) ;
2012-10-29 16:02:51 +00:00
proto_item_append_text ( hdr_item , " %s " , mcc_mnc_str ) ;
break ;
/* 14, APN Restriction */
case 14 :
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_apn_rest , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-29 16:02:51 +00:00
break ;
/* 15, Maximum APN Restriction */
case 15 :
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_max_apn_rest , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-29 16:02:51 +00:00
break ;
/* 16, Unauthenticated IMSI */
case 16 :
2013-09-22 20:04:35 +00:00
imsi_str = tvb_bcd_dig_to_wmem_packet_str ( tvb , offset , len , NULL , FALSE ) ;
2013-04-16 18:13:40 +00:00
proto_tree_add_string ( tree , hf_mip6_opt_3gpp_imsi , tvb , offset , len , imsi_str ) ;
2012-10-29 16:02:51 +00:00
proto_item_append_text ( hdr_item , " %s " , imsi_str ) ;
break ;
/* 17, PDN Connection ID */
case 17 :
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_mip6_opt_3gpp_pdn_conn_id , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-29 16:02:51 +00:00
break ;
/* 18, PGW Back-Off Time */
case 18 :
2014-06-06 14:35:50 +00:00
next_tvb = tvb_new_subset_length ( tvb , offset , len ) ;
2016-02-23 14:34:07 +00:00
dissect_gtpv2_epc_timer ( next_tvb , pinfo , tree , hdr_item , len , 0 , 0 , NULL ) ;
2012-10-29 16:02:51 +00:00
break ;
/* 19, Signalling Priority Indication */
case 19 :
2013-04-16 18:13:40 +00:00
proto_tree_add_item ( tree , hf_hf_mip6_opt_3gpp_lapi , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-29 16:02:51 +00:00
break ;
2013-06-30 11:06:32 +00:00
/* 20, Additional Protocol Configuration Options
2012-10-29 16:02:51 +00:00
* 12.1 .1 .19 Additional Protocol Configuration Options
* The Additional Protocol Configuration Options IE contains additional 3 GPP protocol configuration options
* information . The IE is in the same format as the PCO IE specified in 3 GPP TS 24.008 [ 16 ] subclause 10.5 .6 .3 , starting
* with octet 3.
*/
2012-10-26 15:35:41 +00:00
default :
2015-08-10 23:28:54 +00:00
proto_tree_add_expert ( tree , pinfo , & ei_mip6_vsm_data_not_dissected , tvb , offset , len ) ;
2012-10-26 15:35:41 +00:00
break ;
}
2014-02-08 14:28:53 +00:00
return len ;
2012-10-26 15:35:41 +00:00
}
2012-10-25 12:54:37 +00:00
/* 1 PadN [RFC3775] */
2003-07-11 09:30:49 +00:00
static void
2015-08-10 23:28:54 +00:00
dissect_mip6_opt_padn ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2013-07-22 15:41:46 +00:00
guint optlen _U_ , packet_info * pinfo _U_ ,
2012-10-25 16:15:58 +00:00
proto_tree * opt_tree , proto_item * hdr_item _U_ )
2003-02-04 20:17:01 +00:00
{
2013-07-22 14:19:04 +00:00
guint8 len ;
2012-10-25 15:57:05 +00:00
/* offset points to tag(opt) */
offset + + ;
2013-07-22 14:19:04 +00:00
len = tvb_get_guint8 ( tvb , offset ) ;
2012-10-25 15:57:05 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2013-07-22 14:19:04 +00:00
if ( len > 0 ) {
2015-08-10 23:28:54 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_padn , tvb , offset , len , ENC_NA ) ;
2013-07-22 14:19:04 +00:00
}
2003-02-04 20:17:01 +00:00
}
2012-10-25 12:54:37 +00:00
/* 2 Binding Refresh Advice */
2003-07-11 09:30:49 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_bra ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2011-04-12 16:48:58 +00:00
guint optlen , packet_info * pinfo _U_ ,
2012-10-25 16:15:58 +00:00
proto_tree * opt_tree , proto_item * hdr_item _U_ )
2003-02-04 20:17:01 +00:00
{
2011-04-12 16:48:58 +00:00
int ri ;
2003-02-04 20:17:01 +00:00
2011-04-12 16:48:58 +00:00
ri = tvb_get_ntohs ( tvb , offset + MIP6_BRA_RI_OFF ) ;
2013-09-15 01:48:30 +00:00
proto_tree_add_uint_format_value ( opt_tree , hf_mip6_bra_interval , tvb ,
2011-04-12 16:48:58 +00:00
offset , optlen ,
2013-09-15 01:48:30 +00:00
ri , " %d (%ld seconds) " ,
2011-04-12 16:48:58 +00:00
ri , ( long ) ri * 4 ) ;
2003-02-04 20:17:01 +00:00
}
2012-10-25 12:54:37 +00:00
/*3 Alternate Care-of Address */
2003-07-11 09:30:49 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_acoa ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-24 07:08:39 +00:00
guint optlen _U_ , packet_info * pinfo _U_ ,
2012-10-25 16:15:58 +00:00
proto_tree * opt_tree , proto_item * hdr_item _U_ )
2003-02-04 20:17:01 +00:00
{
2012-10-24 06:07:34 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_acoa_acoa , tvb ,
2014-02-08 14:28:53 +00:00
offset + MIP6_ACOA_ACOA_OFF , MIP6_ACOA_ACOA_LEN , ENC_NA ) ;
2003-02-04 20:17:01 +00:00
}
2012-10-25 12:54:37 +00:00
/* 4 Nonce Indices */
2003-07-11 09:30:49 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_ni ( const mip6_opt * optp , tvbuff_t * tvb , int offset ,
2011-04-12 16:48:58 +00:00
guint optlen , packet_info * pinfo _U_ ,
2012-10-25 16:15:58 +00:00
proto_tree * opt_tree , proto_item * hdr_item _U_ )
2003-02-04 20:17:01 +00:00
{
2012-10-28 19:54:29 +00:00
proto_tree * field_tree ;
2003-02-04 20:17:01 +00:00
2014-07-01 22:31:05 +00:00
field_tree = proto_tree_add_subtree ( opt_tree , tvb , offset , optlen , * optp - > subtree_index , NULL , optp - > name ) ;
2003-02-04 20:17:01 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_mip6_ni_hni , tvb ,
2011-10-06 03:35:44 +00:00
offset + MIP6_NI_HNI_OFF , MIP6_NI_HNI_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_mip6_ni_cni , tvb ,
2011-10-06 03:35:44 +00:00
offset + MIP6_NI_CNI_OFF , MIP6_NI_CNI_LEN , ENC_BIG_ENDIAN ) ;
2003-02-04 20:17:01 +00:00
}
2011-01-09 17:49:31 +00:00
/* 5 Authorization Data */
2003-07-11 09:30:49 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_bad ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2011-04-12 16:48:58 +00:00
guint optlen , packet_info * pinfo _U_ ,
2012-10-25 16:15:58 +00:00
proto_tree * opt_tree , proto_item * hdr_item _U_ )
2003-02-04 20:17:01 +00:00
{
2012-10-28 19:54:29 +00:00
proto_tree * field_tree ;
2003-02-04 20:17:01 +00:00
2014-07-01 22:31:05 +00:00
field_tree = proto_tree_add_subtree ( opt_tree , tvb , offset , optlen , * optp - > subtree_index , NULL , optp - > name ) ;
2003-02-04 20:17:01 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_mip6_bad_auth , tvb ,
offset + MIP6_BAD_AUTH_OFF ,
2011-10-04 22:44:31 +00:00
optlen - MIP6_BAD_AUTH_OFF , ENC_NA ) ;
2003-02-04 20:17:01 +00:00
}
2012-10-25 12:54:37 +00:00
/* 6 Mobile Network Prefix Option */
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_nemo_opt_mnp ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 12:54:37 +00:00
guint optlen , packet_info * pinfo _U_ ,
2012-10-25 16:15:58 +00:00
proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-25 12:54:37 +00:00
{
2012-10-28 19:54:29 +00:00
proto_tree * field_tree ;
2015-09-18 12:08:38 +00:00
guint8 prefix_len ;
2012-10-28 19:54:29 +00:00
2014-07-01 22:31:05 +00:00
field_tree = proto_tree_add_subtree ( opt_tree , tvb , offset , optlen , * optp - > subtree_index , NULL , optp - > name ) ;
2012-10-25 12:54:37 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_nemo_mnp_pfl , tvb ,
offset + MIP6_NEMO_MNP_PL_OFF , 1 , ENC_BIG_ENDIAN ) ;
2015-09-18 12:08:38 +00:00
prefix_len = tvb_get_guint8 ( tvb , offset + MIP6_NEMO_MNP_PL_OFF ) ;
2012-10-25 12:54:37 +00:00
proto_tree_add_item ( field_tree , hf_mip6_nemo_mnp_mnp , tvb ,
offset + MIP6_NEMO_MNP_MNP_OFF , MIP6_NEMO_MNP_MNP_LEN , ENC_NA ) ;
2015-09-18 12:08:38 +00:00
proto_item_append_text ( hdr_item , " : %s/%u " ,
tvb_ip6_to_str ( tvb , offset + MIP6_NEMO_MNP_MNP_OFF ) , prefix_len ) ;
2012-10-25 12:54:37 +00:00
}
2011-01-09 17:49:31 +00:00
/* 7 Mobility Header Link-Layer Address option [RFC5568] */
2005-10-25 06:00:53 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_fmip6_opt_lla ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2011-04-12 16:48:58 +00:00
guint optlen , packet_info * pinfo _U_ ,
2012-10-25 16:15:58 +00:00
proto_tree * opt_tree , proto_item * hdr_item _U_ )
2005-10-25 06:00:53 +00:00
{
2015-01-04 02:56:16 +00:00
int len ;
2011-04-12 16:48:58 +00:00
2015-12-06 18:57:50 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset + 1 , 1 , ENC_BIG_ENDIAN ) ;
2014-04-18 20:31:26 +00:00
2015-12-06 18:57:50 +00:00
proto_tree_add_item ( opt_tree , hf_fmip6_lla_optcode , tvb ,
2011-10-06 03:35:44 +00:00
offset + FMIP6_LLA_OPTCODE_OFF , FMIP6_LLA_OPTCODE_LEN , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
len = optlen - FMIP6_LLA_LLA_OFF ;
if ( len > 0 ) {
2015-12-06 18:57:50 +00:00
proto_tree_add_item ( opt_tree , hf_fmip6_lla , tvb , offset + FMIP6_LLA_LLA_OFF , len , ENC_NA ) ;
2011-04-12 16:48:58 +00:00
}
2007-07-06 10:07:25 +00:00
}
2011-01-09 17:49:31 +00:00
/* 8 MN-ID-OPTION-TYPE */
2007-07-06 10:07:25 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_mnid ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item )
2007-07-06 10:07:25 +00:00
{
2012-10-28 19:54:29 +00:00
int len ;
2012-10-25 16:15:58 +00:00
gchar * str ;
2007-07-06 10:07:25 +00:00
2012-10-25 15:57:05 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2007-07-06 10:07:25 +00:00
2012-10-25 15:57:05 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_mnid_subtype , tvb ,
offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2007-07-06 10:07:25 +00:00
2011-04-12 16:48:58 +00:00
len = optlen - MIP6_MNID_MNID_OFF ;
2007-07-06 10:07:25 +00:00
2012-10-25 16:15:58 +00:00
if ( len > 0 ) {
2015-03-11 09:53:44 +00:00
str = tvb_get_string_enc ( wmem_packet_scope ( ) , tvb , offset , len , ENC_UTF_8 | ENC_NA ) ;
proto_tree_add_string ( opt_tree , hf_mip6_mnid_identifier , tvb , offset , len , str ) ;
2012-10-25 16:15:58 +00:00
proto_item_append_text ( hdr_item , " : %s " , str ) ;
}
2007-07-06 10:07:25 +00:00
}
2012-10-24 13:44:25 +00:00
/* 9 AUTH-OPTION-TYPE
2012-10-28 19:54:29 +00:00
http : //tools.ietf.org/html/rfc4285
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Option Type | Option Length | Subtype |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Mobility SPI |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Authentication Data . . . .
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
Figure 2 : Mobility Message Authentication Option
2012-10-24 13:44:25 +00:00
*/
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_auth ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2014-10-25 23:44:56 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-24 13:44:25 +00:00
{
2012-10-24 14:08:47 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_auth_sub_type , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2014-10-25 23:44:56 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_auth_mobility_spi , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
offset + = 4 ;
2015-02-14 11:47:38 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_auth_auth_data , tvb , offset , optlen - 4 - 3 , ENC_NA ) ;
2014-10-25 23:44:56 +00:00
}
/* 10 MESG-ID-OPTION-TYPE [RFC4285] */
2012-10-24 13:44:25 +00:00
2014-10-25 23:44:56 +00:00
static void
dissect_mip6_opt_mseg_id ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
{
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_mseg_id_timestamp , tvb , offset , 8 , ENC_BIG_ENDIAN ) ;
2012-10-24 13:44:25 +00:00
}
2014-10-25 23:44:56 +00:00
2012-10-25 12:54:37 +00:00
/* 11 CGA Parameters Request [RFC4866] */
/* Carries no data */
2012-10-24 13:44:25 +00:00
/* 12 CGA Parameters [RFC4866] */
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_cgar ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2014-10-25 23:44:56 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-24 13:44:25 +00:00
{
2012-10-24 14:08:47 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-24 13:44:25 +00:00
2014-10-25 23:44:56 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_cgar_cga_par , tvb , offset , optlen - 2 , ENC_NA ) ;
2012-10-24 13:44:25 +00:00
}
/* 13 Signature [RFC4866] */
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_sign ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2014-10-25 23:44:56 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-24 13:44:25 +00:00
{
2012-10-24 14:08:47 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-24 13:44:25 +00:00
2014-10-25 23:44:56 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_sign_sign , tvb , offset , optlen - 2 , ENC_NA ) ;
2012-10-24 13:44:25 +00:00
}
/* 14 Permanent Home Keygen Token [RFC4866] */
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_phkt ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2014-10-25 23:44:56 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-24 13:44:25 +00:00
{
2012-10-24 14:08:47 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-24 13:44:25 +00:00
2014-10-25 23:44:56 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_phkt_phkt , tvb , offset , optlen - 2 , ENC_NA ) ;
2012-10-24 13:44:25 +00:00
}
2012-10-25 16:15:58 +00:00
/* 15 Care-of Test Init [RFC4866]
2012-10-24 13:44:25 +00:00
* No data in this option .
*/
/* 16 Care-of Test [RFC4866] */
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_mocot ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2014-10-25 23:44:56 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-24 13:44:25 +00:00
{
2012-10-24 14:08:47 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-24 13:44:25 +00:00
2014-10-25 23:44:56 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_mocot_co_keygen_tok , tvb , offset , optlen - 2 , ENC_NA ) ;
2012-10-24 13:44:25 +00:00
}
2012-10-25 16:15:58 +00:00
/* 17 DNS-UPDATE-TYPE [RFC5026]
2012-10-24 13:44:25 +00:00
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Option Type | Option Length |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Status | R | Reserved | MN identity ( FQDN ) . . .
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-24 13:44:25 +00:00
2012-10-28 19:54:29 +00:00
Option Type
2012-10-24 13:44:25 +00:00
DNS - UPDATE - TYPE ( 17 )
*/
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_dnsu ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2014-10-25 23:44:56 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-24 13:44:25 +00:00
{
2012-10-24 14:08:47 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-24 13:44:25 +00:00
2012-10-24 14:08:47 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_dnsu_status , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-24 13:44:25 +00:00
2012-10-24 14:08:47 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_dnsu_flag_r , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-24 13:44:25 +00:00
2014-10-25 23:44:56 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_dnsu_mn_id , tvb , offset , optlen - 2 - 2 , ENC_NA ) ;
2012-10-24 13:44:25 +00:00
}
/* 18 Experimental Mobility Option [RFC5096] */
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_em ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2014-10-25 23:44:56 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-24 13:44:25 +00:00
{
2012-10-24 14:08:47 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-24 13:44:25 +00:00
2014-10-25 23:44:56 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_em_data , tvb , offset , optlen - 2 , ENC_NA ) ;
2012-10-24 13:44:25 +00:00
}
2011-01-09 17:49:31 +00:00
/* 19 Vendor Specific Mobility Option [RFC5094] */
2012-10-25 15:57:05 +00:00
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Vendor ID |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Sub - Type | Data . . . . . . .
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-25 15:57:05 +00:00
*/
2010-07-17 07:55:28 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_vsm ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2010-07-17 07:55:28 +00:00
{
2014-02-08 14:28:53 +00:00
tvbuff_t * next_tvb ;
2012-10-28 19:54:29 +00:00
int len ;
2011-04-12 16:48:58 +00:00
guint32 vendorid ;
2012-10-25 15:57:05 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2011-04-12 16:48:58 +00:00
2012-10-25 15:57:05 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_vsm_vid , tvb ,
offset , MIP6_VSM_VID_LEN , ENC_BIG_ENDIAN ) ;
vendorid = tvb_get_ntohl ( tvb , offset ) ;
2012-10-28 19:54:29 +00:00
proto_item_append_text ( hdr_item , " : %s " , val_to_str_ext_const ( vendorid , & sminmpec_values_ext , " <unknown> " ) ) ;
offset + = 4 ;
2011-04-12 16:48:58 +00:00
2014-06-06 14:35:50 +00:00
next_tvb = tvb_new_subset_length ( tvb , offset , optlen - MIP6_VSM_SUBTYPE_OFF ) ;
2013-04-16 18:13:40 +00:00
if ( ! dissector_try_uint ( mip6_vsm_dissector_table , vendorid , next_tvb , pinfo , opt_tree ) ) {
proto_tree_add_item ( opt_tree , hf_mip6_vsm_subtype , tvb ,
offset , MIP6_VSM_SUBTYPE_LEN , ENC_BIG_ENDIAN ) ;
offset + + ;
2010-07-17 07:55:28 +00:00
2013-04-16 18:13:40 +00:00
len = optlen - MIP6_VSM_DATA_OFF ;
if ( len > 0 ) {
2015-08-10 23:28:54 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_vsm_data , tvb , offset , len , ENC_NA ) ;
2013-04-16 18:13:40 +00:00
}
}
2010-07-17 07:55:28 +00:00
}
2011-01-09 17:49:31 +00:00
/* 20 Service Selection Mobility Option [RFC5149] */
2013-03-11 19:31:59 +00:00
2010-07-17 07:55:28 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_ssm ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2010-07-17 07:55:28 +00:00
{
2012-10-28 19:54:29 +00:00
int len ;
2014-08-06 17:50:06 +00:00
guint8 * str ;
2012-10-25 15:57:05 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2010-07-17 07:55:28 +00:00
2011-04-12 16:48:58 +00:00
len = optlen - MIP6_SSM_SSM_OFF ;
2010-07-17 07:55:28 +00:00
2013-06-30 11:06:32 +00:00
/* 3GPP TS 29.275 version 10.5.0 Release 10, Table 5.1.1.1-2
2014-02-08 14:28:53 +00:00
* Set to the EPS Access Point Name to which the UE
* attaches the new PDN connection .
* The encoding the APN field follows 3 GPP TS 23.003
* [ 12 ] subclause 9.1 but excluding the trailing zero byte .
* The content of the APN field shall be the full APN with
* both the APN Network Identifier and default APN
* Operator Identifier being present as specified in 3 GPP
* TS 23.003 [ 12 ] subclauses 9.1 .1 and 9.1 .2
* NOTE 4.
* NOTE 4 : The APN field is not encoded as a dotted string as commonly used in documentation
*/
2013-03-11 19:31:59 +00:00
2012-10-28 19:54:29 +00:00
if ( len > 0 ) {
2014-08-06 17:50:06 +00:00
str = tvb_get_string_enc ( wmem_packet_scope ( ) , tvb , offset , len , ENC_UTF_8 | ENC_NA ) ;
proto_tree_add_string ( opt_tree , hf_mip6_opt_ss_identifier , tvb , offset , len , str ) ;
proto_item_append_text ( hdr_item , " : %s " , str ) ;
2012-10-25 16:15:58 +00:00
}
2010-07-17 07:55:28 +00:00
}
2012-10-24 13:44:25 +00:00
/* 21 Binding Authorization Data for FMIPv6 (BADF) [RFC5568] */
2012-10-25 12:54:37 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_mip6_opt_badff ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-25 12:54:37 +00:00
{
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_badff_spi , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
offset + = 4 ;
2014-10-18 14:45:01 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_badff_auth , tvb , offset , optlen - 4 - 2 , ENC_NA ) ;
2012-10-25 12:54:37 +00:00
}
/* 22 Home Network Prefix Option [RFC5213] */
/* see dissect_mip6_nemo_opt_mnp */
2012-10-24 13:44:25 +00:00
/* 23 Handoff Indicator Option [RFC5213] */
2012-10-25 15:57:05 +00:00
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Reserved ( R ) | HI |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-25 15:57:05 +00:00
*/
2010-07-17 07:55:28 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_hi ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2010-07-17 07:55:28 +00:00
{
2012-10-25 16:15:58 +00:00
guint8 hi ;
2012-10-28 19:54:29 +00:00
2012-10-25 15:57:05 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_pmip6_hi_reserved , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-25 16:15:58 +00:00
hi = tvb_get_guint8 ( tvb , offset ) ;
proto_tree_add_item ( opt_tree , hf_pmip6_hi_hi , tvb ,
2012-10-25 15:57:05 +00:00
offset , PMIP6_HI_HI_LEN , ENC_BIG_ENDIAN ) ;
2012-10-25 16:15:58 +00:00
proto_item_append_text ( hdr_item , " : %s " , val_to_str_const ( hi , pmip6_hi_opttype_value , " <unknown> " ) ) ;
2010-07-17 07:55:28 +00:00
}
2011-01-09 17:49:31 +00:00
/* 24 Access Technology Type Option [RFC5213] */
2012-10-25 15:57:05 +00:00
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Reserved ( R ) | ATT |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-25 15:57:05 +00:00
*/
2010-07-17 07:55:28 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_att ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2010-07-17 07:55:28 +00:00
{
2012-10-25 16:15:58 +00:00
guint8 att ;
2012-10-28 19:54:29 +00:00
2012-10-25 15:57:05 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2010-07-17 07:55:28 +00:00
2012-10-25 15:57:05 +00:00
proto_tree_add_item ( opt_tree , hf_pmip6_att_reserved , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-25 16:15:58 +00:00
att = tvb_get_guint8 ( tvb , offset ) ;
2012-10-25 15:57:05 +00:00
proto_tree_add_item ( opt_tree , hf_pmip6_att_att , tvb ,
offset , PMIP6_ATT_ATT_LEN , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
proto_item_append_text ( hdr_item , " : %s " , val_to_str_ext_const ( att , & pmip6_att_att_value_ext , " <unknown> " ) ) ;
2010-07-17 07:55:28 +00:00
}
2012-10-25 12:54:37 +00:00
/* 25 Mobile Node Link-layer Identifier Option [RFC5213] */
/*
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Reserved |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| |
+ Link - layer Identifier +
. . . . .
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
*/
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_mnlli ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-25 12:54:37 +00:00
{
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_mnlli_reserved , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
offset + = 2 ;
2014-10-18 14:55:46 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_mnlli_lli , tvb , offset , optlen - 2 - 2 , ENC_NA ) ;
2012-10-25 12:54:37 +00:00
}
2011-01-09 17:49:31 +00:00
/* 26 Link-local Address Option [RFC5213 */
2012-10-25 12:54:37 +00:00
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| |
+ +
| |
+ Link - local Address +
| |
+ +
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-25 12:54:37 +00:00
*/
2012-10-25 15:57:05 +00:00
static void dissect_pmip6_opt_lla ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2011-01-09 17:49:31 +00:00
{
2012-10-28 19:54:29 +00:00
proto_tree * field_tree ;
2011-01-09 17:49:31 +00:00
2012-10-28 19:54:29 +00:00
if ( opt_tree ) {
2014-07-01 22:31:05 +00:00
field_tree = proto_tree_add_subtree ( opt_tree , tvb , offset , optlen , * optp - > subtree_index , NULL , optp - > name ) ;
2011-01-09 17:49:31 +00:00
2011-10-16 23:38:49 +00:00
proto_tree_add_item ( field_tree , hf_pmip6_opt_lila_lla , tvb , offset + 2 , 16 , ENC_NA ) ;
2011-01-09 17:49:31 +00:00
}
}
/* 27 Timestamp */
2012-10-25 12:54:37 +00:00
/*
0 1 2 3
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
2012-10-28 19:54:29 +00:00
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| |
+ Timestamp +
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-25 12:54:37 +00:00
2012-10-28 19:54:29 +00:00
Timestamp
2012-10-25 12:54:37 +00:00
2012-10-28 19:54:29 +00:00
A 64 - bit unsigned integer field containing a timestamp . The
value indicates the number of seconds since January 1 , 1970 ,
00 : 00 UTC , by using a fixed point format . In this format , the
integer number of seconds is contained in the first 48 bits of
the field , and the remaining 16 bits indicate the number of
1 / 65536 fractions of a second .
2012-10-25 12:54:37 +00:00
*/
2007-07-06 10:07:25 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_ts ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2007-07-06 10:07:25 +00:00
{
2012-10-25 16:15:58 +00:00
const gchar * str ;
2012-10-28 19:54:29 +00:00
2012-10-25 15:57:05 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-25 16:15:58 +00:00
str = tvb_mip6_fmt_ts ( tvb , offset ) ;
proto_tree_add_string ( opt_tree , hf_pmip6_timestamp , tvb , offset , 8 , str ) ;
proto_item_append_text ( hdr_item , " : %s " , str ) ;
2005-10-25 06:00:53 +00:00
}
2011-01-09 17:49:31 +00:00
/* 28 Restart Counter [RFC5847] */
2010-07-25 18:24:43 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_rc ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2010-07-25 18:24:43 +00:00
{
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( opt_tree , hf_pmip6_rc , tvb ,
2011-10-06 03:35:44 +00:00
offset + PMIP6_RC_RC_OFF , PMIP6_RC_RC_LEN , ENC_BIG_ENDIAN ) ;
2010-07-25 18:24:43 +00:00
}
2011-01-09 17:49:31 +00:00
/* 29 IPv4 Home Address [RFC5555] */
2010-07-17 07:55:28 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_ipv4ha ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2010-07-17 07:55:28 +00:00
{
2012-10-28 19:54:29 +00:00
proto_tree * field_tree ;
int len , p ;
2010-07-17 07:55:28 +00:00
2014-07-01 22:31:05 +00:00
field_tree = proto_tree_add_subtree ( opt_tree , tvb , offset , optlen , * optp - > subtree_index , NULL , optp - > name ) ;
2010-07-17 07:55:28 +00:00
2011-04-12 16:48:58 +00:00
p = offset + MIP6_IPV4HA_PREFIXL_OFF ;
len = MIP6_IPV4HA_PREFIXL_LEN ;
2010-07-17 07:55:28 +00:00
2011-10-06 03:35:44 +00:00
proto_tree_add_item ( field_tree , hf_mip6_ipv4ha_preflen , tvb , p , len , ENC_BIG_ENDIAN ) ;
2011-10-10 00:39:31 +00:00
proto_tree_add_item ( field_tree , hf_mip6_ipv4ha_p_flag , tvb , p , len + 1 , ENC_BIG_ENDIAN ) ;
2010-07-17 07:55:28 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_mip6_ipv4ha_ha , tvb ,
2011-10-10 00:39:31 +00:00
offset + MIP6_IPV4HA_HA_OFF , MIP6_IPV4HA_HA_LEN , ENC_BIG_ENDIAN ) ;
2010-07-17 07:55:28 +00:00
}
2011-01-09 17:49:31 +00:00
/* 30 IPv4 Address Acknowledgement [RFC5555] */
2010-07-17 07:55:28 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_ipv4aa ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2010-07-17 07:55:28 +00:00
{
2012-10-28 19:54:29 +00:00
proto_tree * field_tree ;
2010-07-17 07:55:28 +00:00
2014-07-01 22:31:05 +00:00
field_tree = proto_tree_add_subtree ( opt_tree , tvb , offset , optlen , * optp - > subtree_index , NULL , optp - > name ) ;
2010-07-17 07:55:28 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_mip6_ipv4aa_status , tvb ,
2011-10-06 03:35:44 +00:00
offset + MIP6_IPV4AA_STATUS_OFF , MIP6_IPV4AA_STATUS_LEN , ENC_BIG_ENDIAN ) ;
2010-07-17 07:55:28 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_mip6_ipv4ha_preflen , tvb ,
2011-10-06 03:35:44 +00:00
offset + MIP6_IPV4AA_PREFIXL_OFF , MIP6_IPV4AA_PREFIXL_LEN , ENC_BIG_ENDIAN ) ;
2010-07-17 07:55:28 +00:00
2011-04-12 16:48:58 +00:00
proto_tree_add_item ( field_tree , hf_mip6_ipv4ha_ha , tvb ,
2011-10-10 00:39:31 +00:00
offset + MIP6_IPV4AA_HA_OFF , MIP6_IPV4AA_HA_LEN , ENC_BIG_ENDIAN ) ;
2010-07-17 07:55:28 +00:00
}
2012-10-25 12:54:37 +00:00
2012-10-24 13:44:25 +00:00
/* 31 NAT Detection [RFC5555] */
2012-10-25 12:54:37 +00:00
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | F | Reserved |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Refresh time |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-25 12:54:37 +00:00
*/
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_natd ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-25 12:54:37 +00:00
{
proto_item * item ;
2012-10-28 19:54:29 +00:00
guint32 refresh_time ;
2012-10-25 12:54:37 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_natd_f_flag , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_natd_reserved , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
offset + = 2 ;
2012-10-25 16:15:58 +00:00
refresh_time = tvb_get_ntohl ( tvb , offset ) ;
2012-10-25 12:54:37 +00:00
item = proto_tree_add_item ( opt_tree , hf_mip6_opt_natd_refresh_t , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
2012-10-25 16:15:58 +00:00
proto_item_append_text ( item , " seconds " ) ;
2012-10-28 19:54:29 +00:00
if ( refresh_time = = 0 ) {
2012-10-25 12:54:37 +00:00
proto_item_append_text ( item , " (Ignore) " ) ;
}
2012-10-28 19:54:29 +00:00
if ( refresh_time = = 0xffffffff ) {
2012-10-25 12:54:37 +00:00
proto_item_append_text ( item , " (keepalives are not needed, no NAT detected) " ) ;
}
}
2012-10-24 13:44:25 +00:00
/* 32 IPv4 Care-of Address [RFC5555] */
2012-10-25 12:54:37 +00:00
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Reserved |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| IPv4 Care - of address |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-25 12:54:37 +00:00
*/
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_ipv4coa ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-25 12:54:37 +00:00
{
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_ipv4coa_reserved , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
offset + = 2 ;
2012-10-25 12:54:37 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_ipv4coa_addr , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
}
2010-07-17 07:55:28 +00:00
2011-01-09 17:49:31 +00:00
/* 33 GRE Key Option [RFC5845] */
2012-10-25 15:57:05 +00:00
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Reserved |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| GRE Key Identifier |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-25 15:57:05 +00:00
*/
2010-07-17 07:55:28 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_grek ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2010-07-17 07:55:28 +00:00
{
2012-10-25 15:57:05 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2013-03-11 19:31:59 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_ipv4dra_reserved , tvb ,
offset , 2 , ENC_BIG_ENDIAN ) ;
2012-10-25 15:57:05 +00:00
2015-09-18 12:08:38 +00:00
if ( optlen = = 8 ) {
offset + = 2 ;
proto_tree_add_item ( opt_tree , hf_pmip6_gre_key , tvb ,
offset , PMIP6_GREK_ID_LEN , ENC_BIG_ENDIAN ) ;
proto_item_append_text ( hdr_item , " : %u " , tvb_get_ntohl ( tvb , offset ) ) ;
}
2012-10-25 15:57:05 +00:00
2010-07-17 07:55:28 +00:00
}
2012-10-25 16:15:58 +00:00
/* 34 Mobility Header IPv6 Address/Prefix [RFC5568]
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Option - Code | Prefix Length |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| |
+ +
| |
+ IPv6 Address / Prefix +
| |
+ +
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-24 13:44:25 +00:00
*/
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_mhipv6ap ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-24 13:44:25 +00:00
{
2012-10-24 14:08:47 +00:00
guint8 prefix_l ;
2014-10-18 14:31:01 +00:00
proto_item * ti ;
2012-10-28 19:54:29 +00:00
2012-10-24 13:44:25 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-25 12:54:37 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_mhipv6ap_opt_code , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-24 13:44:25 +00:00
offset + + ;
2014-10-18 14:31:01 +00:00
2012-10-24 14:08:47 +00:00
prefix_l = tvb_get_guint8 ( tvb , offset ) ;
2012-10-25 12:54:37 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_mhipv6ap_prefix_l , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-24 13:44:25 +00:00
offset + + ;
2014-10-18 14:31:01 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_mhipv6ap_ipv6_address , tvb , offset , 16 , ENC_NA ) ;
ti = proto_tree_add_string ( opt_tree , hf_mip6_opt_mhipv6ap_ipv6_address_prefix , tvb , offset - 1 , 16 + 1 , tvb_ip6_to_str ( tvb , offset ) ) ;
proto_item_append_text ( ti , " /%u " , prefix_l ) ;
PROTO_ITEM_SET_GENERATED ( ti ) ;
2012-10-24 13:44:25 +00:00
}
/* 35 Binding Identifier [RFC5648] */
2012-10-25 12:54:37 +00:00
/*
2012-10-28 19:54:29 +00:00
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type = 35 | Length |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Binding ID ( BID ) | Status | H | Reserved |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
+ +
: IPv4 or IPv6 care - of address ( CoA ) :
+ +
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
2012-10-25 12:54:37 +00:00
*/
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_bi ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-26 13:29:02 +00:00
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-25 12:54:37 +00:00
{
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_bi_bid , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
offset + = 2 ;
2012-10-25 12:54:37 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_bi_status , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-26 13:29:02 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_bi_h_flag , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
offset + + ;
if ( optlen = = 8 ) {
/* IPv4 addr */
proto_tree_add_item ( opt_tree , hf_mip6_bi_coa_ipv4 , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
} else if ( optlen = = 20 ) {
/* Ipv6 Addr */
2014-02-08 14:28:53 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_bi_coa_ipv6 , tvb , offset , 16 , ENC_NA ) ;
2012-10-28 19:54:29 +00:00
}
2012-10-25 12:54:37 +00:00
}
2011-01-09 17:49:31 +00:00
/* 36 IPv4 Home Address Request [RFC5844] */
2012-10-25 15:57:05 +00:00
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Prefix - len | Reserved |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| IPv4 home address |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-25 15:57:05 +00:00
*/
2010-07-25 18:24:43 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_ipv4hareq ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2010-07-25 18:24:43 +00:00
{
2012-10-25 16:15:58 +00:00
proto_item * item ;
2012-10-28 19:54:29 +00:00
guint32 dword ;
2012-10-25 15:57:05 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2010-07-25 18:24:43 +00:00
2012-10-25 15:57:05 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_ipv4ha_preflen , tvb ,
offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-25 16:15:58 +00:00
offset + + ;
2010-07-25 18:24:43 +00:00
2012-10-25 16:15:58 +00:00
/* Reserved */
offset + + ;
2010-07-25 18:24:43 +00:00
2012-10-25 16:15:58 +00:00
dword = tvb_get_ntohl ( tvb , offset ) ;
2012-10-25 15:57:05 +00:00
item = proto_tree_add_item ( opt_tree , hf_mip6_ipv4ha_ha , tvb ,
offset , MIP6_IPV4HAREQ_HA_LEN , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
if ( dword = = 0 ) {
2012-10-25 16:15:58 +00:00
proto_item_append_text ( item , " - Request that the local mobility anchor perform the address allocation " ) ;
}
2010-07-25 18:24:43 +00:00
2012-10-25 16:15:58 +00:00
proto_item_append_text ( hdr_item , " : %s " , tvb_ip_to_str ( tvb , offset ) ) ;
2010-07-25 18:24:43 +00:00
}
2011-01-09 17:49:31 +00:00
/* 37 IPv4 Home Address Reply [RFC5844] */
2012-10-25 15:57:05 +00:00
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Status | Pref - len | Res |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| IPv4 home address |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-25 15:57:05 +00:00
*/
2010-07-25 18:24:43 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_ipv4harep ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2010-07-25 18:24:43 +00:00
{
2012-10-25 16:15:58 +00:00
guint8 status ;
2010-07-25 18:24:43 +00:00
2012-10-25 15:57:05 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2010-07-25 18:24:43 +00:00
2012-10-25 16:15:58 +00:00
status = tvb_get_guint8 ( tvb , offset ) ;
2012-10-25 15:57:05 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_ipv4aa_status , tvb ,
offset , MIP6_IPV4HAREP_STATUS_LEN , ENC_BIG_ENDIAN ) ;
2012-10-25 16:15:58 +00:00
proto_item_append_text ( hdr_item , " : %s " , val_to_str_const ( status , pmip6_ipv4aa_status_values , " <unknown> " ) ) ;
offset + + ;
2010-07-25 18:24:43 +00:00
2012-10-25 15:57:05 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_ipv4ha_preflen , tvb ,
offset , MIP6_IPV4HAREP_PREFIXL_LEN , ENC_BIG_ENDIAN ) ;
2012-10-25 16:15:58 +00:00
offset + + ;
2010-07-25 18:24:43 +00:00
2012-10-25 15:57:05 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_ipv4ha_ha , tvb ,
offset , MIP6_IPV4HAREP_HA_LEN , ENC_BIG_ENDIAN ) ;
2012-10-25 16:15:58 +00:00
proto_item_append_text ( hdr_item , " : %s " , tvb_ip_to_str ( tvb , offset ) ) ;
2010-07-25 18:24:43 +00:00
}
2011-01-09 17:49:31 +00:00
/* 38 IPv4 Default-Router Address [RFC5844] */
2012-10-25 15:57:05 +00:00
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Reserved ( R ) |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| IPv4 Default - Router Address |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-25 15:57:05 +00:00
*/
2010-07-25 18:24:43 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_ipv4dra ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2010-07-25 18:24:43 +00:00
{
2012-10-25 15:57:05 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_ipv4dra_reserved , tvb ,
offset , 2 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
offset + = 2 ;
2010-07-25 18:24:43 +00:00
2012-10-25 15:57:05 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_ipv4dra_dra , tvb ,
offset , MIP6_IPV4DRA_DRA_LEN , ENC_BIG_ENDIAN ) ;
2012-10-25 16:15:58 +00:00
proto_item_append_text ( hdr_item , " : %s " , tvb_ip_to_str ( tvb , offset ) ) ;
2010-07-25 18:24:43 +00:00
}
2012-10-26 13:29:02 +00:00
/* 39 IPv4 DHCP Support Mode [RFC5844] */
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Reserved ( R ) | S |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-26 13:29:02 +00:00
*/
static void
dissect_pmip6_opt_ipv4dsm ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
{
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_ipv4dsm_reserved , tvb ,
offset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( opt_tree , hf_mip6_ipv4dsm_s_flag , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
}
2013-07-22 13:00:41 +00:00
2012-10-26 13:29:02 +00:00
/* 40 Context Request Option [RFC5949] */
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - +
| Option - Type | Option - Length | Reserved |
+ - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Req - type - 1 | Req - length - 1 | Req - type - 2 | Req - length - 2 |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Req - type - 3 | Req - length - 3 | Req - option - 3 |
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| . . . |
2012-10-26 13:29:02 +00:00
*/
static void
dissect_pmip6_opt_cr ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
guint optlen , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
{
2014-11-08 18:26:12 +00:00
gint offset_start ;
2012-10-28 19:54:29 +00:00
guint8 req_type , req_length ;
2012-10-26 13:29:02 +00:00
guint32 vendorid ;
2014-11-08 18:26:12 +00:00
/* offset points to tag(opt), optlen includes tag and length field */
offset_start = offset ;
/* skip the tag */
2012-10-26 13:29:02 +00:00
offset + + ;
2014-11-08 18:26:12 +00:00
2012-10-26 13:29:02 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_cr_reserved , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
offset + = 2 ;
2012-10-26 13:29:02 +00:00
2014-11-08 18:26:12 +00:00
while ( ( guint ) ( offset - offset_start ) < optlen ) {
2012-10-26 13:29:02 +00:00
req_type = tvb_get_guint8 ( tvb , offset ) ;
proto_tree_add_item ( opt_tree , hf_mip6_cr_req_type , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2014-11-08 18:26:12 +00:00
2012-10-26 13:29:02 +00:00
req_length = tvb_get_guint8 ( tvb , offset ) ;
proto_tree_add_item ( opt_tree , hf_mip6_cr_req_length , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2014-11-08 18:26:12 +00:00
if ( req_length = = 0 )
continue ;
if ( req_type = = MIP6_VSM ) {
/* vendor specific option */
vendorid = tvb_get_ntohl ( tvb , offset ) ;
proto_tree_add_item ( opt_tree , hf_mip6_vsm_vid , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
if ( vendorid = = VENDOR_THE3GPP ) {
proto_tree_add_item ( opt_tree , hf_mip6_vsm_subtype_3gpp , tvb , offset + 4 , 1 , ENC_BIG_ENDIAN ) ;
2012-10-26 13:29:02 +00:00
}
2014-11-08 18:26:12 +00:00
else {
proto_tree_add_item ( opt_tree , hf_mip6_vsm_subtype , tvb , offset + 4 , 1 , ENC_BIG_ENDIAN ) ;
}
}
else {
2015-08-10 23:28:54 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_vsm_req_data , tvb , offset , req_length , ENC_NA ) ;
2012-10-26 13:29:02 +00:00
}
2014-11-08 18:26:12 +00:00
offset + = req_length ;
2012-10-26 13:29:02 +00:00
}
}
/* 41 Local Mobility Anchor Address Option [RFC5949] */
/*
2012-10-28 19:54:29 +00:00
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Option - Type | Option - Length | Option - Code | Reserved |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Local Mobility Anchor Address . . . |
2012-10-26 13:29:02 +00:00
*/
static void
dissect_pmip6_opt_lmaa ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
{
2012-10-28 19:54:29 +00:00
guint8 opt_code ;
2012-10-26 13:29:02 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
2012-10-28 19:54:29 +00:00
opt_code = tvb_get_guint8 ( tvb , offset ) ;
2014-10-25 23:44:56 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_lmaa_opt_code , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
offset + = 1 ;
2014-10-25 23:44:56 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_lmaa_reserved , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
offset + = 1 ;
if ( opt_code = = 1 ) {
/* Ipv6 Addr */
2014-02-08 14:28:53 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_lmaa_ipv6 , tvb , offset , 16 , ENC_NA ) ;
2012-10-28 19:54:29 +00:00
proto_item_append_text ( hdr_item , " : %s " , tvb_ip6_to_str ( tvb , offset ) ) ;
2015-02-14 12:03:45 +00:00
} else if ( opt_code = = 2 ) {
/* IPv4 addr */
proto_tree_add_item ( opt_tree , hf_mip6_lmaa_ipv4 , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
proto_item_append_text ( hdr_item , " : %s " , tvb_ip_to_str ( tvb , offset ) ) ;
2012-10-28 19:54:29 +00:00
}
2012-10-26 13:29:02 +00:00
}
2014-05-05 16:12:32 +00:00
static void
dissect_pmip6_opt_recap ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
{
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_recap_reserved , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
/*offset +=2;*/
}
static void
dissect_pmip6_opt_redir ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
{
guint16 flag ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_redir_k , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_redir_n , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_redir_reserved , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
flag = tvb_get_ntohs ( tvb , offset ) ;
offset + = 2 ;
if ( flag & MIP6_REDIR_FLAG_K ) {
proto_tree_add_item ( opt_tree , hf_mip6_opt_redir_addr_r2LMA_ipv6 , tvb , offset , 16 , ENC_NA ) ;
offset + = 16 ;
}
if ( flag & MIP6_REDIR_FLAG_N ) {
proto_tree_add_item ( opt_tree , hf_mip6_opt_redir_addr_r2LMA_ipv4 , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
/*offset +=4;*/
}
}
static void
dissect_pmip6_opt_load_inf ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
{
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_load_inf_priority , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_load_inf_sessions_in_use , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_load_inf_maximum_sessions , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_load_inf_used_capacity , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_load_inf_maximum_capacity , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
/*offset +=4;*/
}
static void
dissect_pmip6_opt_alt_ip4 ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
{
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_alt_ip4 , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
/*offset +=4;*/
}
2012-10-24 13:44:25 +00:00
/* RFC 6602
2012-10-28 19:54:29 +00:00
The type value for this option is 50.
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Sub - type | Reserved |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Mobile Node Group Identifier |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2012-10-24 13:44:25 +00:00
*/
2012-10-24 06:07:34 +00:00
static void
2012-10-25 15:57:05 +00:00
dissect_pmip6_opt_mng ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
2012-10-25 16:15:58 +00:00
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
2012-10-24 06:07:34 +00:00
{
2012-10-24 13:44:25 +00:00
proto_item * item ;
2012-10-28 19:54:29 +00:00
guint32 mng_id ;
2012-10-24 14:08:47 +00:00
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_mng_sub_type , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_mng_reserved , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
mng_id = tvb_get_ntohl ( tvb , offset ) ;
item = proto_tree_add_item ( opt_tree , hf_mip6_opt_mng_mng_id , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
2012-10-28 19:54:29 +00:00
if ( mng_id = = 1 ) {
2012-10-24 14:08:47 +00:00
proto_item_append_text ( item , " - ALL-SESSIONS " ) ;
}
2012-10-24 06:07:34 +00:00
}
2010-07-25 18:24:43 +00:00
2014-09-23 15:02:13 +00:00
/*
11.1 . MAG IPv6 Address
The MAG IPv6 address mobility option contains the IPv6 address of a
MAG involved in localized routing . The MAG IPv6 address option has
an alignment requirement of 8 n + 4.
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | Reserved | Address Length |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| |
+ +
| |
+ MAG IPv6 Address +
| |
+ +
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
*/
static void
dissect_pmip6_opt_mag_ipv6 ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
{
/* offset points to tag(opt) */
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2015-03-17 12:55:52 +00:00
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_mag_ipv6_reserved , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_mag_ipv6_address_length , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_mag_ipv6_address , tvb , offset , 16 , ENC_NA ) ;
2014-09-23 15:02:13 +00:00
}
/*
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
. . . ANI Sub - option ( s ) . . . ~
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
3.1 . Format of the Access Network Identifier Sub - Option
The Access Network Identifier sub - options are used for carrying
information elements related to the access network to which the
mobile node is attached . These sub - options can be included in the
Access Network Identifier option defined in Section 3. The format of
this sub - option is as follows :
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| ANI Type | ANI Length | Option Data ~
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
ANI Type : 8 - bit unsigned integer indicating the type of the Access
Network Identifier sub - option . This specification defines the
following types :
0 - Reserved
1 - Network - Identifier sub - option
2 - Geo - Location sub - option
3 - Operator - Identifier sub - option
*/
static const value_string mmip6_opt_acc_net_id_sub_opt_vals [ ] = {
{ 0 , " Reserved " } ,
{ 1 , " Network-Identifier " } ,
{ 2 , " Geo-Location " } ,
{ 3 , " Operator-Identifier " } ,
{ 0 , NULL }
} ;
static const true_false_string mip6_opt_acc_net_id_sub_opt_e_bit_value = {
" UTF-8 " ,
" Encoding is undefined "
} ;
2014-11-19 18:18:39 +00:00
static const value_string mip6_opt_acc_net_id_sub_opt_op_id_type [ ] = {
{ 0 , " Reserved " } ,
{ 1 , " Private Enterprise Number (PEN) " } ,
{ 2 , " Realm of the operator " } ,
{ 0 , NULL }
} ;
2015-02-27 14:46:23 +00:00
static float
degrees_convert_fixed_to_float ( guint value )
2014-12-20 14:05:07 +00:00
{
if ( ! value )
2014-12-12 06:20:21 +00:00
return 0 ;
2014-11-24 17:11:30 +00:00
2015-02-28 20:35:16 +00:00
/*
* RFC 6757 section 3.1 .2 :
*
* " A 24-bit {latitude,longitude} degree value encoded as a two's
* complement , fixed point number with 9 whole bits . "
*
* " 9 whole bits " presumably includes the sign bit ; 1 sign bit
* plus 8 more bits supports values between - 256 and 255 , which
* is sufficient to cover - 180 to 180. 9 bits plus a sign bit
* would waste a bit .
*
* So we have 1 sign bit plus 8 bits of integral value , followed
* by a binary point , followed by 15 bits of fractional value .
* That means that to get the value , we treat the fixed - point
* number as an integer and divide it by 2 ^ 15 = 32768.
*/
2014-11-24 17:11:30 +00:00
2015-02-28 20:35:16 +00:00
/* Sign-extend to 32 bits */
if ( value & 0x800000 ) {
value | = 0xFF000000 ;
2014-12-12 06:20:21 +00:00
}
2015-02-19 14:46:38 +00:00
2015-02-28 20:35:16 +00:00
/* Cast to a signed value, and divide by 32768; do a floating-point divide */
return ( ( float ) ( gint ) value ) / 32768.0f ;
2014-11-24 17:11:30 +00:00
}
2015-02-27 14:46:23 +00:00
static void
degrees_base_custom ( gchar * str , guint degrees )
2014-12-12 06:20:21 +00:00
{
2014-12-20 14:05:07 +00:00
g_snprintf ( str , ITEM_LABEL_LENGTH , " %f " , degrees_convert_fixed_to_float ( degrees ) ) ;
2014-12-12 06:20:21 +00:00
}
2014-11-24 17:11:30 +00:00
2014-09-23 15:02:13 +00:00
static void
dissect_pmip6_opt_acc_net_id ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
guint optlen _U_ , packet_info * pinfo _U_ , proto_tree * opt_tree , proto_item * hdr_item _U_ )
{
2014-11-19 18:18:39 +00:00
proto_item * ti ;
proto_tree * subopt_tree ;
2014-09-23 15:02:13 +00:00
gint16 length , sub_opt_len ;
guint8 sub_opt , e_bit , net_name_len , ap_name_len ;
2014-11-19 18:18:39 +00:00
gint offset_end ;
2014-09-23 15:02:13 +00:00
/* offset points to tag(opt) */
offset + + ;
2014-11-19 18:18:39 +00:00
2014-09-23 15:02:13 +00:00
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2014-11-19 18:18:39 +00:00
length = tvb_get_guint8 ( tvb , offset ) ;
offset_end = offset + length ;
2014-09-23 15:02:13 +00:00
offset + + ;
2014-11-19 18:18:39 +00:00
while ( offset < offset_end ) {
ti = proto_tree_add_item ( opt_tree , hf_mip6_opt_acc_net_id_sub , tvb , offset , 2 , ENC_NA ) ;
subopt_tree = proto_item_add_subtree ( ti , ett_mip6_sub_opt_acc_net_id ) ;
proto_tree_add_item ( subopt_tree , hf_mip6_opt_acc_net_id_sub_opt , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2014-09-23 15:02:13 +00:00
sub_opt = tvb_get_guint8 ( tvb , offset ) ;
offset + + ;
2014-11-19 18:18:39 +00:00
proto_tree_add_item ( subopt_tree , hf_mip6_opt_acc_net_id_sub_opt_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2014-09-23 15:02:13 +00:00
sub_opt_len = tvb_get_guint8 ( tvb , offset ) ;
offset + + ;
2014-11-19 18:18:39 +00:00
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 ) ;
proto_item_set_len ( ti , sub_opt_len + 2 ) ;
2014-09-23 15:02:13 +00:00
switch ( sub_opt ) {
case 1 : /* Network-Identifier */
/*
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| ANI Type = 1 | ANI Length | E | Reserved | Net - Name Len |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Network Name ( e . g . , SSID or PLMNID ) ~
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| AP - Name Len | Access - Point Name ~
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
*/
e_bit = tvb_get_guint8 ( tvb , offset ) ;
2014-11-19 18:18:39 +00:00
proto_tree_add_item ( subopt_tree , hf_mip6_opt_acc_net_id_sub_opt_e_bit , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2014-09-23 15:02:13 +00:00
offset + + ;
2014-11-19 18:18:39 +00:00
2014-09-23 15:02:13 +00:00
net_name_len = tvb_get_guint8 ( tvb , offset ) ;
2014-11-19 18:18:39 +00:00
proto_tree_add_item ( subopt_tree , hf_mip6_opt_acc_net_id_sub_opt_net_name_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2014-09-23 15:02:13 +00:00
offset + + ;
if ( e_bit = = 0x80 ) {
2014-11-19 18:18:39 +00:00
proto_tree_add_item ( subopt_tree , hf_mip6_opt_acc_net_id_sub_opt_net_name , tvb , offset , net_name_len , ENC_BIG_ENDIAN | ENC_UTF_8 ) ;
proto_item_append_text ( ti , " Network Name: %s " , tvb_get_string_enc ( wmem_packet_scope ( ) , tvb , offset , net_name_len , ENC_UTF_8 ) ) ;
2014-09-23 15:02:13 +00:00
} else {
2014-11-19 18:18:39 +00:00
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 ) ;
2014-09-23 15:02:13 +00:00
} ;
offset = offset + net_name_len ;
ap_name_len = tvb_get_guint8 ( tvb , offset ) ;
2014-11-19 18:18:39 +00:00
proto_tree_add_item ( subopt_tree , hf_mip6_opt_acc_net_id_sub_opt_ap_name_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2014-09-23 15:02:13 +00:00
offset + + ;
2014-11-19 18:18:39 +00:00
proto_tree_add_item ( subopt_tree , hf_mip6_opt_acc_net_id_sub_opt_ap_name , tvb , offset , ap_name_len , ENC_BIG_ENDIAN | ENC_UTF_8 ) ;
proto_item_append_text ( ti , " AP Name: %s " , tvb_get_string_enc ( wmem_packet_scope ( ) , tvb , offset , ap_name_len , ENC_UTF_8 ) ) ;
2014-09-23 15:02:13 +00:00
offset = offset + ap_name_len ;
2014-11-19 18:18:39 +00:00
break ;
case 2 : /* Geo-Location */
/*
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| ANI Type = 2 | ANI Length = 6 | Latitude Degrees
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Longitude Degrees |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
*/
proto_tree_add_item ( subopt_tree , hf_mip6_opt_acc_net_id_sub_opt_geo_latitude_degrees , tvb , offset , 3 , ENC_BIG_ENDIAN ) ;
offset + = 3 ;
proto_tree_add_item ( subopt_tree , hf_mip6_opt_acc_net_id_sub_opt_geo_longitude_degrees , tvb , offset , 3 , ENC_BIG_ENDIAN ) ;
offset + = 3 ;
break ;
case 3 : /* Operator-Identifier */
/*
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| ANI Type = 3 | ANI Length | Op - ID Type |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
Operator - Identifier ~
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
*/
proto_tree_add_item ( subopt_tree , hf_mip6_opt_acc_net_id_sub_opt_op_id_type , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + = 1 ;
2014-09-23 15:02:13 +00:00
2014-11-24 17:11:30 +00:00
proto_tree_add_item ( subopt_tree , hf_mip6_opt_acc_net_id_sub_opt_op_id , tvb , offset , sub_opt_len - 1 , ENC_NA ) ;
2014-11-19 18:18:39 +00:00
offset = offset + sub_opt_len - 1 ;
break ;
2014-09-23 15:02:13 +00:00
default :
2014-11-19 18:18:39 +00:00
proto_tree_add_expert ( subopt_tree , pinfo , & ei_mip6_ani_type_not_dissected , tvb , offset , sub_opt_len ) ;
2014-09-23 15:02:13 +00:00
offset = offset + sub_opt_len ;
break ;
}
}
}
2015-09-18 12:08:38 +00:00
/* 55 Delegated Mobile Network Prefix Option [RFC7148]
0 1 2 3
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Type | Length | V | Reserved | Prefix Length |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| |
+ +
| |
. .
+ IPv4 or IPv6 Delegated Mobile Network Prefix +
| ( DMNP ) |
+ +
| |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
*/
static void
dissect_mip6_opt_dmnp ( const mip6_opt * optp _U_ , tvbuff_t * tvb , int offset ,
guint optlen , packet_info * pinfo _U_ ,
proto_tree * opt_tree , proto_item * hdr_item _U_ )
{
int len = tvb_reported_length ( tvb ) ;
guint8 prefix_len ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_len , tvb ,
offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_dmnp_v_flag , tvb ,
offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_dmnp_reserved , tvb ,
offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
proto_tree_add_item ( opt_tree , hf_mip6_opt_dmnp_prefix_len , tvb ,
offset , 1 , ENC_BIG_ENDIAN ) ;
prefix_len = tvb_get_guint8 ( tvb , offset ) ;
offset + + ;
switch ( optlen ) {
case 8 :
/* IPv4 Prefix */
proto_tree_add_item ( opt_tree , hf_mip6_opt_dmnp_dmnp_ipv4 , tvb ,
offset , 4 , ENC_BIG_ENDIAN ) ;
proto_item_append_text ( hdr_item , " : %s/%u " ,
tvb_ip_to_str ( tvb , offset ) , prefix_len ) ;
break ;
case 20 :
/* IPv6 Prefix */
proto_tree_add_item ( opt_tree , hf_mip6_opt_dmnp_dmnp_ipv6 , tvb ,
offset , 16 , ENC_NA ) ;
proto_item_append_text ( hdr_item , " : %s/%u " ,
tvb_ip6_to_str ( tvb , offset ) , prefix_len ) ;
break ;
default :
proto_tree_add_expert ( opt_tree , pinfo , & ei_mip6_opt_len_invalid ,
tvb , offset , len ) ;
break ;
}
}
2012-10-25 15:57:05 +00:00
static const mip6_opt mip6_opts [ ] = {
2007-07-06 10:07:25 +00:00
{
2011-04-12 16:48:58 +00:00
MIP6_PAD1 , /* 0 Pad1 [RFC3775] */
" Pad1 " ,
2012-10-28 18:04:45 +00:00
& ett_mip6_opt_pad1 ,
2012-06-11 18:47:42 +00:00
OPT_LEN_NO_LENGTH ,
2011-04-12 16:48:58 +00:00
0 ,
NULL ,
2007-07-06 10:07:25 +00:00
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_PADN , /* 1 PadN [RFC3775] */
" PadN " ,
& ett_mip6_opt_padn ,
2012-06-11 18:47:42 +00:00
OPT_LEN_VARIABLE_LENGTH ,
2011-04-12 16:48:58 +00:00
0 ,
dissect_mip6_opt_padn
2007-07-06 10:07:25 +00:00
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_BRA , /* 2 Binding Refresh Advice */
" Binding Refresh Advice " ,
& ett_mip6_opt_bra ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_BRA_LEN ,
dissect_mip6_opt_bra
2007-07-06 10:07:25 +00:00
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_ACOA , /*3 Alternate Care-of Address */
" Alternate Care-of Address " ,
& ett_mip6_opt_acoa ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_ACOA_LEN ,
dissect_mip6_opt_acoa
2007-07-06 10:07:25 +00:00
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_NI , /* 4 Nonce Indices */
" Nonce Indices " ,
& ett_mip6_opt_ni ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_NI_LEN ,
dissect_mip6_opt_ni
2007-07-06 10:07:25 +00:00
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_AUTD , /* 5 Authorization Data */
" Authorization Data " ,
& ett_mip6_opt_bad ,
2012-06-11 18:47:42 +00:00
OPT_LEN_VARIABLE_LENGTH ,
2011-04-12 16:48:58 +00:00
0 ,
dissect_mip6_opt_bad
2007-07-06 10:07:25 +00:00
} ,
2011-01-09 17:49:31 +00:00
{
2011-04-12 16:48:58 +00:00
MIP6_MNP , /* 6 Mobile Network Prefix Option */
" Mobile Network Prefix " ,
& ett_mip6_nemo_opt_mnp ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_NEMO_MNP_LEN ,
dissect_mip6_nemo_opt_mnp
2011-01-09 17:49:31 +00:00
} ,
2007-07-06 10:07:25 +00:00
{
2011-04-12 16:48:58 +00:00
MIP6_MHLLA , /* 7 Mobility Header Link-Layer Address option [RFC5568] */
" Mobility Header Link-Layer Address option " ,
& ett_fmip6_opt_lla ,
2012-06-11 18:47:42 +00:00
OPT_LEN_VARIABLE_LENGTH ,
2011-04-12 16:48:58 +00:00
FMIP6_LLA_MINLEN ,
dissect_fmip6_opt_lla
2007-07-06 10:07:25 +00:00
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_MNID , /* 8 MN-ID-OPTION-TYPE */
" Mobile Node Identifier " ,
& ett_mip6_opt_mnid ,
2012-06-11 18:47:42 +00:00
OPT_LEN_VARIABLE_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_MNID_MINLEN ,
dissect_mip6_opt_mnid
2007-07-06 10:07:25 +00:00
} ,
2012-10-24 13:44:25 +00:00
{
MIP6_AUTH , /* 9 AUTH-OPTION-TYPE */
" AUTH-OPTION-TYPE " ,
& ett_mip6_opt_auth ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_AUTH_MINLEN ,
dissect_mip6_opt_auth
} ,
{
MIP6_MESGID , /* 10 MESG-ID-OPTION-TYPE [RFC4285] */
" MESG-ID-OPTION-TYPE " ,
& ett_mip6_opt_mesgid ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_AUTH_MINLEN ,
2014-10-25 23:44:56 +00:00
dissect_mip6_opt_mseg_id
2012-10-24 13:44:25 +00:00
} ,
{
MIP6_CGAPR , /* 11 CGA Parameters Request [RFC4866] */
" CGA Parameters Request " ,
& ett_mip6_opt_cgapr ,
OPT_LEN_FIXED_LENGTH ,
MIP6_CGAPR_MINLEN ,
NULL
} ,
{
MIP6_CGAR , /* 12 CGA Parameters [RFC4866] */
" CGA Parameters " ,
& ett_mip6_opt_cgar ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_CGAR_MINLEN ,
dissect_mip6_opt_cgar
} ,
{
MIP6_SIGN , /* 13 Signature [RFC4866] */
" Signature " ,
& ett_mip6_opt_sign ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_SIGN_MINLEN ,
dissect_mip6_opt_sign
} ,
{
MIP6_PHKT , /* 14 Permanent Home Keygen Token [RFC4866] */
" Permanent Home Keygen Token " ,
& ett_mip6_opt_phkt ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_PHKT_MINLEN ,
dissect_mip6_opt_phkt
} ,
{
MIP6_MOCOTI , /* 15 Care-of Test Init [RFC4866] */
" Care-of Test Init " ,
& ett_mip6_opt_mocoti ,
OPT_LEN_FIXED_LENGTH ,
MIP6_MOCOTI_MINLEN ,
NULL
} ,
{
MIP6_MOCOT , /* 16 Care-of Test [RFC4866] */
" Care-of Test " ,
& ett_mip6_opt_mocot ,
OPT_LEN_FIXED_LENGTH ,
MIP6_MOCOT_MINLEN ,
dissect_mip6_opt_mocot
} ,
{
MIP6_DNSU , /* 17 DNS-UPDATE-TYPE [RFC5026] */
" DNS-UPDATE-TYPE " ,
& ett_mip6_opt_dnsu ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_DNSU_MINLEN ,
dissect_mip6_opt_dnsu
} ,
{
MIP6_EM , /* 18 Experimental Mobility Option [RFC5096] */
2012-10-26 13:29:02 +00:00
" Experimental " ,
2012-10-24 13:44:25 +00:00
& ett_mip6_opt_em ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_EM_MINLEN ,
dissect_mip6_opt_em
} ,
2010-07-17 07:55:28 +00:00
{
2011-04-12 16:48:58 +00:00
MIP6_VSM , /* 19 Vendor Specific Mobility Option [RFC5094] */
2012-10-26 13:29:02 +00:00
" Vendor Specific " ,
2011-04-12 16:48:58 +00:00
& ett_mip6_opt_vsm ,
2012-06-11 18:47:42 +00:00
OPT_LEN_VARIABLE_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_VSM_MINLEN ,
dissect_mip6_opt_vsm
2010-07-17 07:55:28 +00:00
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_SSM , /* 20 Service Selection Mobility Option [RFC5149] */
2012-10-26 13:29:02 +00:00
" Service Selection " ,
2011-04-12 16:48:58 +00:00
& ett_mip6_opt_ssm ,
2012-06-11 18:47:42 +00:00
OPT_LEN_VARIABLE_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_SSM_MINLEN ,
dissect_mip6_opt_ssm
2010-07-17 07:55:28 +00:00
} ,
2012-10-25 12:54:37 +00:00
{
MIP6_BADFF , /* 21 Binding Authorization Data for FMIPv6 (BADF) [RFC5568] */
" Binding Authorization Data for FMIPv6 (BADF) " ,
& ett_mip6_opt_badff ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_BADFF_MINLEN ,
dissect_mip6_opt_badff
} ,
2007-07-06 10:07:25 +00:00
{
2011-04-12 16:48:58 +00:00
MIP6_HNP , /* 22 Home Network Prefix Option [RFC5213] */
" Home Network Prefix " ,
& ett_pmip6_opt_hnp ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_NEMO_MNP_LEN ,
dissect_mip6_nemo_opt_mnp
2007-07-06 10:07:25 +00:00
} ,
2010-07-17 07:55:28 +00:00
{
2011-04-12 16:48:58 +00:00
MIP6_MOHI , /* 23 Handoff Indicator Option [RFC5213] */
2012-10-26 13:29:02 +00:00
" Handoff Indicator " ,
2011-04-12 16:48:58 +00:00
& ett_pmip6_opt_hi ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
PMIP6_HI_LEN ,
dissect_pmip6_opt_hi
2010-07-17 07:55:28 +00:00
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_ATT , /* 24 Access Technology Type Option [RFC5213] */
" Access Technology Type Option " ,
& ett_pmip6_opt_att ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
PMIP6_ATT_LEN ,
dissect_pmip6_opt_att
2010-07-17 07:55:28 +00:00
} ,
2012-10-25 12:54:37 +00:00
{
MIP6_MNLLI , /* 25 Mobile Node Link-layer Identifier Option [RFC5213] */
" Mobile Node Link-layer Identifier " ,
& ett_pmip6_opt_mnlli ,
OPT_LEN_VARIABLE_LENGTH ,
PMIP6_MNLLI_MIN_LEN ,
dissect_pmip6_opt_mnlli
} ,
2007-07-06 10:07:25 +00:00
{
2011-01-09 17:49:31 +00:00
MIP6_LLA , /* 26 Link-local Address Option [RFC5213 */
" Link-local Address " ,
& ett_pmip6_opt_lla ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-01-09 17:49:31 +00:00
PMIP6_LLA_LEN ,
dissect_pmip6_opt_lla
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_TS , /* 27 Timestamp */
" Timestamp " ,
& ett_pmip6_opt_ts ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
PMIP6_TS_LEN ,
dissect_pmip6_opt_ts
2007-07-06 10:07:25 +00:00
} ,
2010-07-25 18:24:43 +00:00
{
2011-04-12 16:48:58 +00:00
MIP6_RC , /* 28 Restart Counter [RFC5847] */
" Restart Counter " ,
& ett_pmip6_opt_rc ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
PMIP6_RC_LEN ,
dissect_pmip6_opt_rc
2010-07-25 18:24:43 +00:00
} ,
2010-07-17 07:55:28 +00:00
{
2011-04-12 16:48:58 +00:00
MIP6_IPV4HA , /* 29 IPv4 Home Address [RFC5555] */
" IPv4 Home Address " ,
& ett_mip6_opt_ipv4ha ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_IPV4HA_LEN ,
dissect_pmip6_opt_ipv4ha
2010-07-17 07:55:28 +00:00
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_IPV4AA , /* 30 IPv4 Address Acknowledgement [RFC5555] */
" IPv4 Address Acknowledgement " ,
& ett_mip6_opt_ipv4aa ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_IPV4AA_LEN ,
dissect_pmip6_opt_ipv4aa
2010-07-17 07:55:28 +00:00
} ,
2012-10-25 12:54:37 +00:00
{
MIP6_NATD , /* 31 NAT Detection [RFC5555] */
" NAT Detection " ,
& ett_mip6_opt_natd ,
OPT_LEN_FIXED_LENGTH ,
MIP6_NATD_LEN ,
dissect_pmip6_opt_natd
} ,
{
MIP6_IPV4COA , /* 32 IPv4 Care-of Address [RFC5555] */
" IPv4 Care-of Address " ,
& ett_mip6_opt_ipv4coa ,
OPT_LEN_FIXED_LENGTH ,
MIP6_IPV4COA_LEN ,
dissect_pmip6_opt_ipv4coa
} ,
2012-10-24 13:44:25 +00:00
2010-07-17 07:55:28 +00:00
{
2011-04-12 16:48:58 +00:00
MIP6_GREK , /* 33 GRE Key Option [RFC5845] */
" GRE Key " ,
& ett_pmip6_opt_grek ,
2015-09-18 12:08:38 +00:00
OPT_LEN_VARIABLE_LENGTH ,
PMIP6_GREK_MIN_LEN ,
2011-04-12 16:48:58 +00:00
dissect_pmip6_opt_grek
2010-07-17 07:55:28 +00:00
} ,
2012-10-24 13:44:25 +00:00
{
MIP6_MHIPV6AP , /* 34 Mobility Header IPv6 Address/Prefix [RFC5568] Note Errata to RFC */
" Mobility Header IPv6 Address/Prefix " ,
& ett_pmip6_opt_mhipv6ap ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_MHIPV6AP_MIN_LEN ,
dissect_pmip6_opt_mhipv6ap
} ,
2012-10-25 12:54:37 +00:00
{
MIP6_BI , /* 35 Binding Identifier [RFC5648] */
" Binding Identifier " ,
& ett_pmip6_opt_bi ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_BI_MIN_LEN ,
dissect_pmip6_opt_bi
} ,
2010-07-25 18:24:43 +00:00
{
2011-04-12 16:48:58 +00:00
MIP6_IPV4HAREQ , /* 36 IPv4 Home Address Request [RFC5844] */
" IPv4 Home Address Request " ,
& ett_mip6_opt_ipv4hareq ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_IPV4HAREQ_LEN ,
dissect_pmip6_opt_ipv4hareq
2010-07-25 18:24:43 +00:00
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_IPV4HAREP , /* 37 IPv4 Home Address Reply [RFC5844] */
" IPv4 Home Address Reply " ,
& ett_mip6_opt_ipv4harep ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_IPV4HAREP_LEN ,
dissect_pmip6_opt_ipv4harep
2010-07-25 18:24:43 +00:00
} ,
{
2011-04-12 16:48:58 +00:00
MIP6_IPV4DRA , /* 38 IPv4 Default-Router Address [RFC5844] */
" IPv4 Default-Router Address " ,
& ett_mip6_opt_ipv4dra ,
2012-06-11 18:47:42 +00:00
OPT_LEN_FIXED_LENGTH ,
2011-04-12 16:48:58 +00:00
MIP6_IPV4DRA_LEN ,
dissect_pmip6_opt_ipv4dra
2010-07-25 18:24:43 +00:00
} ,
2012-10-26 13:29:02 +00:00
{
MIP6_IPV4DSM , /* 39 IPv4 DHCP Support Mode [RFC5844] */
" IPv4 DHCP Support Mode " ,
& ett_mip6_opt_ipv4dsm ,
OPT_LEN_FIXED_LENGTH ,
MIP6_IPV4DSM_LEN ,
dissect_pmip6_opt_ipv4dsm
} ,
{
MIP6_CR , /* 40 Context Request Option [RFC5949] */
" Context Request " ,
& ett_mip6_opt_cr ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_CR_MIN_LEN ,
dissect_pmip6_opt_cr
} ,
2012-10-24 06:07:34 +00:00
/* 41 Local Mobility Anchor Address Option [RFC5949] */
2012-10-26 13:29:02 +00:00
{
MIP6_CR , /* 40 Context Request Option [RFC5949] */
" Context Request " ,
& ett_mip6_opt_cr ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_CR_MIN_LEN ,
dissect_pmip6_opt_cr
} ,
{
MIP6_LMAA , /* 42 Mobile Node Link-local Address Interface Identifier Option [RFC5949] */
" Mobile Node Link-local Address Interface Identifier " ,
& ett_mip6_opt_lmaa ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_LMAA_MIN_LEN ,
dissect_pmip6_opt_lmaa
} ,
2012-10-24 06:07:34 +00:00
/* 43 Transient Binding [RFC-ietf-mipshop-transient-bce-pmipv6-07] */
/* 44 Flow Summary Mobility Option [RFC-ietf-mext-flow-binding-11] */
/* 45 Flow Identification Mobility Option [RFC-ietf-mext-flow-binding-11]] */
2014-05-05 16:12:32 +00:00
{
MIP6_RECAP , /* 46 Redirect-Capability Mobility Option [RFC6463] */
" Redirect-Capability " ,
& ett_mip6_opt_recap ,
OPT_LEN_FIXED_LENGTH ,
MIP6_RECAP_LEN ,
dissect_pmip6_opt_recap
} ,
{
MIP6_REDIR , /* 47 Redirect Mobility Option [RFC6463] */
" Redirect " ,
& ett_mip6_opt_redir ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_REDIR_MIN_LEN ,
dissect_pmip6_opt_redir
} ,
{
MIP6_LOAD_INF , /* 48 Load Information Mobility Option [RFC6463] */
" Load Information " ,
& ett_mip6_opt_load_inf ,
OPT_LEN_FIXED_LENGTH ,
MIP6_LOAD_INF_LEN ,
dissect_pmip6_opt_load_inf
} ,
{
MIP6_ALT_IP4_CO , /* 49 Alternate IPv4 Care-of Address [RFC6463] */
" Alternate IPv4 " ,
& ett_mip6_opt_alt_ip4 ,
OPT_LEN_FIXED_LENGTH ,
MIP6_ALT_IP4_LEN ,
dissect_pmip6_opt_alt_ip4
} ,
2012-10-24 06:07:34 +00:00
{
MIP6_MNG , /* 50 Mobile Node Group Identifier [RFC6602] */
" Mobile Node Group Identifier " ,
& ett_mip6_opt_mng ,
OPT_LEN_FIXED_LENGTH ,
MIP6_MNG_LEN ,
dissect_pmip6_opt_mng
} ,
2014-09-23 15:02:13 +00:00
{
MIP6_MAG_IPv6 , /* 51 MAG IPv6 Address [RFC6705] */
" MAG IPv6 Address " ,
& ett_mip6_opt_mag_ipv6 ,
OPT_LEN_FIXED_LENGTH ,
MIP6_MAG_IPv6_LEN ,
dissect_pmip6_opt_mag_ipv6
} ,
{
MIP6_ACC_NET_ID , /* 52 Access Network Identifier [RFC6757] */
" Access Network Identifier " ,
& ett_mip6_opt_acc_net_id ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_ACC_NET_ID_MIN_LEN ,
dissect_pmip6_opt_acc_net_id
} ,
2012-10-24 06:07:34 +00:00
2015-09-18 12:08:38 +00:00
{
MIP6_DMNP , /* 55 Delegated Mobile Network Prefix Option [RFC7148] */
" Delegated Mobile Network Prefix " ,
& ett_mip6_opt_dmnp ,
OPT_LEN_VARIABLE_LENGTH ,
MIP6_DMNP_MIN_LEN ,
dissect_mip6_opt_dmnp
} ,
2003-07-11 09:30:49 +00:00
} ;
2003-02-04 20:17:01 +00:00
2011-04-12 16:48:58 +00:00
# define N_MIP6_OPTS (sizeof mip6_opts / sizeof mip6_opts[0])
2003-02-04 20:17:01 +00:00
2009-09-17 13:54:54 +00:00
2005-10-25 06:00:53 +00:00
/* Like "dissect_ip_tcp_options()", but assumes the length of an option
2007-07-06 10:07:25 +00:00
* * doesn ' t * include the type and length bytes . The option parsers ,
* however , are passed a length that * does * include them .
*/
2005-10-29 23:22:13 +00:00
static void
2005-10-25 06:00:53 +00:00
dissect_mipv6_options ( tvbuff_t * tvb , int offset , guint length ,
2012-10-25 15:57:05 +00:00
const mip6_opt * opttab , int nopts , int eol ,
2011-04-12 16:48:58 +00:00
packet_info * pinfo , proto_tree * opt_tree )
2005-10-25 06:00:53 +00:00
{
2012-10-28 19:54:29 +00:00
proto_item * ti ;
proto_tree * opt_data_tree = NULL ;
guchar opt ;
const mip6_opt * optp ;
opt_len_type len_type ;
unsigned int optlen ;
const char * name ;
char name_str [ 7 + 1 + 1 + 2 + 2 + 1 + 1 ] ; /* "Unknown (0x%02x)" */
void ( * dissect ) ( const struct mip6_opt * , tvbuff_t * ,
int , guint , packet_info * , proto_tree * , proto_item * ) ;
guint len ;
while ( ( gint ) length > 0 ) {
2011-04-12 16:48:58 +00:00
opt = tvb_get_guint8 ( tvb , offset ) ;
for ( optp = & opttab [ 0 ] ; optp < & opttab [ nopts ] ; optp + + ) {
if ( optp - > optcode = = opt )
break ;
}
if ( optp = = & opttab [ nopts ] ) {
2012-06-11 18:47:42 +00:00
/* We assume that the only OPT_LEN_NO_LENGTH options are Pad1 options,
* so that we can treat unknown options as OPT_LEN_VARIABLE_LENGTH with a
2011-04-12 16:48:58 +00:00
* minimum of 0 , and at least be able to move on to the next option
* by using the length in the option .
*/
2012-10-28 19:54:29 +00:00
optp = NULL ; /* indicate that we don't know this option */
2012-06-11 18:47:42 +00:00
len_type = OPT_LEN_VARIABLE_LENGTH ;
2012-10-28 19:54:29 +00:00
optlen = 0 ;
2011-04-12 16:48:58 +00:00
g_snprintf ( name_str , sizeof name_str , " Unknown (0x%02x) " , opt ) ;
2012-10-28 19:54:29 +00:00
name = name_str ;
dissect = NULL ;
2011-04-12 16:48:58 +00:00
} else {
len_type = optp - > len_type ;
2012-10-28 19:54:29 +00:00
optlen = optp - > optlen ;
name = optp - > name ;
dissect = optp - > dissect ;
2011-04-12 16:48:58 +00:00
}
- - length ; /* account for type byte */
2012-06-11 18:47:42 +00:00
if ( len_type ! = OPT_LEN_NO_LENGTH ) {
2011-04-12 16:48:58 +00:00
/* Option has a length. Is it in the packet? */
if ( length = = 0 ) {
/* Bogus - packet must at least include
* option code byte and length byte !
*/
2015-04-01 12:11:28 +00:00
proto_tree_add_expert_format ( opt_tree , pinfo , & ei_mip6_opt_len_invalid , tvb , offset , 1 ,
2011-04-12 16:48:58 +00:00
" %s (length byte past end of options) " , name ) ;
return ;
}
len = tvb_get_guint8 ( tvb , offset + 1 ) ; /* Size specified in option */
- - length ; /* account for length byte */
if ( len > length ) {
/* Bogus - option goes past the end of the header. */
2015-04-01 12:11:28 +00:00
proto_tree_add_expert_format ( opt_tree , pinfo , & ei_mip6_opt_len_invalid , tvb , offset , length ,
2011-04-12 16:48:58 +00:00
" %s (option length = %u byte%s says option goes past end of options) " ,
name , len , plurality ( len , " " , " s " ) ) ;
return ;
2012-06-11 18:47:42 +00:00
} else if ( len_type = = OPT_LEN_FIXED_LENGTH & & len ! = optlen ) {
2011-04-12 16:48:58 +00:00
/* Bogus - option length isn't what it's supposed to be for this
option . */
2015-04-01 12:11:28 +00:00
proto_tree_add_expert_format ( opt_tree , pinfo , & ei_mip6_opt_len_invalid , tvb , offset , len + 2 ,
2011-04-12 16:48:58 +00:00
" %s (with option length = %u byte%s; should be %u) " , name ,
len , plurality ( len , " " , " s " ) , optlen ) ;
return ;
2012-06-11 18:47:42 +00:00
} else if ( len_type = = OPT_LEN_VARIABLE_LENGTH & & len < optlen ) {
2011-04-12 16:48:58 +00:00
/* Bogus - option length is less than what it's supposed to be for
this option . */
2015-04-01 12:11:28 +00:00
proto_tree_add_expert_format ( opt_tree , pinfo , & ei_mip6_opt_len_invalid , tvb , offset , len + 2 ,
2011-04-12 16:48:58 +00:00
" %s (with option length = %u byte%s; should be >= %u) " , name ,
len , plurality ( len , " " , " s " ) , optlen ) ;
return ;
2012-10-28 19:54:29 +00:00
} else {
2015-04-01 12:11:28 +00:00
ti = proto_tree_add_string ( opt_tree , hf_mip6_mobility , tvb , offset , len + 2 ,
2012-10-28 19:54:29 +00:00
val_to_str_ext_const ( opt , & mip6_mobility_options_ext , " <unknown> " ) ) ;
2015-04-01 12:11:28 +00:00
2012-10-28 20:23:06 +00:00
if ( optp & & * optp - > subtree_index ) {
2012-10-28 19:54:29 +00:00
opt_data_tree = proto_item_add_subtree ( ti , * optp - > subtree_index ) ;
2014-11-14 03:38:54 +00:00
} else {
opt_data_tree = proto_item_add_subtree ( ti , ett_mip6_opt_unknown ) ;
2012-10-28 19:54:29 +00:00
}
2012-10-25 16:15:58 +00:00
proto_tree_add_item ( opt_data_tree , hf_mip6_mobility_opt , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
if ( optp = = NULL ) {
proto_item_append_text ( ti , " (%u byte%s) " , len , plurality ( len , " " , " s " ) ) ;
2013-05-27 17:30:43 +00:00
expert_add_info ( pinfo , ti , & ei_mip6_ie_not_dissected ) ;
2011-04-12 16:48:58 +00:00
} else {
if ( dissect ! = NULL ) {
/* Option has a dissector. */
2015-01-07 16:34:33 +00:00
( * dissect ) ( optp , tvb , offset , len + 2 , pinfo , opt_data_tree , ti ) ;
2011-04-12 16:48:58 +00:00
}
}
2015-01-07 16:34:33 +00:00
offset + = len + 2 ;
2011-04-12 16:48:58 +00:00
}
2015-01-07 16:34:33 +00:00
length - = len ;
2011-04-12 16:48:58 +00:00
} else {
2015-08-10 23:28:54 +00:00
proto_tree_add_uint_format ( opt_tree , hf_mip6_option_unknown , tvb , offset , 1 , opt , " %s " , name ) ;
2011-04-12 16:48:58 +00:00
offset + = 1 ;
}
if ( opt = = eol )
break ;
}
2005-10-25 06:00:53 +00:00
}
2003-02-04 20:17:01 +00:00
/* Function to dissect mobility options */
static int
2003-07-11 09:30:49 +00:00
dissect_mip6_options ( tvbuff_t * tvb , proto_tree * mip6_tree , int offset , int len ,
2011-04-12 16:48:58 +00:00
packet_info * pinfo )
2003-02-04 20:17:01 +00:00
{
2012-10-28 19:54:29 +00:00
proto_tree * opts_tree ;
2003-02-04 20:17:01 +00:00
2014-07-01 22:31:05 +00:00
opts_tree = proto_tree_add_subtree ( mip6_tree , tvb , offset , len , ett_mip6 , NULL , " Mobility Options " ) ;
2003-02-04 20:17:01 +00:00
2011-04-12 16:48:58 +00:00
dissect_mipv6_options ( tvb , offset , len , mip6_opts , N_MIP6_OPTS , - 1 , pinfo , opts_tree ) ;
2003-02-04 20:17:01 +00:00
2011-04-12 16:48:58 +00:00
return len ;
2003-02-04 20:17:01 +00:00
}
/* Function that dissects the whole MIPv6 packet */
2015-11-15 21:51:45 +00:00
static int
dissect_mip6 ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , void * data _U_ )
2003-02-04 20:17:01 +00:00
{
2012-10-28 19:54:29 +00:00
proto_tree * mip6_tree = NULL ;
guint8 type , pproto ;
guint len , offset = 0 , start_offset = offset ;
2015-08-10 23:28:54 +00:00
proto_item * ti , * header_item ;
2011-04-12 16:48:58 +00:00
/* Make entries in Protocol column and Info column on summary display */
col_set_str ( pinfo - > cinfo , COL_PROTOCOL , " MIPv6 " ) ;
col_clear ( pinfo - > cinfo , COL_INFO ) ;
len = ( tvb_get_guint8 ( tvb , MIP6_HLEN_OFF ) + 1 ) * 8 ;
pproto = tvb_get_guint8 ( tvb , MIP6_PROTO_OFF ) ;
2015-08-10 23:28:54 +00:00
ti = proto_tree_add_item ( tree , proto_mip6 , tvb , 0 , len , ENC_NA ) ;
mip6_tree = proto_item_add_subtree ( ti , ett_mip6 ) ;
/* Process header fields */
proto_tree_add_item ( mip6_tree , hf_mip6_proto , tvb ,
MIP6_PROTO_OFF , 1 , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
2015-08-10 23:28:54 +00:00
header_item = proto_tree_add_uint_format_value ( mip6_tree , hf_mip6_hlen , tvb ,
2011-04-12 16:48:58 +00:00
MIP6_HLEN_OFF , 1 ,
tvb_get_guint8 ( tvb , MIP6_HLEN_OFF ) ,
2013-09-15 01:48:30 +00:00
" %u (%u bytes) " ,
2011-04-12 16:48:58 +00:00
tvb_get_guint8 ( tvb , MIP6_HLEN_OFF ) ,
len ) ;
2015-08-10 23:28:54 +00:00
proto_tree_add_item ( mip6_tree , hf_mip6_mhtype , tvb ,
MIP6_TYPE_OFF , 1 , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
2015-08-10 23:28:54 +00:00
proto_tree_add_item ( mip6_tree , hf_mip6_reserved , tvb ,
MIP6_RES_OFF , 1 , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
2015-08-10 23:28:54 +00:00
proto_tree_add_item ( mip6_tree , hf_mip6_csum , tvb ,
MIP6_CSUM_OFF , 2 , ENC_BIG_ENDIAN ) ;
2011-04-12 16:48:58 +00:00
/* Process mobility header */
type = tvb_get_guint8 ( tvb , MIP6_TYPE_OFF ) ;
2015-12-11 01:24:45 +00:00
col_add_fstr ( pinfo - > cinfo , COL_INFO , " %s " , val_to_str_ext ( type , & mip6_mh_types_ext , " Unknown Mobility Header (%u) " ) ) ;
2011-04-12 16:48:58 +00:00
switch ( type ) {
case MIP6_BRR :
2012-10-30 13:06:03 +00:00
/* 0 Binding Refresh Request */
2011-04-12 16:48:58 +00:00
offset = dissect_mip6_brr ( tvb , mip6_tree , pinfo ) ;
break ;
case MIP6_HOTI :
2012-10-30 13:06:03 +00:00
/* 1 Home Test Init */
2011-04-12 16:48:58 +00:00
offset = dissect_mip6_hoti ( tvb , mip6_tree , pinfo ) ;
break ;
case MIP6_MHCOTI :
2012-10-30 13:06:03 +00:00
/* 2 Care-of Test Init */
2011-04-12 16:48:58 +00:00
offset = dissect_mip6_coti ( tvb , mip6_tree , pinfo ) ;
break ;
case MIP6_HOT :
2012-10-30 13:06:03 +00:00
/* 3 Home Test */
2011-04-12 16:48:58 +00:00
offset = dissect_mip6_hot ( tvb , mip6_tree , pinfo ) ;
break ;
case MIP6_MHCOT :
2012-10-30 13:06:03 +00:00
/* 4 Care-of Test */
2011-04-12 16:48:58 +00:00
offset = dissect_mip6_cot ( tvb , mip6_tree , pinfo ) ;
break ;
case MIP6_BU :
2012-10-30 13:06:03 +00:00
/* 5 Binding Update */
2014-02-08 14:28:53 +00:00
pinfo - > link_dir = P2P_DIR_UL ;
2011-04-12 16:48:58 +00:00
offset = dissect_mip6_bu ( tvb , mip6_tree , pinfo ) ;
if ( proto_nemo = = 1 ) {
col_set_str ( pinfo - > cinfo , COL_PROTOCOL , " NEMO " ) ;
}
break ;
case MIP6_BA :
2012-10-30 13:06:03 +00:00
/* 6 Binding Acknowledgement */
2014-02-08 14:28:53 +00:00
pinfo - > link_dir = P2P_DIR_DL ;
2011-04-12 16:48:58 +00:00
offset = dissect_mip6_ba ( tvb , mip6_tree , pinfo ) ;
if ( proto_nemo = = 1 ) {
col_set_str ( pinfo - > cinfo , COL_PROTOCOL , " NEMO " ) ;
}
break ;
case MIP6_BE :
2012-10-30 13:06:03 +00:00
/* 7 Binding Error */
2011-04-12 16:48:58 +00:00
offset = dissect_mip6_be ( tvb , mip6_tree , pinfo ) ;
break ;
case MIP6_FBU :
2012-10-30 13:06:03 +00:00
/* 8 Fast Binding Update */
2011-04-12 16:48:58 +00:00
offset = dissect_fmip6_fbu ( tvb , mip6_tree , pinfo ) ;
break ;
case MIP6_FBACK :
2012-10-30 13:06:03 +00:00
/* 9 Fast Binding Acknowledgment */
2011-04-12 16:48:58 +00:00
offset = dissect_fmip6_fback ( tvb , mip6_tree , pinfo ) ;
break ;
case MIP6_FNA :
2012-10-30 13:06:03 +00:00
/* 10 Fast Neighbor Advertisement */
2011-04-12 16:48:58 +00:00
offset = dissect_fmip6_fna ( tvb , mip6_tree , pinfo ) ;
break ;
2012-10-30 13:06:03 +00:00
case MIP6_EMH :
/* 11 Experimental Mobility Header RFC5096 */
2014-11-17 22:22:08 +00:00
if ( len > 8 ) {
proto_tree_add_item ( mip6_tree , hf_mip6_opt_em_data , tvb , offset + MIP6_DATA_OFF , len - MIP6_DATA_OFF , ENC_NA ) ;
}
offset = len ;
2012-10-30 13:06:03 +00:00
break ;
case MIP6_HAS :
/* 12 Home Agent Switch */
2015-12-11 04:02:20 +00:00
offset = dissect_mip6_has ( tvb , mip6_tree , pinfo ) ;
2012-10-30 13:06:03 +00:00
break ;
2011-04-12 16:48:58 +00:00
case MIP6_HB :
2012-10-30 13:06:03 +00:00
/* 13 Heartbeat */
2011-04-12 16:48:58 +00:00
offset = dissect_mip6_hb ( tvb , mip6_tree , pinfo ) ;
break ;
2012-10-30 13:06:03 +00:00
case MIP6_HI :
/* 14 Handover Initiate RFC5568 */
offset = dissect_mip6_hi ( tvb , mip6_tree , pinfo ) ;
break ;
case MIP6_HAck :
/* 14 Handover Acknowledge*/
offset = dissect_mip6_hack ( tvb , mip6_tree , pinfo ) ;
break ;
2011-04-12 16:48:58 +00:00
case MIP6_BR :
2012-10-30 13:06:03 +00:00
/* 16 Binding Revocation Indication / Acknowledge */
2011-04-12 16:48:58 +00:00
offset = dissect_pmip6_bri ( tvb , mip6_tree , pinfo ) ;
break ;
2012-10-30 13:06:03 +00:00
case MIP6_LRI :
/* 17 Localized Routing Initiation */
2015-03-17 12:55:52 +00:00
offset = dissect_pmip6_lri ( tvb , mip6_tree , pinfo , offset ) ;
break ;
2012-10-30 13:06:03 +00:00
case MIP6_LRA :
/* 18 Localized Routing Acknowledgment */
2015-03-17 12:55:52 +00:00
offset = dissect_pmip6_lra ( tvb , mip6_tree , pinfo , offset ) ;
break ;
2011-04-12 16:48:58 +00:00
default :
2015-12-11 01:24:45 +00:00
offset = dissect_mip6_unknown ( tvb , mip6_tree , pinfo ) ;
2011-04-12 16:48:58 +00:00
break ;
}
/* Process mobility options */
if ( offset < len ) {
if ( len < ( offset - start_offset ) ) {
2015-08-10 23:28:54 +00:00
expert_add_info ( pinfo , header_item , & ei_mip6_bogus_header_length ) ;
2015-11-15 21:51:45 +00:00
return offset ;
2011-04-12 16:48:58 +00:00
}
len - = ( offset - start_offset ) ;
dissect_mip6_options ( tvb , mip6_tree , offset , len , pinfo ) ;
}
2012-10-28 19:54:29 +00:00
if ( ( type = = MIP6_FNA ) & & ( pproto = = IP_PROTO_IPV6 ) ) {
2011-04-12 16:48:58 +00:00
tvbuff_t * ipv6_tvb ;
ipv6_tvb = tvb_new_subset_remaining ( tvb , len + 8 ) ;
/* Call the IPv6 dissector */
dissector_try_uint ( ip_dissector_table , pproto , ipv6_tvb , pinfo , tree ) ;
col_set_str ( pinfo - > cinfo , COL_INFO , " Fast Neighbor Advertisement[Fast Binding Update] " ) ;
}
2014-04-18 21:09:47 +00:00
if ( ( type = = MIP6_FBACK ) & & ( pproto = = IP_PROTO_AH ) ) {
tvbuff_t * ipv6_tvb ;
ipv6_tvb = tvb_new_subset_remaining ( tvb , len + offset ) ;
/* Call the IPv6 dissector */
dissector_try_uint ( ip_dissector_table , pproto , ipv6_tvb , pinfo , tree ) ;
col_set_str ( pinfo - > cinfo , COL_INFO , " Fast Binding Acknowledgment " ) ;
}
2015-11-15 21:51:45 +00:00
return tvb_captured_length ( tvb ) ;
2003-02-04 20:17:01 +00:00
}
2006-05-21 04:49:01 +00:00
/* Register the protocol with Wireshark */
2010-07-26 13:32:13 +00:00
void
2003-02-04 20:17:01 +00:00
proto_register_mip6 ( void )
2007-07-06 10:07:25 +00:00
{
2011-04-12 16:48:58 +00:00
/* Setup list of header fields */
static hf_register_info hf [ ] = {
2012-10-28 19:54:29 +00:00
{ & hf_mip6_proto ,
{ " Payload protocol " , " mip6.proto " ,
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & ipproto_val_ext , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_hlen ,
{ " Header length " , " mip6.hlen " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_mhtype ,
{ " Mobility Header Type " , " mip6.mhtype " ,
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & mip6_mh_types_ext , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_reserved ,
{ " Reserved " , " mip6.reserved " ,
FT_UINT8 , BASE_HEX , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_csum ,
{ " Checksum " , " mip6.csum " ,
FT_UINT16 , BASE_HEX , NULL , 0 ,
" Header Checksum " , HFILL }
} ,
{ & hf_mip6_hoti_cookie ,
{ " Home Init Cookie " , " mip6.hoti.cookie " ,
FT_UINT64 , BASE_HEX , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_coti_cookie ,
{ " Care-of Init Cookie " , " mip6.coti.cookie " ,
FT_UINT64 , BASE_HEX , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_hot_nindex ,
{ " Home Nonce Index " , " mip6.hot.nindex " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_hot_cookie ,
{ " Home Init Cookie " , " mip6.hot.cookie " ,
FT_UINT64 , BASE_HEX , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_hot_token ,
{ " Home Keygen Token " , " mip6.hot.token " ,
FT_UINT64 , BASE_HEX , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_cot_nindex ,
{ " Care-of Nonce Index " , " mip6.cot.nindex " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_cot_cookie ,
{ " Care-of Init Cookie " , " mip6.cot.cookie " ,
FT_UINT64 , BASE_HEX , NULL , 0 ,
NULL , HFILL }
} ,
2013-01-31 18:35:06 +00:00
#if 0
2012-10-28 19:54:29 +00:00
{ & hf_mip6_cot_token ,
{ " Care-of Keygen Token " , " mip6.cot.token " ,
FT_UINT64 , BASE_HEX , NULL , 0 ,
NULL , HFILL }
} ,
2013-01-31 18:35:06 +00:00
# endif
2012-10-28 19:54:29 +00:00
{ & hf_mip6_bu_seqnr ,
{ " Sequence number " , " mip6.bu.seqnr " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2012-10-26 13:29:02 +00:00
{ & hf_mip6_bu_a_flag ,
2012-10-28 19:54:29 +00:00
{ " Acknowledge (A) flag " , " mip6.bu.a_flag " ,
FT_BOOLEAN , 16 , TFS ( & mip6_bu_a_flag_value ) , 0x8000 ,
NULL , HFILL }
} ,
{ & hf_mip6_bu_h_flag ,
{ " Home Registration (H) flag " , " mip6.bu.h_flag " ,
FT_BOOLEAN , 16 , TFS ( & mip6_bu_h_flag_value ) , 0x4000 ,
NULL , HFILL }
} ,
{ & hf_mip6_bu_l_flag ,
{ " Link-Local Compatibility (L) flag " , " mip6.bu.l_flag " ,
FT_BOOLEAN , 16 , TFS ( & mip6_bu_l_flag_value ) , 0x2000 ,
" Home Registration (H) flag " , HFILL }
} ,
{ & hf_mip6_bu_k_flag ,
{ " Key Management Compatibility (K) flag " , " mip6.bu.k_flag " ,
FT_BOOLEAN , 16 , TFS ( & mip6_bu_k_flag_value ) , 0x1000 ,
NULL , HFILL }
} ,
{ & hf_mip6_bu_m_flag ,
{ " MAP Registration Compatibility (M) flag " , " mip6.bu.m_flag " ,
FT_BOOLEAN , 16 , TFS ( & mip6_bu_m_flag_value ) , 0x0800 ,
NULL , HFILL }
} ,
{ & hf_mip6_nemo_bu_r_flag ,
{ " Mobile Router (R) flag " , " mip6.nemo.bu.r_flag " ,
FT_BOOLEAN , 16 , TFS ( & mip6_nemo_bu_r_flag_value ) , 0x0400 ,
NULL , HFILL }
} ,
{ & hf_pmip6_bu_p_flag ,
{ " Proxy Registration (P) flag " , " mip6.bu.p_flag " ,
FT_BOOLEAN , 16 , TFS ( & pmip6_bu_p_flag_value ) , 0x0200 ,
NULL , HFILL }
} ,
{ & hf_mip6_bu_f_flag ,
{ " Forcing UDP encapsulation (F) flag " , " mip6.bu.f_flag " ,
FT_BOOLEAN , 16 , TFS ( & mip6_bu_f_flag_value ) , 0x0100 ,
NULL , HFILL }
} ,
{ & hf_pmip6_bu_t_flag ,
{ " TLV-header format (T) flag " , " mip6.bu.t_flag " ,
FT_BOOLEAN , 16 , TFS ( & pmip6_bu_t_flag_value ) , 0x0080 ,
NULL , HFILL }
} ,
{ & hf_pmip6_bu_b_flag ,
{ " Bulk-Binding-Update flag (B) " , " mip6.bu.b_flag " ,
FT_BOOLEAN , 16 , TFS ( & pmip6_bu_b_flag_value ) , 0x0040 ,
NULL , HFILL }
} ,
{ & hf_mip6_bu_lifetime ,
{ " Lifetime " , " mip6.bu.lifetime " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_ba_status ,
{ " Status " , " mip6.ba.status " ,
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & mip6_ba_status_value_ext , 0 ,
" Binding Acknowledgement status " , HFILL }
} ,
{ & hf_mip6_ba_k_flag ,
{ " Key Management Compatibility (K) flag " , " mip6.ba.k_flag " ,
FT_BOOLEAN , 8 , TFS ( & mip6_bu_k_flag_value ) , 0x80 ,
NULL , HFILL }
} ,
{ & hf_mip6_nemo_ba_r_flag ,
{ " Mobile Router (R) flag " , " mip6.nemo.ba.r_flag " ,
FT_BOOLEAN , 8 , TFS ( & mip6_nemo_bu_r_flag_value ) , 0x40 ,
NULL , HFILL }
} ,
{ & hf_pmip6_ba_p_flag ,
{ " Proxy Registration (P) flag " , " mip6.ba.p_flag " ,
FT_BOOLEAN , 8 , TFS ( & pmip6_bu_p_flag_value ) , 0x20 ,
NULL , HFILL }
} ,
{ & hf_pmip6_ba_t_flag ,
{ " TLV-header format (T) flag " , " mip6.ba.t_flag " ,
FT_BOOLEAN , 8 , TFS ( & pmip6_bu_t_flag_value ) , 0x10 ,
NULL , HFILL }
} ,
{ & hf_pmip6_ba_b_flag ,
{ " Bulk-Binding-Update flag (B) " , " mip6.ba.b_flag " ,
FT_BOOLEAN , 8 , TFS ( & pmip6_ba_b_flag_value ) , 0x08 ,
NULL , HFILL }
} ,
{ & hf_mip6_ba_seqnr ,
{ " Sequence number " , " mip6.ba.seqnr " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_ba_lifetime ,
{ " Lifetime " , " mip6.ba.lifetime " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_be_status ,
{ " Status " , " mip6.be.status " ,
FT_UINT8 , BASE_DEC , VALS ( mip6_be_status_value ) , 0 ,
" Binding Error status " , HFILL }
} ,
{ & hf_mip6_be_haddr ,
{ " Home Address " , " mip6.be.haddr " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_fmip6_fbu_seqnr ,
2014-11-07 03:10:11 +00:00
{ " Sequence number " , " mip6.fbu.seqnr " ,
2012-10-28 19:54:29 +00:00
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_fmip6_fbu_a_flag ,
2014-11-07 03:10:11 +00:00
{ " Acknowledge (A) flag " , " mip6.fbu.a_flag " ,
2012-10-28 19:54:29 +00:00
FT_BOOLEAN , 8 , TFS ( & fmip6_fbu_a_flag_value ) , 0x80 ,
NULL , HFILL }
} ,
{ & hf_fmip6_fbu_h_flag ,
2014-11-07 03:10:11 +00:00
{ " Home Registration (H) flag " , " mip6.fbu.h_flag " ,
2012-10-28 19:54:29 +00:00
FT_BOOLEAN , 8 , TFS ( & fmip6_fbu_h_flag_value ) , 0x40 ,
NULL , HFILL }
} ,
{ & hf_fmip6_fbu_l_flag ,
2014-11-07 03:10:11 +00:00
{ " Link-Local Compatibility (L) flag " , " mip6.fbu.l_flag " ,
2012-10-28 19:54:29 +00:00
FT_BOOLEAN , 8 , TFS ( & fmip6_fbu_l_flag_value ) , 0x20 ,
" Home Registration (H) flag " , HFILL }
} ,
{ & hf_fmip6_fbu_k_flag ,
2014-11-07 03:10:11 +00:00
{ " Key Management Compatibility (K) flag " , " mip6.fbu.k_flag " ,
2012-10-28 19:54:29 +00:00
FT_BOOLEAN , 8 , TFS ( & fmip6_fbu_k_flag_value ) , 0x10 ,
NULL , HFILL }
} ,
{ & hf_fmip6_fbu_lifetime ,
2014-11-07 03:10:11 +00:00
{ " Lifetime " , " mip6.fbu.lifetime " ,
2012-10-28 19:54:29 +00:00
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_fmip6_fback_status ,
2014-11-07 03:10:11 +00:00
{ " Status " , " mip6.fback.status " ,
2012-10-28 19:54:29 +00:00
FT_UINT8 , BASE_DEC , VALS ( fmip6_fback_status_value ) , 0 ,
" Fast Binding Acknowledgement status " , HFILL }
} ,
{ & hf_fmip6_fback_k_flag ,
2014-11-07 03:10:11 +00:00
{ " Key Management Compatibility (K) flag " , " mip6.fback.k_flag " ,
2012-10-28 19:54:29 +00:00
FT_BOOLEAN , 8 , TFS ( & fmip6_fbu_k_flag_value ) , 0x80 ,
NULL , HFILL }
} ,
{ & hf_fmip6_fback_seqnr ,
2014-11-07 03:10:11 +00:00
{ " Sequence number " , " mip6.fback.seqnr " ,
2012-10-28 19:54:29 +00:00
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_fmip6_fback_lifetime ,
2014-11-07 03:10:11 +00:00
{ " Lifetime " , " mip6.fback.lifetime " ,
2012-10-28 19:54:29 +00:00
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2015-12-11 04:02:20 +00:00
{ & hf_mip6_has_num_addrs ,
{ " Number of Addresses " , " mip6.has.num_addrs " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_has_reserved ,
{ " Reserved " , " mip6.has.reserved " ,
FT_UINT8 , BASE_HEX , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_has_address ,
{ " Address " , " mip6.has.address " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
" Home Agent Address " , HFILL }
} ,
2012-10-28 19:54:29 +00:00
{ & hf_mip6_hb_u_flag ,
{ " Unsolicited (U) flag " , " mip6.hb.u_flag " ,
FT_BOOLEAN , 8 , TFS ( & mip6_hb_u_flag_value ) , 0x02 ,
NULL , HFILL }
} ,
{ & hf_mip6_hb_r_flag ,
{ " Response (R) flag " , " mip6.hb.r_flag " ,
FT_BOOLEAN , 8 , TFS ( & mip6_hb_r_flag_value ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_mip6_hb_seqnr ,
{ " Sequence number " , " mip6.hb.seqnr " ,
FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2012-10-30 13:06:03 +00:00
{ & hf_mip6_hi_seqnr ,
{ " Sequence number " , " mip6.hi.seqnr " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_hi_s_flag ,
{ " Assigned address configuration flag (S) flag " , " mip6.hi.s_flag " ,
FT_BOOLEAN , 8 , NULL , 0x80 ,
NULL , HFILL }
} ,
{ & hf_mip6_hi_u_flag ,
{ " Buffer flag (U) flag " , " mip6.hi.u_flag " ,
FT_BOOLEAN , 8 , NULL , 0x40 ,
NULL , HFILL }
} ,
{ & hf_mip6_hi_code ,
{ " Code " , " mip6.hi.code " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_hack_seqnr ,
{ " Sequence number " , " mip6.hack.seqnr " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_hack_code ,
{ " Code " , " mip6.hack.code " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2012-10-26 15:35:41 +00:00
{ & hf_mip6_opt_3gpp_reserved ,
2012-10-28 19:54:29 +00:00
{ " Reserved " , " mip6.3gpp.reserved " ,
FT_UINT8 , BASE_DEC , NULL , 0xfe ,
NULL , HFILL }
2012-10-26 15:35:41 +00:00
} ,
{ & hf_mip6_opt_3gpp_flag_m ,
2012-10-28 19:54:29 +00:00
{ " M flag " , " mip6.3gpp.flag.m " ,
FT_BOOLEAN , 8 , NULL , 0x01 ,
NULL , HFILL }
2012-10-26 15:35:41 +00:00
} ,
2012-10-29 16:02:51 +00:00
{ & hf_mip6_opt_3gpp_spec_pmipv6_err_code ,
{ " 3GPP Specific PMIPv6 Error Code " , " mip6.3gpp.spec_pmipv6_err_code " ,
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & gtpv2_cause_vals_ext , 0x0 ,
" GTPv2 Cause values " , HFILL }
} ,
2014-02-08 14:28:53 +00:00
{ & hf_mip6_opt_3gpp_pdn_gw_ipv4_addr ,
2012-10-29 16:02:51 +00:00
{ " PDN GW IPv4 address " , " mip6.3gpp.pdn_gw_ipv4_addr " ,
FT_IPv4 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
2014-02-08 14:28:53 +00:00
{ & hf_mip6_opt_3gpp_pdn_gw_ipv6_addr ,
2012-10-29 16:02:51 +00:00
{ " PDN GW IPv6 address " , " mip6.3gpp.pdn_gw_ipv6_addr " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_3gpp_dhcpv4_addr_all_proc_ind ,
{ " DHCPv4 Address Allocation Procedure Indication " , " mip6.3gpp.dhcpv4_addr_all_proc_ind " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_3gpp_pdn_type ,
{ " PDN type " , " mip6.3gpp.pdn_type " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_3gpp_pdn_ind_cause ,
{ " Cause " , " mip6.3gpp.pdn_ind_cause " ,
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & gtpv2_cause_vals_ext , 0x0 ,
" GTPv2 Cause values " , HFILL }
} ,
{ & hf_mip6_opt_3gpp_chg_id ,
{ " Charging ID " , " mip6.3gpp.chg_id " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2014-02-08 14:28:53 +00:00
{ & hf_mip6_opt_3gpp_charging_characteristic ,
2012-10-29 16:02:51 +00:00
{ " Charging Characteristic " , " mip6.3gpp.charging_characteristic " ,
FT_UINT16 , BASE_HEX , NULL , 0xffff ,
NULL , HFILL }
} ,
2014-02-08 14:28:53 +00:00
{ & hf_mip6_opt_3gpp_mei ,
2012-10-29 16:02:51 +00:00
{ " Mobile Equipment Identity (MEI) " , " mip6.3gpp.mei " ,
FT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
2014-02-08 14:28:53 +00:00
{ & hf_mip6_opt_3gpp_msisdn ,
2012-10-29 16:02:51 +00:00
{ " MSISDN " , " mip6.3gpp.msisdn " ,
FT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_3gpp_apn_rest ,
{ " APN Restriction " , " mip6.3gpp.apn_rest " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_3gpp_max_apn_rest ,
{ " Maximum APN Restriction " , " mip6.3gpp.max_apn_rest " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2014-02-08 14:28:53 +00:00
{ & hf_mip6_opt_3gpp_imsi ,
2012-10-29 16:02:51 +00:00
{ " Unauthenticated IMSI " , " mip6.3gpp.imsi " ,
FT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_3gpp_pdn_conn_id ,
{ " PDN Connection ID " , " mip6.3gpp.pdn_conn_id " ,
FT_UINT8 , BASE_DEC , NULL , 0x0f ,
NULL , HFILL }
} ,
{ & hf_hf_mip6_opt_3gpp_lapi ,
{ " LAPI (Low Access Priority Indication) " , " mip6.3gpp.lapi " ,
FT_BOOLEAN , 8 , NULL , 0x01 ,
NULL , HFILL }
} ,
2012-10-26 15:35:41 +00:00
2014-02-08 14:28:53 +00:00
{ & hf_mip6_bra_interval ,
2012-10-28 19:54:29 +00:00
{ " Refresh interval " , " mip6.bra.interval " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-26 15:35:41 +00:00
} ,
2011-04-12 16:48:58 +00:00
2012-10-28 19:54:29 +00:00
{ & hf_mip6_acoa_acoa ,
{ " Alternate care-of address " , " mip6.acoa.acoa " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
2011-04-12 16:48:58 +00:00
2012-10-28 19:54:29 +00:00
{ & hf_mip6_ni_hni ,
{ " Home nonce index " , " mip6.ni.hni " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_ni_cni ,
{ " Care-of nonce index " , " mip6.ni.cni " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2011-04-12 16:48:58 +00:00
2012-10-28 19:54:29 +00:00
{ & hf_mip6_bad_auth ,
{ " Authenticator " , " mip6.bad.auth " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
2011-04-12 16:48:58 +00:00
2015-01-04 02:56:16 +00:00
{ & hf_fmip6_lla ,
{ " Link-layer address " , " mip6.lla " ,
2015-01-11 00:26:46 +00:00
FT_BYTES , SEP_COLON , NULL , 0 ,
2015-01-04 02:56:16 +00:00
NULL , HFILL }
} ,
2012-10-28 19:54:29 +00:00
{ & hf_fmip6_lla_optcode ,
{ " Option-Code " , " mip6.lla.optcode " ,
FT_UINT8 , BASE_DEC , VALS ( fmip6_lla_optcode_value ) , 0 ,
NULL , HFILL }
} ,
2011-04-12 16:48:58 +00:00
2012-10-28 19:54:29 +00:00
{ & hf_mip6_nemo_mnp_pfl ,
{ " Mobile Network Prefix Length " , " mip6.nemo.mnp.pfl " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2011-04-12 16:48:58 +00:00
2012-10-28 19:54:29 +00:00
{ & hf_mip6_nemo_mnp_mnp ,
{ " Mobile Network Prefix " , " mip6.nemo.mnp.mnp " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
2011-04-12 16:48:58 +00:00
2012-10-24 13:44:25 +00:00
{ & hf_mip6_mnid_subtype ,
2012-10-28 19:54:29 +00:00
{ " Subtype " , " mip6.mnid.subtype " ,
FT_UINT8 , BASE_DEC , VALS ( mip6_mnid_subtype_value ) , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
2015-03-11 09:53:44 +00:00
{ & hf_mip6_mnid_identifier ,
{ " Identifier " , " mip6.mnid.identifier " ,
FT_STRING , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2012-10-24 13:44:25 +00:00
{ & hf_mip6_opt_auth_sub_type ,
2012-10-28 19:54:29 +00:00
{ " Subtype " , " mip6.auth.subtype " ,
FT_UINT8 , BASE_DEC , VALS ( mip6_auth_subtype_value ) , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
{ & hf_mip6_opt_auth_mobility_spi ,
2012-10-28 19:54:29 +00:00
{ " Mobility SPI " , " mip6.auth.mobility_spi " ,
FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
{ & hf_mip6_opt_auth_auth_data ,
2012-10-28 19:54:29 +00:00
{ " Authentication Data " , " mip6.auth.auth_data " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
2014-10-25 23:44:56 +00:00
{ & hf_mip6_opt_mseg_id_timestamp ,
{ " Timestamp " , " mip6.mseg_id.timestamp " ,
FT_ABSOLUTE_TIME , ABSOLUTE_TIME_UTC , NULL , 0 ,
NULL , HFILL }
} ,
2012-10-24 13:44:25 +00:00
{ & hf_mip6_opt_cgar_cga_par ,
2012-10-28 19:54:29 +00:00
{ " CGA Parameters " , " mip6.cgar.cga_par " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
{ & hf_mip6_opt_sign_sign ,
2012-10-28 19:54:29 +00:00
{ " CGA Parameters " , " mip6.sign.sign " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
{ & hf_mip6_opt_phkt_phkt ,
2012-10-28 19:54:29 +00:00
{ " Permanent Home Keygen Token " , " mip6.phkt.phkt " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
{ & hf_mip6_opt_mocot_co_keygen_tok ,
2012-10-28 19:54:29 +00:00
{ " Care-of Keygen Token " , " mip6.mocot.co_keygen_tok " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
{ & hf_mip6_opt_dnsu_status ,
2012-10-28 19:54:29 +00:00
{ " Status " , " mip6.dnsu.status " ,
FT_UINT8 , BASE_DEC , VALS ( mip6_dnsu_status_values ) , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
{ & hf_mip6_opt_dnsu_flag_r ,
2012-10-28 19:54:29 +00:00
{ " R flag " , " mip6.dnsu.flag.r " ,
FT_BOOLEAN , 8 , TFS ( & mip6_dnsu_r_flag_value ) , 0x80 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
{ & hf_mip6_opt_dnsu_mn_id ,
2012-10-28 19:54:29 +00:00
{ " MN identity (FQDN) " , " mip6.dnsu.mn_id " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
{ & hf_mip6_opt_em_data ,
2012-10-28 19:54:29 +00:00
{ " Data " , " mip6.em.data " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
2012-10-25 12:54:37 +00:00
{ & hf_mip6_vsm_vid ,
2012-10-28 19:54:29 +00:00
{ " Vendor Id " , " mip6.vsm.vendorId " ,
FT_UINT32 , BASE_DEC | BASE_EXT_STRING , & sminmpec_values_ext , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_mip6_vsm_subtype ,
2012-10-28 19:54:29 +00:00
{ " Subtype " , " mip6.vsm.subtype " ,
FT_UINT8 , BASE_DEC , VALS ( mip6_vsm_subtype_value ) , 0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2012-10-25 16:15:58 +00:00
{ & hf_mip6_vsm_subtype_3gpp ,
2012-10-28 19:54:29 +00:00
{ " Subtype " , " mip6.vsm.subtype " ,
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & mip6_vsm_subtype_3gpp_value_ext , 0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2014-08-06 17:50:06 +00:00
{ & hf_mip6_opt_ss_identifier ,
{ " Identifier " , " mip6.ss.identifier " ,
FT_STRING , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2012-10-25 12:54:37 +00:00
{ & hf_mip6_opt_badff_spi ,
2012-10-28 19:54:29 +00:00
{ " SPI " , " mip6.badff.spi " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_mip6_opt_badff_auth ,
2012-10-28 19:54:29 +00:00
{ " Authenticator " , " mip6.badff.auth " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2012-10-25 16:15:58 +00:00
{ & hf_pmip6_hi_hi ,
2012-10-28 19:54:29 +00:00
{ " Handoff Indicator " , " mip6.hi " ,
FT_UINT8 , BASE_DEC , VALS ( pmip6_hi_opttype_value ) , 0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2012-10-25 15:57:05 +00:00
{ & hf_pmip6_hi_reserved ,
2012-10-28 19:54:29 +00:00
{ " Reserved " , " mip6.hi.reserved " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-25 15:57:05 +00:00
} ,
{ & hf_pmip6_att_reserved ,
2012-10-28 19:54:29 +00:00
{ " Reserved " , " mip6.att.reserved " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-25 15:57:05 +00:00
} ,
{ & hf_pmip6_att_att ,
2012-10-28 19:54:29 +00:00
{ " Access Technology Type " , " mip6.att " ,
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & pmip6_att_att_value_ext , 0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_mip6_opt_mnlli_reserved ,
2012-10-28 19:54:29 +00:00
{ " Reserved " , " mip6.mnlli.reserved " ,
FT_UINT16 , BASE_DEC , NULL , 0xffff ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_mip6_opt_mnlli_lli ,
2012-10-28 19:54:29 +00:00
{ " Link-layer Identifier " , " mip6.mnlli.lli " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_pmip6_timestamp ,
2012-10-28 19:54:29 +00:00
{ " Timestamp " , " mip6.timestamp_tmp " ,
FT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_pmip6_opt_lila_lla ,
2012-10-28 19:54:29 +00:00
{ " Link-local Address " , " mip6.lila_lla " ,
FT_IPv6 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_pmip6_rc ,
2012-10-28 19:54:29 +00:00
{ " Restart Counter " , " mip6.rc " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_mip6_ipv4ha_preflen ,
2012-10-28 19:54:29 +00:00
{ " Prefix-len " , " mip6.ipv4ha.preflen " ,
FT_UINT8 , BASE_DEC , NULL , 0xfc ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2012-10-24 13:44:25 +00:00
2012-10-25 12:54:37 +00:00
{ & hf_mip6_ipv4ha_p_flag ,
2012-10-28 19:54:29 +00:00
{ " mobile network prefix (P) flag " , " mip6.ipv4ha.p_flag " ,
FT_BOOLEAN , 16 , TFS ( & mip6_ipv4ha_p_flag_value ) , 0x0200 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2011-04-12 16:48:58 +00:00
2012-10-25 12:54:37 +00:00
{ & hf_mip6_ipv4ha_ha ,
2012-10-28 19:54:29 +00:00
{ " IPv4 Home Address " , " mip6.ipv4ha.ha " ,
FT_IPv4 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_mip6_ipv4aa_status ,
2012-10-28 19:54:29 +00:00
{ " Status " , " mip6.ipv4aa.sts " ,
FT_UINT8 , BASE_DEC , VALS ( pmip6_ipv4aa_status_values ) , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_mip6_opt_natd_f_flag ,
2012-10-28 19:54:29 +00:00
{ " (F) flag " , " mip6.natd.f_flag " ,
FT_BOOLEAN , 16 , TFS ( & mip6_natd_f_flag_value ) , 0x8000 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_mip6_opt_natd_reserved ,
2012-10-28 19:54:29 +00:00
{ " Reserved " , " mip6.natd.reserved " ,
FT_UINT16 , BASE_DEC , NULL , 0x7fff ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_mip6_opt_natd_refresh_t ,
2012-10-28 19:54:29 +00:00
{ " Refresh time " , " mip6.natd.refresh_t " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_mip6_opt_ipv4coa_reserved ,
2012-10-28 19:54:29 +00:00
{ " Reserved " , " mip6.ipv4coa.reserved " ,
FT_UINT16 , BASE_DEC , NULL , 0xffff ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
{ & hf_mip6_opt_ipv4coa_addr ,
2012-10-28 19:54:29 +00:00
{ " IPv4 Care-of address " , " mip6.ipv4coa.addr " ,
FT_IPv4 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2012-10-24 13:44:25 +00:00
{ & hf_pmip6_gre_key ,
2012-10-28 19:54:29 +00:00
{ " GRE Key " , " mip6.gre_key " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
2012-10-25 16:15:58 +00:00
{ & hf_mip6_opt_mhipv6ap_opt_code ,
2012-10-28 19:54:29 +00:00
{ " Option-Code " , " mip6.mhipv6ap.opt_code " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
2012-10-25 16:15:58 +00:00
{ & hf_mip6_opt_mhipv6ap_prefix_l ,
2012-10-28 19:54:29 +00:00
{ " Prefix Length " , " mip6.mhipv6ap.len " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
2014-10-18 14:31:01 +00:00
{ & hf_mip6_opt_mhipv6ap_ipv6_address ,
{ " IPv6 Address " , " mip6.mhipv6ap.ipv6_address " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_mhipv6ap_ipv6_address_prefix ,
{ " IPv6 Address/Prefix " , " mip6.mhipv6ap.ipv6_address_prefix " ,
FT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
2012-10-25 16:15:58 +00:00
{ & hf_mip6_opt_bi_bid ,
2012-10-28 19:54:29 +00:00
{ " Binding ID (BID) " , " mip6.bi.bid " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2012-10-25 16:15:58 +00:00
{ & hf_mip6_opt_bi_status ,
2012-10-28 19:54:29 +00:00
{ " Status " , " mip6.bi.status " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
2012-10-28 19:54:29 +00:00
{ & hf_mip6_bi_h_flag ,
{ " Simultaneous Home and Foreign Binding (H) " , " mip6.bi.h_flag " ,
FT_BOOLEAN , 8 , TFS ( & tfs_true_false ) , 0x80 ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
{ & hf_mip6_bi_coa_ipv4 ,
2012-10-28 19:54:29 +00:00
{ " IPv4 care-of address (CoA) " , " mip6.bi.coa_ipv4 " ,
FT_IPv4 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
{ & hf_mip6_bi_coa_ipv6 ,
2012-10-28 19:54:29 +00:00
{ " IPv6 care-of address (CoA) " , " mip6.bi.coa_ipv6 " ,
FT_IPv6 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2015-08-10 23:28:54 +00:00
{ & hf_mip6_binding_refresh_request ,
{ " Binding Refresh Request " , " mip6.binding_refresh_request " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2015-12-11 01:24:45 +00:00
{ & hf_mip6_unknown_type_data ,
{ " Message Data " , " mip6.unknown_type_data " ,
2015-08-10 23:28:54 +00:00
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_fast_neighbor_advertisement ,
{ " Fast Neighbor Advertisement " , " mip6.fast_neighbor_advertisement " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_vsm_data ,
{ " Data " , " mip6.vsm.data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_vsm_req_data ,
{ " Req-Data " , " mip6.vsm.req_data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_padn ,
{ " PadN " , " mip6.padn " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_option_unknown ,
{ " Option " , " mip6.option_unknown " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2012-10-25 16:15:58 +00:00
{ & hf_mip6_ipv4dra_reserved ,
2012-10-28 19:54:29 +00:00
{ " Reserved " , " mip6.ipv4dra.reserved " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-25 15:57:05 +00:00
} ,
2012-10-25 12:54:37 +00:00
{ & hf_mip6_ipv4dra_dra ,
2012-10-28 19:54:29 +00:00
{ " IPv4 Default-Router Address " , " mip6.ipv4dra.dra " ,
FT_IPv4 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2012-10-26 13:29:02 +00:00
{ & hf_mip6_ipv4dsm_reserved ,
2012-10-28 19:54:29 +00:00
{ " Reserved " , " mip6.ipv4dsm.reserved " ,
FT_UINT16 , BASE_DEC , NULL , 0xfffe ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
{ & hf_mip6_ipv4dsm_s_flag ,
2012-10-28 19:54:29 +00:00
{ " DHCP Support Mode (S) " , " mip6.ipv4dsm.s_flag " ,
FT_BOOLEAN , 16 , TFS ( & mip6_ipv4dsm_s_flag_value ) , 0x0001 ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
{ & hf_mip6_cr_reserved ,
2012-10-28 19:54:29 +00:00
{ " Reserved " , " mip6.cr.reserved " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
2011-04-12 16:48:58 +00:00
2012-10-26 13:29:02 +00:00
{ & hf_mip6_cr_req_type ,
2014-11-07 03:10:11 +00:00
{ " Req-type " , " mip6.cr.req_type " ,
2012-10-28 19:54:29 +00:00
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & mip6_mobility_options_ext , 0 ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
{ & hf_mip6_cr_req_length ,
2014-11-08 14:50:26 +00:00
{ " Req-length " , " mip6.cr.req_length " ,
2012-10-28 19:54:29 +00:00
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
{ & hf_mip6_lmaa_opt_code ,
2014-11-07 03:10:11 +00:00
{ " Option-Code " , " mip6.lmaa.opt_code " ,
2012-10-28 19:54:29 +00:00
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
{ & hf_mip6_lmaa_reserved ,
2014-11-07 03:10:11 +00:00
{ " Reserved " , " mip6.lmaa.reserved " ,
2012-10-28 19:54:29 +00:00
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
{ & hf_mip6_lmaa_ipv4 ,
2012-10-28 19:54:29 +00:00
{ " Local Mobility Anchor Address " , " mip6.lmaa.ipv4 " ,
FT_IPv4 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
{ & hf_mip6_lmaa_ipv6 ,
2012-10-28 19:54:29 +00:00
{ " Local Mobility Anchor Address " , " mip6.lmaa.ipv6 " ,
FT_IPv6 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
2012-10-26 13:29:02 +00:00
} ,
2015-04-01 12:11:28 +00:00
{ & hf_mip6_mobility ,
{ " Mobility " , " mip6.mobility " ,
FT_STRING , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
2012-10-25 12:54:37 +00:00
{ & hf_mip6_mobility_opt ,
2012-10-28 19:54:29 +00:00
{ " Mobility Option " , " mip6.mobility_opt " ,
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & mip6_mobility_options_ext , 0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2012-10-25 16:15:58 +00:00
{ & hf_mip6_opt_len ,
2012-10-28 19:54:29 +00:00
{ " Length " , " mip6.mobility_opt.len " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
2012-10-25 12:54:37 +00:00
{ & hf_pmip6_bri_brtype ,
2012-10-28 19:54:29 +00:00
{ " B.R. Type " , " mip6.bri_br.type " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2011-04-12 16:48:58 +00:00
2012-10-25 12:54:37 +00:00
{ & hf_pmip6_bri_rtrigger ,
2012-10-28 19:54:29 +00:00
{ " R. Trigger " , " mip6.bri_r.trigger " ,
FT_UINT8 , BASE_DEC , VALS ( pmip6_bri_rtrigger ) , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2011-04-12 16:48:58 +00:00
2012-10-25 12:54:37 +00:00
{ & hf_pmip6_bri_status ,
2012-10-28 19:54:29 +00:00
{ " Status " , " mip6.bri_status " ,
FT_UINT8 , BASE_DEC , VALS ( pmip6_bri_status ) , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2011-04-12 16:48:58 +00:00
2012-10-25 12:54:37 +00:00
{ & hf_pmip6_bri_seqnr ,
2012-10-28 19:54:29 +00:00
{ " Sequence Number " , " mip6.bri_seqnr " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
2012-10-25 12:54:37 +00:00
} ,
2011-04-12 16:48:58 +00:00
2012-10-28 19:54:29 +00:00
{ & hf_pmip6_bri_ip_flag ,
{ " Proxy Binding (P) Flag " , " mip6.bri_ip " ,
2014-04-19 16:52:21 +00:00
FT_BOOLEAN , 16 , TFS ( & tfs_set_notset ) , 0x8000 ,
2012-10-28 19:54:29 +00:00
NULL , HFILL }
} ,
2011-04-12 16:48:58 +00:00
2014-04-19 16:52:21 +00:00
{ & hf_pmip6_bri_iv_flag ,
{ " IPv4 HoA Binding Only (V) Flag " , " mip6.bri_iv " ,
FT_BOOLEAN , 16 , TFS ( & tfs_set_notset ) , 0x4000 ,
2012-10-28 19:54:29 +00:00
NULL , HFILL }
} ,
2011-04-12 16:48:58 +00:00
2012-10-28 19:54:29 +00:00
{ & hf_pmip6_bri_ig_flag ,
{ " Global (G) Flag " , " mip6.bri_ig " ,
2014-04-19 16:52:21 +00:00
FT_BOOLEAN , 16 , TFS ( & tfs_set_notset ) , 0x2000 ,
2012-10-28 19:54:29 +00:00
NULL , HFILL }
} ,
2011-04-12 16:48:58 +00:00
2012-10-28 19:54:29 +00:00
{ & hf_pmip6_bri_ap_flag ,
{ " Proxy Binding (P) Flag " , " mip6.bri_ap " ,
2014-04-19 16:52:21 +00:00
FT_BOOLEAN , 16 , TFS ( & tfs_set_notset ) , 0x8000 ,
NULL , HFILL }
} ,
{ & hf_pmip6_bri_av_flag ,
{ " IPv4 HoA Binding Only (V) Flag " , " mip6.bri_av " ,
FT_BOOLEAN , 16 , TFS ( & tfs_set_notset ) , 0x4000 ,
2012-10-28 19:54:29 +00:00
NULL , HFILL }
} ,
2011-04-12 16:48:58 +00:00
2012-10-28 19:54:29 +00:00
{ & hf_pmip6_bri_ag_flag ,
{ " Global (G) Flag " , " mip6.bri_ag " ,
2014-04-19 16:52:21 +00:00
FT_BOOLEAN , 16 , TFS ( & tfs_set_notset ) , 0x2000 ,
2012-10-28 19:54:29 +00:00
NULL , HFILL }
} ,
2011-04-12 16:48:58 +00:00
2012-10-25 16:15:58 +00:00
{ & hf_pmip6_bri_res ,
2014-04-19 16:52:21 +00:00
{ " Reserved " , " mip6.bri_res " ,
FT_UINT16 , BASE_HEX , NULL , 0x1FFF ,
" Must be zero " , HFILL }
2012-10-24 13:44:25 +00:00
} ,
2015-03-17 12:55:52 +00:00
{ & hf_pmip6_lri_sequence ,
{ " Sequence " , " mip6.lri.sequence " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
" A monotonically increasing integer " , HFILL }
} ,
{ & hf_pmip6_lri_reserved ,
{ " Reserved " , " mip6.lri.reserved " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
" This field is unused and MUST be set to zero " , HFILL }
} ,
{ & hf_pmip6_lri_lifetime ,
{ " Lifetime " , " mip6.lri.lifetime " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
" The requested time, in seconds " , HFILL }
} ,
{ & hf_pmip6_lra_sequence ,
{ " Sequence " , " mip6.lra.sequence " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
" A monotonically increasing integer " , HFILL }
} ,
{ & hf_pmip6_lra_u ,
2016-02-20 15:32:07 +00:00
{ " unsolicited " , " mip6.lri.unsolicated " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
" When set to 1, the LRA message is sent unsolicited " , HFILL }
2015-03-17 12:55:52 +00:00
} ,
{ & hf_pmip6_lra_reserved ,
{ " Reserved " , " mip6.lra.reserved " ,
FT_UINT8 , BASE_HEX , NULL , 0x7F ,
" This field is unused and MUST be set to zero " , HFILL }
} ,
{ & hf_pmip6_lra_status ,
{ " Status " , " mip6.lra.status " ,
FT_UINT8 , BASE_DEC , VALS ( pmip6_lra_status_vals ) , 0x0 ,
2016-01-06 00:58:42 +00:00
" Indicating the result of processing the Localized Routing Acknowledgment message. " , HFILL }
2015-03-17 12:55:52 +00:00
} ,
{ & hf_pmip6_lra_lifetime ,
{ " Lifetime " , " mip6.lra.lifetime " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
" The requested time, in seconds " , HFILL }
} ,
2014-05-05 16:12:32 +00:00
{ & hf_mip6_opt_recap_reserved ,
{ " Reserved " , " mip6.recap.reserved " ,
FT_UINT16 , BASE_HEX , NULL , 0x0 ,
" Must be zero " , HFILL }
} ,
{ & hf_mip6_opt_redir_k ,
{ " K " , " mip6.redir.k " ,
FT_BOOLEAN , 16 , NULL , MIP6_REDIR_FLAG_K ,
" bit is set (1) if the Optional IPv6 r2LMA Address is included in the mobility option " , HFILL }
} ,
{ & hf_mip6_opt_redir_n ,
{ " N " , " mip6.redir.n " ,
2014-10-25 23:44:56 +00:00
FT_BOOLEAN , 16 , NULL , MIP6_REDIR_FLAG_N ,
2014-05-05 16:12:32 +00:00
" bit is set (1) if the Optional IPv4 r2LMA Address is included in the mobility option " , HFILL }
} ,
{ & hf_mip6_opt_redir_reserved ,
{ " Reserved " , " mip6.redir.reserved " ,
FT_UINT16 , BASE_HEX , NULL , MIP6_REDIR_FLAG_RSV ,
" Must be zero " , HFILL }
} ,
{ & hf_mip6_opt_redir_addr_r2LMA_ipv6 ,
{ " IPv6 r2LMA Address " , " mip6.redir.addr_r2lma_ipv6 " ,
FT_IPv6 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_redir_addr_r2LMA_ipv4 ,
{ " IPv4 r2LMA Address " , " mip6.redir.addr_r2lma_ipv4 " ,
FT_IPv4 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_load_inf_priority ,
{ " Priority " , " mip6.load_inf.priority " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_load_inf_sessions_in_use ,
{ " Sessions in Use " , " mip6.load_inf.sessions_in_use " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_load_inf_maximum_sessions ,
{ " Maximum Sessions " , " mip6.load_inf.maximum_sessions " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_load_inf_used_capacity ,
{ " Used Capacity " , " mip6.load_inf.used_capacity " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_load_inf_maximum_capacity ,
{ " Maximum Capacity " , " mip6.load_inf.maximum_capacity " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_alt_ip4 ,
{ " Alternate IPv4 Care-of Address " , " mip6.alt_ip4 " ,
FT_IPv4 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2012-10-24 13:44:25 +00:00
{ & hf_mip6_opt_mng_sub_type ,
2012-10-28 19:54:29 +00:00
{ " Sub Type " , " mip6.mng.sub_type " ,
FT_UINT8 , BASE_DEC , VALS ( mip6_mng_id_type_vals ) , 0x0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
{ & hf_mip6_opt_mng_reserved ,
2012-10-28 19:54:29 +00:00
{ " Reserved " , " mip6.mng.reserved " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
{ & hf_mip6_opt_mng_mng_id ,
2014-06-19 19:39:39 +00:00
{ " Mobile Node Group Identifier " , " mip6.mng.mng_id " ,
2012-10-28 19:54:29 +00:00
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
2012-10-24 13:44:25 +00:00
} ,
2014-09-23 15:02:13 +00:00
2015-03-17 12:55:52 +00:00
{ & hf_mip6_opt_mag_ipv6_reserved ,
{ " Reserved " , " mip6.mag_ipv6.reserved " ,
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_mag_ipv6_address_length ,
{ " Address Length " , " mip6.mag_ipv6.address_length " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
" This field MUST be set to 128 " , HFILL }
} ,
{ & hf_mip6_opt_mag_ipv6_address ,
{ " Address " , " mip6.mag_ipv6.address " ,
FT_IPv6 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2014-11-19 18:18:39 +00:00
{ & hf_mip6_opt_acc_net_id_sub ,
{ " ANI " , " mip6.acc_net_id " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2014-09-23 15:02:13 +00:00
{ & hf_mip6_opt_acc_net_id_sub_opt ,
{ " ANI Type " , " mip6.acc_net_id.ani " ,
FT_UINT8 , BASE_DEC , VALS ( mmip6_opt_acc_net_id_sub_opt_vals ) , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_acc_net_id_sub_opt_len ,
{ " Length " , " mip6.acc_net_id.sub_opt_len " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_acc_net_id_sub_opt_e_bit ,
{ " E(Encoding) " , " mip6.acc_net_id.e_bit " ,
FT_BOOLEAN , 8 , TFS ( & mip6_opt_acc_net_id_sub_opt_e_bit_value ) , 0x80 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_acc_net_id_sub_opt_net_name_len ,
{ " Net-Name Length " , " mip6.acc_net_id.net_name_len " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_acc_net_id_sub_opt_net_name ,
{ " Network Name " , " mip6.acc_net_id.net_name " ,
2014-11-19 18:18:39 +00:00
FT_STRING , BASE_NONE , NULL , 0x0 ,
2014-09-23 15:02:13 +00:00
NULL , HFILL }
} ,
2014-11-19 18:18:39 +00:00
{ & hf_mip6_opt_acc_net_id_sub_opt_net_name_data ,
{ " Network Name " , " mip6.acc_net_id.net_name_data " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
" Network Name with undefined format " , HFILL }
} ,
2014-09-23 15:02:13 +00:00
{ & hf_mip6_opt_acc_net_id_sub_opt_ap_name_len ,
{ " AP-Name Length " , " mip6.acc_net_id.ap_name_len " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_acc_net_id_sub_opt_ap_name ,
{ " Access-Point Name " , " mip6.acc_net_id.ap_name " ,
2014-11-19 18:18:39 +00:00
FT_STRING , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_acc_net_id_sub_opt_geo_latitude_degrees ,
{ " Latitude Degrees " , " mip6.acc_net_id.geo.latitude_degrees " ,
2015-02-16 01:58:12 +00:00
FT_INT24 , BASE_CUSTOM , CF_FUNC ( degrees_base_custom ) , 0x0 ,
2014-09-23 15:02:13 +00:00
NULL , HFILL }
} ,
2014-11-19 18:18:39 +00:00
{ & hf_mip6_opt_acc_net_id_sub_opt_geo_longitude_degrees ,
{ " Longitude Degrees " , " mip6.acc_net_id.geo.longitude_degrees " ,
2015-02-16 01:58:12 +00:00
FT_INT24 , BASE_CUSTOM , CF_FUNC ( degrees_base_custom ) , 0x0 ,
2014-11-19 18:18:39 +00:00
NULL , HFILL }
} ,
{ & hf_mip6_opt_acc_net_id_sub_opt_op_id_type ,
{ " Op-ID Type " , " mip6.acc_net_id.op_id.type " ,
FT_UINT8 , BASE_DEC , VALS ( mip6_opt_acc_net_id_sub_opt_op_id_type ) , 0x0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_acc_net_id_sub_opt_op_id ,
{ " Op-ID " , " mip6.acc_net_id.op_id " ,
FT_BYTES , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2015-09-18 12:08:38 +00:00
{ & hf_mip6_opt_dmnp_v_flag ,
{ " IPv4 Prefix (V) flag " , " mip6.dmnp.v_flag " ,
FT_BOOLEAN , 8 , TFS ( & mip6_dmnp_v_flag_value ) , 0x80 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_dmnp_reserved ,
{ " Reserved " , " mip6.dmnp.reserved " ,
FT_UINT8 , BASE_DEC , NULL , 0x7F ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_dmnp_prefix_len ,
{ " Prefix Length " , " mip6.dmnp.prefix_len " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_dmnp_dmnp_ipv4 ,
{ " IPv4 Delegated Mobile Network Prefix " , " mip6.dmnp.dmnp_ipv4 " ,
FT_IPv4 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_mip6_opt_dmnp_dmnp_ipv6 ,
{ " IPv6 Delegated Mobile Network Prefix " , " mip6.dmnp.dmnp_ipv6 " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
2012-10-24 13:44:25 +00:00
} ;
2011-04-12 16:48:58 +00:00
/* Setup protocol subtree array */
static gint * ett [ ] = {
& ett_mip6 ,
2012-10-25 16:15:58 +00:00
& ett_mip6_opts ,
2012-10-28 19:54:29 +00:00
& ett_mip6_opt_pad1 ,
2011-04-12 16:48:58 +00:00
& ett_mip6_opt_padn ,
& ett_mip6_opt_bra ,
& ett_mip6_opt_acoa ,
& ett_mip6_opt_ni ,
& ett_mip6_opt_bad ,
& ett_fmip6_opt_lla ,
& ett_mip6_nemo_opt_mnp ,
& ett_mip6_opt_mnid ,
2012-10-25 16:15:58 +00:00
& ett_mip6_opt_auth ,
& ett_mip6_opt_mesgid ,
& ett_mip6_opt_cgapr ,
& ett_mip6_opt_cgar ,
& ett_mip6_opt_sign ,
& ett_mip6_opt_phkt ,
& ett_mip6_opt_mocoti ,
& ett_mip6_opt_mocot ,
& ett_mip6_opt_dnsu ,
& ett_mip6_opt_em ,
2011-04-12 16:48:58 +00:00
& ett_mip6_opt_vsm ,
& ett_mip6_opt_ssm ,
2012-10-25 16:15:58 +00:00
& ett_mip6_opt_badff ,
2014-11-14 03:38:54 +00:00
& ett_mip6_opt_unknown ,
2011-04-12 16:48:58 +00:00
& ett_pmip6_opt_hnp ,
& ett_pmip6_opt_hi ,
& ett_pmip6_opt_att ,
2012-10-25 16:15:58 +00:00
& ett_pmip6_opt_mnlli ,
2011-04-12 16:48:58 +00:00
& ett_pmip6_opt_lla ,
& ett_pmip6_opt_ts ,
& ett_pmip6_opt_rc ,
& ett_mip6_opt_ipv4ha ,
& ett_mip6_opt_ipv4aa ,
2012-10-25 16:15:58 +00:00
& ett_mip6_opt_natd ,
& ett_mip6_opt_ipv4coa ,
2011-04-12 16:48:58 +00:00
& ett_pmip6_opt_grek ,
2012-10-25 16:15:58 +00:00
& ett_pmip6_opt_mhipv6ap ,
& ett_pmip6_opt_bi ,
2011-04-12 16:48:58 +00:00
& ett_mip6_opt_ipv4hareq ,
& ett_mip6_opt_ipv4harep ,
& ett_mip6_opt_ipv4dra ,
2012-10-28 19:54:29 +00:00
& ett_mip6_opt_ipv4dsm ,
& ett_mip6_opt_cr ,
& ett_mip6_opt_lmaa ,
2014-05-05 16:12:32 +00:00
& ett_mip6_opt_recap ,
& ett_mip6_opt_redir ,
& ett_mip6_opt_load_inf ,
& ett_mip6_opt_alt_ip4 ,
2012-10-25 16:15:58 +00:00
& ett_mip6_opt_mng ,
2014-09-23 15:02:13 +00:00
& ett_mip6_opt_mag_ipv6 ,
& ett_mip6_opt_acc_net_id ,
2014-11-19 18:18:39 +00:00
& ett_mip6_sub_opt_acc_net_id ,
2015-09-18 12:08:38 +00:00
& ett_mip6_opt_dmnp ,
2011-04-12 16:48:58 +00:00
} ;
2013-05-27 17:30:43 +00:00
static ei_register_info ei [ ] = {
{ & ei_mip6_ie_not_dissected , { " mip6.ie_not_dissected " , PI_UNDECODED , PI_NOTE , " IE data not dissected yet " , EXPFILL } } ,
2014-11-19 18:18:39 +00:00
{ & ei_mip6_ani_type_not_dissected , { " mip6.acc_net_id.ani.unknown " , PI_UNDECODED , PI_NOTE , " ANI Type not dissect yet " , EXPFILL } } ,
2015-04-01 12:11:28 +00:00
{ & ei_mip6_opt_len_invalid , { " mip6.opt.len.invalid " , PI_PROTOCOL , PI_WARN , " Invalid length for option " , EXPFILL } } ,
2015-08-10 23:28:54 +00:00
{ & ei_mip6_vsm_data_not_dissected , { " mip6.vsm.data_not_dissected " , PI_UNDECODED , PI_NOTE , " Data (Not dissected yet) " , EXPFILL } } ,
{ & ei_mip6_bogus_header_length , { " mip6.bogus_header_length " , PI_PROTOCOL , PI_WARN , " Bogus header length " , EXPFILL } } ,
2013-05-27 17:30:43 +00:00
} ;
expert_module_t * expert_mip6 ;
2011-04-12 16:48:58 +00:00
/* Register the protocol name and description */
2015-12-11 02:37:34 +00:00
proto_mip6 = proto_register_protocol ( " Mobile IPv6 " , " MIPv6 " , " mipv6 " ) ;
2011-04-12 16:48:58 +00:00
/* Register the dissector by name */
2016-01-13 01:16:04 +00:00
mip6_handle = register_dissector ( " mip6 " , dissect_mip6 , proto_mip6 ) ;
2011-04-12 16:48:58 +00:00
/* Required function calls to register the header fields and subtrees used */
proto_register_field_array ( proto_mip6 , hf , array_length ( hf ) ) ;
proto_register_subtree_array ( ett , array_length ( ett ) ) ;
2013-05-27 17:30:43 +00:00
expert_mip6 = expert_register_protocol ( proto_mip6 ) ;
expert_register_field_array ( expert_mip6 , ei , array_length ( ei ) ) ;
2013-04-16 18:13:40 +00:00
2016-03-13 11:51:45 +00:00
mip6_vsm_dissector_table = register_dissector_table ( " mip6.vsm " , " Mobile IPv6 vendor specific option " , proto_mip6 , FT_UINT32 , BASE_DEC , DISSECTOR_TABLE_NOT_ALLOW_DUPLICATE ) ;
2003-12-21 05:51:34 +00:00
}
2003-02-04 20:17:01 +00:00
void
proto_reg_handoff_mip6 ( void )
{
2011-04-12 16:48:58 +00:00
dissector_add_uint ( " ip.proto " , IP_PROTO_MIPV6_OLD , mip6_handle ) ;
dissector_add_uint ( " ip.proto " , IP_PROTO_MIPV6 , mip6_handle ) ;
2012-06-27 13:27:28 +00:00
/* Add support for PMIPv6 control messages over IPV4 */
dissector_add_uint ( " udp.port " , UDP_PORT_PMIP6_CNTL , mip6_handle ) ;
2011-04-12 16:48:58 +00:00
ip_dissector_table = find_dissector_table ( " ip.proto " ) ;
2013-04-16 18:13:40 +00:00
2015-12-09 03:49:44 +00:00
dissector_add_uint ( " mip6.vsm " , VENDOR_THE3GPP , create_dissector_handle ( dissect_mip6_opt_vsm_3gpp , proto_mip6 ) ) ;
2003-02-04 20:17:01 +00:00
}
2014-02-08 14:28:53 +00:00
/*
* Editor modelines - http : //www.wireshark.org/tools/modelines.html
*
* Local variables :
* c - basic - offset : 4
* tab - width : 8
* indent - tabs - mode : nil
* End :
*
* vi : set shiftwidth = 4 tabstop = 8 expandtab :
* : indentSize = 4 : tabSize = 8 : noTabs = true :
*/