1999-06-11 16:45:02 +00:00
/* packet-rsvp.c
* Routines for RSVP packet disassembly
*
* ( c ) Copyright Ashok Narayanan < ashokn @ cisco . com >
*
2006-05-21 04:49:01 +00:00
* Wireshark - Network traffic analyzer
* By Gerald Combs < gerald @ wireshark . org >
1999-06-11 16:45:02 +00:00
* Copyright 1998 Gerald Combs
2002-08-28 21:04:11 +00:00
*
1999-06-11 16:45:02 +00:00
* 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 .
2002-08-28 21:04:11 +00:00
*
1999-06-11 16:45:02 +00:00
* 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 .
2002-08-28 21:04:11 +00:00
*
1999-06-11 16:45:02 +00:00
* 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 22:56:06 +00:00
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA .
1999-06-11 16:45:02 +00:00
*/
/*
* NOTES
*
* This module defines routines to disassemble RSVP packets , as defined in
2002-04-24 20:06:06 +00:00
* RFC 2205. All objects from RFC2205 are supported , in IPv4 and IPv6 mode .
1999-06-11 16:45:02 +00:00
* In addition , the Integrated Services traffic specification objects
2002-08-28 21:04:11 +00:00
* defined in RFC2210 are also supported .
1999-06-11 16:45:02 +00:00
*
* IPv6 support is not completely tested
2000-03-09 18:31:51 +00:00
*
2002-08-28 21:04:11 +00:00
* Mar 3 , 2000 : Added support for MPLS / TE objects , as defined in
2000-03-09 18:31:51 +00:00
* < draft - ietf - mpls - rsvp - lsp - tunnel - 04. txt >
2004-07-21 05:57:30 +00:00
*
* May 6 , 2004 : Added support for E - NNI objects , as defined in
* < OIF - E - NNI - 01.0 > ( Roberto Morro )
* < roberto . morro [ AT ] tilab . com >
*
* May 6 , 2004 : Modified some UNI objects , as defined in
* < OIF2003 .249 .09 > ( Roberto Morro )
* < roberto . morro [ AT ] tilab . com >
2005-06-06 13:55:47 +00:00
*
* June 2 , 2005 : Modified more UNI objects to show correct TNA
* addresses ; Fixed LSP interface ID subobject ( Richard Rabbat )
* < richard [ AT ] us . fujitsu . com >
*
2005-07-25 19:52:08 +00:00
* July 25 , 2005 : improved ERROR and LABEL_SET objects dissector ;
* new ASSOCIATION object dissector ( Roberto Morro )
* < roberto . morro [ AT ] tilab . com >
2005-09-07 19:52:44 +00:00
*
* August 22 , 2005 : added support for tapping and conversations .
* ( Manu Pathak ) < mapathak [ AT ] cisco . com >
2006-07-13 05:57:20 +00:00
*
* July 4 , 2006 : added support for RFC4124 ; new CLASSTYPE object dissector
* ( FF ) < francesco . fondelli [ AT ] gmail . com >
2008-04-14 19:43:39 +00:00
*
* June 9 , 2007 : added support for draft - ietf - ccamp - ethernet - traffic - parameters - 02
* and draft - ietf - ccamp - lsp - hierarchy - bis - 02 ; added support for NOTIFY_REQUEST
* and RECOVERY_LABEL objects ( Roberto Morro ) * < roberto . morro [ AT ] tilab . com >
2009-10-27 06:05:02 +00:00
*
* Oct 21 , 2009 : add support for RFC4328 , new G .709 traffic parameters ,
* update gpid , switching and encoding type values to actual IANA numbers .
* ( FF ) < francesco . fondelli [ AT ] gmail . com >
2010-03-06 12:48:30 +00:00
*
* Gen 20 , 2010 : add support for ERROR_STRING IF_ID TLV ( see RFC 4783 )
* ( FF ) < francesco . fondelli [ AT ] gmail . com >
*
* Feb 12 , 2010 : add support for generalized label interpretation : SUKLM
2010-05-10 15:54:57 +00:00
* format for SONET / SDH label ( RFC 4606 ) , t3t2t1 format for G .709 ODUk label
2010-03-06 12:48:30 +00:00
* ( RFC 4328 ) , G .694 format for lambda label ( draft - ietf - ccamp - gmpls - g - 694 - lamb
2010-05-10 15:54:57 +00:00
* da - labels - 05 ) . Add related user preference option .
* ( FF ) < francesco . fondelli [ AT ] gmail . com >
2011-01-05 07:16:09 +00:00
*
2011-01-15 03:25:43 +00:00
* Dec 3 , 2010 : add support for vendor private class object and ERO / RRO
2011-01-05 07:16:09 +00:00
* sub - object ( see RFC 3936 ) .
* ( FF ) < francesco . fondelli [ AT ] gmail . com >
2011-01-27 16:08:41 +00:00
*
* Dec 21 , 2010 : add new PROTECTION obj c - type 2 ( RFC4872 ) ,
* new TLVs for IF_ID ( RFC4920 ) , Path Key subobj in ERO ( RFC5520 ) ,
* new ASSOCIATION obj c - type 4 ( oif2008 .389 ) , new LSP_ATTRIBUTES and
* LSP_REQUIRED_ATTRIBUTES objects ( RFC5420 ) , improved ERROR object dissection ,
* new ADMIN_STATUS flags and fix to conversation ( not applied to ACK , SREFRESH
* and HELLO messages ) .
* ( Roberto Morro ) < roberto . morro [ AT ] telecomitalia . it >
*
2013-08-07 23:07:15 +00:00
* Jul 20 , 2013 : add support for Exclude Routes ( XRO ) ( see RFC 4874 )
* ( FF ) < francesco . fondelli [ AT ] gmail . com >
*
1999-06-11 16:45:02 +00:00
*/
2011-01-27 16:08:41 +00:00
2012-09-20 02:03:38 +00:00
# include "config.h"
1999-06-11 16:45:02 +00:00
1999-07-13 02:53:26 +00:00
# ifdef HAVE_UNISTD_H
1999-06-11 16:45:02 +00:00
# include <unistd.h>
1999-07-13 02:53:26 +00:00
# endif
2000-08-11 13:37:21 +00:00
# include <glib.h>
2002-01-21 07:37:49 +00:00
# include <epan/packet.h>
2013-11-10 15:59:37 +00:00
# include <epan/exceptions.h>
2002-07-15 21:19:56 +00:00
# include <prefs.h>
2013-12-21 17:23:17 +00:00
# include <epan/to_str.h>
2004-09-28 00:06:32 +00:00
# include <epan/in_cksum.h>
2005-09-17 00:02:31 +00:00
# include <epan/etypes.h>
2004-09-29 00:52:45 +00:00
# include <epan/ipproto.h>
2005-09-07 19:52:44 +00:00
# include <epan/conversation.h>
# include <epan/tap.h>
2011-01-05 07:16:09 +00:00
# include <epan/sminmpec.h>
2013-09-15 18:13:02 +00:00
# include <epan/wmem/wmem.h>
1999-06-11 16:45:02 +00:00
2002-04-14 23:04:04 +00:00
# include "packet-rsvp.h"
2001-12-29 00:43:55 +00:00
# include "packet-ip.h"
2003-10-10 21:16:24 +00:00
# include "packet-diffserv-mpls-common.h"
2011-01-27 16:08:41 +00:00
# include "packet-osi.h"
2001-12-29 00:43:55 +00:00
2007-05-22 22:55:09 +00:00
/* RSVP over UDP encapsulation */
# define UDP_PORT_PRSVP 3455
2013-04-02 05:54:47 +00:00
void proto_register_rsvp ( void ) ;
void proto_reg_handoff_rsvp ( void ) ;
1999-07-29 05:47:07 +00:00
static int proto_rsvp = - 1 ;
2012-09-24 01:59:34 +00:00
static int hf_rsvp_error_flags = - 1 ;
static int hf_rsvp_error_flags_path_state_removed = - 1 ;
static int hf_rsvp_error_flags_not_guilty = - 1 ;
static int hf_rsvp_error_flags_in_place = - 1 ;
static int hf_rsvp_eth_tspec_tlv_color_mode = - 1 ;
static int hf_rsvp_eth_tspec_tlv_coupling_flag = - 1 ;
static int hf_rsvp_sender_tspec_standard_contiguous_concatenation = - 1 ;
static int hf_rsvp_sender_tspec_arbitrary_contiguous_concatenation = - 1 ;
static int hf_rsvp_sender_tspec_regenerator_section = - 1 ;
static int hf_rsvp_sender_tspec_multiplex_section = - 1 ;
static int hf_rsvp_sender_tspec_J0_transparency = - 1 ;
static int hf_rsvp_sender_tspec_SOH_RSOH_DCC_transparency = - 1 ;
static int hf_rsvp_sender_tspec_LOH_MSOH_DCC_transparency = - 1 ;
static int hf_rsvp_sender_tspec_LOH_MSOH_extended_DCC_transparency = - 1 ;
static int hf_rsvp_sender_tspec_K1_K2_transparency = - 1 ;
static int hf_rsvp_sender_tspec_E1_transparency = - 1 ;
static int hf_rsvp_sender_tspec_F1_transparency = - 1 ;
static int hf_rsvp_sender_tspec_E2_transparency = - 1 ;
static int hf_rsvp_sender_tspec_B1_transparency = - 1 ;
static int hf_rsvp_sender_tspec_B2_transparency = - 1 ;
static int hf_rsvp_sender_tspec_M0_transparency = - 1 ;
static int hf_rsvp_sender_tspec_M1_transparency = - 1 ;
static int hf_rsvp_flowspec_standard_contiguous_concatenation = - 1 ;
static int hf_rsvp_flowspec_arbitrary_contiguous_concatenation = - 1 ;
static int hf_rsvp_flowspec_regenerator_section = - 1 ;
static int hf_rsvp_flowspec_multiplex_section = - 1 ;
static int hf_rsvp_flowspec_J0_transparency = - 1 ;
static int hf_rsvp_flowspec_SOH_RSOH_DCC_transparency = - 1 ;
static int hf_rsvp_flowspec_LOH_MSOH_DCC_transparency = - 1 ;
static int hf_rsvp_flowspec_LOH_MSOH_extended_DCC_transparency = - 1 ;
static int hf_rsvp_flowspec_K1_K2_transparency = - 1 ;
static int hf_rsvp_flowspec_E1_transparency = - 1 ;
static int hf_rsvp_flowspec_F1_transparency = - 1 ;
static int hf_rsvp_flowspec_E2_transparency = - 1 ;
static int hf_rsvp_flowspec_B1_transparency = - 1 ;
static int hf_rsvp_flowspec_B2_transparency = - 1 ;
static int hf_rsvp_flowspec_M0_transparency = - 1 ;
static int hf_rsvp_flowspec_M1_transparency = - 1 ;
static int hf_rsvp_integrity_flags_handshake = - 1 ;
static int hf_rsvp_sa_flags_local = - 1 ;
static int hf_rsvp_sa_flags_label = - 1 ;
static int hf_rsvp_sa_flags_se_style = - 1 ;
static int hf_rsvp_sa_flags_bandwidth = - 1 ;
static int hf_rsvp_sa_flags_node = - 1 ;
static int hf_rsvp_rro_flags_local_avail = - 1 ;
static int hf_rsvp_rro_flags_local_in_use = - 1 ;
static int hf_rsvp_rro_flags_bandwidth = - 1 ;
static int hf_rsvp_rro_flags_node = - 1 ;
static int hf_rsvp_rro_flags_node_address = - 1 ;
static int hf_rsvp_rro_flags_backup_tunnel_bandwidth = - 1 ;
static int hf_rsvp_rro_flags_backup_tunnel_hop = - 1 ;
2012-10-30 09:13:13 +00:00
static int hf_rsvp_rro_flags_global_label = - 1 ;
2012-09-24 01:59:34 +00:00
static int hf_rsvp_lsp_attr_e2e = - 1 ;
static int hf_rsvp_lsp_attr_boundary = - 1 ;
static int hf_rsvp_lsp_attr_segment = - 1 ;
2013-08-07 23:07:15 +00:00
static int hf_rsvp_lsp_attr_integrity = - 1 ;
static int hf_rsvp_lsp_attr_contiguous = - 1 ;
static int hf_rsvp_lsp_attr_stitching = - 1 ;
static int hf_rsvp_lsp_attr_preplanned = - 1 ;
static int hf_rsvp_lsp_attr_nophp = - 1 ;
static int hf_rsvp_lsp_attr_oobmap = - 1 ;
static int hf_rsvp_lsp_attr_entropy = - 1 ;
static int hf_rsvp_lsp_attr_srlgcollect = - 1 ;
static int hf_rsvp_lsp_attr_costcollect = - 1 ;
static int hf_rsvp_lsp_attr_latcollect = - 1 ;
static int hf_rsvp_lsp_attr_latvarcollect = - 1 ;
2012-09-24 01:59:34 +00:00
static int hf_rsvp_gen_uni_direction = - 1 ;
static int hf_rsvp_protection_info_flags_secondary_lsp = - 1 ;
static int hf_rsvp_pi_link_flags_extra_traffic = - 1 ;
static int hf_rsvp_pi_link_flags_unprotected = - 1 ;
static int hf_rsvp_pi_link_flags_shared = - 1 ;
static int hf_rsvp_pi_link_flags_dedicated1_1 = - 1 ;
static int hf_rsvp_pi_link_flags_dedicated1plus1 = - 1 ;
static int hf_rsvp_pi_link_flags_enhanced = - 1 ;
static int hf_rsvp_pi_link_flags_extra = - 1 ;
static int hf_rsvp_pi_link_flags_dedicated_1_1 = - 1 ;
static int hf_rsvp_pi_link_flags_dedicated_1plus1 = - 1 ;
static int hf_rsvp_rfc4872_secondary = - 1 ;
static int hf_rsvp_rfc4872_protecting = - 1 ;
static int hf_rsvp_rfc4872_notification_msg = - 1 ;
static int hf_rsvp_rfc4872_operational = - 1 ;
static int hf_rsvp_pi_lsp_flags_full_rerouting = - 1 ;
static int hf_rsvp_pi_lsp_flags_rerouting_extra = - 1 ;
static int hf_rsvp_pi_lsp_flags_1_n_protection = - 1 ;
static int hf_rsvp_pi_lsp_flags_1plus1_unidirectional = - 1 ;
static int hf_rsvp_pi_lsp_flags_1plus1_bidirectional = - 1 ;
static int hf_rsvp_protection_info_in_place = - 1 ;
static int hf_rsvp_protection_info_required = - 1 ;
static int hf_rsvp_pi_seg_flags_full_rerouting = - 1 ;
static int hf_rsvp_pi_seg_flags_rerouting_extra = - 1 ;
static int hf_rsvp_pi_seg_flags_1_n_protection = - 1 ;
static int hf_rsvp_pi_seg_flags_1plus1_unidirectional = - 1 ;
static int hf_rsvp_pi_seg_flags_1plus1_bidirectional = - 1 ;
static int hf_rsvp_frr_flags_one2one_backup = - 1 ;
static int hf_rsvp_frr_flags_facility_backup = - 1 ;
2013-03-31 22:08:00 +00:00
static int hf_rsvp_c_type = - 1 ;
static int hf_rsvp_3gpp_obj_tid = - 1 ;
static int hf_rsvp_3gpp_obj_ie_len = - 1 ;
static int hf_rsvp_3gpp_obj_ie_type = - 1 ;
2013-04-02 05:54:47 +00:00
static int hf_rsvp_3gpp_obj_ue_ipv4_addr = - 1 ;
static int hf_rsvp_3gpp_obj_ue_ipv6_addr = - 1 ;
static int hf_rsvp_3gpp_obj_tft_d = - 1 ;
static int hf_rsvp_3gpp_obj_tft_ns = - 1 ;
static int hf_rsvp_3gpp_obj_tft_sr_id = - 1 ;
static int hf_rsvp_3gpp_obj_tft_p = - 1 ;
static int hf_rsvp_3gpp_obj_tft_opcode = - 1 ;
static int hf_rsvp_3gpp_obj_tft_n_pkt_flt = - 1 ;
2013-04-03 16:50:35 +00:00
static int hf_rsvp_3gpp_obj_flow_id = - 1 ;
static int hf_rsvp_3gpp_obj_pf_ev_prec = - 1 ;
static int hf_rsvp_3gpp_obj_pf_len = - 1 ;
static int hf_rsvp_3gpp_obj_pf_type = - 1 ;
static int hf_rsvp_3gpp_obj_pf_cont_len = - 1 ;
static int hf_rsvp_3gpp_obj_pf_comp_type_id = - 1 ;
2013-04-04 16:23:55 +00:00
static int hf_rsvp_3gpp_obj_pf_src_ipv4 = - 1 ;
static int hf_rsvp_3gpp_obj_pf_dst_ipv4 = - 1 ;
static int hf_rsvp_3gpp_obj_pf_ipv4_mask = - 1 ;
static int hf_rsvp_3gpp_obj_pf_src_ipv6 = - 1 ;
static int hf_rsvp_3gpp_obj_pf_dst_ipv6 = - 1 ;
static int hf_rsvp_3gpp_obj_pf_ipv6_prefix_length = - 1 ;
static int hf_rsvp_3gpp_obj_pf_prot_next = - 1 ;
static int hf_rsvp_3gpp_obj_pf_dst_port = - 1 ;
2013-12-23 21:39:09 +00:00
/* static int hf_rsvp_3gpp_obj_pf_src_port = -1; */
2013-04-04 16:23:55 +00:00
static int hf_rsvp_3gpp_obj_pf_ipsec_spi = - 1 ;
static int hf_rsvp_3gpp_obj_pf_tos_tc = - 1 ;
static int hf_rsvp_3gpp_obj_pf_flow_lbl = - 1 ;
static int hf_rsvp_3gpp_obj_pf_ipv6 = - 1 ;
static int hf_rsvp_3gpp_obj_pf_treatment = - 1 ;
static int hf_rsvp_3gpp_obj_pf_hint = - 1 ;
2013-04-03 16:50:35 +00:00
static int hf_rsvp_3gpp_obj_tft_qos_list_len = - 1 ;
2013-04-04 16:23:55 +00:00
static int hf_rsvp_3gpp_r_qos_blob_len = - 1 ;
2013-04-19 16:06:01 +00:00
static int hf_rsvp_3gpp_r_qos_blob_flow_pri = - 1 ;
static int hf_rsvp_3gpp_r_qos_blob_num_qos_att_set = - 1 ;
static int hf_rsvp_3gpp_qos_att_set_len = - 1 ;
static int hf_rsvp_3gpp_qos_attribute_set_id = - 1 ;
static int hf_rsvp_3gpp_qos_attribute_verbose = - 1 ;
static int hf_rsvp_3gpp_qos_attribute_prof_id = - 1 ;
static int hf_rsvp_3gpp_qos_attribute_traff_cls = - 1 ;
static int hf_rsvp_3gpp_qos_attribute_peak_rate = - 1 ;
static int hf_rsvp_3gpp_qos_attribute_bucket_size = - 1 ;
static int hf_rsvp_3gpp_qos_attribute_token_rate = - 1 ;
static int hf_rsvp_3gpp_qos_attribute_max_latency = - 1 ;
static int hf_rsvp_3gpp_qos_attribute_max_loss_rte = - 1 ;
static int hf_rsvp_3gpp_qos_attribute_delay_var_sensitive = - 1 ;
static int hf_rsvp_3gpp_qos_attribute_reserved = - 1 ;
2013-04-04 16:23:55 +00:00
static int hf_rsvp_3gpp_r_qos_blob = - 1 ;
static int hf_rsvp_3gpp_qos_result = - 1 ;
2013-08-07 23:07:15 +00:00
static int hf_rsvp_xro_sobj_lbit = - 1 ;
static int hf_rsvp_xro_sobj_type = - 1 ;
static int hf_rsvp_xro_sobj_len = - 1 ;
static int hf_rsvp_xro_sobj_ipv4_addr = - 1 ;
static int hf_rsvp_xro_sobj_ipv4_prefix = - 1 ;
static int hf_rsvp_xro_sobj_ipv4_attr = - 1 ;
static int hf_rsvp_xro_sobj_ipv6_addr = - 1 ;
static int hf_rsvp_xro_sobj_ipv6_prefix = - 1 ;
static int hf_rsvp_xro_sobj_ipv6_attr = - 1 ;
static int hf_rsvp_xro_sobj_srlg_id = - 1 ;
static int hf_rsvp_xro_sobj_srlg_res = - 1 ;
2013-09-25 10:11:07 +00:00
static int hf_rsvp_private_data = - 1 ;
2013-09-29 22:40:25 +00:00
static int hf_rsvp_juniper_numtlvs = - 1 ;
static int hf_rsvp_juniper_padlength = - 1 ;
static int hf_rsvp_juniper_type = - 1 ;
static int hf_rsvp_juniper_length = - 1 ;
static int hf_rsvp_juniper_attrib_cos = - 1 ;
static int hf_rsvp_juniper_attrib_metric1 = - 1 ;
static int hf_rsvp_juniper_attrib_metric2 = - 1 ;
static int hf_rsvp_juniper_attrib_ccc_status = - 1 ;
static int hf_rsvp_juniper_attrib_path = - 1 ;
static int hf_rsvp_juniper_attrib_unknown = - 1 ;
2013-09-27 20:33:29 +00:00
static int hf_rsvp_juniper_unknown = - 1 ;
2013-09-29 22:40:25 +00:00
static int hf_rsvp_juniper_pad = - 1 ;
2013-09-25 10:11:07 +00:00
static int hf_rsvp_unknown_data = - 1 ;
2013-12-23 21:39:09 +00:00
static int hf_rsvp_ctype = - 1 ;
2013-12-24 23:41:24 +00:00
/* Generated from convert_proto_tree_add_text.pl */
static int hf_rsvp_message_id_data = - 1 ;
static int hf_rsvp_ero_rro_subobjects_length = - 1 ;
static int hf_rsvp_fast_reroute_hop_limit = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_router_id = - 1 ;
static int hf_rsvp_ero_rro_subobjects_path_key = - 1 ;
static int hf_rsvp_ifid_tlv_area = - 1 ;
static int hf_rsvp_session_attribute_include_any = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_sc_pc_scn_address = - 1 ;
static int hf_rsvp_ero_rro_subobjects_ipv6_hop = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_ipv6_interface_address = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_component_link_identifier_ipv4 = - 1 ;
static int hf_rsvp_ifid_tlvinterface_id = - 1 ;
static int hf_rsvp_eth_tspec_cir = - 1 ;
static int hf_rsvp_confirm_receiver_address_ipv6 = - 1 ;
static int hf_rsvp_error_error_node_ipv6 = - 1 ;
static int hf_rsvp_time_values_data = - 1 ;
static int hf_rsvp_flowspec_rate = - 1 ;
static int hf_rsvp_session_attribute_hold_priority = - 1 ;
static int hf_rsvp_notify_request_notify_node_address_ipv4 = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_action = - 1 ;
static int hf_rsvp_scope_data = - 1 ;
static int hf_rsvp_label_request_l3pid = - 1 ;
static int hf_rsvp_eth_tspec_index = - 1 ;
static int hf_rsvp_integrity_sequence_number = - 1 ;
static int hf_rsvp_adspec_message_format_version = - 1 ;
static int hf_rsvp_fast_reroute_setup_priority = - 1 ;
static int hf_rsvp_eth_tspec_reserved = - 1 ;
static int hf_rsvp_fast_reroute_include_all = - 1 ;
static int hf_rsvp_association_routing_area_id = - 1 ;
static int hf_rsvp_label_label = - 1 ;
static int hf_rsvp_session_attribute_include_all = - 1 ;
static int hf_rsvp_flowspec_token_bucket_rate = - 1 ;
static int hf_rsvp_call_id_address_type = - 1 ;
static int hf_rsvp_session_attribute_name_length = - 1 ;
static int hf_rsvp_detour_data = - 1 ;
static int hf_rsvp_association_node_id = - 1 ;
static int hf_rsvp_ifid_tlv_length = - 1 ;
static int hf_rsvp_flags = - 1 ;
static int hf_rsvp_tspec_message_format_version = - 1 ;
static int hf_rsvp_ifid_tlv_ipv4_address = - 1 ;
static int hf_rsvp_hop_data = - 1 ;
static int hf_rsvp_ifid_tlv_data = - 1 ;
static int hf_rsvp_length = - 1 ;
static int hf_rsvp_ero_rro_subobjects_pce_id_ipv6 = - 1 ;
static int hf_rsvp_association_data = - 1 ;
static int hf_rsvp_tspec_number_of_multiplexed_components = - 1 ;
static int hf_rsvp_session_attribute_setup_priority = - 1 ;
static int hf_rsvp_message_id_flags = - 1 ;
static int hf_rsvp_hop_logical_interface = - 1 ;
static int hf_rsvp_compression_factor = - 1 ;
static int hf_rsvp_ero_rro_subobjects_private_data = - 1 ;
static int hf_rsvp_lsp_attributes_tlv_data = - 1 ;
static int hf_rsvp_flowspec_token_bucket_size = - 1 ;
static int hf_rsvp_call_id_data = - 1 ;
static int hf_rsvp_template_filter_source_address_ipv6 = - 1 ;
static int hf_rsvp_message_id_ack_flags = - 1 ;
static int hf_rsvp_flowspec_multiplier = - 1 ;
static int hf_rsvp_tspec_token_bucket_size = - 1 ;
static int hf_rsvp_admin_status_data = - 1 ;
static int hf_rsvp_tspec_peak_data_rate = - 1 ;
static int hf_rsvp_flowspec_number_of_virtual_components = - 1 ;
static int hf_rsvp_hop_neighbor_address_ipv6 = - 1 ;
static int hf_rsvp_flowspec_signal_type_sonet = - 1 ;
static int hf_rsvp_ifid_tlv_autonomous_system = - 1 ;
static int hf_rsvp_scope_ipv6_address = - 1 ;
static int hf_rsvp_flowspec_service_header = - 1 ;
static int hf_rsvp_tspec_hint = - 1 ;
static int hf_rsvp_label_set_action = - 1 ;
static int hf_rsvp_error_data = - 1 ;
static int hf_rsvp_style_flags = - 1 ;
static int hf_rsvp_g_pid = - 1 ;
static int hf_rsvp_integrity_key_identifier = - 1 ;
static int hf_rsvp_adspec_service_header = - 1 ;
static int hf_rsvp_ifid_tlv_error_string = - 1 ;
static int hf_rsvp_session_destination_address = - 1 ;
static int hf_rsvp_ifid_tlv_node_id = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_component_link_identifier = - 1 ;
static int hf_rsvp_call_id_international_segment = - 1 ;
static int hf_rsvp_fast_reroute_include_any = - 1 ;
static int hf_rsvp_label_request_min_vci = - 1 ;
static int hf_rsvp_tspec_profile = - 1 ;
static int hf_rsvp_eth_tspec_length = - 1 ;
static int hf_rsvp_exclude_route_data = - 1 ;
static int hf_rsvp_record_route_data = - 1 ;
static int hf_rsvp_confirm_receiver_address_ipv4 = - 1 ;
static int hf_rsvp_message_id_list_message_id = - 1 ;
static int hf_rsvp_template_filter_data = - 1 ;
static int hf_rsvp_notify_request_notify_node_address_ipv6 = - 1 ;
static int hf_rsvp_message_id_ack_data = - 1 ;
static int hf_rsvp_eth_tspec_profile = - 1 ;
static int hf_rsvp_label_request_max_vpi = - 1 ;
static int hf_rsvp_ero_rro_subobjects_private_length = - 1 ;
static int hf_rsvp_fast_reroute_exclude_any = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_data = - 1 ;
static int hf_rsvp_hello_destination_instance = - 1 ;
static int hf_rsvp_tspec_signal_type_g709 = - 1 ;
static int hf_rsvp_call_id_reserved = - 1 ;
static int hf_rsvp_rsvp_version = - 1 ;
static int hf_rsvp_association_source_ipv6 = - 1 ;
static int hf_rsvp_ero_rro_subobjects_flags = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_lsp_encoding_type = - 1 ;
static int hf_rsvp_association_type = - 1 ;
static int hf_rsvp_tspec_data = - 1 ;
static int hf_rsvp_session_destination_port = - 1 ;
static int hf_rsvp_association_id = - 1 ;
static int hf_rsvp_integrity_hash = - 1 ;
static int hf_rsvp_flowspec_number_of_contiguous_components = - 1 ;
static int hf_rsvp_policy_data = - 1 ;
static int hf_rsvp_tspec_token_bucket_rate = - 1 ;
static int hf_rsvp_tspec_multiplier = - 1 ;
static int hf_rsvp_dclass_dscp = - 1 ;
static int hf_rsvp_tspec_number_of_contiguous_components = - 1 ;
static int hf_rsvp_session_data = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_target_igp_instance = - 1 ;
static int hf_rsvp_flowspec_profile = - 1 ;
static int hf_rsvp_message_id_ack_epoch = - 1 ;
static int hf_rsvp_hello_source_instance = - 1 ;
static int hf_rsvp_scope_ipv4_address = - 1 ;
static int hf_rsvp_label_request_lsp_encoding_type = - 1 ;
static int hf_rsvp_fast_reroute_hold_priority = - 1 ;
static int hf_rsvp_label_request_max_vci = - 1 ;
static int hf_rsvp_fast_reroute_flags = - 1 ;
static int hf_rsvp_flowspec_peak_data_rate = - 1 ;
static int hf_rsvp_ero_rro_subobjects_label = - 1 ;
static int hf_rsvp_notify_request_data = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_connection_id = - 1 ;
static int hf_rsvp_eth_tspec_ebs = - 1 ;
static int hf_rsvp_fast_reroute_data = - 1 ;
static int hf_rsvp_label_request_min_vpi = - 1 ;
static int hf_rsvp_session_attribute_data = - 1 ;
static int hf_rsvp_protection_info_data = - 1 ;
static int hf_rsvp_tspec_transparency = - 1 ;
static int hf_rsvp_ifid_tlv_label = - 1 ;
static int hf_rsvp_session_extended_ipv4_address = - 1 ;
static int hf_rsvp_diffserv_aware_te_data = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_signal_type = - 1 ;
static int hf_rsvp_ero_rro_subobjects_pce_id_ipv4 = - 1 ;
static int hf_rsvp_error_error_node_ipv4 = - 1 ;
static int hf_rsvp_session_protocol = - 1 ;
static int hf_rsvp_tspec_signal_type_sonet = - 1 ;
static int hf_rsvp_session_attribute_flags = - 1 ;
static int hf_rsvp_ero_rro_subobjects_router_id = - 1 ;
static int hf_rsvp_message_id_list_data = - 1 ;
static int hf_rsvp_style_style = - 1 ;
static int hf_rsvp_tspec_number_of_virtual_components = - 1 ;
static int hf_rsvp_tspec_mtu = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_length = - 1 ;
static int hf_rsvp_ifid_tlv_ipv6_address = - 1 ;
static int hf_rsvp_diffserv_data = - 1 ;
static int hf_rsvp_session_flags = - 1 ;
static int hf_rsvp_flowspec_transparency = - 1 ;
static int hf_rsvp_dclass_data = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_interface_id = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_sc_pc_id = - 1 ;
static int hf_rsvp_error_error_code = - 1 ;
static int hf_rsvp_admin_status = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_ipv4_interface_address = - 1 ;
static int hf_rsvp_session_attribute_exclude_any = - 1 ;
static int hf_rsvp_sending_ttl = - 1 ;
static int hf_rsvp_integrity_flags = - 1 ;
static int hf_rsvp_message_id_ack_message_id = - 1 ;
static int hf_rsvp_message_id_message_id = - 1 ;
static int hf_rsvp_ero_rro_subobjects_interface_id = - 1 ;
static int hf_rsvp_message_length = - 1 ;
static int hf_rsvp_message_id_epoch = - 1 ;
static int hf_rsvp_flowspec_signal_type_g709 = - 1 ;
static int hf_rsvp_label_request_data = - 1 ;
static int hf_rsvp_restart_cap_data = - 1 ;
static int hf_rsvp_lsp_attributes_tlv = - 1 ;
static int hf_rsvp_flowspec_mtu = - 1 ;
static int hf_rsvp_tspec_service_header = - 1 ;
static int hf_rsvp_eth_tspec_cbs = - 1 ;
static int hf_rsvp_call_id_national_segment = - 1 ;
static int hf_rsvp_template_filter_source_port = - 1 ;
static int hf_rsvp_eth_tspec_eir = - 1 ;
static int hf_rsvp_ero_rro_subobjects_ipv4_hop = - 1 ;
static int hf_rsvp_lsp_tunnel_if_id_switching_type = - 1 ;
static int hf_rsvp_flowspec_number_of_multiplexed_components = - 1 ;
static int hf_rsvp_label_request_switching_type = - 1 ;
static int hf_rsvp_ero_rro_subobjects_prefix_length = - 1 ;
static int hf_rsvp_explicit_route_data = - 1 ;
static int hf_rsvp_association_source_ipv4 = - 1 ;
static int hf_rsvp_call_id_local_identifier = - 1 ;
static int hf_rsvp_flowspec_message_format_version = - 1 ;
static int hf_rsvp_tspec_requested_concatenation = - 1 ;
static int hf_rsvp_association_padding = - 1 ;
static int hf_rsvp_hop_neighbor_address_ipv4 = - 1 ;
static int hf_rsvp_flowspec_requested_concatenation = - 1 ;
static int hf_rsvp_fast_reroute_bandwidth = - 1 ;
static int hf_rsvp_message_id_list_epoch = - 1 ;
static int hf_rsvp_style_data = - 1 ;
static int hf_rsvp_session_dscp = - 1 ;
static int hf_rsvp_confirm_data = - 1 ;
static int hf_rsvp_protection_info_link_flags = - 1 ;
static int hf_rsvp_message_id_list_flags = - 1 ;
static int hf_rsvp_label_data = - 1 ;
static int hf_rsvp_flowspec_slack_term = - 1 ;
static int hf_rsvp_label_generalized_label = - 1 ;
static int hf_rsvp_session_attribute_name = - 1 ;
static int hf_rsvp_ifid_tlv_padding = - 1 ;
2012-09-24 01:59:34 +00:00
2005-09-07 19:52:44 +00:00
static int rsvp_tap = - 1 ;
/*
2007-11-16 23:56:18 +00:00
* All RSVP packets belonging to a particular flow belong to the same
2005-09-07 19:52:44 +00:00
* conversation . The following structure definitions are for auxillary
* structures which have all the relevant flow information to make up the
* RSVP five - tuple . Note that the values of the five - tuple are determined
* from the session object and sender template / filter spec for PATH / RESV
* messages .
* Update rsvp_request_equal ( ) when you add stuff here . You might also
* have to update rsvp_request_hash ( ) .
* TODO : Support for IPv6 conversations .
*/
typedef struct rsvp_session_ipv4_info {
address destination ;
guint8 protocol ;
guint16 udp_dest_port ;
} rsvp_session_ipv4_info ;
typedef struct rsvp_session_ipv6_info {
/* not supported yet */
2009-01-27 21:46:58 +00:00
guint8 dummy ;
2005-09-07 19:52:44 +00:00
} rsvp_session_ipv6_info ;
typedef struct rsvp_session_ipv4_lsp_info {
address destination ;
guint16 udp_dest_port ;
guint32 ext_tunnel_id ;
} rsvp_session_ipv4_lsp_info ;
2006-11-13 17:30:38 +00:00
typedef struct rsvp_session_agg_ipv4_info {
address destination ;
guint8 dscp ;
} rsvp_session_agg_ipv4_info ;
2005-09-07 19:52:44 +00:00
typedef struct rsvp_session_ipv4_uni_info {
address destination ;
guint16 udp_dest_port ;
guint32 ext_tunnel_id ;
} rsvp_session_ipv4_uni_info ;
typedef struct rsvp_session_ipv4_enni_info {
address destination ;
guint16 udp_dest_port ;
guint32 ext_tunnel_id ;
} rsvp_session_ipv4_enni_info ;
typedef struct rsvp_template_filter_info {
address source ;
guint16 udp_source_port ;
} rsvp_template_filter_info ;
2007-11-16 23:56:18 +00:00
/*
2005-09-07 19:52:44 +00:00
* The actual request key consists of a union of the various session objects
2007-11-16 23:56:18 +00:00
* ( which are uniquely identified based on the session type ) , and the
* source_info structure , which has the information derived from the sender
2005-09-07 19:52:44 +00:00
* template or the filter spec .
2007-11-16 23:56:18 +00:00
* The request key is populated by copying the information from the
2005-09-07 19:52:44 +00:00
* rsvp_conversation_info structure ( rsvph ) , which in turn is populated when
* the session , filter and sender template objects are dissected .
*/
struct rsvp_request_key {
guint32 session_type ;
union { /* differentiated by session_type field */
2012-06-11 16:33:56 +00:00
rsvp_session_ipv4_info session_ipv4 ;
rsvp_session_ipv6_info session_ipv6 ;
rsvp_session_ipv4_lsp_info session_ipv4_lsp ;
rsvp_session_agg_ipv4_info session_agg_ipv4 ;
rsvp_session_ipv4_uni_info session_ipv4_uni ;
rsvp_session_ipv4_enni_info session_ipv4_enni ;
2005-09-07 19:52:44 +00:00
} u ;
rsvp_template_filter_info source_info ;
guint32 conversation ;
} ;
/*
* At present , there is nothing particularly important that we need to
* store for the request value for each rsvp_request_key , so we just
* store the unique 32 - bit identifier internally allocated for the key
* ( and stored in the conversation attribute of rsvp_request_key above .
* If this changes in the future , then other stuff can be added here .
*/
struct rsvp_request_val {
guint32 value ;
} ;
/*
* Initialize the conversation related data structures .
*/
static GHashTable * rsvp_request_hash = NULL ;
2002-10-02 21:15:27 +00:00
/*
* The list of tree types
*/
enum {
TT_RSVP ,
TT_HDR ,
TT_SESSION ,
TT_HOP ,
TT_HOP_SUBOBJ ,
TT_TIME_VALUES ,
TT_ERROR ,
TT_ERROR_SUBOBJ ,
2005-07-25 19:52:08 +00:00
TT_ERROR_FLAGS ,
2002-10-02 21:15:27 +00:00
TT_SCOPE ,
TT_STYLE ,
TT_CONFIRM ,
TT_SENDER_TEMPLATE ,
TT_FILTER_SPEC ,
TT_TSPEC ,
TT_TSPEC_SUBTREE ,
TT_FLOWSPEC ,
TT_FLOWSPEC_SUBTREE ,
2008-04-14 19:43:39 +00:00
TT_ETHSPEC_SUBTREE ,
2002-10-02 21:15:27 +00:00
TT_ADSPEC ,
TT_ADSPEC_SUBTREE ,
TT_INTEGRITY ,
TT_INTEGRITY_FLAGS ,
TT_DCLASS ,
TT_LSP_TUNNEL_IF_ID ,
2008-04-14 19:43:39 +00:00
TT_LSP_TUNNEL_IF_ID_SUBTREE ,
2002-10-02 21:15:27 +00:00
TT_POLICY ,
TT_MESSAGE_ID ,
TT_MESSAGE_ID_ACK ,
TT_MESSAGE_ID_LIST ,
TT_LABEL ,
2004-07-21 05:57:30 +00:00
TT_LABEL_SET ,
2002-10-02 21:15:27 +00:00
TT_LABEL_REQUEST ,
TT_SESSION_ATTRIBUTE ,
TT_SESSION_ATTRIBUTE_FLAGS ,
TT_HELLO_OBJ ,
TT_EXPLICIT_ROUTE ,
TT_EXPLICIT_ROUTE_SUBOBJ ,
2013-08-07 23:07:15 +00:00
TT_EXCLUDE_ROUTE ,
TT_EXCLUDE_ROUTE_SUBOBJ ,
2002-10-02 21:15:27 +00:00
TT_RECORD_ROUTE ,
TT_RECORD_ROUTE_SUBOBJ ,
2002-10-08 23:29:15 +00:00
TT_RECORD_ROUTE_SUBOBJ_FLAGS ,
2002-10-02 21:15:27 +00:00
TT_ADMIN_STATUS ,
TT_ADMIN_STATUS_FLAGS ,
2011-01-27 16:08:41 +00:00
TT_LSP_ATTRIBUTES ,
TT_LSP_ATTRIBUTES_FLAGS ,
2005-07-25 19:52:08 +00:00
TT_ASSOCIATION ,
2002-10-02 21:15:27 +00:00
TT_GEN_UNI ,
TT_GEN_UNI_SUBOBJ ,
2004-07-21 05:57:30 +00:00
TT_CALL_ID ,
2013-04-04 16:23:55 +00:00
TT_3GPP2_OBJECT ,
2002-10-02 21:15:27 +00:00
TT_BUNDLE_COMPMSG ,
TT_RESTART_CAP ,
TT_PROTECTION_INFO ,
2011-01-27 16:08:41 +00:00
TT_PROTECTION_INFO_LINK ,
TT_PROTECTION_INFO_LSP ,
TT_PROTECTION_INFO_SEG ,
2002-10-08 23:29:15 +00:00
TT_FAST_REROUTE ,
2003-11-08 00:09:01 +00:00
TT_FAST_REROUTE_FLAGS ,
2002-10-08 23:29:15 +00:00
TT_DETOUR ,
2003-10-10 21:16:24 +00:00
TT_DIFFSERV ,
TT_DIFFSERV_MAP ,
TT_DIFFSERV_MAP_PHBID ,
2006-07-13 05:57:20 +00:00
TT_CLASSTYPE ,
2011-01-05 07:16:09 +00:00
TT_PRIVATE_CLASS ,
2013-09-27 20:33:29 +00:00
TT_JUNIPER ,
2002-10-02 21:15:27 +00:00
TT_UNKNOWN_CLASS ,
2013-04-04 16:23:55 +00:00
TT_3GPP_OBJ_FLOW ,
TT_3GPP_OBJ_QOS ,
2013-04-19 16:06:01 +00:00
TT_3GPP_OBJ_QOS_SUB_BLOB ,
2013-04-04 16:23:55 +00:00
TT_3GPP_OBJ_T2 ,
TT_3GPP_OBJ_HO ,
2002-10-02 21:15:27 +00:00
2003-01-24 02:14:48 +00:00
TT_MAX
2002-10-02 21:15:27 +00:00
} ;
static gint ett_treelist [ TT_MAX ] ;
# define TREE(X) ett_treelist[(X)]
1999-11-16 11:44:20 +00:00
2002-07-15 21:19:56 +00:00
/* Should we dissect bundle messages? */
static gboolean rsvp_bundle_dissect = TRUE ;
2000-02-15 21:06:58 +00:00
2010-03-06 12:48:30 +00:00
/* FF: How should we dissect generalized label? */
2012-11-29 20:15:37 +00:00
static const enum_val_t rsvp_generalized_label_options [ ] = {
2010-03-06 12:48:30 +00:00
/* see RFC 3471 Section 3.2.1.2 */
{ " data " , " data (no interpretation) " , 1 } ,
/* see RFC 4606 Section 3 */
{ " SUKLM " , " SONET/SDH ( \" S, U, K, L, M \" scheme) " , 2 } ,
/* see I-D draft-ietf-ccamp-gmpls-g-694-lambda-labels-05 */
{ " G694 " , " Wavelength Label (G.694 frequency grid) " , 3 } ,
/* see RFC 4328 Section 4.1 */
{ " G709 " , " ODUk Label " , 4 } ,
{ NULL , NULL , 0 }
} ;
static guint rsvp_generalized_label_option = 1 ;
2000-02-15 21:06:58 +00:00
/*
2002-06-06 11:02:05 +00:00
* RSVP message types .
* See
*
2012-06-11 16:33:56 +00:00
* http : //www.iana.org/assignments/rsvp-parameters
2000-02-15 21:06:58 +00:00
*/
typedef enum {
2012-06-11 16:33:56 +00:00
RSVP_MSG_PATH = 1 , /* RFC 2205 */
RSVP_MSG_RESV , /* RFC 2205 */
RSVP_MSG_PERR , /* RFC 2205 */
RSVP_MSG_RERR , /* RFC 2205 */
RSVP_MSG_PTEAR , /* RFC 2205 */
RSVP_MSG_RTEAR , /* RFC 2205 */
RSVP_MSG_CONFIRM , /* XXX - DREQ, RFC 2745? */
/* 9 is DREP, RFC 2745 */
RSVP_MSG_RTEAR_CONFIRM = 10 , /* from Fred Baker at Cisco */
/* 11 is unassigned */
RSVP_MSG_BUNDLE = 12 , /* RFC 2961 */
RSVP_MSG_ACK , /* RFC 2961 */
/* 14 is reserved */
RSVP_MSG_SREFRESH = 15 , /* RFC 2961 */
/* 16, 17, 18, 19 not listed */
RSVP_MSG_HELLO = 20 , /* RFC 3209 */
RSVP_MSG_NOTIFY /* [RFC3473] */
/* 25 is Integrity Challenge RFC 2747, RFC 3097 */
/* 26 is Integrity Response RFC 2747, RFC 3097 */
/* 66 is DSBM_willing [SBM] */
/* 67 is I_AM_DSBM [SBM] */
/* [SBM] is Subnet Bandwidth Manager ID from July 1997 */
2000-02-15 21:06:58 +00:00
} rsvp_message_types ;
2008-08-14 23:51:52 +00:00
static const value_string message_type_vals [ ] = {
2012-06-11 16:33:56 +00:00
{ RSVP_MSG_PATH , " PATH Message. " } ,
{ RSVP_MSG_RESV , " RESV Message. " } ,
{ RSVP_MSG_PERR , " PATH ERROR Message. " } ,
{ RSVP_MSG_RERR , " RESV ERROR Message. " } ,
{ RSVP_MSG_PTEAR , " PATH TEAR Message. " } ,
{ RSVP_MSG_RTEAR , " RESV TEAR Message. " } ,
{ RSVP_MSG_CONFIRM , " CONFIRM Message. " } ,
{ RSVP_MSG_RTEAR_CONFIRM , " RESV TEAR CONFIRM Message. " } ,
{ RSVP_MSG_BUNDLE , " BUNDLE Message. " } ,
{ RSVP_MSG_ACK , " ACK Message. " } ,
{ RSVP_MSG_SREFRESH , " SREFRESH Message. " } ,
{ RSVP_MSG_HELLO , " HELLO Message. " } ,
{ RSVP_MSG_NOTIFY , " NOTIFY Message. " } ,
2011-01-31 17:09:58 +00:00
{ 0 , NULL }
2000-02-15 21:06:58 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext message_type_vals_ext = VALUE_STRING_EXT_INIT ( message_type_vals ) ;
2000-02-15 21:06:58 +00:00
2002-08-28 21:04:11 +00:00
/*
2011-01-05 07:16:09 +00:00
* FF : please keep this list in sync with
* http : //www.iana.org/assignments/rsvp-parameters
* Registry Name : ' Class '
2000-02-15 21:06:58 +00:00
*/
enum rsvp_classes {
2012-06-11 16:33:56 +00:00
RSVP_CLASS_NULL = 0 ,
2000-02-15 21:06:58 +00:00
RSVP_CLASS_SESSION ,
2000-03-09 18:31:51 +00:00
2012-06-11 16:33:56 +00:00
RSVP_CLASS_HOP = 3 ,
2000-02-15 21:06:58 +00:00
RSVP_CLASS_INTEGRITY ,
RSVP_CLASS_TIME_VALUES ,
RSVP_CLASS_ERROR ,
RSVP_CLASS_SCOPE ,
RSVP_CLASS_STYLE ,
RSVP_CLASS_FLOWSPEC ,
RSVP_CLASS_FILTER_SPEC ,
RSVP_CLASS_SENDER_TEMPLATE ,
RSVP_CLASS_SENDER_TSPEC ,
RSVP_CLASS_ADSPEC ,
RSVP_CLASS_POLICY ,
2000-03-09 18:31:51 +00:00
RSVP_CLASS_CONFIRM ,
RSVP_CLASS_LABEL ,
2009-01-27 21:46:58 +00:00
RSVP_CLASS_HOP_COUNT ,
RSVP_CLASS_STRICT_SOURCE_ROUTE ,
2012-06-11 16:33:56 +00:00
RSVP_CLASS_LABEL_REQUEST = 19 ,
2000-03-09 18:31:51 +00:00
RSVP_CLASS_EXPLICIT_ROUTE ,
RSVP_CLASS_RECORD_ROUTE ,
2001-12-26 22:32:57 +00:00
RSVP_CLASS_HELLO ,
RSVP_CLASS_MESSAGE_ID ,
2001-05-01 18:19:04 +00:00
RSVP_CLASS_MESSAGE_ID_ACK ,
RSVP_CLASS_MESSAGE_ID_LIST ,
2009-01-27 21:46:58 +00:00
/* 26-29 Unassigned */
2006-11-22 23:20:11 +00:00
2012-06-11 16:33:56 +00:00
RSVP_CLASS_DIAGNOSTIC = 30 ,
2009-01-27 21:46:58 +00:00
RSVP_CLASS_ROUTE ,
RSVP_CLASS_DIAG_RESPONSE ,
RSVP_CLASS_DIAG_SELECT ,
2006-11-22 23:20:11 +00:00
RSVP_CLASS_RECOVERY_LABEL ,
2002-03-29 00:41:54 +00:00
RSVP_CLASS_UPSTREAM_LABEL ,
RSVP_CLASS_LABEL_SET ,
RSVP_CLASS_PROTECTION ,
2001-12-26 22:32:57 +00:00
2009-01-27 21:46:58 +00:00
/* 38-41 Unassigned */
2012-06-11 16:33:56 +00:00
RSVP_CLASS_DSBM_IP_ADDRESS = 42 ,
2009-01-27 21:46:58 +00:00
RSVP_CLASS_SBM_PRIORITY ,
RSVP_CLASS_DSBM_TIMER_INTERVALS ,
RSVP_CLASS_SBM_INFO ,
2003-11-08 00:09:01 +00:00
2009-01-27 21:46:58 +00:00
/* 46-62 Unassigned */
2003-10-10 21:16:24 +00:00
2012-06-11 16:33:56 +00:00
RSVP_CLASS_DETOUR = 63 ,
2009-01-27 21:46:58 +00:00
RSVP_CLASS_CHALLENGE ,
2006-11-22 23:20:11 +00:00
RSVP_CLASS_DIFFSERV ,
RSVP_CLASS_CLASSTYPE , /* FF: RFC4124 */
2009-01-27 21:46:58 +00:00
RSVP_CLASS_LSP_REQUIRED_ATTRIBUTES ,
2006-07-13 05:57:20 +00:00
2011-01-27 16:08:41 +00:00
/* 68-123 Unassigned */
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
RSVP_CLASS_VENDOR_PRIVATE_1 = 124 ,
RSVP_CLASS_VENDOR_PRIVATE_2 = 125 ,
RSVP_CLASS_VENDOR_PRIVATE_3 = 126 ,
RSVP_CLASS_VENDOR_PRIVATE_4 = 127 ,
2011-01-05 07:16:09 +00:00
2012-06-11 16:33:56 +00:00
RSVP_CLASS_NODE_CHAR = 128 ,
2006-11-22 23:20:11 +00:00
RSVP_CLASS_SUGGESTED_LABEL ,
2002-03-29 00:41:54 +00:00
RSVP_CLASS_ACCEPTABLE_LABEL_SET ,
RSVP_CLASS_RESTART_CAP ,
2009-01-27 21:46:58 +00:00
/* 132-160 Unassigned */
2006-11-22 23:20:11 +00:00
2011-01-27 16:08:41 +00:00
/* 166-187 Unassigned */
2006-11-22 23:20:11 +00:00
2012-06-11 16:33:56 +00:00
RSVP_CLASS_VENDOR_PRIVATE_5 = 188 ,
RSVP_CLASS_VENDOR_PRIVATE_6 = 189 ,
RSVP_CLASS_VENDOR_PRIVATE_7 = 190 ,
RSVP_CLASS_VENDOR_PRIVATE_8 = 191 ,
2011-01-05 07:16:09 +00:00
2012-06-11 16:33:56 +00:00
RSVP_CLASS_SESSION_ASSOC = 192 ,
2006-11-22 23:20:11 +00:00
RSVP_CLASS_LSP_TUNNEL_IF_ID ,
2009-01-27 21:46:58 +00:00
/* 194 Unassigned */
2012-06-11 16:33:56 +00:00
RSVP_CLASS_NOTIFY_REQUEST = 195 ,
2002-03-29 00:41:54 +00:00
RSVP_CLASS_ADMIN_STATUS ,
2009-01-27 21:46:58 +00:00
RSVP_CLASS_LSP_ATTRIBUTES ,
2011-01-27 16:08:41 +00:00
RSVP_CLASS_ALARM_SPEC ,
RSVP_CLASS_ASSOCIATION ,
2011-01-05 07:16:09 +00:00
/* 203-204 Unassigned */
2013-09-25 10:11:07 +00:00
/*
204 Proprietary Juniper LSP properties
https : //www.juniper.net/techpubs/en_US/junos12.1/information-products/topic-collections/nog-mpls-logs/topic-20284.html
*/
RSVP_CLASS_JUNIPER_PROPERTIES = 204 ,
2012-06-11 16:33:56 +00:00
RSVP_CLASS_FAST_REROUTE = 205 ,
2009-01-27 21:46:58 +00:00
/* 206 Unassigned */
2001-12-26 22:32:57 +00:00
RSVP_CLASS_SESSION_ATTRIBUTE = 207 ,
2009-01-27 21:46:58 +00:00
/* 208-223 Unassigned */
/*
Class Numbers 224 - 255 are assigned by IANA using FCFS allocation .
RSVP will silently ignore , but FORWARD an object with a Class Number
in this range that it does not understand .
*/
/* 224 Unassigned */
2012-06-11 16:33:56 +00:00
RSVP_CLASS_DCLASS = 225 ,
2009-01-27 21:46:58 +00:00
RSVP_CLASS_PACKETCABLE_EXTENSIONS ,
RSVP_CLASS_ATM_SERVICECLASS ,
RSVP_CLASS_CALL_OPS ,
2006-11-22 23:20:11 +00:00
RSVP_CLASS_GENERALIZED_UNI ,
RSVP_CLASS_CALL_ID ,
2011-01-05 07:16:09 +00:00
RSVP_CLASS_3GPP2_OBJECT ,
2013-08-07 23:07:15 +00:00
RSVP_CLASS_EXCLUDE_ROUTE ,
2002-10-08 23:29:15 +00:00
2013-08-07 23:07:15 +00:00
/* 233-251 Unassigned */
2011-01-05 07:16:09 +00:00
2012-06-11 16:33:56 +00:00
RSVP_CLASS_VENDOR_PRIVATE_9 = 252 ,
RSVP_CLASS_VENDOR_PRIVATE_10 = 253 ,
RSVP_CLASS_VENDOR_PRIVATE_11 = 254 ,
RSVP_CLASS_VENDOR_PRIVATE_12 = 255
2000-02-15 21:06:58 +00:00
} ;
2012-06-11 20:35:00 +00:00
/* XXX: are any/all of the "missing" values below supposed to have value-strings */
2008-08-14 23:51:52 +00:00
static const value_string rsvp_class_vals [ ] = {
2011-01-31 17:09:58 +00:00
{ RSVP_CLASS_NULL , " NULL object " } ,
{ RSVP_CLASS_SESSION , " SESSION object " } ,
2012-06-11 20:35:00 +00:00
2011-01-31 17:09:58 +00:00
{ RSVP_CLASS_HOP , " HOP object " } ,
{ RSVP_CLASS_INTEGRITY , " INTEGRITY object " } ,
{ RSVP_CLASS_TIME_VALUES , " TIME VALUES object " } ,
{ RSVP_CLASS_ERROR , " ERROR object " } ,
{ RSVP_CLASS_SCOPE , " SCOPE object " } ,
{ RSVP_CLASS_STYLE , " STYLE object " } ,
{ RSVP_CLASS_FLOWSPEC , " FLOWSPEC object " } ,
{ RSVP_CLASS_FILTER_SPEC , " FILTER SPEC object " } ,
{ RSVP_CLASS_SENDER_TEMPLATE , " SENDER TEMPLATE object " } ,
{ RSVP_CLASS_SENDER_TSPEC , " SENDER TSPEC object " } ,
{ RSVP_CLASS_ADSPEC , " ADSPEC object " } ,
{ RSVP_CLASS_POLICY , " POLICY object " } ,
{ RSVP_CLASS_CONFIRM , " CONFIRM object " } ,
{ RSVP_CLASS_LABEL , " LABEL object " } ,
{ RSVP_CLASS_HOP_COUNT , " HOP_COUNT object " } ,
{ RSVP_CLASS_STRICT_SOURCE_ROUTE , " STRICT_SOURCE_ROUTE object " } ,
{ RSVP_CLASS_LABEL_REQUEST , " LABEL REQUEST object " } ,
{ RSVP_CLASS_EXPLICIT_ROUTE , " EXPLICIT ROUTE object " } ,
{ RSVP_CLASS_RECORD_ROUTE , " RECORD ROUTE object " } ,
2012-06-11 20:35:00 +00:00
{ RSVP_CLASS_HELLO , " HELLO object " } ,
2011-01-31 17:09:58 +00:00
{ RSVP_CLASS_MESSAGE_ID , " MESSAGE-ID object " } ,
{ RSVP_CLASS_MESSAGE_ID_ACK , " MESSAGE-ID ACK/NACK object " } ,
{ RSVP_CLASS_MESSAGE_ID_LIST , " MESSAGE-ID LIST object " } ,
2012-06-11 20:35:00 +00:00
/*
RSVP_CLASS_DIAGNOSTIC
RSVP_CLASS_ROUTE ,
RSVP_CLASS_DIAG_RESPONSE ,
RSVP_CLASS_DIAG_SELECT ,
*/
2011-01-31 17:09:58 +00:00
{ RSVP_CLASS_RECOVERY_LABEL , " RECOVERY-LABEL object " } ,
{ RSVP_CLASS_UPSTREAM_LABEL , " UPSTREAM-LABEL object " } ,
{ RSVP_CLASS_LABEL_SET , " LABEL-SET object " } ,
{ RSVP_CLASS_PROTECTION , " PROTECTION object " } ,
2012-06-11 20:35:00 +00:00
/*
RSVP_CLASS_DSBM_IP_ADDRESS
RSVP_CLASS_SBM_PRIORITY ,
RSVP_CLASS_DSBM_TIMER_INTERVALS ,
RSVP_CLASS_SBM_INFO ,
*/
{ RSVP_CLASS_DETOUR , " DETOUR object " } ,
/*
RSVP_CLASS_CHALLENGE ,
*/
2011-01-31 17:09:58 +00:00
{ RSVP_CLASS_DIFFSERV , " DIFFSERV object " } ,
{ RSVP_CLASS_CLASSTYPE , " CLASSTYPE object " } ,
2012-06-11 20:35:00 +00:00
/*
RSVP_CLASS_LSP_REQUIRED_ATTRIBUTES ,
*/
2011-01-31 17:09:58 +00:00
{ RSVP_CLASS_VENDOR_PRIVATE_1 , " VENDOR PRIVATE object (0bbbbbbb: "
" reject if unknown) " } ,
{ RSVP_CLASS_VENDOR_PRIVATE_2 , " VENDOR PRIVATE object (0bbbbbbb: "
" reject if unknown) " } ,
{ RSVP_CLASS_VENDOR_PRIVATE_3 , " VENDOR PRIVATE object (0bbbbbbb: "
" reject if unknown) " } ,
{ RSVP_CLASS_VENDOR_PRIVATE_4 , " VENDOR PRIVATE object (0bbbbbbb: "
" reject if unknown) " } ,
2012-06-11 20:35:00 +00:00
/*
RSVP_CLASS_NODE_CHAR
*/
{ RSVP_CLASS_SUGGESTED_LABEL , " SUGGESTED-LABEL object " } ,
{ RSVP_CLASS_ACCEPTABLE_LABEL_SET , " ACCEPTABLE-LABEL-SET object " } ,
{ RSVP_CLASS_RESTART_CAP , " RESTART-CAPABILITY object " } ,
2011-01-31 17:09:58 +00:00
{ RSVP_CLASS_VENDOR_PRIVATE_5 , " VENDOR PRIVATE object (10bbbbbb: "
" ignore if unknown) " } ,
{ RSVP_CLASS_VENDOR_PRIVATE_6 , " VENDOR PRIVATE object (10bbbbbb: "
" ignore if unknown) " } ,
{ RSVP_CLASS_VENDOR_PRIVATE_7 , " VENDOR PRIVATE object (10bbbbbb: "
" ignore if unknown) " } ,
{ RSVP_CLASS_VENDOR_PRIVATE_8 , " VENDOR PRIVATE object (10bbbbbb: "
" ignore if unknown) " } ,
2012-06-11 20:35:00 +00:00
/*
RSVP_CLASS_SESSION_ASSOC
*/
{ RSVP_CLASS_LSP_TUNNEL_IF_ID , " LSP-TUNNEL INTERFACE-ID object " } ,
{ RSVP_CLASS_NOTIFY_REQUEST , " NOTIFY-REQUEST object " } ,
{ RSVP_CLASS_ADMIN_STATUS , " ADMIN-STATUS object " } ,
{ RSVP_CLASS_LSP_ATTRIBUTES , " LSP ATTRIBUTES object " } ,
/*
RSVP_CLASS_ALARM_SPEC ,
*/
{ RSVP_CLASS_ASSOCIATION , " ASSOCIATION object " } ,
2013-09-25 10:11:07 +00:00
{ RSVP_CLASS_JUNIPER_PROPERTIES , " Juniper properties object " } ,
2012-06-11 20:35:00 +00:00
{ RSVP_CLASS_FAST_REROUTE , " FAST-REROUTE object " } ,
{ RSVP_CLASS_SESSION_ATTRIBUTE , " SESSION ATTRIBUTE object " } ,
{ RSVP_CLASS_DCLASS , " DCLASS object " } ,
/*
RSVP_CLASS_PACKETCABLE_EXTENSIONS ,
RSVP_CLASS_ATM_SERVICECLASS ,
RSVP_CLASS_CALL_OPS ,
*/
{ RSVP_CLASS_GENERALIZED_UNI , " GENERALIZED-UNI object " } ,
{ RSVP_CLASS_CALL_ID , " CALL-ID object " } ,
2013-03-31 22:08:00 +00:00
{ RSVP_CLASS_3GPP2_OBJECT , " 3GPP2 object " } ,
2013-08-07 23:07:15 +00:00
{ RSVP_CLASS_EXCLUDE_ROUTE , " EXCLUDE ROUTE object " } ,
2012-06-11 20:35:00 +00:00
2011-01-31 17:09:58 +00:00
{ RSVP_CLASS_VENDOR_PRIVATE_9 , " VENDOR PRIVATE object (11bbbbbb: "
" forward if unknown) " } ,
{ RSVP_CLASS_VENDOR_PRIVATE_10 , " VENDOR PRIVATE object (11bbbbbb: "
" forward if unknown) " } ,
{ RSVP_CLASS_VENDOR_PRIVATE_11 , " VENDOR PRIVATE object (11bbbbbb: "
" forward if unknown) " } ,
{ RSVP_CLASS_VENDOR_PRIVATE_12 , " VENDOR PRIVATE object (11bbbbbb: "
" forward if unknown) " } ,
{ 0 , NULL }
2000-02-15 21:06:58 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext rsvp_class_vals_ext = VALUE_STRING_EXT_INIT ( rsvp_class_vals ) ;
2000-02-15 21:06:58 +00:00
/*
* RSVP error values
*/
enum rsvp_error_types {
2012-06-11 16:33:56 +00:00
RSVP_ERROR_CONFIRM = 0 ,
2000-02-15 21:06:58 +00:00
RSVP_ERROR_ADMISSION ,
RSVP_ERROR_POLICY ,
RSVP_ERROR_NO_PATH ,
RSVP_ERROR_NO_SENDER ,
RSVP_ERROR_CONFLICT_RESV_STYLE ,
RSVP_ERROR_UNKNOWN_RESV_STYLE ,
RSVP_ERROR_CONFLICT_DEST_PORTS ,
RSVP_ERROR_CONFLICT_SRC_PORTS ,
2013-04-04 16:23:55 +00:00
/* 9-11 Reserved */
2012-06-11 16:33:56 +00:00
RSVP_ERROR_PREEMPTED = 12 ,
2000-02-15 21:06:58 +00:00
RSVP_ERROR_UNKNOWN_CLASS ,
RSVP_ERROR_UNKNOWN_C_TYPE ,
2013-04-04 16:23:55 +00:00
/* 15-19 Reserved */
RSVP_ERROR_RES_FOR_API = 20 ,
RSVP_ERROR_TRAFFIC ,
2011-01-27 16:08:41 +00:00
RSVP_ERROR_TRAFFIC_SYSTEM ,
RSVP_ERROR_SYSTEM ,
RSVP_ERROR_ROUTING ,
RSVP_ERROR_NOTIFY ,
2013-04-04 16:23:55 +00:00
RSVP_ERROR_NEW_AGGR , /* RFC3175 */
2011-01-27 16:08:41 +00:00
RSVP_ERROR_DIFFSERV ,
2013-04-04 16:23:55 +00:00
RSVP_ERROR_DSTE , /* RFC4124 */
RSVP_ERROR_UNKNOWN_ATTR_TLV , /* RFC5420 */
RSVP_ERROR_UNKNOWN_ATTR_BIT , /* RFC5420 */
RSVP_ERROR_ALARMS , /* RFC4783 */
RSVP_ERROR_CALL_MGMT , /* RFC4974 */
RSVP_ERROR_USER_ERROR_SPEC , /* RFC5284 */
RSVP_ERROR_REROUTE , /* RFC5710 */
RSVP_ERROR_HO_PROC_FAIL , /* RFC5852 */
RSVP_ERROR_UNREC_REC_PROXY_ERR , /* RFC5946 */
RSVP_ERROR_RSVP_OVER_MPLS_PROB , /* RFC6016 */
RSVP_ERROR_LSP_HIER_ISSUE , /* RFC6107 */
RSVP_ERROR_VCAT_CALL_MGMT /* RFC6344 */
2006-07-13 05:57:20 +00:00
} ;
2008-08-14 23:51:52 +00:00
static const value_string rsvp_error_codes [ ] = {
2011-01-31 17:09:58 +00:00
{ RSVP_ERROR_CONFIRM , " Confirmation " } ,
{ RSVP_ERROR_ADMISSION , " Admission Control Failure " } ,
{ RSVP_ERROR_POLICY , " Policy Control Failure " } ,
{ RSVP_ERROR_NO_PATH , " No PATH information for this RESV message " } ,
{ RSVP_ERROR_NO_SENDER , " No sender information for this RESV message " } ,
{ RSVP_ERROR_CONFLICT_RESV_STYLE , " Conflicting reservation styles " } ,
{ RSVP_ERROR_UNKNOWN_RESV_STYLE , " Unknown reservation style " } ,
{ RSVP_ERROR_CONFLICT_DEST_PORTS , " Conflicting destination ports " } ,
{ RSVP_ERROR_CONFLICT_SRC_PORTS , " Conflicting source ports " } ,
{ RSVP_ERROR_PREEMPTED , " Service preempted " } ,
{ RSVP_ERROR_UNKNOWN_CLASS , " Unknown object class " } ,
{ RSVP_ERROR_UNKNOWN_C_TYPE , " Unknown object C-type " } ,
2013-04-04 16:23:55 +00:00
{ RSVP_ERROR_RES_FOR_API , " Reserved for API " } ,
2011-01-31 17:09:58 +00:00
{ RSVP_ERROR_TRAFFIC , " Traffic Control Error " } ,
{ RSVP_ERROR_TRAFFIC_SYSTEM , " Traffic Control System Error " } ,
{ RSVP_ERROR_SYSTEM , " RSVP System Error " } ,
{ RSVP_ERROR_ROUTING , " Routing Error " } ,
{ RSVP_ERROR_NOTIFY , " RSVP Notify Error " } ,
{ RSVP_ERROR_NEW_AGGR , " New aggregate needed " } ,
{ RSVP_ERROR_DIFFSERV , " RSVP Diff-Serv Error " } ,
{ RSVP_ERROR_DSTE , " RSVP DiffServ-aware TE Error " } ,
{ RSVP_ERROR_UNKNOWN_ATTR_TLV , " Unknown attributes TLV " } ,
{ RSVP_ERROR_UNKNOWN_ATTR_BIT , " Unknown attributes bit " } ,
{ RSVP_ERROR_ALARMS , " Alarms " } ,
{ RSVP_ERROR_CALL_MGMT , " Call management " } ,
{ RSVP_ERROR_USER_ERROR_SPEC , " User error spec " } ,
2013-04-04 16:23:55 +00:00
{ RSVP_ERROR_REROUTE , " Reroute " } ,
{ RSVP_ERROR_HO_PROC_FAIL , " Handover Procedure Failure " } ,
{ RSVP_ERROR_UNREC_REC_PROXY_ERR , " Unrecoverable Receiver Proxy Error " } ,
{ RSVP_ERROR_RSVP_OVER_MPLS_PROB , " RSVP over MPLS Problem " } ,
{ RSVP_ERROR_LSP_HIER_ISSUE , " LSP Hierarchy Issue " } ,
{ RSVP_ERROR_VCAT_CALL_MGMT , " VCAT Call Management " } ,
2011-01-31 17:09:58 +00:00
{ 0 , NULL }
2000-02-15 21:06:58 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext rsvp_error_codes_ext = VALUE_STRING_EXT_INIT ( rsvp_error_codes ) ;
2000-02-15 21:06:58 +00:00
2008-08-14 23:51:52 +00:00
static const value_string rsvp_admission_control_error_vals [ ] = {
2011-01-31 17:09:58 +00:00
{ 1 , " Delay bound cannot be met " } ,
{ 2 , " Requested bandwidth unavailable " } ,
{ 3 , " MTU in flowspec larger than interface MTU " } ,
{ 4 , " LSP Admission Failure " } ,
{ 5 , " Bad Association Type " } ,
{ 0 , NULL }
2011-01-27 16:08:41 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext rsvp_admission_control_error_vals_ext = VALUE_STRING_EXT_INIT ( rsvp_admission_control_error_vals ) ;
2011-01-27 16:08:41 +00:00
static const value_string rsvp_policy_control_error_vals [ ] = {
2011-01-31 17:09:58 +00:00
{ 0 , " Information reporting " } ,
{ 1 , " Warning " } ,
{ 2 , " Reason unknown " } ,
{ 3 , " Generic Policy Rejection " } ,
{ 4 , " Quota or Accounting violation " } ,
{ 5 , " Flow was preempted " } ,
{ 6 , " Previously installed policy expired (not refreshed) " } ,
{ 7 , " Previous policy data was replaced & caused rejection " } ,
{ 8 , " Policies could not be merged (multicast) " } ,
{ 9 , " PDP down or non functioning " } ,
{ 10 , " Third Party Server (e.g., Kerberos) unavailable " } ,
{ 11 , " POLICY_DATA object has bad syntax " } ,
{ 12 , " POLICY_DATA object failed Integrity Check " } ,
{ 13 , " POLICY_ELEMENT object has bad syntax " } ,
{ 14 , " Mandatory PE Missing (Empty PE is in the PD object) " } ,
{ 15 , " PEP Out of resources to handle policies. " } ,
{ 16 , " PDP encountered bad RSVP objects or syntax " } ,
{ 17 , " Service type was rejected " } ,
{ 18 , " Reservation Style was rejected " } ,
{ 19 , " FlowSpec was rejected (too large) " } ,
{ 20 , " Hard Pre-empted " } ,
{ 100 , " Unauthorized sender " } ,
{ 101 , " Unauthorized receiver " } ,
{ 102 , " ERR_PARTIAL_PREEMPT " } ,
{ 103 , " Inter-domain policy failure " } ,
{ 104 , " Inter-domain explicit route rejected " } ,
{ 0 , NULL }
2003-04-22 05:35:54 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext rsvp_policy_control_error_vals_ext = VALUE_STRING_EXT_INIT ( rsvp_policy_control_error_vals ) ;
2003-04-22 05:35:54 +00:00
2008-08-14 23:51:52 +00:00
static const value_string rsvp_traffic_control_error_vals [ ] = {
2011-01-31 17:09:58 +00:00
{ 1 , " Service conflict " } ,
{ 2 , " Service unsupported " } ,
{ 3 , " Bad Flowspec value " } ,
{ 4 , " Bad Tspec value " } ,
{ 5 , " Bad Adspec value " } ,
{ 0 , NULL }
2003-04-22 05:35:54 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext rsvp_traffic_control_error_vals_ext = VALUE_STRING_EXT_INIT ( rsvp_traffic_control_error_vals ) ;
2003-04-22 05:35:54 +00:00
2008-08-14 23:51:52 +00:00
static const value_string rsvp_routing_error_vals [ ] = {
2011-01-31 17:09:58 +00:00
{ 1 , " Bad EXPLICIT_ROUTE object " } ,
{ 2 , " Bad strict node " } ,
{ 3 , " Bad loose node " } ,
{ 4 , " Bad initial subobject " } ,
{ 5 , " No route available toward destination " } ,
{ 6 , " Unacceptable label value " } ,
{ 7 , " RRO indicated routing loops " } ,
{ 8 , " non-RSVP-capable router stands in the path " } ,
{ 9 , " MPLS label allocation failure " } ,
{ 10 , " Unsupported L3PID " } ,
{ 11 , " Label Set " } ,
{ 12 , " Switching Type " } ,
{ 13 , " Unassigned " } ,
{ 14 , " Unsupported Encoding " } ,
{ 15 , " Unsupported Link Protection " } ,
{ 16 , " Unknown Interface Index " } ,
{ 17 , " Unsupported LSP Protection " } ,
{ 18 , " PROTECTION object not applicable " } ,
{ 19 , " Bad PRIMARY_PATH_ROUTE object " } ,
{ 20 , " PRIMARY_PATH_ROUTE object not applicable " } ,
{ 21 , " LSP Segment Protection Failed " } ,
{ 22 , " Re-routing limit exceeded " } ,
{ 23 , " Unable to Branch " } ,
{ 24 , " Unsupported LSP Integrity " } ,
{ 25 , " P2MP Re-Merge Detected " } ,
{ 26 , " P2MP Re-Merge Parameter Mismatch " } ,
{ 27 , " ERO Resulted in Re-Merge " } ,
{ 28 , " Contiguous LSP type not supported " } ,
{ 29 , " ERO conflicts with inter-domain signaling method " } ,
{ 30 , " Stitching unsupported " } ,
{ 31 , " Unknown PCE-ID for PKS expansion " } ,
{ 32 , " Unreachable PCE for PKS expansion " } ,
{ 33 , " Unknown Path Key for PKS expansion " } ,
{ 34 , " ERO too large for MTU " } ,
{ 64 , " Unsupported Exclude Route Subobject Type " } ,
{ 65 , " Inconsistent Subobject " } ,
{ 66 , " Local Node in Exclude Route " } ,
{ 67 , " Route Blocked by Exclude Route " } ,
{ 68 , " XRO Too Complex " } ,
{ 69 , " EXRS Too Complex " } ,
{ 100 , " Diversity not available " } ,
{ 101 , " Service level not available " } ,
{ 102 , " Invalid/Unknown connection ID " } ,
{ 103 , " No route available toward source (ASON) " } ,
{ 104 , " Unacceptable interface ID (ASON) " } ,
{ 105 , " Invalid/unknown call ID (ASON) " } ,
{ 106 , " Invalid SPC interface ID/label (ASON) " } ,
{ 0 , NULL }
2003-04-22 05:35:54 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext rsvp_routing_error_vals_ext = VALUE_STRING_EXT_INIT ( rsvp_routing_error_vals ) ;
2003-04-22 05:35:54 +00:00
2008-08-14 23:51:52 +00:00
static const value_string rsvp_notify_error_vals [ ] = {
2011-01-31 17:09:58 +00:00
{ 1 , " RRO too large for MTU " } ,
{ 2 , " RRO Notification " } ,
{ 3 , " Tunnel locally repaired " } ,
{ 4 , " Control Channel Active State " } ,
{ 5 , " Control Channel Degraded State " } ,
{ 6 , " Preferable path exists " } ,
{ 7 , " Link maintenance required " } ,
{ 8 , " Node maintenance required " } ,
{ 9 , " LSP Failure " } ,
{ 10 , " LSP recovered " } ,
{ 11 , " LSP Local Failure " } ,
2013-04-04 16:23:55 +00:00
{ 12 , " No OOB mapping received " } ,
2011-01-31 17:09:58 +00:00
{ 0 , NULL }
2003-04-22 05:35:54 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext rsvp_notify_error_vals_ext = VALUE_STRING_EXT_INIT ( rsvp_notify_error_vals ) ;
2003-04-22 05:35:54 +00:00
2008-08-14 23:51:52 +00:00
static const value_string rsvp_diffserv_error_vals [ ] = {
2011-01-31 17:09:58 +00:00
{ 1 , " Unexpected DIFFSERV object " } ,
{ 2 , " Unsupported PHB " } ,
{ 3 , " Invalid `EXP<->PHB mapping' " } ,
{ 4 , " Unsupported PSC " } ,
{ 5 , " Per-LSP context allocation failure " } ,
{ 0 , NULL }
2003-10-10 21:16:24 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext rsvp_diffserv_error_vals_ext = VALUE_STRING_EXT_INIT ( rsvp_diffserv_error_vals ) ;
2003-04-22 05:35:54 +00:00
2006-07-13 05:57:20 +00:00
/* FF: RFC4124 */
2008-08-14 23:51:52 +00:00
static const value_string rsvp_diffserv_aware_te_error_vals [ ] = {
2011-01-31 17:09:58 +00:00
{ 1 , " Unexpected CLASSTYPE object " } ,
{ 2 , " Unsupported Class-Type " } ,
{ 3 , " Invalid Class-Type value " } ,
{ 4 , " CT and setup priority do not form a configured TE-Class " } ,
{ 5 , " CT and holding priority do not form a configured TE-Class " } ,
{ 6 , " CT and setup priority do not form a configured TE-Class AND CT and holding priority do not form a configured TE-Class " } ,
{ 7 , " Inconsistency between signaled PSC and signaled CT " } ,
{ 8 , " Inconsistency between signaled PHBs and signaled CT " } ,
{ 0 , NULL }
2011-01-27 16:08:41 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext rsvp_diffserv_aware_te_error_vals_ext = VALUE_STRING_EXT_INIT ( rsvp_diffserv_aware_te_error_vals ) ;
2011-01-27 16:08:41 +00:00
static const value_string rsvp_call_mgmt_error_vals [ ] = {
2011-01-31 17:09:58 +00:00
{ 1 , " Call ID Contention " } ,
{ 2 , " Connections still Exist " } ,
{ 3 , " Unknown Call ID " } ,
{ 4 , " Duplicate Call " } ,
{ 0 , NULL }
2006-07-13 05:57:20 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext rsvp_call_mgmt_error_vals_ext = VALUE_STRING_EXT_INIT ( rsvp_call_mgmt_error_vals ) ;
2006-07-13 05:57:20 +00:00
2000-02-15 21:06:58 +00:00
/*
* Defines the reservation style plus style - specific information that
* is not a FLOWSPEC or FILTER_SPEC object , in a RESV message .
*/
# define RSVP_DISTINCT (1 << 3)
2012-06-11 16:33:56 +00:00
# define RSVP_SHARED (2 << 3)
2000-02-15 21:06:58 +00:00
# define RSVP_SHARING_MASK (RSVP_DISTINCT | RSVP_SHARED)
2012-06-11 16:33:56 +00:00
# define RSVP_SCOPE_WILD 1
2000-02-15 21:06:58 +00:00
# define RSVP_SCOPE_EXPLICIT 2
2012-06-11 16:33:56 +00:00
# define RSVP_SCOPE_MASK 0x07
2000-02-15 21:06:58 +00:00
2012-06-11 16:33:56 +00:00
# define RSVP_WF (RSVP_SHARED | RSVP_SCOPE_WILD)
2000-02-15 21:06:58 +00:00
# define RSVP_FF (RSVP_DISTINCT | RSVP_SCOPE_EXPLICIT)
2012-06-11 16:33:56 +00:00
# define RSVP_SE (RSVP_SHARED | RSVP_SCOPE_EXPLICIT)
2000-02-15 21:06:58 +00:00
2008-08-14 23:51:52 +00:00
static const value_string style_vals [ ] = {
2000-02-15 21:06:58 +00:00
{ RSVP_WF , " Wildcard Filter " } ,
{ RSVP_FF , " Fixed Filter " } ,
2001-01-03 16:41:08 +00:00
{ RSVP_SE , " Shared-Explicit " } ,
{ 0 , NULL }
2000-02-15 21:06:58 +00:00
} ;
2002-05-16 20:11:32 +00:00
enum {
RSVP_SESSION_TYPE_IPV4 = 1 ,
RSVP_SESSION_TYPE_IPV6 ,
RSVP_SESSION_TYPE_IPV4_LSP = 7 ,
RSVP_SESSION_TYPE_IPV6_LSP ,
2006-11-13 17:30:38 +00:00
RSVP_SESSION_TYPE_AGGREGATE_IPV4 = 9 ,
RSVP_SESSION_TYPE_AGGREGATE_IPV6 ,
2004-07-21 05:57:30 +00:00
RSVP_SESSION_TYPE_IPV4_UNI = 11 ,
2014-01-23 20:31:20 +00:00
RSVP_SESSION_TYPE_P2MP_LSP_TUNNEL_IPV4 = 13 ,
RSVP_SESSION_TYPE_P2MP_LSP_TUNNEL_IPV6 ,
RSVP_SESSION_TYPE_IPV4_E_NNI
2002-05-16 20:11:32 +00:00
} ;
2000-02-15 21:06:58 +00:00
/*
* Defines a desired QoS , in a RESV message .
*/
enum qos_service_type {
QOS_QUALITATIVE = 128 , /* Qualitative service */
2001-12-29 00:43:55 +00:00
QOS_NULL = 6 , /* Null service (RFC2997) */
2012-06-11 16:33:56 +00:00
QOS_CONTROLLED_LOAD = 5 , /* Controlled Load Service */
QOS_GUARANTEED = 2 , /* Guaranteed service */
QOS_TSPEC = 1 /* Traffic specification */
2011-01-27 16:08:41 +00:00
} ;
2000-02-15 21:06:58 +00:00
2008-08-14 23:51:52 +00:00
static const value_string qos_vals [ ] = {
2012-06-11 16:33:56 +00:00
{ QOS_QUALITATIVE , " Qualitative QoS " } ,
{ QOS_NULL , " Null-Service QoS " } ,
2000-02-15 21:06:58 +00:00
{ QOS_CONTROLLED_LOAD , " Controlled-load QoS " } ,
2012-06-11 16:33:56 +00:00
{ QOS_GUARANTEED , " Guaranteed rate QoS " } ,
{ QOS_TSPEC , " Traffic specification " } ,
2001-01-03 16:41:08 +00:00
{ 0 , NULL }
2000-02-15 21:06:58 +00:00
} ;
2008-08-14 23:51:52 +00:00
static const value_string svc_vals [ ] = {
2001-12-29 00:43:55 +00:00
{ 126 , " Compression Hint " } ,
{ 127 , " Token bucket " } ,
{ 128 , " Null Service " } ,
2001-01-03 16:41:08 +00:00
{ 130 , " Guaranteed-rate RSpec " } ,
{ 0 , NULL }
2000-02-15 21:06:58 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext svc_vals_ext = VALUE_STRING_EXT_INIT ( svc_vals ) ;
2000-02-15 21:06:58 +00:00
enum rsvp_spec_types { INTSRV = 2 } ;
enum intsrv_services {
2012-06-11 16:33:56 +00:00
INTSRV_GENERAL = 1 ,
INTSRV_GTD = 2 ,
INTSRV_CLOAD = 5 ,
INTSRV_NULL = 6 ,
2009-01-27 21:46:58 +00:00
INTSRV_QUALITATIVE = 128
2000-02-15 21:06:58 +00:00
} ;
2008-08-14 23:51:52 +00:00
static const value_string intsrv_services_str [ ] = {
2011-01-31 17:09:58 +00:00
{ INTSRV_GENERAL , " Default General Parameters " } ,
{ INTSRV_GTD , " Guaranteed Rate " } ,
{ INTSRV_CLOAD , " Controlled Load " } ,
{ INTSRV_NULL , " Null Service " } ,
{ INTSRV_QUALITATIVE , " Null Service " } ,
2001-01-03 16:41:08 +00:00
{ 0 , NULL }
2000-02-15 21:06:58 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext intsrv_services_str_ext = VALUE_STRING_EXT_INIT ( intsrv_services_str ) ;
2000-02-15 21:06:58 +00:00
2001-12-29 00:43:55 +00:00
#if 0
2000-02-15 21:06:58 +00:00
enum intsrv_field_name {
2012-06-11 16:33:56 +00:00
INTSRV_NON_IS_HOPS = 1 ,
INTSRV_COMPOSED_NON_IS_HOPS ,
INTSRV_IS_HOPS ,
INTSRV_COMPOSED_IS_HOPS ,
INTSRV_PATH_BANDWIDTH ,
INTSRV_MIN_PATH_BANDWIDTH ,
INTSRV_IF_LATENCY ,
INTSRV_PATH_LATENCY ,
INTSRV_MTU ,
INTSRV_COMPOSED_MTU ,
INTSRV_TOKEN_BUCKET_TSPEC = 127 ,
INTSRV_QUALITATIVE_TSPEC = 128 ,
INTSRV_GTD_RSPEC = 130 ,
INTSRV_DELAY = 131 , /* Gtd Parameter C - Max Delay Bound - bytes */
INTSRV_MAX_JITTER , /* Gtd Parameter D - Max Jitter */
INTSRV_E2E_DELAY , /* Gtd Parameter Ctot */
INTSRV_E2E_MAX_JITTER , /* Gtd Parameter Dtot */
INTSRV_SHP_DELAY , /* Gtd Parameter Csum */
INTSRV_SHP_MAX_JITTER /* Gtd Parameter Dsum */
2000-02-15 21:06:58 +00:00
} ;
2001-12-29 00:43:55 +00:00
# endif
2000-02-15 21:06:58 +00:00
2008-08-14 23:51:52 +00:00
static const value_string adspec_params [ ] = {
2011-01-31 17:09:58 +00:00
{ 4 , " IS Hop Count " } ,
{ 6 , " Path b/w estimate " } ,
{ 8 , " Minimum path latency " } ,
{ 10 , " Composed MTU " } ,
{ 133 , " End-to-end composed value for C " } ,
{ 134 , " End-to-end composed value for D " } ,
{ 135 , " Since-last-reshaping point composed C " } ,
{ 136 , " Since-last-reshaping point composed D " } ,
{ 0 , NULL }
2000-02-15 21:06:58 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext adspec_params_ext = VALUE_STRING_EXT_INIT ( adspec_params ) ;
2000-02-15 21:06:58 +00:00
2010-05-10 15:54:57 +00:00
/*
* FF : please keep this list in sync with
2009-10-27 06:05:02 +00:00
* http : //www.iana.org/assignments/gmpls-sig-parameters
2010-05-10 15:54:57 +00:00
* Registry Name : ' LSP Encoding Types '
2009-10-27 06:05:02 +00:00
*/
const range_string gmpls_lsp_enc_rvals [ ] = {
{ 1 , 1 , " Packet " } ,
{ 2 , 2 , " Ethernet " } ,
{ 3 , 3 , " ANSI/ETSI PDH " } ,
{ 4 , 4 , " Reserved " } ,
{ 5 , 5 , " SDH ITU-T G.707 / SONET ANSI T1.105 " } ,
{ 6 , 6 , " Reserved " } ,
{ 7 , 7 , " Digital Wrapper " } ,
{ 8 , 8 , " Lambda (photonic) " } ,
{ 9 , 9 , " Fiber " } ,
{ 10 , 10 , " Reserved " } ,
{ 11 , 11 , " FiberChannel " } ,
{ 12 , 12 , " G.709 ODUk (Digital Path) " } ,
{ 13 , 13 , " G.709 Optical Channel " } ,
{ 14 , 239 , " Unassigned " } ,
{ 240 , 255 , " Experimental Usage/temporarily " } ,
{ 0 , 0 , NULL }
2001-12-26 22:32:57 +00:00
} ;
2010-05-10 15:54:57 +00:00
/*
* FF : please keep this list in sync with
2009-10-27 06:05:02 +00:00
* http : //www.iana.org/assignments/gmpls-sig-parameters
* Registry Name : ' Switching Types '
*/
const range_string gmpls_switching_type_rvals [ ] = {
{ 1 , 1 , " Packet-Switch Capable-1 (PSC-1) " } ,
{ 2 , 2 , " Packet-Switch Capable-2 (PSC-2) " } ,
{ 3 , 3 , " Packet-Switch Capable-3 (PSC-3) " } ,
{ 4 , 4 , " Packet-Switch Capable-4 (PSC-4) " } ,
2011-01-27 16:08:41 +00:00
{ 5 , 29 , " Unassigned " } ,
{ 30 , 30 , " Ethernet Virtual Private Line (EVPL) " } ,
{ 31 , 39 , " Unassigned " } ,
{ 40 , 40 , " 802.1 PBB-TE " } ,
{ 41 , 50 , " Unassigned " } ,
2009-10-27 06:05:02 +00:00
{ 51 , 51 , " Layer-2 Switch Capable (L2SC) " } ,
{ 52 , 99 , " Unassigned " } ,
{ 100 , 100 , " Time-Division-Multiplex Capable (TDM) " } ,
2011-01-27 16:08:41 +00:00
{ 101 , 124 , " Unassigned " } ,
{ 125 , 125 , " Data Channel Switching Capable (DCSC) " } ,
{ 126 , 149 , " Unassigned " } ,
2009-10-27 06:05:02 +00:00
{ 150 , 150 , " Lambda-Switch Capable (LSC) " } ,
{ 151 , 169 , " Unassigned " } ,
{ 200 , 200 , " Fiber-Switch Capable (FSC) " } ,
{ 201 , 255 , " Unassigned " } ,
{ 0 , 0 , NULL }
} ;
2010-05-10 15:54:57 +00:00
/*
* FF : please keep this list in sync with
2009-10-27 06:05:02 +00:00
* http : //www.iana.org/assignments/gmpls-sig-parameters
* Registry Name : ' Generalized PID ( G - PID ) '
*/
static const range_string gmpls_gpid_rvals [ ] = {
{ 0 , 0 , " Unknown " } ,
{ 1 , 4 , " Reserved " } ,
{ 5 , 5 , " Asynchronous mapping of E4 " } ,
{ 6 , 6 , " Asynchronous mapping of DS3/T3 " } ,
{ 7 , 7 , " Asynchronous mapping of E3 " } ,
{ 8 , 8 , " Bit synchronous mapping of E3 " } ,
{ 9 , 9 , " Byte synchronous mapping of E3 " } ,
{ 10 , 10 , " Asynchronous mapping of DS2/T2 " } ,
{ 11 , 11 , " Bit synchronous mapping of DS2/T2 " } ,
{ 12 , 12 , " Reserved " } ,
{ 13 , 13 , " Asynchronous mapping of E1 " } ,
{ 14 , 14 , " Byte synchronous mapping of E1 " } ,
{ 15 , 15 , " Byte synchronous mapping of 31 * DS0 " } ,
{ 16 , 16 , " Asynchronous mapping of DS1/T1 " } ,
{ 17 , 17 , " Bit synchronous mapping of DS1/T1 " } ,
{ 18 , 18 , " Byte synchronous mapping of DS1/T1 " } ,
{ 19 , 19 , " VC-11 in VC-12 " } ,
{ 20 , 21 , " Reserved " } ,
{ 22 , 22 , " DS1 SF Asynchronous " } ,
{ 23 , 23 , " DS1 ESF Asynchronous " } ,
{ 24 , 24 , " DS3 M23 Asynchronous " } ,
{ 25 , 25 , " DS3 C-Bit Parity Asynchronous " } ,
{ 26 , 26 , " VT/LOVC " } ,
{ 27 , 27 , " STS SPE/HOVC " } ,
{ 28 , 28 , " POS - No Scrambling, 16 bit CRC " } ,
{ 29 , 29 , " POS - No Scrambling, 32 bit CRC " } ,
{ 30 , 30 , " POS - Scrambling, 16 bit CRC " } ,
{ 31 , 31 , " POS - Scrambling, 32 bit CRC " } ,
{ 32 , 32 , " ATM mapping " } ,
{ 33 , 33 , " Ethernet PHY " } ,
{ 34 , 34 , " SONET/SDH " } ,
{ 35 , 35 , " Reserved (SONET deprecated) " } ,
{ 36 , 36 , " Digital Wrapper " } ,
{ 37 , 37 , " Lambda " } ,
{ 38 , 38 , " ANSI/ETSI PDH " } ,
{ 39 , 39 , " Reserved " } ,
{ 40 , 40 , " Link Access Protocol SDH (LAPS - X.85 and X.86) " } ,
{ 41 , 41 , " FDDI " } ,
{ 42 , 42 , " DQDB (ETSI ETS 300 216) " } ,
{ 43 , 43 , " FiberChannel-3 (Services) " } ,
{ 44 , 44 , " HDLC " } ,
{ 45 , 45 , " Ethernet V2/DIX (only) " } ,
{ 46 , 46 , " Ethernet 802.3 (only) " } ,
{ 47 , 47 , " G.709 ODUj " } ,
{ 48 , 48 , " G.709 OTUk(v) " } ,
{ 49 , 49 , " CBR/CBRa " } ,
{ 50 , 50 , " CBRb " } ,
{ 51 , 51 , " BSOT " } ,
{ 52 , 52 , " BSNT " } ,
{ 53 , 53 , " IP/PPP (GFP) " } ,
{ 54 , 54 , " Ethernet MAC (framed GFP) " } ,
{ 55 , 55 , " Ethernet PHY (transparent GFP " } ,
{ 56 , 56 , " ESCON " } ,
{ 57 , 57 , " FICON " } ,
{ 58 , 58 , " Fiber Channel " } ,
{ 59 , 31743 , " Unassigned " } ,
{ 31744 , 32767 , " Experimental Usage/temporarily " } ,
{ 32768 , 65535 , " Reserved " } ,
{ 0 , 0 , NULL } ,
2001-12-26 22:32:57 +00:00
} ;
2004-06-19 09:48:49 +00:00
const value_string gmpls_protection_cap_str [ ] = {
2011-01-31 17:09:58 +00:00
{ 1 , " Extra Traffic " } ,
{ 2 , " Unprotected " } ,
{ 4 , " Shared " } ,
{ 8 , " Dedicated 1:1 " } ,
{ 16 , " Dedicated 1+1 " } ,
{ 32 , " Enhanced " } ,
{ 64 , " Reserved " } ,
2012-08-25 01:20:32 +00:00
{ 128 , " Reserved " } ,
2011-01-31 17:09:58 +00:00
{ 0 , NULL }
2004-06-19 09:48:49 +00:00
} ;
2012-08-25 01:20:32 +00:00
static const value_string gmpls_sonet_signal_type_str [ ] = {
2011-01-31 17:09:58 +00:00
{ 1 , " VT1.5 SPE / VC-11 " } ,
{ 2 , " VT2 SPE / VC-12 " } ,
{ 3 , " VT3 SPE " } ,
{ 4 , " VT6 SPE / VC-2 " } ,
{ 5 , " STS-1 SPE / VC-3 " } ,
{ 6 , " STS-3c SPE / VC-4 " } ,
{ 7 , " STS-1 / STM-0 (transp) " } ,
{ 8 , " STS-3 / STM-1 (transp) " } ,
{ 9 , " STS-12 / STM-4 (transp) " } ,
{ 10 , " STS-48 / STM-16 (transp) " } ,
{ 11 , " STS-192 / STM-64 (transp) " } ,
{ 12 , " STS-768 / STM-256 (transp) " } ,
2002-05-16 20:11:32 +00:00
/* Extended non-SONET signal types */
2011-01-31 17:09:58 +00:00
{ 13 , " VTG / TUG-2 " } ,
{ 14 , " TUG-3 " } ,
{ 15 , " STSG-3 / AUG-1 " } ,
{ 16 , " STSG-12 / AUG-4 " } ,
{ 17 , " STSG-48 / AUG-16 " } ,
{ 18 , " STSG-192 / AUG-64 " } ,
{ 19 , " STSG-768 / AUG-256 " } ,
2004-07-21 05:57:30 +00:00
/* Other SONEt signal types */
2011-01-31 17:09:58 +00:00
{ 21 , " STS-12c SPE / VC-4-4c " } ,
{ 22 , " STS-48c SPE / VC-4-16c " } ,
{ 23 , " STS-192c SPE / VC-4-64c " } ,
{ 0 , NULL }
2002-05-16 20:11:32 +00:00
} ;
2012-08-25 01:20:32 +00:00
value_string_ext gmpls_sonet_signal_type_str_ext = VALUE_STRING_EXT_INIT ( gmpls_sonet_signal_type_str ) ;
2002-05-16 20:11:32 +00:00
static const value_string ouni_guni_diversity_str [ ] = {
2011-01-31 17:09:58 +00:00
{ 1 , " Node Diverse " } ,
{ 2 , " Link Diverse " } ,
{ 3 , " Shared-Risk Link Group Diverse " } ,
{ 4 , " Shared Path " } ,
{ 0 , NULL }
2002-05-16 20:11:32 +00:00
} ;
2009-10-27 06:05:02 +00:00
/* FF: RFC 4328 G.709 signal type */
2011-01-31 17:09:58 +00:00
static const range_string gmpls_g709_signal_type_rvals [ ] = {
2009-10-27 06:05:02 +00:00
{ 0 , 0 , " Not significant " } ,
{ 1 , 1 , " ODU1 (i.e., 2.5 Gbps) " } ,
{ 2 , 2 , " ODU2 (i.e., 10 Gbps) " } ,
{ 3 , 3 , " ODU3 (i.e., 40 Gbps) " } ,
{ 4 , 5 , " Reserved (for future use) " } ,
{ 6 , 6 , " OCh at 2.5 Gbps " } ,
{ 7 , 7 , " OCh at 10 Gbps " } ,
{ 8 , 8 , " OCh at 40 Gbps " } ,
{ 9 , 255 , " Reserved (for future use) " } ,
{ 0 , 0 , NULL }
} ;
2013-08-07 23:07:15 +00:00
/* XRO related */
static const value_string rsvp_xro_sobj_lbit_vals [ ] = {
{ 1 , " Should be avoided " } ,
{ 0 , " Must be excluded " } ,
{ 0 , NULL }
} ;
static const value_string rsvp_xro_sobj_type_vals [ ] = {
{ 1 , " IPv4 prefix " } ,
{ 2 , " IPv6 prefix " } ,
{ 4 , " Unnumbered Interface ID " } ,
{ 32 , " Autonomous system number " } ,
{ 33 , " Explicit Exclusion Route subobject (EXRS) " } ,
{ 34 , " SRLG " } ,
{ 0 , NULL }
} ;
static const value_string rsvp_xro_sobj_ip_attr_vals [ ] = {
{ 0 , " Interface " } ,
{ 1 , " Node " } ,
{ 2 , " SRLG " } ,
{ 0 , NULL }
} ;
2013-09-29 22:40:25 +00:00
static const value_string rsvp_juniper_attr_vals [ ] = {
{ 0x01 , " Cos " } ,
{ 0x02 , " Metric 1 " } ,
{ 0x04 , " Metric 2 " } ,
{ 0x08 , " CCC Status " } ,
{ 0x10 , " Path Type " } ,
{ 0 , NULL }
} ;
static const value_string rsvp_juniper_path_attr_vals [ ] = {
{ 0x02 , " Primary " } ,
{ 0x03 , " Secondary " } ,
2013-09-27 20:33:29 +00:00
{ 0 , NULL }
} ;
2000-03-09 18:31:51 +00:00
/* -------------------- Stuff for MPLS/TE objects -------------------- */
2000-02-15 21:06:58 +00:00
2012-06-11 16:33:56 +00:00
static const value_string proto_vals [ ] = {
{ IP_PROTO_ICMP , " ICMP " } ,
{ IP_PROTO_IGMP , " IGMP " } ,
{ IP_PROTO_TCP , " TCP " } ,
{ IP_PROTO_UDP , " UDP " } ,
{ IP_PROTO_OSPF , " OSPF " } ,
{ 0 , NULL }
} ;
1999-08-27 19:21:36 +00:00
/* Filter keys */
2009-10-27 06:05:02 +00:00
enum hf_rsvp_filter_keys {
1999-08-27 19:21:36 +00:00
/* Message types */
RSVPF_MSG , /* Message type */
/* Shorthand for message types */
RSVPF_PATH ,
RSVPF_RESV ,
RSVPF_PATHERR ,
RSVPF_RESVERR ,
RSVPF_PATHTEAR ,
RSVPF_RESVTEAR ,
RSVPF_RCONFIRM ,
2000-06-02 13:24:12 +00:00
RSVPF_JUNK_MSG8 ,
RSVPF_JUNK_MSG9 ,
RSVPF_RTEARCONFIRM ,
2001-05-01 18:19:04 +00:00
RSVPF_JUNK11 ,
RSVPF_BUNDLE ,
RSVPF_ACK ,
RSVPF_JUNK14 ,
RSVPF_SREFRESH ,
2002-06-06 11:02:05 +00:00
RSVPF_JUNK16 ,
RSVPF_JUNK17 ,
RSVPF_JUNK18 ,
RSVPF_JUNK19 ,
2001-06-23 19:45:12 +00:00
RSVPF_HELLO ,
2009-01-27 21:46:58 +00:00
RSVPF_NOTIFY ,
1999-08-27 19:21:36 +00:00
/* Does the message contain an object of this type? */
RSVPF_OBJECT ,
/* Object present shorthands */
RSVPF_SESSION ,
RSVPF_DUMMY_1 ,
RSVPF_HOP ,
RSVPF_INTEGRITY ,
RSVPF_TIME_VALUES ,
RSVPF_ERROR ,
RSVPF_SCOPE ,
RSVPF_STYLE ,
RSVPF_FLOWSPEC ,
RSVPF_FILTER_SPEC ,
RSVPF_SENDER ,
RSVPF_TSPEC ,
RSVPF_ADSPEC ,
RSVPF_POLICY ,
RSVPF_CONFIRM ,
2000-03-09 18:31:51 +00:00
RSVPF_LABEL ,
RSVPF_DUMMY_2 ,
RSVPF_DUMMY_3 ,
RSVPF_LABEL_REQUEST ,
RSVPF_EXPLICIT_ROUTE ,
RSVPF_RECORD_ROUTE ,
2001-12-26 22:32:57 +00:00
RSVPF_HELLO_OBJ ,
2001-05-01 18:19:04 +00:00
RSVPF_MESSAGE_ID ,
RSVPF_MESSAGE_ID_ACK ,
RSVPF_MESSAGE_ID_LIST ,
2002-03-29 00:41:54 +00:00
RSVPF_RECOVERY_LABEL ,
2001-12-26 22:32:57 +00:00
RSVPF_UPSTREAM_LABEL ,
RSVPF_LABEL_SET ,
2002-03-29 00:41:54 +00:00
RSVPF_PROTECTION ,
2003-10-10 21:16:24 +00:00
RSVPF_DIFFSERV ,
2006-07-13 05:57:20 +00:00
RSVPF_DSTE ,
2001-12-26 22:32:57 +00:00
RSVPF_SUGGESTED_LABEL ,
2002-03-29 00:41:54 +00:00
RSVPF_ACCEPTABLE_LABEL_SET ,
RSVPF_RESTART_CAP ,
2000-03-09 18:31:51 +00:00
RSVPF_SESSION_ATTRIBUTE ,
2001-12-29 00:43:55 +00:00
RSVPF_DCLASS ,
2002-01-31 22:42:38 +00:00
RSVPF_LSP_TUNNEL_IF_ID ,
2002-03-29 00:41:54 +00:00
RSVPF_NOTIFY_REQUEST ,
2002-03-01 21:39:01 +00:00
RSVPF_ADMIN_STATUS ,
2011-01-27 16:08:41 +00:00
RSVPF_ADMIN_STATUS_REFLECT ,
RSVPF_ADMIN_STATUS_HANDOVER ,
RSVPF_ADMIN_STATUS_LOCKOUT ,
RSVPF_ADMIN_STATUS_INHIBIT ,
RSVPF_ADMIN_STATUS_CALL_MGMT ,
RSVPF_ADMIN_STATUS_TESTING ,
RSVPF_ADMIN_STATUS_DOWN ,
RSVPF_ADMIN_STATUS_DELETE ,
RSVPF_LSP_ATTRIBUTES ,
2005-07-25 19:52:08 +00:00
RSVPF_ASSOCIATION ,
2002-05-16 20:11:32 +00:00
RSVPF_GENERALIZED_UNI ,
2004-07-21 05:57:30 +00:00
RSVPF_CALL_ID ,
2013-03-31 22:08:00 +00:00
RSVPF_3GPP2_OBJECT ,
2002-08-28 21:04:11 +00:00
RSVPF_UNKNOWN_OBJ ,
1999-08-27 19:21:36 +00:00
/* Session object */
RSVPF_SESSION_IP ,
RSVPF_SESSION_PROTO ,
RSVPF_SESSION_PORT ,
2000-03-09 18:31:51 +00:00
RSVPF_SESSION_TUNNEL_ID ,
RSVPF_SESSION_EXT_TUNNEL_ID ,
1999-08-27 19:21:36 +00:00
/* Sender template */
RSVPF_SENDER_IP ,
RSVPF_SENDER_PORT ,
2000-03-09 18:31:51 +00:00
RSVPF_SENDER_LSP_ID ,
1999-08-27 19:21:36 +00:00
2003-10-10 21:16:24 +00:00
/* Diffserv object */
RSVPF_DIFFSERV_MAPNB ,
RSVPF_DIFFSERV_MAP ,
RSVPF_DIFFSERV_MAP_EXP ,
RSVPF_DIFFSERV_PHBID ,
RSVPF_DIFFSERV_PHBID_DSCP ,
RSVPF_DIFFSERV_PHBID_CODE ,
RSVPF_DIFFSERV_PHBID_BIT14 ,
RSVPF_DIFFSERV_PHBID_BIT15 ,
2006-07-13 05:57:20 +00:00
/* Diffserv-aware TE object */
RSVPF_DSTE_CLASSTYPE ,
2008-04-14 19:43:39 +00:00
/* Generalized UNI object */
RSVPF_GUNI_SRC_IPV4 ,
RSVPF_GUNI_DST_IPV4 ,
RSVPF_GUNI_SRC_IPV6 ,
RSVPF_GUNI_DST_IPV6 ,
/* CALL ID object */
RSVPF_CALL_ID_SRC_ADDR_IPV4 ,
RSVPF_CALL_ID_SRC_ADDR_IPV6 ,
2013-08-07 23:07:15 +00:00
/* EXCLUDE ROUTE object */
RSVPF_EXCLUDE_ROUTE ,
2011-01-05 07:16:09 +00:00
/* Vendor Private objects */
RSVPF_PRIVATE_OBJ ,
RSVPF_ENT_CODE ,
2013-09-27 20:33:29 +00:00
RSVPF_JUNIPER ,
1999-08-27 19:21:36 +00:00
/* Sentinel */
RSVPF_MAX
} ;
2012-09-24 01:59:34 +00:00
static const true_false_string tfs_desired_not_desired = { " Desired " , " Not Desired " } ;
static const true_false_string tfs_next_next_hop_next_hop = { " Next-Next-Hop " , " Next-Hop " } ;
static const true_false_string tfs_gen_uni_direction = { " U: 1 - Upstream label/port ID " , " U: 0 - Downstream label/port ID " } ;
2011-01-05 07:16:09 +00:00
static int hf_rsvp_filter [ RSVPF_MAX ] = { - 1 } ;
1999-08-27 19:21:36 +00:00
2005-09-07 19:52:44 +00:00
/* RSVP Conversation related Hash functions */
/*
* Compare two RSVP request keys to see if they are equal . Return 1 if they
* are , 0 otherwise .
* Two RSVP request keys are equal if and only if they have the exactly the
2007-11-16 23:56:18 +00:00
* same internal conversation identifier , session type , and matching values in
2005-09-07 19:52:44 +00:00
* the session info and source info structures .
*/
2007-11-16 23:56:18 +00:00
static gint
2012-06-11 16:33:56 +00:00
rsvp_equal ( gconstpointer k1 , gconstpointer k2 )
2005-09-07 19:52:44 +00:00
{
const struct rsvp_request_key * key1 = ( const struct rsvp_request_key * ) k1 ;
const struct rsvp_request_key * key2 = ( const struct rsvp_request_key * ) k2 ;
if ( key1 - > conversation ! = key2 - > conversation ) {
2012-06-11 16:33:56 +00:00
return 0 ;
2005-09-07 19:52:44 +00:00
}
if ( key1 - > session_type ! = key2 - > session_type ) {
2012-06-11 16:33:56 +00:00
return 0 ;
2005-09-07 19:52:44 +00:00
}
switch ( key1 - > session_type ) {
case RSVP_SESSION_TYPE_IPV4 :
2012-06-11 16:33:56 +00:00
if ( ADDRESSES_EQUAL ( & key1 - > u . session_ipv4 . destination ,
& key2 - > u . session_ipv4 . destination ) = = FALSE )
return 0 ;
2005-09-07 19:52:44 +00:00
2012-06-11 16:33:56 +00:00
if ( key1 - > u . session_ipv4 . protocol ! = key2 - > u . session_ipv4 . protocol )
return 0 ;
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
if ( key1 - > u . session_ipv4 . udp_dest_port ! = key2 - > u . session_ipv4 . udp_dest_port )
return 0 ;
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
break ;
2005-09-07 19:52:44 +00:00
case RSVP_SESSION_TYPE_IPV6 :
2012-06-11 16:33:56 +00:00
/* this is not supported yet for conversations */
break ;
2005-09-07 19:52:44 +00:00
case RSVP_SESSION_TYPE_IPV4_LSP :
2012-06-11 16:33:56 +00:00
if ( ADDRESSES_EQUAL ( & key1 - > u . session_ipv4_lsp . destination ,
& key2 - > u . session_ipv4_lsp . destination ) = = FALSE )
return 0 ;
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
if ( key1 - > u . session_ipv4_lsp . udp_dest_port ! =
key2 - > u . session_ipv4_lsp . udp_dest_port )
return 0 ;
2005-09-07 19:52:44 +00:00
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
if ( key1 - > u . session_ipv4_lsp . ext_tunnel_id ! =
key2 - > u . session_ipv4_lsp . ext_tunnel_id )
return 0 ;
2005-09-07 19:52:44 +00:00
2012-06-11 16:33:56 +00:00
break ;
2005-09-07 19:52:44 +00:00
2006-11-13 17:30:38 +00:00
case RSVP_SESSION_TYPE_AGGREGATE_IPV4 :
2012-06-11 16:33:56 +00:00
if ( ADDRESSES_EQUAL ( & key1 - > u . session_agg_ipv4 . destination ,
& key2 - > u . session_agg_ipv4 . destination ) = = FALSE )
return 0 ;
2006-11-13 17:30:38 +00:00
2012-06-11 16:33:56 +00:00
if ( key1 - > u . session_agg_ipv4 . dscp ! = key2 - > u . session_agg_ipv4 . dscp )
return 0 ;
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
break ;
2006-11-13 17:30:38 +00:00
case RSVP_SESSION_TYPE_AGGREGATE_IPV6 :
2012-06-11 16:33:56 +00:00
/* this is not supported yet for conversations */
break ;
2006-11-13 17:30:38 +00:00
2005-09-07 19:52:44 +00:00
case RSVP_SESSION_TYPE_IPV4_UNI :
2012-06-11 16:33:56 +00:00
if ( ADDRESSES_EQUAL ( & key1 - > u . session_ipv4_uni . destination ,
& key2 - > u . session_ipv4_uni . destination ) = = FALSE )
return 0 ;
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
if ( key1 - > u . session_ipv4_uni . udp_dest_port ! =
key2 - > u . session_ipv4_uni . udp_dest_port )
return 0 ;
2005-09-07 19:52:44 +00:00
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
if ( key1 - > u . session_ipv4_uni . ext_tunnel_id ! =
key2 - > u . session_ipv4_uni . ext_tunnel_id )
return 0 ;
2005-09-07 19:52:44 +00:00
2012-06-11 16:33:56 +00:00
break ;
2005-09-07 19:52:44 +00:00
case RSVP_SESSION_TYPE_IPV4_E_NNI :
2012-06-11 16:33:56 +00:00
if ( ADDRESSES_EQUAL ( & key1 - > u . session_ipv4_enni . destination ,
& key2 - > u . session_ipv4_enni . destination ) = = FALSE )
return 0 ;
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
if ( key1 - > u . session_ipv4_enni . udp_dest_port ! =
key2 - > u . session_ipv4_enni . udp_dest_port )
return 0 ;
2005-09-07 19:52:44 +00:00
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
if ( key1 - > u . session_ipv4_enni . ext_tunnel_id ! =
key2 - > u . session_ipv4_enni . ext_tunnel_id )
return 0 ;
2005-09-07 19:52:44 +00:00
2012-06-11 16:33:56 +00:00
break ;
2005-09-07 19:52:44 +00:00
default :
2012-06-11 16:33:56 +00:00
/* This should never happen. */
break ;
2005-09-07 19:52:44 +00:00
}
2007-11-16 23:56:18 +00:00
if ( ADDRESSES_EQUAL ( & key1 - > source_info . source ,
2012-06-11 16:33:56 +00:00
& key2 - > source_info . source ) = = FALSE )
return 0 ;
2005-09-07 19:52:44 +00:00
if ( key1 - > source_info . udp_source_port ! = key2 - > source_info . udp_source_port )
2012-06-11 16:33:56 +00:00
return 0 ;
2005-09-07 19:52:44 +00:00
/* If we get here, the two keys are equal. */
return 1 ;
}
/*
2007-11-16 23:56:18 +00:00
* Calculate a hash key for the supplied RSVP request . The internally allocated
2005-09-07 19:52:44 +00:00
* conversation - id is unique , so we just use that .
*/
2007-11-16 23:56:18 +00:00
static guint
2012-06-11 16:33:56 +00:00
rsvp_hash ( gconstpointer k )
2005-09-07 19:52:44 +00:00
{
const struct rsvp_request_key * key = ( const struct rsvp_request_key * ) k ;
return key - > conversation ;
}
/*
2007-11-16 23:56:18 +00:00
* Conversation specific initialization code that deletes any unused memory that
2005-09-07 19:52:44 +00:00
* might need to be freed , and allocates the memory for the various conversation
* hash tables .
*/
static void
2012-06-11 16:33:56 +00:00
rsvp_init_protocol ( void )
2005-09-07 19:52:44 +00:00
{
if ( rsvp_request_hash )
2012-06-11 16:33:56 +00:00
g_hash_table_destroy ( rsvp_request_hash ) ;
2005-09-07 19:52:44 +00:00
rsvp_request_hash = g_hash_table_new ( rsvp_hash , rsvp_equal ) ;
}
2011-01-31 17:09:58 +00:00
static inline int
rsvp_class_to_filter_num ( int classnum )
1999-08-27 19:21:36 +00:00
{
switch ( classnum ) {
case RSVP_CLASS_SESSION :
case RSVP_CLASS_HOP :
case RSVP_CLASS_INTEGRITY :
case RSVP_CLASS_TIME_VALUES :
case RSVP_CLASS_ERROR :
case RSVP_CLASS_SCOPE :
case RSVP_CLASS_STYLE :
case RSVP_CLASS_FLOWSPEC :
case RSVP_CLASS_FILTER_SPEC :
case RSVP_CLASS_SENDER_TEMPLATE :
case RSVP_CLASS_SENDER_TSPEC :
case RSVP_CLASS_ADSPEC :
case RSVP_CLASS_POLICY :
case RSVP_CLASS_CONFIRM :
2000-03-09 18:31:51 +00:00
case RSVP_CLASS_LABEL :
case RSVP_CLASS_LABEL_REQUEST :
2001-12-26 22:32:57 +00:00
case RSVP_CLASS_HELLO :
2000-03-09 18:31:51 +00:00
case RSVP_CLASS_EXPLICIT_ROUTE :
case RSVP_CLASS_RECORD_ROUTE :
2001-05-01 18:19:04 +00:00
case RSVP_CLASS_MESSAGE_ID :
case RSVP_CLASS_MESSAGE_ID_ACK :
2002-08-28 21:04:11 +00:00
case RSVP_CLASS_MESSAGE_ID_LIST :
2012-06-11 16:33:56 +00:00
return classnum + RSVPF_OBJECT ;
break ;
2000-03-09 18:31:51 +00:00
2002-03-29 00:41:54 +00:00
case RSVP_CLASS_RECOVERY_LABEL :
case RSVP_CLASS_UPSTREAM_LABEL :
case RSVP_CLASS_LABEL_SET :
case RSVP_CLASS_PROTECTION :
2012-06-11 16:33:56 +00:00
return RSVPF_RECOVERY_LABEL + ( classnum - RSVP_CLASS_RECOVERY_LABEL ) ;
2002-03-29 00:41:54 +00:00
2001-12-26 22:32:57 +00:00
case RSVP_CLASS_SUGGESTED_LABEL :
2002-03-29 00:41:54 +00:00
case RSVP_CLASS_ACCEPTABLE_LABEL_SET :
case RSVP_CLASS_RESTART_CAP :
2012-06-11 16:33:56 +00:00
return RSVPF_SUGGESTED_LABEL + ( classnum - RSVP_CLASS_SUGGESTED_LABEL ) ;
2002-03-29 00:41:54 +00:00
2003-10-10 21:16:24 +00:00
case RSVP_CLASS_DIFFSERV :
2012-06-11 16:33:56 +00:00
return RSVPF_DIFFSERV ;
2003-10-10 21:16:24 +00:00
2006-07-13 05:57:20 +00:00
case RSVP_CLASS_CLASSTYPE :
2012-06-11 16:33:56 +00:00
return RSVPF_DSTE ;
2006-07-13 05:57:20 +00:00
2002-03-29 00:41:54 +00:00
case RSVP_CLASS_NOTIFY_REQUEST :
2012-06-11 16:33:56 +00:00
return RSVPF_NOTIFY_REQUEST ;
2002-03-01 21:39:01 +00:00
case RSVP_CLASS_ADMIN_STATUS :
2012-06-11 16:33:56 +00:00
return RSVPF_ADMIN_STATUS ;
2011-01-27 16:08:41 +00:00
case RSVP_CLASS_LSP_ATTRIBUTES :
2012-06-11 16:33:56 +00:00
return RSVPF_LSP_ATTRIBUTES ;
2005-07-25 19:52:08 +00:00
case RSVP_CLASS_ASSOCIATION :
2012-06-11 16:33:56 +00:00
return RSVPF_ASSOCIATION ;
2002-03-29 00:41:54 +00:00
2000-03-09 18:31:51 +00:00
case RSVP_CLASS_SESSION_ATTRIBUTE :
2012-06-11 16:33:56 +00:00
return RSVPF_SESSION_ATTRIBUTE ;
2002-05-16 20:11:32 +00:00
case RSVP_CLASS_GENERALIZED_UNI :
2012-06-11 16:33:56 +00:00
return RSVPF_GENERALIZED_UNI ;
2004-07-21 05:57:30 +00:00
case RSVP_CLASS_CALL_ID :
2012-06-11 16:33:56 +00:00
return RSVPF_CALL_ID ;
2013-03-31 22:08:00 +00:00
case RSVP_CLASS_3GPP2_OBJECT :
return RSVPF_3GPP2_OBJECT ;
2001-12-29 00:43:55 +00:00
case RSVP_CLASS_DCLASS :
2012-06-11 16:33:56 +00:00
return RSVPF_DCLASS ;
2002-01-31 22:42:38 +00:00
case RSVP_CLASS_LSP_TUNNEL_IF_ID :
2012-06-11 16:33:56 +00:00
return RSVPF_LSP_TUNNEL_IF_ID ;
2013-08-07 23:07:15 +00:00
case RSVP_CLASS_EXCLUDE_ROUTE :
return RSVPF_EXCLUDE_ROUTE ;
2002-08-28 21:04:11 +00:00
2013-09-27 20:33:29 +00:00
case RSVP_CLASS_JUNIPER_PROPERTIES :
return RSVPF_JUNIPER ;
2011-01-05 07:16:09 +00:00
case RSVP_CLASS_VENDOR_PRIVATE_1 :
case RSVP_CLASS_VENDOR_PRIVATE_2 :
case RSVP_CLASS_VENDOR_PRIVATE_3 :
case RSVP_CLASS_VENDOR_PRIVATE_4 :
case RSVP_CLASS_VENDOR_PRIVATE_5 :
case RSVP_CLASS_VENDOR_PRIVATE_6 :
case RSVP_CLASS_VENDOR_PRIVATE_7 :
case RSVP_CLASS_VENDOR_PRIVATE_8 :
case RSVP_CLASS_VENDOR_PRIVATE_9 :
case RSVP_CLASS_VENDOR_PRIVATE_10 :
case RSVP_CLASS_VENDOR_PRIVATE_11 :
case RSVP_CLASS_VENDOR_PRIVATE_12 :
2011-01-27 16:08:41 +00:00
return RSVPF_PRIVATE_OBJ ;
2011-01-05 07:16:09 +00:00
1999-08-27 19:21:36 +00:00
default :
2012-06-11 16:33:56 +00:00
return RSVPF_UNKNOWN_OBJ ;
1999-08-27 19:21:36 +00:00
}
}
2011-01-31 17:09:58 +00:00
static inline int
rsvp_class_to_tree_type ( int classnum )
2005-08-08 07:27:14 +00:00
{
switch ( classnum ) {
case RSVP_CLASS_SESSION :
2012-06-11 16:33:56 +00:00
return TT_SESSION ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_HOP :
2012-06-11 16:33:56 +00:00
return TT_HOP ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_INTEGRITY :
2012-06-11 16:33:56 +00:00
return TT_INTEGRITY ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_TIME_VALUES :
2012-06-11 16:33:56 +00:00
return TT_TIME_VALUES ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_ERROR :
2012-06-11 16:33:56 +00:00
return TT_ERROR ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_SCOPE :
2012-06-11 16:33:56 +00:00
return TT_SCOPE ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_STYLE :
2012-06-11 16:33:56 +00:00
return TT_STYLE ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_FLOWSPEC :
2012-06-11 16:33:56 +00:00
return TT_FLOWSPEC ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_FILTER_SPEC :
2012-06-11 16:33:56 +00:00
return TT_FILTER_SPEC ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_SENDER_TEMPLATE :
2012-06-11 16:33:56 +00:00
return TT_SENDER_TEMPLATE ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_SENDER_TSPEC :
2012-06-11 16:33:56 +00:00
return TT_TSPEC ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_ADSPEC :
2012-06-11 16:33:56 +00:00
return TT_ADSPEC ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_POLICY :
2012-06-11 16:33:56 +00:00
return TT_POLICY ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_CONFIRM :
2012-06-11 16:33:56 +00:00
return TT_CONFIRM ;
2008-04-14 19:43:39 +00:00
case RSVP_CLASS_RECOVERY_LABEL :
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_UPSTREAM_LABEL :
case RSVP_CLASS_SUGGESTED_LABEL :
case RSVP_CLASS_LABEL :
2012-06-11 16:33:56 +00:00
return TT_LABEL ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_LABEL_REQUEST :
2012-06-11 16:33:56 +00:00
return TT_LABEL_REQUEST ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_HELLO :
2012-06-11 16:33:56 +00:00
return TT_HELLO_OBJ ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_EXPLICIT_ROUTE :
2012-06-11 16:33:56 +00:00
return TT_EXPLICIT_ROUTE ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_RECORD_ROUTE :
2012-06-11 16:33:56 +00:00
return TT_RECORD_ROUTE ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_MESSAGE_ID :
2012-06-11 16:33:56 +00:00
return TT_MESSAGE_ID ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_MESSAGE_ID_ACK :
2012-06-11 16:33:56 +00:00
return TT_MESSAGE_ID_ACK ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_MESSAGE_ID_LIST :
2012-06-11 16:33:56 +00:00
return TT_MESSAGE_ID_LIST ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_LABEL_SET :
2012-06-11 16:33:56 +00:00
return TT_LABEL_SET ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_PROTECTION :
2012-06-11 16:33:56 +00:00
return TT_PROTECTION_INFO ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_ACCEPTABLE_LABEL_SET :
2012-06-11 16:33:56 +00:00
return TT_UNKNOWN_CLASS ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_RESTART_CAP :
2012-06-11 16:33:56 +00:00
return TT_RESTART_CAP ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_DIFFSERV :
2012-06-11 16:33:56 +00:00
return TT_DIFFSERV ;
2006-07-13 05:57:20 +00:00
case RSVP_CLASS_CLASSTYPE :
2012-06-11 16:33:56 +00:00
return TT_CLASSTYPE ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_NOTIFY_REQUEST :
2012-06-11 16:33:56 +00:00
return TT_UNKNOWN_CLASS ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_ADMIN_STATUS :
2012-06-11 16:33:56 +00:00
return TT_ADMIN_STATUS ;
2011-01-27 16:08:41 +00:00
case RSVP_CLASS_LSP_ATTRIBUTES :
case RSVP_CLASS_LSP_REQUIRED_ATTRIBUTES :
2012-06-11 16:33:56 +00:00
return TT_LSP_ATTRIBUTES ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_ASSOCIATION :
2012-06-11 16:33:56 +00:00
return TT_ASSOCIATION ;
2013-09-27 20:33:29 +00:00
case RSVP_CLASS_JUNIPER_PROPERTIES :
return TT_JUNIPER ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_SESSION_ATTRIBUTE :
2012-06-11 16:33:56 +00:00
return TT_SESSION_ATTRIBUTE ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_GENERALIZED_UNI :
2012-06-11 16:33:56 +00:00
return TT_GEN_UNI ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_CALL_ID :
2012-06-11 16:33:56 +00:00
return TT_CALL_ID ;
2013-03-31 22:08:00 +00:00
case RSVP_CLASS_3GPP2_OBJECT :
return TT_3GPP2_OBJECT ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_DCLASS :
2012-06-11 16:33:56 +00:00
return TT_DCLASS ;
2005-08-08 07:27:14 +00:00
case RSVP_CLASS_LSP_TUNNEL_IF_ID :
2012-06-11 16:33:56 +00:00
return TT_LSP_TUNNEL_IF_ID ;
2013-08-07 23:07:15 +00:00
case RSVP_CLASS_EXCLUDE_ROUTE :
return TT_EXCLUDE_ROUTE ;
2011-01-05 07:16:09 +00:00
case RSVP_CLASS_VENDOR_PRIVATE_1 :
case RSVP_CLASS_VENDOR_PRIVATE_2 :
case RSVP_CLASS_VENDOR_PRIVATE_3 :
case RSVP_CLASS_VENDOR_PRIVATE_4 :
case RSVP_CLASS_VENDOR_PRIVATE_5 :
case RSVP_CLASS_VENDOR_PRIVATE_6 :
case RSVP_CLASS_VENDOR_PRIVATE_7 :
case RSVP_CLASS_VENDOR_PRIVATE_8 :
case RSVP_CLASS_VENDOR_PRIVATE_9 :
case RSVP_CLASS_VENDOR_PRIVATE_10 :
case RSVP_CLASS_VENDOR_PRIVATE_11 :
case RSVP_CLASS_VENDOR_PRIVATE_12 :
return TT_PRIVATE_CLASS ;
2005-08-08 07:27:14 +00:00
default :
2012-06-11 16:33:56 +00:00
return TT_UNKNOWN_CLASS ;
2005-08-08 07:27:14 +00:00
}
}
2002-01-31 22:42:38 +00:00
static void
find_rsvp_session_tempfilt ( tvbuff_t * tvb , int hdr_offset , int * session_offp , int * tempfilt_offp )
{
2012-06-11 16:33:56 +00:00
int s_off = 0 , t_off = 0 ;
int len , off ;
2005-08-04 17:11:32 +00:00
guint obj_length ;
2002-01-31 22:42:38 +00:00
2002-07-31 10:10:44 +00:00
if ( ! tvb_bytes_exist ( tvb , hdr_offset + 6 , 2 ) )
2012-06-11 16:33:56 +00:00
goto done ;
2002-01-31 22:42:38 +00:00
len = tvb_get_ntohs ( tvb , hdr_offset + 6 ) + hdr_offset ;
2012-06-11 16:33:56 +00:00
for ( off = hdr_offset + 8 ; ( off < len ) & & tvb_bytes_exist ( tvb , off , 3 ) ; off + = obj_length ) {
obj_length = tvb_get_ntohs ( tvb , off ) ;
if ( obj_length = = 0 )
break ;
switch ( tvb_get_guint8 ( tvb , off + 2 ) ) {
case RSVP_CLASS_SESSION :
s_off = off ;
break ;
case RSVP_CLASS_SENDER_TEMPLATE :
case RSVP_CLASS_FILTER_SPEC :
t_off = off ;
break ;
default :
break ;
}
2002-01-31 22:42:38 +00:00
}
done :
2012-06-11 16:33:56 +00:00
if ( session_offp ) * session_offp = s_off ;
2002-01-31 22:42:38 +00:00
if ( tempfilt_offp ) * tempfilt_offp = t_off ;
}
2011-01-31 17:09:58 +00:00
static char *
2012-06-11 16:33:56 +00:00
summary_session ( tvbuff_t * tvb , int offset )
2002-01-31 22:42:38 +00:00
{
switch ( tvb_get_guint8 ( tvb , offset + 3 ) ) {
2002-05-16 20:11:32 +00:00
case RSVP_SESSION_TYPE_IPV4 :
2013-09-15 18:13:02 +00:00
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" SESSION: IPv4, Destination %s, Protocol %d, Port %d. " ,
tvb_ip_to_str ( tvb , offset + 4 ) ,
tvb_get_guint8 ( tvb , offset + 8 ) ,
tvb_get_ntohs ( tvb , offset + 10 ) ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
case RSVP_SESSION_TYPE_IPV4_LSP :
2013-09-15 18:13:02 +00:00
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" SESSION: IPv4-LSP, Destination %s, Tunnel ID %d, Ext ID %0x. " ,
tvb_ip_to_str ( tvb , offset + 4 ) ,
tvb_get_ntohs ( tvb , offset + 10 ) ,
tvb_get_ntohl ( tvb , offset + 12 ) ) ;
2012-06-11 16:33:56 +00:00
break ;
2006-11-13 17:30:38 +00:00
case RSVP_SESSION_TYPE_AGGREGATE_IPV4 :
2013-09-15 18:13:02 +00:00
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" SESSION: IPv4-Aggregate, Destination %s, DSCP %d. " ,
tvb_ip_to_str ( tvb , offset + 4 ) ,
tvb_get_guint8 ( tvb , offset + 11 ) ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
case RSVP_SESSION_TYPE_IPV4_UNI :
2013-09-15 18:13:02 +00:00
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" SESSION: IPv4-UNI, Destination %s, Tunnel ID %d, Ext Address %s. " ,
tvb_ip_to_str ( tvb , offset + 4 ) ,
tvb_get_ntohs ( tvb , offset + 10 ) ,
tvb_ip_to_str ( tvb , offset + 12 ) ) ;
2012-06-11 16:33:56 +00:00
break ;
2014-01-23 20:31:20 +00:00
case RSVP_SESSION_TYPE_P2MP_LSP_TUNNEL_IPV4 :
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" SESSION: IPv4-P2MP LSP TUNNEL, PSMP ID %d, Tunnel ID %d, Ext Tunnel %s. " ,
tvb_get_ntohl ( tvb , offset + 4 ) ,
tvb_get_ntohs ( tvb , offset + 10 ) ,
tvb_ip_to_str ( tvb , offset + 12 ) ) ;
break ;
case RSVP_SESSION_TYPE_P2MP_LSP_TUNNEL_IPV6 :
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" SESSION: IPv6-P2MP LSP TUNNEL, PSMP ID %d, Tunnel ID %d, Ext Tunnel %s. " ,
tvb_get_ntohl ( tvb , offset + 4 ) ,
tvb_get_ntohs ( tvb , offset + 10 ) ,
tvb_ip6_to_str ( tvb , offset + 12 ) ) ;
break ;
2004-07-21 05:57:30 +00:00
case RSVP_SESSION_TYPE_IPV4_E_NNI :
2013-09-15 18:13:02 +00:00
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" SESSION: IPv4-E-NNI, Destination %s, Tunnel ID %d, Ext Address %s. " ,
tvb_ip_to_str ( tvb , offset + 4 ) ,
tvb_get_ntohs ( tvb , offset + 10 ) ,
tvb_ip_to_str ( tvb , offset + 12 ) ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-01-31 22:42:38 +00:00
default :
2013-09-15 18:13:02 +00:00
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" SESSION: Type %d. " , tvb_get_guint8 ( tvb , offset + 3 ) ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-01-31 22:42:38 +00:00
}
2012-06-11 16:33:56 +00:00
DISSECTOR_ASSERT_NOT_REACHED ( ) ;
2002-01-31 22:42:38 +00:00
}
2011-01-31 17:09:58 +00:00
static char *
2012-06-11 16:33:56 +00:00
summary_template ( tvbuff_t * tvb , int offset )
2002-01-31 22:42:38 +00:00
{
2005-08-05 00:23:22 +00:00
const char * objtype ;
2002-01-31 22:42:38 +00:00
if ( tvb_get_guint8 ( tvb , offset + 2 ) = = RSVP_CLASS_FILTER_SPEC )
2012-06-11 16:33:56 +00:00
objtype = " FILTERSPEC " ;
2002-01-31 22:42:38 +00:00
else
2012-06-11 16:33:56 +00:00
objtype = " SENDER TEMPLATE " ;
2002-01-31 22:42:38 +00:00
switch ( tvb_get_guint8 ( tvb , offset + 3 ) ) {
case 1 :
2013-09-15 18:13:02 +00:00
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" %s: IPv4, Sender %s, Port %d. " , objtype ,
tvb_ip_to_str ( tvb , offset + 4 ) ,
tvb_get_ntohs ( tvb , offset + 10 ) ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-01-31 22:42:38 +00:00
case 7 :
2013-09-15 18:13:02 +00:00
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" %s: IPv4-LSP, Tunnel Source: %s, LSP ID: %d. " , objtype ,
tvb_ip_to_str ( tvb , offset + 4 ) ,
tvb_get_ntohs ( tvb , offset + 10 ) ) ;
2012-06-11 16:33:56 +00:00
break ;
2006-11-13 17:30:38 +00:00
case 9 :
2013-09-15 18:13:02 +00:00
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" %s: IPv4-Aggregate, Aggregator %s. " , objtype ,
tvb_ip_to_str ( tvb , offset + 4 ) ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-01-31 22:42:38 +00:00
default :
2013-09-15 18:13:02 +00:00
return wmem_strdup_printf ( wmem_packet_scope ( ) ,
" %s: Type %d. " , objtype , tvb_get_guint8 ( tvb , offset + 3 ) ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-01-31 22:42:38 +00:00
}
2012-06-11 16:33:56 +00:00
DISSECTOR_ASSERT_NOT_REACHED ( ) ;
2002-01-31 22:42:38 +00:00
}
2002-05-16 20:11:32 +00:00
/*------------------------------------------------------------------------------
* SESSION
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_session ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type ,
rsvp_conversation_info * rsvph )
1999-06-11 16:45:02 +00:00
{
2008-05-14 01:47:41 +00:00
proto_item * hidden_item ;
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
2001-02-04 08:21:35 +00:00
2005-06-20 19:35:58 +00:00
proto_item_set_text ( ti , " %s " , summary_session ( tvb , offset ) ) ;
2002-08-28 21:04:11 +00:00
2002-05-16 20:11:32 +00:00
switch ( type ) {
case RSVP_SESSION_TYPE_IPV4 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 1 - IPv4 " ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_item ( rsvp_object_tree ,
2011-01-31 17:09:58 +00:00
hf_rsvp_filter [ RSVPF_SESSION_IP ] ,
2012-06-11 16:33:56 +00:00
tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_PROTO ] , tvb ,
offset2 + 4 , 1 , ENC_BIG_ENDIAN ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_flags , tvb , offset2 + 5 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_PORT ] , tvb ,
offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
/*
* Save this information to build the conversation request key
* later .
*/
rsvph - > session_type = RSVP_SESSION_TYPE_IPV4 ;
Introduce, and start using, TVB_SET_ADDRESS() and TVB_SET_ADDRESS_HF(). They
are like the non-TVB versions except that they take a TVB and an offset
instead of (frequently) a pointer into the TVB.
Calling tvb_get_ptr() before modifying the rest of the fields should help fix
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7960 (though I can't
reproduce that problem).
Replace a bunch of calls like:
SET_ADDRESS(..., AT_XXX, length, tvb_get_ptr(tvb, offset, length));
with:
TVB_SET_ADDRESS(..., AT_XXX, tvb, offset, length);
svn path=/trunk/; revision=46324
2012-12-02 04:49:13 +00:00
TVB_SET_ADDRESS ( & rsvph - > destination , AT_IPv4 , tvb , offset2 , 4 ) ;
2012-06-11 16:33:56 +00:00
rsvph - > protocol = tvb_get_guint8 ( tvb , offset2 + 4 ) ;
rsvph - > udp_dest_port = tvb_get_ntohs ( tvb , offset2 + 6 ) ;
2005-09-07 19:52:44 +00:00
2012-06-11 16:33:56 +00:00
break ;
2002-08-28 21:04:11 +00:00
2002-05-16 20:11:32 +00:00
case RSVP_SESSION_TYPE_IPV6 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 2 - IPv6 " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_destination_address , tvb , offset2 , 16 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_protocol , tvb , offset2 + 16 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_flags , tvb , offset2 + 17 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_destination_port , tvb , offset2 + 18 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
/*
* Save this information to build the conversation request key
* later . IPv6 conversatiuon support is not implemented yet , so only
* the session type is stored .
*/
rsvph - > session_type = RSVP_SESSION_TYPE_IPV6 ;
break ;
2002-08-28 21:04:11 +00:00
case RSVP_SESSION_TYPE_IPV4_LSP :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 7 - IPv4 LSP " ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_IP ] ,
tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_TUNNEL_ID ] ,
tvb , offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 8 , 4 ,
" Extended Tunnel ID: %u (%s) " ,
tvb_get_ntohl ( tvb , offset2 + 8 ) ,
tvb_ip_to_str ( tvb , offset2 + 8 ) ) ;
hidden_item = proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_EXT_TUNNEL_ID ] ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
/*
* Save this information to build the conversation request key
* later .
*/
rsvph - > session_type = RSVP_SESSION_TYPE_IPV4_LSP ;
Introduce, and start using, TVB_SET_ADDRESS() and TVB_SET_ADDRESS_HF(). They
are like the non-TVB versions except that they take a TVB and an offset
instead of (frequently) a pointer into the TVB.
Calling tvb_get_ptr() before modifying the rest of the fields should help fix
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7960 (though I can't
reproduce that problem).
Replace a bunch of calls like:
SET_ADDRESS(..., AT_XXX, length, tvb_get_ptr(tvb, offset, length));
with:
TVB_SET_ADDRESS(..., AT_XXX, tvb, offset, length);
svn path=/trunk/; revision=46324
2012-12-02 04:49:13 +00:00
TVB_SET_ADDRESS ( & rsvph - > destination , AT_IPv4 , tvb , offset2 , 4 ) ;
2012-06-11 16:33:56 +00:00
rsvph - > udp_dest_port = tvb_get_ntohs ( tvb , offset2 + 6 ) ;
rsvph - > ext_tunnel_id = tvb_get_ntohl ( tvb , offset2 + 8 ) ;
break ;
2001-02-04 08:21:35 +00:00
2006-11-13 17:30:38 +00:00
case RSVP_SESSION_TYPE_AGGREGATE_IPV4 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 9 - IPv4 Aggregate " ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_IP ] ,
tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_dscp , tvb , offset2 + 7 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
/*
* Save this information to build the conversation request key
* later .
*/
rsvph - > session_type = RSVP_SESSION_TYPE_AGGREGATE_IPV4 ;
Introduce, and start using, TVB_SET_ADDRESS() and TVB_SET_ADDRESS_HF(). They
are like the non-TVB versions except that they take a TVB and an offset
instead of (frequently) a pointer into the TVB.
Calling tvb_get_ptr() before modifying the rest of the fields should help fix
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7960 (though I can't
reproduce that problem).
Replace a bunch of calls like:
SET_ADDRESS(..., AT_XXX, length, tvb_get_ptr(tvb, offset, length));
with:
TVB_SET_ADDRESS(..., AT_XXX, tvb, offset, length);
svn path=/trunk/; revision=46324
2012-12-02 04:49:13 +00:00
TVB_SET_ADDRESS ( & rsvph - > destination , AT_IPv4 , tvb , offset2 , 4 ) ;
2012-06-11 16:33:56 +00:00
rsvph - > dscp = tvb_get_guint8 ( tvb , offset2 + 7 ) ;
rsvph - > ext_tunnel_id = tvb_get_ntohl ( tvb , offset2 + 8 ) ;
break ;
2006-11-13 17:30:38 +00:00
2002-08-28 21:04:11 +00:00
case RSVP_SESSION_TYPE_IPV4_UNI :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 11 - IPv4 UNI " ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_IP ] ,
tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_TUNNEL_ID ] ,
tvb , offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_extended_ipv4_address , tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
hidden_item = proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_EXT_TUNNEL_ID ] ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
/*
* Save this information to build the conversation request key
* later .
*/
rsvph - > session_type = RSVP_SESSION_TYPE_IPV4_UNI ;
Introduce, and start using, TVB_SET_ADDRESS() and TVB_SET_ADDRESS_HF(). They
are like the non-TVB versions except that they take a TVB and an offset
instead of (frequently) a pointer into the TVB.
Calling tvb_get_ptr() before modifying the rest of the fields should help fix
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7960 (though I can't
reproduce that problem).
Replace a bunch of calls like:
SET_ADDRESS(..., AT_XXX, length, tvb_get_ptr(tvb, offset, length));
with:
TVB_SET_ADDRESS(..., AT_XXX, tvb, offset, length);
svn path=/trunk/; revision=46324
2012-12-02 04:49:13 +00:00
TVB_SET_ADDRESS ( & rsvph - > destination , AT_IPv4 , tvb , offset2 , 4 ) ;
2012-06-11 16:33:56 +00:00
rsvph - > udp_dest_port = tvb_get_ntohs ( tvb , offset2 + 6 ) ;
rsvph - > ext_tunnel_id = tvb_get_ntohl ( tvb , offset2 + 8 ) ;
break ;
2004-07-21 05:57:30 +00:00
2014-01-23 20:31:20 +00:00
case RSVP_SESSION_TYPE_P2MP_LSP_TUNNEL_IPV4 :
proto_tree_add_text ( rsvp_object_tree , tvb , offset + 3 , 1 ,
" C-type: 13 - IPv4 P2MP LSP TUNNEL " ) ;
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_IP ] ,
tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_TUNNEL_ID ] ,
tvb , offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 8 , 4 ,
" Extended Tunnel: %s " ,
tvb_ip_to_str ( tvb , offset2 + 8 ) ) ;
hidden_item = proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_EXT_TUNNEL_ID ] ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
/*
* Save this information to build the conversation request key
* later .
*/
rsvph - > session_type = RSVP_SESSION_TYPE_P2MP_LSP_TUNNEL_IPV4 ;
TVB_SET_ADDRESS ( & rsvph - > destination , AT_IPv4 , tvb , offset2 , 4 ) ;
rsvph - > udp_dest_port = tvb_get_ntohs ( tvb , offset2 + 6 ) ;
rsvph - > ext_tunnel_id = tvb_get_ntohl ( tvb , offset2 + 8 ) ;
break ;
2004-07-21 05:57:30 +00:00
case RSVP_SESSION_TYPE_IPV4_E_NNI :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 15 - IPv4 E-NNI " ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_IP ] ,
tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_TUNNEL_ID ] ,
tvb , offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_extended_ipv4_address , tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
hidden_item = proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SESSION_EXT_TUNNEL_ID ] ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
/*
* Save this information to build the conversation request key
* later .
*/
rsvph - > session_type = RSVP_SESSION_TYPE_IPV4_E_NNI ;
Introduce, and start using, TVB_SET_ADDRESS() and TVB_SET_ADDRESS_HF(). They
are like the non-TVB versions except that they take a TVB and an offset
instead of (frequently) a pointer into the TVB.
Calling tvb_get_ptr() before modifying the rest of the fields should help fix
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7960 (though I can't
reproduce that problem).
Replace a bunch of calls like:
SET_ADDRESS(..., AT_XXX, length, tvb_get_ptr(tvb, offset, length));
with:
TVB_SET_ADDRESS(..., AT_XXX, tvb, offset, length);
svn path=/trunk/; revision=46324
2012-12-02 04:49:13 +00:00
TVB_SET_ADDRESS ( & rsvph - > destination , AT_IPv4 , tvb , offset2 , 4 ) ;
2012-06-11 16:33:56 +00:00
rsvph - > udp_dest_port = tvb_get_ntohs ( tvb , offset2 + 6 ) ;
rsvph - > ext_tunnel_id = tvb_get_ntohl ( tvb , offset2 + 8 ) ;
break ;
2002-05-16 20:11:32 +00:00
2002-08-28 21:04:11 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
1999-06-11 16:45:02 +00:00
}
2002-05-16 20:11:32 +00:00
}
1999-06-11 16:45:02 +00:00
2002-10-02 21:15:27 +00:00
/*------------------------------------------------------------------------------
2011-01-27 16:08:41 +00:00
* TLVs for HOP , ERROR and other IF_ID extended objects ( RFC4920 )
* ( TODO : TLV type 12 , 13 , 25 )
2002-10-02 21:15:27 +00:00
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_ifid_tlv ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb , int offset , int length ,
int subtree_type )
2002-10-02 21:15:27 +00:00
{
2012-06-11 16:33:56 +00:00
int tlv_off , padding ;
guint16 tlv_type ;
int tlv_len ;
guint8 isis_len ;
2011-01-27 16:08:41 +00:00
const char * tlv_name ;
2012-06-11 16:44:42 +00:00
proto_tree * rsvp_ifid_subtree = NULL , * ti2 ;
2002-10-02 21:15:27 +00:00
2011-01-27 16:08:41 +00:00
for ( tlv_off = 0 ; tlv_off < length ; ) {
2012-06-11 16:33:56 +00:00
tlv_type = tvb_get_ntohs ( tvb , offset + tlv_off ) ;
tlv_len = tvb_get_ntohs ( tvb , offset + tlv_off + 2 ) ;
2005-04-20 19:52:23 +00:00
2012-06-11 16:33:56 +00:00
if ( ( tlv_len = = 0 ) | | ( tlv_off + tlv_len > length ) ) {
proto_tree_add_text ( rsvp_object_tree , tvb , offset + tlv_off + 2 , 2 ,
" Invalid TLV length " ) ;
2011-01-31 15:27:26 +00:00
return ;
2012-06-11 16:33:56 +00:00
}
switch ( tlv_type ) {
case 1 : /* IPv4 */
tlv_name = " " ;
goto ifid_ipv4 ;
case 14 : /* PREVIOUS_HOP_IPV4 */
tlv_name = " Previous-Hop " ;
goto ifid_ipv4 ;
case 16 : /* INCOMING_IPV4 */
tlv_name = " Incoming " ;
ifid_ipv4 :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" %sIPv4 TLV - %s " , tlv_name ,
tvb_ip_to_str ( tvb , offset + tlv_off + 4 ) ) ;
rsvp_ifid_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off , 2 ,
" Type: %d (%sIPv4) " , tlv_type , tlv_name ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_ipv4_address , tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %sIPv4: %s. " , tlv_name ,
tvb_ip_to_str ( tvb , offset + tlv_off + 4 ) ) ;
break ;
case 2 : /* IPv6 */
tlv_name = " " ;
goto ifid_ipv6 ;
case 15 : /* PREVIOUS_HOP_IPV6 */
tlv_name = " Previous-Hop " ;
goto ifid_ipv6 ;
case 17 : /* INCOMING_IPV6 */
tlv_name = " Incoming " ;
ifid_ipv6 :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" %sIPv6 TLV - %s " , tlv_name ,
tvb_ip6_to_str ( tvb , offset + tlv_off + 4 ) ) ;
rsvp_ifid_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off , 2 ,
" Type: %d (%sIPv6) " , tlv_type , tlv_name ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_ipv6_address , tvb , offset + tlv_off + 4 , 16 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %sIPv6: %s. " , tlv_name ,
tvb_ip6_to_str ( tvb , offset + tlv_off + 4 ) ) ;
break ;
case 3 : /* IF_INDEX */
tlv_name = " " ;
goto ifid_ifindex ;
case 4 : /* COMPONENT_IF_DOWNSTREAM */
tlv_name = " Forward " ;
goto ifid_ifindex ;
case 5 : /* COMPONENT_IF_UPSTREAM */
tlv_name = " Reverse " ;
goto ifid_ifindex ;
case 18 : /* INCOMING_IF_INDEX */
tlv_name = " Incoming " ;
ifid_ifindex :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" Interface-Index%s TLV - %s, %d " ,
tlv_name ,
tvb_ip_to_str ( tvb , offset + tlv_off + 4 ) ,
tvb_get_ntohl ( tvb , offset + tlv_off + 8 ) ) ;
rsvp_ifid_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off , 2 ,
" Type: %d (Interface Index%s) " , tlv_type , tlv_name ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_ipv4_address , tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlvinterface_id , tvb , offset + tlv_off + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " Data If-Index%s: %s, %d. " , tlv_name ,
tvb_ip_to_str ( tvb , offset + tlv_off + 4 ) ,
tvb_get_ntohl ( tvb , offset + tlv_off + 8 ) ) ;
break ;
case 6 : /* DOWNSTREAM_LABEL */
tlv_name = " Downstream " ;
goto ifid_label ;
case 7 : /* UPSTREAM_LABEL */
tlv_name = " Upstream " ;
goto ifid_label ;
case 19 : /* INCOMING_DOWN_LABEL */
tlv_name = " Incoming-Downstream " ;
goto ifid_label ;
case 20 : /* INCOMING_UP_LABEL */
tlv_name = " Incoming-Upstream " ;
ifid_label :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" %s-Label TLV - %u " , tlv_name ,
tvb_get_ntohl ( tvb , offset + tlv_off + 4 ) ) ;
rsvp_ifid_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off , 2 ,
" Type: %d (%s-Label) " , tlv_type , tlv_name ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_label , tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %s-Label: %u. " , tlv_name ,
tvb_get_ntohl ( tvb , offset + tlv_off + 4 ) ) ;
break ;
case 8 : /* NODE_ID */
tlv_name = " " ;
goto ifid_nodeid ;
case 21 : /* REPORTING_NODE_ID */
tlv_name = " Reporting- " ;
ifid_nodeid :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" %sNode-ID TLV - %s " , tlv_name ,
tvb_ip_to_str ( tvb , offset + tlv_off + 4 ) ) ;
rsvp_ifid_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off , 2 ,
" Type: %d (%sNode-ID) " , tlv_type , tlv_name ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_node_id , tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %sNode-ID: %s. " , tlv_name ,
tvb_ip_to_str ( tvb , offset + tlv_off + 4 ) ) ;
break ;
case 9 : /* OSPF_AREA */
tlv_name = " " ;
goto ifid_ospf ;
case 22 : /* REPORTING_OSPF_AREA */
tlv_name = " Reporting- " ;
ifid_ospf :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" %sOSPF-Area TLV - %u " , tlv_name ,
tvb_get_ntohl ( tvb , offset + tlv_off + 4 ) ) ;
rsvp_ifid_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off , 2 ,
" Type: %d (%sOSPF-Area) " , tlv_type , tlv_name ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_area , tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %sOSPF-Area: %u. " , tlv_name ,
tvb_get_ntohl ( tvb , offset + tlv_off + 4 ) ) ;
break ;
case 10 : /* ISIS_AREA */
tlv_name = " " ;
goto ifid_isis ;
case 23 : /* REPORTING_ISIS_AREA */
tlv_name = " Reporting- " ;
ifid_isis :
isis_len = tvb_get_guint8 ( tvb , offset + tlv_off + 4 ) ;
if ( ( isis_len < 2 ) | | ( isis_len > 11 ) )
{
proto_tree_add_text ( rsvp_object_tree , tvb , offset + tlv_off , tlv_len ,
" %sISIS-Area TLV - Invalid Length field " , tlv_name ) ;
break ;
}
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" %sISIS-Area TLV - %s " , tlv_name ,
print_nsap_net ( tvb_get_ptr ( tvb , offset + tlv_off + 5 , isis_len ) ,
isis_len ) ) ;
rsvp_ifid_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off , 2 ,
" Type: %d (%sISIS-Area) " , tlv_type , tlv_name ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off + 4 , 4 ,
" IS-IS Area Identifier: %s " ,
print_nsap_net ( tvb_get_ptr ( tvb , offset + tlv_off + 5 , isis_len ) , isis_len ) ) ;
proto_item_append_text ( ti , " %sISIS-Area: %s. " , tlv_name ,
print_nsap_net ( tvb_get_ptr ( tvb , offset + tlv_off + 5 , isis_len ) , isis_len ) ) ;
break ;
case 11 : /* AUTONOMOUS_SYSTEM */
tlv_name = " " ;
goto ifid_as ;
case 24 : /* REPORTING_AUTONOMOUS_SYSTEM */
tlv_name = " Reporting- " ;
ifid_as :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" %sAS TLV - %u " , tlv_name ,
tvb_get_ntohl ( tvb , offset + tlv_off + 4 ) ) ;
rsvp_ifid_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off , 2 ,
" Type: %d (%sAS) " , tlv_type , tlv_name ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_autonomous_system , tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %sAS: %u. " , tlv_name ,
tvb_get_ntohl ( tvb , offset + tlv_off + 4 ) ) ;
break ;
case 26 : /* NODE_EXCLUSIONS */
tlv_name = " Node " ;
goto ifid_ex ;
case 27 : /* LINK_EXCLUSIONS */
tlv_name = " Link " ;
ifid_ex :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" %s-Exclusions TLV - " , tlv_name ) ;
rsvp_ifid_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off , 2 ,
" Type: %d (%s-Exclusions) " , tlv_type , tlv_name ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
dissect_rsvp_ifid_tlv ( ti2 , rsvp_ifid_subtree , tvb , offset + tlv_off + 4 ,
tlv_len - 4 , TREE ( TT_HOP_SUBOBJ ) ) ;
break ;
2010-03-06 12:48:30 +00:00
case 516 :
/* FF: ERROR_STRING TLV, RFC 4783 */
2010-05-10 15:54:57 +00:00
ti2 =
proto_tree_add_text ( rsvp_object_tree ,
tvb , offset + tlv_off ,
2010-03-06 12:48:30 +00:00
tlv_len ,
" ERROR_STRING TLV - %s " ,
tvb_format_text ( tvb , offset + tlv_off + 4 ,
tlv_len - 4 ) ) ;
rsvp_ifid_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off , 2 ,
" Type: 516 (ERROR_STRING) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_error_string , tvb , offset + tlv_off + 4 , tlv_len - 4 , ENC_NA | ENC_ASCII ) ;
2010-03-06 12:48:30 +00:00
break ;
default :
/* FF: not yet known TLVs are displayed as raw data */
2010-05-10 15:54:57 +00:00
ti2 = proto_tree_add_text ( rsvp_object_tree ,
tvb , offset + tlv_off ,
2010-03-06 12:48:30 +00:00
tlv_len ,
" Unknown TLV (%u) " , tlv_type ) ;
rsvp_ifid_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ifid_subtree , tvb , offset + tlv_off , 2 ,
" Type: %u (Unknown) " , tlv_type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_data , tvb , offset + tlv_off + 4 , tlv_len - 4 , ENC_NA ) ;
2010-03-06 12:48:30 +00:00
break ;
}
2011-01-31 15:27:26 +00:00
padding = ( 4 - ( tlv_len % 4 ) ) % 4 ;
if ( padding ! = 0 )
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ifid_subtree , hf_rsvp_ifid_tlv_padding , tvb , offset + tlv_off + tlv_len , padding , ENC_NA ) ;
2011-01-31 15:27:26 +00:00
tlv_off + = tlv_len + padding ;
2002-10-02 21:15:27 +00:00
}
}
2002-05-16 20:11:32 +00:00
/*------------------------------------------------------------------------------
* HOP
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_hop ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
1999-06-11 16:45:02 +00:00
2002-05-16 20:11:32 +00:00
switch ( type ) {
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 1 - IPv4 " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_hop_neighbor_address_ipv4 , tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_hop_logical_interface , tvb , offset2 + 4 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " HOP: IPv4, %s " ,
tvb_ip_to_str ( tvb , offset2 ) ) ;
break ;
2002-05-16 20:11:32 +00:00
case 2 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 2 - IPv6 " ) ;
2014-01-26 12:55:59 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_hop_neighbor_address_ipv6 , tvb , offset2 , 16 , ENC_NA ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_hop_logical_interface , tvb , offset2 + 16 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-08-28 21:04:11 +00:00
2002-10-02 21:15:27 +00:00
case 3 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 3 - IPv4 IF-ID " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_hop_neighbor_address_ipv4 , tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_hop_logical_interface , tvb , offset2 + 4 , 4 , ENC_BIG_ENDIAN ) ;
2002-05-16 20:11:32 +00:00
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " HOP: IPv4 IF-ID. Control IPv4: %s. " ,
tvb_ip_to_str ( tvb , offset2 ) ) ;
2002-05-16 20:11:32 +00:00
2012-06-11 16:33:56 +00:00
dissect_rsvp_ifid_tlv ( ti , rsvp_object_tree , tvb , offset + 12 , obj_length - 12 ,
TREE ( TT_HOP_SUBOBJ ) ) ;
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
break ;
2001-02-04 08:21:35 +00:00
2002-05-16 20:11:32 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_hop_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
2001-02-04 08:21:35 +00:00
2002-05-16 20:11:32 +00:00
/*------------------------------------------------------------------------------
* TIME VALUES
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_time_values ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
2001-02-04 08:21:35 +00:00
2002-05-16 20:11:32 +00:00
switch ( type ) {
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , 4 ,
" Refresh interval: %u ms (%u seconds) " ,
tvb_get_ntohl ( tvb , offset2 ) ,
tvb_get_ntohl ( tvb , offset2 ) / 1000 ) ;
proto_item_set_text ( ti , " TIME VALUES: %d ms " ,
tvb_get_ntohl ( tvb , offset2 ) ) ;
break ;
2001-02-04 08:21:35 +00:00
2002-08-28 21:04:11 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_time_values_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
1999-06-11 16:45:02 +00:00
2003-04-22 05:35:54 +00:00
/*------------------------------------------------------------------------------
* Error value field in ERROR object
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static guint16
2012-06-11 16:33:56 +00:00
dissect_rsvp_error_value ( proto_tree * ti , tvbuff_t * tvb ,
int offset , guint8 error_code )
2003-04-22 05:35:54 +00:00
{
2012-06-11 16:33:56 +00:00
guint16 error_val ;
guint8 error_class , error_ctype ;
2012-06-11 16:53:49 +00:00
value_string_ext * rsvp_error_vals_ext_p = NULL ;
2003-04-22 05:35:54 +00:00
error_val = tvb_get_ntohs ( tvb , offset ) ;
switch ( error_code ) {
case RSVP_ERROR_ADMISSION :
2012-06-11 16:33:56 +00:00
rsvp_error_vals_ext_p = & rsvp_admission_control_error_vals_ext ;
break ;
2011-01-27 16:08:41 +00:00
case RSVP_ERROR_POLICY :
2012-06-11 16:33:56 +00:00
rsvp_error_vals_ext_p = & rsvp_policy_control_error_vals_ext ;
break ;
2003-04-22 05:35:54 +00:00
case RSVP_ERROR_TRAFFIC :
2012-06-11 16:33:56 +00:00
rsvp_error_vals_ext_p = & rsvp_traffic_control_error_vals_ext ;
break ;
2003-04-22 05:35:54 +00:00
case RSVP_ERROR_ROUTING :
2012-06-11 16:33:56 +00:00
rsvp_error_vals_ext_p = & rsvp_routing_error_vals_ext ;
break ;
2003-04-22 05:35:54 +00:00
case RSVP_ERROR_NOTIFY :
2012-06-11 16:33:56 +00:00
rsvp_error_vals_ext_p = & rsvp_notify_error_vals_ext ;
break ;
2003-10-10 21:16:24 +00:00
case RSVP_ERROR_DIFFSERV :
2012-06-11 16:33:56 +00:00
rsvp_error_vals_ext_p = & rsvp_diffserv_error_vals_ext ;
break ;
2006-07-13 05:57:20 +00:00
case RSVP_ERROR_DSTE :
2012-06-11 16:33:56 +00:00
rsvp_error_vals_ext_p = & rsvp_diffserv_aware_te_error_vals_ext ;
break ;
2011-01-27 16:08:41 +00:00
case RSVP_ERROR_CALL_MGMT :
2012-06-11 16:33:56 +00:00
rsvp_error_vals_ext_p = & rsvp_call_mgmt_error_vals_ext ;
2011-01-27 16:08:41 +00:00
break ;
2003-04-22 05:35:54 +00:00
}
2012-06-11 16:33:56 +00:00
2003-04-22 05:35:54 +00:00
switch ( error_code ) {
case RSVP_ERROR_ADMISSION :
case RSVP_ERROR_TRAFFIC :
2012-06-11 16:33:56 +00:00
if ( ( error_val & 0xc0 ) = = 0 ) {
2012-06-11 16:53:49 +00:00
DISSECTOR_ASSERT ( rsvp_error_vals_ext_p ! = NULL ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( ti , tvb , offset , 2 ,
" Error value: %u - %s " , error_val ,
val_to_str_ext ( error_val , rsvp_error_vals_ext_p , " Unknown (%d) " ) ) ;
2011-01-27 16:08:41 +00:00
}
else if ( ( error_val & 0xc0 ) = = 0x80 ) {
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( ti , tvb , offset , 2 ,
" Error value: %u - Organization specific subcode (%u) " , error_val ,
error_val ) ;
2011-01-27 16:08:41 +00:00
}
else if ( ( error_val & 0xc0 ) = = 0xc0 ) {
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( ti , tvb , offset , 2 ,
" Error value: %u - Service specific subcode (%u) " , error_val ,
error_val ) ;
2011-01-27 16:08:41 +00:00
}
2012-06-11 16:33:56 +00:00
break ;
2011-01-27 16:08:41 +00:00
case RSVP_ERROR_UNKNOWN_CLASS :
case RSVP_ERROR_UNKNOWN_C_TYPE :
2012-06-11 16:33:56 +00:00
error_class = error_val / 256 ;
2011-01-27 16:08:41 +00:00
error_ctype = error_val % 256 ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( ti , tvb , offset , 2 , " Class: %u (%s) - CType: %u " ,
error_class , val_to_str_ext_const ( error_class , & rsvp_class_vals_ext , " Unknown " ) ,
error_ctype ) ;
break ;
2011-01-27 16:08:41 +00:00
case RSVP_ERROR_POLICY :
2003-04-22 05:35:54 +00:00
case RSVP_ERROR_NOTIFY :
case RSVP_ERROR_ROUTING :
2003-10-10 21:16:24 +00:00
case RSVP_ERROR_DIFFSERV :
2006-07-13 05:57:20 +00:00
case RSVP_ERROR_DSTE :
2011-01-27 16:08:41 +00:00
case RSVP_ERROR_CALL_MGMT :
2012-06-11 16:53:49 +00:00
DISSECTOR_ASSERT ( rsvp_error_vals_ext_p ! = NULL ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( ti , tvb , offset , 2 , " Error value: %u - %s " , error_val ,
val_to_str_ext ( error_val , rsvp_error_vals_ext_p , " Unknown (%d) " ) ) ;
break ;
2003-04-22 05:35:54 +00:00
default :
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( ti , tvb , offset , 2 , " Error value: %u " , error_val ) ;
break ;
2003-04-22 05:35:54 +00:00
}
return error_val ;
}
2002-05-16 20:11:32 +00:00
/*------------------------------------------------------------------------------
2002-08-28 21:04:11 +00:00
* ERROR
2002-05-16 20:11:32 +00:00
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_error ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
int offset3 ;
guint8 error_flags ;
guint8 error_code ;
guint16 error_val ;
2005-08-08 07:27:14 +00:00
proto_tree * ti2 , * rsvp_error_subtree ;
2002-05-16 20:11:32 +00:00
switch ( type ) {
case 1 : {
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 1 - IPv4 " ) ;
2013-08-24 07:50:46 +00:00
if ( obj_length > 4 ) {
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_error_error_node_ipv4 , tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
2013-09-25 10:11:07 +00:00
2012-06-11 16:33:56 +00:00
offset3 = offset2 + 4 ;
2013-08-24 07:50:46 +00:00
}
2013-09-15 18:01:01 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
case 2 : {
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 2 - IPv6 " ) ;
2013-09-15 18:01:01 +00:00
if ( obj_length > 4 ) {
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_error_error_node_ipv6 , tvb , offset2 , 16 , ENC_NA ) ;
2013-09-25 10:11:07 +00:00
2013-09-15 18:01:01 +00:00
offset3 = offset2 + 16 ;
}
break ;
2002-05-16 20:11:32 +00:00
}
2002-08-28 21:04:11 +00:00
2003-04-22 05:35:54 +00:00
case 3 : {
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 3 - IPv4 IF-ID " ) ;
2013-09-15 18:01:01 +00:00
if ( obj_length > 4 ) {
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_error_error_node_ipv4 , tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
2013-09-25 10:11:07 +00:00
2013-09-15 18:01:01 +00:00
offset3 = offset2 + 4 ;
}
break ;
2002-10-02 21:15:27 +00:00
}
2002-05-16 20:11:32 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-09-15 18:01:01 +00:00
if ( obj_length > 4 ) {
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_error_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2013-08-24 07:50:46 +00:00
}
2013-09-15 18:01:01 +00:00
return ;
}
2013-09-25 10:11:07 +00:00
2013-09-15 18:01:01 +00:00
if ( obj_length > 4 ) {
error_flags = tvb_get_guint8 ( tvb , offset3 ) ;
ti2 = proto_tree_add_item ( rsvp_object_tree , hf_rsvp_error_flags ,
tvb , offset3 , 1 , ENC_BIG_ENDIAN ) ;
rsvp_error_subtree = proto_item_add_subtree ( ti2 , TREE ( TT_ERROR_FLAGS ) ) ;
proto_tree_add_item ( rsvp_error_subtree , hf_rsvp_error_flags_path_state_removed ,
tvb , offset3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_error_subtree , hf_rsvp_error_flags_not_guilty ,
tvb , offset3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_error_subtree , hf_rsvp_error_flags_in_place ,
tvb , offset3 , 1 , ENC_BIG_ENDIAN ) ;
proto_item_append_text ( ti2 , " %s %s %s " ,
( error_flags & ( 1 < < 2 ) ) ? " Path-State-Removed " : " " ,
( error_flags & ( 1 < < 1 ) ) ? " NotGuilty " : " " ,
( error_flags & ( 1 < < 0 ) ) ? " InPlace " : " " ) ;
error_code = tvb_get_guint8 ( tvb , offset3 + 1 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_error_error_code , tvb , offset3 + 1 , 1 , ENC_NA ) ;
2013-09-15 18:01:01 +00:00
error_val = dissect_rsvp_error_value ( rsvp_object_tree , tvb , offset3 + 2 , error_code ) ;
2013-09-25 10:11:07 +00:00
2013-09-15 18:01:01 +00:00
switch ( type ) {
case 1 :
proto_item_set_text ( ti , " ERROR: IPv4, Error code: %s, Value: %d, Error Node: %s " ,
val_to_str_ext ( error_code , & rsvp_error_codes_ext , " Unknown (%d) " ) ,
error_val , tvb_ip_to_str ( tvb , offset2 ) ) ;
break ;
case 3 :
proto_item_set_text ( ti , " ERROR: IPv4 IF-ID, Error code: %s, Value: %d, Control Node: %s. " ,
val_to_str_ext ( error_code , & rsvp_error_codes_ext , " Unknown (%d) " ) ,
error_val , tvb_ip_to_str ( tvb , offset2 ) ) ;
dissect_rsvp_ifid_tlv ( ti , rsvp_object_tree , tvb , offset + 12 , obj_length - 12 ,
TREE ( TT_ERROR_SUBOBJ ) ) ;
break ;
}
2002-05-16 20:11:32 +00:00
}
}
2000-03-09 18:31:51 +00:00
2002-05-16 20:11:32 +00:00
/*------------------------------------------------------------------------------
* SCOPE
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_scope ( proto_item * ti _U_ , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
int mylen ;
mylen = obj_length - 4 ;
switch ( type ) {
case 1 : {
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 1 - IPv4 " ) ;
2012-06-11 16:33:56 +00:00
while ( mylen > 0 ) {
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_scope_ipv4_address , tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
offset2 + = 4 ;
mylen - = 4 ;
}
break ;
2002-05-16 20:11:32 +00:00
}
case 2 : {
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 2 - IPv6 " ) ;
2012-06-11 16:33:56 +00:00
while ( mylen > 0 ) {
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_scope_ipv6_address , tvb , offset2 , 16 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
offset2 + = 16 ;
mylen - = 16 ;
}
break ;
2002-05-16 20:11:32 +00:00
}
2002-08-28 21:04:11 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_scope_data , tvb , offset2 , mylen , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* STYLE
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_style ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
switch ( type ) {
case 1 : {
2012-06-11 16:33:56 +00:00
guint32 style ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_style_flags , tvb , offset2 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
style = tvb_get_ntoh24 ( tvb , offset2 + 1 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_style_style , tvb , offset2 + 1 , 3 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " STYLE: %s (%d) " ,
val_to_str_const ( style , style_vals , " Unknown " ) ,
style ) ;
break ;
2002-05-16 20:11:32 +00:00
}
2002-08-28 21:04:11 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_style_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* CONFIRM
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_confirm ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
switch ( type ) {
case 1 : {
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 1 - IPv4 " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_confirm_receiver_address_ipv4 , tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " CONFIRM: Receiver %s " ,
tvb_ip_to_str ( tvb , offset2 ) ) ;
break ;
2002-05-16 20:11:32 +00:00
}
case 2 : {
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 2 - IPv6 " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_confirm_receiver_address_ipv6 , tvb , offset2 , 16 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_confirm_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* SENDER TEMPLATE and FILTERSPEC
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_template_filter ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type ,
rsvp_conversation_info * rsvph )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
2005-08-08 07:27:14 +00:00
proto_item_set_text ( ti , " %s " , summary_template ( tvb , offset ) ) ;
switch ( type ) {
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 1 - IPv4 " ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SENDER_IP ] ,
tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SENDER_PORT ] ,
tvb , offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
/*
* Save this information to build the conversation request key later .
*/
Introduce, and start using, TVB_SET_ADDRESS() and TVB_SET_ADDRESS_HF(). They
are like the non-TVB versions except that they take a TVB and an offset
instead of (frequently) a pointer into the TVB.
Calling tvb_get_ptr() before modifying the rest of the fields should help fix
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7960 (though I can't
reproduce that problem).
Replace a bunch of calls like:
SET_ADDRESS(..., AT_XXX, length, tvb_get_ptr(tvb, offset, length));
with:
TVB_SET_ADDRESS(..., AT_XXX, tvb, offset, length);
svn path=/trunk/; revision=46324
2012-12-02 04:49:13 +00:00
TVB_SET_ADDRESS ( & rsvph - > source , AT_IPv4 , tvb , offset2 , 4 ) ;
2012-06-11 16:33:56 +00:00
rsvph - > udp_source_port = tvb_get_ntohs ( tvb , offset2 + 6 ) ;
break ;
2002-05-16 20:11:32 +00:00
2002-08-28 21:04:11 +00:00
case 2 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 2 - IPv6 " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_template_filter_source_address_ipv6 , tvb , offset2 , 16 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_template_filter_source_port , tvb , offset2 + 18 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-08-28 21:04:11 +00:00
case 7 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 7 - IPv4 LSP " ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SENDER_IP ] ,
tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SENDER_LSP_ID ] ,
tvb , offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
/*
* Save this information to build the conversation request key later .
*/
Introduce, and start using, TVB_SET_ADDRESS() and TVB_SET_ADDRESS_HF(). They
are like the non-TVB versions except that they take a TVB and an offset
instead of (frequently) a pointer into the TVB.
Calling tvb_get_ptr() before modifying the rest of the fields should help fix
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7960 (though I can't
reproduce that problem).
Replace a bunch of calls like:
SET_ADDRESS(..., AT_XXX, length, tvb_get_ptr(tvb, offset, length));
with:
TVB_SET_ADDRESS(..., AT_XXX, tvb, offset, length);
svn path=/trunk/; revision=46324
2012-12-02 04:49:13 +00:00
TVB_SET_ADDRESS ( & rsvph - > source , AT_IPv4 , tvb , offset2 , 4 ) ;
2012-06-11 16:33:56 +00:00
rsvph - > udp_source_port = tvb_get_ntohs ( tvb , offset2 + 6 ) ;
break ;
2002-05-16 20:11:32 +00:00
2006-11-13 17:30:38 +00:00
case 9 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 9 - IPv4 Aggregate " ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_SENDER_IP ] ,
tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
/*
* Save this information to build the conversation request key later .
*/
Introduce, and start using, TVB_SET_ADDRESS() and TVB_SET_ADDRESS_HF(). They
are like the non-TVB versions except that they take a TVB and an offset
instead of (frequently) a pointer into the TVB.
Calling tvb_get_ptr() before modifying the rest of the fields should help fix
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7960 (though I can't
reproduce that problem).
Replace a bunch of calls like:
SET_ADDRESS(..., AT_XXX, length, tvb_get_ptr(tvb, offset, length));
with:
TVB_SET_ADDRESS(..., AT_XXX, tvb, offset, length);
svn path=/trunk/; revision=46324
2012-12-02 04:49:13 +00:00
TVB_SET_ADDRESS ( & rsvph - > source , AT_IPv4 , tvb , offset2 , 4 ) ;
2012-06-11 16:33:56 +00:00
break ;
2006-11-13 17:30:38 +00:00
2002-08-28 21:04:11 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_template_filter_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
}
2002-05-16 20:11:32 +00:00
}
1999-06-11 16:45:02 +00:00
2008-04-14 19:43:39 +00:00
/*------------------------------------------------------------------------------
2011-01-27 16:08:41 +00:00
* TLVs for Ethernet SENDER TSPEC and FLOWSPEC ( RFC6003 )
2008-04-14 19:43:39 +00:00
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
dissect_rsvp_eth_tspec_tlv ( proto_item * ti , proto_tree * rsvp_object_tree ,
2012-06-11 16:33:56 +00:00
tvbuff_t * tvb , int offset , int tlv_length ,
int subtree_type )
2008-04-14 19:43:39 +00:00
{
2012-06-11 16:33:56 +00:00
int tlv_off ;
guint16 tlv_type ;
int tlv_len ;
guint8 profile ;
2008-04-14 19:43:39 +00:00
proto_tree * rsvp_ethspec_subtree , * ethspec_profile_subtree , * ti2 , * ti3 ;
for ( tlv_off = 0 ; tlv_off < tlv_length ; ) {
2012-06-11 16:33:56 +00:00
tlv_type = tvb_get_ntohs ( tvb , offset + tlv_off ) ;
tlv_len = tvb_get_ntohs ( tvb , offset + tlv_off + 2 ) ;
if ( ( tlv_len = = 0 ) | | ( tlv_off + tlv_len > tlv_length ) ) {
proto_tree_add_text ( rsvp_object_tree , tvb , offset + tlv_off + 2 , 2 ,
" Invalid length " ) ;
return ;
}
switch ( tlv_type ) {
case 0 :
case 1 :
case 255 :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" RESERVED (RFC6003) " ) ;
rsvp_ethspec_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ethspec_subtree , tvb , offset + tlv_off , 2 ,
" Type: %u (RESERVED) " , tlv_type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ethspec_subtree , hf_rsvp_eth_tspec_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
break ;
case 2 :
case 129 : /* OIF demo 2009 */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" Ethernet Bandwidth Profile TLV: CIR=%.10g, CBS=%.10g, "
" EIR=%.10g, EBS=%.10g " ,
tvb_get_ntohieee_float ( tvb , offset + tlv_off + 8 ) ,
tvb_get_ntohieee_float ( tvb , offset + tlv_off + 12 ) ,
tvb_get_ntohieee_float ( tvb , offset + tlv_off + 16 ) ,
tvb_get_ntohieee_float ( tvb , offset + tlv_off + 20 ) ) ;
rsvp_ethspec_subtree = proto_item_add_subtree ( ti2 , subtree_type ) ;
proto_tree_add_text ( rsvp_ethspec_subtree , tvb , offset + tlv_off , 2 ,
" Type: %u - Ethernet Bandwidth Profile " , tlv_type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ethspec_subtree , hf_rsvp_eth_tspec_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
profile = tvb_get_guint8 ( tvb , offset + tlv_off + 4 ) ;
2013-12-24 23:41:24 +00:00
ti3 = proto_tree_add_item ( rsvp_ethspec_subtree , hf_rsvp_eth_tspec_profile , tvb , offset + tlv_off + 4 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
ethspec_profile_subtree = proto_item_add_subtree ( ti3 , TREE ( TT_ETHSPEC_SUBTREE ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( ethspec_profile_subtree , hf_rsvp_eth_tspec_tlv_color_mode ,
tvb , offset + tlv_off + 4 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( ethspec_profile_subtree , hf_rsvp_eth_tspec_tlv_coupling_flag ,
tvb , offset + tlv_off + 4 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti3 , " %s %s " ,
( profile & ( 1 < < 1 ) ) ? " CM " : " " ,
( profile & ( 1 < < 0 ) ) ? " CF " : " " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ethspec_subtree , hf_rsvp_eth_tspec_index , tvb , offset + tlv_off + 5 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_ethspec_subtree , hf_rsvp_eth_tspec_reserved , tvb , offset + tlv_off + 6 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ethspec_subtree , hf_rsvp_eth_tspec_cir , tvb , offset + tlv_off + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ethspec_subtree , hf_rsvp_eth_tspec_cbs , tvb , offset + tlv_off + 12 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ethspec_subtree , hf_rsvp_eth_tspec_eir , tvb , offset + tlv_off + 16 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ethspec_subtree , hf_rsvp_eth_tspec_ebs , tvb , offset + tlv_off + 20 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " ETH profile: CIR=%.10g, CBS=%.10g, EIR=%.10g, "
" EBS=%.10g " ,
tvb_get_ntohieee_float ( tvb , offset + tlv_off + 8 ) ,
tvb_get_ntohieee_float ( tvb , offset + tlv_off + 12 ) ,
tvb_get_ntohieee_float ( tvb , offset + tlv_off + 16 ) ,
tvb_get_ntohieee_float ( tvb , offset + tlv_off + 20 ) ) ;
break ;
default :
proto_tree_add_text ( rsvp_object_tree , tvb , offset + tlv_off , 2 ,
" Unknown TLV: %u " , tlv_type ) ;
break ;
}
tlv_off + = tlv_len ;
2008-04-14 19:43:39 +00:00
}
}
2002-05-16 20:11:32 +00:00
/*------------------------------------------------------------------------------
* SENDER TSPEC
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_tspec ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
int mylen ;
2002-05-16 20:11:32 +00:00
proto_tree * tspec_tree , * ti2 ;
2012-06-11 16:33:56 +00:00
guint8 signal_type ;
guint16 switch_gran ;
2002-05-16 20:11:32 +00:00
mylen = obj_length - 4 ;
switch ( type ) {
2002-08-28 21:04:11 +00:00
case 2 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 2 - Integrated Services " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_message_format_version , tvb , offset2 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 2 , 2 ,
" Data length: %u words, not including header " ,
tvb_get_ntohs ( tvb , offset2 + 2 ) ) ;
mylen - = 4 ;
offset2 + = 4 ;
proto_item_set_text ( ti , " SENDER TSPEC: IntServ, " ) ;
while ( mylen > 0 ) {
guint8 service_num ;
guint8 param_id ;
guint param_len ;
guint param_len_processed ;
guint length ;
service_num = tvb_get_guint8 ( tvb , offset2 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_service_header , tvb , offset2 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
length = tvb_get_ntohs ( tvb , offset2 + 2 ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 2 , 2 ,
" Length of service %u data: %u words, "
" not including header " ,
service_num , length ) ;
mylen - = 4 ;
offset2 + = 4 ;
/* Process all known service headers as a set of parameters */
param_len_processed = 0 ;
while ( param_len_processed < length ) {
param_id = tvb_get_guint8 ( tvb , offset2 ) ;
param_len = tvb_get_ntohs ( tvb , offset2 + 2 ) + 1 ;
if ( param_len < 1 )
THROW ( ReportedBoundsError ) ;
switch ( param_id ) {
case 127 :
/* Token Bucket */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 , param_len * 4 ,
" Token Bucket TSpec: " ) ;
tspec_tree = proto_item_add_subtree ( ti2 , TREE ( TT_TSPEC_SUBTREE ) ) ;
proto_tree_add_text ( tspec_tree , tvb , offset2 , 1 ,
" Parameter %u - %s " ,
param_id ,
val_to_str_ext_const ( param_id , & svc_vals_ext , " Unknown " ) ) ;
proto_tree_add_text ( tspec_tree , tvb , offset2 + 1 , 1 ,
" Parameter %u flags: 0x%02x " ,
param_id ,
tvb_get_guint8 ( tvb , offset2 + 1 ) ) ;
proto_tree_add_text ( tspec_tree , tvb , offset2 + 2 , 2 ,
" Parameter %u data length: %u words, "
" not including header " ,
param_id ,
tvb_get_ntohs ( tvb , offset2 + 2 ) ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( tspec_tree , hf_rsvp_tspec_token_bucket_rate , tvb , offset2 + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_tspec_token_bucket_size , tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_tspec_peak_data_rate , tvb , offset2 + 12 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( tspec_tree , tvb , offset2 + 16 , 4 ,
" Minimum policed unit [m]: %u " ,
tvb_get_ntohl ( tvb , offset2 + 16 ) ) ;
proto_tree_add_text ( tspec_tree , tvb , offset2 + 20 , 4 ,
" Maximum packet size [M]: %u " ,
tvb_get_ntohl ( tvb , offset2 + 20 ) ) ;
proto_item_append_text ( ti , " Token Bucket, %.10g bytes/sec. " ,
tvb_get_ntohieee_float ( tvb , offset2 + 4 ) ) ;
proto_item_append_text ( ti2 , " Rate=%.10g Burst=%.10g Peak=%.10g m=%u M=%u " ,
tvb_get_ntohieee_float ( tvb , offset2 + 4 ) ,
tvb_get_ntohieee_float ( tvb , offset2 + 8 ) ,
tvb_get_ntohieee_float ( tvb , offset2 + 12 ) ,
tvb_get_ntohl ( tvb , offset2 + 16 ) ,
tvb_get_ntohl ( tvb , offset2 + 20 ) ) ;
break ;
case 128 :
/* Null Service (RFC2997) */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 , param_len * 4 ,
" Null Service TSpec: " ) ;
tspec_tree = proto_item_add_subtree ( ti2 , TREE ( TT_TSPEC_SUBTREE ) ) ;
proto_tree_add_text ( tspec_tree , tvb , offset2 , 1 ,
" Parameter %u - %s " ,
param_id ,
val_to_str_ext_const ( param_id , & svc_vals_ext , " Unknown " ) ) ;
proto_tree_add_text ( tspec_tree , tvb , offset2 + 1 , 1 ,
" Parameter %u flags: %x " ,
param_id ,
tvb_get_guint8 ( tvb , offset2 + 1 ) ) ;
proto_tree_add_text ( tspec_tree , tvb , offset2 + 2 , 2 ,
" Parameter %u data length: %u words, "
" not including header " ,
param_id ,
tvb_get_ntohs ( tvb , offset2 + 2 ) ) ;
proto_tree_add_text ( tspec_tree , tvb , offset2 + 4 , 4 ,
" Maximum packet size [M]: %u " ,
tvb_get_ntohl ( tvb , offset2 + 4 ) ) ;
proto_item_append_text ( ti , " Null Service. M=%u " ,
tvb_get_ntohl ( tvb , offset2 + 4 ) ) ;
proto_item_append_text ( ti2 , " Max pkt size=%u " ,
tvb_get_ntohl ( tvb , offset2 + 4 ) ) ;
break ;
case 126 :
/* Compression hint (RFC3006) */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 , param_len * 4 ,
" Compression Hint: " ) ;
tspec_tree = proto_item_add_subtree ( ti2 , TREE ( TT_TSPEC_SUBTREE ) ) ;
proto_tree_add_text ( tspec_tree , tvb , offset2 , 1 ,
" Parameter %u - %s " ,
param_id ,
val_to_str_ext_const ( param_id , & svc_vals_ext , " Unknown " ) ) ;
proto_tree_add_text ( tspec_tree , tvb , offset2 + 1 , 1 ,
" Parameter %u flags: %x " ,
param_id ,
tvb_get_guint8 ( tvb , offset2 + 1 ) ) ;
proto_tree_add_text ( tspec_tree , tvb , offset2 + 2 , 2 ,
" Parameter %u data length: %u words, "
" not including header " ,
param_id ,
tvb_get_ntohs ( tvb , offset2 + 2 ) ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( tspec_tree , hf_rsvp_tspec_hint , tvb , offset2 + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_compression_factor , tvb , offset2 + 4 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " Compression Hint. Hint=%u, Factor=%u " ,
tvb_get_ntohl ( tvb , offset2 + 4 ) ,
tvb_get_ntohl ( tvb , offset2 + 8 ) ) ;
proto_item_append_text ( ti2 , " Hint=%u, Factor=%u " ,
tvb_get_ntohl ( tvb , offset2 + 4 ) ,
tvb_get_ntohl ( tvb , offset2 + 8 ) ) ;
break ;
default :
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , param_len * 4 ,
" Unknown parameter %d, %d words " ,
param_id , param_len ) ;
break ;
}
param_len_processed + = param_len ;
offset2 + = param_len * 4 ;
}
mylen - = length * 4 ;
}
break ;
2002-05-16 20:11:32 +00:00
case 4 : /* SONET/SDH Tspec */
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " SENDER TSPEC: SONET/SDH, " ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 4 - SONET/SDH " ) ;
2012-06-11 16:33:56 +00:00
signal_type = tvb_get_guint8 ( tvb , offset2 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_signal_type_sonet , tvb , offset2 , 1 , ENC_NA ) ;
ti2 = proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_requested_concatenation , tvb , offset2 + 1 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
tspec_tree = proto_item_add_subtree ( ti2 , TREE ( TT_TSPEC_SUBTREE ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_standard_contiguous_concatenation ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_arbitrary_contiguous_concatenation ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_number_of_contiguous_components , tvb , offset2 + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_number_of_virtual_components , tvb , offset2 + 4 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_multiplier , tvb , offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
ti2 = proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_transparency , tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
tspec_tree = proto_item_add_subtree ( ti2 , TREE ( TT_TSPEC_SUBTREE ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_regenerator_section ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_multiplex_section ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_J0_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_SOH_RSOH_DCC_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_LOH_MSOH_DCC_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_LOH_MSOH_extended_DCC_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_K1_K2_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_E1_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_F1_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_E2_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_B1_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_B2_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_M0_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( tspec_tree , hf_rsvp_sender_tspec_M1_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_profile , tvb , offset2 + 12 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " Signal [%s], RCC %d, NCC %d, NVC %d, MT %d, Transparency %d, Profile %d " ,
val_to_str_ext_const ( signal_type , & gmpls_sonet_signal_type_str_ext , " Unknown " ) ,
tvb_get_guint8 ( tvb , offset2 + 1 ) , tvb_get_ntohs ( tvb , offset2 + 2 ) ,
tvb_get_ntohs ( tvb , offset2 + 4 ) , tvb_get_ntohs ( tvb , offset2 + 6 ) ,
tvb_get_ntohl ( tvb , offset2 + 8 ) , tvb_get_ntohl ( tvb , offset2 + 12 ) ) ;
break ;
2002-08-28 21:04:11 +00:00
2009-10-27 06:05:02 +00:00
case 5 : /* FF: G.709 TSPEC, RFC 4328 */
proto_item_set_text ( ti , " SENDER TSPEC: G.709, " ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 5 - G.709 " ) ;
2009-10-27 06:05:02 +00:00
signal_type = tvb_get_guint8 ( tvb , offset2 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_signal_type_g709 , tvb , offset2 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_number_of_multiplexed_components , tvb , offset2 + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_number_of_virtual_components , tvb , offset2 + 4 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_multiplier , tvb , offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
2009-10-27 06:05:02 +00:00
proto_item_append_text ( ti , " Signal [%s], NMC %d, NVC %d, MT %d " ,
2010-05-10 15:54:57 +00:00
rval_to_str ( signal_type ,
gmpls_g709_signal_type_rvals ,
2009-10-27 06:05:02 +00:00
" Unknown " ) ,
tvb_get_ntohs ( tvb , offset2 + 2 ) ,
2010-05-10 15:54:57 +00:00
tvb_get_ntohs ( tvb , offset2 + 4 ) ,
2009-10-27 06:05:02 +00:00
tvb_get_ntohs ( tvb , offset2 + 6 ) ) ;
break ;
2011-01-27 16:08:41 +00:00
case 6 : /* Ethernet TSPEC (RFC6003) */
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " SENDER TSPEC: Ethernet, " ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 6 - Ethernet " ) ;
2008-04-14 19:43:39 +00:00
switch_gran = tvb_get_ntohs ( tvb , offset2 ) ;
2011-01-27 16:08:41 +00:00
if ( switch_gran = = 0 )
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , 2 ,
" Switching granularity: 0 - Provided in signaling " ) ;
2011-01-27 16:08:41 +00:00
else if ( switch_gran = = 1 )
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , 2 ,
" Switching granularity: 1 - Ethernet port " ) ;
else if ( switch_gran = = 2 )
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , 2 ,
" Switching granularity: 2 - Ethernet frame " ) ;
2008-04-14 19:43:39 +00:00
else
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , 2 ,
" Switching granularity: %u - ??? " , switch_gran ) ;
2008-04-14 19:43:39 +00:00
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_mtu , tvb , offset2 + 2 , 2 , ENC_BIG_ENDIAN ) ;
2008-04-14 19:43:39 +00:00
2012-06-11 16:33:56 +00:00
dissect_rsvp_eth_tspec_tlv ( ti , rsvp_object_tree , tvb , offset + 8 , obj_length - 8 ,
TREE ( TT_TSPEC_SUBTREE ) ) ;
2008-04-14 19:43:39 +00:00
break ;
2002-05-16 20:11:32 +00:00
default : /* Unknown TSpec */
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_tspec_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-08-28 21:04:11 +00:00
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* FLOWSPEC
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_flowspec ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
int mylen , signal_type ;
2002-05-16 20:11:32 +00:00
proto_tree * flowspec_tree , * ti2 ;
2005-08-08 07:27:14 +00:00
proto_item * item ;
2012-06-11 16:33:56 +00:00
guint16 switch_gran ;
2002-05-16 20:11:32 +00:00
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2002-05-16 20:11:32 +00:00
mylen = obj_length - 4 ;
switch ( type ) {
case 2 :
2012-06-11 16:33:56 +00:00
if ( mylen < 4 ) {
item = proto_tree_add_text ( rsvp_object_tree , tvb , 0 , 0 ,
" Object length %u < 8 " , obj_length ) ;
PROTO_ITEM_SET_GENERATED ( item ) ;
return ;
}
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_message_format_version , tvb , offset2 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 2 , 2 ,
" Data length: %u words, not including header " ,
tvb_get_ntohs ( tvb , offset2 + 2 ) ) ;
proto_item_set_text ( ti , " FLOWSPEC: " ) ;
mylen - = 4 ;
offset2 + = 4 ;
while ( mylen > 0 ) {
guint8 service_num ;
guint length ;
guint8 param_id ;
guint param_len ;
guint param_len_processed ;
if ( mylen < 4 ) {
item = proto_tree_add_text ( rsvp_object_tree , tvb , 0 , 0 ,
" Object length %u not large enough " ,
obj_length ) ;
PROTO_ITEM_SET_GENERATED ( item ) ;
return ;
}
service_num = tvb_get_guint8 ( tvb , offset2 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_service_header , tvb , offset2 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
length = tvb_get_ntohs ( tvb , offset2 + 2 ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 2 , 2 ,
" Length of service %u data: %u words, "
" not including header " ,
service_num ,
length ) ;
mylen - = 4 ;
offset2 + = 4 ;
proto_item_append_text ( ti , " %s: " ,
val_to_str_ext ( service_num , & intsrv_services_str_ext ,
" Unknown (%d) " ) ) ;
/* Process all known service headers as a set of parameters */
param_len_processed = 0 ;
while ( param_len_processed < length ) {
param_id = tvb_get_guint8 ( tvb , offset2 ) ;
param_len = tvb_get_ntohs ( tvb , offset2 + 2 ) + 1 ;
if ( param_len < 1 )
THROW ( ReportedBoundsError ) ;
switch ( param_id ) {
case 127 :
/* Token Bucket */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 , param_len * 4 ,
" Token Bucket: " ) ;
flowspec_tree = proto_item_add_subtree ( ti2 , TREE ( TT_FLOWSPEC_SUBTREE ) ) ;
proto_tree_add_text ( flowspec_tree , tvb , offset2 , 1 ,
" Parameter %u - %s " ,
param_id ,
val_to_str_ext_const ( param_id , & svc_vals_ext , " Unknown " ) ) ;
proto_tree_add_text ( flowspec_tree , tvb , offset2 + 1 , 1 ,
" Parameter %u flags: 0x%02x " ,
param_id ,
tvb_get_guint8 ( tvb , offset2 + 1 ) ) ;
proto_tree_add_text ( flowspec_tree , tvb , offset2 + 2 , 2 ,
" Parameter %u data length: %u words, "
" not including header " ,
param_id ,
tvb_get_ntohs ( tvb , offset2 + 2 ) ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_token_bucket_rate , tvb , offset2 + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_token_bucket_size , tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_peak_data_rate , tvb , offset2 + 12 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( flowspec_tree , tvb , offset2 + 16 , 4 ,
" Minimum policed unit [m]: %u " ,
tvb_get_ntohl ( tvb , offset2 + 16 ) ) ;
proto_tree_add_text ( flowspec_tree , tvb , offset2 + 20 , 4 ,
" Maximum packet size [M]: %u " ,
tvb_get_ntohl ( tvb , offset2 + 20 ) ) ;
proto_item_append_text ( ti , " Token Bucket, %.10g bytes/sec. " ,
tvb_get_ntohieee_float ( tvb , offset2 + 4 ) ) ;
proto_item_append_text ( ti2 , " Rate=%.10g Burst=%.10g Peak=%.10g m=%u M=%u " ,
tvb_get_ntohieee_float ( tvb , offset2 + 4 ) ,
tvb_get_ntohieee_float ( tvb , offset2 + 8 ) ,
tvb_get_ntohieee_float ( tvb , offset2 + 12 ) ,
tvb_get_ntohl ( tvb , offset2 + 16 ) ,
tvb_get_ntohl ( tvb , offset2 + 20 ) ) ;
break ;
case 130 :
/* Guaranteed-rate RSpec */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 , param_len * 4 ,
" Guaranteed-Rate RSpec: " ) ;
flowspec_tree = proto_item_add_subtree ( ti2 , TREE ( TT_FLOWSPEC_SUBTREE ) ) ;
proto_tree_add_text ( flowspec_tree , tvb , offset2 , 1 ,
" Parameter %u - %s " ,
param_id ,
val_to_str_ext_const ( param_id , & svc_vals_ext , " Unknown " ) ) ;
proto_tree_add_text ( flowspec_tree , tvb , offset2 + 1 , 1 ,
" Parameter %u flags: %x " ,
param_id ,
tvb_get_guint8 ( tvb , offset2 + 1 ) ) ;
proto_tree_add_text ( flowspec_tree , tvb , offset2 + 2 , 2 ,
" Parameter %u data length: %u words, "
" not including header " ,
param_id ,
tvb_get_ntohs ( tvb , offset2 + 2 ) ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_rate , tvb , offset2 + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_slack_term , tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " RSpec, %.10g bytes/sec. " ,
tvb_get_ntohieee_float ( tvb , offset2 + 4 ) ) ;
proto_item_append_text ( ti2 , " R=%.10g, s=%u " ,
tvb_get_ntohieee_float ( tvb , offset2 + 4 ) ,
tvb_get_ntohl ( tvb , offset2 + 8 ) ) ;
break ;
case 128 :
/* Null Service (RFC2997) */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 , param_len * 4 ,
" Null Service Flowspec: " ) ;
flowspec_tree = proto_item_add_subtree ( ti2 , TREE ( TT_FLOWSPEC_SUBTREE ) ) ;
proto_tree_add_text ( flowspec_tree , tvb , offset2 , 1 ,
" Parameter %u - %s " ,
param_id ,
val_to_str_ext_const ( param_id , & svc_vals_ext , " Unknown " ) ) ;
proto_tree_add_text ( flowspec_tree , tvb , offset2 + 1 , 1 ,
" Parameter %u flags: %x " ,
param_id ,
tvb_get_guint8 ( tvb , offset2 + 1 ) ) ;
proto_tree_add_text ( flowspec_tree , tvb , offset2 + 2 , 2 ,
" Parameter %u data length: %u words, "
" not including header " ,
param_id ,
tvb_get_ntohs ( tvb , offset2 + 2 ) ) ;
proto_tree_add_text ( flowspec_tree , tvb , offset2 + 4 , 4 ,
" Maximum packet size [M]: %u " ,
tvb_get_ntohl ( tvb , offset2 + 4 ) ) ;
proto_item_append_text ( ti , " Null Service. M=%u " ,
tvb_get_ntohl ( tvb , offset2 + 4 ) ) ;
proto_item_append_text ( ti2 , " Max pkt size=%u " ,
tvb_get_ntohl ( tvb , offset2 + 4 ) ) ;
break ;
default :
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , param_len * 4 ,
" Unknown parameter %d, %d words " ,
param_id , param_len ) ;
break ;
}
param_len_processed + = param_len ;
offset2 + = param_len * 4 ;
}
/* offset2 += length*4; */
mylen - = length * 4 ;
}
break ;
2002-05-16 20:11:32 +00:00
case 4 :
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " FLOWSPEC: SONET/SDH, " ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 4 - SONET/SDH " ) ;
2012-06-11 16:33:56 +00:00
signal_type = tvb_get_guint8 ( tvb , offset2 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_signal_type_sonet , tvb , offset2 , 1 , ENC_NA ) ;
ti2 = proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_requested_concatenation , tvb , offset2 + 1 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
flowspec_tree = proto_item_add_subtree ( ti2 , TREE ( TT_FLOWSPEC_SUBTREE ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_standard_contiguous_concatenation ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_arbitrary_contiguous_concatenation ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_number_of_contiguous_components , tvb , offset2 + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_number_of_virtual_components , tvb , offset2 + 4 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_multiplier , tvb , offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
ti2 = proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_transparency , tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
flowspec_tree = proto_item_add_subtree ( ti2 , TREE ( TT_FLOWSPEC_SUBTREE ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_regenerator_section ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_multiplex_section ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_J0_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_SOH_RSOH_DCC_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_LOH_MSOH_DCC_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_LOH_MSOH_extended_DCC_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_K1_K2_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_E1_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_F1_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_E2_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_B1_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_B2_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_M0_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( flowspec_tree , hf_rsvp_flowspec_M1_transparency ,
tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_profile , tvb , offset2 + 12 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " Signal [%s], RCC %d, NCC %d, NVC %d, MT %d, Transparency %d, Profile %d " ,
val_to_str_ext_const ( signal_type , & gmpls_sonet_signal_type_str_ext , " Unknown " ) ,
tvb_get_guint8 ( tvb , offset2 + 1 ) , tvb_get_ntohs ( tvb , offset2 + 2 ) ,
tvb_get_ntohs ( tvb , offset2 + 4 ) , tvb_get_ntohs ( tvb , offset2 + 6 ) ,
tvb_get_ntohl ( tvb , offset2 + 8 ) , tvb_get_ntohl ( tvb , offset2 + 12 ) ) ;
break ;
2002-08-28 21:04:11 +00:00
2009-10-27 06:05:02 +00:00
case 5 : /* FF: G.709 FLOWSPEC, RFC 4328 */
proto_item_set_text ( ti , " FLOWSPEC: G.709, " ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 5 - G.709 " ) ;
2009-10-27 06:05:02 +00:00
signal_type = tvb_get_guint8 ( tvb , offset2 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_signal_type_g709 , tvb , offset2 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_number_of_multiplexed_components , tvb , offset2 + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_number_of_virtual_components , tvb , offset2 + 4 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_multiplier , tvb , offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
2009-10-27 06:05:02 +00:00
proto_item_append_text ( ti , " Signal [%s], NMC %d, NVC %d, MT %d " ,
2010-05-10 15:54:57 +00:00
rval_to_str ( signal_type ,
gmpls_g709_signal_type_rvals ,
2009-10-27 06:05:02 +00:00
" Unknown " ) ,
tvb_get_ntohs ( tvb , offset2 + 2 ) ,
2010-05-10 15:54:57 +00:00
tvb_get_ntohs ( tvb , offset2 + 4 ) ,
2009-10-27 06:05:02 +00:00
tvb_get_ntohs ( tvb , offset2 + 6 ) ) ;
break ;
2011-01-27 16:08:41 +00:00
case 6 : /* Ethernet FLOWSPEC (RFC6003) */
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " FLOWSPEC: Ethernet, " ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 6 - Ethernet " ) ;
2008-04-14 19:43:39 +00:00
switch_gran = tvb_get_ntohs ( tvb , offset2 ) ;
2011-01-27 16:08:41 +00:00
if ( switch_gran = = 0 )
2011-01-31 17:09:58 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , 2 ,
" Switching granularity: 0 - Provided in signaling " ) ;
2011-01-27 16:08:41 +00:00
else if ( switch_gran = = 1 )
2011-01-31 17:09:58 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , 2 ,
" Switching granularity: 1 - Ethernet port " ) ;
2012-06-11 16:33:56 +00:00
else if ( switch_gran = = 2 )
2011-01-31 17:09:58 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , 2 ,
" Switching granularity: 2 - Ethernet frame " ) ;
2008-04-14 19:43:39 +00:00
else
2011-01-31 17:09:58 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , 2 ,
" Switching granularity: %u - ??? " , switch_gran ) ;
2008-04-14 19:43:39 +00:00
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_flowspec_mtu , tvb , offset2 + 2 , 2 , ENC_BIG_ENDIAN ) ;
2008-04-14 19:43:39 +00:00
2012-06-11 16:33:56 +00:00
dissect_rsvp_eth_tspec_tlv ( ti , rsvp_object_tree , tvb , offset + 8 , obj_length - 8 ,
TREE ( TT_FLOWSPEC_SUBTREE ) ) ;
2008-04-14 19:43:39 +00:00
break ;
2002-05-16 20:11:32 +00:00
default :
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* ADSPEC
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_adspec ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
int mylen , i ;
2002-08-28 21:04:11 +00:00
proto_tree * adspec_tree ;
2002-05-16 20:11:32 +00:00
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2002-05-16 20:11:32 +00:00
mylen = obj_length - 4 ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_adspec_message_format_version , tvb , offset2 , 1 , ENC_NA ) ;
2002-05-16 20:11:32 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 2 , 2 ,
2012-06-11 16:33:56 +00:00
" Data length: %u words, not including header " ,
tvb_get_ntohs ( tvb , offset2 + 2 ) ) ;
2002-05-16 20:11:32 +00:00
mylen - = 4 ;
offset2 + = 4 ;
while ( mylen > 0 ) {
2012-06-11 16:33:56 +00:00
guint8 service_num ;
guint8 break_bit ;
guint length ;
const char * str ;
service_num = tvb_get_guint8 ( tvb , offset2 ) ;
str = val_to_str_ext_const ( service_num , & intsrv_services_str_ext , " Unknown " ) ;
break_bit = tvb_get_guint8 ( tvb , offset2 + 1 ) ;
length = tvb_get_ntohs ( tvb , offset2 + 2 ) ;
ti = proto_tree_add_text ( rsvp_object_tree , tvb , offset2 ,
( length + 1 ) * 4 , " %s " ,
str ) ;
adspec_tree = proto_item_add_subtree ( ti ,
TREE ( TT_ADSPEC_SUBTREE ) ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( adspec_tree , hf_rsvp_adspec_service_header , tvb , offset2 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( adspec_tree , tvb , offset2 + 1 , 1 ,
( break_bit & 0x80 ) ?
" Break bit set " : " Break bit not set " ) ;
proto_tree_add_text ( adspec_tree , tvb , offset2 + 2 , 2 ,
" Data length: %u words, not including header " ,
length ) ;
mylen - = 4 ;
offset2 + = 4 ;
i = length * 4 ;
while ( i > 0 ) {
guint8 id ;
guint phdr_length ;
id = tvb_get_guint8 ( tvb , offset2 ) ;
phdr_length = tvb_get_ntohs ( tvb , offset2 + 2 ) ;
2013-03-29 00:26:23 +00:00
str = try_val_to_str_ext ( id , & adspec_params_ext ) ;
2012-06-11 16:33:56 +00:00
if ( str ) {
switch ( id ) {
case 4 :
case 8 :
case 10 :
case 133 :
case 134 :
case 135 :
case 136 :
/* 32-bit unsigned integer */
proto_tree_add_text ( adspec_tree , tvb , offset2 ,
( phdr_length + 1 ) < < 2 ,
" %s - %u (type %u, length %u) " ,
str ,
tvb_get_ntohl ( tvb , offset2 + 4 ) ,
id , phdr_length ) ;
break ;
case 6 :
/* IEEE float */
proto_tree_add_text ( adspec_tree , tvb , offset2 ,
( phdr_length + 1 ) < < 2 ,
" %s - %.10g (type %u, length %u) " ,
str ,
tvb_get_ntohieee_float ( tvb , offset2 + 4 ) ,
id , phdr_length ) ;
break ;
default :
proto_tree_add_text ( adspec_tree , tvb , offset2 ,
( phdr_length + 1 ) < < 2 ,
" %s (type %u, length %u) " ,
str ,
id , phdr_length ) ;
break ;
}
} else {
proto_tree_add_text ( adspec_tree , tvb , offset2 ,
( phdr_length + 1 ) < < 2 ,
" Unknown (type %u, length %u) " ,
id , phdr_length ) ;
}
offset2 + = ( phdr_length + 1 ) < < 2 ;
i - = ( phdr_length + 1 ) < < 2 ;
mylen - = ( phdr_length + 1 ) < < 2 ;
}
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* INTEGRITY
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_integrity ( proto_item * ti _U_ , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
2002-05-16 20:11:32 +00:00
proto_tree * ti2 , * rsvp_integ_flags_tree ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2013-12-24 23:41:24 +00:00
ti2 = proto_tree_add_item ( rsvp_object_tree , hf_rsvp_integrity_flags , tvb , offset2 , 1 , ENC_NA ) ;
2002-10-02 21:15:27 +00:00
rsvp_integ_flags_tree = proto_item_add_subtree ( ti2 , TREE ( TT_INTEGRITY_FLAGS ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_integ_flags_tree , hf_rsvp_integrity_flags_handshake ,
tvb , offset2 , 1 , ENC_BIG_ENDIAN ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_integrity_key_identifier , tvb , offset2 + 2 , 6 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_integrity_sequence_number , tvb , offset2 + 8 , 8 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_integrity_hash , tvb , offset2 + 16 , obj_length - 20 , ENC_NA ) ;
2002-05-16 20:11:32 +00:00
}
/*------------------------------------------------------------------------------
* POLICY
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_policy ( proto_item * ti _U_ , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_policy_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2002-05-16 20:11:32 +00:00
}
/*------------------------------------------------------------------------------
* LABEL_REQUEST
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_label_request ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
2012-06-11 16:33:56 +00:00
static const value_string lab_req_type_str [ ] = {
2011-01-31 17:09:58 +00:00
{ 1 , " " } ,
{ 2 , " (Label Request with ATM label Range) " } ,
{ 3 , " (Label Request with Frame-Relay label Range) " } ,
{ 4 , " (Generalized Label Request) " } ,
{ 5 , " (Generalized Channel_set Label Request) " } ,
{ 0 , NULL }
2011-01-27 16:08:41 +00:00
} ;
2012-06-11 16:33:56 +00:00
static value_string_ext lab_req_type_str_ext = VALUE_STRING_EXT_INIT ( lab_req_type_str ) ;
2002-05-16 20:11:32 +00:00
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " %d %s " , type ,
2012-06-11 16:33:56 +00:00
val_to_str_ext_const ( type , & lab_req_type_str_ext , " Unknown " ) ) ;
2002-05-16 20:11:32 +00:00
switch ( type ) {
case 1 : {
2012-06-11 16:33:56 +00:00
unsigned short l3pid = tvb_get_ntohs ( tvb , offset2 + 2 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_request_l3pid , tvb , offset2 + 2 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " LABEL REQUEST: Basic: L3PID: %s (0x%04x) " ,
val_to_str_const ( l3pid , etype_vals , " Unknown " ) ,
l3pid ) ;
break ;
2002-05-16 20:11:32 +00:00
}
2002-10-23 20:50:22 +00:00
case 2 : {
2012-06-11 16:33:56 +00:00
unsigned short l3pid = tvb_get_ntohs ( tvb , offset2 + 2 ) ;
unsigned short min_vpi , min_vci , max_vpi , max_vci ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_request_l3pid , tvb , offset2 + 2 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 4 , 1 ,
" M: %s Merge in Data Plane " ,
( tvb_get_guint8 ( tvb , offset2 + 4 ) & 0x80 ) ?
" 1: Can " : " 0: Cannot " ) ;
min_vpi = tvb_get_ntohs ( tvb , offset2 + 4 ) & 0x7f ;
min_vci = tvb_get_ntohs ( tvb , offset2 + 6 ) ;
max_vpi = tvb_get_ntohs ( tvb , offset2 + 8 ) & 0x7f ;
max_vci = tvb_get_ntohs ( tvb , offset2 + 10 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_request_min_vpi , tvb , offset2 + 4 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_request_min_vci , tvb , offset2 + 6 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_request_max_vpi , tvb , offset2 + 8 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_request_max_vci , tvb , offset2 + 10 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " LABEL REQUEST: ATM: L3PID: %s (0x%04x). VPI/VCI: Min: %d/%d, Max: %d/%d. %s Merge. " ,
val_to_str_const ( l3pid , etype_vals , " Unknown " ) , l3pid ,
min_vpi , min_vci , max_vpi , max_vci ,
( tvb_get_guint8 ( tvb , offset2 + 4 ) & 0x80 ) ? " Can " : " Cannot " ) ;
break ;
2002-10-23 20:50:22 +00:00
}
case 3 : {
2012-06-11 16:33:56 +00:00
guint16 l3pid = tvb_get_ntohs ( tvb , offset2 + 2 ) ;
guint32 min_dlci , max_dlci , dlci_len , dlci_len_code ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_request_l3pid , tvb , offset2 + 2 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
dlci_len_code = ( tvb_get_ntohs ( tvb , offset2 + 4 ) & 0x0180 ) > > 7 ;
min_dlci = tvb_get_ntohl ( tvb , offset2 + 4 ) & 0x7fffff ;
max_dlci = tvb_get_ntohl ( tvb , offset2 + 8 ) & 0x7fffff ;
switch ( dlci_len_code ) {
case 0 :
/* 10-bit DLCIs */
dlci_len = 10 ;
min_dlci & = 0x3ff ;
max_dlci & = 0x3ff ;
break ;
case 2 :
dlci_len = 23 ;
break ;
default :
dlci_len = 0 ;
min_dlci = 0 ;
max_dlci = 0 ;
break ;
}
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 4 , 2 ,
" DLCI Length: %s (%d) " ,
( dlci_len = = 10 ) ? " 10 bits " :
( dlci_len = = 23 ) ? " 23 bits " :
" INVALID " , dlci_len_code ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 5 , 3 ,
" Min DLCI: %d " , min_dlci ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 8 , 2 ,
" Max DLCI: %d " , max_dlci ) ;
proto_item_set_text ( ti , " LABEL REQUEST: Frame: L3PID: %s (0x%04x). DLCI Len: %s. Min DLCI: %d. Max DLCI: %d " ,
val_to_str_const ( l3pid , etype_vals , " Unknown " ) , l3pid ,
( dlci_len = = 10 ) ? " 10 bits " :
( dlci_len = = 23 ) ? " 23 bits " :
" INVALID " , min_dlci , max_dlci ) ;
break ;
2002-10-23 20:50:22 +00:00
}
2011-01-27 16:08:41 +00:00
case 4 :
case 5 : {
2012-06-11 16:33:56 +00:00
unsigned short l3pid = tvb_get_ntohs ( tvb , offset2 + 2 ) ;
unsigned char lsp_enc = tvb_get_guint8 ( tvb , offset2 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_request_lsp_encoding_type , tvb , offset2 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_request_switching_type , tvb , offset2 + 1 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_g_pid , tvb , offset2 + 2 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " LABEL REQUEST: Generalized: LSP Encoding=%s, "
" Switching Type=%s, G-PID=%s " ,
rval_to_str ( lsp_enc , gmpls_lsp_enc_rvals , " Unknown (%d) " ) ,
rval_to_str ( tvb_get_guint8 ( tvb , offset2 + 1 ) ,
gmpls_switching_type_rvals , " Unknown (%d) " ) ,
rval_to_str ( l3pid , gmpls_gpid_rvals ,
val_to_str ( l3pid , etype_vals ,
" Unknown (0x%04x) " ) ) ) ;
break ;
2002-05-16 20:11:32 +00:00
}
2012-06-11 16:33:56 +00:00
default :
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_request_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2011-01-31 17:09:58 +00:00
} /* switch(type) */
2002-05-16 20:11:32 +00:00
}
2010-03-06 12:48:30 +00:00
/*-----------------------------------------------------------------------------
2002-05-16 20:11:32 +00:00
* LABEL
2010-03-06 12:48:30 +00:00
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2010-05-10 15:54:57 +00:00
/*
2010-03-06 12:48:30 +00:00
FF : G .694 lambda label , see draft - ietf - ccamp - gmpls - g - 694 - lambda - labels - 05
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Grid | C . S | Reserved | n |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
*/
static void
dissect_glabel_lambda ( proto_tree * ti _U_ , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset )
{
2012-12-26 05:57:06 +00:00
float freq = 0.0f ;
2010-03-06 12:48:30 +00:00
guint32 wavelength = 0 ;
2012-12-26 05:57:06 +00:00
float cs_thz = 0.0f ;
2010-03-06 12:48:30 +00:00
guint8 grid = ( ( tvb_get_guint8 ( tvb , offset ) & 0xE0 ) > > 5 ) ;
2011-01-31 17:09:58 +00:00
guint8 cs = ( ( tvb_get_guint8 ( tvb , offset ) & 0x1E ) > > 1 ) ;
gint16 n = tvb_get_ntohs ( tvb , offset + 2 ) ;
2010-03-06 12:48:30 +00:00
if ( grid = = 1 ) {
2011-01-31 17:09:58 +00:00
/* DWDM grid: Frequency (THz) = 193.1 THz + n * channel spacing (THz) */
cs_thz =
cs = = 1 ? 0.1f :
cs = = 2 ? 0.05f :
cs = = 3 ? 0.025f :
cs = = 4 ? 0.0125f :
2010-03-07 21:09:14 +00:00
0.0f ;
2011-01-31 17:09:58 +00:00
freq = 193.1f + ( n * cs_thz ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset , 4 ,
" Wavelength Label: "
" grid=%s, "
" channel spacing=%s, "
" n=%d, "
" freq=%.2fTHz " ,
/* grid */
2013-03-01 07:02:08 +00:00
" DWDM " ,
2011-01-31 17:09:58 +00:00
/* channel spacing */
cs = = 1 ? " 100GHz " :
cs = = 2 ? " 50GHz " :
cs = = 3 ? " 25GHz " :
cs = = 4 ? " 12.5GHz " :
" unknown " ,
/* n */
n ,
/* frequency */
freq ) ;
proto_item_append_text ( ti , " : Wavelength: "
" grid=%s, "
" channel spacing=%s, "
" n=%d, "
" freq=%.2fTHz " ,
2013-03-01 07:02:08 +00:00
" DWDM " ,
2011-01-31 17:09:58 +00:00
cs = = 1 ? " 100GHz " :
cs = = 2 ? " 50GHz " :
cs = = 3 ? " 25GHz " :
cs = = 4 ? " 12.5GHz " :
" unknown " ,
n ,
freq ) ;
2010-03-06 12:48:30 +00:00
} else if ( grid = = 2 ) {
2011-01-31 17:09:58 +00:00
/* CWDM grid: Wavelength (nm) = 1471 nm + n * 20 nm */
wavelength = 1471 + ( n * 20 ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset , 4 ,
" Wavelength Label: "
" grid=%s, "
" channel spacing=%s, "
" n=%d, "
" wavelength=%unm " ,
/* grid */
2013-03-01 07:02:08 +00:00
" CWDM " ,
2011-01-31 17:09:58 +00:00
/* channel spacing */
cs = = 1 ? " 20nm " :
" unknown " ,
/* n */
n ,
/* wavelength */
wavelength ) ;
proto_item_append_text ( ti , " : Wavelength: "
" grid=%s, "
" channel spacing=%s, "
" n=%d, "
" wavelength=%unm " ,
2013-03-01 07:02:08 +00:00
" CWDM " ,
2011-01-31 17:09:58 +00:00
cs = = 1 ? " 20nm " :
" unknown " ,
n ,
wavelength ) ;
2010-03-06 12:48:30 +00:00
} else {
2011-01-31 17:09:58 +00:00
/* unknown grid: */
proto_tree_add_text ( rsvp_object_tree , tvb , offset , 4 ,
" Wavelength Label: "
" grid=%u, "
" channel spacing=%u, "
" n=%d " ,
grid , cs , n ) ;
proto_item_append_text ( ti , " : Wavelength: "
" grid=%u, "
" channel spacing=%u, "
" n=%d " ,
grid , cs , n ) ;
2010-03-06 12:48:30 +00:00
}
return ;
}
2010-05-10 15:54:57 +00:00
/*
2010-03-06 12:48:30 +00:00
FF : SONET / SDH label , see RFC 4606
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| S | U | K | L | M |
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
*/
static void
dissect_glabel_sdh ( proto_tree * ti _U_ , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset )
{
guint16 s = tvb_get_ntohs ( tvb , offset ) ;
guint8 u = ( ( tvb_get_guint8 ( tvb , offset + 2 ) & 0xF0 ) > > 4 ) ;
guint8 k = ( ( tvb_get_guint8 ( tvb , offset + 2 ) & 0x0F ) > > 0 ) ;
guint8 l = ( ( tvb_get_guint8 ( tvb , offset + 3 ) & 0xF0 ) > > 4 ) ;
guint8 m = ( ( tvb_get_guint8 ( tvb , offset + 3 ) & 0x0F ) > > 0 ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset , 4 ,
" SONET/SDH Label: "
" S=%u, "
" U=%u, "
" K=%u, "
" L=%u, "
" M=%u " ,
s , u , k , l , m ) ;
2011-01-27 16:08:41 +00:00
proto_item_append_text ( ti , " : SONET/SDH: "
" S=%u, "
" U=%u, "
" K=%u, "
" L=%u, "
" M=%u " ,
s , u , k , l , m ) ;
2010-03-06 12:48:30 +00:00
}
2010-05-10 15:54:57 +00:00
/*
2010-03-06 12:48:30 +00:00
FF : G .709 label ( aka ODUk label ) , see RFC 4328
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
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
| Reserved | t3 | t2 | t1
2010-05-10 15:54:57 +00:00
+ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
2010-03-06 12:48:30 +00:00
*/
static void
dissect_glabel_g709 ( proto_tree * ti _U_ , proto_tree * rsvp_object_tree ,
2012-06-11 16:33:56 +00:00
tvbuff_t * tvb ,
int offset )
2010-03-06 12:48:30 +00:00
{
guint8 t2 = ( ( tvb_get_guint8 ( tvb , offset + 3 ) & 0x0E ) > > 1 ) ;
guint8 t1 = ( ( tvb_get_guint8 ( tvb , offset + 3 ) & 0x01 ) > > 0 ) ;
guint8 t3 = ( ( tvb_get_guint8 ( tvb , offset + 2 ) & 0x03 ) < < 4 ) ;
t3 | = ( ( tvb_get_guint8 ( tvb , offset + 3 ) & 0xF0 ) > > 4 ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset , 4 ,
" G.709 ODUk Label: "
" t3=%u, "
" t2=%u, "
" t1=%u " ,
t3 , t2 , t1 ) ;
2011-01-27 16:08:41 +00:00
proto_item_append_text ( ti , " : G.709 ODUk: "
" t3=%u, "
" t2=%u, "
" t1=%u " ,
t3 , t2 , t1 ) ;
2010-03-06 12:48:30 +00:00
}
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_label ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class , int type )
2002-05-16 20:11:32 +00:00
{
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
int mylen , i ;
2005-08-05 00:23:22 +00:00
const char * name ;
2002-05-16 20:11:32 +00:00
2011-11-21 20:04:45 +00:00
name = ( rsvp_class = = RSVP_CLASS_SUGGESTED_LABEL ? " SUGGESTED LABEL " :
2012-06-11 16:33:56 +00:00
( rsvp_class = = RSVP_CLASS_UPSTREAM_LABEL ? " UPSTREAM LABEL " :
( rsvp_class = = RSVP_CLASS_RECOVERY_LABEL ? " RECOVERY LABEL " :
" LABEL " ) ) ) ;
2002-05-16 20:11:32 +00:00
mylen = obj_length - 4 ;
switch ( type ) {
2002-08-28 21:04:11 +00:00
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 1 (Packet Label) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_label , tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " %s: %u " , name ,
tvb_get_ntohl ( tvb , offset2 ) ) ;
break ;
2002-08-28 21:04:11 +00:00
case 2 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 2 (Generalized Label) " ) ;
2012-06-11 16:33:56 +00:00
if ( rsvp_generalized_label_option = = 1 ) {
2011-01-31 17:09:58 +00:00
/* FF: no generalized label interpretation */
proto_item_set_text ( ti , " %s: Generalized: " , name ) ;
for ( i = 0 ; i < mylen ; i + = 4 ) {
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_generalized_label , tvb , offset2 + i , 4 , ENC_BIG_ENDIAN ) ;
2011-01-31 17:09:58 +00:00
if ( i < 16 ) {
proto_item_append_text ( ti , " 0x%x%s " ,
tvb_get_ntohl ( tvb , offset2 + i ) ,
i + 4 < mylen ? " , " : " " ) ;
} else if ( i = = 16 ) {
proto_item_append_text ( ti , " ... " ) ;
}
}
2012-06-11 16:33:56 +00:00
} else if ( rsvp_generalized_label_option = = 2 ) {
2011-01-31 17:09:58 +00:00
dissect_glabel_sdh ( ti , rsvp_object_tree , tvb , offset2 ) ;
2012-06-11 16:33:56 +00:00
} else if ( rsvp_generalized_label_option = = 4 ) {
2011-01-31 17:09:58 +00:00
dissect_glabel_g709 ( ti , rsvp_object_tree , tvb , offset2 ) ;
2012-06-11 16:33:56 +00:00
} else if ( rsvp_generalized_label_option = = 3 ) {
2011-01-31 17:09:58 +00:00
dissect_glabel_lambda ( ti , rsvp_object_tree , tvb , offset2 ) ;
2012-06-11 16:33:56 +00:00
}
break ;
2011-01-27 16:08:41 +00:00
case 4 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 4 (Generalized Channel_set) " ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " : Generalized Channel_set " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_data , tvb , offset2 , mylen , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2011-01-27 16:08:41 +00:00
2002-08-28 21:04:11 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_data , tvb , offset2 , mylen , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
2004-07-21 05:57:30 +00:00
/*------------------------------------------------------------------------------
* LABEL_SET
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2013-12-24 23:41:24 +00:00
static const value_string action_type_vals [ ] = {
{ 0 , " Inclusive list " } ,
{ 1 , " Exclusive list " } ,
{ 2 , " Inclusive range " } ,
{ 3 , " Exclusive range " } ,
{ 0 , NULL }
} ;
2004-07-21 05:57:30 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_label_set ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2004-07-21 05:57:30 +00:00
{
2012-06-11 16:33:56 +00:00
int offset2 = offset + 8 ;
2004-07-21 05:57:30 +00:00
guint8 label_type ;
2012-06-11 16:33:56 +00:00
int len , i ;
2004-07-21 05:57:30 +00:00
len = obj_length - 8 ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_label_set_action , tvb , offset + 4 , 1 , ENC_NA ) ;
2005-07-25 19:52:08 +00:00
proto_item_append_text ( ti , " : %s " ,
2013-12-24 23:41:24 +00:00
val_to_str ( tvb_get_guint8 ( tvb , offset + 4 ) ,
action_type_vals , " Unknown (%u) " ) ) ;
2004-07-21 05:57:30 +00:00
label_type = tvb_get_guint8 ( tvb , offset + 7 ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset + 7 , 1 , " Label type: %s " ,
2012-06-11 16:33:56 +00:00
( label_type = = 1 ) ? " Packet Label " : " Generalized Label " ) ;
2005-07-25 19:52:08 +00:00
proto_item_append_text ( ti , " , %s " ,
2012-06-11 16:33:56 +00:00
( label_type = = 1 ) ? " Packet Label: " : " Generalized Label: " ) ;
2004-07-21 05:57:30 +00:00
for ( i = 0 ; i < len / 4 ; i + + ) {
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + i * 4 , 4 ,
" Subchannel %u: %u (0x%x) " , i + 1 ,
tvb_get_ntohl ( tvb , offset2 + i * 4 ) ,
tvb_get_ntohl ( tvb , offset2 + i * 4 ) ) ;
2005-07-25 19:52:08 +00:00
2012-06-11 16:33:56 +00:00
if ( i < 5 ) {
2011-01-31 17:09:58 +00:00
if ( i ! = 0 )
proto_item_append_text ( ti , " , " ) ;
2005-07-25 19:52:08 +00:00
2011-01-31 17:09:58 +00:00
proto_item_append_text ( ti , " %u " ,
tvb_get_ntohl ( tvb , offset2 + i * 4 ) ) ;
2012-06-11 16:33:56 +00:00
}
2004-07-21 05:57:30 +00:00
}
}
2002-05-16 20:11:32 +00:00
/*------------------------------------------------------------------------------
* SESSION ATTRIBUTE
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_session_attribute ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
guint8 flags ;
guint8 name_len ;
2002-05-16 20:11:32 +00:00
proto_tree * ti2 , * rsvp_sa_flags_tree ;
switch ( type ) {
2003-11-08 00:09:01 +00:00
case 1 :
2002-05-16 20:11:32 +00:00
case 7 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " %u - IPv4 LSP (%sResource Affinities) " ,
2003-11-08 00:09:01 +00:00
type , ( type = = 1 ) ? " " : " No " ) ;
2007-11-16 23:56:18 +00:00
2003-11-08 00:09:01 +00:00
if ( type = = 1 ) {
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_attribute_exclude_any , tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_attribute_include_any , tvb , offset2 + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_attribute_include_all , tvb , offset2 + 8 , 4 , ENC_BIG_ENDIAN ) ;
2003-11-08 00:09:01 +00:00
offset2 = offset2 + 12 ;
}
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_attribute_setup_priority , tvb , offset2 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_attribute_hold_priority , tvb , offset2 + 1 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
flags = tvb_get_guint8 ( tvb , offset2 + 2 ) ;
2013-12-24 23:41:24 +00:00
ti2 = proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_attribute_flags , tvb , offset2 + 2 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
rsvp_sa_flags_tree = proto_item_add_subtree ( ti2 ,
TREE ( TT_SESSION_ATTRIBUTE_FLAGS ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_sa_flags_tree , hf_rsvp_sa_flags_local ,
tvb , offset2 + 2 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_sa_flags_tree , hf_rsvp_sa_flags_label ,
tvb , offset2 + 2 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_sa_flags_tree , hf_rsvp_sa_flags_se_style ,
tvb , offset2 + 2 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_sa_flags_tree , hf_rsvp_sa_flags_bandwidth ,
tvb , offset2 + 2 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_sa_flags_tree , hf_rsvp_sa_flags_node ,
tvb , offset2 + 2 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
name_len = tvb_get_guint8 ( tvb , offset2 + 3 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_attribute_name_length , tvb , offset2 + 3 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_attribute_name , tvb , offset2 + 4 , name_len , ENC_NA | ENC_ASCII ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " SESSION ATTRIBUTE: SetupPrio %d, HoldPrio %d, %s%s%s%s%s [%s] " ,
tvb_get_guint8 ( tvb , offset2 ) ,
tvb_get_guint8 ( tvb , offset2 + 1 ) ,
flags & 0x01 ? " Local Protection, " : " " ,
flags & 0x02 ? " Label Recording, " : " " ,
flags & 0x04 ? " SE Style, " : " " ,
flags & 0x08 ? " Bandwidth Protection, " : " " ,
flags & 0x10 ? " Node Protection, " : " " ,
name_len ? tvb_format_text ( tvb , offset2 + 4 , name_len ) : " " ) ;
break ;
2002-05-16 20:11:32 +00:00
2002-08-28 21:04:11 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_session_attribute_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
2002-10-02 21:15:27 +00:00
/*------------------------------------------------------------------------------
2012-11-29 20:15:37 +00:00
* EXPLICIT ROUTE AND RECORD ROUTE SUBOBJECTS ,
2012-10-30 09:13:13 +00:00
* RFC 3209 , RFC 3473 , RFC 5420 , RFC 4873 , RFC 5553
2002-10-02 21:15:27 +00:00
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_ero_rro_subobjects ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length , int rsvp_class )
2002-10-02 21:15:27 +00:00
{
2012-06-11 16:33:56 +00:00
int i , j , k , l , flags ;
2002-10-08 23:29:15 +00:00
proto_tree * ti2 , * rsvp_ro_subtree , * rsvp_rro_flags_subtree ;
2012-06-11 16:33:56 +00:00
int tree_type ;
2002-10-02 21:15:27 +00:00
2011-11-21 20:04:45 +00:00
switch ( rsvp_class ) {
2002-10-02 21:15:27 +00:00
case RSVP_CLASS_EXPLICIT_ROUTE :
2011-11-21 20:04:45 +00:00
tree_type = TREE ( TT_EXPLICIT_ROUTE_SUBOBJ ) ;
break ;
2002-10-02 21:15:27 +00:00
case RSVP_CLASS_RECORD_ROUTE :
2011-11-21 20:04:45 +00:00
tree_type = TREE ( TT_RECORD_ROUTE_SUBOBJ ) ;
break ;
2002-10-02 21:15:27 +00:00
default :
2011-11-21 20:04:45 +00:00
/* Bail out */
return ;
2002-10-02 21:15:27 +00:00
}
for ( i = 1 , l = 0 ; l < obj_length - 4 ; i + + ) {
2012-06-11 16:33:56 +00:00
j = tvb_get_guint8 ( tvb , offset + l ) & 0x7f ;
switch ( j ) {
case 1 : /* IPv4 */
k = tvb_get_guint8 ( tvb , offset + l ) & 0x80 ;
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l , 8 ,
" IPv4 Subobject - %s%s " ,
tvb_ip_to_str ( tvb , offset + l + 2 ) ,
rsvp_class = = RSVP_CLASS_EXPLICIT_ROUTE ?
( k ? " , Loose " : " , Strict " ) : " " ) ;
rsvp_ro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
if ( rsvp_class = = RSVP_CLASS_EXPLICIT_ROUTE )
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
k ? " Loose Hop " : " Strict Hop " ) ;
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
" Type: 1 (IPv4) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_length , tvb , offset + l + 1 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_ipv4_hop , tvb , offset + l + 2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_prefix_length , tvb , offset + l + 6 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
if ( i < 4 ) {
proto_item_append_text ( ti , " IPv4 %s%s " ,
tvb_ip_to_str ( tvb , offset + l + 2 ) ,
k ? " [L] " : " " ) ;
}
if ( rsvp_class = = RSVP_CLASS_RECORD_ROUTE ) {
flags = tvb_get_guint8 ( tvb , offset + l + 7 ) ;
if ( flags & 0x10 ) {
proto_item_append_text ( ti , " (Node-id) " ) ;
proto_item_append_text ( ti2 , " (Node-id) " ) ;
}
if ( flags & 0x01 ) proto_item_append_text ( ti2 , " , Local Protection Available " ) ;
if ( flags & 0x02 ) proto_item_append_text ( ti2 , " , Local Protection In Use " ) ;
if ( flags & 0x04 ) proto_item_append_text ( ti2 , " , Backup BW Avail " ) ;
if ( flags & 0x08 ) proto_item_append_text ( ti2 , " , Backup is Next-Next-Hop " ) ;
2013-12-24 23:41:24 +00:00
ti2 = proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_flags , tvb , offset + l + 7 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
rsvp_rro_flags_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_RECORD_ROUTE_SUBOBJ_FLAGS ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_local_avail ,
tvb , offset + l + 7 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_local_in_use ,
tvb , offset + l + 7 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_bandwidth ,
tvb , offset + l + 7 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_node ,
tvb , offset + l + 7 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_node_address ,
tvb , offset + l + 7 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
}
break ;
case 2 : /* IPv6 */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l , 20 ,
" IPv6 Subobject " ) ;
rsvp_ro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
k = tvb_get_guint8 ( tvb , offset + l ) & 0x80 ;
if ( rsvp_class = = RSVP_CLASS_EXPLICIT_ROUTE )
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
k ? " Loose Hop " : " Strict Hop " ) ;
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
" Type: 2 (IPv6) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_length , tvb , offset + l + 1 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_ipv6_hop , tvb , offset + l + 2 , 16 , ENC_NA ) ;
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_prefix_length , tvb , offset + l + 18 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
if ( i < 4 ) {
proto_item_append_text ( ti , " IPv6 [...]%s " , k ? " [L] " : " " ) ;
}
if ( rsvp_class = = RSVP_CLASS_RECORD_ROUTE ) {
flags = tvb_get_guint8 ( tvb , offset + l + 19 ) ;
if ( flags & 0x10 ) {
proto_item_append_text ( ti , " (Node-id) " ) ;
proto_item_append_text ( ti2 , " (Node-id) " ) ;
}
if ( flags & 0x01 ) proto_item_append_text ( ti2 , " , Local Protection Available " ) ;
if ( flags & 0x02 ) proto_item_append_text ( ti2 , " , Local Protection In Use " ) ;
if ( flags & 0x04 ) proto_item_append_text ( ti2 , " , Backup BW Avail " ) ;
if ( flags & 0x08 ) proto_item_append_text ( ti2 , " , Backup is Next-Next-Hop " ) ;
2013-12-24 23:41:24 +00:00
ti2 = proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_flags , tvb , offset + l + 19 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
rsvp_rro_flags_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_RECORD_ROUTE_SUBOBJ_FLAGS ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_local_avail ,
tvb , offset + l + 19 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_local_in_use ,
tvb , offset + l + 19 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_backup_tunnel_bandwidth ,
tvb , offset + l + 19 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_backup_tunnel_hop ,
tvb , offset + l + 19 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_node_address ,
tvb , offset + l + 19 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
}
break ;
2012-10-30 09:13:13 +00:00
case 3 : /* Label RFC 3477 */
2012-06-11 16:33:56 +00:00
k = tvb_get_guint8 ( tvb , offset + l ) & 0x80 ;
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l , 8 ,
" Label Subobject - %d, %s " ,
tvb_get_ntohl ( tvb , offset + l + 4 ) ,
rsvp_class = = RSVP_CLASS_EXPLICIT_ROUTE ?
( k ? " Loose " : " Strict " ) : " " ) ;
rsvp_ro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
if ( rsvp_class = = RSVP_CLASS_EXPLICIT_ROUTE )
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
k ? " Loose Hop " : " Strict Hop " ) ;
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
" Type: 3 (Label) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_length , tvb , offset + l + 1 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
if ( rsvp_class = = RSVP_CLASS_RECORD_ROUTE ) {
flags = tvb_get_guint8 ( tvb , offset + l + 2 ) ;
2012-10-30 09:13:13 +00:00
if ( flags & 0x01 ) proto_item_append_text ( ti2 , " The label will be understood if received on any interface " ) ;
2013-12-24 23:41:24 +00:00
ti2 = proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_flags , tvb , offset + l + 2 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
rsvp_rro_flags_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_RECORD_ROUTE_SUBOBJ_FLAGS ) ) ;
2012-09-24 01:59:34 +00:00
2012-10-30 09:13:13 +00:00
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_global_label ,
2012-09-24 01:59:34 +00:00
tvb , offset + l + 2 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
}
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ctype , tvb , offset + l + 3 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_label , tvb , offset + l + 4 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
if ( i < 4 ) {
proto_item_append_text ( ti , " Label %d%s " ,
tvb_get_ntohl ( tvb , offset + l + 4 ) ,
k ? " [L] " : " " ) ;
}
break ;
2012-10-30 09:13:13 +00:00
case 4 : /* Unnumbered Interface-ID RFC 3477, RFC 6107*/
2012-06-11 16:33:56 +00:00
k = tvb_get_guint8 ( tvb , offset + l ) & 0x80 ;
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l , 8 ,
" Unnumbered Interface-ID - %s, %d, %s " ,
tvb_ip_to_str ( tvb , offset + l + 4 ) ,
tvb_get_ntohl ( tvb , offset + l + 8 ) ,
rsvp_class = = RSVP_CLASS_EXPLICIT_ROUTE ?
( k ? " Loose " : " Strict " ) : " " ) ;
rsvp_ro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
if ( rsvp_class = = RSVP_CLASS_EXPLICIT_ROUTE )
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
k ? " Loose Hop " : " Strict Hop " ) ;
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
" Type: 4 (Unnumbered Interface-ID) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_length , tvb , offset + l + 1 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
if ( rsvp_class = = RSVP_CLASS_RECORD_ROUTE ) {
flags = tvb_get_guint8 ( tvb , offset + l + 2 ) ;
if ( flags & 0x01 ) proto_item_append_text ( ti2 , " , Local Protection Available " ) ;
if ( flags & 0x02 ) proto_item_append_text ( ti2 , " , Local Protection In Use " ) ;
2013-12-24 23:41:24 +00:00
ti2 = proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_flags , tvb , offset + l + 2 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
rsvp_rro_flags_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_RECORD_ROUTE_SUBOBJ_FLAGS ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_local_avail ,
tvb , offset + l + 2 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_rro_flags_subtree , hf_rsvp_rro_flags_local_in_use ,
tvb , offset + l + 2 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
}
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_router_id , tvb , offset + l + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_interface_id , tvb , offset + l + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
if ( i < 4 ) {
proto_item_append_text ( ti , " Unnum %s/%d%s " ,
tvb_ip_to_str ( tvb , offset + l + 4 ) ,
tvb_get_ntohl ( tvb , offset + l + 8 ) ,
k ? " [L] " : " " ) ;
}
break ;
case 32 : /* AS */
if ( rsvp_class = = RSVP_CLASS_RECORD_ROUTE ) goto defaultsub ;
k = tvb_get_ntohs ( tvb , offset + l + 2 ) ;
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l , 4 ,
" Autonomous System %u " ,
k ) ;
rsvp_ro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
" Type: 32 (Autonomous System Number) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_length , tvb , offset + l + 1 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l + 2 , 2 ,
" Autonomous System %u " , k ) ;
if ( i < 4 ) {
proto_item_append_text ( ti , " AS %d " ,
tvb_get_ntohs ( tvb , offset + l + 2 ) ) ;
}
break ;
case 64 : /* PKSv4 - RFC5520 */
if ( rsvp_class = = RSVP_CLASS_RECORD_ROUTE ) goto defaultsub ;
k = tvb_get_ntohs ( tvb , offset + l + 2 ) ;
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l , 8 ,
" Path Key subobject - %s, %u " ,
tvb_ip_to_str ( tvb , offset + l + 4 ) ,
2011-01-27 16:08:41 +00:00
k ) ;
2012-06-11 16:33:56 +00:00
rsvp_ro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
" Type: 64 (Path Key with IPv4 PCE-ID) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_length , tvb , offset + l + 1 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_path_key , tvb , offset + l + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_pce_id_ipv4 , tvb , offset + l + 4 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
if ( i < 4 ) {
proto_item_append_text ( ti , " Path Key %d " , k ) ;
}
break ;
case 65 : /* PKSv6 - RFC5520 */
if ( rsvp_class = = RSVP_CLASS_RECORD_ROUTE ) goto defaultsub ;
k = tvb_get_ntohs ( tvb , offset + l + 2 ) ;
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l , 8 ,
" Path Key subobject - %s, %u " ,
tvb_ip6_to_str ( tvb , offset + l + 4 ) ,
2011-01-27 16:08:41 +00:00
k ) ;
2012-06-11 16:33:56 +00:00
rsvp_ro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
" Type: 65 (Path Key with IPv6 PCE-ID) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_length , tvb , offset + l + 1 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_path_key , tvb , offset + l + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_pce_id_ipv6 , tvb , offset + l + 4 , 16 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
if ( i < 4 ) {
proto_item_append_text ( ti , " Path Key %d " , k ) ;
}
break ;
2002-10-02 21:15:27 +00:00
2011-01-05 07:16:09 +00:00
case 124 :
case 125 :
case 126 :
case 127 :
2012-06-11 16:33:56 +00:00
/*
* FF : Types 124 through 127 are to be reserved for Vendor
* Private Use ( see RFC 3936 , Section 2.3 .1 ) in case of
* EXPLICIT_ROUTE ( aka ERO ) .
*/
if ( rsvp_class = = RSVP_CLASS_RECORD_ROUTE )
goto defaultsub ;
else
goto privatesub ;
break ;
2011-01-05 07:16:09 +00:00
case 252 :
case 253 :
case 254 :
case 255 :
2012-06-11 16:33:56 +00:00
/*
* FF : Types 252 through 255 are to be reserved for Vendor
* Private Use ( see RFC 3936 , Section 2.3 .1 ) in case of
* RECORD_ROUTE ( aka RRO ) .
*/
if ( rsvp_class = = RSVP_CLASS_EXPLICIT_ROUTE )
goto defaultsub ;
else
goto privatesub ;
break ;
2011-01-05 07:16:09 +00:00
privatesub : /* Private subobject */
2012-06-11 16:33:56 +00:00
/*
* FF : The first four octets of the sub - object contents of
* a Vendor Private sub - object of an EXPLICIT_ROUTE or
* RECORD_ROUTE object MUST be that vendor ' s SMI enterprise
* code in network octet order .
*/
{
guint8 private_so_len = tvb_get_guint8 ( tvb , offset + l + 1 ) ;
k = tvb_get_guint8 ( tvb , offset + l ) & 0x80 ;
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb , offset + l ,
tvb_get_guint8 ( tvb , offset + l + 1 ) ,
" Private Subobject: %d " , j ) ;
rsvp_ro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
k ? " Loose Hop " : " Strict Hop " ) ;
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
" Type: %u (Private) " , j ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_private_length , tvb , offset + l + 1 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_item ( rsvp_ro_subtree ,
hf_rsvp_filter [ RSVPF_ENT_CODE ] ,
tvb , offset + l + 4 , 4 , ENC_BIG_ENDIAN ) ;
if ( private_so_len > 8 ) {
/* some private data */
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_private_data , tvb , offset + l + 8 , private_so_len - 8 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
}
}
break ;
default : /* Unknown subobject */
defaultsub :
k = tvb_get_guint8 ( tvb , offset + l ) & 0x80 ;
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l ,
tvb_get_guint8 ( tvb , offset + l + 1 ) ,
" Unknown subobject: %d " , j ) ;
rsvp_ro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
k ? " Loose Hop " : " Strict Hop " ) ;
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l , 1 ,
" Type: %u (Unknown) " , j ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_ro_subtree , hf_rsvp_ero_rro_subobjects_length , tvb , offset + l + 1 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
}
if ( tvb_get_guint8 ( tvb , offset + l + 1 ) < 1 ) {
proto_tree_add_text ( rsvp_ro_subtree , tvb , offset + l + 1 , 1 ,
" Invalid length: %u " , tvb_get_guint8 ( tvb , offset + l + 1 ) ) ;
return ;
}
l + = tvb_get_guint8 ( tvb , offset + l + 1 ) ;
if ( l < obj_length - 4 ) {
if ( i < 4 )
proto_item_append_text ( ti , " , " ) ;
else if ( i = = 4 )
proto_item_append_text ( ti , " ... " ) ;
}
2002-10-02 21:15:27 +00:00
}
}
2007-11-16 23:56:18 +00:00
2013-08-07 23:07:15 +00:00
/*------------------------------------------------------------------------------
* FF : EXCLUDE ROUTE SUBOBJECTS ( they do not share ERO / RRO code points , they may
* share ERO / RRO subobjects layout ) .
* RFC 4874
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
dissect_rsvp_xro_subobjects ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb , int offset , int obj_length ,
int rsvp_class )
{
int i , lbit , type , l ;
proto_tree * ti2 , * rsvp_xro_subtree ;
int tree_type ;
switch ( rsvp_class ) {
case RSVP_CLASS_EXCLUDE_ROUTE :
tree_type = TREE ( TT_EXCLUDE_ROUTE_SUBOBJ ) ;
break ;
default :
/* Bail out */
return ;
}
/* 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 */
/* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
/* |L| Type | Length | Value... | */
/* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */
for ( i = 1 , l = 0 ; l < obj_length - 4 ; i + + ) {
lbit = tvb_get_guint8 ( tvb , offset + l ) & 0x80 ;
type = tvb_get_guint8 ( tvb , offset + l ) & 0x7f ;
switch ( type ) {
case 1 : /* IPv4 */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l , 8 ,
" IPv4 Subobject - %s " ,
tvb_ip_to_str ( tvb , offset + l + 2 ) ) ;
rsvp_xro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_lbit ,
tvb , offset + l , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_type ,
tvb , offset + l , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_len ,
tvb , offset + l + 1 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_ipv4_addr ,
tvb , offset + l + 2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_ipv4_prefix ,
tvb , offset + l + 6 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_ipv4_attr ,
tvb , offset + l + 7 , 1 , ENC_NA ) ;
if ( i < 4 ) {
proto_item_append_text ( ti , " IPv4 %s%s " ,
tvb_ip_to_str ( tvb , offset + l + 2 ) ,
lbit ? " [L] " : " " ) ;
}
break ;
case 2 : /* IPv6 */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l , 20 ,
" IPv6 Subobject - %s " ,
tvb_ip6_to_str ( tvb , offset + l + 2 ) ) ;
rsvp_xro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_lbit ,
tvb , offset + l , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_type ,
tvb , offset + l , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_len ,
tvb , offset + l + 1 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_ipv6_addr ,
tvb , offset + l + 2 , 16 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_ipv6_prefix ,
tvb , offset + l + 18 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_ipv6_attr ,
tvb , offset + l + 19 , 1 , ENC_NA ) ;
if ( i < 4 ) {
proto_item_append_text ( ti , " IPv6 [...]%s " , lbit ? " [L] " : " " ) ;
}
break ;
case 34 : /* SRLG */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l , 8 ,
" SRLG Subobject - %u " ,
tvb_get_ntohl ( tvb , offset + l + 2 ) ) ;
rsvp_xro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_lbit ,
tvb , offset + l , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_type ,
tvb , offset + l , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_len ,
tvb , offset + l + 1 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_srlg_id ,
tvb , offset + l + 2 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_srlg_res ,
tvb , offset + l + 6 , 2 , ENC_NA ) ;
if ( i < 4 ) {
proto_item_append_text ( ti , " SRLG %u%s " ,
tvb_get_ntohl ( tvb , offset + l + 2 ) ,
lbit ? " [L] " : " " ) ;
}
break ;
default : /* Unknown subobject */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + l ,
tvb_get_guint8 ( tvb , offset + l + 1 ) ,
" Unknown subobject: %d " , type ) ;
rsvp_xro_subtree =
proto_item_add_subtree ( ti2 , tree_type ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_lbit ,
tvb , offset + l , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_type ,
tvb , offset + l , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_xro_subtree , hf_rsvp_xro_sobj_len ,
tvb , offset + l + 1 , 1 , ENC_NA ) ;
break ;
}
if ( tvb_get_guint8 ( tvb , offset + l + 1 ) < 1 ) {
proto_tree_add_text ( rsvp_xro_subtree , tvb , offset + l + 1 , 1 ,
" Invalid Length: %u " ,
tvb_get_guint8 ( tvb , offset + l + 1 ) ) ;
return ;
}
l + = tvb_get_guint8 ( tvb , offset + l + 1 ) ;
if ( l < obj_length - 4 ) {
if ( i < 4 )
proto_item_append_text ( ti , " , " ) ;
else if ( i = = 4 )
proto_item_append_text ( ti , " ... " ) ;
}
}
}
2002-05-16 20:11:32 +00:00
/*------------------------------------------------------------------------------
* EXPLICIT ROUTE OBJECT
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_explicit_route ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class , int type )
2002-05-16 20:11:32 +00:00
{
switch ( type ) {
2007-11-16 23:56:18 +00:00
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " EXPLICIT ROUTE: " ) ;
2002-05-16 20:11:32 +00:00
2012-06-11 16:33:56 +00:00
dissect_rsvp_ero_rro_subobjects ( ti , rsvp_object_tree , tvb ,
offset + 4 , obj_length , rsvp_class ) ;
break ;
2002-10-02 21:15:27 +00:00
2002-05-16 20:11:32 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_explicit_route_data , tvb , offset + 4 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* RECORD ROUTE OBJECT
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_record_route ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class , int type )
2002-05-16 20:11:32 +00:00
{
proto_item_set_text ( ti , " RECORD ROUTE: " ) ;
switch ( type ) {
2007-11-16 23:56:18 +00:00
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2002-05-16 20:11:32 +00:00
2012-06-11 16:33:56 +00:00
dissect_rsvp_ero_rro_subobjects ( ti , rsvp_object_tree , tvb ,
offset + 4 , obj_length , rsvp_class ) ;
break ;
2002-08-28 21:04:11 +00:00
2007-11-16 23:56:18 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_record_route_data , tvb , offset + 4 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
2013-08-07 23:07:15 +00:00
/*------------------------------------------------------------------------------
* EXCLUDE ROUTE OBJECT
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
dissect_rsvp_exclude_route ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb , int offset , int obj_length ,
int rsvp_class , int ctype )
{
proto_item_set_text ( ti , " EXCLUDE ROUTE: " ) ;
switch ( ctype ) {
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , ctype ) ;
2013-08-07 23:07:15 +00:00
dissect_rsvp_xro_subobjects ( ti , rsvp_object_tree , tvb ,
offset + 4 , obj_length ,
rsvp_class ) ;
break ;
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
ctype , " Unknown (%u) " ,
2013-08-07 23:07:15 +00:00
ctype ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_exclude_route_data , tvb , offset + 4 , obj_length - 4 , ENC_NA ) ;
2013-08-07 23:07:15 +00:00
break ;
}
}
2002-05-16 20:11:32 +00:00
/*------------------------------------------------------------------------------
* MESSAGE ID
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_message_id ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
switch ( type ) {
2002-08-28 21:04:11 +00:00
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_flags , tvb , offset + 4 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_epoch , tvb , offset + 5 , 3 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_message_id , tvb , offset + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " MESSAGE-ID: %d %s " ,
tvb_get_ntohl ( tvb , offset + 8 ) ,
tvb_get_guint8 ( tvb , offset + 4 ) & 1 ? " (Ack Desired) " : " " ) ;
break ;
2002-05-16 20:11:32 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* MESSAGE ID ACK
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_message_id_ack ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
switch ( type ) {
2002-08-28 21:04:11 +00:00
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_ack_flags , tvb , offset + 4 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_ack_epoch , tvb , offset + 5 , 3 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_ack_message_id , tvb , offset + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " MESSAGE-ID ACK: %d " , tvb_get_ntohl ( tvb , offset + 8 ) ) ;
break ;
2002-05-16 20:11:32 +00:00
2002-08-28 21:04:11 +00:00
case 2 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_ack_flags , tvb , offset + 4 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_ack_epoch , tvb , offset + 5 , 3 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_ack_message_id , tvb , offset + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " MESSAGE-ID NACK: %d " , tvb_get_ntohl ( tvb , offset + 8 ) ) ;
break ;
2002-05-16 20:11:32 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_ack_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* MESSAGE ID LIST
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_message_id_list ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
int mylen ;
switch ( type ) {
2002-08-28 21:04:11 +00:00
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_list_flags , tvb , offset + 4 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_list_epoch , tvb , offset + 5 , 3 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
for ( mylen = 8 ; mylen < obj_length ; mylen + = 4 )
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_list_message_id , tvb , offset + mylen , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " MESSAGE-ID LIST: %d IDs " ,
( obj_length - 8 ) / 4 ) ;
break ;
2002-05-16 20:11:32 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_message_id_list_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* HELLO
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_hello ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length _U_ ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
switch ( type ) {
case 1 :
case 2 :
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset + 3 , 1 ,
" C-Type: %d - HELLO %s object " ,
tvb_get_guint8 ( tvb , offset + 3 ) ,
type = = 1 ? " REQUEST " : " ACK " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_hello_source_instance , tvb , offset + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_hello_destination_instance , tvb , offset + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " : %s. Src Instance: 0x%0x. Dest Instance: 0x%0x. " ,
type = = 1 ? " REQUEST " : " ACK " ,
tvb_get_ntohl ( tvb , offset + 4 ) ,
tvb_get_ntohl ( tvb , offset + 8 ) ) ;
break ;
2002-08-28 21:04:11 +00:00
default :
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset + 3 , 1 ,
" C-Type: %d - UNKNOWN " , type ) ;
break ;
2002-05-16 20:11:32 +00:00
} ;
}
/*------------------------------------------------------------------------------
* DCLASS
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_dclass ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
int offset2 = offset + 4 ;
int mylen ;
proto_item_set_text ( ti , " DCLASS: " ) ;
switch ( type ) {
2002-08-28 21:04:11 +00:00
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2012-06-11 16:33:56 +00:00
for ( mylen = 4 ; mylen < obj_length ; mylen + = 4 ) {
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_dclass_dscp , tvb , offset + mylen + 3 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %d%s " ,
tvb_get_guint8 ( tvb , offset + mylen + 3 ) > > 2 ,
mylen = = obj_length - 4 ? " " :
mylen < 16 ? " , " :
mylen = = 16 ? " , ... " : " " ) ;
}
break ;
2002-05-16 20:11:32 +00:00
default :
2012-06-11 16:33:56 +00:00
mylen = obj_length - 4 ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_dclass_data , tvb , offset2 , mylen , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* ADMINISTRATIVE STATUS
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_admin_status ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
2002-05-16 20:11:32 +00:00
proto_tree * ti2 , * rsvp_admin_subtree ;
2012-06-11 16:33:56 +00:00
guint32 status ;
2005-08-08 07:27:14 +00:00
2002-05-16 20:11:32 +00:00
proto_item_set_text ( ti , " ADMIN STATUS: " ) ;
switch ( type ) {
2002-08-28 21:04:11 +00:00
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2012-06-11 16:33:56 +00:00
status = tvb_get_ntohl ( tvb , offset2 ) ;
2013-12-24 23:41:24 +00:00
ti2 = proto_tree_add_item ( rsvp_object_tree , hf_rsvp_admin_status , tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
rsvp_admin_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_ADMIN_STATUS_FLAGS ) ) ;
proto_tree_add_boolean ( rsvp_admin_subtree ,
hf_rsvp_filter [ RSVPF_ADMIN_STATUS_REFLECT ] ,
tvb , offset2 , 4 , status ) ;
proto_tree_add_boolean ( rsvp_admin_subtree ,
hf_rsvp_filter [ RSVPF_ADMIN_STATUS_HANDOVER ] ,
tvb , offset2 , 4 , status ) ;
proto_tree_add_boolean ( rsvp_admin_subtree ,
hf_rsvp_filter [ RSVPF_ADMIN_STATUS_LOCKOUT ] ,
tvb , offset2 , 4 , status ) ;
proto_tree_add_boolean ( rsvp_admin_subtree ,
hf_rsvp_filter [ RSVPF_ADMIN_STATUS_INHIBIT ] ,
tvb , offset2 , 4 , status ) ;
proto_tree_add_boolean ( rsvp_admin_subtree ,
hf_rsvp_filter [ RSVPF_ADMIN_STATUS_CALL_MGMT ] ,
tvb , offset2 , 4 , status ) ;
proto_tree_add_boolean ( rsvp_admin_subtree ,
hf_rsvp_filter [ RSVPF_ADMIN_STATUS_TESTING ] ,
tvb , offset2 , 4 , status ) ;
proto_tree_add_boolean ( rsvp_admin_subtree ,
hf_rsvp_filter [ RSVPF_ADMIN_STATUS_DOWN ] ,
tvb , offset2 , 4 , status ) ;
proto_tree_add_boolean ( rsvp_admin_subtree ,
hf_rsvp_filter [ RSVPF_ADMIN_STATUS_DELETE ] ,
tvb , offset2 , 4 , status ) ;
proto_item_set_text ( ti , " ADMIN-STATUS: %s%s%s%s%s%s%s%s " ,
( status & ( 1 < < 31 ) ) ? " Reflect " : " " ,
( status & ( 1 < < 6 ) ) ? " Handover " : " " ,
( status & ( 1 < < 5 ) ) ? " Lockout " : " " ,
( status & ( 1 < < 4 ) ) ? " Inhibit " : " " ,
( status & ( 1 < < 3 ) ) ? " Call " : " " ,
( status & ( 1 < < 2 ) ) ? " Testing " : " " ,
( status & ( 1 < < 1 ) ) ? " Admin-Down " : " " ,
( status & ( 1 < < 0 ) ) ? " Deleting " : " " ) ;
break ;
2002-05-16 20:11:32 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_admin_status_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
2011-01-27 16:08:41 +00:00
/*------------------------------------------------------------------------------
* LSP ATTRIBUTES
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_lsp_attributes ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb , int offset , int obj_length ,
int rsvp_class _U_ , int type )
2011-01-27 16:08:41 +00:00
{
2012-06-11 16:33:56 +00:00
int tlv_off ;
guint32 attributes ;
guint16 tlv_type , tlv_len ;
2011-01-27 16:08:41 +00:00
proto_tree * ti2 , * rsvp_lsp_attr_subtree ;
2011-11-21 20:04:45 +00:00
if ( rsvp_class = = RSVP_CLASS_LSP_REQUIRED_ATTRIBUTES )
2011-01-31 17:09:58 +00:00
proto_item_set_text ( ti , " LSP REQUIRED ATTRIBUTES: " ) ;
2011-01-27 16:08:41 +00:00
else
2011-01-31 17:09:58 +00:00
proto_item_set_text ( ti , " LSP ATTRIBUTES: " ) ;
2011-01-27 16:08:41 +00:00
switch ( type ) {
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2011-01-27 16:08:41 +00:00
for ( tlv_off = 4 ; tlv_off < obj_length - 4 ; ) {
2011-01-31 17:09:58 +00:00
tlv_type = tvb_get_ntohs ( tvb , offset + tlv_off ) ;
tlv_len = tvb_get_ntohs ( tvb , offset + tlv_off + 2 ) ;
2011-01-27 16:08:41 +00:00
2013-08-08 17:53:11 +00:00
if ( ( tlv_len = = 0 ) | | ( tlv_off + tlv_len > obj_length ) ) {
2011-01-31 17:09:58 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset + tlv_off + 2 , 2 ,
" Invalid length " ) ;
return ;
}
switch ( tlv_type ) {
2011-01-27 16:08:41 +00:00
case 1 :
2011-01-31 17:09:58 +00:00
attributes = tvb_get_ntohl ( tvb , offset + tlv_off + 4 ) ;
2013-12-24 23:41:24 +00:00
ti2 = proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_attributes_tlv , tvb , offset + tlv_off , 4 , ENC_BIG_ENDIAN ) ;
2011-01-31 17:09:58 +00:00
rsvp_lsp_attr_subtree = proto_item_add_subtree ( ti2 , TREE ( TT_LSP_ATTRIBUTES_FLAGS ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_e2e ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_boundary ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_segment ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
2013-08-07 23:07:15 +00:00
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_integrity ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_contiguous ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_stitching ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_preplanned ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_nophp ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_oobmap ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_entropy ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_srlgcollect ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_costcollect ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_latcollect ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_attr_subtree , hf_rsvp_lsp_attr_latvarcollect ,
tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_item_append_text ( ti , " LSP Attribute:%s%s%s%s%s%s%s%s%s%s%s%s%s%s " ,
( attributes & 0x00000001 ) ? " End-to-end re-routing " : " " ,
( attributes & 0x00000002 ) ? " Boundary re-routing " : " " ,
( attributes & 0x00000004 ) ? " Segment-based re-routing " : " " ,
( attributes & 0x00000008 ) ? " LSP Integrity Required " : " " ,
( attributes & 0x00000010 ) ? " Contiguous LSP " : " " ,
( attributes & 0x00000020 ) ? " LSP stitching desired " : " " ,
( attributes & 0x00000040 ) ? " Pre-Planned LSP Flag " : " " ,
( attributes & 0x00000080 ) ? " Non-PHP behavior flag " : " " ,
( attributes & 0x00000100 ) ? " OOB mapping flag " : " " ,
( attributes & 0x00000200 ) ? " Entropy Label Capability " : " " ,
( attributes & 0x00000400 ) ? " SRLG Collection Flag " : " " ,
( attributes & 0x00000800 ) ? " Cost Collection Flag " : " " ,
( attributes & 0x00001000 ) ? " Latency Collection Flag " : " " ,
( attributes & 0x00002000 ) ? " Latency Variation Flag " : " " ) ;
2011-01-31 17:09:58 +00:00
break ;
2011-01-27 16:08:41 +00:00
2012-06-11 16:33:56 +00:00
default :
2011-01-31 17:09:58 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset + tlv_off , tlv_len ,
" Unknown TLV " ) ;
break ;
}
tlv_off + = tlv_len ;
2011-01-27 16:08:41 +00:00
}
2011-01-31 17:09:58 +00:00
break ;
2011-01-27 16:08:41 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_attributes_tlv_data , tvb , offset + 4 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2011-01-31 17:09:58 +00:00
}
2011-01-27 16:08:41 +00:00
}
2005-07-25 19:52:08 +00:00
/*------------------------------------------------------------------------------
* ASSOCIATION
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2013-12-24 23:41:24 +00:00
static const value_string association_type_vals [ ] = {
{ 0 , " Reserved " } ,
{ 1 , " Recovery " } ,
{ 2 , " Resource Sharing " } ,
{ 3 , " Segment Recovery " } ,
{ 4 , " Inter-domain Recovery " } ,
{ 0 , NULL }
} ;
2005-07-25 19:52:08 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_association ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2005-07-25 19:52:08 +00:00
{
guint16 association_type ;
guint16 association_id ;
2012-06-11 16:33:56 +00:00
2005-07-25 19:52:08 +00:00
proto_item_set_text ( ti , " ASSOCIATION " ) ;
association_type = tvb_get_ntohs ( tvb , offset + 4 ) ;
association_id = tvb_get_ntohs ( tvb , offset + 6 ) ;
switch ( type ) {
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 1 (IPv4) " ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " (IPv4): " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_type , tvb , offset + 4 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %s. " ,
2013-12-24 23:41:24 +00:00
val_to_str ( association_type , association_type_vals , " Unknown (%u) " ) ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_id , tvb , offset + 6 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " ID: %u. " , association_id ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_source_ipv4 , tvb , offset + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " Src: %s " , tvb_ip_to_str ( tvb , offset + 8 ) ) ;
break ;
2005-07-25 19:52:08 +00:00
case 2 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 2 (IPv6) " ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " (IPv6): " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_type , tvb , offset + 4 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %s. " ,
2013-12-24 23:41:24 +00:00
val_to_str ( association_type , association_type_vals , " Unknown (%u) " ) ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_id , tvb , offset + 6 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " ID: %u. " , association_id ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_source_ipv6 , tvb , offset + 8 , 16 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " Src: %s " , tvb_ip6_to_str ( tvb , offset + 8 ) ) ;
break ;
2005-07-25 19:52:08 +00:00
2011-01-27 16:08:41 +00:00
case 4 : /* oif2008.389 */
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 4 (Routing Area) " ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " (Routing Area): " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_type , tvb , offset + 4 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %s. " ,
2013-12-24 23:41:24 +00:00
val_to_str ( association_type , association_type_vals , " Unknown (%u) " ) ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_id , tvb , offset + 6 , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " Association ID: %u, " , association_id ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_routing_area_id , tvb , offset + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " Routing Area ID: %u, " , tvb_get_ntohl ( tvb , offset + 8 ) ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_node_id , tvb , offset + 12 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " Node ID: %s " , tvb_ip_to_str ( tvb , offset + 12 ) ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_padding , tvb , offset + 8 , 16 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2011-01-27 16:08:41 +00:00
2005-07-25 19:52:08 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_association_data , tvb , offset + 4 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2005-07-25 19:52:08 +00:00
}
}
2008-04-14 19:43:39 +00:00
/*------------------------------------------------------------------------------
* TLVs for LSP TUNNEL IF ID object
* draft - ietf - ccamp - lsp - hierarchy - bis - 02
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
dissect_rsvp_lsp_tunnel_if_id_tlv ( proto_tree * rsvp_object_tree ,
2012-06-11 16:33:56 +00:00
tvbuff_t * tvb , int offset , int tlv_length ,
int subtree_type )
2008-04-14 19:43:39 +00:00
{
int tlv_off ;
guint16 tlv_type ;
int tlv_len ;
proto_tree * ti , * rsvp_lsp_tunnel_if_id_subtree ;
for ( tlv_off = 0 ; tlv_off < tlv_length ; ) {
2012-06-11 16:33:56 +00:00
tlv_type = tvb_get_ntohs ( tvb , offset + tlv_off ) ;
tlv_len = tvb_get_ntohs ( tvb , offset + tlv_off + 2 ) ;
if ( ( tlv_len = = 0 ) | | ( ( tlv_off + tlv_len ) > tlv_length ) ) {
proto_tree_add_text ( rsvp_object_tree , tvb , offset + tlv_off + 2 , 2 ,
" Invalid length " ) ;
return ;
}
switch ( tlv_type ) {
case 1 :
ti = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" Unnumbered component link identifier: %u " ,
tvb_get_ntohl ( tvb , offset + tlv_off + 4 ) ) ;
rsvp_lsp_tunnel_if_id_subtree = proto_item_add_subtree ( ti , subtree_type ) ;
proto_tree_add_text ( rsvp_lsp_tunnel_if_id_subtree , tvb , offset + tlv_off , 2 ,
" Type: 1 (Unnumbered component link identifier) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_lsp_tunnel_if_id_subtree , hf_rsvp_lsp_tunnel_if_id_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_tunnel_if_id_subtree , hf_rsvp_lsp_tunnel_if_id_component_link_identifier , tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
break ;
case 2 :
ti = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" IPv4 component link identifier: %s " ,
tvb_ip_to_str ( tvb , offset + tlv_off + 4 ) ) ;
rsvp_lsp_tunnel_if_id_subtree = proto_item_add_subtree ( ti , subtree_type ) ;
proto_tree_add_text ( rsvp_lsp_tunnel_if_id_subtree , tvb , offset + tlv_off , 2 ,
" Type: 2 (IPv4 component link identifier) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_lsp_tunnel_if_id_subtree , hf_rsvp_lsp_tunnel_if_id_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_tunnel_if_id_subtree , hf_rsvp_lsp_tunnel_if_id_component_link_identifier_ipv4 , tvb , offset + tlv_off + 4 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
break ;
case 32769 : /* oif-p0040.002.09 demo spec */
ti = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset + tlv_off , tlv_len ,
" Targeted client layer: " ) ;
rsvp_lsp_tunnel_if_id_subtree = proto_item_add_subtree ( ti , subtree_type ) ;
proto_tree_add_text ( rsvp_lsp_tunnel_if_id_subtree , tvb , offset + tlv_off , 2 ,
" Type: 32769 (Targeted client layer) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_lsp_tunnel_if_id_subtree , hf_rsvp_lsp_tunnel_if_id_length , tvb , offset + tlv_off + 2 , 2 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_tunnel_if_id_subtree , hf_rsvp_lsp_tunnel_if_id_lsp_encoding_type , tvb , offset + tlv_off + 4 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_lsp_tunnel_if_id_subtree , hf_rsvp_lsp_tunnel_if_id_switching_type , tvb , offset + tlv_off + 5 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_lsp_tunnel_if_id_subtree , hf_rsvp_lsp_tunnel_if_id_signal_type , tvb , offset + tlv_off + 6 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_lsp_tunnel_if_id_subtree , hf_rsvp_lsp_tunnel_if_id_connection_id , tvb , offset + tlv_off + 8 , 8 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_tunnel_if_id_subtree , hf_rsvp_lsp_tunnel_if_id_sc_pc_id , tvb , offset + tlv_off + 16 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_lsp_tunnel_if_id_subtree , hf_rsvp_lsp_tunnel_if_id_sc_pc_scn_address , tvb , offset + tlv_off + 20 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " LSP Encoding=%s, Switching Type=%s, Signal Type=%s " ,
rval_to_str ( tvb_get_guint8 ( tvb , offset + tlv_off + 4 ) ,
gmpls_lsp_enc_rvals , " Unknown (%d) " ) ,
rval_to_str ( tvb_get_guint8 ( tvb , offset + tlv_off + 5 ) ,
gmpls_switching_type_rvals , " Unknown (%d) " ) ,
val_to_str_ext ( tvb_get_guint8 ( tvb , offset + tlv_off + 6 ) ,
& gmpls_sonet_signal_type_str_ext , " Unknown (%d) " ) ) ;
break ;
default :
proto_tree_add_text ( rsvp_object_tree , tvb , offset + tlv_off , 2 ,
" Unknown TLV: %u " , tlv_type ) ;
break ;
}
tlv_off + = tlv_len ;
2008-04-14 19:43:39 +00:00
}
}
2002-05-16 20:11:32 +00:00
/*------------------------------------------------------------------------------
* LSP TUNNEL INTERFACE ID
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2013-12-24 23:41:24 +00:00
static const value_string lsp_tunnel_if_id_action_str [ ] = {
{ 0 , " LSP is FA (MPLS-TE topology advertisement only) " } ,
{ 1 , " LSP is RA (IP network advertisement only) " } ,
{ 2 , " LSP is RA (both IP and MPLS-TE topology advertisement) " } ,
{ 3 , " LSP is to be used as a virtual local link " } ,
{ 0 , NULL }
} ;
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_lsp_tunnel_if_id ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-05-16 20:11:32 +00:00
{
proto_item_set_text ( ti , " LSP INTERFACE-ID: " ) ;
switch ( type ) {
2002-08-28 21:04:11 +00:00
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 1 - Unnumbered interface " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_router_id , tvb , offset + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_interface_id , tvb , offset + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " LSP INTERFACE-ID: Unnumbered, Router-ID %s, Interface-ID %d " ,
tvb_ip_to_str ( tvb , offset + 4 ) ,
tvb_get_ntohl ( tvb , offset + 8 ) ) ;
break ;
2008-04-14 19:43:39 +00:00
case 2 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 2 - IPv4 " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_ipv4_interface_address , tvb , offset + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_target_igp_instance , tvb , offset + 8 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " LSP INTERFACE-ID: IPv4, interface address %s, "
" IGP instance %s " ,
tvb_ip_to_str ( tvb , offset + 4 ) ,
tvb_ip_to_str ( tvb , offset + 8 ) ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_action , tvb , offset + 12 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
dissect_rsvp_lsp_tunnel_if_id_tlv ( rsvp_object_tree , tvb , offset + 16 , obj_length - 16 ,
TREE ( TT_LSP_TUNNEL_IF_ID_SUBTREE ) ) ;
break ;
2008-04-14 19:43:39 +00:00
case 3 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 3 - IPv6 " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_ipv6_interface_address , tvb , offset + 4 , 16 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_target_igp_instance , tvb , offset + 20 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " LSP INTERFACE-ID: IPv6, interface address %s, "
" IGP instance %s " ,
tvb_ip6_to_str ( tvb , offset + 4 ) ,
tvb_ip_to_str ( tvb , offset + 20 ) ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_action , tvb , offset + 24 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
dissect_rsvp_lsp_tunnel_if_id_tlv ( rsvp_object_tree , tvb , offset + 28 , obj_length - 28 ,
TREE ( TT_LSP_TUNNEL_IF_ID_SUBTREE ) ) ;
break ;
2008-04-14 19:43:39 +00:00
case 4 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 4 - Unnumbered interface with target " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_router_id , tvb , offset + 4 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_interface_id , tvb , offset + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_target_igp_instance , tvb , offset + 12 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " LSP INTERFACE-ID: Unnumbered with target, Router-ID %s, "
" Interface-ID %d, IGP instance %s " ,
tvb_ip_to_str ( tvb , offset + 4 ) ,
tvb_get_ntohl ( tvb , offset + 8 ) ,
tvb_ip_to_str ( tvb , offset + 12 ) ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_action , tvb , offset + 16 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
dissect_rsvp_lsp_tunnel_if_id_tlv ( rsvp_object_tree , tvb , offset + 20 , obj_length - 20 ,
TREE ( TT_LSP_TUNNEL_IF_ID_SUBTREE ) ) ;
break ;
2008-04-14 19:43:39 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_lsp_tunnel_if_id_data , tvb , offset + 4 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2008-04-14 19:43:39 +00:00
}
}
/*------------------------------------------------------------------------------
* NOTIFY REQUEST
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_notify_request ( proto_item * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2008-04-14 19:43:39 +00:00
{
int offset2 = offset + 4 ;
switch ( type ) {
case 1 : {
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 1 - IPv4 " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_notify_request_notify_node_address_ipv4 , tvb , offset2 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " : Notify node: %s " ,
tvb_ip_to_str ( tvb , offset2 ) ) ;
break ;
2008-04-14 19:43:39 +00:00
}
case 2 : {
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " 2 - IPv6 " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_notify_request_notify_node_address_ipv6 , tvb , offset2 , 16 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " : Notify node: %s " ,
tvb_ip6_to_str ( tvb , offset2 ) ) ;
break ;
2008-04-14 19:43:39 +00:00
}
2002-05-16 20:11:32 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_notify_request_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-05-16 20:11:32 +00:00
}
}
/*------------------------------------------------------------------------------
* GENERALIZED UNI
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_gen_uni ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type ,
rsvp_conversation_info * rsvph )
2002-05-16 20:11:32 +00:00
{
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
int mylen , i , j , k , l , m ;
2005-08-08 07:27:14 +00:00
proto_item * ti2 ;
proto_tree * rsvp_gen_uni_subtree , * rsvp_session_subtree , * rsvp_template_subtree ;
2012-06-11 16:33:56 +00:00
int s_len , s_class , s_type , sobj_len , nsap_len ;
int offset3 ;
2002-05-16 20:11:32 +00:00
proto_item_set_text ( ti , " GENERALIZED UNI: " ) ;
mylen = obj_length - 4 ;
switch ( type ) {
case 1 : {
2012-06-11 16:33:56 +00:00
const char * c ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2012-06-11 16:33:56 +00:00
for ( i = 1 , l = 0 ; l < mylen ; i + + ) {
sobj_len = tvb_get_ntohs ( tvb , offset2 + l ) ;
j = tvb_get_guint8 ( tvb , offset2 + l + 2 ) ;
switch ( j ) {
case 1 :
case 2 : /* We do source and destination TNA together */
c = ( j = = 1 ) ? " Source " : " Destination " ;
k = tvb_get_guint8 ( tvb , offset2 + l + 3 ) ;
switch ( k ) {
case 1 :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 + l , 8 ,
" %s IPv4 TNA: %s " , c ,
tvb_ip_to_str ( tvb , offset2 + l + 4 ) ) ;
rsvp_gen_uni_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_GEN_UNI_SUBOBJ ) ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 2 , 1 ,
" Class: %d (%s) " , j , c ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 3 , 1 ,
" Type: 1 (IPv4) " ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l , 2 ,
" Length: %u " , sobj_len ) ;
if ( j = = 1 )
proto_tree_add_item ( rsvp_gen_uni_subtree , hf_rsvp_filter [ RSVPF_GUNI_SRC_IPV4 ] ,
tvb , offset2 + l + 4 , 4 , ENC_BIG_ENDIAN ) ;
else
proto_tree_add_item ( rsvp_gen_uni_subtree , hf_rsvp_filter [ RSVPF_GUNI_DST_IPV4 ] ,
tvb , offset2 + l + 4 , 4 , ENC_BIG_ENDIAN ) ;
if ( i < 4 ) {
proto_item_append_text ( ti , " %s IPv4 TNA: %s " , c ,
tvb_ip_to_str ( tvb , offset2 + l + 4 ) ) ;
}
break ;
case 2 :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 + l , 20 ,
" %s IPv6 TNA: " , c ) ;
rsvp_gen_uni_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_GEN_UNI_SUBOBJ ) ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 2 , 1 ,
" Class: %d (%s) " , j , c ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 3 , 1 ,
" Type: 2 (IPv6) " ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l , 2 ,
" Length: %u " , sobj_len ) ;
if ( j = = 1 )
proto_tree_add_item ( rsvp_gen_uni_subtree , hf_rsvp_filter [ RSVPF_GUNI_SRC_IPV6 ] ,
tvb , offset2 + l + 4 , 16 , ENC_NA ) ;
else
proto_tree_add_item ( rsvp_gen_uni_subtree , hf_rsvp_filter [ RSVPF_GUNI_DST_IPV6 ] ,
tvb , offset2 + l + 4 , 16 , ENC_NA ) ;
if ( i < 4 ) {
proto_item_append_text ( ti , " %s IPv6 TNA: %s " , c ,
tvb_ip6_to_str ( tvb , offset2 + l + 4 ) ) ;
}
break ;
case 3 :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 + l , tvb_get_ntohs ( tvb , offset2 + l ) ,
" %s NSAP TNA: " , c ) ;
rsvp_gen_uni_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_GEN_UNI_SUBOBJ ) ) ;
nsap_len = tvb_get_guint8 ( tvb , offset2 + l + 4 ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 2 , 1 ,
" Class: %d (%s) " , j , c ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 3 , 1 ,
" Type: 3 (NSAP) " ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l , 2 ,
" Length: %u " , sobj_len ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 4 , 1 ,
" NSAP Length: %u " , nsap_len ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 5 ,
sobj_len - 4 ,
" NSAP address: %s " ,
print_nsap_net ( tvb_get_ptr ( tvb , offset2 + l + 5 , nsap_len ) , nsap_len ) ) ;
if ( i < 4 ) {
proto_item_append_text ( ti , " %s NSAP TNA: %s " , c ,
print_nsap_net ( tvb_get_ptr ( tvb , offset2 + l + 5 , nsap_len ) , nsap_len ) ) ;
}
break ;
default :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 + l , tvb_get_ntohs ( tvb , offset2 + l ) ,
" %s UNKNOWN TNA " , c ) ;
rsvp_gen_uni_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_GEN_UNI_SUBOBJ ) ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 2 , 1 ,
" Class: %d (%s) " , j , c ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 3 , 1 ,
" Type: %d (UNKNOWN) " , j ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l , 2 ,
" Length: %u " , sobj_len ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 4 ,
sobj_len - 4 ,
" Data " ) ;
if ( i < 4 ) {
proto_item_append_text ( ti , " %s UNKNOWN " , c ) ;
}
break ;
}
break ;
case 3 : /* Diversity subobject */
k = tvb_get_guint8 ( tvb , offset2 + l + 3 ) ;
switch ( k ) {
default :
case 1 :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 + l , tvb_get_ntohs ( tvb , offset2 + l ) ,
" Diversity Subobject " ) ;
rsvp_gen_uni_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_GEN_UNI_SUBOBJ ) ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 2 , 1 ,
" Class: %d (Diversity) " , j ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 3 , 1 ,
" Type: %d " , tvb_get_guint8 ( tvb , offset2 + l + 3 ) ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l , 2 ,
" Length: %u " , sobj_len ) ;
m = tvb_get_guint8 ( tvb , offset2 + l + 4 ) > > 4 ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 4 , 1 ,
" Diversity: %d - %s " , m ,
val_to_str_const ( m , ouni_guni_diversity_str , " Unknown " ) ) ;
s_len = tvb_get_ntohs ( tvb , offset2 + l + 8 ) ;
s_class = tvb_get_guint8 ( tvb , offset2 + l + 10 ) ;
s_type = tvb_get_guint8 ( tvb , offset2 + l + 11 ) ;
ti2 = proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 8 ,
s_len , " Session " ) ;
rsvp_session_subtree =
proto_item_add_subtree ( ti2 , TREE ( rsvp_class_to_tree_type ( s_class ) ) ) ;
if ( s_len < 4 ) {
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + l + 8 , 2 ,
" Length: %u (bogus, must be >= 4) " , s_len ) ;
break ;
}
proto_tree_add_text ( rsvp_session_subtree , tvb , offset2 + l + 8 , 2 ,
" Length: %u " , s_len ) ;
proto_tree_add_uint ( rsvp_session_subtree , hf_rsvp_filter [ RSVPF_OBJECT ] , tvb ,
offset2 + 8 + l + 10 , 1 , s_class ) ;
dissect_rsvp_session ( ti2 , rsvp_session_subtree , tvb , offset2 + l + 8 ,
s_len , s_class , s_type , rsvph ) ;
offset3 = offset2 + s_len ;
s_len = tvb_get_ntohs ( tvb , offset3 + l + 8 ) ;
s_class = tvb_get_guint8 ( tvb , offset3 + l + 10 ) ;
s_type = tvb_get_guint8 ( tvb , offset3 + l + 11 ) ;
ti2 = proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset3 + l + 8 ,
s_len , " Template " ) ;
rsvp_template_subtree =
proto_item_add_subtree ( ti2 , TREE ( rsvp_class_to_tree_type ( s_class ) ) ) ;
if ( s_len < 4 ) {
proto_tree_add_text ( rsvp_object_tree , tvb , offset3 + l + 8 , 2 ,
" Length: %u (bogus, must be >= 4) " , s_len ) ;
break ;
}
proto_tree_add_text ( rsvp_template_subtree , tvb , offset3 + l + 8 , 2 ,
" Length: %u " , s_len ) ;
proto_tree_add_uint ( rsvp_template_subtree , hf_rsvp_filter [ RSVPF_OBJECT ] , tvb ,
offset3 + 8 + l + 10 , 1 , s_class ) ;
dissect_rsvp_template_filter ( ti2 , rsvp_template_subtree , tvb , offset3 + l + 8 ,
s_len , s_class , s_type , rsvph ) ;
if ( i < 4 ) {
proto_item_append_text ( ti , " Diversity " ) ;
}
break ;
}
break ;
case 4 : /* Egress Label */
k = tvb_get_guint8 ( tvb , offset2 + l + 3 ) ;
if ( k = = 1 ) /* Egress label sub-type */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 + l , sobj_len ,
" Egress Label Subobject " ) ;
else if ( k = = 2 ) /* SPC_label sub-type (see G.7713.2) */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 + l , sobj_len ,
" SPC Label Subobject " ) ;
else
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 + l , sobj_len ,
" Unknown Label Subobject " ) ;
rsvp_gen_uni_subtree = proto_item_add_subtree ( ti2 , TREE ( TT_GEN_UNI_SUBOBJ ) ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 2 , 1 ,
" Class: %d (Egress/SPC Label) " , j ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 3 , 1 ,
" Type: %d " , k ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l , 2 ,
" Length: %u " , sobj_len ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_gen_uni_subtree , hf_rsvp_gen_uni_direction ,
tvb , offset + l + 2 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 7 , 1 ,
" Label type: %u " , tvb_get_guint8 ( tvb , offset2 + l + 7 ) ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 8 , 4 ,
" Logical Port ID: %u " , tvb_get_ntohl ( tvb , offset2 + l + 8 ) ) ;
proto_item_append_text ( ti2 , " : %s, Label type %d, Port ID %d, Label " ,
tvb_get_guint8 ( tvb , offset2 + l + 4 ) & 0x80 ?
" Upstream " : " Downstream " ,
tvb_get_guint8 ( tvb , offset2 + l + 7 ) ,
tvb_get_ntohl ( tvb , offset2 + l + 8 ) ) ;
for ( j = 12 ; j < sobj_len ; j + = 4 ) {
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + j , 4 ,
" Label: %u " , tvb_get_ntohl ( tvb , offset2 + l + j ) ) ;
proto_item_append_text ( ti2 , " %u " , tvb_get_ntohl ( tvb , offset2 + l + j ) ) ;
}
if ( i < 4 ) {
if ( k = = 1 )
proto_item_append_text ( ti , " Egress Label " ) ;
2004-07-21 05:57:30 +00:00
else if ( k = = 2 )
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " SPC Label " ) ;
}
break ;
case 5 : /* Service Level */
k = tvb_get_guint8 ( tvb , offset2 + l + 3 ) ;
switch ( k ) {
default :
case 1 :
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 + l , sobj_len ,
" Service Level Subobject " ) ;
rsvp_gen_uni_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_GEN_UNI_SUBOBJ ) ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 2 , 1 ,
" Class: %d (Service Level) " , j ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 3 , 1 ,
" Type: %d " , tvb_get_guint8 ( tvb , offset2 + l + 3 ) ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l , 2 ,
" Length: %u " , sobj_len ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 4 , 1 ,
" Service Level: %u " , tvb_get_guint8 ( tvb , offset2 + l + 4 ) ) ;
proto_item_append_text ( ti2 , " : %u " , tvb_get_guint8 ( tvb , offset2 + l + 4 ) ) ;
if ( i < 4 ) {
proto_item_append_text ( ti , " Service Level %d " , tvb_get_guint8 ( tvb , offset2 + l + 4 ) ) ;
}
break ;
}
break ;
default : /* Unknown subobject */
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb ,
offset2 + l , sobj_len ,
" Unknown subobject: %u " ,
j ) ;
rsvp_gen_uni_subtree =
proto_item_add_subtree ( ti2 , TREE ( TT_GEN_UNI_SUBOBJ ) ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l , 1 ,
" Type: %u (Unknown) " , j ) ;
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 1 , 1 ,
" Length: %u " ,
tvb_get_guint8 ( tvb , offset2 + l + 1 ) ) ;
break ;
}
if ( tvb_get_guint8 ( tvb , offset2 + l + 1 ) < 1 ) {
proto_tree_add_text ( rsvp_gen_uni_subtree , tvb , offset2 + l + 1 , 1 ,
" Invalid length: %u " , tvb_get_guint8 ( tvb , offset2 + l + 1 ) ) ;
return ;
}
l + = tvb_get_guint8 ( tvb , offset2 + l + 1 ) ;
if ( l < mylen ) {
if ( i < 4 )
proto_item_append_text ( ti , " , " ) ;
else if ( i = = 4 )
proto_item_append_text ( ti , " ... " ) ;
}
}
break ;
2002-05-16 20:11:32 +00:00
}
2002-08-28 21:04:11 +00:00
2002-05-16 20:11:32 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , mylen ,
" Data (%d bytes) " , mylen ) ;
break ;
2002-05-16 20:11:32 +00:00
}
}
2004-07-21 05:57:30 +00:00
/*------------------------------------------------------------------------------
* CALL_ID
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2013-12-24 23:41:24 +00:00
static const value_string address_type_vals [ ] = {
{ 1 , " 1 (IPv4) " } ,
{ 2 , " 2 (IPv6) " } ,
{ 3 , " 3 (NSAP) " } ,
{ 4 , " 4 (MAC) " } ,
{ 0x7f , " 0x7f (Vendor-defined) " } ,
{ 0 , NULL }
} ;
2004-07-21 05:57:30 +00:00
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_call_id ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int c_type )
2004-07-21 05:57:30 +00:00
{
2012-06-11 16:33:56 +00:00
int type = 0 ;
2011-01-27 16:08:41 +00:00
const char * str ;
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
int offset3 , offset4 , len ;
2004-07-21 05:57:30 +00:00
2005-03-28 19:32:39 +00:00
proto_item_set_text ( ti , " CALL-ID: " ) ;
2004-07-21 05:57:30 +00:00
switch ( c_type ) {
2005-07-25 19:52:08 +00:00
case 0 :
2009-01-27 21:46:58 +00:00
proto_item_append_text ( ti , " Empty " ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
c_type , " Empty (%u) " , c_type ) ;
2011-01-27 16:08:41 +00:00
if ( obj_length > 4 )
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_call_id_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2009-01-27 21:46:58 +00:00
break ;
2004-07-21 05:57:30 +00:00
case 1 :
case 2 :
2012-06-11 16:33:56 +00:00
type = tvb_get_guint8 ( tvb , offset2 ) ;
if ( c_type = = 1 ) {
2009-01-27 21:46:58 +00:00
offset3 = offset2 + 4 ;
len = obj_length - 16 ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
c_type , " 1 (operator specific) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_call_id_address_type , tvb , offset2 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_call_id_reserved , tvb , offset2 + 1 , 3 , ENC_BIG_ENDIAN ) ;
2009-01-27 21:46:58 +00:00
proto_item_append_text ( ti , " Operator-Specific. Addr Type: %s. " ,
2013-12-24 23:41:24 +00:00
val_to_str ( type , address_type_vals , " Unknown (%u) " ) ) ;
2012-06-11 16:33:56 +00:00
}
else {
2009-01-27 21:46:58 +00:00
offset3 = offset2 + 16 ;
len = obj_length - 28 ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
c_type , " 2 (globally unique) " ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_call_id_address_type , tvb , offset2 , 1 , ENC_NA ) ;
2013-09-22 15:50:55 +00:00
str = tvb_get_string ( wmem_packet_scope ( ) , tvb , offset2 + 1 , 3 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_call_id_international_segment , tvb , offset2 + 1 , 3 , ENC_NA | ENC_ASCII ) ;
2009-01-27 21:46:58 +00:00
proto_item_append_text ( ti , " Globally-Unique. Addr Type: %s. Intl Segment: %s. " ,
2013-12-24 23:41:24 +00:00
val_to_str ( type , address_type_vals , " Unknown (%u) " ) , str ) ;
2013-09-22 15:50:55 +00:00
str = tvb_get_string ( wmem_packet_scope ( ) , tvb , offset2 + 4 , 12 ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_call_id_national_segment , tvb , offset2 + 4 , 12 , ENC_NA | ENC_ASCII ) ;
2009-01-27 21:46:58 +00:00
proto_item_append_text ( ti , " Natl Segment: %s. " , str ) ;
2012-06-11 16:33:56 +00:00
}
2004-07-21 05:57:30 +00:00
2012-06-11 16:33:56 +00:00
switch ( type ) {
case 1 :
2009-01-27 21:46:58 +00:00
offset4 = offset3 + 4 ;
2011-01-27 16:08:41 +00:00
str = tvb_ip_to_str ( tvb , offset3 ) ;
2009-10-27 06:05:02 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_filter [ RSVPF_CALL_ID_SRC_ADDR_IPV4 ] ,
2011-10-19 15:04:44 +00:00
tvb , offset3 , 4 , ENC_BIG_ENDIAN ) ;
2009-01-27 21:46:58 +00:00
break ;
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
case 2 :
2009-01-27 21:46:58 +00:00
offset4 = offset3 + 16 ;
2011-01-27 16:08:41 +00:00
str = tvb_ip6_to_str ( tvb , offset3 ) ;
2009-10-27 06:05:02 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_filter [ RSVPF_CALL_ID_SRC_ADDR_IPV6 ] ,
2011-10-19 15:04:44 +00:00
tvb , offset3 , 16 , ENC_NA ) ;
2009-01-27 21:46:58 +00:00
break ;
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
case 3 :
2009-01-27 21:46:58 +00:00
offset4 = offset3 + 20 ;
2011-01-27 16:08:41 +00:00
str = print_nsap_net ( tvb_get_ptr ( tvb , offset3 , 20 ) , 20 ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset3 , 20 ,
" Source Transport Network addr: %s " , str ) ;
2009-01-27 21:46:58 +00:00
break ;
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
case 4 :
2009-01-27 21:46:58 +00:00
offset4 = offset3 + 6 ;
2011-02-10 22:14:05 +00:00
str = tvb_ether_to_str ( tvb , offset3 ) ;
2011-01-27 16:08:41 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset3 , 6 ,
" Source Transport Network addr: %s " , str ) ;
2009-01-27 21:46:58 +00:00
break ;
2007-11-16 23:56:18 +00:00
2012-06-11 16:33:56 +00:00
case 0x7F :
2009-01-27 21:46:58 +00:00
offset4 = offset3 + len ;
2013-12-19 15:49:09 +00:00
str = tvb_bytes_to_ep_str ( tvb , offset3 , len ) ;
2011-01-27 16:08:41 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset3 , len ,
" Source Transport Network addr: %s " , str ) ;
2009-01-27 21:46:58 +00:00
break ;
2004-07-21 05:57:30 +00:00
2012-06-11 16:33:56 +00:00
default :
2009-01-27 21:46:58 +00:00
offset4 = offset3 + len ;
2011-01-27 16:08:41 +00:00
str = " ??? " ;
2009-01-27 21:46:58 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset3 , len , " Unknown Transport Network type: %d " ,
type ) ;
2012-06-11 16:33:56 +00:00
break ;
}
2004-07-21 05:57:30 +00:00
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " Src: %s. " , str ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_call_id_local_identifier , tvb , offset4 , 8 , ENC_NA ) ;
2013-12-19 15:49:09 +00:00
proto_item_append_text ( ti , " Local ID: %s. " , tvb_bytes_to_ep_str ( tvb , offset4 , 8 ) ) ;
2012-06-11 16:33:56 +00:00
break ;
2004-07-21 05:57:30 +00:00
default :
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " Unknown " ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
c_type , " Unknown (%u) " , c_type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_call_id_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2004-07-21 05:57:30 +00:00
}
}
2013-03-31 22:08:00 +00:00
/*------------------------------------------------------------------------------
2013-04-03 16:50:35 +00:00
* 3 GPP2_OBJECT X . S0057 - 0 v1 .0 , X . S0011 - 004 - E v1 .0
2013-03-31 22:08:00 +00:00
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static const value_string rsvp_3gpp_object_ie_type_vals [ ] = {
2013-04-02 05:54:47 +00:00
{ 0 , " TFT IPv4 " } ,
2013-04-03 16:50:35 +00:00
{ 1 , " TFT IPv4 Error " } ,
2013-04-02 05:54:47 +00:00
{ 2 , " TFT IPv6 " } ,
2013-04-03 16:50:35 +00:00
{ 3 , " TFT IPv6 Error " } ,
{ 4 , " Header Removal " } ,
{ 5 , " Header Removal Error " } ,
{ 6 , " Channel Treatment " } ,
{ 7 , " Channel Treatment Error " } ,
2013-04-02 05:54:47 +00:00
{ 0 , NULL }
} ;
static const value_string rsvp_3gpp_object_tft_d_vals [ ] = {
{ 0 , " Forward Direction " } ,
{ 1 , " Reverse Direction " } ,
{ 2 , " Reserved " } ,
{ 3 , " Reserved " } ,
{ 0 , NULL }
} ;
static const value_string rsvp_3gpp_obj_tft_opcode_vals [ ] = {
2013-04-03 16:50:35 +00:00
{ 0x00 , " Spare " } ,
{ 0x01 , " Create new TFT " } ,
{ 0x02 , " Delete existing TFT " } ,
{ 0x03 , " Add packet filters to existing TFT " } ,
{ 0x04 , " Replace packet filters in existing TFT " } ,
{ 0x05 , " Delete packet filters from existing TFT " } ,
2013-04-02 05:54:47 +00:00
{ 0x06 , " QoS Check " } ,
2013-04-03 16:50:35 +00:00
{ 0x07 , " Reserved " } ,
2013-04-02 05:54:47 +00:00
{ 0x80 , " Initiate Flow Request " } ,
{ 0x81 , " QoS Check Confirm " } ,
{ 0x82 , " Initiate Delete Packet Filter from Existing TFT " } ,
{ 0x83 , " Initiate Replace packet filters in existing TFT " } ,
2013-03-31 22:08:00 +00:00
{ 0 , NULL }
} ;
2013-04-03 16:50:35 +00:00
static const value_string rsvp_3gpp_obj_pf_comp_type_id_vals [ ] = {
{ 16 , " IPv4 Source Address with Subnet Mask " } ,
{ 17 , " IPv4 Destination Address with Subnet Mask " } ,
{ 32 , " IPv6 Source Address with Prefix Length " } ,
{ 33 , " IPv6 Destination Address with Prefix Length " } ,
{ 48 , " Protocol /Next header " } ,
{ 64 , " Single Destination Port " } ,
{ 65 , " Destination Port range " } ,
{ 80 , " Single Source Port " } ,
{ 81 , " Source Port range " } ,
{ 96 , " Security Parameter Index " } ,
{ 112 , " Type of Service/Traffic Class " } ,
{ 128 , " Flow label " } ,
{ 129 , " Type 2 Routing Header with Prefix Length " } ,
{ 130 , " Home Address Option with Prefix Length " } ,
{ 0 , NULL }
} ;
2013-04-04 16:23:55 +00:00
static const value_string rsvp_3gpp_obj_pf_treatment_vals [ ] = {
{ 0 , " Header Compression " } ,
{ 1 , " Maximum Buffer Timer " } ,
{ 0 , NULL }
} ;
2013-10-23 06:29:11 +00:00
#if 0
2013-04-04 16:23:55 +00:00
static const value_string rsvp_3gpp_qos_result_vals [ ] = {
{ 0 , " Successful " } ,
{ 1 , " UE Initiated QoS is not authorized " } ,
{ 2 , " NW initiated QoS in progress for this flow " } ,
{ 3 , " Requested FlowProfileIDs failed mapping " } ,
{ 0 , NULL }
} ;
2013-10-23 06:29:11 +00:00
# endif
2013-04-04 16:23:55 +00:00
2013-04-19 16:06:01 +00:00
static const value_string rsvp_3gpp_obj_traffic_class_vals [ ] = {
{ 0 , " Unknown " } ,
{ 1 , " Conversational " } ,
{ 2 , " Streaming " } ,
{ 3 , " Interactive " } ,
{ 4 , " Backgroud " } ,
{ 0 , NULL }
} ;
2013-03-31 22:08:00 +00:00
static void
2013-04-19 16:06:01 +00:00
dissect_rsvp_3gpp_object ( proto_tree * ti _U_ , proto_tree * rsvp_object_tree ,
2013-04-04 16:23:55 +00:00
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int c_type )
2013-03-31 22:08:00 +00:00
{
2013-04-02 05:54:47 +00:00
guint16 length , ie_type ;
2013-03-31 22:08:00 +00:00
offset + = 3 ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_c_type , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* Set obj_length to the remaining bytes */
obj_length = obj_length - 4 ;
if ( c_type = = 1 ) {
/* Transaction ID */
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_tid , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
obj_length = obj_length - 4 ;
/* IE List */
while ( obj_length > 0 ) {
2013-04-02 05:54:47 +00:00
length = tvb_get_ntohs ( tvb , offset ) ;
2013-03-31 22:08:00 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_ie_len , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
2013-04-04 16:23:55 +00:00
ie_type = tvb_get_ntohs ( tvb , offset ) ;
2013-03-31 22:08:00 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_ie_type , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
2013-04-03 17:50:13 +00:00
2013-04-04 16:23:55 +00:00
if ( ( ie_type = = 0 ) | | ( ie_type = = 2 ) ) {
guint8 tft_opcode , tft_n_pkt_flt ;
int i ;
if ( ie_type = = 0 ) {
/*IPv4*/
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_ue_ipv4_addr , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
} else {
2014-01-26 12:55:59 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_ue_ipv6_addr , tvb , offset , 16 , ENC_NA ) ;
2013-04-04 16:23:55 +00:00
offset + = 16 ;
}
/* D Reserved NS SR_ID Reserved P TFT Operation Code Number of Packet filters */
/* D */
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_tft_d , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
/* NS */
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_tft_ns , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
/* SR_ID */
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_tft_sr_id , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
/* P */
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_tft_p , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
/* TFT Operation Code */
tft_opcode = tvb_get_guint8 ( tvb , offset + 2 ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_tft_opcode , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
/* Number of Packet filters */
tft_n_pkt_flt = tvb_get_guint8 ( tvb , offset + 3 ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_tft_n_pkt_flt , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
/* Packet filter list
* The packet filter list contains a variable number of packet filters . It shall be
* encoded same as defined in X . S0011 - D Chapter 4 [ 5 ] except as defined
* below :
* For " QoS Check Confirm " operations , the packet filter list shall be empty .
* For " Initiate Delete Packet Filter from Existing TFT " , the packet filter list
* shall contain a variable number of Flow Identifiers given in the number of
* packet filters field . In this case , the packet filter evaluation precedence ,
* length , and contents are not included , only the Flow Identifiers are
* included . See Figure B - 6 , X . S0011 - D [ 5 ] .
* For " Initiate Flow request " and " Initiate Replace Packet Filters in Existing
* TFT " Replace Packet Filters in Existing TFT the packet filter list shall
* contain a variable number of Flow Identifiers , along with the packet filter
* contents . See Figure B - 7 , X . S0011 - D
*/
if ( ( tft_opcode ! = 0x81 ) & & ( tft_n_pkt_flt ! = 0 ) ) {
/* Packet Filter List */
for ( i = 0 ; i < tft_n_pkt_flt ; i + + ) {
proto_tree * flow_tree , * t2_tree ;
guint16 pkt_flt_len , item_len , pf_cont_len ;
guint8 pf_comp_type_id ;
ti = proto_tree_add_text ( rsvp_object_tree , tvb , offset , - 1 , " Flow Identifier Num %u " , i + 1 ) ;
flow_tree = proto_item_add_subtree ( ti , ett_treelist [ TT_3GPP_OBJ_FLOW ] ) ;
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_flow_id , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
item_len = 1 ;
if ( ( tft_opcode = = 0x05 ) | | ( tft_opcode = = 0x82 ) ) {
/* delete packet filters from existing TFT, Initiate Delete Packet Filter from Existing TFT */
proto_item_set_len ( ti , item_len ) ;
continue ;
}
/* Packet filter evaluation precedence */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_ev_prec , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* Packet filter length */
pkt_flt_len = tvb_get_ntohs ( tvb , offset ) ;
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_len , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
item_len = item_len + pkt_flt_len + 1 ;
offset + = 2 ;
/* Packet filter contents */
/* PF Type (0-1) */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_type , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* Length */
pf_cont_len = tvb_get_guint8 ( tvb , offset ) ;
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_cont_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* Packet filter component type identifier */
pf_comp_type_id = tvb_get_guint8 ( tvb , offset ) ;
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_comp_type_id , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* Packet filter component */
switch ( pf_comp_type_id ) {
case 16 : /* IPv4 Source Address with Subnet Mask */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_src_ipv4 , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_ipv4_mask , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
pf_cont_len - = 11 ;
break ;
case 17 : /* IPv4 Destination Address with Subnet Mask */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_dst_ipv4 , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_ipv4_mask , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
/* Items length (8 + 3)*/
pf_cont_len - = 11 ;
break ;
case 32 : /* IPv6 Source Address with Prefix Length */
2014-01-26 12:55:59 +00:00
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_src_ipv6 , tvb , offset , 16 , ENC_NA ) ;
2013-04-04 16:23:55 +00:00
offset + = 16 ;
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_ipv6_prefix_length , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* Items length (17 + 3)*/
pf_cont_len - = 20 ;
break ;
case 33 : /* IPv6 Destination Address with Prefix Length */
2014-01-26 12:55:59 +00:00
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_dst_ipv6 , tvb , offset , 16 , ENC_NA ) ;
2013-04-04 16:23:55 +00:00
offset + = 16 ;
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_ipv6_prefix_length , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* Items length (17 + 3)*/
pf_cont_len - = 20 ;
break ;
case 48 : /* Protocol /Next header */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_prot_next , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* Items length (1 + 3)*/
pf_cont_len - = 4 ;
break ;
case 64 : /* Single Destination Port */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_dst_port , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
/* Items length (2 + 3)*/
pf_cont_len - = 5 ;
break ;
case 65 : /* Destination Port range */
proto_tree_add_text ( rsvp_object_tree , tvb , offset , 4 , " Destination Port range %u-%u " ,
tvb_get_ntohs ( tvb , offset ) , tvb_get_ntohs ( tvb , offset + 2 ) ) ;
offset + = 4 ;
break ;
case 80 : /* Single Source Port */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_dst_port , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
/* Items length (2 + 3)*/
pf_cont_len - = 5 ;
break ;
case 81 : /* Source Port range */
proto_tree_add_text ( rsvp_object_tree , tvb , offset , 4 , " Source Port range %u-%u " ,
tvb_get_ntohs ( tvb , offset ) , tvb_get_ntohs ( tvb , offset + 2 ) ) ;
offset + = 4 ;
/* Items length (4 + 3)*/
pf_cont_len - = 7 ;
break ;
case 96 : /* Security Parameter Index */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_ipsec_spi , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
offset + = 4 ;
/* Items length (4 + 3)*/
pf_cont_len - = 7 ;
break ;
case 112 : /* Type of Service/Traffic Class */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_tos_tc , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* Items length (1 + 3)*/
pf_cont_len - = 4 ;
break ;
case 128 : /* Flow label */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_flow_lbl , tvb , offset , 3 , ENC_BIG_ENDIAN ) ;
offset + = 3 ;
/* Items length (3 + 3)*/
pf_cont_len - = 6 ;
break ;
case 129 : /* Type 2 Routing Header with Prefix Length */
ti = proto_tree_add_text ( flow_tree , tvb , offset , 17 , " Type 2 Routing Header packet filter " ) ;
t2_tree = proto_item_add_subtree ( ti , ett_treelist [ TT_3GPP_OBJ_T2 ] ) ;
2014-01-26 12:55:59 +00:00
proto_tree_add_item ( t2_tree , hf_rsvp_3gpp_obj_pf_ipv6 , tvb , offset , 16 , ENC_NA ) ;
2013-04-04 16:23:55 +00:00
offset + = 16 ;
proto_tree_add_item ( t2_tree , hf_rsvp_3gpp_obj_pf_ipv6_prefix_length , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* Items length (17 + 3)*/
pf_cont_len - = 20 ;
break ;
case 130 : /* Home Address Option with Prefix Length */
ti = proto_tree_add_text ( flow_tree , tvb , offset , 17 , " Home address Option packet filter " ) ;
t2_tree = proto_item_add_subtree ( ti , ett_treelist [ TT_3GPP_OBJ_HO ] ) ;
2014-01-26 12:55:59 +00:00
proto_tree_add_item ( t2_tree , hf_rsvp_3gpp_obj_pf_ipv6 , tvb , offset , 16 , ENC_NA ) ;
2013-04-04 16:23:55 +00:00
offset + = 16 ;
proto_tree_add_item ( t2_tree , hf_rsvp_3gpp_obj_pf_ipv6_prefix_length , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* Items length (17 + 3)*/
pf_cont_len - = 20 ;
2013-09-09 13:07:08 +00:00
break ;
2013-04-04 16:23:55 +00:00
default :
proto_tree_add_text ( flow_tree , tvb , offset , pf_cont_len - 2 , " Not dissected Packet filter component " ) ;
offset = offset + pkt_flt_len - 5 ;
pf_cont_len = 0 ;
break ;
}
if ( pf_cont_len ! = 0 ) {
/* Packet filter treatment */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_treatment , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
/* [RFC 3006] hint */
proto_tree_add_item ( flow_tree , hf_rsvp_3gpp_obj_pf_hint , tvb , offset , 4 , ENC_BIG_ENDIAN ) ;
2013-12-14 11:12:20 +00:00
offset + = 4 ;
2013-04-04 16:23:55 +00:00
}
proto_item_set_len ( ti , item_len ) ;
}
}
/* QoS List (QoS Check, QoS-Check Confirm Initiate Flow Request
* and Initiate Replace Packet Filters in Existing TFT )
* XXX
* Create new TFT ?
*/
if ( ( tft_opcode = = 0x01 ) | | ( tft_opcode = = 0x06 ) | | ( tft_opcode = = 0x80 ) | | ( tft_opcode = = 0x81 ) | | ( tft_opcode = = 0x83 ) ) {
/* QoS List Length */
gint32 tft_qos_list_len ;
2013-08-07 23:07:15 +00:00
guint8 blob_len , item_len , padding_len ;
2013-04-19 16:06:01 +00:00
gboolean verbose ;
proto_tree * qos_tree , * qos_sub_blob_tree , * qos_att_tree ;
int num = 0 , j , num_qos_att_set ;
2013-04-04 16:23:55 +00:00
tft_qos_list_len = tvb_get_ntohs ( tvb , offset ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_3gpp_obj_tft_qos_list_len , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
tft_qos_list_len - = 2 ;
if ( tft_qos_list_len > 0 ) {
while ( tft_qos_list_len > 0 ) {
2013-04-19 16:06:01 +00:00
int bit_offset ; /* offset in bits */
guint8 qos_attribute_set_len ;
2013-04-04 17:15:10 +00:00
num + + ;
2013-04-19 16:06:01 +00:00
2013-04-04 17:15:10 +00:00
ti = proto_tree_add_text ( rsvp_object_tree , tvb , offset , - 1 , " QOS Flow Identifier Num %u " , num ) ;
2013-04-04 16:23:55 +00:00
qos_tree = proto_item_add_subtree ( ti , ett_treelist [ TT_3GPP_OBJ_QOS ] ) ;
/* Flow Identifier */
proto_tree_add_item ( qos_tree , hf_rsvp_3gpp_obj_flow_id , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
tft_qos_list_len - - ;
/* R_QOS_SUB_BLOB_LEN 1 */
blob_len = tvb_get_guint8 ( tvb , offset ) ;
proto_tree_add_item ( qos_tree , hf_rsvp_3gpp_r_qos_blob_len , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
tft_qos_list_len - - ;
2013-04-19 16:06:01 +00:00
/* R_QoS_SUB_BLOB X.S0011-004-D */
2014-01-26 12:55:59 +00:00
ti = proto_tree_add_item ( qos_tree , hf_rsvp_3gpp_r_qos_blob , tvb , offset , blob_len , ENC_NA ) ;
2013-04-19 16:06:01 +00:00
qos_sub_blob_tree = proto_item_add_subtree ( ti , ett_treelist [ TT_3GPP_OBJ_QOS_SUB_BLOB ] ) ;
proto_tree_add_item ( qos_sub_blob_tree , hf_rsvp_3gpp_r_qos_blob_flow_pri , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( qos_sub_blob_tree , hf_rsvp_3gpp_r_qos_blob_num_qos_att_set , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
num_qos_att_set = ( tvb_get_guint8 ( tvb , offset ) & 0x0e ) > > 1 ;
/* point to the first bit in the QoS_ATTRIBUTE_SET */
bit_offset = ( offset < < 3 ) + 7 ;
for ( j = 0 ; j < num_qos_att_set ; j + + ) {
qos_attribute_set_len = tvb_get_bits8 ( tvb , bit_offset , 4 ) ;
ti = proto_tree_add_text ( qos_sub_blob_tree , tvb , bit_offset > > 3 , qos_attribute_set_len , " QoS_ATTRIBUTE_SET %u(%u bytes) " ,
2013-04-19 16:16:22 +00:00
j + 1 ,
2013-04-19 16:06:01 +00:00
qos_attribute_set_len ) ;
qos_att_tree = proto_item_add_subtree ( ti , ett_treelist [ TT_3GPP_OBJ_QOS_SUB_BLOB ] ) ;
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_att_set_len , tvb , bit_offset , 4 , ENC_BIG_ENDIAN ) ;
bit_offset + = 4 ;
if ( qos_attribute_set_len = = 0 ) {
break ;
}
2013-08-07 23:07:15 +00:00
2013-04-19 16:06:01 +00:00
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_attribute_set_id , tvb , bit_offset , 7 , ENC_BIG_ENDIAN ) ;
bit_offset + = 7 ;
verbose = tvb_get_bits8 ( tvb , bit_offset , 1 ) ;
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_attribute_verbose , tvb , bit_offset , 1 , ENC_BIG_ENDIAN ) ;
bit_offset + + ;
2013-08-07 23:07:15 +00:00
2013-04-19 16:06:01 +00:00
if ( verbose = = FALSE ) {
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_attribute_prof_id , tvb , bit_offset , 16 , ENC_BIG_ENDIAN ) ;
bit_offset + = 16 ;
} else {
/* Traffic_Class 0 or 3 */
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_attribute_traff_cls , tvb , bit_offset , 3 , ENC_BIG_ENDIAN ) ;
bit_offset + = 3 ;
/* Peak_Rate 0 or 16 */
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_attribute_peak_rate , tvb , bit_offset , 16 , ENC_BIG_ENDIAN ) ;
bit_offset + = 16 ;
/* Bucket_Size 0 or 16 */
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_attribute_bucket_size , tvb , bit_offset , 16 , ENC_BIG_ENDIAN ) ;
bit_offset + = 16 ;
/* Token_Rate 0 or 16 */
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_attribute_token_rate , tvb , bit_offset , 16 , ENC_BIG_ENDIAN ) ;
bit_offset + = 16 ;
/* Max_Latency 0 or 8 */
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_attribute_max_latency , tvb , bit_offset , 16 , ENC_BIG_ENDIAN ) ;
bit_offset + = 8 ;
/* Max_Loss_Rate 0 or 8 */
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_attribute_max_loss_rte , tvb , bit_offset , 16 , ENC_BIG_ENDIAN ) ;
bit_offset + = 8 ;
/* Delay_Var_Sensitive 0 or 1 */
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_attribute_delay_var_sensitive , tvb , bit_offset , 16 , ENC_BIG_ENDIAN ) ;
bit_offset + = 1 ;
}
/* Padd to fill up to octet boundary, Reserved 0-7 as needed */
padding_len = 0 ;
if ( ( bit_offset & 0x07 ) ! = 0 ) {
padding_len = 8 - ( bit_offset & 0x07 ) ;
proto_tree_add_bits_item ( qos_att_tree , hf_rsvp_3gpp_qos_attribute_reserved , tvb , bit_offset , padding_len , ENC_BIG_ENDIAN ) ;
}
bit_offset = bit_offset + padding_len ;
}
2013-04-04 16:23:55 +00:00
offset = offset + blob_len ;
tft_qos_list_len = tft_qos_list_len - blob_len ;
2013-08-07 23:07:15 +00:00
/* Result Code This field is only included in the ResvConf message when
2013-04-04 16:23:55 +00:00
* the TFT Operation Code field is set to QoS - Check Confirm .
*/
item_len = blob_len + 2 ;
if ( tft_opcode = = 0x81 ) {
proto_tree_add_item ( qos_tree , hf_rsvp_3gpp_qos_result , tvb , offset , 1 , ENC_BIG_ENDIAN ) ;
offset + + ;
tft_qos_list_len - - ;
item_len + + ;
}
proto_item_set_len ( ti , item_len ) ;
}
}
} else {
proto_tree_add_text ( rsvp_object_tree , tvb , offset , length - 2 , " IE Data " ) ;
}
obj_length = obj_length - length ;
}
2013-03-31 22:08:00 +00:00
}
}
}
2002-10-02 21:15:27 +00:00
/*------------------------------------------------------------------------------
* RESTART CAPABILITY
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_restart_cap ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-10-02 21:15:27 +00:00
{
int offset2 = offset + 4 ;
proto_item_set_text ( ti , " RESTART CAPABILITY: " ) ;
switch ( type ) {
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 , 4 ,
" Restart Time: %d ms " ,
tvb_get_ntohl ( tvb , offset2 ) ) ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 4 , 4 ,
" Recovery Time: %d ms " ,
tvb_get_ntohl ( tvb , offset2 + 4 ) ) ;
proto_item_append_text ( ti , " Restart Time: %d ms. Recovery Time: %d ms. " ,
tvb_get_ntohl ( tvb , offset2 ) , tvb_get_ntohl ( tvb , offset2 + 4 ) ) ;
break ;
2002-10-02 21:15:27 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_restart_cap_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-10-02 21:15:27 +00:00
}
}
/*------------------------------------------------------------------------------
* PROTECTION INFORMATION
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_protection_info ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-10-02 21:15:27 +00:00
{
2012-09-24 01:59:34 +00:00
guint8 flags1 , lsp_flags , link_flags , seg_flags ;
2011-01-27 16:08:41 +00:00
proto_tree * ti2 , * ti3 , * ti4 , * rsvp_pi_link_flags_tree , * rsvp_pi_lsp_flags_tree , * rsvp_pi_seg_flags_tree ;
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
2002-10-02 21:15:27 +00:00
proto_item_set_text ( ti , " PROTECTION_INFO: " ) ;
switch ( type ) {
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2012-06-11 16:33:56 +00:00
flags1 = tvb_get_guint8 ( tvb , offset2 ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_protection_info_flags_secondary_lsp ,
tvb , offset2 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
link_flags = tvb_get_guint8 ( tvb , offset2 + 3 ) ;
2013-12-24 23:41:24 +00:00
ti2 = proto_tree_add_item ( rsvp_object_tree , hf_rsvp_protection_info_link_flags , tvb , offset2 + 3 , 1 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
rsvp_pi_link_flags_tree = proto_item_add_subtree ( ti2 , TREE ( TT_PROTECTION_INFO_LINK ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_extra_traffic ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_unprotected ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_shared ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_dedicated1_1 ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_dedicated1plus1 ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_enhanced ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %s%s%s%s%s%s%s. " ,
2012-09-24 01:59:34 +00:00
flags1 & 0x80 ? " SecondaryLSP " : " " ,
2012-06-11 16:33:56 +00:00
link_flags & 0x01 ? " ExtraTraffic " : " " ,
link_flags & 0x02 ? " Unprotected " : " " ,
link_flags & 0x04 ? " Shared " : " " ,
link_flags & 0x08 ? " Dedicated1:1 " : " " ,
link_flags & 0x10 ? " Dedicated1+1 " : " " ,
link_flags & 0x20 ? " Enhanced " : " " ) ;
break ;
2011-01-27 16:08:41 +00:00
case 2 : /* RFC4872 */
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2012-06-11 16:33:56 +00:00
flags1 = tvb_get_guint8 ( tvb , offset2 ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_rfc4872_secondary ,
tvb , offset2 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_rfc4872_protecting ,
tvb , offset2 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_rfc4872_notification_msg ,
tvb , offset2 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_rfc4872_operational ,
tvb , offset2 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
lsp_flags = tvb_get_guint8 ( tvb , offset2 + 1 ) ;
ti3 = proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 1 , 1 ,
" LSP Flags: 0x%02x -%s%s%s%s%s%s " , lsp_flags ,
lsp_flags = = 0 ? " Unprotected " : " " ,
lsp_flags & 0x01 ? " Rerouting " : " " ,
lsp_flags & 0x02 ? " Rerouting with extra-traffic " : " " ,
lsp_flags & 0x04 ? " 1:N Protection with extra-traffic " : " " ,
lsp_flags & 0x08 ? " 1+1 Unidirectional protection " : " " ,
lsp_flags & 0x10 ? " 1+1 Bidirectional protection " : " " ) ;
rsvp_pi_lsp_flags_tree = proto_item_add_subtree ( ti3 , TREE ( TT_PROTECTION_INFO_LSP ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_pi_lsp_flags_tree , hf_rsvp_pi_lsp_flags_full_rerouting ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_lsp_flags_tree , hf_rsvp_pi_lsp_flags_rerouting_extra ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_lsp_flags_tree , hf_rsvp_pi_lsp_flags_1_n_protection ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_lsp_flags_tree , hf_rsvp_pi_lsp_flags_1plus1_unidirectional ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_lsp_flags_tree , hf_rsvp_pi_lsp_flags_1plus1_bidirectional ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
link_flags = tvb_get_guint8 ( tvb , offset2 + 3 ) ;
ti2 = proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 3 , 1 ,
" Link Flags: 0x%02x -%s%s%s%s%s%s " , link_flags ,
link_flags & 0x01 ? " ExtraTraffic " : " " ,
link_flags & 0x02 ? " Unprotected " : " " ,
link_flags & 0x04 ? " Shared " : " " ,
link_flags & 0x08 ? " Dedicated1:1 " : " " ,
link_flags & 0x10 ? " Dedicated1+1 " : " " ,
link_flags & 0x20 ? " Enhanced " : " " ) ;
2012-09-24 01:59:34 +00:00
rsvp_pi_link_flags_tree = proto_item_add_subtree ( ti2 , TREE ( TT_PROTECTION_INFO_LINK ) ) ;
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_extra ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_unprotected ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_shared ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_dedicated_1_1 ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_dedicated_1plus1 ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_link_flags_tree , hf_rsvp_pi_link_flags_enhanced ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_protection_info_in_place ,
tvb , offset2 + 4 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_protection_info_required ,
tvb , offset2 + 4 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
seg_flags = tvb_get_guint8 ( tvb , offset2 + 5 ) ;
ti4 = proto_tree_add_text ( rsvp_object_tree , tvb , offset2 + 5 , 1 ,
" Segment recovery Flags: 0x%02x - %s%s%s%s%s%s " , seg_flags ,
seg_flags = = 0 ? " Unprotected " : " " ,
seg_flags & 0x01 ? " Rerouting " : " " ,
seg_flags & 0x02 ? " Rerouting with extra-traffic " : " " ,
seg_flags & 0x04 ? " 1:N Protection with extra-traffic " : " " ,
seg_flags & 0x08 ? " 1+1 Unidirectional protection " : " " ,
seg_flags & 0x10 ? " 1+1 Bidirectional protection " : " " ) ;
rsvp_pi_seg_flags_tree = proto_item_add_subtree ( ti4 , TREE ( TT_PROTECTION_INFO_SEG ) ) ;
2012-09-24 01:59:34 +00:00
proto_tree_add_item ( rsvp_pi_seg_flags_tree , hf_rsvp_pi_seg_flags_full_rerouting ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_seg_flags_tree , hf_rsvp_pi_seg_flags_rerouting_extra ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_seg_flags_tree , hf_rsvp_pi_seg_flags_1_n_protection ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_seg_flags_tree , hf_rsvp_pi_seg_flags_1plus1_unidirectional ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_pi_seg_flags_tree , hf_rsvp_pi_seg_flags_1plus1_bidirectional ,
tvb , offset2 + 1 , 1 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " %s%s%s%s Link:%s%s%s%s%s%s, LSP:%s%s%s%s%s%s. " ,
2012-09-24 01:59:34 +00:00
flags1 & 0x80 ? " SecondaryLSP " : " " ,
flags1 & 0x40 ? " ProtectingLSP " : " " ,
flags1 & 0x20 ? " Notification " : " " ,
flags1 & 0x10 ? " OperationalLSP " : " " ,
2012-06-11 16:33:56 +00:00
link_flags & 0x01 ? " ExtraTraffic " : " " ,
link_flags & 0x02 ? " Unprotected " : " " ,
link_flags & 0x04 ? " Shared " : " " ,
link_flags & 0x08 ? " Dedicated1:1 " : " " ,
link_flags & 0x10 ? " Dedicated1+1 " : " " ,
link_flags & 0x20 ? " Enhanced " : " " ,
lsp_flags = = 0 ? " Unprotected " : " " ,
lsp_flags & 0x01 ? " Rerouting " : " " ,
lsp_flags & 0x02 ? " Rerouting with extra-traffic " : " " ,
lsp_flags & 0x04 ? " 1:N Protection with extra-traffic " : " " ,
lsp_flags & 0x08 ? " 1+1 Unidirectional protection " : " " ,
lsp_flags & 0x10 ? " 1+1 Bidirectional protection " : " " ) ;
break ;
2002-10-02 21:15:27 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_protection_info_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-10-02 21:15:27 +00:00
}
}
2002-10-08 23:29:15 +00:00
/*------------------------------------------------------------------------------
* FAST REROUTE
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_fast_reroute ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-10-08 23:29:15 +00:00
{
2012-06-11 16:33:56 +00:00
guint8 flags ;
2003-11-08 00:09:01 +00:00
proto_tree * ti2 , * rsvp_frr_flags_tree ;
2002-10-08 23:29:15 +00:00
proto_item_set_text ( ti , " FAST_REROUTE: " ) ;
switch ( type ) {
case 1 :
case 7 :
2012-06-11 16:33:56 +00:00
if ( ( ( type = = 1 ) & & ( obj_length ! = 24 ) ) | | ( ( type = = 7 ) & & ( obj_length ! = 20 ) ) ) {
proto_tree_add_text ( rsvp_object_tree , tvb , offset , obj_length ,
" <<<Invalid length: cannot decode>>> " ) ;
proto_item_append_text ( ti , " Invalid length " ) ;
break ;
}
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_fast_reroute_setup_priority , tvb , offset + 4 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_fast_reroute_hold_priority , tvb , offset + 5 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_fast_reroute_hop_limit , tvb , offset + 6 , 1 , ENC_NA ) ;
2003-11-08 00:09:01 +00:00
flags = tvb_get_guint8 ( tvb , offset + 7 ) ;
2013-12-24 23:41:24 +00:00
ti2 = proto_tree_add_item ( rsvp_object_tree , hf_rsvp_fast_reroute_flags , tvb , offset + 7 , 1 , ENC_NA ) ;
2012-09-24 01:59:34 +00:00
rsvp_frr_flags_tree = proto_item_add_subtree ( ti2 , TREE ( TT_FAST_REROUTE_FLAGS ) ) ;
proto_tree_add_item ( rsvp_frr_flags_tree , hf_rsvp_frr_flags_one2one_backup ,
tvb , offset + 7 , 1 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_frr_flags_tree , hf_rsvp_frr_flags_facility_backup ,
tvb , offset + 7 , 1 , ENC_BIG_ENDIAN ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_fast_reroute_bandwidth , tvb , offset + 8 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_fast_reroute_include_any , tvb , offset + 12 , 4 , ENC_BIG_ENDIAN ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_fast_reroute_exclude_any , tvb , offset + 16 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
if ( type = = 1 ) {
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_fast_reroute_include_all , tvb , offset + 20 , 4 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
}
2003-11-08 00:09:01 +00:00
proto_item_append_text ( ti , " %s%s " ,
flags & 0x01 ? " One-to-One Backup, " : " " ,
flags & 0x02 ? " Facility Backup " : " " ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-10-08 23:29:15 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_fast_reroute_data , tvb , offset + 4 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-10-08 23:29:15 +00:00
}
}
/*------------------------------------------------------------------------------
* DETOUR
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_detour ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2002-10-08 23:29:15 +00:00
{
int remaining_length , count ;
2003-11-11 20:11:05 +00:00
int iter ;
2002-10-08 23:29:15 +00:00
2003-11-08 00:09:01 +00:00
proto_item_set_text ( ti , " DETOUR: " ) ;
2002-10-08 23:29:15 +00:00
switch ( type ) {
case 7 :
2003-11-11 20:11:05 +00:00
iter = 0 ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2012-06-11 16:33:56 +00:00
for ( remaining_length = obj_length - 4 , count = 1 ;
remaining_length > 0 ; remaining_length - = 8 , count + + ) {
if ( remaining_length < 8 ) {
proto_tree_add_text ( rsvp_object_tree , tvb , offset + remaining_length ,
obj_length - remaining_length ,
" <<<Invalid length: cannot decode>>> " ) ;
proto_item_append_text ( ti , " Invalid length " ) ;
break ;
}
iter + + ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset + ( 4 * iter ) , 4 ,
" PLR ID %d: %s " , count ,
tvb_ip_to_str ( tvb , offset + ( 4 * iter ) ) ) ;
iter + + ;
proto_tree_add_text ( rsvp_object_tree , tvb , offset + ( 4 * iter ) , 4 ,
" Avoid Node ID %d: %s " , count ,
tvb_ip_to_str ( tvb , offset + ( 4 * iter ) ) ) ;
}
break ;
2002-10-08 23:29:15 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_detour_data , tvb , offset + 4 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2002-10-08 23:29:15 +00:00
}
}
2003-10-10 21:16:24 +00:00
/*------------------------------------------------------------------------------
* DIFFSERV
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
2012-06-11 16:33:56 +00:00
dissect_rsvp_diffserv ( proto_tree * ti , proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2003-10-10 21:16:24 +00:00
{
int mapnb , count ;
int * hfindexes [ ] = {
2012-06-11 16:33:56 +00:00
& hf_rsvp_filter [ RSVPF_DIFFSERV_MAP ] ,
& hf_rsvp_filter [ RSVPF_DIFFSERV_MAP_EXP ] ,
& hf_rsvp_filter [ RSVPF_DIFFSERV_PHBID ] ,
& hf_rsvp_filter [ RSVPF_DIFFSERV_PHBID_DSCP ] ,
& hf_rsvp_filter [ RSVPF_DIFFSERV_PHBID_CODE ] ,
& hf_rsvp_filter [ RSVPF_DIFFSERV_PHBID_BIT14 ] ,
& hf_rsvp_filter [ RSVPF_DIFFSERV_PHBID_BIT15 ]
2003-10-10 21:16:24 +00:00
} ;
gint * etts [ ] = {
2012-06-11 16:33:56 +00:00
& TREE ( TT_DIFFSERV_MAP ) ,
& TREE ( TT_DIFFSERV_MAP_PHBID )
2003-10-10 21:16:24 +00:00
} ;
proto_item_set_text ( ti , " DIFFSERV: " ) ;
offset + = 3 ;
switch ( type ) {
case 1 :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset , 1 ,
type , " 1 - E-LSP " ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_filter [ RSVPF_DIFFSERV_MAPNB ] ,
tvb , offset + 4 , 1 ,
mapnb = tvb_get_guint8 ( tvb , offset + 4 ) & 15 ) ;
proto_item_append_text ( ti , " E-LSP, %u MAP%s " , mapnb ,
( mapnb = = 0 ) ? " " : " s " ) ;
offset + = 5 ;
for ( count = 0 ; count < mapnb ; count + + ) {
dissect_diffserv_mpls_common ( tvb , rsvp_object_tree , type ,
offset , hfindexes , etts ) ;
offset + = 4 ;
}
break ;
2003-10-10 21:16:24 +00:00
case 2 :
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " L-LSP " ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset , 1 ,
type , " 2 - L-LSP " ) ;
2012-06-11 16:33:56 +00:00
dissect_diffserv_mpls_common ( tvb , rsvp_object_tree , type ,
offset + 3 , hfindexes , etts ) ;
break ;
2003-10-10 21:16:24 +00:00
default :
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_diffserv_data , tvb , offset + 1 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2003-10-10 21:16:24 +00:00
}
}
2006-07-13 05:57:20 +00:00
/*------------------------------------------------------------------------------
* CLASSTYPE
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
dissect_rsvp_diffserv_aware_te ( proto_tree * ti , proto_tree * rsvp_object_tree ,
2012-06-11 16:33:56 +00:00
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
2006-07-13 05:57:20 +00:00
{
2008-05-14 01:47:41 +00:00
proto_item * hidden_item ;
2012-06-11 16:33:56 +00:00
int offset2 = offset + 4 ;
guint8 ct = 0 ;
2007-11-16 23:56:18 +00:00
2008-05-14 01:47:41 +00:00
hidden_item = proto_tree_add_item ( rsvp_object_tree ,
2012-06-11 16:33:56 +00:00
hf_rsvp_filter [ RSVPF_DSTE ] ,
tvb , offset , 8 , ENC_NA ) ;
2008-05-14 01:47:41 +00:00
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
2006-07-13 05:57:20 +00:00
switch ( type ) {
case 1 :
2012-06-11 16:33:56 +00:00
ct = tvb_get_guint8 ( tvb , offset2 + 3 ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_DSTE_CLASSTYPE ] ,
tvb , offset2 + 3 , 1 , ENC_BIG_ENDIAN ) ;
proto_item_set_text ( ti , " CLASSTYPE: CT %u " , ct ) ;
break ;
2006-07-13 05:57:20 +00:00
default :
2012-06-11 16:33:56 +00:00
proto_item_set_text ( ti , " CLASSTYPE: (Unknown C-type) " ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint_format_value ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 ,
type , " Unknown (%u) " , type ) ;
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_diffserv_aware_te_data , tvb , offset2 , obj_length - 4 , ENC_NA ) ;
2012-06-11 16:33:56 +00:00
break ;
2006-07-13 05:57:20 +00:00
}
}
2011-01-05 07:16:09 +00:00
/*----------------------------------------------------------------------------
* VENDOR PRIVATE USE
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
2011-01-15 03:25:43 +00:00
dissect_rsvp_vendor_private_use ( proto_tree * ti _U_ ,
2011-01-05 07:16:09 +00:00
proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
2011-11-21 20:04:45 +00:00
int rsvp_class _U_ , int type )
2011-01-05 07:16:09 +00:00
{
/*
* FF : from Section 2 , RFC 3936
*
* " Organization/Vendor Private " ranges refer to values that are
* enterprise - specific ; these MUST NOT be registered with IANA . For
* Vendor Private values , the first 4 - octet word of the data field MUST
* be an enterprise code [ ENT : www . iana . org / assignments / enterprise - numbers ]
2011-01-15 03:25:43 +00:00
* ( network order ) as registered with the IANA SMI Network Management
* Private Enterprise Codes , and the rest of the data thereafter is for
2011-01-05 07:16:09 +00:00
* the private use of the registered enterprise .
*/
2012-06-11 16:33:56 +00:00
proto_item * hidden_item ;
2011-01-05 07:16:09 +00:00
hidden_item = proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_PRIVATE_OBJ ] ,
2011-10-19 15:04:44 +00:00
tvb , offset , obj_length , ENC_NA ) ;
2011-01-05 07:16:09 +00:00
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2011-01-05 07:16:09 +00:00
proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_ENT_CODE ] ,
2011-10-19 15:04:44 +00:00
tvb , offset + 4 , 4 , ENC_BIG_ENDIAN ) ;
2013-09-25 10:11:07 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_private_data , tvb , offset + 8 ,
obj_length - 8 , ENC_NA ) ;
}
2013-09-27 20:33:29 +00:00
/*----------------------------------------------------------------------------
* JUNIPER PROPRIETARY
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
dissect_rsvp_juniper ( proto_tree * ti _U_ ,
proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
{
/*
2013-09-29 22:40:25 +00:00
* Juniper proprietary TLVs :
* According to the tcpdump code , this is of the form :
* # TLVs ( 2 bytes )
* # Padbytes ( 2 bytes )
* per TLV :
* type ( 1 byte )
* length
* value ( length - 2 bytes )
* padbytes
2013-09-27 20:33:29 +00:00
*/
2013-09-29 22:40:25 +00:00
2013-09-27 20:33:29 +00:00
proto_item * hidden_item ;
hidden_item = proto_tree_add_item ( rsvp_object_tree ,
hf_rsvp_filter [ RSVPF_JUNIPER ] ,
tvb , offset , obj_length , ENC_NA ) ;
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2013-09-29 22:40:25 +00:00
offset + = 4 ;
if ( type = = 1 ) {
guint tlvs , pad ;
tlvs = tvb_get_ntohs ( tvb , offset ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_numtlvs , tvb ,
offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
pad = tvb_get_ntohs ( tvb , offset ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_padlength , tvb ,
offset , 2 , ENC_BIG_ENDIAN ) ;
offset + = 2 ;
while ( tlvs > 0 ) {
guint8 t , l ;
t = tvb_get_guint8 ( tvb , offset ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_type , tvb ,
offset , 1 , ENC_NA ) ;
offset + = 1 ;
l = tvb_get_guint8 ( tvb , offset ) ;
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_length , tvb ,
offset , 1 , ENC_NA ) ;
offset + = 1 ;
switch ( t ) {
case 0x01 :
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_attrib_cos , tvb ,
offset , l - 2 , ENC_NA ) ;
offset + = ( l - 2 ) ;
break ;
case 0x02 :
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_attrib_metric1 , tvb ,
offset , l - 2 , ENC_NA ) ;
offset + = ( l - 2 ) ;
break ;
case 0x04 :
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_attrib_metric2 , tvb ,
offset , l - 2 , ENC_NA ) ;
offset + = ( l - 2 ) ;
break ;
case 0x08 :
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_attrib_ccc_status , tvb ,
offset , l - 2 , ENC_NA ) ;
offset + = ( l - 2 ) ;
break ;
case 0x10 :
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_attrib_path , tvb ,
offset , l - 2 , ENC_NA ) ;
offset + = ( l - 2 ) ;
break ;
default :
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_attrib_unknown , tvb ,
offset , l - 2 , ENC_NA ) ;
offset + = ( l - 2 ) ;
break ;
}
tlvs - - ;
}
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_pad , tvb ,
offset , pad , ENC_NA ) ;
2013-09-27 20:33:29 +00:00
} else if ( obj_length > 4 ) {
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_juniper_unknown , tvb ,
2013-09-29 22:40:25 +00:00
offset , obj_length , ENC_NA ) ;
2013-09-27 20:33:29 +00:00
}
}
2013-09-25 10:11:07 +00:00
/*----------------------------------------------------------------------------
* UNKOWN
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
static void
dissect_rsvp_unknown ( proto_tree * ti _U_ ,
proto_tree * rsvp_object_tree ,
tvbuff_t * tvb ,
int offset , int obj_length ,
int rsvp_class _U_ , int type )
{
2013-12-23 21:39:09 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_ctype , tvb , offset + 3 , 1 , type ) ;
2013-09-25 10:11:07 +00:00
if ( obj_length > 4 ) {
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_unknown_data , tvb , offset + 4 ,
obj_length - 4 , ENC_NA ) ;
}
2011-01-05 07:16:09 +00:00
}
2013-09-25 10:11:07 +00:00
2002-05-16 20:11:32 +00:00
/*------------------------------------------------------------------------------
2002-07-15 21:19:56 +00:00
* Dissect a single RSVP message in a tree
2002-05-16 20:11:32 +00:00
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-07-15 21:19:56 +00:00
static void
2002-08-28 21:04:11 +00:00
dissect_rsvp_msg_tree ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree ,
2013-11-22 02:52:41 +00:00
int tree_mode , rsvp_conversation_info * rsvph , gboolean e2ei )
2002-05-16 20:11:32 +00:00
{
2012-06-11 16:33:56 +00:00
proto_tree * rsvp_tree ;
2002-05-16 20:11:32 +00:00
proto_tree * rsvp_header_tree ;
proto_tree * rsvp_object_tree ;
2002-08-28 21:04:11 +00:00
proto_tree * ti ;
2008-05-14 01:47:41 +00:00
proto_item * hidden_item ;
2012-06-11 16:33:56 +00:00
guint16 cksum , computed_cksum ;
vec_t cksum_vec [ 1 ] ;
int offset = 0 ;
int len ;
guint8 message_type ;
int session_off , tempfilt_off ;
int msg_length ;
int obj_length ;
offset = 0 ;
msg_length = tvb_get_ntohs ( tvb , 6 ) ;
2002-07-15 21:19:56 +00:00
message_type = tvb_get_guint8 ( tvb , 1 ) ;
ti = proto_tree_add_item ( tree , proto_rsvp , tvb , offset , msg_length ,
2012-06-11 16:33:56 +00:00
ENC_NA ) ;
2002-07-15 21:19:56 +00:00
rsvp_tree = proto_item_add_subtree ( ti , tree_mode ) ;
2013-11-22 02:52:41 +00:00
if ( e2ei )
2012-06-11 16:33:56 +00:00
proto_item_append_text ( rsvp_tree , " (E2E-IGNORE) " ) ;
2002-07-15 21:19:56 +00:00
proto_item_append_text ( rsvp_tree , " : " ) ;
2012-06-11 16:33:56 +00:00
proto_item_append_text ( rsvp_tree , " %s " , val_to_str_ext ( message_type , & message_type_vals_ext ,
" Unknown (%u). " ) ) ;
2002-07-15 21:19:56 +00:00
find_rsvp_session_tempfilt ( tvb , 0 , & session_off , & tempfilt_off ) ;
2002-08-28 21:04:11 +00:00
if ( session_off )
2012-06-11 16:33:56 +00:00
proto_item_append_text ( rsvp_tree , " %s " , summary_session ( tvb , session_off ) ) ;
2002-08-28 21:04:11 +00:00
if ( tempfilt_off )
2012-06-11 16:33:56 +00:00
proto_item_append_text ( rsvp_tree , " %s " , summary_template ( tvb , tempfilt_off ) ) ;
2002-07-15 21:19:56 +00:00
2002-08-28 21:04:11 +00:00
ti = proto_tree_add_text ( rsvp_tree , tvb , offset , 8 , " RSVP Header. %s " ,
2012-06-11 16:33:56 +00:00
val_to_str_ext ( message_type , & message_type_vals_ext ,
" Unknown Message (%u). " ) ) ;
2013-11-22 02:52:41 +00:00
if ( e2ei )
2012-06-11 16:33:56 +00:00
proto_item_append_text ( ti , " (E2E-IGNORE) " ) ;
2002-10-02 21:15:27 +00:00
rsvp_header_tree = proto_item_add_subtree ( ti , TREE ( TT_HDR ) ) ;
2002-07-15 21:19:56 +00:00
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_header_tree , hf_rsvp_rsvp_version , tvb , offset , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_header_tree , hf_rsvp_flags , tvb , offset , 1 , ENC_NA ) ;
2009-10-27 06:05:02 +00:00
proto_tree_add_uint ( rsvp_header_tree , hf_rsvp_filter [ RSVPF_MSG ] , tvb ,
2012-06-11 16:33:56 +00:00
offset + 1 , 1 , message_type ) ;
2002-07-15 21:19:56 +00:00
switch ( RSVPF_MSG + message_type ) {
case RSVPF_PATH :
case RSVPF_RESV :
case RSVPF_PATHERR :
case RSVPF_RESVERR :
case RSVPF_PATHTEAR :
case RSVPF_RESVTEAR :
case RSVPF_RCONFIRM :
case RSVPF_RTEARCONFIRM :
case RSVPF_BUNDLE :
case RSVPF_ACK :
case RSVPF_SREFRESH :
case RSVPF_HELLO :
2008-05-14 01:47:41 +00:00
case RSVPF_NOTIFY :
2012-06-11 16:33:56 +00:00
hidden_item = proto_tree_add_boolean ( rsvp_header_tree , hf_rsvp_filter [ RSVPF_MSG + message_type ] , tvb ,
offset + 1 , 1 , 1 ) ;
PROTO_ITEM_SET_HIDDEN ( hidden_item ) ;
break ;
2002-05-16 20:11:32 +00:00
}
2002-07-15 21:19:56 +00:00
cksum = tvb_get_ntohs ( tvb , offset + 2 ) ;
2012-06-11 16:33:56 +00:00
if ( ! pinfo - > fragmented & & ( ( int ) tvb_length ( tvb ) > = msg_length ) ) {
/* The packet isn't part of a fragmented datagram and isn't
truncated , so we can checksum it . */
cksum_vec [ 0 ] . ptr = tvb_get_ptr ( tvb , 0 , msg_length ) ;
cksum_vec [ 0 ] . len = msg_length ;
computed_cksum = in_cksum ( & cksum_vec [ 0 ] , 1 ) ;
if ( computed_cksum = = 0 ) {
proto_tree_add_text ( rsvp_header_tree , tvb , offset + 2 , 2 ,
" Message Checksum: 0x%04x [correct] " ,
cksum ) ;
} else {
proto_tree_add_text ( rsvp_header_tree , tvb , offset + 2 , 2 ,
" Message Checksum: 0x%04x [incorrect, should be 0x%04x] " ,
cksum ,
in_cksum_shouldbe ( cksum , computed_cksum ) ) ;
}
2002-07-15 21:19:56 +00:00
} else {
2012-06-11 16:33:56 +00:00
proto_tree_add_text ( rsvp_header_tree , tvb , offset + 2 , 2 ,
" Message Checksum: 0x%04x " ,
cksum ) ;
2002-07-15 21:19:56 +00:00
}
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_header_tree , hf_rsvp_sending_ttl , tvb , offset + 4 , 1 , ENC_NA ) ;
proto_tree_add_item ( rsvp_header_tree , hf_rsvp_message_length , tvb , offset + 6 , 2 , ENC_BIG_ENDIAN ) ;
2002-07-15 21:19:56 +00:00
offset = 8 ;
2012-06-11 16:33:56 +00:00
len = 8 ;
2002-07-15 21:19:56 +00:00
if ( message_type = = RSVP_MSG_BUNDLE ) {
2012-06-11 16:33:56 +00:00
/* Bundle message. Dissect component messages */
if ( rsvp_bundle_dissect ) {
int len2 = 8 ;
while ( len2 < msg_length ) {
gint sub_len ;
tvbuff_t * tvb_sub ;
sub_len = tvb_get_ntohs ( tvb , len2 + 6 ) ;
tvb_sub = tvb_new_subset ( tvb , len2 , sub_len , sub_len ) ;
2013-11-22 02:52:41 +00:00
dissect_rsvp_msg_tree ( tvb_sub , pinfo , rsvp_tree , TREE ( TT_BUNDLE_COMPMSG ) , rsvph , e2ei ) ;
2012-06-11 16:33:56 +00:00
len2 + = sub_len ;
}
} else {
proto_tree_add_text ( rsvp_tree , tvb , offset , msg_length - len ,
" Bundle Component Messages Not Dissected " ) ;
}
return ;
2002-07-15 21:19:56 +00:00
}
while ( len < msg_length ) {
2012-06-11 16:33:56 +00:00
guint8 rsvp_class ;
guint8 type ;
obj_length = tvb_get_ntohs ( tvb , offset ) ;
rsvp_class = tvb_get_guint8 ( tvb , offset + 2 ) ;
type = tvb_get_guint8 ( tvb , offset + 3 ) ;
ti = proto_tree_add_item ( rsvp_tree , hf_rsvp_filter [ rsvp_class_to_filter_num ( rsvp_class ) ] ,
tvb , offset , obj_length , ENC_BIG_ENDIAN ) ;
rsvp_object_tree = proto_item_add_subtree ( ti , TREE ( rsvp_class_to_tree_type ( rsvp_class ) ) ) ;
if ( obj_length < 4 ) {
proto_tree_add_text ( rsvp_object_tree , tvb , offset , 2 ,
" Length: %u (bogus, must be >= 4) " , obj_length ) ;
break ;
}
2013-12-24 23:41:24 +00:00
proto_tree_add_item ( rsvp_object_tree , hf_rsvp_length , tvb , offset , 2 , ENC_BIG_ENDIAN ) ;
2012-06-11 16:33:56 +00:00
proto_tree_add_uint ( rsvp_object_tree , hf_rsvp_filter [ RSVPF_OBJECT ] , tvb ,
offset + 2 , 1 , rsvp_class ) ;
switch ( rsvp_class ) {
2001-06-23 19:45:12 +00:00
2012-06-11 16:33:56 +00:00
case RSVP_CLASS_SESSION :
dissect_rsvp_session ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type , rsvph ) ;
break ;
2001-12-29 00:43:55 +00:00
2012-06-11 16:33:56 +00:00
case RSVP_CLASS_HOP :
dissect_rsvp_hop ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
2002-03-01 21:39:01 +00:00
2012-06-11 16:33:56 +00:00
case RSVP_CLASS_TIME_VALUES :
dissect_rsvp_time_values ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_ERROR :
dissect_rsvp_error ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
2002-10-02 21:15:27 +00:00
2012-06-11 16:33:56 +00:00
case RSVP_CLASS_SCOPE :
dissect_rsvp_scope ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
2002-10-02 21:15:27 +00:00
2012-06-11 16:33:56 +00:00
case RSVP_CLASS_STYLE :
dissect_rsvp_style ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
2002-10-08 23:29:15 +00:00
2012-06-11 16:33:56 +00:00
case RSVP_CLASS_CONFIRM :
dissect_rsvp_confirm ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
2002-10-08 23:29:15 +00:00
2012-06-11 16:33:56 +00:00
case RSVP_CLASS_SENDER_TEMPLATE :
case RSVP_CLASS_FILTER_SPEC :
dissect_rsvp_template_filter ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type , rsvph ) ;
break ;
2003-10-10 21:16:24 +00:00
2012-06-11 16:33:56 +00:00
case RSVP_CLASS_SENDER_TSPEC :
dissect_rsvp_tspec ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_FLOWSPEC :
dissect_rsvp_flowspec ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_ADSPEC :
dissect_rsvp_adspec ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_INTEGRITY :
dissect_rsvp_integrity ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_POLICY :
dissect_rsvp_policy ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_LABEL_REQUEST :
dissect_rsvp_label_request ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_RECOVERY_LABEL :
case RSVP_CLASS_UPSTREAM_LABEL :
case RSVP_CLASS_SUGGESTED_LABEL :
case RSVP_CLASS_LABEL :
dissect_rsvp_label ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_LABEL_SET :
dissect_rsvp_label_set ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_SESSION_ATTRIBUTE :
dissect_rsvp_session_attribute ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_EXPLICIT_ROUTE :
dissect_rsvp_explicit_route ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_RECORD_ROUTE :
dissect_rsvp_record_route ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
2013-08-07 23:07:15 +00:00
case RSVP_CLASS_EXCLUDE_ROUTE :
dissect_rsvp_exclude_route ( ti , rsvp_object_tree , tvb , offset ,
obj_length , rsvp_class , type ) ;
break ;
2012-06-11 16:33:56 +00:00
case RSVP_CLASS_MESSAGE_ID :
dissect_rsvp_message_id ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_MESSAGE_ID_ACK :
dissect_rsvp_message_id_ack ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_MESSAGE_ID_LIST :
dissect_rsvp_message_id_list ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_HELLO :
dissect_rsvp_hello ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_DCLASS :
dissect_rsvp_dclass ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_ADMIN_STATUS :
dissect_rsvp_admin_status ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_LSP_ATTRIBUTES :
case RSVP_CLASS_LSP_REQUIRED_ATTRIBUTES :
dissect_rsvp_lsp_attributes ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_ASSOCIATION :
dissect_rsvp_association ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_LSP_TUNNEL_IF_ID :
dissect_rsvp_lsp_tunnel_if_id ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_NOTIFY_REQUEST :
dissect_rsvp_notify_request ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_GENERALIZED_UNI :
dissect_rsvp_gen_uni ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type , rsvph ) ;
break ;
case RSVP_CLASS_CALL_ID :
dissect_rsvp_call_id ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
2013-03-31 22:08:00 +00:00
case RSVP_CLASS_3GPP2_OBJECT :
dissect_rsvp_3gpp_object ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
2012-06-11 16:33:56 +00:00
case RSVP_CLASS_RESTART_CAP :
dissect_rsvp_restart_cap ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_PROTECTION :
dissect_rsvp_protection_info ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_FAST_REROUTE :
dissect_rsvp_fast_reroute ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_DETOUR :
dissect_rsvp_detour ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_DIFFSERV :
dissect_rsvp_diffserv ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
case RSVP_CLASS_CLASSTYPE :
dissect_rsvp_diffserv_aware_te ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
2006-07-13 05:57:20 +00:00
2011-01-05 07:16:09 +00:00
case RSVP_CLASS_VENDOR_PRIVATE_1 :
case RSVP_CLASS_VENDOR_PRIVATE_2 :
case RSVP_CLASS_VENDOR_PRIVATE_3 :
case RSVP_CLASS_VENDOR_PRIVATE_4 :
case RSVP_CLASS_VENDOR_PRIVATE_5 :
case RSVP_CLASS_VENDOR_PRIVATE_6 :
case RSVP_CLASS_VENDOR_PRIVATE_7 :
case RSVP_CLASS_VENDOR_PRIVATE_8 :
case RSVP_CLASS_VENDOR_PRIVATE_9 :
case RSVP_CLASS_VENDOR_PRIVATE_10 :
case RSVP_CLASS_VENDOR_PRIVATE_11 :
case RSVP_CLASS_VENDOR_PRIVATE_12 :
2011-11-21 20:04:45 +00:00
dissect_rsvp_vendor_private_use ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
2011-01-05 07:16:09 +00:00
break ;
2013-09-25 10:11:07 +00:00
case RSVP_CLASS_JUNIPER_PROPERTIES :
2013-09-27 20:33:29 +00:00
dissect_rsvp_juniper ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
break ;
2012-06-11 16:33:56 +00:00
case RSVP_CLASS_NULL :
default :
2013-09-25 10:11:07 +00:00
dissect_rsvp_unknown ( ti , rsvp_object_tree , tvb , offset , obj_length , rsvp_class , type ) ;
2012-06-11 16:33:56 +00:00
break ;
}
2002-08-28 21:04:11 +00:00
2012-06-11 16:33:56 +00:00
offset + = obj_length ;
len + = obj_length ;
2002-07-15 21:19:56 +00:00
}
}
/*------------------------------------------------------------------------------
* The main loop
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2002-08-28 21:04:11 +00:00
static void
2013-11-22 02:52:41 +00:00
dissect_rsvp_common ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , gboolean e2ei )
2002-07-15 21:19:56 +00:00
{
guint8 message_type ;
2012-06-11 16:33:56 +00:00
int session_off , tempfilt_off ;
2005-09-07 19:52:44 +00:00
2012-06-11 16:33:56 +00:00
rsvp_conversation_info * rsvph ;
conversation_t * conversation ;
struct rsvp_request_key request_key , * new_request_key ;
struct rsvp_request_val * request_val ;
2002-07-15 21:19:56 +00:00
2009-08-09 07:36:13 +00:00
col_clear ( pinfo - > cinfo , COL_INFO ) ;
2002-07-15 21:19:56 +00:00
message_type = tvb_get_guint8 ( tvb , 1 ) ;
2013-09-15 18:13:02 +00:00
rsvph = wmem_new0 ( wmem_packet_scope ( ) , rsvp_conversation_info ) ;
2005-09-07 19:52:44 +00:00
/* Copy over the source and destination addresses from the pinfo strucutre */
SET_ADDRESS ( & rsvph - > source , pinfo - > src . type , pinfo - > src . len , pinfo - > src . data ) ;
SET_ADDRESS ( & rsvph - > destination , pinfo - > dst . type , pinfo - > dst . len , pinfo - > dst . data ) ;
2009-10-27 06:05:02 +00:00
col_add_str ( pinfo - > cinfo , COL_INFO ,
2012-06-11 16:33:56 +00:00
val_to_str_ext ( message_type , & message_type_vals_ext , " Unknown (%u). " ) ) ;
if ( message_type = = RSVP_MSG_BUNDLE ) {
col_set_str ( pinfo - > cinfo , COL_INFO ,
rsvp_bundle_dissect ?
" Component Messages Dissected " :
" Component Messages Not Dissected " ) ;
} else {
find_rsvp_session_tempfilt ( tvb , 0 , & session_off , & tempfilt_off ) ;
if ( session_off )
col_append_str ( pinfo - > cinfo , COL_INFO , summary_session ( tvb , session_off ) ) ;
if ( tempfilt_off )
col_append_str ( pinfo - > cinfo , COL_INFO , summary_template ( tvb , tempfilt_off ) ) ;
}
2002-07-15 21:19:56 +00:00
if ( tree ) {
2013-11-22 02:52:41 +00:00
dissect_rsvp_msg_tree ( tvb , pinfo , tree , TREE ( TT_RSVP ) , rsvph , e2ei ) ;
2005-09-07 19:52:44 +00:00
}
2011-01-27 16:08:41 +00:00
/* ACK, SREFRESH and HELLO messages don't have any associated SESSION and,
therefore , no conversation */
2012-06-11 16:33:56 +00:00
if ( ( message_type = = RSVP_MSG_ACK ) | |
( message_type = = RSVP_MSG_SREFRESH ) | |
( message_type = = RSVP_MSG_HELLO ) )
2011-01-27 16:08:41 +00:00
return ;
2005-09-07 19:52:44 +00:00
/* Find out what conversation this packet is part of. */
2010-05-13 18:28:34 +00:00
conversation = find_or_create_conversation ( pinfo ) ;
2005-09-07 19:52:44 +00:00
/* Now build the request key */
2009-07-16 21:03:39 +00:00
memset ( & request_key , 0 , sizeof ( request_key ) ) ;
2005-09-07 19:52:44 +00:00
request_key . conversation = conversation - > index ;
request_key . session_type = rsvph - > session_type ;
switch ( request_key . session_type ) {
case RSVP_SESSION_TYPE_IPV4 :
2012-06-11 16:33:56 +00:00
SET_ADDRESS ( & request_key . u . session_ipv4 . destination ,
rsvph - > destination . type , rsvph - > destination . len ,
rsvph - > destination . data ) ;
request_key . u . session_ipv4 . protocol = rsvph - > protocol ;
request_key . u . session_ipv4 . udp_dest_port = rsvph - > udp_dest_port ;
break ;
2005-09-07 19:52:44 +00:00
case RSVP_SESSION_TYPE_IPV6 :
2012-06-11 16:33:56 +00:00
/* Not supported yet */
break ;
2005-09-07 19:52:44 +00:00
case RSVP_SESSION_TYPE_IPV4_LSP :
2012-06-11 16:33:56 +00:00
SET_ADDRESS ( & request_key . u . session_ipv4_lsp . destination ,
rsvph - > destination . type , rsvph - > destination . len ,
rsvph - > destination . data ) ;
request_key . u . session_ipv4_lsp . udp_dest_port = rsvph - > udp_dest_port ;
request_key . u . session_ipv4_lsp . ext_tunnel_id = rsvph - > ext_tunnel_id ;
break ;
2005-09-07 19:52:44 +00:00
2006-11-13 17:30:38 +00:00
case RSVP_SESSION_TYPE_AGGREGATE_IPV4 :
2012-06-11 16:33:56 +00:00
SET_ADDRESS ( & request_key . u . session_agg_ipv4 . destination ,
rsvph - > destination . type , rsvph - > destination . len ,
rsvph - > destination . data ) ;
request_key . u . session_agg_ipv4 . dscp = rsvph - > dscp ;
break ;
2006-11-13 17:30:38 +00:00
2005-09-07 19:52:44 +00:00
case RSVP_SESSION_TYPE_IPV4_UNI :
2012-06-11 16:33:56 +00:00
SET_ADDRESS ( & request_key . u . session_ipv4_uni . destination ,
rsvph - > destination . type , rsvph - > destination . len ,
rsvph - > destination . data ) ;
request_key . u . session_ipv4_uni . udp_dest_port = rsvph - > udp_dest_port ;
request_key . u . session_ipv4_uni . ext_tunnel_id = rsvph - > ext_tunnel_id ;
break ;
2005-09-07 19:52:44 +00:00
case RSVP_SESSION_TYPE_IPV4_E_NNI :
2012-06-11 16:33:56 +00:00
SET_ADDRESS ( & request_key . u . session_ipv4_enni . destination ,
rsvph - > destination . type , rsvph - > destination . len ,
rsvph - > destination . data ) ;
request_key . u . session_ipv4_enni . udp_dest_port = rsvph - > udp_dest_port ;
request_key . u . session_ipv4_enni . ext_tunnel_id = rsvph - > ext_tunnel_id ;
break ;
2005-09-07 19:52:44 +00:00
default :
2012-06-11 16:33:56 +00:00
/* This should never happen. */
2010-04-30 22:00:05 +00:00
if ( tree ) {
proto_tree_add_text ( tree , tvb , 0 , 0 , " Unknown session type " ) ;
}
2012-06-11 16:33:56 +00:00
break ;
2005-09-07 19:52:44 +00:00
}
2009-07-16 21:35:54 +00:00
SE_COPY_ADDRESS ( & request_key . source_info . source , & rsvph - > source ) ;
2005-09-07 19:52:44 +00:00
request_key . source_info . udp_source_port = rsvph - > udp_source_port ;
/* See if a request with this key already exists */
2007-11-16 23:56:18 +00:00
request_val =
2012-06-11 16:33:56 +00:00
( struct rsvp_request_val * ) g_hash_table_lookup ( rsvp_request_hash ,
& request_key ) ;
2005-09-07 19:52:44 +00:00
/* If not, insert the new request key into the hash table */
if ( ! request_val ) {
2013-09-15 18:13:02 +00:00
new_request_key = ( struct rsvp_request_key * ) wmem_memdup (
wmem_file_scope ( ) , & request_key , sizeof ( struct rsvp_request_key ) ) ;
2005-09-07 19:52:44 +00:00
2013-09-15 18:13:02 +00:00
request_val = wmem_new ( wmem_file_scope ( ) , struct rsvp_request_val ) ;
2010-05-10 15:54:57 +00:00
request_val - > value = conversation - > index ;
2005-09-07 19:52:44 +00:00
2010-05-10 15:54:57 +00:00
g_hash_table_insert ( rsvp_request_hash , new_request_key , request_val ) ;
2005-09-07 19:52:44 +00:00
}
tap_queue_packet ( rsvp_tap , pinfo , rsvph ) ;
2002-07-15 21:19:56 +00:00
}
2013-11-22 02:52:41 +00:00
static int
dissect_rsvp ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , void * data _U_ )
{
col_set_str ( pinfo - > cinfo , COL_PROTOCOL , " RSVP " ) ;
dissect_rsvp_common ( tvb , pinfo , tree , FALSE ) ;
return tvb_length ( tvb ) ;
}
static int
dissect_rsvp_e2ei ( tvbuff_t * tvb , packet_info * pinfo , proto_tree * tree , void * data _U_ )
{
col_set_str ( pinfo - > cinfo , COL_PROTOCOL , " RSVP-E2EI " ) ;
dissect_rsvp_common ( tvb , pinfo , tree , TRUE ) ;
return tvb_length ( tvb ) ;
}
2002-08-28 21:04:11 +00:00
static void
2012-06-11 16:33:56 +00:00
register_rsvp_prefs ( void )
2002-07-15 21:19:56 +00:00
{
module_t * rsvp_module ;
rsvp_module = prefs_register_protocol ( proto_rsvp , NULL ) ;
prefs_register_bool_preference (
2012-06-11 16:33:56 +00:00
rsvp_module , " process_bundle " ,
" Dissect sub-messages in BUNDLE message " ,
" Specifies whether Wireshark should decode and display sub-messages within BUNDLE messages " ,
& rsvp_bundle_dissect ) ;
2010-03-06 12:48:30 +00:00
prefs_register_enum_preference (
2012-06-11 16:33:56 +00:00
rsvp_module , " generalized_label_options " ,
" Dissect generalized labels as " ,
" Specifies how Wireshark should dissect generalized labels " ,
( gint * ) & rsvp_generalized_label_option ,
rsvp_generalized_label_options ,
FALSE ) ;
1999-06-11 16:45:02 +00:00
}
1999-07-29 05:47:07 +00:00
void
proto_register_rsvp ( void )
{
2002-10-02 21:15:27 +00:00
gint i ;
2010-05-10 15:54:57 +00:00
static hf_register_info rsvpf_info [ ] = {
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
/* Message type number */
{ & hf_rsvp_filter [ RSVPF_MSG ] ,
2012-06-11 16:33:56 +00:00
{ " Message Type " , " rsvp.msg " ,
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & message_type_vals_ext , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
/* Message type shorthands */
{ & hf_rsvp_filter [ RSVPF_PATH ] ,
2012-06-11 16:33:56 +00:00
{ " Path Message " , " rsvp.path " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_RESV ] ,
2012-06-11 16:33:56 +00:00
{ " Resv Message " , " rsvp.resv " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_PATHERR ] ,
2012-06-11 16:33:56 +00:00
{ " Path Error Message " , " rsvp.perr " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_RESVERR ] ,
2012-06-11 16:33:56 +00:00
{ " Resv Error Message " , " rsvp.rerr " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_PATHTEAR ] ,
2012-06-11 16:33:56 +00:00
{ " Path Tear Message " , " rsvp.ptear " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_RESVTEAR ] ,
2012-06-11 16:33:56 +00:00
{ " Resv Tear Message " , " rsvp.rtear " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_RCONFIRM ] ,
2012-06-11 16:33:56 +00:00
{ " Resv Confirm Message " , " rsvp.resvconf " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_RTEARCONFIRM ] ,
2012-06-11 16:33:56 +00:00
{ " Resv Tear Confirm Message " , " rsvp.rtearconf " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_BUNDLE ] ,
2012-06-11 16:33:56 +00:00
{ " Bundle Message " , " rsvp.bundle " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_ACK ] ,
2012-06-11 16:33:56 +00:00
{ " Ack Message " , " rsvp.ack " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_SREFRESH ] ,
2012-06-11 16:33:56 +00:00
{ " Srefresh Message " , " rsvp.srefresh " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_HELLO ] ,
2012-06-11 16:33:56 +00:00
{ " HELLO Message " , " rsvp.hello " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
/* Object class */
{ & hf_rsvp_filter [ RSVPF_OBJECT ] ,
2012-06-11 16:33:56 +00:00
{ " Object class " , " rsvp.object " ,
FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & rsvp_class_vals_ext , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2013-12-23 21:39:09 +00:00
{ & hf_rsvp_ctype ,
{ " C-type " , " rsvp.ctype " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_NOTIFY ] ,
2012-06-11 16:33:56 +00:00
{ " Notify Message " , " rsvp.notify " ,
FT_BOOLEAN , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
/* Object present shorthands */
{ & hf_rsvp_filter [ RSVPF_SESSION ] ,
2012-06-11 16:33:56 +00:00
{ " SESSION " , " rsvp.session " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_HOP ] ,
2012-06-11 16:33:56 +00:00
{ " HOP " , " rsvp.hop " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_HELLO_OBJ ] ,
2012-06-11 16:33:56 +00:00
{ " HELLO Request/Ack " , " rsvp.hello_obj " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_INTEGRITY ] ,
2012-06-11 16:33:56 +00:00
{ " INTEGRITY " , " rsvp.integrity " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_TIME_VALUES ] ,
2012-06-11 16:33:56 +00:00
{ " TIME VALUES " , " rsvp.time " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_ERROR ] ,
2012-06-11 16:33:56 +00:00
{ " ERROR " , " rsvp.error " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_SCOPE ] ,
2012-06-11 16:33:56 +00:00
{ " SCOPE " , " rsvp.scope " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_STYLE ] ,
2012-06-11 16:33:56 +00:00
{ " STYLE " , " rsvp.style " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_FLOWSPEC ] ,
2012-06-11 16:33:56 +00:00
{ " FLOWSPEC " , " rsvp.flowspec " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_FILTER_SPEC ] ,
2012-06-11 16:33:56 +00:00
{ " FILTERSPEC " , " rsvp.filter " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_SENDER ] ,
2012-06-11 16:33:56 +00:00
{ " SENDER TEMPLATE " , " rsvp.sender " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_TSPEC ] ,
2012-06-11 16:33:56 +00:00
{ " SENDER TSPEC " , " rsvp.tspec " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_ADSPEC ] ,
2012-06-11 16:33:56 +00:00
{ " ADSPEC " , " rsvp.adspec " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_POLICY ] ,
2012-06-11 16:33:56 +00:00
{ " POLICY " , " rsvp.policy " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_CONFIRM ] ,
2012-06-11 16:33:56 +00:00
{ " CONFIRM " , " rsvp.confirm " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_LABEL ] ,
2012-06-11 16:33:56 +00:00
{ " LABEL " , " rsvp.label " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_RECOVERY_LABEL ] ,
2012-06-11 16:33:56 +00:00
{ " RECOVERY LABEL " , " rsvp.recovery_label " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_UPSTREAM_LABEL ] ,
2012-06-11 16:33:56 +00:00
{ " UPSTREAM LABEL " , " rsvp.upstream_label " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_SUGGESTED_LABEL ] ,
2012-06-11 16:33:56 +00:00
{ " SUGGESTED LABEL " , " rsvp.suggested_label " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_LABEL_SET ] ,
2012-06-11 16:33:56 +00:00
{ " LABEL SET " , " rsvp.label_set " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_ACCEPTABLE_LABEL_SET ] ,
2012-06-11 16:33:56 +00:00
{ " ACCEPTABLE LABEL SET " , " rsvp.acceptable_label_set " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_PROTECTION ] ,
2012-06-11 16:33:56 +00:00
{ " PROTECTION " , " rsvp.protection " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_DIFFSERV ] ,
2012-06-11 16:33:56 +00:00
{ " DIFFSERV " , " rsvp.diffserv " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_DSTE ] ,
2012-06-11 16:33:56 +00:00
{ " CLASSTYPE " , " rsvp.dste " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_RESTART_CAP ] ,
2012-06-11 16:33:56 +00:00
{ " RESTART CAPABILITY " , " rsvp.restart " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_LABEL_REQUEST ] ,
2012-06-11 16:33:56 +00:00
{ " LABEL REQUEST " , " rsvp.label_request " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_SESSION_ATTRIBUTE ] ,
2012-06-11 16:33:56 +00:00
{ " SESSION ATTRIBUTE " , " rsvp.session_attribute " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_EXPLICIT_ROUTE ] ,
2012-06-11 16:33:56 +00:00
{ " EXPLICIT ROUTE " , " rsvp.explicit_route " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_RECORD_ROUTE ] ,
2012-06-11 16:33:56 +00:00
{ " RECORD ROUTE " , " rsvp.record_route " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_MESSAGE_ID ] ,
2012-06-11 16:33:56 +00:00
{ " MESSAGE-ID " , " rsvp.msgid " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_MESSAGE_ID_ACK ] ,
2012-06-11 16:33:56 +00:00
{ " MESSAGE-ID ACK " , " rsvp.msgid_ack " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_MESSAGE_ID_LIST ] ,
2012-06-11 16:33:56 +00:00
{ " MESSAGE-ID LIST " , " rsvp.msgid_list " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_DCLASS ] ,
2012-06-11 16:33:56 +00:00
{ " DCLASS " , " rsvp.dclass " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2009-06-22 04:58:08 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_LSP_TUNNEL_IF_ID ] ,
2012-06-11 16:33:56 +00:00
{ " LSP INTERFACE-ID " , " rsvp.lsp_tunnel_if_id " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_ADMIN_STATUS ] ,
2012-06-11 16:33:56 +00:00
{ " ADMIN STATUS " , " rsvp.admin_status " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_filter [ RSVPF_ADMIN_STATUS_REFLECT ] ,
{ " Reflect " , " rsvp.admin_status.reflect " ,
FT_BOOLEAN , 32 , NULL , 0x80000000 ,
NULL , HFILL }
} ,
{ & hf_rsvp_filter [ RSVPF_ADMIN_STATUS_HANDOVER ] ,
{ " Handover " , " rsvp.admin_status.handover " ,
FT_BOOLEAN , 32 , NULL , 0x40 ,
NULL , HFILL }
} ,
{ & hf_rsvp_filter [ RSVPF_ADMIN_STATUS_LOCKOUT ] ,
{ " Lockout " , " rsvp.admin_status.lockout " ,
FT_BOOLEAN , 32 , NULL , 0x20 ,
NULL , HFILL }
} ,
{ & hf_rsvp_filter [ RSVPF_ADMIN_STATUS_INHIBIT ] ,
{ " Inhibit Alarm Communication " , " rsvp.admin_status.inhibit " ,
FT_BOOLEAN , 32 , NULL , 0x10 ,
NULL , HFILL }
} ,
{ & hf_rsvp_filter [ RSVPF_ADMIN_STATUS_CALL_MGMT ] ,
{ " Call Management " , " rsvp.admin_status.callmgmt " ,
FT_BOOLEAN , 32 , NULL , 0x08 ,
NULL , HFILL }
} ,
{ & hf_rsvp_filter [ RSVPF_ADMIN_STATUS_TESTING ] ,
{ " Testing " , " rsvp.admin_status.testing " ,
FT_BOOLEAN , 32 , NULL , 0x04 ,
NULL , HFILL }
} ,
{ & hf_rsvp_filter [ RSVPF_ADMIN_STATUS_DOWN ] ,
{ " Administratively down " , " rsvp.admin_status.down " ,
FT_BOOLEAN , 32 , NULL , 0x02 ,
NULL , HFILL }
} ,
{ & hf_rsvp_filter [ RSVPF_ADMIN_STATUS_DELETE ] ,
{ " Delete in progress " , " rsvp.admin_status.delete " ,
FT_BOOLEAN , 32 , NULL , 0x01 ,
NULL , HFILL }
} ,
2011-01-27 16:08:41 +00:00
{ & hf_rsvp_filter [ RSVPF_LSP_ATTRIBUTES ] ,
2012-06-11 16:33:56 +00:00
{ " LSP ATTRIBUTES " , " rsvp.lsp_attributes " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2011-01-27 16:08:41 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_ASSOCIATION ] ,
2012-06-11 16:33:56 +00:00
{ " ASSOCIATION " , " rsvp.association " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_NOTIFY_REQUEST ] ,
2012-06-11 16:33:56 +00:00
{ " NOTIFY REQUEST " , " rsvp.notify_request " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_GENERALIZED_UNI ] ,
2012-06-11 16:33:56 +00:00
{ " GENERALIZED UNI " , " rsvp.generalized_uni " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_CALL_ID ] ,
2012-06-11 16:33:56 +00:00
{ " CALL ID " , " rsvp.call_id " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
2013-03-31 22:08:00 +00:00
{ & hf_rsvp_filter [ RSVPF_3GPP2_OBJECT ] ,
{ " 3GPP2 OBJECT " , " rsvp.3gpp2_object " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2011-01-05 07:16:09 +00:00
{ & hf_rsvp_filter [ RSVPF_PRIVATE_OBJ ] ,
2012-06-11 16:33:56 +00:00
{ " Private object " , " rsvp.obj_private " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2011-01-05 07:16:09 +00:00
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_UNKNOWN_OBJ ] ,
2012-06-11 16:33:56 +00:00
{ " Unknown object " , " rsvp.obj_unknown " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
/* Session fields */
{ & hf_rsvp_filter [ RSVPF_SESSION_IP ] ,
2012-06-11 16:33:56 +00:00
{ " Destination address " , " rsvp.session.ip " ,
FT_IPv4 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_SESSION_PORT ] ,
2012-06-11 16:33:56 +00:00
{ " Port number " , " rsvp.session.port " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_SESSION_PROTO ] ,
2012-06-11 16:33:56 +00:00
{ " Protocol " , " rsvp.session.proto " ,
FT_UINT8 , BASE_DEC , VALS ( proto_vals ) , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_SESSION_TUNNEL_ID ] ,
2012-06-11 16:33:56 +00:00
{ " Tunnel ID " , " rsvp.session.tunnel_id " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_SESSION_EXT_TUNNEL_ID ] ,
2012-06-11 16:33:56 +00:00
{ " Extended tunnel ID " , " rsvp.session.ext_tunnel_id " ,
FT_UINT32 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
2013-09-27 20:33:29 +00:00
{ & hf_rsvp_filter [ RSVPF_JUNIPER ] ,
{ " Juniper " , " rsvp.juniper " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
/* Sender template/Filterspec fields */
{ & hf_rsvp_filter [ RSVPF_SENDER_IP ] ,
2012-06-11 16:33:56 +00:00
{ " Sender IPv4 address " , " rsvp.sender.ip " ,
FT_IPv4 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_SENDER_PORT ] ,
2012-06-11 16:33:56 +00:00
{ " Sender port number " , " rsvp.sender.port " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_SENDER_LSP_ID ] ,
2012-06-11 16:33:56 +00:00
{ " Sender LSP ID " , " rsvp.sender.lsp_id " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
/* Diffserv object fields */
{ & hf_rsvp_filter [ RSVPF_DIFFSERV_MAPNB ] ,
2012-06-11 16:33:56 +00:00
{ " MAPnb " , " rsvp.diffserv.mapnb " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
MAPNB_DESCRIPTION , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_DIFFSERV_MAP ] ,
2012-06-11 16:33:56 +00:00
{ " MAP " , " rsvp.diffserv.map " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
MAP_DESCRIPTION , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_DIFFSERV_MAP_EXP ] ,
2012-06-11 16:33:56 +00:00
{ " EXP " , " rsvp.diffserv.map.exp " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
EXP_DESCRIPTION , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_DIFFSERV_PHBID ] ,
2012-06-11 16:33:56 +00:00
{ PHBID_DESCRIPTION , " rsvp.diffserv.phbid " ,
FT_NONE , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_DIFFSERV_PHBID_DSCP ] ,
2012-06-11 16:33:56 +00:00
{ PHBID_DSCP_DESCRIPTION , " rsvp.diffserv.phbid.dscp " ,
FT_UINT16 , BASE_DEC , NULL , PHBID_DSCP_MASK ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_DIFFSERV_PHBID_CODE ] ,
2012-06-11 16:33:56 +00:00
{ PHBID_CODE_DESCRIPTION , " rsvp.diffserv.phbid.code " ,
FT_UINT16 , BASE_DEC , NULL , PHBID_CODE_MASK ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_DIFFSERV_PHBID_BIT14 ] ,
2012-06-11 16:33:56 +00:00
{ PHBID_BIT14_DESCRIPTION , " rsvp.diffserv.phbid.bit14 " ,
FT_UINT16 , BASE_DEC , VALS ( phbid_bit14_vals ) , PHBID_BIT14_MASK ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_DIFFSERV_PHBID_BIT15 ] ,
2012-06-11 16:33:56 +00:00
{ PHBID_BIT15_DESCRIPTION , " rsvp.diffserv.phbid.bit15 " ,
FT_UINT16 , BASE_DEC , VALS ( phbid_bit15_vals ) , PHBID_BIT15_MASK ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
/* Diffserv-aware TE object field */
{ & hf_rsvp_filter [ RSVPF_DSTE_CLASSTYPE ] ,
2012-06-11 16:33:56 +00:00
{ " CT " , " rsvp.dste.classtype " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
/* Generalized UNI object field */
{ & hf_rsvp_filter [ RSVPF_GUNI_SRC_IPV4 ] ,
2012-06-11 16:33:56 +00:00
{ " Source TNA " , " rsvp.guni.srctna.ipv4 " ,
FT_IPv4 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_GUNI_DST_IPV4 ] ,
2012-06-11 16:33:56 +00:00
{ " Destination TNA " , " rsvp.guni.dsttna.ipv4 " ,
FT_IPv4 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_GUNI_SRC_IPV6 ] ,
2012-06-11 16:33:56 +00:00
{ " Source TNA " , " rsvp.guni.srctna.ipv6 " ,
FT_IPv6 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_GUNI_DST_IPV6 ] ,
2012-06-11 16:33:56 +00:00
{ " Destination TNA " , " rsvp.guni.dsttna.ipv6 " ,
FT_IPv6 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
/* Generalized UNI object field */
{ & hf_rsvp_filter [ RSVPF_CALL_ID_SRC_ADDR_IPV4 ] ,
2012-06-11 16:33:56 +00:00
{ " Source Transport Network Address " , " rsvp.callid.srcaddr.ipv4 " ,
FT_IPv4 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2010-05-10 15:54:57 +00:00
{ & hf_rsvp_filter [ RSVPF_CALL_ID_SRC_ADDR_IPV6 ] ,
2012-06-11 16:33:56 +00:00
{ " Source Transport Network Address " , " rsvp.callid.srcaddr.ipv6 " ,
FT_IPv6 , BASE_NONE , NULL , 0x0 ,
NULL , HFILL }
} ,
2011-01-15 03:25:43 +00:00
/*
* FF : Vendor Private object field , please see
2011-01-05 07:16:09 +00:00
* http : //www.iana.org/assignments/enterprise-numbers
*/
{ & hf_rsvp_filter [ RSVPF_ENT_CODE ] ,
2012-06-11 16:33:56 +00:00
{ " Enterprise Code " , " rsvp.obj_private.enterprise " ,
FT_UINT32 , BASE_DEC | BASE_EXT_STRING , & sminmpec_values_ext , 0x0 ,
" IANA Network Management Private Enterprise Code " , HFILL }
2012-09-24 01:59:34 +00:00
} ,
{ & hf_rsvp_error_flags ,
{ " Flags " , " rsvp.error_flags " ,
FT_UINT8 , BASE_HEX , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_error_flags_path_state_removed ,
{ " Path State Removed " , " rsvp.error_flags.path_state_removed " ,
FT_BOOLEAN , 8 , TFS ( & tfs_set_notset ) , 0x04 ,
NULL , HFILL }
} ,
{ & hf_rsvp_error_flags_not_guilty ,
{ " NotGuilty " , " rsvp.error_flags.not_guilty " ,
FT_BOOLEAN , 8 , TFS ( & tfs_set_notset ) , 0x02 ,
NULL , HFILL }
} ,
{ & hf_rsvp_error_flags_in_place ,
{ " InPlace " , " rsvp.error_flags.in_place " ,
FT_BOOLEAN , 8 , TFS ( & tfs_set_notset ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_eth_tspec_tlv_color_mode ,
{ " Color Mode (CM) " , " rsvp.eth_tspec_tlv.color_mode " ,
FT_BOOLEAN , 8 , TFS ( & tfs_set_notset ) , 0x02 ,
NULL , HFILL }
} ,
{ & hf_rsvp_eth_tspec_tlv_coupling_flag ,
{ " Coupling Flag (CF) " , " rsvp.eth_tspec_tlv.coupling_flag " ,
FT_BOOLEAN , 8 , TFS ( & tfs_set_notset ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_standard_contiguous_concatenation ,
{ " Standard contiguous concatenation " , " rsvp.sender_tspec.standard_contiguous_concatenation " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_arbitrary_contiguous_concatenation ,
{ " Arbitrary contiguous concatenation " , " rsvp.sender_tspec.arbitrary_contiguous_concatenation " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x02 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_regenerator_section ,
{ " Section/Regenerator Section layer transparency " , " rsvp.sender_tspec.regenerator_section " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0001 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_multiplex_section ,
{ " Line/Multiplex Section layer transparency " , " rsvp.sender_tspec.multiplex_section " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0002 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_J0_transparency ,
{ " J0 transparency " , " rsvp.sender_tspec.J0_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0004 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_SOH_RSOH_DCC_transparency ,
{ " SOH/RSOH DCC transparency " , " rsvp.sender_tspec.SOH_RSOH_DCC_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0008 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_LOH_MSOH_DCC_transparency ,
{ " LOH/MSOH DCC transparency " , " rsvp.sender_tspec.LOH_MSOH_DCC_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0010 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_LOH_MSOH_extended_DCC_transparency ,
{ " LOH/MSOH Extended DCC transparency " , " rsvp.sender_tspec.LOH_MSOH_extended_DCC_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0020 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_K1_K2_transparency ,
{ " K1/K2 transparency " , " rsvp.sender_tspec.K1_K2_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0040 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_E1_transparency ,
{ " E1 transparency " , " rsvp.sender_tspec.E1_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0080 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_F1_transparency ,
{ " F1 transparency " , " rsvp.sender_tspec.F1_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0100 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_E2_transparency ,
{ " E2 transparency " , " rsvp.sender_tspec.E2_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0200 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_B1_transparency ,
{ " B1 transparency " , " rsvp.sender_tspec.B1_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0400 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_B2_transparency ,
{ " B2 transparency " , " rsvp.sender_tspec.B2_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0800 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_M0_transparency ,
{ " M0 transparency " , " rsvp.sender_tspec.M0_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x1000 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sender_tspec_M1_transparency ,
{ " M1 transparency " , " rsvp.sender_tspec.M1_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x2000 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_standard_contiguous_concatenation ,
{ " Standard contiguous concatenation " , " rsvp.flowspec.standard_contiguous_concatenation " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_arbitrary_contiguous_concatenation ,
{ " Arbitrary contiguous concatenation " , " rsvp.flowspec.arbitrary_contiguous_concatenation " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x02 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_regenerator_section ,
{ " Section/Regenerator Section layer transparency " , " rsvp.flowspec.regenerator_section " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0001 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_multiplex_section ,
{ " Line/Multiplex Section layer transparency " , " rsvp.flowspec.multiplex_section " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0002 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_J0_transparency ,
{ " J0 transparency " , " rsvp.flowspec.J0_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0004 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_SOH_RSOH_DCC_transparency ,
{ " SOH/RSOH DCC transparency " , " rsvp.flowspec.SOH_RSOH_DCC_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0008 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_LOH_MSOH_DCC_transparency ,
{ " LOH/MSOH DCC transparency " , " rsvp.flowspec.LOH_MSOH_DCC_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0010 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_LOH_MSOH_extended_DCC_transparency ,
{ " LOH/MSOH Extended DCC transparency " , " rsvp.flowspec.LOH_MSOH_extended_DCC_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0020 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_K1_K2_transparency ,
{ " K1/K2 transparency " , " rsvp.flowspec.K1_K2_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0040 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_E1_transparency ,
{ " E1 transparency " , " rsvp.flowspec.E1_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0080 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_F1_transparency ,
{ " F1 transparency " , " rsvp.flowspec.F1_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0100 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_E2_transparency ,
{ " E2 transparency " , " rsvp.flowspec.E2_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0200 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_B1_transparency ,
{ " B1 transparency " , " rsvp.flowspec.B1_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0400 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_B2_transparency ,
{ " B2 transparency " , " rsvp.flowspec.B2_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x0800 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_M0_transparency ,
{ " M0 transparency " , " rsvp.flowspec.M0_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x1000 ,
NULL , HFILL }
} ,
{ & hf_rsvp_flowspec_M1_transparency ,
{ " M1 transparency " , " rsvp.flowspec.M1_transparency " ,
FT_BOOLEAN , 32 , TFS ( & tfs_yes_no ) , 0x2000 ,
NULL , HFILL }
} ,
{ & hf_rsvp_integrity_flags_handshake ,
{ " Handshake " , " rsvp.integrity.flags.handshake " ,
FT_BOOLEAN , 8 , TFS ( & tfs_capable_not_capable ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sa_flags_local ,
{ " Local protection " , " rsvp.sa.flags.local " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sa_flags_label ,
{ " Label recording " , " rsvp.sa.flags.label " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x02 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sa_flags_se_style ,
{ " SE style " , " rsvp.sa.flags.se_style " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x04 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sa_flags_bandwidth ,
{ " Bandwidth protection " , " rsvp.sa.flags.bandwidth " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x08 ,
NULL , HFILL }
} ,
{ & hf_rsvp_sa_flags_node ,
{ " Node protection " , " rsvp.sa.flags.node " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x10 ,
NULL , HFILL }
} ,
{ & hf_rsvp_rro_flags_local_avail ,
{ " Local Protection " , " rsvp.rro.flags.local_avail " ,
FT_BOOLEAN , 8 , TFS ( & tfs_available_not_available ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_rro_flags_local_in_use ,
{ " Local Protection " , " rsvp.rro.flags.local_in_use " ,
FT_BOOLEAN , 8 , TFS ( & tfs_used_notused ) , 0x02 ,
NULL , HFILL }
} ,
{ & hf_rsvp_rro_flags_bandwidth ,
{ " Bandwidth Protection " , " rsvp.rro.flags.bandwidth " ,
FT_BOOLEAN , 8 , TFS ( & tfs_available_not_available ) , 0x04 ,
NULL , HFILL }
} ,
{ & hf_rsvp_rro_flags_node ,
{ " Node Protection " , " rsvp.rro.flags.node " ,
FT_BOOLEAN , 8 , TFS ( & tfs_available_not_available ) , 0x08 ,
NULL , HFILL }
} ,
{ & hf_rsvp_rro_flags_node_address ,
{ " Address Specifies a Node-id Address " , " rsvp.rro.flags.node_address " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x10 ,
NULL , HFILL }
} ,
{ & hf_rsvp_rro_flags_backup_tunnel_bandwidth ,
{ " Backup Tunnel Has Bandwidth " , " rsvp.rro.flags.backup_tunnel_bandwidth " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x04 ,
NULL , HFILL }
} ,
{ & hf_rsvp_rro_flags_backup_tunnel_hop ,
{ " Backup Tunnel Goes To " , " rsvp.rro.flags.backup_tunnel_hop " ,
FT_BOOLEAN , 8 , TFS ( & tfs_next_next_hop_next_hop ) , 0x08 ,
NULL , HFILL }
} ,
2012-10-30 09:13:13 +00:00
{ & hf_rsvp_rro_flags_global_label ,
{ " Global label " , " rsvp.rro.flags.global_label " ,
FT_BOOLEAN , 8 , NULL , 0x01 ,
NULL , HFILL }
} ,
2012-09-24 01:59:34 +00:00
{ & hf_rsvp_lsp_attr_e2e ,
2013-08-07 23:07:15 +00:00
{ " End-to-end re-routing " , " rsvp.lsp_attr.e2e " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000001 , /* 0 */
2012-09-24 01:59:34 +00:00
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_boundary ,
{ " Boundary re-routing " , " rsvp.lsp_attr.boundary " ,
2013-08-07 23:07:15 +00:00
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000002 , /* 1 */
2012-09-24 01:59:34 +00:00
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_segment ,
{ " Segment-based re-routing " , " rsvp.lsp_attr.segment " ,
2013-08-07 23:07:15 +00:00
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000004 , /* 2 */
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_integrity ,
{ " LSP Integrity Required " , " rsvp.lsp_attr.integrity " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000008 , /* 3 */
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_contiguous ,
{ " Contiguous LSP " , " rsvp.lsp_attr.contiguous " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000010 , /* 4 */
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_stitching ,
{ " LSP stitching desired " , " rsvp.lsp_attr.stitching " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000020 , /* 5 */
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_preplanned ,
{ " Pre-Planned LSP Flag " , " rsvp.lsp_attr.preplanned " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000040 , /* 6 */
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_nophp ,
{ " Non-PHP behavior flag " , " rsvp.lsp_attr.nophp " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000080 , /* 7 */
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_oobmap ,
{ " OOB mapping flag " , " rsvp.lsp_attr.oobmap " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000100 , /* 8 */
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_entropy ,
{ " Entropy Label Capability " , " rsvp.lsp_attr.entropy " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000200 , /* 9 */
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_srlgcollect ,
{ " SRLG Collection Flag " , " rsvp.lsp_attr.srlgcollect " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000400 , /* 10 */
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_costcollect ,
{ " Cost Collection Flag " , " rsvp.lsp_attr.costcollect " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00000800 , /* 11 */
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_latcollect ,
{ " Latency Collection Flag " , " rsvp.lsp_attr.latcollect " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00001000 , /* 12 */
NULL , HFILL }
} ,
{ & hf_rsvp_lsp_attr_latvarcollect ,
{ " Latency Variation Flag " , " rsvp.lsp_attr.latvarcollect " ,
FT_BOOLEAN , 32 , TFS ( & tfs_desired_not_desired ) , 0x00002000 , /* 13 */
2012-09-24 01:59:34 +00:00
NULL , HFILL }
} ,
{ & hf_rsvp_gen_uni_direction ,
{ " Direction " , " rsvp.gen_uni.direction " ,
FT_BOOLEAN , 8 , TFS ( & tfs_gen_uni_direction ) , 0x80 ,
NULL , HFILL }
} ,
{ & hf_rsvp_protection_info_flags_secondary_lsp ,
{ " Secondary LSP " , " rsvp.pi.flags.secondary_lsp " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_link_flags_extra_traffic ,
{ " Extra Traffic " , " rsvp.pi_link.flags.extra_traffic " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_link_flags_unprotected ,
{ " Unprotected " , " rsvp.pi_link.flags.unprotected " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x02 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_link_flags_shared ,
{ " Shared " , " rsvp.pi_link.flags.shared " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x04 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_link_flags_dedicated1_1 ,
{ " Dedicated 1:1 " , " rsvp.pi_link.flags.dedicated1_1 " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x08 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_link_flags_dedicated1plus1 ,
{ " Dedicated 1+1 " , " rsvp.pi_link.flags.dedicated1plus1 " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x10 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_link_flags_enhanced ,
{ " Enhanced " , " rsvp.pi_link.flags.enhanced " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x20 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_link_flags_extra ,
{ " Extra Traffic " , " rsvp.pi_link.flags.extra " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_link_flags_dedicated_1_1 ,
{ " Dedicated 1:1 " , " rsvp.pi_link.flags.dedicated_1_1 " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x08 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_link_flags_dedicated_1plus1 ,
{ " Dedicated 1+1 " , " rsvp.pi_link.flags.dedicated_1plus1 " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x10 ,
NULL , HFILL }
} ,
{ & hf_rsvp_rfc4872_secondary ,
{ " Secondary LSP " , " rsvp.rfc4872.secondary " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL }
} ,
{ & hf_rsvp_rfc4872_protecting ,
{ " Protecting LSP " , " rsvp.rfc4872.protecting " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x40 ,
NULL , HFILL }
} ,
{ & hf_rsvp_rfc4872_notification_msg ,
{ " Protecting LSP " , " rsvp.rfc4872.notification_msg " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x20 ,
NULL , HFILL }
} ,
{ & hf_rsvp_rfc4872_operational ,
{ " Protecting LSP " , " rsvp.rfc4872.operational " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x10 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_lsp_flags_full_rerouting ,
{ " (Full) rerouting " , " rsvp.pi_lsp.flags.full_rerouting " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_lsp_flags_rerouting_extra ,
{ " Rerouting without extra-traffic " , " rsvp.pi_lsp.flags.rerouting_extra " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x02 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_lsp_flags_1_n_protection ,
{ " 1:N protection with extra-traffic " , " rsvp.pi_lsp.flags.1_n_protection " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x04 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_lsp_flags_1plus1_unidirectional ,
{ " 1+1 unidirectional protection " , " rsvp.pi_lsp.flags.1plus1_unidirectional " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x08 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_lsp_flags_1plus1_bidirectional ,
{ " 1+1 bidirectional protection " , " rsvp.pi_lsp.flags.1plus1_bidirectional " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x10 ,
NULL , HFILL }
} ,
{ & hf_rsvp_protection_info_in_place ,
{ " In-Place " , " rsvp.protection_info.in_place " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x80 ,
NULL , HFILL }
} ,
{ & hf_rsvp_protection_info_required ,
{ " Required " , " rsvp.protection_info.required " ,
FT_BOOLEAN , 8 , TFS ( & tfs_yes_no ) , 0x40 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_seg_flags_full_rerouting ,
{ " (Full) rerouting " , " rsvp.pi_seg.flags.full_rerouting " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_seg_flags_rerouting_extra ,
{ " Rerouting without extra-traffic " , " rsvp.pi_seg.flags.rerouting_extra " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x02 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_seg_flags_1_n_protection ,
{ " 1:N protection with extra-traffic " , " rsvp.pi_seg.flags.1_n_protection " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x04 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_seg_flags_1plus1_unidirectional ,
{ " 1+1 unidirectional protection " , " rsvp.pi_seg.flags.1plus1_unidirectional " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x08 ,
NULL , HFILL }
} ,
{ & hf_rsvp_pi_seg_flags_1plus1_bidirectional ,
{ " 1+1 bidirectional protection " , " rsvp.pi_seg.flags.1plus1_bidirectional " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x10 ,
NULL , HFILL }
} ,
{ & hf_rsvp_frr_flags_one2one_backup ,
{ " One-to-One Backup " , " rsvp.frr.flags.one2one_backup " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x01 ,
NULL , HFILL }
} ,
{ & hf_rsvp_frr_flags_facility_backup ,
{ " Facility Backup " , " rsvp.frr.flags.facility_backup " ,
FT_BOOLEAN , 8 , TFS ( & tfs_desired_not_desired ) , 0x02 ,
NULL , HFILL }
} ,
2013-03-31 22:08:00 +00:00
{ & hf_rsvp_c_type ,
{ " C-Type " , " rsvp.ctype " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_tid ,
{ " Transaction ID " , " rsvp.3gpp_obj.tid " ,
FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_ie_len ,
{ " Length " , " rsvp.3gpp_obj.length " ,
FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_ie_type ,
{ " IE Type " , " rsvp.3gpp_obj.ie_type " ,
FT_UINT32 , BASE_DEC , VALS ( rsvp_3gpp_object_ie_type_vals ) , 0 ,
NULL , HFILL }
} ,
2013-04-02 05:54:47 +00:00
{ & hf_rsvp_3gpp_obj_ue_ipv4_addr ,
{ " UE IPv4 address " , " rsvp.3gpp_obj.ue_ipv4_addr " ,
FT_IPv4 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_ue_ipv6_addr ,
{ " UE IPv6 address " , " rsvp.3gpp_obj.ue_ipv6_addr " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_tft_d ,
{ " Direction(D) " , " rsvp.3gpp_obj.tft_d " ,
FT_UINT32 , BASE_DEC , VALS ( rsvp_3gpp_object_tft_d_vals ) , 0xc0000000 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_tft_ns ,
{ " Non-Specific bit(NS) " , " rsvp.3gpp_obj.tft_ns " ,
FT_UINT32 , BASE_DEC , NULL , 0x08000000 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_tft_sr_id ,
{ " SR_ID " , " rsvp.3gpp_obj.tft_sr_id " ,
FT_UINT32 , BASE_DEC , NULL , 0x07000000 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_tft_p ,
{ " Persistency(P) " , " rsvp.3gpp_obj.tft_p " ,
FT_UINT32 , BASE_DEC , NULL , 0x00010000 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_tft_opcode ,
{ " TFT Operation Code " , " rsvp.3gpp_obj.tft_opcode " ,
FT_UINT32 , BASE_DEC , VALS ( rsvp_3gpp_obj_tft_opcode_vals ) , 0x000ff00 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_tft_n_pkt_flt ,
{ " Number of Packet filters " , " rsvp.3gpp_obj.tft_n_pkt_flt " ,
FT_UINT32 , BASE_DEC , NULL , 0x00000ff ,
NULL , HFILL }
2013-04-03 16:50:35 +00:00
} ,
2013-04-04 16:23:55 +00:00
{ & hf_rsvp_3gpp_obj_flow_id ,
2013-04-03 16:50:35 +00:00
{ " Flow Identifier " , " rsvp.3gpp_obj.flow_id " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2013-04-04 16:23:55 +00:00
{ & hf_rsvp_3gpp_obj_pf_ev_prec ,
2013-04-03 16:50:35 +00:00
{ " Packet filter evaluation precedence " , " rsvp.3gpp_obj.pf_ev_prec " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2013-04-04 16:23:55 +00:00
{ & hf_rsvp_3gpp_obj_pf_len ,
2013-04-03 16:50:35 +00:00
{ " Packet filter length " , " rsvp.3gpp_obj.pf_len " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2013-04-04 16:23:55 +00:00
{ & hf_rsvp_3gpp_obj_pf_type ,
2013-04-03 16:50:35 +00:00
{ " PF Type " , " rsvp.3gpp_obj.pf_type " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2013-04-04 16:23:55 +00:00
{ & hf_rsvp_3gpp_obj_pf_cont_len ,
2013-04-03 16:50:35 +00:00
{ " Length " , " rsvp.3gpp_obj.pf_cont_len " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2013-04-04 16:23:55 +00:00
{ & hf_rsvp_3gpp_obj_pf_comp_type_id ,
2013-04-03 16:50:35 +00:00
{ " PF component identifier " , " rsvp.3gpp_obj.pf_comp_type_id " ,
FT_UINT8 , BASE_DEC , VALS ( rsvp_3gpp_obj_pf_comp_type_id_vals ) , 0 ,
NULL , HFILL }
} ,
2013-04-04 16:23:55 +00:00
{ & hf_rsvp_3gpp_obj_pf_src_ipv4 ,
{ " IPv4 Source Address " , " rsvp.3gpp_obj.pf_src_ipv4 " ,
FT_IPv4 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_dst_ipv4 ,
{ " IPv4 Destination Address " , " rsvp.3gpp_obj.pf_dst_ipv4 " ,
FT_IPv4 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_ipv4_mask ,
{ " IPv4 Mask " , " rsvp.3gpp_obj.pf_ipv4_mask " ,
FT_UINT32 , BASE_HEX , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_src_ipv6 ,
{ " IPv6 Source Address " , " rsvp.3gpp_obj.pf_src_ipv6 " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_dst_ipv6 ,
{ " IPv6 Destination Address " , " rsvp.3gpp_obj.pf_dst_ipv6 " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_ipv6_prefix_length ,
{ " IPv6 Prefix length " , " rsvp.3gpp_obj.pf_ipv6_prefix_length " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_prot_next ,
{ " Protocol field(IPv4) or Next Header(IPv6) " , " rsvp.3gpp_obj.pf_prot_next " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_dst_port ,
{ " Single Destination Port " , " rsvp.3gpp_obj.pf_dst_port " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2013-12-23 21:39:09 +00:00
#if 0
2013-04-04 16:23:55 +00:00
{ & hf_rsvp_3gpp_obj_pf_src_port ,
{ " Single Source Port " , " rsvp.3gpp_obj.pf_src_port " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2013-12-23 21:39:09 +00:00
# endif
2013-04-04 16:23:55 +00:00
{ & hf_rsvp_3gpp_obj_pf_ipsec_spi ,
{ " IPsec SPI " , " rsvp.3gpp_obj.pf_ipsec_spi " ,
FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_tos_tc ,
2013-07-06 02:53:45 +00:00
{ " Type of Service (IPv4)/Traffic Class (IPv6) " , " rsvp.3gpp_obj.pf_tos_tc " ,
2013-04-04 16:23:55 +00:00
FT_UINT8 , BASE_HEX , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_flow_lbl ,
{ " Flow label " , " rsvp.3gpp_obj.pf_flow_lbl " ,
FT_UINT24 , BASE_DEC , NULL , 0x0fffff ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_ipv6 ,
{ " IPv6 Address " , " rsvp.3gpp_obj.pf_ipv6 " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_treatment ,
{ " PF Treatment " , " rsvp.3gpp_obj.pf_treatment " ,
FT_UINT8 , BASE_DEC , VALS ( rsvp_3gpp_obj_pf_treatment_vals ) , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_pf_hint ,
{ " PF Hint " , " rsvp.3gpp_obj.pf_hint " ,
FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_obj_tft_qos_list_len ,
2013-04-03 16:50:35 +00:00
{ " QoS List Length " , " rsvp.3gpp_obj.qos_list_len " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
2013-04-02 05:54:47 +00:00
} ,
2013-04-04 16:23:55 +00:00
{ & hf_rsvp_3gpp_r_qos_blob_len ,
{ " R_QOS_SUB_BLOB_LEN " , " rsvp.3gpp_obj.r_qos_blob_len " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2013-04-19 16:06:01 +00:00
{ & hf_rsvp_3gpp_r_qos_blob_flow_pri ,
{ " FLOW_PRIORITY " , " rsvp.3gpp_obj.r_qos_blob.flow_pri " ,
FT_UINT8 , BASE_DEC , NULL , 0xf0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_r_qos_blob_num_qos_att_set ,
{ " NUM_QoS_ATTRIBUTE_SETS " , " rsvp.3gpp_obj.r_qos_blob.num_qos_att_set " ,
FT_UINT8 , BASE_DEC , NULL , 0x0e ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_att_set_len ,
{ " QoS_ATTRIBUTE_SET_LEN " , " rsvp.3gpp_obj.r_qos_blob.qos_att_set_len " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_attribute_set_id ,
{ " QoS_ATTRIBUTE_SET_ID " , " rsvp.3gpp_obj.r_qos_blob.qos_attribute_set_id " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_attribute_verbose ,
{ " VERBOSE " , " rsvp.3gpp_obj.r_qos_blob.verbose " ,
FT_BOOLEAN , 8 , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_attribute_prof_id ,
{ " ProfileID " , " rsvp.3gpp_obj.r_qos_blob.prof_id " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_attribute_traff_cls ,
{ " Traffic_Class " , " rsvp.3gpp_obj.r_qos_blob.traff_cls " ,
FT_UINT8 , BASE_DEC , VALS ( rsvp_3gpp_obj_traffic_class_vals ) , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_attribute_peak_rate ,
{ " Peak_Rate " , " rsvp.3gpp_obj.r_qos_blob.peak_rate " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_attribute_bucket_size ,
{ " Bucket_Size " , " rsvp.3gpp_obj.r_qos_blob.bucket_size " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_attribute_token_rate ,
{ " Token_Rate " , " rsvp.3gpp_obj.r_qos_blob.token_rate " ,
FT_UINT16 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_attribute_max_latency ,
{ " Max_Latency " , " rsvp.3gpp_obj.r_qos_blob.max_latency " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_attribute_max_loss_rte ,
{ " Max_Loss_Rate " , " rsvp.3gpp_obj.r_qos_blob.max_loss_rte " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_attribute_delay_var_sensitive ,
{ " Delay_Var_Sensitive " , " rsvp.3gpp_obj.r_qos_blob.delay_var_sensitive " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2013-04-23 16:59:07 +00:00
{ & hf_rsvp_3gpp_qos_attribute_reserved ,
{ " Reserved " , " rsvp.3gpp_obj.r_qos_blob.reserved " ,
FT_UINT8 , BASE_DEC , NULL , 0x0 ,
NULL , HFILL }
} ,
2013-04-04 16:23:55 +00:00
{ & hf_rsvp_3gpp_r_qos_blob ,
{ " R_QOS_SUB_BLOB " , " rsvp.3gpp_obj.r_qos_blob " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL }
} ,
{ & hf_rsvp_3gpp_qos_result ,
{ " Result Code " , " rsvp.3gpp_obj.qos_result_code " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL }
} ,
2013-08-07 23:07:15 +00:00
{ & hf_rsvp_xro_sobj_lbit ,
{ " L(oose) bit " , " rsvp.xro.sobj.lbit " ,
FT_UINT8 , BASE_DEC , VALS ( rsvp_xro_sobj_lbit_vals ) , 0x80 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_xro_sobj_type ,
{ " Type " , " rsvp.xro.sobj.type " ,
FT_UINT8 , BASE_DEC , VALS ( rsvp_xro_sobj_type_vals ) , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_xro_sobj_len ,
{ " Length " , " rsvp.xro.sobj.len " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_xro_sobj_ipv4_addr ,
{ " IPv4 prefix " , " rsvp.xro.sobj.ipv4.addr " ,
FT_IPv4 , BASE_NONE , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_xro_sobj_ipv4_prefix ,
{ " Prefix Length " , " rsvp.xro.sobj.ipv4.prefix " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_xro_sobj_ipv4_attr ,
{ " Attribute " , " rsvp.xro.sobj.ipv4.attr " ,
FT_UINT8 , BASE_DEC , VALS ( rsvp_xro_sobj_ip_attr_vals ) , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_xro_sobj_ipv6_addr ,
{ " IPv6 prefix " , " rsvp.xro.sobj.ipv6.addr " ,
FT_IPv6 , BASE_NONE , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_xro_sobj_ipv6_prefix ,
{ " Prefix Length " , " rsvp.xro.sobj.ipv6.prefix " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_xro_sobj_ipv6_attr ,
{ " Attribute " , " rsvp.xro.sobj.ipv6.attr " ,
FT_UINT8 , BASE_DEC , VALS ( rsvp_xro_sobj_ip_attr_vals ) , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_xro_sobj_srlg_id ,
{ " SRLG Id " , " rsvp.xro.sobj.srlg.id " ,
FT_UINT32 , BASE_DEC , NULL , 0 ,
NULL , HFILL
}
} ,
2013-09-27 20:33:29 +00:00
{ & hf_rsvp_xro_sobj_srlg_res ,
{ " Reserved " , " rsvp.xro.sobj.srlg.res " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL
}
} ,
2013-09-25 10:11:07 +00:00
{ & hf_rsvp_private_data ,
{ " Data " , " rsvp.private.data " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL
}
} ,
2013-09-29 22:40:25 +00:00
{ & hf_rsvp_juniper_numtlvs ,
{ " Num TLVs " , " rsvp.juniper.tlvs " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_juniper_padlength ,
{ " Padlength " , " rsvp.juniper.padlength " ,
FT_UINT16 , BASE_DEC , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_juniper_type ,
{ " Juniper type " , " rsvp.juniper.type " ,
FT_UINT8 , BASE_HEX , VALS ( rsvp_juniper_attr_vals ) , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_juniper_length ,
{ " Juniper length " , " rsvp.juniper.length " ,
FT_UINT8 , BASE_DEC , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_juniper_attrib_cos ,
{ " Cos " , " rsvp.juniper.attrib.cos " ,
FT_UINT16 , BASE_HEX , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_juniper_attrib_metric1 ,
{ " Metric 1 " , " rsvp.juniper.attrib.metric1 " ,
FT_UINT16 , BASE_HEX , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_juniper_attrib_metric2 ,
{ " Metric 2 " , " rsvp.juniper.attrib.metric2 " ,
FT_UINT16 , BASE_HEX , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_juniper_attrib_ccc_status ,
{ " CCC Status " , " rsvp.juniper.attrib.ccc_status " ,
FT_UINT16 , BASE_HEX , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_juniper_attrib_path ,
{ " Path type " , " rsvp.juniper.attrib.path " ,
FT_UINT16 , BASE_HEX , VALS ( rsvp_juniper_path_attr_vals ) , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_juniper_attrib_unknown ,
{ " Unknown " , " rsvp.juniper.attrib.unknown " ,
FT_UINT16 , BASE_HEX , NULL , 0 ,
NULL , HFILL
}
} ,
{ & hf_rsvp_juniper_pad ,
{ " Pad " , " rsvp.juniper.pad " ,
2013-09-25 10:11:07 +00:00
FT_BYTES , BASE_NONE , NULL , 0 ,
NULL , HFILL
}
} ,
2013-09-29 22:40:25 +00:00
{ & hf_rsvp_juniper_unknown ,
{ " Unknown " , " rsvp.juniper.unknown " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
2013-09-27 20:33:29 +00:00
NULL , HFILL
}
} ,
{ & hf_rsvp_unknown_data ,
{ " Data " , " rsvp.unknown.data " ,
FT_BYTES , BASE_NONE , NULL , 0 ,
2013-08-07 23:07:15 +00:00
NULL , HFILL
}
2013-12-24 23:41:24 +00:00
} ,
/* Generated from convert_proto_tree_add_text.pl */
{ & hf_rsvp_session_flags , { " Flags " , " rsvp.session.flags " , FT_UINT8 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_destination_address , { " Destination address " , " rsvp.session.destination_address " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_protocol , { " Protocol " , " rsvp.session.protocol " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_destination_port , { " Destination port " , " rsvp.session.destination_port " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_dscp , { " DSCP " , " rsvp.session.dscp " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & dscp_vals_ext , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_extended_ipv4_address , { " Extended IPv4 Address " , " rsvp.session.extended_ipv4_address " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_data , { " Data " , " rsvp.session.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ifid_tlv_length , { " Length " , " rsvp.ifid_tlv.length " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ifid_tlv_ipv4_address , { " IPv4 address " , " rsvp.ifid_tlv.ipv4_address " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ifid_tlv_ipv6_address , { " IPv6 address " , " rsvp.ifid_tlv.ipv6_address " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ifid_tlvinterface_id , { " Interface-ID " , " rsvp.ifid_tlv.interface_id " , FT_UINT32 , BASE_DEC_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ifid_tlv_label , { " Label " , " rsvp.ifid_tlv.label " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ifid_tlv_node_id , { " Node ID " , " rsvp.ifid_tlv.node_id " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ifid_tlv_area , { " Area " , " rsvp.ifid_tlv.area " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ifid_tlv_autonomous_system , { " Autonomous System " , " rsvp.ifid_tlv.autonomous_system " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ifid_tlv_error_string , { " Error String " , " rsvp.ifid_tlv.error_string " , FT_STRING , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ifid_tlv_data , { " Data " , " rsvp.ifid_tlv.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ifid_tlv_padding , { " Padding " , " rsvp.ifid_tlv.padding " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_hop_neighbor_address_ipv4 , { " Neighbor address " , " rsvp.hop.neighbor_address_ipv4 " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_hop_logical_interface , { " Logical interface " , " rsvp.hop.logical_interface " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_hop_neighbor_address_ipv6 , { " Neighbor address " , " rsvp.neighbor_address_ipv6 " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_hop_data , { " Data " , " rsvp.hop.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_time_values_data , { " Data " , " rsvp.time_values.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_error_error_node_ipv4 , { " Error node " , " rsvp.error.error_node_ipv4 " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_error_error_node_ipv6 , { " Error node " , " rsvp.error.error_node_ipv6 " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_error_data , { " Data " , " rsvp.error.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_error_error_code , { " Error code " , " rsvp.error.error_code " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & rsvp_error_codes_ext , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_scope_ipv4_address , { " IPv4 Address " , " rsvp.scope.ipv4_address " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_scope_ipv6_address , { " IPv6 Address " , " rsvp.scope.ipv6_address " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_scope_data , { " Data " , " rsvp.scope.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_style_flags , { " Flags " , " rsvp.style.flags " , FT_UINT8 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_style_style , { " Style " , " rsvp.style.style " , FT_UINT24 , BASE_HEX , VALS ( style_vals ) , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_style_data , { " Data " , " rsvp.style.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_confirm_receiver_address_ipv4 , { " Receiver address " , " rsvp.confirm.receiver_address_ipv4 " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_confirm_receiver_address_ipv6 , { " Receiver address " , " rsvp.confirm.receiver_address_ipv6 " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_confirm_data , { " Data " , " rsvp.confirm.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_template_filter_source_address_ipv6 , { " Source address " , " rsvp.template_filter.source_address_ipv6 " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_template_filter_source_port , { " Source port " , " rsvp.template_filter.source_port " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_template_filter_data , { " Data " , " rsvp.template_filter.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_eth_tspec_length , { " Length " , " rsvp.eth_tspec.length " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_eth_tspec_profile , { " Profile " , " rsvp.eth_tspec.profile " , FT_UINT8 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_eth_tspec_index , { " Index " , " rsvp.eth_tspec.index " , FT_UINT8 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_eth_tspec_reserved , { " Reserved " , " rsvp.eth_tspec.reserved " , FT_UINT16 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_eth_tspec_cir , { " CIR " , " rsvp.eth_tspec.cir " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_eth_tspec_cbs , { " CBS " , " rsvp.eth_tspec.cbs " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_eth_tspec_eir , { " EIR " , " rsvp.eth_tspec.eir " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_eth_tspec_ebs , { " EBS " , " rsvp.eth_tspec.ebs " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_message_format_version , { " Message format version " , " rsvp.tspec.message_format_version " , FT_UINT8 , BASE_DEC , NULL , 0xF0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_service_header , { " Service header " , " rsvp.tspec.service_header " , FT_UINT8 , BASE_DEC , VALS ( qos_vals ) , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_token_bucket_rate , { " Token bucket rate " , " rsvp.tspec.token_bucket_rate " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_token_bucket_size , { " Token bucket size " , " rsvp.tspec.token_bucket_size " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_peak_data_rate , { " Peak data rate " , " rsvp.tspec.peak_data_rate " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_hint , { " Hint " , " rsvp.tspec.hint " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_compression_factor , { " Compression Factor " , " rsvp.tspec.compression_factor " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_signal_type_sonet , { " Signal Type " , " rsvp.tspec.signal_type " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & gmpls_sonet_signal_type_str_ext , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_requested_concatenation , { " Requested Concatenation (RCC) " , " rsvp.tspec.requested_concatenation " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_number_of_contiguous_components , { " Number of Contiguous Components (NCC) " , " rsvp.tspec.number_of_contiguous_components " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_number_of_virtual_components , { " Number of Virtual Components (NVC) " , " rsvp.tspec.number_of_virtual_components " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_multiplier , { " Multiplier (MT) " , " rsvp.tspec.multiplier " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_transparency , { " Transparency (T) " , " rsvp.tspec.transparency " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_profile , { " Profile (P) " , " rsvp.tspec.profile " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
2014-01-27 18:22:39 +00:00
{ & hf_rsvp_tspec_signal_type_g709 , { " Signal Type " , " rsvp.tspec.signal_type " , FT_UINT8 , BASE_DEC | BASE_RANGE_STRING , RVALS ( gmpls_g709_signal_type_rvals ) , 0x0 , NULL , HFILL } } ,
2013-12-24 23:41:24 +00:00
{ & hf_rsvp_tspec_number_of_multiplexed_components , { " Number of Multiplexed Components (NMC) " , " rsvp.number_of_multiplexed_components " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_mtu , { " MTU " , " rsvp.tspec.mtu " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_tspec_data , { " Data " , " rsvp.tspec.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_message_format_version , { " Message format version " , " rsvp.flowspec.message_format_version " , FT_UINT8 , BASE_DEC , NULL , 0xF0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_service_header , { " Service header " , " rsvp.flowspec.service_header " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & intsrv_services_str_ext , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_token_bucket_rate , { " Token bucket rate " , " rsvp.flowspec.token_bucket_rate " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_token_bucket_size , { " Token bucket size " , " rsvp.flowspec.token_bucket_size " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_peak_data_rate , { " Peak data rate " , " rsvp.flowspec.peak_data_rate " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_rate , { " Rate " , " rsvp.flowspec.rate " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_slack_term , { " Slack term " , " rsvp.flowspec.slack_term " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_signal_type_sonet , { " Signal Type " , " rsvp.flowspec.signal_type " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & gmpls_sonet_signal_type_str_ext , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_requested_concatenation , { " Requested Concatenation (RCC) " , " rsvp.flowspec.requested_concatenation " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_number_of_contiguous_components , { " Number of Contiguous Components (NCC) " , " rsvp.flowspec.number_of_contiguous_components " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_number_of_virtual_components , { " Number of Virtual Components (NVC) " , " rsvp.flowspec.number_of_virtual_components " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_multiplier , { " Multiplier (MT) " , " rsvp.flowspec.multiplier " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_transparency , { " Transparency (T) " , " rsvp.flowspec.transparency " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_profile , { " Profile (P) " , " rsvp.flowspec.profile " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
2014-01-27 18:22:39 +00:00
{ & hf_rsvp_flowspec_signal_type_g709 , { " Signal Type " , " rsvp.flowspec.signal_type " , FT_UINT8 , BASE_DEC | BASE_RANGE_STRING , RVALS ( gmpls_g709_signal_type_rvals ) , 0x0 , NULL , HFILL } } ,
2013-12-24 23:41:24 +00:00
{ & hf_rsvp_flowspec_number_of_multiplexed_components , { " Number of Multiplexed Components (NMC) " , " rsvp.flowspec.number_of_multiplexed_components " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_flowspec_mtu , { " MTU " , " rsvp.flowspec.mtu " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_adspec_message_format_version , { " Message format version " , " rsvp.adspec.message_format_version " , FT_UINT8 , BASE_DEC , NULL , 0xF0 , NULL , HFILL } } ,
{ & hf_rsvp_adspec_service_header , { " Service header " , " rsvp.adspec.service_header " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & intsrv_services_str_ext , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_integrity_flags , { " Flags " , " rsvp.integrity.flags " , FT_UINT8 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_integrity_key_identifier , { " Key Identifier " , " rsvp.integrity.key_identifier " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_integrity_sequence_number , { " Sequence Number " , " rsvp.integrity.sequence_number " , FT_UINT64 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_integrity_hash , { " Hash " , " rsvp.integrity.hash " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_policy_data , { " Data " , " rsvp.policy.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_label_request_l3pid , { " L3PID " , " rsvp.label_request.l3pid " , FT_UINT16 , BASE_HEX , VALS ( etype_vals ) , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_label_request_min_vpi , { " Min VPI " , " rsvp.label_request.min_vpi " , FT_UINT16 , BASE_DEC , NULL , 0x7f , NULL , HFILL } } ,
{ & hf_rsvp_label_request_min_vci , { " Min VCI " , " rsvp.label_request.min_vci " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_label_request_max_vpi , { " Max VPI " , " rsvp.label_request.max_vpi " , FT_UINT16 , BASE_DEC , NULL , 0x7f , NULL , HFILL } } ,
{ & hf_rsvp_label_request_max_vci , { " Max VCI " , " rsvp.label_request.max_vci " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
2014-01-27 18:22:39 +00:00
{ & hf_rsvp_label_request_lsp_encoding_type , { " LSP Encoding Type " , " rsvp.label_request.lsp_encoding_type " , FT_UINT8 , BASE_DEC | BASE_RANGE_STRING , RVALS ( gmpls_lsp_enc_rvals ) , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_label_request_switching_type , { " Switching Type " , " rsvp.label_request.switching_type " , FT_UINT8 , BASE_DEC | BASE_RANGE_STRING , RVALS ( gmpls_switching_type_rvals ) , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_g_pid , { " G-PID " , " rsvp.label_request.g_pid " , FT_UINT16 , BASE_HEX | BASE_RANGE_STRING , RVALS ( gmpls_gpid_rvals ) , 0x0 , NULL , HFILL } } ,
2013-12-24 23:41:24 +00:00
{ & hf_rsvp_label_request_data , { " Data " , " rsvp.label_request.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_label_label , { " Label " , " rsvp.label.label " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_label_generalized_label , { " Generalized Label " , " rsvp.label.generalized_label " , FT_UINT32 , BASE_DEC_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_label_data , { " Data " , " rsvp.label.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_label_set_action , { " Action " , " rsvp.label_set.action " , FT_UINT8 , BASE_DEC , VALS ( action_type_vals ) , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_attribute_exclude_any , { " Exclude-Any " , " rsvp.session_attribute.exclude_any " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_attribute_include_any , { " Include-Any " , " rsvp.session_attribute.include_any " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_attribute_include_all , { " Include-All " , " rsvp.session_attribute.include_all " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_attribute_setup_priority , { " Setup priority " , " rsvp.session_attribute.setup_priority " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_attribute_hold_priority , { " Hold priority " , " rsvp.session_attribute.hold_priority " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_attribute_flags , { " Flags " , " rsvp.session_attribute.flags " , FT_UINT8 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_attribute_name_length , { " Name length " , " rsvp.session_attribute.name_length " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_attribute_name , { " Name " , " rsvp.session_attribute.name " , FT_STRING , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_session_attribute_data , { " Data " , " rsvp.session_attribute.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_length , { " Length " , " rsvp.ero_rro_subobjects.length " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_ipv4_hop , { " IPv4 hop " , " rsvp.ero_rro_subobjects.ipv4_hop " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_prefix_length , { " Prefix length " , " rsvp.ero_rro_subobjects.prefix_length " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_flags , { " Flags " , " rsvp.ero_rro_subobjects.flags " , FT_UINT8 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_ipv6_hop , { " IPv6 hop " , " rsvp.ero_rro_subobjects.ipv6_hop " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_label , { " Label " , " rsvp.ero_rro_subobjects.label " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_router_id , { " Router-ID " , " rsvp.ero_rro_subobjects.router_id " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_interface_id , { " Interface-ID " , " rsvp.ero_rro_subobjects.interface_id " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_path_key , { " Path Key " , " rsvp.ero_rro_subobjects.path_key " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_pce_id_ipv4 , { " PCE-ID " , " rsvp.ero_rro_subobjects.pce_id_ipv4 " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_pce_id_ipv6 , { " PCE-ID " , " rsvp.ero_rro_subobjects.pce_id_ipv6 " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_private_length , { " Length " , " rsvp.ero_rro_subobjects.private_length " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_ero_rro_subobjects_private_data , { " Data " , " rsvp.ero_rro_subobjects.private_data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_explicit_route_data , { " Data " , " rsvp.explicit_route.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_record_route_data , { " Data " , " rsvp.record_route.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_exclude_route_data , { " Data " , " rsvp.exclude_route.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_flags , { " Flags " , " rsvp.message_id.flags " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_epoch , { " Epoch " , " rsvp.message_id.epoch " , FT_UINT24 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_message_id , { " Message-ID " , " rsvp.message_id.message_id " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_data , { " Data " , " rsvp.message_id.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_ack_flags , { " Flags " , " rsvp.message_id_ack.flags " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_ack_epoch , { " Epoch " , " rsvp.message_id_ack.epoch " , FT_UINT24 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_ack_message_id , { " Message-ID " , " rsvp.message_id_ack.message_id " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_ack_data , { " Data " , " rsvp.message_id_ack.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_list_flags , { " Flags " , " rsvp.message_id_list.flags " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_list_epoch , { " Epoch " , " rsvp.message_id_list.epoch " , FT_UINT24 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_list_message_id , { " Message-ID " , " rsvp.message_id_list.message_id " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_id_list_data , { " Data " , " rsvp.message_id_list.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_hello_source_instance , { " Source Instance " , " rsvp.hello.source_instance " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_hello_destination_instance , { " Destination Instance " , " rsvp.hello.destination_instance " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_dclass_dscp , { " DSCP " , " rsvp.dclass.dscp " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & dscp_vals_ext , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_dclass_data , { " Data " , " rsvp.dclass.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_admin_status , { " Admin Status " , " rsvp.admin_status " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_admin_status_data , { " Data " , " rsvp.admin_status.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_attributes_tlv , { " LSP attributes TLV " , " rsvp.lsp_attributes_tlv " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_attributes_tlv_data , { " Data " , " rsvp.lsp_attributes_tlv.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_association_type , { " Association type " , " rsvp.association.type " , FT_UINT16 , BASE_DEC , VALS ( association_type_vals ) , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_association_id , { " Association ID " , " rsvp.association.id " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_association_source_ipv4 , { " Association source " , " rsvp.association.source_ipv4 " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_association_source_ipv6 , { " Association source " , " rsvp.association.source_ipv6 " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_association_routing_area_id , { " Routing Area ID " , " rsvp.association.routing_area_id " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_association_node_id , { " Node ID " , " rsvp.association.node_id " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_association_padding , { " Padding " , " rsvp.association.padding " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_association_data , { " Data " , " rsvp.association.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_length , { " Length " , " rsvp.lsp_tunnel_if_id.length " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_component_link_identifier , { " Component link identifier " , " rsvp.lsp_tunnel_if_id.component_link_identifier " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_component_link_identifier_ipv4 , { " Component link identifier " , " rsvp.lsp_tunnel_if_id.component_link_identifier_ipv4 " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
2014-01-27 18:22:39 +00:00
{ & hf_rsvp_lsp_tunnel_if_id_lsp_encoding_type , { " LSP Encoding Type " , " rsvp.lsp_tunnel_if_id.lsp_encoding_type " , FT_UINT8 , BASE_DEC | BASE_RANGE_STRING , RVALS ( gmpls_lsp_enc_rvals ) , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_switching_type , { " Switching Type " , " rsvp.lsp_tunnel_if_id.switching_type " , FT_UINT8 , BASE_DEC | BASE_RANGE_STRING , RVALS ( gmpls_switching_type_rvals ) , 0x0 , NULL , HFILL } } ,
2013-12-24 23:41:24 +00:00
{ & hf_rsvp_lsp_tunnel_if_id_signal_type , { " Signal Type " , " rsvp.lsp_tunnel_if_id.signal_type " , FT_UINT8 , BASE_DEC | BASE_EXT_STRING , & gmpls_sonet_signal_type_str_ext , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_connection_id , { " Sub Interface/Connection ID " , " rsvp.lsp_tunnel_if_id.connection_id " , FT_UINT64 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_sc_pc_id , { " SC PC ID " , " rsvp.lsp_tunnel_if_id.sc_pc_id " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_sc_pc_scn_address , { " SC PC SCN Address " , " rsvp.lsp_tunnel_if_id.sc_pc_scn_address " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_router_id , { " Router ID " , " rsvp.lsp_tunnel_if_id.router_id " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_interface_id , { " Interface ID " , " rsvp.lsp_tunnel_if_id.interface_id " , FT_UINT32 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_ipv4_interface_address , { " IPv4 interface address " , " rsvp.lsp_tunnel_if_id.ipv4_interface_address " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_target_igp_instance , { " Target IGP instance " , " rsvp.lsp_tunnel_if_id.target_igp_instance " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_action , { " Action " , " rsvp.lsp_tunnel_if_id.action " , FT_UINT8 , BASE_DEC , VALS ( lsp_tunnel_if_id_action_str ) , 0xF0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_ipv6_interface_address , { " IPv6 interface address " , " rsvp.lsp_tunnel_if_id.ipv6_interface_address " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_lsp_tunnel_if_id_data , { " Data " , " rsvp.lsp_tunnel_if_id.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_notify_request_notify_node_address_ipv4 , { " Notify node address " , " rsvp.notify_request.notify_node_address_ipv4 " , FT_IPv4 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_notify_request_notify_node_address_ipv6 , { " Notify node address " , " rsvp.notify_request.notify_node_address_ipv4 " , FT_IPv6 , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_notify_request_data , { " Data " , " rsvp.notify_request.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_call_id_data , { " Data " , " rsvp.call_id.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_call_id_address_type , { " Address type " , " rsvp.call_id.address_type " , FT_UINT8 , BASE_DEC , VALS ( address_type_vals ) , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_call_id_reserved , { " Reserved " , " rsvp.call_id.reserved " , FT_UINT24 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_call_id_international_segment , { " International Segment " , " rsvp.call_id.international_segment " , FT_STRING , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_call_id_national_segment , { " National Segment " , " rsvp.call_id.national_segment " , FT_STRING , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_call_id_local_identifier , { " Local Identifier " , " rsvp.call_id.local_identifier " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_restart_cap_data , { " Data " , " rsvp.restart_cap.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_protection_info_link_flags , { " Link Flags " , " rsvp.protection_info.link_flags " , FT_UINT8 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_protection_info_data , { " Data " , " rsvp.protection_info.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_fast_reroute_setup_priority , { " Setup Priority " , " rsvp.fast_reroute.setup_priority " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_fast_reroute_hold_priority , { " Hold Priority " , " rsvp.fast_reroute.hold_priority " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_fast_reroute_hop_limit , { " Hop Limit " , " rsvp.fast_reroute.hop_limit " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_fast_reroute_flags , { " Flags " , " rsvp.fast_reroute.flags " , FT_UINT8 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_fast_reroute_bandwidth , { " Bandwidth " , " rsvp.fast_reroute.bandwidth " , FT_FLOAT , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_fast_reroute_include_any , { " Include-Any " , " rsvp.fast_reroute.include_any " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_fast_reroute_exclude_any , { " Exclude-Any " , " rsvp.fast_reroute.exclude_any " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_fast_reroute_include_all , { " Include-All " , " rsvp.fast_reroute.include_all " , FT_UINT32 , BASE_HEX , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_fast_reroute_data , { " Data " , " rsvp.fast_reroute.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_detour_data , { " Data " , " rsvp.detour.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_diffserv_data , { " Data " , " rsvp.diffserv.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_diffserv_aware_te_data , { " Data " , " rsvp.diffserv_aware_te.data " , FT_BYTES , BASE_NONE , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_rsvp_version , { " RSVP Version " , " rsvp.rsvp_version " , FT_UINT8 , BASE_DEC , NULL , 0xF0 , NULL , HFILL } } ,
{ & hf_rsvp_flags , { " Flags " , " rsvp.flags " , FT_UINT8 , BASE_HEX , NULL , 0x0F , NULL , HFILL } } ,
{ & hf_rsvp_sending_ttl , { " Sending TTL " , " rsvp.sending_ttl " , FT_UINT8 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_message_length , { " Message length " , " rsvp.message_length " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
{ & hf_rsvp_length , { " Length " , " rsvp.length " , FT_UINT16 , BASE_DEC , NULL , 0x0 , NULL , HFILL } } ,
2010-05-10 15:54:57 +00:00
} ;
2009-06-22 04:58:08 +00:00
2009-09-15 17:37:54 +00:00
gint * ett_tree [ TT_MAX ] ;
2002-10-02 21:15:27 +00:00
/* Build the tree array */
2009-08-04 18:48:45 +00:00
for ( i = 0 ; i < TT_MAX ; i + + ) {
ett_treelist [ i ] = - 1 ;
2012-06-11 16:33:56 +00:00
ett_tree [ i ] = & ( ett_treelist [ i ] ) ;
2009-08-04 18:48:45 +00:00
}
2002-10-02 21:15:27 +00:00
proto_rsvp = proto_register_protocol ( " Resource ReserVation Protocol (RSVP) " ,
2012-06-11 16:33:56 +00:00
" RSVP " , " rsvp " ) ;
2002-10-02 21:15:27 +00:00
proto_register_field_array ( proto_rsvp , rsvpf_info , array_length ( rsvpf_info ) ) ;
proto_register_subtree_array ( ett_tree , array_length ( ett_tree ) ) ;
register_rsvp_prefs ( ) ;
2005-09-07 19:52:44 +00:00
/* Initialization routine for RSVP conversations */
register_init_routine ( & rsvp_init_protocol ) ;
1999-07-29 05:47:07 +00:00
}
2000-04-16 22:46:25 +00:00
void
proto_reg_handoff_rsvp ( void )
{
2013-11-22 02:52:41 +00:00
dissector_handle_t rsvp_handle , rsvpe2ei_handle ;
2001-12-03 04:00:26 +00:00
2013-11-22 02:52:41 +00:00
rsvp_handle = new_create_dissector_handle ( dissect_rsvp , proto_rsvp ) ;
rsvpe2ei_handle = new_create_dissector_handle ( dissect_rsvp_e2ei , proto_rsvp ) ;
2010-12-20 05:35:29 +00:00
dissector_add_uint ( " ip.proto " , IP_PROTO_RSVP , rsvp_handle ) ;
2013-11-22 02:52:41 +00:00
dissector_add_uint ( " ip.proto " , IP_PROTO_RSVPE2EI , rsvpe2ei_handle ) ;
2010-12-20 05:35:29 +00:00
dissector_add_uint ( " udp.port " , UDP_PORT_PRSVP , rsvp_handle ) ;
2009-01-27 21:46:58 +00:00
rsvp_tap = register_tap ( " rsvp " ) ;
2000-04-16 22:46:25 +00:00
}
2013-09-15 18:01:01 +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 :
*/