diff options
author | Anthony Crawford <anthony.r.crawford@charter.com> | 2019-08-14 12:10:30 -0600 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2019-08-14 19:44:22 +0000 |
commit | 0062c0d613fc24015d0a9854b2b0267d9b0470f2 (patch) | |
tree | 83151d2d346c8b7f4b38002262535f2aaee756be /epan | |
parent | 17a2d9445232c3f87b2a3dba9d553a84184c2963 (diff) |
MPEG DSM-CC: Added U-N Session Messages
ISO/IEC 13818-6 DSM-CC section 4 U-N Session messages have been added.
Bug: 15994
Change-Id: I76e65e9feabe54809184a446b160367e9f520ec1
Reviewed-on: https://code.wireshark.org/review/34258
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-mpeg-dsmcc.c | 2532 |
1 files changed, 2309 insertions, 223 deletions
diff --git a/epan/dissectors/packet-mpeg-dsmcc.c b/epan/dissectors/packet-mpeg-dsmcc.c index 3b0e1e9751..8725cacda8 100644 --- a/epan/dissectors/packet-mpeg-dsmcc.c +++ b/epan/dissectors/packet-mpeg-dsmcc.c @@ -1,7 +1,8 @@ -/* packet-dsmcc.c +/* packet-mpeg-dsmcc.c * * Routines for ISO/IEC 13818-6 DSM-CC * Copyright 2012, Weston Schmidt <weston_schmidt@alumni.purdue.edu> + * Copyright 2019, Anthony Crawford <anthony.r.crawford@charter.com> * * Wireshark - Network traffic analyzer * By Gerald Combs <gerald@wireshark.org> @@ -28,7 +29,7 @@ void proto_reg_handoff_dsmcc(void); * * Missing tables: * 3-1 3-2 3-3 3-4 3-6 3-7 3-8 3-9 - * 4-1 4-7 4-8 4-9 4-10 4-11 4-12 4-13 4-14 4-15 4-* + * 4-61, 4-81, 4-82, 4-87, 4-88 * 5-* * 6-4 * 7-5 7-8 7-10 7-12 @@ -40,12 +41,21 @@ void proto_reg_handoff_dsmcc(void); * * Dissected tables: * 2-1 2-4 2-6 2-7 - * 4-6 4-16 4-17 4-34 4-35 (partly) + * 4-x * 6-1 * 7-6 7-7 * 9-2 + * J.3 + * + * Validated (all parameters are checked) U-N Messages: + * 0x4010, 0x4011, 0x4020, 0x4021, 0x4022, 0x4023, 0x40b0 + * 0x8012, 0x8013, 0x8022, 0x8023, 0x8030, 0x8031, 0x8060, 0x8061, 0x80b0 + * Unvalidated U-N messages: + * 4032, 4033, 4042, 4043, 4060, 4061, 4062, 4063, + * 4070, 4071, 4072, 4073, 4082, 4090, 40a2, 40a3 + * 8041, 8042, 8050, 8051, 8062, 8063, 8070, 8071, + * 8072, 8073, 8082, 8092, 80a0, 80a1, 80a2, 80a3 * - * Validated (all parameters are checked) tables: */ @@ -66,6 +76,11 @@ static int hf_dsmcc_adaptation_length = -1; static int hf_dsmcc_message_length = -1; /* table 2-1 dsmccMessageHeader - end */ +/* table 2-3 transactionId - start */ +static int hf_dsmcc_un_sess_flag_transaction_id_originator = -1; +static int hf_dsmcc_un_sess_flag_transaction_id_number = -1; +/* table 2-3 transactionId - end */ + /* table 2-4 dsmccAdaptationHeader - start */ static int hf_dsmcc_adaptation_type = -1; /* table 2-4 dsmccAdaptationHeader - end */ @@ -80,6 +95,19 @@ static int hf_dsmcc_adaptation_ca_length = -1; static int hf_dsmcc_adaptation_user_id_reserved = -1; /* table 2-7 dsmccUserId - end */ +/* table 4-2, 4-3, 4-4 U-N messageDiscriminator - start */ +/*static int hf_dsmcc_un_sess_message_discriminator = -1;*/ +static int hf_dsmcc_un_sess_flag_message_discriminator = -1; +static int hf_dsmcc_un_sess_flag_message_scenario = -1; +static int hf_dsmcc_un_sess_flag_message_type = -1; +/* table 4-2, 4-3, 4-4 U-N messageDiscriminator - end */ + +/* other tables in section 4.2 - start */ +static int hf_dsmcc_un_sess_response = -1; +static int hf_dsmcc_un_sess_reason = -1; +static int hf_dsmcc_un_sess_reserved = -1; +/* other tables in section 4.2 - end */ + /* table 4-6 U-N user data format - start */ static int hf_dsmcc_un_sess_uu_data_len = -1; static int hf_dsmcc_un_sess_uu_data = -1; @@ -87,11 +115,167 @@ static int hf_dsmcc_un_sess_priv_data_len = -1; static int hf_dsmcc_un_sess_priv_data = -1; /* table 4-6 U-N user data format - end */ -/* other tables in section 4.2 - start */ -static int hf_dsmcc_un_sess_id = -1; -static int hf_dsmcc_un_sess_response = -1; -static int hf_dsmcc_un_sess_reason = -1; -/* other tables in section 4.2 - end */ +/* table 4-7 U-N Resources - start */ +static int hf_dsmcc_un_sess_rsrc_desc_count = -1; +/* table 4-7 U-N Resources - end */ + +/* table 4-10 U-N Server Session Setup Indication - start */ +static int hf_dsmcc_un_sess_forward_count = -1; +/* table 4-10 U-N Server Session Setup Indication - end */ + +/* 4-26 Server Delete Resource Request - start */ +static int hf_dsmcc_un_sess_resource_count = -1; +static int hf_dsmcc_un_sess_resource_num = -1; +/* 4-26 Server Delete Resource Request - end */ + +/* table 4-30, 4-31, 4-32, 4-33, 4-34, 4-35, 4-36 - start */ +static int hf_dsmcc_un_sess_status_type = -1; +static int hf_dsmcc_un_sess_status_count = -1; +static int hf_dsmcc_un_sess_status_byte = -1; +/* table 4-30, 4-31, 4-32, 4-33, 4-34, 4-35, 4-36 - end */ + +/* table 4-56 Client Session In Progress - start */ +static int hf_dsmcc_un_sess_session_count = -1; +/* table 4-56 Client Session In Progress - end */ + +/* table 4-58 Message Fields data types - start */ +static int hf_dsmcc_un_sess_session_id_device_id = -1; +static int hf_dsmcc_un_sess_session_id_session_number = -1; +/* table 4-58 Message Fields data types - end */ + +/* table 4-63 U-N common descriptor header - start */ +static int hf_dsmcc_un_sess_rsrc_request_id = -1; +static int hf_dsmcc_un_sess_rsrc_descriptor_type = -1; +static int hf_dsmcc_un_sess_rsrc_number = -1; +static int hf_dsmcc_un_sess_rsrc_association_tag = -1; +static int hf_dsmcc_un_sess_rsrc_flags = -1; +static int hf_dsmcc_un_sess_rsrc_status = -1; +static int hf_dsmcc_un_sess_rsrc_desc_data_fields_length = -1; +static int hf_dsmcc_un_sess_rsrc_data_field_count = -1; +static int hf_dsmcc_un_sess_rsrc_type_owner_id = -1; +static int hf_dsmcc_un_sess_rsrc_type_owner_value = -1; +/* table 4-63 U-N common descriptor header - end */ + +/* table 4-64 U-N resource number assignor - start */ +static int hf_dsmcc_un_sess_rsrc_flag_num_assignor = -1; +static int hf_dsmcc_un_sess_rsrc_flag_num_value = -1; +/* table 4-64 U-N resource number assignor - end */ + +/* table 4-65 U-N resource association tag assignor - start */ +static int hf_dsmcc_un_sess_rsrc_flag_association_tag_assignor = -1; +static int hf_dsmcc_un_sess_rsrc_flag_association_tag_value = -1; +/* table 4-65 U-N resource association tag assignor - end */ + +/* table 4-66 U-N resource allocator - start */ +static int hf_dsmcc_un_sess_rsrc_flag_allocator = -1; +/* table 4-66 U-N resource allocator - end */ + +/* table 4-67 U-N resource attribute - start */ +static int hf_dsmcc_un_sess_rsrc_flag_attribute = -1; +/* table 4-67 U-N resource attribute - end */ + +/* table 4-68 U-N resource view - start */ +static int hf_dsmcc_un_sess_rsrc_flag_view = -1; +/* table 4-68 U-N resource view - end */ + +/* table 4-71 U-N dsmccResourceDescriptorValue() format - start */ +static int hf_dsmcc_un_sess_rsrc_value_type = -1; +static int hf_dsmcc_un_sess_rsrc_value_count = -1; +static int hf_dsmcc_un_sess_rsrc_value_data = -1; +static int hf_dsmcc_un_sess_rsrc_most_desired = -1; +static int hf_dsmcc_un_sess_rsrc_least_desired = -1; +/* table 4-71 U-N dsmccResourceDescriptorValue() format - end */ + +/* table 4-74 U-N Continuous Feed Session resource descriptor - start */ +static int hf_dsmcc_un_sess_rsrc_cfs_num_count = -1; +static int hf_dsmcc_un_sess_rsrc_cfs_num = -1; +/* table 4-74 U-N Continuous Feed Session resource descriptor - end */ + +/* table 4-75 U-N ATM Connection resource descriptor - start */ +static int hf_dsmcc_un_sess_rsrc_atm_vpi = -1; +static int hf_dsmcc_un_sess_rsrc_atm_vci = -1; +/* table 4-75 U-N ATM Connection resource descriptor - end */ + +/* table 4-76 MPEG Program - start */ +static int hf_dsmcc_un_sess_rsrc_mpeg_ca_pid = -1; +static int hf_dsmcc_un_sess_rsrc_mpeg_elem_stream_count = -1; +/* table 4-76 MPEG Program - end */ + +/* table 4-77 Physical Channel - start */ +static int hf_dsmcc_un_sess_rsrc_phys_chan_direction = -1; +/* table 4-77 Physical Channel - end */ + +/* table 4-84 IP - start */ +static int hf_dsmcc_un_sess_rsrc_src_ip_addr = -1; +static int hf_dsmcc_un_sess_rsrc_src_ip_port = -1; +static int hf_dsmcc_un_sess_rsrc_dst_ip_addr = -1; +static int hf_dsmcc_un_sess_rsrc_dst_ip_port = -1; +static int hf_dsmcc_un_sess_rsrc_ip_protocol = -1; +/* table 4-84 IP - end */ + +/* table 4-86 PSTN Setup - start */ +static int hf_dsmcc_un_sess_rsrc_pstn_calling_id = -1; +static int hf_dsmcc_un_sess_rsrc_pstn_called_id = -1; +/* table 4-86 PSTN Setup - end */ + +/* Table 4-89 Q.922 Connection - start */ +static int hf_dsmcc_un_sess_rsrc_dlci_count = -1; +static int hf_dsmcc_un_sess_rsrc_dlci = -1; +static int hf_dsmcc_un_sess_rsrc_dl_association_tag = -1; +/* Table 4-89 Q.922 Connection - end */ + +/* table 4-90 Shared Resource - start */ +static int hf_dsmcc_un_sess_rsrc_shared_resource_num = -1; +/* table 4-90 Shared Resource - end */ + +/* table 4-91 Shared Request ID - start */ +static int hf_dsmcc_un_sess_rsrc_shared_resource_request_id = -1; +/* table 4-91 Shared Request ID - end */ + +/* table 4-92 Headend List - start */ +static int hf_dsmcc_un_sess_rsrc_headend_count = -1; +static int hf_dsmcc_un_sess_rsrc_headend_code = -1; +/* table 4-92 Headend List - end */ + +/* table 4-94 SDB Continuous Feed - start */ +static int hf_dsmcc_un_sess_rsrc_sdb_id = -1; +static int hf_dsmcc_un_sess_rsrc_sdb_program_count = -1; +static int hf_dsmcc_un_sess_rsrc_sdb_association_tag = -1; +static int hf_dsmcc_un_sess_rsrc_sdb_broadcast_program_id = -1; +/* table 4-94 SDB Continuous Feed - end */ + +/* table 4-95 SDB Associations - start */ +static int hf_dsmcc_un_sess_rsrc_sdb_control_association_tag = -1; +static int hf_dsmcc_un_sess_rsrc_sdb_program_association_tag = -1; +/* table 4-95 SDB Associations - end */ + +/* table 4-96 SDB Entitlement - start */ +static int hf_dsmcc_un_sess_rsrc_sdb_exclude_count = -1; +static int hf_dsmcc_un_sess_rsrc_sdb_include_count = -1; +/* table 4-96 SDB Entitlement - end */ + +/* user defined 0xf001-0xf007 - start */ +/* Time Warner Cable Pegasus Session Setup Protocol +* Version 2.3, May 19 2003 +* These user defined resource descriptors have been implemented in +* VOD BackOffice products by Time Warner, Arris and Ericsson. */ +static int hf_dsmcc_un_sess_rsrc_trans_system = -1; +static int hf_dsmcc_un_sess_rsrc_inner_coding = -1; +static int hf_dsmcc_un_sess_rsrc_split_bitstream = -1; +static int hf_dsmcc_un_sess_rsrc_mod_format = -1; +static int hf_dsmcc_un_sess_rsrc_symbol_rate = -1; +static int hf_dsmcc_un_sess_rsrc_reserved = -1; +static int hf_dsmcc_un_sess_rsrc_interleave_depth = -1; +static int hf_dsmcc_un_sess_rsrc_modulation_mode = -1; +static int hf_dsmcc_un_sess_rsrc_fec = -1; +static int hf_dsmcc_un_sess_rsrc_headend_flag = -1; +static int hf_dsmcc_un_sess_rsrc_headend_tsid = -1; +static int hf_dsmcc_un_sess_rsrc_server_ca_copyprotect = -1; +static int hf_dsmcc_un_sess_rsrc_server_ca_usercount = -1; +static int hf_dsmcc_un_sess_rsrc_client_ca_info_length = -1; +static int hf_dsmcc_un_sess_rsrc_client_ca_info_data = -1; +static int hf_dsmcc_un_sess_rsrc_service_group = -1; +/* user defined 0xf001-0xf007 - end */ /* table 6-1 compatabilityDescriptor - start */ static int hf_compat_desc_length = -1; @@ -150,6 +334,14 @@ static int hf_dsmcc_crc = -1; static int hf_dsmcc_checksum = -1; /* table 9-2 dsmccSection - end */ +/* table J.3 E-164 NSAP - start */ +static int hf_dsmcc_un_sess_nsap_afi = -1; +static int hf_dsmcc_un_sess_nsap_idi = -1; +static int hf_dsmcc_un_sess_nsap_ho_dsp = -1; +static int hf_dsmcc_un_sess_nsap_esi = -1; +static int hf_dsmcc_un_sess_nsap_sel = -1; +/* table J.3 E-164 NSAP - end */ + /* TODO: this should really live in the ETV dissector, but I'm not sure how * to make the functionality work exactly right yet. Will work on a patch * for this next. @@ -161,6 +353,12 @@ static gint ett_dsmcc = -1; static gint ett_dsmcc_payload = -1; static gint ett_dsmcc_header = -1; static gint ett_dsmcc_adaptation_header = -1; +static gint ett_dsmcc_message_id = -1; +static gint ett_dsmcc_transaction_id = -1; +static gint ett_dsmcc_heading = -1; +static gint ett_dsmcc_rsrc_number = -1; +static gint ett_dsmcc_rsrc_association_tag = -1; +static gint ett_dsmcc_rsrc_flags = -1; static gint ett_dsmcc_compat = -1; static gint ett_dsmcc_compat_sub_desc = -1; static gint ett_dsmcc_dii_module = -1; @@ -168,25 +366,120 @@ static gint ett_dsmcc_dii_module = -1; static expert_field ei_dsmcc_invalid_value = EI_INIT; static expert_field ei_dsmcc_crc_invalid = EI_INIT; -#define DSMCC_TCP_PORT 13819 +#define DSMCC_TCP_PORT 13819 +#define DSMCC_UDP_PORT 13819 /* DSM-CC protocol discriminator, (table 2-1) */ #define DSMCC_PROT_DISC 0x11 #define DSMCC_SSI_MASK 0x8000 #define DSMCC_PRIVATE_MASK 0x4000 -#define DSMCC_RESERVED_MASK 0x3000 -#define DSMCC_LENGTH_MASK 0x0fff - -#define DSMCC_RESERVED2_MASK 0xc0 -#define DSMCC_VERSION_NUMBER_MASK 0x3e -#define DSMCC_CURRENT_NEXT_INDICATOR_MASK 0x01 - -#define DSMCC_UN_SESS_SRV_SESS_REL_REQ 0x8020 -#define DSMCC_UN_SESS_SRV_SESS_REL_CNF 0x8021 -#define DSMCC_UN_SESS_SRV_STAT_REQ 0x8060 -#define DSMCC_UN_SESS_SRV_STAT_CNF 0x8061 - +#define DSMCC_RESERVED_MASK 0x3000 +#define DSMCC_LENGTH_MASK 0x0fff +#define DSMCC_RESERVED2_MASK 0xc0 +#define DSMCC_VERSION_NUMBER_MASK 0x3e +#define DSMCC_CURRENT_NEXT_INDICATOR_MASK 0x01 + +/* DSM-CC U-N Session Flags */ +#define DMSCC_FLAG_MESS_DISCRIMINATOR 0xc000 +#define DMSCC_FLAG_MESS_SCENARIO 0x3ff0 +#define DMSCC_FLAG_MESS_TYPE 0x000f +#define DMSCC_FLAG_TRAN_ORIG 0xc0000000 +#define DMSCC_FLAG_TRAN_NUM 0x3fffffff +#define DMSCC_FLAG_RSRC_NUM_ASSIGNOR 0xc000 +#define DMSCC_FLAG_RSRC_NUM_VALUE 0x3fff +#define DMSCC_FLAG_RSRC_ASSOC_TAG_ASSIGNOR 0xc000 +#define DMSCC_FLAG_RSRC_ASSOC_TAG_VALUE 0x3fff +#define DMSCC_FLAG_RSRC_VIEW 0xc0 +#define DMSCC_FLAG_RSRC_ATTRIBUTE 0x3c +#define DMSCC_FLAG_RSRC_ALLOCATOR 0x03 + +/* DSM-CC protocol U-N messages, (table 4-5) */ +/* 4-5 U-N Session Client Messages */ +#define DSMCC_UN_SESS_CLN_SESS_SET_REQ 0x4010 +#define DSMCC_UN_SESS_CLN_SESS_SET_CNF 0x4011 +#define DSMCC_UN_SESS_CLN_SESS_REL_REQ 0x4020 +#define DSMCC_UN_SESS_CLN_SESS_REL_CNF 0x4021 +#define DSMCC_UN_SESS_CLN_SESS_REL_IND 0x4022 +#define DSMCC_UN_SESS_CLN_SESS_REL_RES 0x4023 +#define DSMCC_UN_SESS_CLN_ADD_RSRC_IND 0x4032 +#define DSMCC_UN_SESS_CLN_ADD_RSRC_RES 0x4033 +#define DSMCC_UN_SESS_CLN_DEL_RSRC_IND 0x4042 +#define DSMCC_UN_SESS_CLN_DEL_RSRC_RES 0x4043 +#define DSMCC_UN_SESS_CLN_STATUS_REQ 0x4060 +#define DSMCC_UN_SESS_CLN_STATUS_CNF 0x4061 +#define DSMCC_UN_SESS_CLN_STATUS_IND 0x4062 +#define DSMCC_UN_SESS_CLN_STATUS_RES 0x4063 +#define DSMCC_UN_SESS_CLN_RESET_REQ 0x4070 +#define DSMCC_UN_SESS_CLN_RESET_CNF 0x4071 +#define DSMCC_UN_SESS_CLN_RESET_IND 0x4072 +#define DSMCC_UN_SESS_CLN_RESET_RES 0x4073 +#define DSMCC_UN_SESS_CLN_SESS_PROC_IND 0x4082 +#define DSMCC_UN_SESS_CLN_CONN_REQ 0x4090 +#define DSMCC_UN_SESS_CLN_SESS_TRN_IND 0x40a2 +#define DSMCC_UN_SESS_CLN_SESS_TRN_RES 0x40a3 +#define DSMCC_UN_SESS_CLN_SESS_INP_REQ 0x40b0 +/* 4-5 U-N Session Server Messages */ +#define DSMCC_UN_SESS_SRV_SESS_SET_IND 0x8012 +#define DSMCC_UN_SESS_SRV_SESS_SET_RES 0x8013 +#define DSMCC_UN_SESS_SRV_SESS_REL_REQ 0x8020 +#define DSMCC_UN_SESS_SRV_SESS_REL_CNF 0x8021 +#define DSMCC_UN_SESS_SRV_SESS_REL_IND 0x8022 +#define DSMCC_UN_SESS_SRV_SESS_REL_RES 0x8023 +#define DSMCC_UN_SESS_SRV_ADD_RSRC_REQ 0x8030 +#define DSMCC_UN_SESS_SRV_ADD_RSRC_CNF 0x8031 +#define DSMCC_UN_SESS_SRV_DEL_RSRC_REQ 0x8040 +#define DSMCC_UN_SESS_SRV_DEL_RSRC_CNF 0x8041 +#define DSMCC_UN_SESS_SRV_CONT_FEED_SESS_REQ 0x8050 +#define DSMCC_UN_SESS_SRV_CONT_FEED_SESS_CNF 0x8051 +#define DSMCC_UN_SESS_SRV_STATUS_REQ 0x8060 +#define DSMCC_UN_SESS_SRV_STATUS_CNF 0x8061 +#define DSMCC_UN_SESS_SRV_STATUS_IND 0x8062 +#define DSMCC_UN_SESS_SRV_STATUS_RES 0x8063 +#define DSMCC_UN_SESS_SRV_RESET_REQ 0x8070 +#define DSMCC_UN_SESS_SRV_RESET_CNF 0x8071 +#define DSMCC_UN_SESS_SRV_RESET_IND 0x8072 +#define DSMCC_UN_SESS_SRV_RESET_RES 0x8073 +#define DSMCC_UN_SESS_SRV_SESS_PROC_IND 0x8082 +#define DSMCC_UN_SESS_SRV_CONN_IND 0x8092 +#define DSMCC_UN_SESS_SRV_SESS_TRN_REQ 0x80a0 +#define DSMCC_UN_SESS_SRV_SESS_TRN_CNF 0x80a1 +#define DSMCC_UN_SESS_SRV_SESS_TRN_IND 0x80a2 +#define DSMCC_UN_SESS_SRV_SESS_TRN_RES 0x80a3 +#define DSMCC_UN_SESS_SRV_SESS_INP_REQ 0x80b0 +/* 4-73 U-N Session Resource Descriptors */ +#define RSRC_CONT_FEED_SESS 0x0001 +#define RSRC_ATM_CONN 0x0002 +#define RSRC_MPEG_PROG 0x0003 +#define RSRC_PHYS_CHAN 0x0004 +#define RSRC_TS_US_BW 0x0005 +#define RSRC_TS_DS_BW 0x0006 +#define RSRC_ATM_SVC_CONN 0x0007 +#define RSRC_CONN_NTFY 0x0008 +#define RSRC_IP 0x0009 +#define RSRC_CLN_TDMA_ASSIGN 0x000a +#define RSRC_PSTN_SETUP 0x000b +#define RSRC_NISDN_SETUP 0x000c +#define RSRC_NISDN_CONN 0x000d +#define RSRC_Q922_CONN 0x000e +#define RSRC_HEADEND_LIST 0x000f +#define RSRC_ATM_VC_CONN 0x0010 +#define RSRC_SDB_CONT_FEED 0x0011 +#define RSRC_SDB_ASSOC 0x0012 +#define RSRC_SDB_ENT 0x0013 +#define RSRC_SHARED_RSRC 0x7ffe +#define RSRC_SHARED_REQ_ID 0x7fff +#define RSRC_TYPE_OWNER 0xffff +/* U-N Session User Defined Resource Descriptors */ +#define RSRC_MODULATION_MODE 0xf001 +#define RSRC_HEADEND_ID 0xf003 +#define RSRC_SERVER_CA 0xf004 +#define RSRC_CLIENT_CA 0xf005 +#define RSRC_ETHERNET 0xf006 +#define RSRC_SERVICE_GROUP 0xf007 + + +/* 2-2 */ static const range_string dsmcc_header_type_vals[] = { { 0, 0, "ISO/IEC 13818-6 Reserved" }, { 0x01, 0x01, "ISO/IEC 13818-6 User-to-Network Configuration Message" }, @@ -199,6 +492,17 @@ static const range_string dsmcc_header_type_vals[] = { { 0, 0, NULL } }; +/* 2-3 */ +static const range_string dsmcc_un_sess_transaction_id_originator_vals[] = { + { 0, 0, "Assigned by Client" }, + { 0x01, 0x01, "Assigned by Server" }, + { 0x02, 0x02, "Assigned by Network" }, + { 0x03, 0x03, "ISO/IEC 13818-6 Reserved" }, + { 0x04, 0xff, "Invalid"}, + { 0, 0, NULL } +}; + +/* 2-5 */ static const range_string dsmcc_adaptation_header_vals[] = { { 0, 0, "ISO/IEC 13818-6 Reserved" }, { 0x01, 0x01, "DSM-CC Conditional Access Adaptation Format" }, @@ -208,33 +512,482 @@ static const range_string dsmcc_adaptation_header_vals[] = { { 0, 0, NULL } }; +/* 4-2 */ +static const range_string dsmcc_un_sess_message_discriminator_vals[] = { + { 0, 0, "ISO/IEC 13818-6 Reserved" }, + { 0x01, 0x01, "Client and Network" }, + { 0x02, 0x02, "Server and Network" }, + { 0x03, 0x0f, "ISO/IEC 13818-6 Reserved" }, + { 0x04, 0xff, "Invalid"}, + { 0, 0, NULL } +}; + +/* 4-3 */ +static const range_string dsmcc_un_sess_message_scenario_vals[] = { + { 0, 0, "ISO/IEC 13818-6 Reserved" }, + { 0x0001, 0x0001, "Session Setup" }, + { 0x0002, 0x0002, "Session Release" }, + { 0x0003, 0x0003, "Add Resource" }, + { 0x0004, 0x0004, "Delete Resource" }, + { 0x0005, 0x0005, "Continuous Feed Session Setup" }, + { 0x0006, 0x0006, "Status" }, + { 0x0007, 0x0007, "Reset" }, + { 0x0008, 0x0008, "Session Proceeding" }, + { 0x0009, 0x0009, "Session Connect" }, + { 0x000a, 0x000a, "Session Transfer" }, + { 0x000b, 0x000b, "Session In Progress" }, + { 0x000c, 0x01ff, "ISO/IEC 13818-6 Reserved" }, + { 0x0200, 0x03ff, "User Defined Message Scenario" }, + { 0x0400, 0xffff, "Invalid"}, + { 0, 0, NULL } +}; + +/* 4-4 */ +static const range_string dsmcc_un_sess_message_type_vals[] = { + { 0, 0, "Request Message" }, + { 0x01, 0x01, "Confirm Message" }, + { 0x02, 0x02, "Indication Message" }, + { 0x03, 0x03, "Response Message" }, + { 0x04, 0x0f, "ISO/IEC 13818-6 Reserved" }, + { 0x10, 0xff, "Invalid"}, + { 0, 0, NULL } +}; + +/* 4-5 */ +static const value_string dsmcc_un_sess_message_id_vals[] = { + { DSMCC_UN_SESS_CLN_SESS_SET_REQ, "Client Session Setup Request" }, + { DSMCC_UN_SESS_CLN_SESS_SET_CNF, "Client Session Setup Confirm" }, + { DSMCC_UN_SESS_CLN_SESS_REL_REQ, "Client Session Release Request" }, + { DSMCC_UN_SESS_CLN_SESS_REL_CNF, "Client Session Release Confirm" }, + { DSMCC_UN_SESS_CLN_SESS_REL_IND, "Client Session Release Indication" }, + { DSMCC_UN_SESS_CLN_SESS_REL_RES, "Client Session Release Response" }, + { DSMCC_UN_SESS_CLN_ADD_RSRC_IND, "Client Add Resource Indication" }, + { DSMCC_UN_SESS_CLN_ADD_RSRC_RES, "Client Add Resource Response" }, + { DSMCC_UN_SESS_CLN_DEL_RSRC_IND, "Client Delete Resource Indication" }, + { DSMCC_UN_SESS_CLN_DEL_RSRC_RES, "Client Delete Resource Response" }, + { DSMCC_UN_SESS_CLN_STATUS_REQ, "Client Status Request" }, + { DSMCC_UN_SESS_CLN_STATUS_CNF, "Client Status Confirm" }, + { DSMCC_UN_SESS_CLN_STATUS_IND, "Client Status Indication" }, + { DSMCC_UN_SESS_CLN_STATUS_RES, "Client Status Response" }, + { DSMCC_UN_SESS_CLN_RESET_REQ, "Client Reset Request" }, + { DSMCC_UN_SESS_CLN_RESET_CNF, "Client Reset Confirm" }, + { DSMCC_UN_SESS_CLN_RESET_IND, "Client Reset Indication" }, + { DSMCC_UN_SESS_CLN_RESET_RES, "Client Reset Response" }, + { DSMCC_UN_SESS_CLN_SESS_PROC_IND, "Client Session Proceeding Indication" }, + { DSMCC_UN_SESS_CLN_CONN_REQ, "Client Connect Request" }, + { DSMCC_UN_SESS_CLN_SESS_TRN_IND, "Client Session Transfer Indication" }, + { DSMCC_UN_SESS_CLN_SESS_TRN_RES, "Client Session Transfer Response" }, + { DSMCC_UN_SESS_CLN_SESS_INP_REQ, "Client Session In Progress Request" }, + { DSMCC_UN_SESS_SRV_SESS_SET_IND, "Server Session Setup Indication" }, + { DSMCC_UN_SESS_SRV_SESS_SET_RES, "Server Session Setup Response" }, + { DSMCC_UN_SESS_SRV_SESS_REL_REQ, "Server Session Release Request" }, + { DSMCC_UN_SESS_SRV_SESS_REL_CNF, "Server Session Release Confirm" }, + { DSMCC_UN_SESS_SRV_SESS_REL_IND, "Server Session Release Indication" }, + { DSMCC_UN_SESS_SRV_SESS_REL_RES, "Server Session Release Response" }, + { DSMCC_UN_SESS_SRV_ADD_RSRC_REQ, "Server Add Resource Request" }, + { DSMCC_UN_SESS_SRV_ADD_RSRC_CNF, "Server Add Resource Confirm" }, + { DSMCC_UN_SESS_SRV_DEL_RSRC_REQ, "Server Delete Resource Request" }, + { DSMCC_UN_SESS_SRV_DEL_RSRC_CNF, "Server Delete Resource Confirm" }, + { DSMCC_UN_SESS_SRV_CONT_FEED_SESS_REQ, "Server Continuous Feed Session Request" }, + { DSMCC_UN_SESS_SRV_CONT_FEED_SESS_CNF, "Server Continuous Feed Session Confirm" }, + { DSMCC_UN_SESS_SRV_STATUS_REQ, "Server Status Request" }, + { DSMCC_UN_SESS_SRV_STATUS_CNF, "Server Status Confirm" }, + { DSMCC_UN_SESS_SRV_STATUS_IND, "Server Status Indication" }, + { DSMCC_UN_SESS_SRV_STATUS_RES, "Server Status Response" }, + { DSMCC_UN_SESS_SRV_RESET_REQ, "Server Reset Request" }, + { DSMCC_UN_SESS_SRV_RESET_CNF, "Server Reset Confirm" }, + { DSMCC_UN_SESS_SRV_RESET_IND, "Server Reset Indication" }, + { DSMCC_UN_SESS_SRV_RESET_RES, "Server Reset Response" }, + { DSMCC_UN_SESS_SRV_SESS_PROC_IND, "Server Session Proceeding Indication" }, + { DSMCC_UN_SESS_SRV_CONN_IND, "Server Connect Indication" }, + { DSMCC_UN_SESS_SRV_SESS_TRN_REQ, "Server Session Transfer Request" }, + { DSMCC_UN_SESS_SRV_SESS_TRN_CNF, "Server Session Transfer Confirm" }, + { DSMCC_UN_SESS_SRV_SESS_TRN_IND, "Server Session Transfer Indication" }, + { DSMCC_UN_SESS_SRV_SESS_TRN_RES, "Server Session Transfer Response" }, + { DSMCC_UN_SESS_SRV_SESS_INP_REQ, "Server Session In Progress Request" }, + { 0, NULL } +}; + +/* 4-59 */ +static const range_string dsmcc_un_sess_message_reason_codes_vals[] = { + { 0, 0, "RsnOK. The command sequence is proceeding normally." }, + { 0x0001, 0x0001, "RsnNormal. Normal conditions for releasing the session." }, + { 0x0002, 0x0002, "RsnClProcError. Procedure error detected at the Client." }, + { 0x0003, 0x0003, "RsnNeProcError. Procedure error detected at the Network." }, + { 0x0004, 0x0004, "RsnSeProcError. Procedure error detected at the Server." }, + { 0x0005, 0x0005, "RsnClFormatError. Invalid format (e.g., missing parameter) detected at the Client." }, + { 0x0006, 0x0006, "RsnNeFormatError. Invalid format (e.g., missing parameter) detected at the Network." }, + { 0x0007, 0x0007, "RsnSeFormatError. Invalid format (e.g., missing parameter) detected at the Server." }, + { 0x0008, 0x0008, "RsnNeConfigCnf. Confirmed configuration sequence (i.e., Client must respond)" }, + { 0x0009, 0x0009, "RsnSeTranRefuse. Session transfer was refused by the destination Server." }, + { 0x000a, 0x000a, "RsnSeForwardOvl. Session forwarding is due to overload conditions." }, + { 0x000b, 0x000b, "RsnSeForwardMnt. Session forwarding is due to overload maintenance conditions." }, + { 0x000c, 0x000c, "RsnSeForwardUncond. Session forwarding is sent as an unconditional request." }, + { 0x000d, 0x000d, "RsnSeRejResource. Server rejected the assigned resources." }, + { 0x000e, 0x000e, "RsnNeBroadcast. Message is being broadcast and does not require a response." }, + { 0x000f, 0x000f, "RsnSeServiceTransfer. Server indicates that the Client shall establish a session to another serverId based on the context provided in the PrivateData()." }, + { 0x0010, 0x0010, "RsnClNoSession. Client indicates the Session ID is not active." }, + { 0x0011, 0x0011, "RsnSeNoSession. Server indicates the Session ID is not active." }, + { 0x0012, 0x0012, "RsnNeNoSession. Network indicates the Session ID is not active." }, + { 0x0013, 0x0013, "RsnRetrans. Message is a retransmission." }, + { 0x0014, 0x0014, "RsnNoTransaction. Message was received without a Transaction ID." }, + { 0x0015, 0x0015, "RsnClNoResource. Requested resource is not supported." }, + { 0x0016, 0x0016, "RsnClRejResource. Client rejected the assigned resources." }, + { 0x0017, 0x0017, "RsnNeRejResource. Network rejected the assigned resources assigned by the Server." }, + { 0x0018, 0x0018, "RsnNeTimerExpired. The message is being sent as the result of an expired timer." }, + { 0x0019, 0x0019, "RsnClSessionRelease. Client initiated session release." }, + { 0x001a, 0x001a, "RsnSeSessionRelease. Server initiated session release." }, + { 0x001b, 0x001b, "RsnNeSessionRelease. Network initiated session release." }, + { 0x001c, 0x7fff, "Reserved" }, + { 0x7fff, 0xffff, "User Defined Reason Code" }, + { 0, 0, NULL } +}; + +/* 4-60 */ +static const range_string dsmcc_un_sess_message_response_codes_vals[] = { + { 0, 0, "RspOK. Request completed with no errors." }, + { 0x0001, 0x0001, "RspClNoSession. Client rejected the request because the requested Session ID is invalid." }, + { 0x0002, 0x0002, "RspNeNoCalls. Network is unable to accept new sessions." }, + { 0x0003, 0x0003, "RspNeInvalidClient. Network rejected the request due to an invalid Client ID." }, + { 0x0004, 0x0004, "RspNeInvalidServer. Network rejected the request due to an invalid Server ID." }, + { 0x0005, 0x0005, "RspNeNoSession. Network rejected the request because the requested Session ID is invalid." }, + { 0x0006, 0x0006, "RspSeNoCalls. Server is unable to accept new sessions." }, + { 0x0007, 0x0007, "RspSeInvalidClient. Server rejected the request due to an invalid Client ID." }, + { 0x0008, 0x0008, "RspSeNoService. Server rejected the request because the requested service could not be provided." }, + { 0x0009, 0x0009, "RspSeNoCFS. Server rejected the request because the requested Continuous Feed Session could not be found." }, + { 0x000a, 0x000a, "RspClNoResponse. Network timed out before the Client responded to an Indication message." }, + { 0x000b, 0x000b, "RspSeNoResponse. Network timed out before the Server responded to an Indication message." }, + { 0x000c, 0x000f, "ISO/IEC 13818-6 reserved." }, + { 0x0010, 0x0010, "RspSeNoSession. Server rejected the request because the requested Session ID is invalid." }, + { 0x0011, 0x0011, "RspNeResourceContinue. Resource request completed with no errors but, an indicated resource was assigned an alternate value by the Network." }, + { 0x0012, 0x0012, "RspNeResourceFailed. Resource request failed because the Network was unable to assign the requested resources." }, + { 0x0013, 0x0013, "RspNeResourceOK. Requested command completed with no errors." }, + { 0x0014, 0x0014, "RspResourceNegotiate. Network was able to complete a request but has assigned alternate values to a negotiable field." }, + { 0x0015, 0x0015, "RspClSessProceed. Network is waiting on a response from the server." }, + { 0x0016, 0x0016, "RspClUnkRequestID. Client received a message which contained an unknown Resource Request ID." }, + { 0x0017, 0x0017, "RspClNoResource. Client rejected a session set-up because it was unable to use the assigned resources." }, + { 0x0018, 0x0018, "RspClNoCalls. Client rejected a session set-up because it was not accepting calls at that time." }, + { 0x0019, 0x0019, "RspNeNoResource. Network is unable to assign one or more resources to a session." }, + { 0x001a, 0x001f, "ISO/IEC 13818-6 reserved." }, + { 0x0020, 0x0020, "RspSeNoResource. Server is unable to complete a session set-up because the required resources are not available." }, + { 0x0021, 0x0021, "RspSeRejResource. Server rejected the assigned resources." }, + { 0x0022, 0x0022, "RspClProcError. Procedure error detected at the Client." }, + { 0x0023, 0x0023, "RspNeProcError. Procedure error detected at the Network." }, + { 0x0024, 0x0024, "RspSeProcError. Procedure error detected at the Server." }, + { 0x0025, 0x0025, "RspClFormatError. Invalid format (e.g., missing parameter) detected at Client." }, + { 0x0026, 0x0026, "RspNeFormatError. Invalid format (e.g., missing parameter) detected at Network." }, + { 0x0027, 0x0027, "RspSeFormatError. Invalid format (e.g., missing parameter) detected at Server." }, + { 0x0028, 0x0028, "RspSeForwardOvl. Session forwarding is due to overload conditions." }, + { 0x0029, 0x0029, "RspSeForwardMnt. Session forwarding is due to overload maintenance conditions." }, + { 0x002a, 0x002a, "RspClRejResource. Client rejected a resource assigned to a session." }, + { 0x002b, 0x002f, "ISO/IEC 13818-6 reserved." }, + { 0x0030, 0x0030, "RspSeForwardUncond. Session forwarding is sent as an unconditional request." }, + { 0x0031, 0x0031, "RspNeTransferFailed. Session transfer failed at the Network." }, + { 0x0032, 0x0032, "RspClTransferReject. Session transfer was rejected by the Client." }, + { 0x0033, 0x0033, "RspSeTransferReject. Session transfer was rejected by the Server." }, + { 0x0034, 0x0034, "RspSeTransferResource. Server rejected the session transfer due to insufficient resource." }, + { 0x0035, 0x0035, "RspResourceCompleted. Server has accepted the resources assigned by the Network." }, + { 0x0036, 0x0036, "RspForward. Server is requesting a Session Forward." }, + { 0x0037, 0x0037, "RspNeForwardFailed. Network is unable to process a Session Forward." }, + { 0x0038, 0x0038, "RspClForwarded. Session was forwarded to the indicated Client ID." }, + { 0x0039, 0x0040, "ISO/IEC 13818-6 reserved." }, + { 0x0041, 0x0041, "RspSeTransferNoRes. The transfer to Server could not get enough resources, so it rejected the transfer." }, + { 0x0042, 0x0042, "RspNeNotOwner. An action was requested on a session by a User which was not the owner of that session." }, + { 0x0043, 0x7fff, "ISO/IEC 13818-6 reserved." }, + { 0x8000, 0xffff, "User Defined Response Code" }, + { 0, 0, NULL } +}; + +/* 4-61 */ +static const range_string dsmcc_un_sess_status_type_vals[] = { + { 0, 0, "Reserved" }, + { 0x0001, 0x0001, "Identify Session List" }, + { 0x0002, 0x0002, "Identify Session Status" }, + { 0x0003, 0x0003, "Identify Configuration" }, + { 0x0004, 0x0004, "Query Resource Descriptor" }, + { 0x0005, 0x0005, "Query Resource Status" }, + { 0x0006, 0x7fff, "Reserved" }, + { 0x8000, 0xffff, "User Defined Status Type" }, + { 0, 0, NULL } +}; + +/* 4-64 */ +static const range_string dsmcc_un_sess_rsrc_number_assignor_vals[] = { + { 0, 0, "Reserved" }, + { 0x01, 0x01, "Client" }, + { 0x02, 0x02, "Server" }, + { 0x03, 0x03, "Network" }, + { 0x04, 0xff, "Reserved" }, + { 0, 0, NULL } +}; + +/* 4-65 */ +static const range_string dsmcc_un_sess_rsrc_association_tag_vals[] = { + { 0, 0, "Reserved" }, + { 0x01, 0x01, "Client" }, + { 0x02, 0x02, "Server" }, + { 0x03, 0x03, "Network" }, + { 0x04, 0xff, "Reserved" }, + { 0, 0, NULL } +}; + +/* 4-66 */ +static const range_string dsmcc_un_sess_rsrc_allocator_vals[] = { + { 0, 0, "Unspecified" }, + { 0x01, 0x01, "Client" }, + { 0x02, 0x02, "Server" }, + { 0x03, 0x03, "Network" }, + { 0x04, 0xff, "Reserved" }, + { 0, 0, NULL } +}; + +/* 4-67 */ +static const range_string dsmcc_un_sess_rsrc_attribute_vals[] = { + { 0, 0, "Mandatory Non-Negotiable" }, + { 0x01, 0x01, "Mandatory Negotiable" }, + { 0x02, 0x02, "Non-Mandatory Non-Negotiable" }, + { 0x03, 0x03, "Non-Mandatory Negotiable" }, + { 0x04, 0x0f, "Reserved"}, + { 0x05, 0xff, "Invalid"}, + { 0, 0, NULL } +}; + +/* 4-68 */ +static const range_string dsmcc_un_sess_rsrc_view_vals[] = { + { 0, 0, "Reserved" }, + { 0x01, 0x01, "Client View" }, + { 0x02, 0x02, "Server View" }, + { 0x03, 0x03, "Reserved" }, + { 0x04, 0xff, "Invalid" }, + { 0, 0, NULL } +}; + +/* 4-69 */ +static const range_string dsmcc_un_sess_rsrc_status_vals[] = { + { 0, 0, "Reserved" }, + { 0x01, 0x01, "Requested" }, + { 0x02, 0x02, "In Progress" }, + { 0x03, 0x03, "Alternate Assigned" }, + { 0x04, 0x04, "Assigned"}, + { 0x05, 0x05, "Failed"}, + { 0x06, 0x06, "Unprocessed"}, + { 0x07, 0x07, "Invalid"}, + { 0x08, 0x08, "Released"}, + { 0x09, 0x7f, "Reserved"}, + { 0x80, 0xff, "User Defined"}, + { 0, 0, NULL } +}; + +/* 4-72 */ +static const range_string dsmcc_un_sess_rsrc_value_types_vals[] = { + { 0, 0, "Reserved" }, + { 0x0001, 0x0001, "Single" }, + { 0x0002, 0x0002, "List" }, + { 0x0003, 0x0003, "Range" }, + { 0x0004, 0x7fff, "Reserved"}, + { 0x8000, 0xffff, "User Defined"}, + { 0, 0, NULL } +}; + +/* 4-73 */ +static const range_string dsmcc_un_sess_rsrc_descriptor_type_vals[] = { + { 0, 0, "Reserved" }, + { 0x0001, 0x0001, "Continuous Feed Session" }, + { 0x0002, 0x0002, "ATM Connection" }, + { 0x0003, 0x0003, "MPEG Program" }, + { 0x0004, 0x0004, "Physical Channel" }, + { 0x0005, 0x0005, "TS Upstream Bandwidth" }, + { 0x0006, 0x0006, "TS Downstream Bandwidth" }, + { 0x0007, 0x0007, "ATM SVC Connection" }, + { 0x0008, 0x0008, "Connection Notify" }, + { 0x0009, 0x0009, "IP" }, + { 0x000a, 0x000a, "Client TDMA Assignment" }, + { 0x000b, 0x000b, "PSTN Setup" }, + { 0x000c, 0x000c, "NISDN Setup" }, + { 0x000d, 0x000d, "NISDN Connection" }, + { 0x000e, 0x000e, "Q.922 Connections" }, + { 0x000f, 0x000f, "Headend List" }, + { 0x0010, 0x0010, "ATM VC Connection" }, + { 0x0011, 0x0011, "SDB Continuous Feed" }, + { 0x0012, 0x0012, "SDB Associations" }, + { 0x0013, 0x0013, "SDB Entitlement" }, + { 0x0014, 0x7ffd, "Reserved" }, + { 0x7ffe, 0x7ffe, "Shared Resource" }, + { 0x7fff, 0x7fff, "Shared Request ID" }, + { 0x8000, 0xf000, "User Defined" }, + { 0xf001, 0xf001, "Modulation Mode" }, + { 0xf002, 0xf002, "User Defined" }, + { 0xf003, 0xf003, "Headend ID" }, + { 0xf004, 0xf004, "Server Conditional Access" }, + { 0xf005, 0xf005, "Client Conditional Access" }, + { 0xf006, 0xf006, "Ethernet Interface" }, + { 0xf007, 0xf007, "Service Group" }, + { 0xf008, 0xfffe, "User Defined" }, + { 0xffff, 0xffff, "User Defined Type Owner" }, + { 0, 0, NULL } +}; + +/* table 4-78 direction values */ +static const range_string dsmcc_un_sess_rsrc_phys_chan_direction_vals[] = { + { 0, 0, "Downstream (Server to Client)" }, + { 0x0001, 0x0001, "Upstream (Client to Server)" }, + { 0x0002, 0xffff, "ISO/IEC 13818-6 Reserved" }, + { 0, 0, NULL } +}; + +/* 4-84 IP protocol types */ +static const range_string dsmcc_un_sess_rsrc_ip_protocol_types_vals[] = { + { 0, 0, "Reserved" }, + { 0x0001, 0x0001, "TCP" }, + { 0x0002, 0x0002, "UDP" }, + { 0x0003, 0x7fff, "Reserved" }, + { 0x8000, 0xffff, "User Defined" }, + { 0, 0, NULL } +}; + +/* user defined 0xf001-0xf007 - start */ +static const range_string dsmcc_un_sess_rsrc_modulation_format_vals[] = { + { 0x00, 0x00, "Unknown" }, + { 0x01, 0x05, "Reserved" }, + { 0x06, 0x06, "QAM16" }, + { 0x07, 0x07, "QAM32" }, + { 0x08, 0x08, "QAM64" }, + { 0x09, 0x0b, "Reserved" }, + { 0x0c, 0x0c, "QAM128" }, + { 0x0d, 0x0f, "Reserved" }, + { 0x10, 0x10, "QAM256" }, + { 0x11, 0xff, "Reserved" }, + { 0, 0, NULL } +}; + +static const range_string dsmcc_un_sess_rsrc_transmission_system_vals[] = { + { 0, 0, "Unknown Transmission System" }, + { 0x01, 0x01, "SADVB Transmission System" }, + { 0x02, 0x02, "GI Transmission System" }, + { 0x03, 0xff, "Reserved" }, + { 0, 0, NULL } +}; + +static const range_string dsmcc_un_sess_rsrc_mod_mode_vals[] = { + { 0, 0, "No Modulation Mode" }, + { 0x01, 0x18, "Reserved" }, + { 0x19, 0x19, "QAM 4 Modulation Mode"}, + { 0x1a, 0xff, "Reserved" }, + { 0, 0, NULL } +}; + +static const range_string dsmcc_un_sess_rsrc_fec_vals[] = { + { 0, 0, "FEC Transmission System" }, + { 0x01, 0x01, "FEC DAVIC" }, + { 0x02, 0xff, "Reserved"}, + { 0, 0, NULL } +}; + +static const range_string dsmcc_un_sess_rsrc_headend_flag_vals[] = { + { 0, 0, "Invalid" }, + { 0x01, 0x01, "The session is intended for the Head End named by the HeadEndId" }, + { 0x02, 0x02, "The session is intended for the Head End where the content is introduced to the network" }, + { 0x03, 0x03, "The session is intended for all Head Ends that have QAMs"}, + { 0x04, 0x04, "The session is intended for the QAM with an output Transport Stream ID named by the TransportStreamId"}, + { 0x05, 0xff, "Invalid" }, + { 0, 0, NULL } +}; +/* user defined 0xf001-0xf007 - end */ + +/* 7-4 */ +static const value_string dsmcc_dd_message_id_vals[] = { + { 0x1001, "Download Info Request" }, + { 0x1002, "Download Info Indication" }, + { 0x1003, "Download Data Block" }, + { 0x1004, "Download Data Request" }, + { 0x1005, "Download Data Cancel" }, + { 0x1006, "Download Server Initiate" }, + { 0, NULL } +}; + +/* 9-2 */ static const value_string dsmcc_payload_name_vals[] = { { DSMCC_TID_LLCSNAP, "LLCSNAP" }, { DSMCC_TID_UN_MSG, "User Network Message" }, { DSMCC_TID_DD_MSG, "Download Data Message" }, { DSMCC_TID_DESC_LIST, "Descriptor List" }, { DSMCC_TID_PRIVATE, "Private" }, - { 0, NULL } + { 0, NULL } }; -static const value_string dsmcc_dd_message_id_vals[] = { - { 0x1001, "Download Info Request" }, - { 0x1002, "Download Info Indication" }, - { 0x1003, "Download Data Block" }, - { 0x1004, "Download Data Request" }, - { 0x1005, "Download Data Cancel" }, - { 0x1006, "Download Server Initiate" }, - { 0, NULL } +/* U-N Session Message Flags */ +static const int *bf_message_id[] = { + &hf_dsmcc_un_sess_flag_message_discriminator, + &hf_dsmcc_un_sess_flag_message_scenario, + &hf_dsmcc_un_sess_flag_message_type, + NULL }; - -static const value_string dsmcc_un_sess_message_id_vals[] = { - { DSMCC_UN_SESS_SRV_SESS_REL_REQ, "Server Session Release Request" }, - { DSMCC_UN_SESS_SRV_SESS_REL_CNF, "Server Session Release Confirm" }, - { DSMCC_UN_SESS_SRV_STAT_REQ, "Server Status Request" }, - { DSMCC_UN_SESS_SRV_STAT_CNF, "Server Status Confirm" }, - { 0, NULL } +static const int *bf_transaction_id[] = { + &hf_dsmcc_un_sess_flag_transaction_id_originator, + &hf_dsmcc_un_sess_flag_transaction_id_number, + NULL }; +static const int *bf_rsrc_number[] = { + &hf_dsmcc_un_sess_rsrc_flag_num_assignor, + &hf_dsmcc_un_sess_rsrc_flag_num_value, + NULL +}; +static const int *bf_rsrc_association_tag[] = { + &hf_dsmcc_un_sess_rsrc_flag_association_tag_assignor, + &hf_dsmcc_un_sess_rsrc_flag_association_tag_value, + NULL +}; +static const int *bf_rsrc_flags[] = { + &hf_dsmcc_un_sess_rsrc_flag_view, + &hf_dsmcc_un_sess_rsrc_flag_attribute, + &hf_dsmcc_un_sess_rsrc_flag_allocator, + NULL +}; + +/* Table J.3 E.164 NSAP */ +static guint +dissect_dsmcc_un_session_nsap( + tvbuff_t *tvb, guint offset, packet_info *pinfo _U_, proto_tree *sub_tree) +{ + guint offset_start; + + offset_start = offset; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_nsap_afi, tvb, offset, 1, ENC_NA); + offset += 1; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_nsap_idi, tvb, offset, 8, ENC_NA); + offset += 8; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_nsap_ho_dsp, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_nsap_esi, tvb, offset, 6, ENC_NA); + offset += 6; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_nsap_sel, tvb, offset, 1, ENC_NA); + offset += 1; + + return offset-offset_start; +} + +/* 4-58 SessionId */ +static guint +dissect_dsmcc_un_session_id( + tvbuff_t *tvb, guint offset, packet_info *pinfo _U_, proto_tree *sub_tree) +{ + proto_tree *sub_sub_tree; + guint offset_start; + + offset_start = offset; + + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 10, ett_dsmcc_heading, NULL, "Session ID"); + proto_item_set_text(sub_sub_tree, "Session ID: 0x%s", tvb_bytes_to_str(wmem_packet_scope(), tvb, offset, 10)); + proto_tree_add_item(sub_sub_tree, hf_dsmcc_un_sess_session_id_device_id, tvb, offset, 6, ENC_NA); + offset += 6; + proto_tree_add_item(sub_sub_tree, hf_dsmcc_un_sess_session_id_session_number, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + return offset-offset_start; +} + + +/* Table 2-4 Adaptation Header Format */ static void dissect_dsmcc_adaptation_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { @@ -242,6 +995,7 @@ dissect_dsmcc_adaptation_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *t guint offset = 0; proto_item *pi; proto_tree *sub_tree; + proto_tree *sub_sub_tree; guint8 type, tmp; guint16 ca_len; @@ -249,58 +1003,48 @@ dissect_dsmcc_adaptation_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *t if (1 == type) { sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_dsmcc_adaptation_header, NULL, "Adaptation Header"); - proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_type, tvb, - offset, 1, ENC_BIG_ENDIAN); - offset +=1; + proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_type, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; tmp = tvb_get_guint8(tvb, offset); - pi = proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_ca_reserved, tvb, - offset, 1, ENC_BIG_ENDIAN); + pi = proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_ca_reserved, tvb, offset, 1, ENC_BIG_ENDIAN); if (0xff != tmp) { - expert_add_info_format(pinfo, pi, &ei_dsmcc_invalid_value, - "Invalid value - should be 0xff"); + expert_add_info_format(pinfo, pi, &ei_dsmcc_invalid_value, "Invalid value - should be 0xff"); } - offset +=1; - proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_ca_system_id, tvb, - offset, 2, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_ca_system_id, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; ca_len = tvb_get_ntohs(tvb, offset); - proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_ca_length, tvb, - offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_ca_length, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; sub_tvb = tvb_new_subset_length(tvb, offset, ca_len); call_data_dissector(sub_tvb, pinfo, tree); } else if (2 == type) { sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_dsmcc_adaptation_header, NULL, "Adaptation Header"); - proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_type, tvb, - offset, 1, ENC_BIG_ENDIAN); - offset +=1; + proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_type, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; tmp = tvb_get_guint8(tvb, offset); - pi = proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_user_id_reserved, tvb, - offset, 1, ENC_BIG_ENDIAN); + pi = proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_user_id_reserved, tvb, offset, 1, ENC_BIG_ENDIAN); if (0xff != tmp) { - expert_add_info_format(pinfo, pi, &ei_dsmcc_invalid_value, - "Invalid value - should be 0xff"); + expert_add_info_format(pinfo, pi, &ei_dsmcc_invalid_value, "Invalid value - should be 0xff"); } - /*offset +=1;*/ - /* TODO: handle the userId */ + offset += 1; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "User ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); } else { sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_dsmcc_adaptation_header, NULL, "Unknown Adaptation Header"); - proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_type, tvb, - offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_type, tvb, offset, 1, ENC_BIG_ENDIAN); } } +/* Table 2-1 DSM-CC Message Header Format */ static guint -dissect_dsmcc_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, - gboolean download_header) +dissect_dsmcc_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, gboolean download_header) { tvbuff_t *sub_tvb; proto_item *pi; proto_tree *sub_tree; - guint8 prot_disc; - guint reserved; - guint8 adaptation_len; - guint offset_start; + guint8 prot_disc, adaptation_len; + guint reserved, offset_start; int msg_id, tx_id; offset_start = offset; @@ -310,42 +1054,38 @@ dissect_dsmcc_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint adaptation_len = tvb_get_guint8(tvb, 9+offset); sub_tree = proto_tree_add_subtree(tree, tvb, offset, 12+adaptation_len, ett_dsmcc_header, NULL, "DSM-CC Header"); - pi = proto_tree_add_item(sub_tree, hf_dsmcc_protocol_discriminator, tvb, - offset, 1, ENC_BIG_ENDIAN); + pi = proto_tree_add_item(sub_tree, hf_dsmcc_protocol_discriminator, tvb, offset, 1, ENC_BIG_ENDIAN); if (DSMCC_PROT_DISC != prot_disc) { - expert_add_info_format(pinfo, pi, &ei_dsmcc_invalid_value, - "Invalid value - should be 0x11"); + expert_add_info_format(pinfo, pi, &ei_dsmcc_invalid_value, "Invalid value - should be 0x11"); } - offset +=1; - proto_tree_add_item(sub_tree, hf_dsmcc_type, tvb, - offset, 1, ENC_BIG_ENDIAN); - offset +=1; + offset += 1; + proto_tree_add_item(sub_tree, hf_dsmcc_type, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; if (TRUE == download_header) { msg_id = hf_dsmcc_dd_message_id; tx_id = hf_dsmcc_dd_download_id; + proto_tree_add_item(sub_tree, msg_id, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(sub_tree, tx_id, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; } else { msg_id = hf_dsmcc_message_id; tx_id = hf_dsmcc_transaction_id; + proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset, msg_id, ett_dsmcc_message_id, bf_message_id, ENC_BIG_ENDIAN, BMT_NO_APPEND); + offset += 2; + proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset, tx_id, ett_dsmcc_transaction_id, bf_transaction_id, ENC_BIG_ENDIAN, BMT_NO_APPEND); + offset += 4; } - proto_tree_add_item(sub_tree, msg_id, tvb, - offset, 2, ENC_BIG_ENDIAN); - offset += 2; - proto_tree_add_item(sub_tree, tx_id, tvb, - offset, 4, ENC_BIG_ENDIAN); - offset += 4; - pi = proto_tree_add_item(sub_tree, hf_dsmcc_header_reserved, tvb, - offset, 1, ENC_BIG_ENDIAN); + + pi = proto_tree_add_item(sub_tree, hf_dsmcc_header_reserved, tvb, offset, 1, ENC_BIG_ENDIAN); if (0xff != reserved) { - expert_add_info_format(pinfo, pi, &ei_dsmcc_invalid_value, - "Invalid value - should be 0xff"); + expert_add_info_format(pinfo, pi, &ei_dsmcc_invalid_value, "Invalid value - should be 0xff"); } - offset +=1; + offset += 1; - proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_length, tvb, - offset, 1, ENC_BIG_ENDIAN); - offset +=1; - proto_tree_add_item(sub_tree, hf_dsmcc_message_length, tvb, - offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(sub_tree, hf_dsmcc_adaptation_length, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(sub_tree, hf_dsmcc_message_length, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; if (0 < adaptation_len) { @@ -357,10 +1097,9 @@ dissect_dsmcc_header(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint return offset-offset_start; } - static guint dissect_dsmcc_dii_compat_desc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - guint offset) + guint offset) { gint i, j; guint8 sub_count, sub_len; @@ -369,53 +1108,42 @@ dissect_dsmcc_dii_compat_desc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre proto_tree *desc_sub_tree; len = tvb_get_ntohs(tvb, offset); - proto_tree_add_item(tree, hf_compat_desc_length, tvb, offset, - 2, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_compat_desc_length, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; if (0 < len) { count = tvb_get_ntohs(tvb, offset); - proto_tree_add_item(tree, hf_compat_desc_count, tvb, offset, - 2, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_compat_desc_count, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; for (i = 0; i < count; i++) { compat_tree = proto_tree_add_subtree(tree, tvb, offset, len, ett_dsmcc_compat, NULL, "Compatibility Descriptor"); - proto_tree_add_item(compat_tree, hf_desc_type, tvb, offset, - 1, ENC_BIG_ENDIAN); - offset +=1; - proto_tree_add_item(compat_tree, hf_desc_length, tvb, offset, - 1, ENC_BIG_ENDIAN); - offset +=1; - proto_tree_add_item(compat_tree, hf_desc_spec_type, tvb, offset, - 1, ENC_BIG_ENDIAN); - offset +=1; - proto_tree_add_item(compat_tree, hf_desc_spec_data, tvb, offset, - 3, ENC_BIG_ENDIAN); + proto_tree_add_item(compat_tree, hf_desc_type, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(compat_tree, hf_desc_length, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(compat_tree, hf_desc_spec_type, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(compat_tree, hf_desc_spec_data, tvb, offset, 3, ENC_BIG_ENDIAN); offset += 3; - proto_tree_add_item(compat_tree, hf_desc_model, tvb, offset, - 2, ENC_BIG_ENDIAN); + proto_tree_add_item(compat_tree, hf_desc_model, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; - proto_tree_add_item(compat_tree, hf_desc_version, tvb, offset, - 2, ENC_BIG_ENDIAN); + proto_tree_add_item(compat_tree, hf_desc_version, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; sub_count = tvb_get_guint8(tvb, offset); - proto_tree_add_item(compat_tree, hf_desc_sub_desc_count, tvb, offset, - 1, ENC_BIG_ENDIAN); - offset +=1; + proto_tree_add_item(compat_tree, hf_desc_sub_desc_count, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; for (j = 0; j < sub_count; j++) { sub_len = tvb_get_guint8(tvb, offset+1); desc_sub_tree = proto_tree_add_subtree(compat_tree, tvb, offset, sub_len+2, ett_dsmcc_compat_sub_desc, NULL, "Sub Descriptor"); - proto_tree_add_item(desc_sub_tree, hf_desc_sub_desc_type, tvb, offset, - 1, ENC_BIG_ENDIAN); - offset +=1; - proto_tree_add_item(desc_sub_tree, hf_desc_sub_desc_len, tvb, offset, - 1, ENC_BIG_ENDIAN); - offset +=1; + proto_tree_add_item(desc_sub_tree, hf_desc_sub_desc_type, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(desc_sub_tree, hf_desc_sub_desc_len, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; offset += sub_len; } @@ -433,12 +1161,9 @@ static void dissect_dsmcc_dii(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset) { - guint8 module_info_len; - guint16 modules, private_data_len; - guint16 module_id; - guint8 module_version; - guint module_size; - guint i; + guint16 modules, module_id, private_data_len; + guint8 module_info_len, module_version; + guint i, module_size; proto_tree *mod_tree; proto_tree_add_item(tree, hf_dsmcc_dii_download_id, tvb, offset, 4, ENC_BIG_ENDIAN); @@ -524,12 +1249,11 @@ dissect_dsmcc_ddb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, static void -dissect_dsmcc_un_download(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, - proto_tree *top_tree) +dissect_dsmcc_un_download(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_tree *top_tree) { proto_tree *sub_tree; - guint16 msg_id; - guint offset = 0; + guint16 msg_id; + guint offset = 0; msg_id = tvb_get_ntohs(tvb, offset+2); @@ -560,33 +1284,407 @@ dissect_dsmcc_un_download(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, } } -static guint dissect_dsmcc_un_session_user_data( +/* table 4-71 dsmccResourceDescriptorValue format*/ +static guint +dissect_dsmcc_un_session_resource_value( + tvbuff_t *tvb, guint offset, packet_info *pinfo _U_, proto_tree *sub_tree, guint value_len) +{ + guint32 i, counter, resource_value_type; + guint offset_start; + + offset_start = offset; + + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_rsrc_value_type, tvb, offset, 2, ENC_BIG_ENDIAN, &resource_value_type); + offset += 2; + if (resource_value_type == 1) /* single value */ + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_rsrc_value_data, tvb, offset, value_len, ENC_NA); + offset += value_len; + } + else if (resource_value_type == 2) /* list value */ + { + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_rsrc_value_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_rsrc_value_data, tvb, offset, value_len, ENC_NA); + offset += value_len; + } + } + else if (resource_value_type == 3) /* range value */ + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_rsrc_most_desired, tvb, offset, value_len, ENC_NA); + offset += value_len; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_rsrc_least_desired, tvb, offset, value_len, ENC_NA); + offset += value_len; + } + + return offset-offset_start; +} + + +static guint +dissect_dsmcc_un_session_resources( + tvbuff_t *tvb, guint offset, packet_info *pinfo _U_, proto_tree *sub_tree) +{ + proto_tree *pi; + proto_tree *sub_sub_tree; + proto_tree *sub_sub_sub_tree; + proto_tree *sub_sub_sub_sub_tree; + proto_tree *rsrc_tree; + guint32 i, j, counter, resource_count; + guint16 tmp, resource_type, data_fields_length, counter_ca; + guint offset_start; + + offset_start = offset; + + /* Table 4-62 General format of the DSM-CC Resource Descriptor - dsmccResourceDescriptor() */ + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_rsrc_desc_count, tvb, offset, 2, ENC_BIG_ENDIAN, &resource_count); + offset += 2; + for (j=0; j<resource_count; j++) + { + sub_sub_tree = proto_tree_add_subtree_format(sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Resource %u", 1+j); + + /* Table 4-63 - commonDescriptorHeader() */ + sub_sub_sub_tree = proto_tree_add_subtree(sub_sub_tree, tvb, offset, 14, ett_dsmcc_heading, NULL, "Header"); + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_request_id, tvb, offset, 2, ENC_NA); + offset += 2; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_descriptor_type, tvb, offset, 2, ENC_BIG_ENDIAN); + resource_type = tvb_get_guint16(tvb, offset, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_bitmask_with_flags(sub_sub_sub_tree, tvb, offset, hf_dsmcc_un_sess_rsrc_number, ett_dsmcc_rsrc_number, bf_rsrc_number, ENC_BIG_ENDIAN, BMT_NO_APPEND); + offset += 2; + proto_tree_add_bitmask_with_flags(sub_sub_sub_tree, tvb, offset, hf_dsmcc_un_sess_rsrc_association_tag, ett_dsmcc_rsrc_association_tag, bf_rsrc_association_tag, ENC_BIG_ENDIAN, BMT_NO_APPEND); + offset += 2; + proto_tree_add_bitmask_with_flags(sub_sub_sub_tree, tvb, offset, hf_dsmcc_un_sess_rsrc_flags, ett_dsmcc_rsrc_flags, bf_rsrc_flags, ENC_BIG_ENDIAN, BMT_NO_APPEND); + offset += 1; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_status, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_desc_data_fields_length, tvb, offset, 2, ENC_BIG_ENDIAN); + data_fields_length = tvb_get_guint16(tvb, offset, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_data_field_count, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + + /* Resource data - resourceDescriptorDataFields() */ + sub_sub_sub_tree = proto_tree_add_subtree(sub_sub_tree, tvb, offset, data_fields_length, ett_dsmcc_heading, NULL, "Data"); + switch (resource_type) + { + /* Table 4-74 Continuous Feed Session */ + case RSRC_CONT_FEED_SESS: + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 10, ett_dsmcc_heading, NULL, "Session ID"); + proto_tree_add_item(rsrc_tree, hf_dsmcc_un_sess_session_id_device_id, tvb, offset, 6, ENC_NA); + offset += 6; + proto_tree_add_item(rsrc_tree, hf_dsmcc_un_sess_session_id_session_number, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + proto_tree_add_item_ret_uint(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_cfs_num_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_cfs_num, tvb, offset, 2, ENC_NA); + } + break; + /* Table 4-75 ATM Connection */ + case RSRC_ATM_CONN: + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "ATM Address:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, sub_sub_sub_tree, 20); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "ATM VCI:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 2); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "ATM VPI:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 2); + break; + /* Table 4-76 MPEG Program */ + case RSRC_MPEG_PROG: + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "MPEG Program Number:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 2); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "MPEG PMT PID:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 2); + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_mpeg_ca_pid, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item_ret_uint(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_mpeg_elem_stream_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "MPEG PID:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 2); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "MPEG Stream Type:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 1); + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_reserved, tvb, offset, 1, ENC_NA); + offset += 1; + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "MPEG Association Tag:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 2); + } + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "MPEG PCR:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 2); + break; + /* Table 4-77 Physical Channel */ + case RSRC_PHYS_CHAN: + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Channel ID (Hz):"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 4); + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_phys_chan_direction, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + /* Table 4-79 TS Upstream Bandwidth */ + case RSRC_TS_US_BW: + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "TS Upstream Bandwidth:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 4); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "TS Upstream TSID:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 4); + break; + /* Table 4-80 TS Downstream Bandwidth */ + case RSRC_TS_DS_BW: + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "TS Downstream Bandwidth:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 4); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "TS Downstream TSID:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 4); + break; + /* Table 4-81 ATM SVC Connection */ + case RSRC_ATM_SVC_CONN: + /* TODO - Unsure how to implement ITU-T Q.2931 */ + break; + /* Table 4-82 Connection Notify */ + case RSRC_CONN_NTFY: + /* no data fields */ + break; + /* Table 4-84 IP */ + case RSRC_IP: + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_src_ip_addr, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_src_ip_port, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_dst_ip_addr, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_dst_ip_port, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_ip_protocol, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + /* Table 4-85 Client TDMA Assignment */ + case RSRC_CLN_TDMA_ASSIGN: + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Start Slot Number:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 4); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Number of Slots:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 4); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Slot Spacing:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 4); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Upstream Transport ID:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 4); + break; + /* Table 4-86 PSTN Setup */ + case RSRC_PSTN_SETUP: + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_pstn_calling_id, tvb, offset, 12, ENC_NA); + offset += 12; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_pstn_called_id, tvb, offset, 12, ENC_NA); + offset += 12; + break; + /* Table 4-87 NISDN Setup */ + case RSRC_NISDN_SETUP: + /* TODO - Unsure how to implement ITU-T Q.931 */ + break; + /* Table 4-88 NISDN Connection */ + case RSRC_NISDN_CONN: + /* TODO - Unsure how to implement ITU-T Q.931 */ + break; + /* Table 4-89 Q.922 Connection */ + case RSRC_Q922_CONN: + proto_tree_add_item_ret_uint(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_dlci_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_dlci, tvb, offset, 2, ENC_NA); + offset += 2; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_dl_association_tag, tvb, offset, 2, ENC_NA); + offset += 2; + } + break; + /* Table 4-92 Headend List */ + case RSRC_HEADEND_LIST: + proto_tree_add_item_ret_uint(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_headend_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_headend_code, tvb, offset, 20, ENC_NA); + offset += 20; + } + break; + /* Table 4-93 ATM VC Connection */ + case RSRC_ATM_VC_CONN: + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_atm_vpi, tvb, offset, 2, ENC_NA); + offset += 2; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_atm_vci, tvb, offset, 2, ENC_NA); + offset += 2; + break; + /* Table 4-94 SDB Continuous Feed */ + case RSRC_SDB_CONT_FEED: + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_sdb_id, tvb, offset, 6, ENC_NA); + offset += 6; + proto_tree_add_item_ret_uint(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_sdb_program_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_sdb_association_tag, tvb, offset, 2, ENC_NA); + offset += 2; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_sdb_broadcast_program_id, tvb, offset, 2, ENC_NA); + offset += 2; + } + break; + /* Table 4-95 SDB Associations */ + case RSRC_SDB_ASSOC: + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_sdb_control_association_tag, tvb, offset, 2, ENC_NA); + offset += 2; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_sdb_program_association_tag, tvb, offset, 2, ENC_NA); + offset += 2; + break; + /* Table 4-96 SDB Entitlement */ + case RSRC_SDB_ENT: + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_sdb_id, tvb, offset, 6, ENC_NA); + offset += 6; + proto_tree_add_item_ret_uint(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_sdb_exclude_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_sdb_broadcast_program_id, tvb, offset, 2, ENC_NA); + offset += 2; + } + proto_tree_add_item_ret_uint(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_sdb_include_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_sdb_broadcast_program_id, tvb, offset, 2, ENC_NA); + offset += 2; + } + break; + /* User Defined - Modulation Mode */ + case RSRC_MODULATION_MODE: + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_trans_system, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_inner_coding, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_split_bitstream, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_mod_format, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_symbol_rate, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_reserved, tvb, offset, 1, ENC_NA); + offset += 1; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_interleave_depth, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_modulation_mode, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_fec, tvb, offset, 1, ENC_BIG_ENDIAN); + offset += 1; + break; + /* User Defined - Headend ID */ + case RSRC_HEADEND_ID: + tmp = tvb_get_guint16(tvb, offset, ENC_BIG_ENDIAN); + pi = proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_headend_flag, tvb, offset, 2, ENC_BIG_ENDIAN); + if ((tmp == 0) || (tmp > 4)) { + expert_add_info_format(pinfo, pi, &ei_dsmcc_invalid_value, "Invalid value - should be values 1 to 4"); + } + offset += 2; + sub_sub_sub_sub_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Headend ID:"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_sub_sub_tree); + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_headend_tsid, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + break; + /* User Defined - Server Conditional Access */ + case RSRC_SERVER_CA: + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Server CA System ID:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 2); + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_server_ca_copyprotect, tvb, offset, 2, ENC_NA); + offset += 2; + proto_tree_add_item_ret_uint(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_server_ca_usercount, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + sub_sub_sub_sub_tree = proto_tree_add_subtree_format(sub_sub_sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "User ID %u", 1+i); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_sub_sub_tree); + } + break; + /* User Defined - Client Conditional Access */ + case RSRC_CLIENT_CA: + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Client CA System ID:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 2); + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_client_ca_info_length, tvb, offset, 2, ENC_BIG_ENDIAN); + counter_ca = tvb_get_guint16(tvb, offset, ENC_BIG_ENDIAN); + offset += 2; + if (counter_ca > 0) + { + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_client_ca_info_data, tvb, offset, counter_ca, ENC_NA); + offset = offset + counter_ca; + } + break; + /* User Defined - Ethernet Interface */ + case RSRC_ETHERNET: + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Ethernet Source UDP:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 2); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Ethernet Source IP:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 4); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Ethernet Source MAC:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 6); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Ethernet Destination UDP:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 2); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Ethernet Destination IP:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 4); + rsrc_tree = proto_tree_add_subtree(sub_sub_sub_tree, tvb, offset, 0, ett_dsmcc_heading, NULL, "Ethernet Destination MAC:"); + offset += dissect_dsmcc_un_session_resource_value(tvb, offset, pinfo, rsrc_tree, 6); + break; + /* User Defined - Service Group */ + case RSRC_SERVICE_GROUP: + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_value_type, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_service_group, tvb, offset, 4, ENC_BIG_ENDIAN); + offset += 4; + break; + /* Table 4-90 Shared Resource */ + case RSRC_SHARED_RSRC: + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_shared_resource_num, tvb, offset, 2, ENC_NA); + offset += 2; + break; + /* Table 4-91 Shared Resource Request ID */ + case RSRC_SHARED_REQ_ID: + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_shared_resource_request_id, tvb, offset, 2, ENC_NA); + offset += 2; + break; + /* Table 4-63 Type Owner */ + case RSRC_TYPE_OWNER: + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_type_owner_id, tvb, offset, 3, ENC_NA); + offset += 3; + proto_tree_add_item(sub_sub_sub_tree, hf_dsmcc_un_sess_rsrc_type_owner_value, tvb, offset, 3, ENC_NA); + offset += 3; + break; + } + } + + return offset-offset_start; +} + +/* UserData() is vendor proprietary, therefore not dissected. */ +static guint +dissect_dsmcc_un_session_user_data( tvbuff_t *tvb, guint offset, packet_info *pinfo _U_, proto_tree *tree) { - guint offset_start; + guint offset_start; guint16 uu_len, priv_len; offset_start = offset; uu_len = tvb_get_ntohs(tvb, offset); - proto_tree_add_item(tree, hf_dsmcc_un_sess_uu_data_len, - tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_un_sess_uu_data_len, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; if (uu_len>0) { - proto_tree_add_item(tree, hf_dsmcc_un_sess_uu_data, - tvb, offset, uu_len, ENC_NA); + proto_tree_add_item(tree, hf_dsmcc_un_sess_uu_data, tvb, offset, uu_len, ENC_NA); offset += uu_len; } priv_len = tvb_get_ntohs(tvb, offset); - proto_tree_add_item(tree, hf_dsmcc_un_sess_priv_data_len, - tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_un_sess_priv_data_len, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; if (priv_len>0) { - proto_tree_add_item(tree, hf_dsmcc_un_sess_priv_data, - tvb, offset, priv_len, ENC_NA); + proto_tree_add_item(tree, hf_dsmcc_un_sess_priv_data, tvb, offset, priv_len, ENC_NA); offset += priv_len; } @@ -598,8 +1696,10 @@ static void dissect_dsmcc_un_session(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_tree *top_tree _U_) { - proto_item *pi; - proto_tree *sub_tree; + proto_item *pi; + proto_tree *sub_tree; + proto_tree *sub_sub_tree; + guint32 i, counter; guint16 msg_id; guint offset = 0; @@ -611,46 +1711,483 @@ dissect_dsmcc_un_session(tvbuff_t *tvb, packet_info *pinfo, col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, val_to_str(msg_id, dsmcc_un_sess_message_id_vals, "0x%x")); + offset += dissect_dsmcc_header(tvb, pinfo, sub_tree, offset, FALSE); + switch (msg_id) { + + /* CLIENT Messages */ + case DSMCC_UN_SESS_CLN_SESS_SET_REQ: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reserved, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + /* client nsap */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Client ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + /* server nsap */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + /* user data */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_SESS_SET_CNF: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "Resources"); + offset += dissect_dsmcc_un_session_resources(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_SESS_REL_REQ: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_SESS_REL_CNF: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_SESS_REL_IND: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_SESS_REL_RES: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_ADD_RSRC_IND: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "Resources"); + offset += dissect_dsmcc_un_session_resources(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_ADD_RSRC_RES: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "Resources"); + offset += dissect_dsmcc_un_session_resources(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_DEL_RSRC_IND: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_resource_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_resource_num, tvb, offset, 2, ENC_NA); + offset += 2; + } + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_DEL_RSRC_RES: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_STATUS_REQ: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Client ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_type, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_status_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_byte, tvb, offset, 1, ENC_NA); + offset += 1; + } + break; + case DSMCC_UN_SESS_CLN_STATUS_CNF: + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_type, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_status_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_byte, tvb, offset, 1, ENC_NA); + offset += 1; + } + break; + case DSMCC_UN_SESS_CLN_STATUS_IND: + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_type, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_status_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_byte, tvb, offset, 1, ENC_NA); + offset += 1; + } + break; + case DSMCC_UN_SESS_CLN_STATUS_RES: + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_type, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_status_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_byte, tvb, offset, 1, ENC_NA); + offset += 1; + } + break; + case DSMCC_UN_SESS_CLN_RESET_REQ: + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Client ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + case DSMCC_UN_SESS_CLN_RESET_CNF: + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Client ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + case DSMCC_UN_SESS_CLN_RESET_IND: + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Client ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + case DSMCC_UN_SESS_CLN_RESET_RES: + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Client ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + case DSMCC_UN_SESS_CLN_SESS_PROC_IND: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + case DSMCC_UN_SESS_CLN_CONN_REQ: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_SESS_TRN_IND: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_reserved, tvb, offset, 2, ENC_NA); + offset += 2; + /* client */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Client ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + /* old server */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Old Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + /* new server */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "New Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "Resources"); + offset += dissect_dsmcc_un_session_resources(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_SESS_TRN_RES: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_CLN_SESS_INP_REQ: + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_session_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + } + break; + + /* SERVER Messages */ + case DSMCC_UN_SESS_SRV_SESS_SET_IND: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reserved, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + /* client */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Client ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + /* server */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_forward_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Forward Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + } + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_SESS_SET_RES: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + /* server */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + /* next server */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Next Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "Resources"); + offset += dissect_dsmcc_un_session_resources(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; case DSMCC_UN_SESS_SRV_SESS_REL_REQ: - offset += dissect_dsmcc_header(tvb, pinfo, sub_tree, offset, FALSE); - proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_id, - tvb, offset, 10, ENC_NA); - offset += 10; - proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, - tvb, offset, 2, ENC_BIG_ENDIAN); + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; - offset += dissect_dsmcc_un_session_user_data( - tvb, offset, pinfo, sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); break; case DSMCC_UN_SESS_SRV_SESS_REL_CNF: - offset += dissect_dsmcc_header(tvb, pinfo, sub_tree, offset, FALSE); - proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_id, - tvb, offset, 10, ENC_NA); - offset += 10; - proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, - tvb, offset, 2, ENC_BIG_ENDIAN); + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; - offset += dissect_dsmcc_un_session_user_data( - tvb, offset, pinfo, sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); break; - case DSMCC_UN_SESS_SRV_STAT_REQ: - offset += dissect_dsmcc_header(tvb, pinfo, sub_tree, offset, FALSE); - proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, - tvb, offset, 2, ENC_BIG_ENDIAN); + case DSMCC_UN_SESS_SRV_SESS_REL_IND: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; - /* TODO: add server id, status type, status count */ - offset += 20; - /* TODO: skip status bytes */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); break; - case DSMCC_UN_SESS_SRV_STAT_CNF: - offset += dissect_dsmcc_header(tvb, pinfo, sub_tree, offset, FALSE); - proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, - tvb, offset, 2, ENC_BIG_ENDIAN); + case DSMCC_UN_SESS_SRV_SESS_REL_RES: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_ADD_RSRC_REQ: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "Resources"); + offset += dissect_dsmcc_un_session_resources(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_ADD_RSRC_CNF: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "Resources"); + offset += dissect_dsmcc_un_session_resources(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_DEL_RSRC_REQ: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_resource_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_resource_num, tvb, offset, 2, ENC_NA); + offset += 2; + } + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_DEL_RSRC_CNF: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_CONT_FEED_SESS_REQ: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reserved, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "Resources"); + offset += dissect_dsmcc_un_session_resources(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_CONT_FEED_SESS_CNF: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "Resources"); + offset += dissect_dsmcc_un_session_resources(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_STATUS_REQ: + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_type, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_status_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_byte, tvb, offset, 1, ENC_NA); + offset += 1; + } + break; + case DSMCC_UN_SESS_SRV_STATUS_CNF: + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_type, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_status_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_byte, tvb, offset, 1, ENC_NA); + offset += 1; + } + break; + case DSMCC_UN_SESS_SRV_STATUS_IND: + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_type, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_status_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_byte, tvb, offset, 1, ENC_NA); + offset += 1; + } + break; + case DSMCC_UN_SESS_SRV_STATUS_RES: + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_type, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_status_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_status_byte, tvb, offset, 1, ENC_NA); + offset += 1; + } + break; + case DSMCC_UN_SESS_SRV_RESET_REQ: + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + case DSMCC_UN_SESS_SRV_RESET_CNF: + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + case DSMCC_UN_SESS_SRV_RESET_IND: + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + case DSMCC_UN_SESS_SRV_RESET_RES: + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + case DSMCC_UN_SESS_SRV_SESS_PROC_IND: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_reason, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + break; + case DSMCC_UN_SESS_SRV_CONN_IND: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_SESS_TRN_REQ: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_reserved, tvb, offset, 2, ENC_NA); + offset += 2; + /* destination server */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Destination Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + /* base server */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Base Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_SESS_TRN_CNF: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); + offset += 2; + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_SESS_TRN_IND: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_reserved, tvb, offset, 2, ENC_NA); + offset += 2; + /* client */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Client ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + /* source server */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Source Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + /* base server */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, 20, ett_dsmcc_heading, NULL, "Base Server ID"); + offset += dissect_dsmcc_un_session_nsap(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "Resources"); + offset += dissect_dsmcc_un_session_resources(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_SESS_TRN_RES: + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + proto_tree_add_item(sub_tree, hf_dsmcc_un_sess_response, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; - /* TODO: add status type, status count */ - offset += 4; - /* TODO: skip status bytes */ + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "Resources"); + offset += dissect_dsmcc_un_session_resources(tvb, offset, pinfo, sub_sub_tree); + sub_sub_tree = proto_tree_add_subtree(sub_tree, tvb, offset, -1, ett_dsmcc_heading, NULL, "User Data"); + offset += dissect_dsmcc_un_session_user_data(tvb, offset, pinfo, sub_sub_tree); + break; + case DSMCC_UN_SESS_SRV_SESS_INP_REQ: + proto_tree_add_item_ret_uint(sub_tree, hf_dsmcc_un_sess_session_count, tvb, offset, 2, ENC_BIG_ENDIAN, &counter); + offset += 2; + for (i=0; i<counter; i++) + { + offset += dissect_dsmcc_un_session_id(tvb, offset, pinfo, sub_tree); + } break; default: break; @@ -689,6 +2226,7 @@ dissect_dsmcc_un(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, } } + static int dissect_dsmcc_ts(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree_in, void *data _U_) { @@ -709,38 +2247,27 @@ dissect_dsmcc_ts(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree_in, void *d col_set_str(pinfo->cinfo, COL_PROTOCOL, "DSM-CC"); tid = tvb_get_guint8(tvb, offset); - proto_tree_add_item(tree, hf_dsmcc_table_id, tvb, - offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_table_id, tvb, offset, 1, ENC_BIG_ENDIAN); offset +=1; ssi = tvb_get_ntohs(tvb, offset); ssi &= DSMCC_SSI_MASK; - proto_tree_add_item(tree, hf_dsmcc_section_syntax_indicator, tvb, - offset, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_dsmcc_private_indicator, tvb, - offset, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_dsmcc_reserved, tvb, - offset, 2, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_dsmcc_section_length, tvb, - offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_section_syntax_indicator, tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_private_indicator, tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_reserved, tvb, offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_section_length, tvb, offset, 2, ENC_BIG_ENDIAN); sect_len = tvb_get_ntohs(tvb, offset); sect_len &= DSMCC_LENGTH_MASK; offset += 2; - proto_tree_add_item(tree, hf_dsmcc_table_id_extension, tvb, - offset, 2, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_table_id_extension, tvb, offset, 2, ENC_BIG_ENDIAN); offset += 2; - proto_tree_add_item(tree, hf_dsmcc_reserved2, tvb, - offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_dsmcc_version_number, tvb, - offset, 1, ENC_BIG_ENDIAN); - proto_tree_add_item(tree, hf_dsmcc_current_next_indicator, tvb, - offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_reserved2, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_version_number, tvb, offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_current_next_indicator, tvb, offset, 1, ENC_BIG_ENDIAN); offset +=1; - proto_tree_add_item(tree, hf_dsmcc_section_number, tvb, - offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_section_number, tvb, offset, 1, ENC_BIG_ENDIAN); offset +=1; - proto_tree_add_item(tree, hf_dsmcc_last_section_number, tvb, - offset, 1, ENC_BIG_ENDIAN); + proto_tree_add_item(tree, hf_dsmcc_last_section_number, tvb, offset, 1, ENC_BIG_ENDIAN); offset +=1; sub_tvb = tvb_new_subset_length(tvb, offset, sect_len-9); @@ -780,10 +2307,10 @@ dissect_dsmcc_ts(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree_in, void *d proto_item *msg_error; msg_error = proto_tree_add_uint_format( tree, hf_dsmcc_crc, tvb, - crc_len, 4, crc, - "CRC: 0x%08x [Failed Verification (Calculated: 0x%08x)]", - crc, calculated_crc ); - proto_item_set_generated(msg_error); + crc_len, 4, crc, + "CRC: 0x%08x [Failed Verification (Calculated: 0x%08x)]", + crc, calculated_crc ); + PROTO_ITEM_SET_GENERATED(msg_error); expert_add_info( pinfo, msg_error, &ei_dsmcc_crc_invalid); } } else { @@ -817,6 +2344,27 @@ static int dissect_dsmcc_tcp(tvbuff_t *tvb, packet_info *pinfo, } +static int dissect_dsmcc_udp(tvbuff_t *tvb, packet_info *pinfo, + proto_tree *tree, void *data _U_) +{ + proto_item *pi; + proto_tree *sub_tree; + + if (tvb_get_guint8(tvb, 0) != DSMCC_PROT_DISC) + return 0; + + col_set_str(pinfo->cinfo, COL_PROTOCOL, "DSM-CC"); + col_clear(pinfo->cinfo, COL_INFO); + + pi = proto_tree_add_item(tree, proto_dsmcc, tvb, 0, -1, ENC_NA); + sub_tree = proto_item_add_subtree(pi, ett_dsmcc); + + dissect_dsmcc_un(tvb, pinfo, sub_tree, tree); + + return tvb_reported_length(tvb); +} + + void proto_register_dsmcc(void) { @@ -825,6 +2373,7 @@ proto_register_dsmcc(void) * each other. */ static hf_register_info hf[] = { + /* table 2-1 dsmccMessageHeader - start */ { &hf_dsmcc_protocol_discriminator, { "Protocol Discriminator", "mpeg_dsmcc.protocol", @@ -833,7 +2382,8 @@ proto_register_dsmcc(void) { &hf_dsmcc_type, { "Type", "mpeg_dsmcc.type", - FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(dsmcc_header_type_vals), 0, NULL, HFILL + FT_UINT8, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_header_type_vals), 0, NULL, HFILL } }, { &hf_dsmcc_message_id, { @@ -862,38 +2412,104 @@ proto_register_dsmcc(void) } }, /* table 2-1 dsmccMessageHeader - end */ + /* table 2-3 Transaction ID originator - start */ + { &hf_dsmcc_un_sess_flag_transaction_id_originator, { + "Transaction ID Originator", "mpeg_dsmcc.transaction_id_originator", + FT_UINT32, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_transaction_id_originator_vals), + DMSCC_FLAG_TRAN_ORIG, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_flag_transaction_id_number, { + "Transaction Number", "mpeg_dsmcc.transaction_id_number", + FT_UINT32, BASE_DEC, NULL, DMSCC_FLAG_TRAN_NUM, NULL, HFILL + } }, + /* table 2-3 Transaction ID originator - end */ /* table 2-4 dsmccAdaptationHeader - start */ { &hf_dsmcc_adaptation_type, { "Adaptation Type", "mpeg_dsmcc.adaptation_header.type", - FT_UINT8, BASE_HEX|BASE_RANGE_STRING, RVALS(dsmcc_adaptation_header_vals), 0, NULL, HFILL + FT_UINT8, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_adaptation_header_vals), 0, NULL, HFILL } }, /* table 2-4 dsmccAdaptationHeader - end */ /* table 2-6 dsmccConditionalAccess - start */ { &hf_dsmcc_adaptation_ca_reserved, { "Reserved", "mpeg_dsmcc.adaptation_header.ca.reserved", - FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } }, { &hf_dsmcc_adaptation_ca_system_id, { - "System ID", "mpeg_dsmcc.adaptation_header.ca.system_id", + "CA System ID", "mpeg_dsmcc.adaptation_header.ca.system_id", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL } }, { &hf_dsmcc_adaptation_ca_length, { - "System ID", "mpeg_dsmcc.adaptation_header.ca.length", + "CA Length", "mpeg_dsmcc.adaptation_header.ca.length", FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL } }, /* table 2-6 dsmccConditionalAccess - end */ - /* table 2-7 dsmccUserId - start */ { &hf_dsmcc_adaptation_user_id_reserved, { "Reserved", "mpeg_dsmcc.adaptation_header.uid.reserved", - FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL } }, - /* table 2-7 dsmccUserId - start */ + /* table 2-7 dsmccUserId - end */ + + /* other tables in section 4.2 - start */ + { &hf_dsmcc_un_sess_response, { + "Response", "mpeg_dsmcc.un_sess.response", + FT_UINT16, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_message_response_codes_vals), 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_reason, { + "Reason", "mpeg_dsmcc.un_sess.reason", + FT_UINT16, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_message_reason_codes_vals), 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_reserved, { + "Reserved", "mpeg_dsmcc.un_sess.reserved", + FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL + } }, + /* other tables in section 4.2 - end */ + + /* table 4-2 message discriminator - start */ + { &hf_dsmcc_un_sess_flag_message_discriminator, { + "Message Discriminator", "mpeg_dsmcc.message_discriminator", + FT_UINT16, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_message_discriminator_vals), + DMSCC_FLAG_MESS_DISCRIMINATOR, NULL, HFILL + } }, + /* table 4-2 message discriminator - end */ + + /* table 4-3 message scenario - start */ + { &hf_dsmcc_un_sess_flag_message_scenario, { + "Message Scenario", "mpeg_dsmcc.message_scenario", + FT_UINT16, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_message_scenario_vals), + DMSCC_FLAG_MESS_SCENARIO, NULL, HFILL + } }, + /* table 4-3 message scenario - end */ + + /* table 4-4 message type - start */ + { &hf_dsmcc_un_sess_flag_message_type, { + "Message Type", "mpeg_dsmcc.message_type", + FT_UINT16, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_message_type_vals), + DMSCC_FLAG_MESS_TYPE, NULL, HFILL + } }, + /* table 4-4 message type - end */ + + /* table 4-5 U-N Resources - start */ + { &hf_dsmcc_un_sess_rsrc_desc_count, { + "Resource Descriptor Count", "mpeg_dsmcc.un_sess.rsrc_desc_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + /* table 4-5 U-N Resources - end */ /* table 4-6 U-N user data format - start */ { &hf_dsmcc_un_sess_uu_data_len, { @@ -917,22 +2533,458 @@ proto_register_dsmcc(void) } }, /* table 4-6 U-N user data format - end */ - /* other tables in section 4.2 - start */ - { &hf_dsmcc_un_sess_id, { - "Session ID", "mpeg_dsmcc.un_sess.session_id", + /* 4-10 - Server Session Setup Indication message - start */ + { &hf_dsmcc_un_sess_forward_count, { + "Forward Count", "mpeg_dsmcc.un_sess.forward_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + /* 4-10 - Server Session Setup Indication message - start */ + + /* 4-26 - start */ + { &hf_dsmcc_un_sess_resource_count, { + "Resource Count", "mpeg_dsmcc.un_sess.resource_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_resource_num, { + "Resource Number", "mpeg_dsmcc.un_sess.resource_num", FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL } }, + /* 4-26 - end */ - { &hf_dsmcc_un_sess_response, { - "Response", "mpeg_dsmcc.un_sess.response", + /* table 4-35 ServerStatusRequest message, 4-36 ServerStatusConfirm message - start */ + { &hf_dsmcc_un_sess_status_type, { + "Status Type", "mpeg_dsmcc.un_sess.status_type", + FT_UINT16, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_status_type_vals), 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_status_count, { + "Status Count (Bytes)", "mpeg_dsmcc.un_sess.status_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_status_byte, { + "Status Byte", "mpeg_dsmcc.un_sess.status_byte", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-35 ServerStatusRequest message, 4-36 ServerStatusConfirm message - end */ + + /* table 4-56 - start */ + { &hf_dsmcc_un_sess_session_count, { + "Session Count", "mpeg_dsmcc.un_sess.session_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + /* table 4-56 - end */ + + /* table 4-58 Message Fields data types - start */ + { &hf_dsmcc_un_sess_session_id_device_id, { + "Device ID", "mpeg_dsmcc.un_sess.session_id_device_id", + FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_session_id_session_number, { + "Session Number", "mpeg_dsmcc.un_sess.session_id_session_number", + FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL + } }, + /* table 4-58 Message Fields data types - start */ + + /* table 4-63 U-N common descriptor header - start */ + { &hf_dsmcc_un_sess_rsrc_request_id, { + "Request ID", "mpeg_dsmcc.un_sess.rsrc_request_id", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_descriptor_type, { + "Descriptor Type", "mpeg_dsmcc.un_sess.rsrc_descriptor_type", + FT_UINT16, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_descriptor_type_vals), 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_number, { + "Resource Num", "mpeg_dsmcc.un_sess.rsrc_number", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL } }, - { &hf_dsmcc_un_sess_reason, { - "Reason", "mpeg_dsmcc.un_sess.reason", + { &hf_dsmcc_un_sess_rsrc_association_tag, { + "Association Tag", "mpeg_dsmcc.un_sess.rsrc_association_tag", FT_UINT16, BASE_HEX, NULL, 0, NULL, HFILL } }, - /* other tables in section 4.2 - end */ + + { &hf_dsmcc_un_sess_rsrc_flags, { + "Resource Flags", "mpeg_dsmcc.un_sess.rsrc_flags", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_status, { + "Resource Status", "mpeg_dsmcc.un_sess.rsrc_status", + FT_UINT8, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_status_vals), 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_desc_data_fields_length, { + "Data Fields Length", "mpeg_dsmcc.un_sess.rsrc_desc_data_fields_length", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_data_field_count, { + "Data Field Count", "mpeg_dsmcc.un_sess.rsrc_data_field_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_type_owner_id, { + "Type Owner ID", "mpeg_dsmcc.un_sess.rsrc_type_owner_id", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_type_owner_value, { + "Type Owner Value", "mpeg_dsmcc.un_sess.rsrc_type_owner_value", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-63 U-N common descriptor header - end */ + + /* table 4-64 U-N resource number assignor - start */ + { &hf_dsmcc_un_sess_rsrc_flag_num_assignor, { + "Resource Num Assignor", "mpeg_dsmcc.un_sess.rsrc_flag_num_assignor", + FT_UINT16, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_number_assignor_vals), + DMSCC_FLAG_RSRC_NUM_ASSIGNOR, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_flag_num_value, { + "Resource Num Value", "mpeg_dsmcc.un_sess.rsrc_flag_num_value", + FT_UINT16, BASE_DEC, NULL, DMSCC_FLAG_RSRC_NUM_VALUE, NULL, HFILL + } }, + /* table 4-64 U-N resource number assignor - end */ + + /* table 4-65 U-N resource association tag assignor - start */ + { &hf_dsmcc_un_sess_rsrc_flag_association_tag_assignor, { + "Association Tag Assignor", "mpeg_dsmcc.un_sess.rsrc_flag_association_tag_assignor", + FT_UINT16, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_association_tag_vals), + DMSCC_FLAG_RSRC_ASSOC_TAG_ASSIGNOR, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_flag_association_tag_value, { + "Association Tag Value", "mpeg_dsmcc.un_sess.rsrc_flag_association_tag_value", + FT_UINT16, BASE_DEC, NULL, DMSCC_FLAG_RSRC_ASSOC_TAG_VALUE, NULL, HFILL + } }, + /* table 4-65 U-N resource association tag assignor - end */ + + /* table 4-66 U-N resource allocator - start */ + { &hf_dsmcc_un_sess_rsrc_flag_allocator, { + "Resource Allocator", "mpeg_dsmcc.un_sess.rsrc_flag_allocator", + FT_UINT8, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_allocator_vals), + DMSCC_FLAG_RSRC_ALLOCATOR, NULL, HFILL + } }, + /* table 4-66 U-N resource allocator - end */ + + /* table 4-67 U-N resource attribute - start */ + { &hf_dsmcc_un_sess_rsrc_flag_attribute, { + "Resource Attribute", "mpeg_dsmcc.un_sess.rsrc_flag_attribute", + FT_UINT8, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_attribute_vals), + DMSCC_FLAG_RSRC_ATTRIBUTE, NULL, HFILL + } }, + /* table 4-67 U-N resource attribute - end */ + + /* table 4-68 U-N resource view - start */ + { &hf_dsmcc_un_sess_rsrc_flag_view, { + "Resource View", "mpeg_dsmcc.un_sess.rsrc_flag_view", + FT_UINT8, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_view_vals), + DMSCC_FLAG_RSRC_VIEW, NULL, HFILL + } }, + /* table 4-68 U-N resource view - end */ + + /* table 4-71 U-N dsmccResourceDescriptorValue() field format - start */ + { &hf_dsmcc_un_sess_rsrc_value_type, { + "Value Type", "mpeg_dsmcc.un_sess.rsrc_value_type", + FT_UINT16, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_value_types_vals), 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_value_count, { + "Value Count", "mpeg_dsmcc.un_sess.rsrc_value_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_value_data, { + "Value Data", "mpeg_dsmcc.un_sess.rsrc_value_data", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_most_desired, { + "Most Desired", "mpeg_dsmcc.un_sess.rsrc_most_desired", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_least_desired, { + "Least Desired", "mpeg_dsmcc.un_sess.rsrc_least_desired", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-71 U-N dsmccResourceDescriptorValue() field format - end */ + + /* table 4-74 U-N Continuous Feed Session resource descriptor - start */ + { &hf_dsmcc_un_sess_rsrc_cfs_num_count, { + "Resource Num Count", "mpeg_dsmcc.un_sess.rsrc_cfs_num_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_cfs_num, { + "Resource Number", "mpeg_dsmcc.un_sess.rsrc_cfs_num", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-74 U-N Continuous Feed Session resource descriptor - end */ + + /* table 4-75 U-N ATM Connection resource descriptor - start */ + { &hf_dsmcc_un_sess_rsrc_atm_vpi, { + "ATM VPI", "mpeg_dsmcc.un_sess.rsrc_atm_vpi", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_atm_vci, { + "ATM VCI", "mpeg_dsmcc.un_sess.rsrc_atm_vci", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-75 U-N ATM Connection resource descriptor - end */ + + /* table 4-76 MPEG Program - start */ + { &hf_dsmcc_un_sess_rsrc_mpeg_ca_pid, { + "MPEG CA PID", "mpeg_dsmcc.un_sess.rsrc_mpeg_ca_pid", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_mpeg_elem_stream_count, { + "Elementary Stream Count", "mpeg_dsmcc.un_sess.rsrc_mpeg_elem_stream_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_reserved, { + "Reserved", "mpeg_dsmcc.un_sess.rsrc_reserved", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-76 MPEG Program - end */ + + /* table 4-77 Physical Channel - start */ + { &hf_dsmcc_un_sess_rsrc_phys_chan_direction, { + "Channel Direction", "mpeg_dsmcc.un_sess.rsrc_phys_chan_direction", + FT_UINT16, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_phys_chan_direction_vals), 0, NULL, HFILL + } }, + /* table 4-77 Physical Channel - end */ + + /* table 4-84 IP - start */ + { &hf_dsmcc_un_sess_rsrc_src_ip_addr, { + "Source IP Address", "mpeg_dsmcc.un_sess.rsrc_src_ip_addr", + FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_src_ip_port, { + "Source IP Port", "mpeg_dsmcc.un_sess.rsrc_src_ip_port", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_dst_ip_addr, { + "Destination IP Address", "mpeg_dsmcc.un_sess.rsrc_dst_ip_addr", + FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_dst_ip_port, { + "Destination IP Port", "mpeg_dsmcc.un_sess.rsrc_dst_ip_port", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_ip_protocol, { + "IP Protocol", "mpeg_dsmcc.un_sess.rsrc_ip_protocol", + FT_UINT16, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_ip_protocol_types_vals), 0, NULL, HFILL + } }, + /* table 4-84 IP - end */ + + /* table 4-86 PSTN Setup - start */ + { &hf_dsmcc_un_sess_rsrc_pstn_calling_id, { + "Calling ID", "mpeg_dsmcc.un_sess.rsrc_pstn_calling_id", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_pstn_called_id, { + "Called ID", "mpeg_dsmcc.un_sess.rsrc_pstn_called_id", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-86 PSTN Setup - end */ + + /* table 4-89 Q.922 Connection - start */ + { &hf_dsmcc_un_sess_rsrc_dlci_count, { + "DL CI Count", "mpeg_dsmcc.un_sess.rsrc_dlci_count", + FT_UINT8, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_dlci, { + "DL CI", "mpeg_dsmcc.un_sess.rsrc_dlci", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_dl_association_tag, { + "Association Tag", "mpeg_dsmcc.un_sess.rsrc_dl_association_tag", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-89 Q.922 Connection - end */ + + /* table 4-90 Shared Resource - start */ + { &hf_dsmcc_un_sess_rsrc_shared_resource_num, { + "Shared Resource Num", "mpeg_dsmcc.un_sess.rsrc_shared_resource_num", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-90 Shared Resource - end */ + + /* table 4-91 Shared Request ID - start */ + { &hf_dsmcc_un_sess_rsrc_shared_resource_request_id, { + "Shared Request ID", "mpeg_dsmcc.un_sess.rsrc_shared_resource_request_id", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-91 Shared Request ID - end */ + + /* table 4-92 Headend List - start */ + { &hf_dsmcc_un_sess_rsrc_headend_count, { + "Headend Count", "mpeg_dsmcc.un_sess.rsrc_headend_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_headend_code, { + "Headend Code", "mpeg_dsmcc.un_sess.rsrc_headend_code", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-92 Headend List - end */ + + /* table 4-94 Continuous Feed - start */ + { &hf_dsmcc_un_sess_rsrc_sdb_id, { + "SDB ID", "mpeg_dsmcc.un_sess.rsrc_sdb_id", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_sdb_program_count, { + "Program Count", "mpeg_dsmcc.un_sess.rsrc_sdb_program_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_sdb_association_tag, { + "Association Tag", "mpeg_dsmcc.un_sess.rsrc_sdb_association_tag", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_sdb_broadcast_program_id, { + "Broadcast Program ID", "mpeg_dsmcc.un_sess.rsrc_sdb_broadcast_program_id", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-94 Continuous Feed - end */ + + /* table 4-95 SDB Associations - start */ + { &hf_dsmcc_un_sess_rsrc_sdb_control_association_tag, { + "Control Association Tag", "mpeg_dsmcc.un_sess.rsrc_sdb_control_association_tag", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_sdb_program_association_tag, { + "Program Association Tag", "mpeg_dsmcc.un_sess.rsrc_sdb_program_association_tag", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table 4-95 SDB Associations - end */ + + /* table 4-96 SDB Entitlement - start */ + { &hf_dsmcc_un_sess_rsrc_sdb_exclude_count, { + "Exclude Count", "mpeg_dsmcc.un_sess.rsrc_sdb_exclude_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_sdb_include_count, { + "Include Count", "mpeg_dsmcc.un_sess.rsrc_sdb_include_count", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + /* table 4-96 SDB Entitlement - end */ + + /* User defined 0xf001-0xf007 - start */ + { &hf_dsmcc_un_sess_rsrc_trans_system, { + "Transmission System", "mpeg_dsmcc.un_sess.rsrc_trans_system", + FT_UINT8, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_transmission_system_vals), 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_inner_coding, { + "Inner Coding", "mpeg_dsmcc.un_sess.rsrc_inner_coding", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_split_bitstream, { + "Split Bitstream", "mpeg_dsmcc.un_sess.rsrc_split_bitstream", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_mod_format, { + "Modulation Format", "mpeg_dsmcc.un_sess.rsrc_mod_format", + FT_UINT8, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_modulation_format_vals), 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_symbol_rate, { + "Symbol Rate", "mpeg_dsmcc.un_sess.rsrc_symbol_rate", + FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_interleave_depth, { + "Interleave Depth", "mpeg_dsmcc.un_sess.rsrc_interleave_depth", + FT_UINT8, BASE_HEX, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_modulation_mode, { + "Modulation Mode", "mpeg_dsmcc.un_sess.rsrc_modulation_mode", + FT_UINT8, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_mod_mode_vals), 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_fec, { + "Forward Error Correction", "mpeg_dsmcc.un_sess.rsrc_fec", + FT_UINT8, BASE_HEX|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_fec_vals), 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_headend_flag, { + "Headend Flag", "mpeg_dsmcc.un_sess.rsrc_headend_flag", + FT_UINT16, BASE_DEC|BASE_RANGE_STRING, + RVALS(dsmcc_un_sess_rsrc_headend_flag_vals), 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_headend_tsid, { + "Headend TSID", "mpeg_dsmcc.un_sess.rsrc_headend_tsid", + FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_server_ca_copyprotect, { + "Copy Protect", "mpeg_dsmcc.un_sess.rsrc_server_ca_copyprotect", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_server_ca_usercount, { + "User Count", "mpeg_dsmcc.un_sess.rsrc_server_ca_usercount", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_client_ca_info_length, { + "CA Info Length", "mpeg_dsmcc.un_sess.rsrc_client_ca_info_length", + FT_UINT16, BASE_DEC, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_client_ca_info_data, { + "CA Info Data", "mpeg_dsmcc.un_sess.rsrc_client_ca_info_data", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_rsrc_service_group, { + "Service Group", "mpeg_dsmcc.un_sess.rsrc_service_group", + FT_UINT32, BASE_DEC, NULL, 0, NULL, HFILL + } }, + /* User defined 0xf001-0xf007 - end */ /* table 6-1 compatabilityDescriptor - start */ { &hf_compat_desc_length, { @@ -991,7 +3043,6 @@ proto_register_dsmcc(void) } }, /* table 6-1 compatabilityDescriptor - end */ - /* table 7-3 dsmccDownloadDataHeader - start */ { &hf_dsmcc_dd_download_id, { "Download ID", "mpeg_dsmcc.download_id", @@ -1000,11 +3051,11 @@ proto_register_dsmcc(void) { &hf_dsmcc_dd_message_id, { "Message ID", "mpeg_dsmcc.message_id", - FT_UINT16, BASE_HEX, VALS(dsmcc_dd_message_id_vals), 0, NULL, HFILL + FT_UINT16, BASE_HEX, + VALS(dsmcc_dd_message_id_vals), 0, NULL, HFILL } }, /* table 7-3 dsmccDownloadDataHeader - end */ - /* table 7-6 downloadInfoIndication - start */ { &hf_dsmcc_dii_download_id, { "Download ID", "mpeg_dsmcc.dii.download_id", @@ -1067,7 +3118,6 @@ proto_register_dsmcc(void) } }, /* table 7-6 downloadInfoIndication - end */ - /* table 7-7 dsmccDownloadDataBlock - start */ { &hf_dsmcc_ddb_module_id, { "Module ID", "mpeg_dsmcc.ddb.module_id", @@ -1090,7 +3140,6 @@ proto_register_dsmcc(void) } }, /* table 7-7 dsmccDownloadDataBlock - end */ - /* table 9-2 - start */ { &hf_dsmcc_table_id, { "Table ID", "mpeg_sect.table_id", @@ -1158,6 +3207,32 @@ proto_register_dsmcc(void) } }, /* table 9-2 - end */ + /* table J.3 NSAP - start */ + { &hf_dsmcc_un_sess_nsap_afi, { + "Authority and Format Identifier (AFI)", "mpeg_dsmcc.un_sess.dsmcc_nsap_afi", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_nsap_idi, { + "Initial Domain Identifier (IDI)", "mpeg_dsmcc.un_sess.dsmcc_nsap_idi", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_nsap_ho_dsp, { + "High Order DSP (HO-DSP)", "mpeg_dsmcc.un_sess.dsmcc_nsap_ho_dsp", + FT_IPv4, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_nsap_esi, { + "End System Identifier (ESI)", "mpeg_dsmcc.un_sess.dsmcc_nsap_esi", + FT_ETHER, BASE_NONE, NULL, 0, NULL, HFILL + } }, + + { &hf_dsmcc_un_sess_nsap_sel, { + "Selector (SEL)", "mpeg_dsmcc.un_sess.dsmcc_nsap_esi", + FT_BYTES, BASE_NONE, NULL, 0, NULL, HFILL + } }, + /* table J.3 NSAP - end */ { &hf_etv_module_abs_path, { "Module Absolute Path", "etv.dsmcc.dii.module_abs_path", @@ -1168,6 +3243,7 @@ proto_register_dsmcc(void) "Authority", "etv.dsmcc.dii.authority", FT_UINT_STRING, BASE_NONE, NULL, 0, NULL, HFILL } } + /* table J.3 NSAP - end */ }; static gint *ett[] = { @@ -1175,13 +3251,21 @@ proto_register_dsmcc(void) &ett_dsmcc_payload, &ett_dsmcc_adaptation_header, &ett_dsmcc_header, + &ett_dsmcc_message_id, + &ett_dsmcc_transaction_id, + &ett_dsmcc_heading, + &ett_dsmcc_rsrc_number, + &ett_dsmcc_rsrc_association_tag, + &ett_dsmcc_rsrc_flags, &ett_dsmcc_compat, &ett_dsmcc_compat_sub_desc, &ett_dsmcc_dii_module }; static ei_register_info ei[] = { - { &ei_dsmcc_invalid_value, { "mpeg_dsmcc.invalid_value", PI_PROTOCOL, PI_WARN, "Invalid value", EXPFILL }}, - { &ei_dsmcc_crc_invalid, { "mpeg_sect.crc.invalid", PI_CHECKSUM, PI_WARN, "Invalid CRC", EXPFILL }}, + { &ei_dsmcc_invalid_value, { "mpeg_dsmcc.invalid_value", PI_PROTOCOL, PI_WARN, + "Invalid value", EXPFILL }}, + { &ei_dsmcc_crc_invalid, { "mpeg_sect.crc.invalid", PI_CHECKSUM, PI_WARN, + "Invalid CRC", EXPFILL }}, }; module_t *dsmcc_module; @@ -1207,10 +3291,11 @@ proto_register_dsmcc(void) void proto_reg_handoff_dsmcc(void) { - dissector_handle_t dsmcc_ts_handle, dsmcc_tcp_handle; + dissector_handle_t dsmcc_ts_handle, dsmcc_tcp_handle, dsmcc_udp_handle; dsmcc_ts_handle = create_dissector_handle(dissect_dsmcc_ts, proto_dsmcc); dsmcc_tcp_handle = create_dissector_handle(dissect_dsmcc_tcp, proto_dsmcc); + dsmcc_udp_handle = create_dissector_handle(dissect_dsmcc_udp, proto_dsmcc); dissector_add_uint("mpeg_sect.tid", DSMCC_TID_LLCSNAP, dsmcc_ts_handle); dissector_add_uint("mpeg_sect.tid", DSMCC_TID_UN_MSG, dsmcc_ts_handle); @@ -1219,6 +3304,7 @@ proto_reg_handoff_dsmcc(void) dissector_add_uint("mpeg_sect.tid", DSMCC_TID_PRIVATE, dsmcc_ts_handle); dissector_add_uint_with_preference("tcp.port", DSMCC_TCP_PORT, dsmcc_tcp_handle); + dissector_add_uint_with_preference("udp.port", DSMCC_UDP_PORT, dsmcc_udp_handle); } /* |