Add dissection of HI3CCLinkData
authorAnders Broman <anders.broman@ericsson.com>
Wed, 5 Dec 2018 12:41:11 +0000 (13:41 +0100)
committerAnders Broman <a.broman58@gmail.com>
Wed, 5 Dec 2018 13:38:55 +0000 (13:38 +0000)
Change-Id: I002c31972c4bcc231527eeaa2c6b21c3b1a9636a
Reviewed-on: https://code.wireshark.org/review/30920
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
docbook/release-notes.asciidoc
epan/dissectors/CMakeLists.txt
epan/dissectors/asn1/HI2Operations/CMakeLists.txt
epan/dissectors/asn1/HI2Operations/HI2Operations.cnf
epan/dissectors/asn1/HI2Operations/HI3CCLinkData.asn [new file with mode: 0644]
epan/dissectors/asn1/HI2Operations/packet-HI2Operations-template.c
epan/dissectors/asn1/HI2Operations/packet-HI2Operations-template.h [new file with mode: 0644]
epan/dissectors/packet-HI2Operations.c
epan/dissectors/packet-HI2Operations.h [new file with mode: 0644]

index 5baca204d33784a44d63becccda9c5826a9b077e..c051bccde9c4ba47dfd03db5359b81205927f009 100644 (file)
@@ -95,6 +95,7 @@ GCSNA General Circuit Services Notification Application Protocol
 GLOW Lawo Emberplus Data format
 GSM-R protocol (User-to-User Information Element usage)
 GSUP (Osmocom Generic Subscriber Update Protocol)
+HI3CCLinkData
 Local Number Portability Database Query Protocol(ANSI)
 MsgPack protocol
 NGAP (5G) protocol
index c76739e9edf58a1bc3c5892161a6089d79e05490..55b2f9e1b047a947179158a50cce34693f9393dd 100644 (file)
@@ -375,6 +375,7 @@ set(DISSECTOR_PUBLIC_HEADERS
        packet-h265.h
        packet-h323.h
        packet-h450-ros.h
+       packet-HI2Operations.h
        packet-hpext.h
        packet-http.h
        packet-http2.h
index a18915c8caf6b480130abf15ba60335c76a203ec..29e762d8690f574ca1fe7334c54115b1f227ad7f 100644 (file)
@@ -11,6 +11,7 @@ set( PROTOCOL_NAME HI2Operations )
 
 set( ASN_FILE_LIST
        HI2Operations_ver11.asn
+       HI3CCLinkData.asn
        UmtsHI2Operations.asn
        TS101909201.asn
        PCESP.asn
@@ -20,6 +21,7 @@ set( ASN_FILE_LIST
 set( EXTRA_DIST
        ${ASN_FILE_LIST}
        packet-${PROTOCOL_NAME}-template.c
+       packet-${PROTOCOL_NAME}-template.h
        ${PROTOCOL_NAME}.cnf
 )
 
@@ -30,7 +32,4 @@ set( SRC_FILES
 
 set( A2W_FLAGS -b )
 
-set( EXTRA_CNF
-)
-
 ASN2WRS()
index e7ca5113d39251fd6bfbafaf51ececd64acfba37..37d086f36936cd0060606f5dac03c1430511dc7b 100644 (file)
@@ -6,14 +6,17 @@ UmtsHI2Operations UmtsHI2
 PCESP PCESP
 TS101909201 TS101909201
 EN301040       EN301040
+HI3CCLinkData  hi3cclinkdata
 #.MODULE_IMPORT
 
 #.EXPORTS
+UUS1-Content_PDU
 
 #.REGISTER
 
 #.PDU
 IRIsContent
+UUS1-Content
 
 #.NO_EMIT
 
@@ -28,6 +31,69 @@ LIMODIFYconf
 LISTATUSind
 StatusType
 
+#.FN_HDR UUS1-Content
+
+/* Heuristic test to see if it's our content */
+    gint8    tmp_class;
+    gboolean tmp_pc;
+    gint32   tmp_tag;
+    int      tmp_offset;
+    guint    length = tvb_captured_length(tvb);
+    guint32  tmp_length;
+    gboolean tmp_ind;
+
+    /* Check for min length */
+    if (length < 6){
+      return 0;
+    }
+    /* We start with UUS1-Content ::= SEQUENCE */
+    tmp_offset = get_ber_identifier(tvb, offset, &tmp_class, &tmp_pc, &tmp_tag);
+    if(tmp_class != BER_CLASS_UNI){
+      return 0;
+    }
+    if(tmp_pc != 1){
+      return 0;
+    }
+    if(tmp_tag != BER_UNI_TAG_SEQUENCE){
+      return 0;
+    }
+    /* Get length just to move offset forward */
+    tmp_offset = get_ber_length(tvb, tmp_offset, &tmp_length, &tmp_ind);
+
+    /* Next 2 mandatorry elements
+     *  lawfullInterceptionIdentifier [1] LawfulInterceptionIdentifier,
+     *  communicationIdentifier       [2] CommunicationIdentifier,
+     */
+    tmp_offset = get_ber_identifier(tvb, tmp_offset, &tmp_class, &tmp_pc, &tmp_tag);
+    if(tmp_class != BER_CLASS_CON){
+      return 0;
+    }
+    if(tmp_pc != 0){
+      return 0;
+    }
+    if(tmp_tag != 1){
+      return 0;
+    }
+
+#.FN_BODY Network-Element-Identifier/e164-Format VAL_PTR = &parameter_tvb
+  tvbuff_t *parameter_tvb=NULL;
+
+%(DEFAULT_BODY)s
+  if (!parameter_tvb)
+    return offset;
+
+  dissect_isup_calling_party_number_parameter(parameter_tvb, actx->pinfo, tree, NULL);
+
+#.FN_BODY UUS1-Content/bearer-capability VAL_PTR =&parameter_tvb
+  tvbuff_t *parameter_tvb;
+
+%(DEFAULT_BODY)s
+
+  if (!parameter_tvb)
+    return offset;
+
+  dissect_q931_bearer_capability_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), tree);
+
 #.TYPE_RENAME
 
 #.FIELD_RENAME
diff --git a/epan/dissectors/asn1/HI2Operations/HI3CCLinkData.asn b/epan/dissectors/asn1/HI2Operations/HI3CCLinkData.asn
new file mode 100644 (file)
index 0000000..ccd7a5c
--- /dev/null
@@ -0,0 +1,68 @@
+HI3CCLinkData
+{itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) hi3(2) cclinkLI(4) version4(4)}
+
+DEFINITIONS IMPLICIT TAGS ::=
+
+BEGIN
+
+IMPORTS
+    -- from clause D.5
+    LawfulInterceptionIdentifier,
+    CommunicationIdentifier,
+    CC-Link-Identifier
+        FROM HI2Operations
+        {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2) hi2(1) version8(8)};
+
+-- =============================
+-- Object Identifier Definitions
+-- =============================
+
+-- LawfulIntercept DomainId
+-- WS Allready in HI2... lawfulInterceptDomainId OBJECT IDENTIFIER ::= {itu-t(0) identified-organization(4) etsi(0) securityDomain(2) lawfulIntercept(2)}
+
+-- hi3 Domain
+hi3CCLinkId OBJECT IDENTIFIER ::= {lawfulInterceptDomainId hi3(2) ccLinkLI(4)}
+hi3CCLinkIdOperationId OBJECT IDENTIFIER ::= {hi3CCLinkId version4(4)}
+
+UUS1-Content    ::= SEQUENCE
+{
+    domainID                            [0] OBJECT IDENTIFIER (hi3CCLinkIdOperationId) OPTIONAL,
+        -- Once using FTP delivery mechanism
+    lawfullInterceptionIdentifier       [1] LawfulInterceptionIdentifier,
+    communicationIdentifier                [2] CommunicationIdentifier,
+    cC-Link-Identifier                  [3] CC-Link-Identifier OPTIONAL,
+    direction-Indication                [4] Direction-Indication,
+    bearer-capability                   [5] OCTET STRING (SIZE(1..12)) OPTIONAL,
+        -- transport the Bearer capability information element (value part)
+        -- Protocol: EN 300 403-1 [6]
+    service-Information                 [7] Service-Information OPTIONAL,
+    ...
+}
+
+-- ==================
+-- PARAMETERS FORMATS
+-- ==================
+
+Direction-Indication    ::= ENUMERATED
+{
+    mono-mode(0),
+    cc-from-target(1),
+    cc-from-other-party(2),
+    ...,
+    direction-unknown(3)
+}
+
+Service-Information ::= SET
+{
+    high-layer-capability   [0] OCTET STRING (SIZE(1)) OPTIONAL,
+        -- HLC (octet 4 only)
+        -- Protocol: EN 300 403-1 [6]
+    tMR                     [1] OCTET STRING (SIZE(1)) OPTIONAL,
+        -- Transmission Medium Requirement
+        -- Protocol: ISUP EN 300 356 [5]
+    bearerServiceCode   [2] OCTET STRING (SIZE(1)) OPTIONAL,
+    teleServiceCode     [3] OCTET STRING (SIZE(1)) OPTIONAL
+        -- from MAP, TS GSM 09.02 [32], clause 14.7.9 and clause 14.7.10
+}
+
+END -- end of HI3CCLinkData
index 705d42ddadbc0047d25e2f3081a653090cb94e65..f2b086943313853c17b6f81037db05a64a3a64ab 100644 (file)
@@ -17,6 +17,9 @@
 #include <epan/asn1.h>
 
 #include "packet-ber.h"
+#include "packet-isup.h"
+#include "packet-q931.h"
+#include "packet-HI2Operations.h"
 
 #define PNAME  "HI2Operations"
 #define PSNAME "HI2OPERATIONS"
@@ -56,10 +59,16 @@ void proto_register_HI2Operations(void) {
   proto_register_subtree_array(ett, array_length(ett));
 
   register_dissector("HI2Operations", dissect_IRIsContent_PDU, proto_HI2Operations);
+
+
 }
 
 
 /*--- proto_reg_handoff_HI2Operations -------------------------------------------*/
 void proto_reg_handoff_HI2Operations(void) {
+
+    heur_dissector_add("q931_user", dissect_HI2Operations_UUS1_Content_PDU, "HI3CCLinkData", "hi3cclinkdata",
+        proto_HI2Operations, HEURISTIC_ENABLE);
+
 }
 
diff --git a/epan/dissectors/asn1/HI2Operations/packet-HI2Operations-template.h b/epan/dissectors/asn1/HI2Operations/packet-HI2Operations-template.h
new file mode 100644 (file)
index 0000000..29c5d96
--- /dev/null
@@ -0,0 +1,32 @@
+/* packet-HI2Operations-template.h
+ *
+ * Routines for HI2 (ETSI TS 101 671 V3.5.1 (2009-11))
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+
+#ifndef PACKET_HI2OPERATIONS_H
+#define PACKET_HI2OPERATIONS_H
+
+#include "packet-HI2Operations-exp.h"
+
+#endif /* if PACKET_HI2OPERATIONS_H */
+
+
+/*
+ * Editor modelines
+ *
+ * Local Variables:
+ * c-basic-offset: 2
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * ex: set shiftwidth=2 tabstop=8 expandtab:
+ * :indentSize=2:tabSize=8:noTabs=true:
+ */
index 155a1ae2651347b2dbef1066526eec25021c09ef..4aeeeb862dd58dd84ea4f1410a6f045be5eed1be 100644 (file)
@@ -1,7 +1,7 @@
 /* Do not modify this file. Changes will be overwritten.                      */
 /* Generated automatically by the ASN.1 to Wireshark dissector compiler       */
 /* packet-HI2Operations.c                                                     */
-/* asn2wrs.py -b -p HI2Operations -c ./HI2Operations.cnf -s ./packet-HI2Operations-template -D . -O ../.. HI2Operations_ver11.asn UmtsHI2Operations.asn TS101909201.asn PCESP.asn EN301040.asn */
+/* asn2wrs.py -b -p HI2Operations -c ./HI2Operations.cnf -s ./packet-HI2Operations-template -D . -O ../.. HI2Operations_ver11.asn HI3CCLinkData.asn UmtsHI2Operations.asn TS101909201.asn PCESP.asn EN301040.asn */
 
 /* Input file: packet-HI2Operations-template.c */
 
@@ -25,6 +25,9 @@
 #include <epan/asn1.h>
 
 #include "packet-ber.h"
+#include "packet-isup.h"
+#include "packet-q931.h"
+#include "packet-HI2Operations.h"
 
 #define PNAME  "HI2Operations"
 #define PSNAME "HI2OPERATIONS"
@@ -39,6 +42,7 @@ int proto_HI2Operations = -1;
 /*--- Included file: packet-HI2Operations-hf.c ---*/
 #line 1 "./asn1/HI2Operations/packet-HI2Operations-hf.c"
 static int hf_HI2Operations_IRIsContent_PDU = -1;  /* IRIsContent */
+static int hf_HI2Operations_HI2Operations_UUS1_Content_PDU = -1;  /* UUS1_Content */
 static int hf_HI2Operations_iRIContent = -1;      /* IRIContent */
 static int hf_HI2Operations_iRISequence = -1;     /* IRISequence */
 static int hf_HI2Operations_IRISequence_item = -1;  /* IRIContent */
@@ -92,7 +96,7 @@ static int hf_HI2Operations_communication_Identity_Number = -1;  /* OCTET_STRING
 static int hf_HI2Operations_network_Identifier = -1;  /* Network_Identifier */
 static int hf_HI2Operations_operator_Identifier = -1;  /* OCTET_STRING_SIZE_1_5 */
 static int hf_HI2Operations_network_Element_Identifier = -1;  /* Network_Element_Identifier */
-static int hf_HI2Operations_e164_Format = -1;     /* OCTET_STRING_SIZE_1_25 */
+static int hf_HI2Operations_e164_Format = -1;     /* T_e164_Format */
 static int hf_HI2Operations_x25_Format = -1;      /* OCTET_STRING_SIZE_1_25 */
 static int hf_HI2Operations_iP_Format = -1;       /* OCTET_STRING_SIZE_1_25 */
 static int hf_HI2Operations_dNS_Format = -1;      /* OCTET_STRING_SIZE_1_25 */
@@ -109,6 +113,7 @@ static int hf_HI2Operations_imsi = -1;            /* OCTET_STRING_SIZE_3_8 */
 static int hf_HI2Operations_callingPartyNumber = -1;  /* CallingPartyNumber */
 static int hf_HI2Operations_calledPartyNumber = -1;  /* CalledPartyNumber */
 static int hf_HI2Operations_msISDN = -1;          /* OCTET_STRING_SIZE_1_9 */
+static int hf_HI2Operations_e164_Format_01 = -1;  /* OCTET_STRING_SIZE_1_25 */
 static int hf_HI2Operations_sip_uri = -1;         /* OCTET_STRING */
 static int hf_HI2Operations_tel_url = -1;         /* OCTET_STRING */
 static int hf_HI2Operations_services_Information = -1;  /* Services_Information */
@@ -204,6 +209,14 @@ static int hf_HI2Operations_iP_assignment = -1;   /* T_iP_assignment */
 static int hf_HI2Operations_iPBinaryAddress = -1;  /* OCTET_STRING_SIZE_4_16 */
 static int hf_HI2Operations_iPTextAddress = -1;   /* IA5String_SIZE_7_45 */
 static int hf_HI2Operations_countryCode = -1;     /* PrintableString_SIZE_2 */
+static int hf_HI2Operations_lawfullInterceptionIdentifier = -1;  /* LawfulInterceptionIdentifier */
+static int hf_HI2Operations_direction_Indication = -1;  /* Direction_Indication */
+static int hf_HI2Operations_bearer_capability = -1;  /* T_bearer_capability */
+static int hf_HI2Operations_service_Information = -1;  /* Service_Information */
+static int hf_HI2Operations_high_layer_capability = -1;  /* OCTET_STRING_SIZE_1 */
+static int hf_HI2Operations_tMR = -1;             /* OCTET_STRING_SIZE_1 */
+static int hf_HI2Operations_bearerServiceCode = -1;  /* OCTET_STRING_SIZE_1 */
+static int hf_HI2Operations_teleServiceCode = -1;  /* OCTET_STRING_SIZE_1 */
 static int hf_HI2Operations_qosMobileRadio = -1;  /* OCTET_STRING */
 static int hf_HI2Operations_qosGn = -1;           /* OCTET_STRING */
 static int hf_HI2Operations_iri_to_CC = -1;       /* IRI_to_CC_Correlation */
@@ -354,7 +367,7 @@ static int hf_HI2Operations_cI = -1;              /* CellIdType */
 static int hf_HI2Operations_ssi = -1;             /* SSIType */
 
 /*--- End of included file: packet-HI2Operations-hf.c ---*/
-#line 31 "./asn1/HI2Operations/packet-HI2Operations-template.c"
+#line 34 "./asn1/HI2Operations/packet-HI2Operations-template.c"
 
 /* Initialize the subtree pointers */
 
@@ -416,6 +429,8 @@ static gint ett_HI2Operations_DataNodeAddress = -1;
 static gint ett_HI2Operations_IPAddress = -1;
 static gint ett_HI2Operations_IP_value = -1;
 static gint ett_HI2Operations_National_HI2_ASN1parameters = -1;
+static gint ett_HI2Operations_UUS1_Content = -1;
+static gint ett_HI2Operations_Service_Information = -1;
 static gint ett_HI2Operations_UmtsQos = -1;
 static gint ett_HI2Operations_CorrelationValues = -1;
 static gint ett_HI2Operations_T_both_IRI_CC = -1;
@@ -464,7 +479,7 @@ static gint ett_HI2Operations_TETRACGIType = -1;
 static gint ett_HI2Operations_TSIType = -1;
 
 /*--- End of included file: packet-HI2Operations-ett.c ---*/
-#line 34 "./asn1/HI2Operations/packet-HI2Operations-template.c"
+#line 37 "./asn1/HI2Operations/packet-HI2Operations-template.c"
 
 
 /*--- Included file: packet-HI2Operations-fn.c ---*/
@@ -531,6 +546,26 @@ dissect_HI2Operations_OCTET_STRING_SIZE_1_5(gboolean implicit_tag _U_, tvbuff_t
 
 
 
+static int
+dissect_HI2Operations_T_e164_Format(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 79 "./asn1/HI2Operations/HI2Operations.cnf"
+  tvbuff_t *parameter_tvb=NULL;
+
+  offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
+                                       &parameter_tvb);
+
+  if (!parameter_tvb)
+    return offset;
+
+  dissect_isup_calling_party_number_parameter(parameter_tvb, actx->pinfo, tree, NULL);
+
+
+
+  return offset;
+}
+
+
+
 static int
 dissect_HI2Operations_OCTET_STRING_SIZE_1_25(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
   offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
@@ -642,7 +677,7 @@ static const value_string HI2Operations_Network_Element_Identifier_vals[] = {
 };
 
 static const ber_choice_t Network_Element_Identifier_choice[] = {
-  {   1, &hf_HI2Operations_e164_Format, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING_SIZE_1_25 },
+  {   1, &hf_HI2Operations_e164_Format, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_HI2Operations_T_e164_Format },
   {   2, &hf_HI2Operations_x25_Format, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING_SIZE_1_25 },
   {   3, &hf_HI2Operations_iP_Format, BER_CLASS_CON, 3, BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING_SIZE_1_25 },
   {   4, &hf_HI2Operations_dNS_Format, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING_SIZE_1_25 },
@@ -1358,7 +1393,7 @@ static const ber_sequence_t T_partyIdentity_sequence[] = {
   { &hf_HI2Operations_callingPartyNumber, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_HI2Operations_CallingPartyNumber },
   { &hf_HI2Operations_calledPartyNumber, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG|BER_FLAGS_NOTCHKTAG, dissect_HI2Operations_CalledPartyNumber },
   { &hf_HI2Operations_msISDN, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING_SIZE_1_9 },
-  { &hf_HI2Operations_e164_Format, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING_SIZE_1_25 },
+  { &hf_HI2Operations_e164_Format_01, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING_SIZE_1_25 },
   { &hf_HI2Operations_sip_uri, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING },
   { &hf_HI2Operations_tel_url, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING },
   { NULL, 0, 0, 0, NULL }
@@ -3743,6 +3778,137 @@ dissect_HI2Operations_IRIsContent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_,
   return offset;
 }
 
+
+static const value_string HI2Operations_Direction_Indication_vals[] = {
+  {   0, "mono-mode" },
+  {   1, "cc-from-target" },
+  {   2, "cc-from-other-party" },
+  {   3, "direction-unknown" },
+  { 0, NULL }
+};
+
+
+static int
+dissect_HI2Operations_Direction_Indication(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
+                                  NULL);
+
+  return offset;
+}
+
+
+
+static int
+dissect_HI2Operations_T_bearer_capability(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 88 "./asn1/HI2Operations/HI2Operations.cnf"
+  tvbuff_t *parameter_tvb;
+
+  offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
+                                       &parameter_tvb);
+
+
+  if (!parameter_tvb)
+    return offset;
+
+  dissect_q931_bearer_capability_ie(parameter_tvb, 0, tvb_reported_length_remaining(parameter_tvb,0), tree);
+
+
+
+  return offset;
+}
+
+
+
+static int
+dissect_HI2Operations_OCTET_STRING_SIZE_1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_octet_string(implicit_tag, actx, tree, tvb, offset, hf_index,
+                                       NULL);
+
+  return offset;
+}
+
+
+static const ber_sequence_t Service_Information_set[] = {
+  { &hf_HI2Operations_high_layer_capability, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING_SIZE_1 },
+  { &hf_HI2Operations_tMR   , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING_SIZE_1 },
+  { &hf_HI2Operations_bearerServiceCode, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING_SIZE_1 },
+  { &hf_HI2Operations_teleServiceCode, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_OCTET_STRING_SIZE_1 },
+  { NULL, 0, 0, 0, NULL }
+};
+
+static int
+dissect_HI2Operations_Service_Information(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+  offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
+                              Service_Information_set, hf_index, ett_HI2Operations_Service_Information);
+
+  return offset;
+}
+
+
+static const ber_sequence_t UUS1_Content_sequence[] = {
+  { &hf_HI2Operations_domainID, BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_OBJECT_IDENTIFIER },
+  { &hf_HI2Operations_lawfullInterceptionIdentifier, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_HI2Operations_LawfulInterceptionIdentifier },
+  { &hf_HI2Operations_communicationIdentifier, BER_CLASS_CON, 2, BER_FLAGS_IMPLTAG, dissect_HI2Operations_CommunicationIdentifier },
+  { &hf_HI2Operations_cC_Link_Identifier, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_CC_Link_Identifier },
+  { &hf_HI2Operations_direction_Indication, BER_CLASS_CON, 4, BER_FLAGS_IMPLTAG, dissect_HI2Operations_Direction_Indication },
+  { &hf_HI2Operations_bearer_capability, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_T_bearer_capability },
+  { &hf_HI2Operations_service_Information, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_HI2Operations_Service_Information },
+  { NULL, 0, 0, 0, NULL }
+};
+
+static int
+dissect_HI2Operations_UUS1_Content(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
+#line 35 "./asn1/HI2Operations/HI2Operations.cnf"
+
+/* Heuristic test to see if it's our content */
+    gint8    tmp_class;
+    gboolean tmp_pc;
+    gint32   tmp_tag;
+    int      tmp_offset;
+    guint    length = tvb_captured_length(tvb);
+    guint32  tmp_length;
+    gboolean tmp_ind;
+
+    /* Check for min length */
+    if (length < 6){
+      return 0;
+    }
+    /* We start with UUS1-Content ::= SEQUENCE */
+    tmp_offset = get_ber_identifier(tvb, offset, &tmp_class, &tmp_pc, &tmp_tag);
+    if(tmp_class != BER_CLASS_UNI){
+      return 0;
+    }
+    if(tmp_pc != 1){
+      return 0;
+    }
+    if(tmp_tag != BER_UNI_TAG_SEQUENCE){
+      return 0;
+    }
+    /* Get length just to move offset forward */
+    tmp_offset = get_ber_length(tvb, tmp_offset, &tmp_length, &tmp_ind);
+
+    /* Next 2 mandatorry elements
+     *  lawfullInterceptionIdentifier [1] LawfulInterceptionIdentifier,
+     *  communicationIdentifier       [2] CommunicationIdentifier,
+     */
+    tmp_offset = get_ber_identifier(tvb, tmp_offset, &tmp_class, &tmp_pc, &tmp_tag);
+    if(tmp_class != BER_CLASS_CON){
+      return 0;
+    }
+    if(tmp_pc != 0){
+      return 0;
+    }
+    if(tmp_tag != 1){
+      return 0;
+    }
+
+
+  offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
+                                   UUS1_Content_sequence, hf_index, ett_HI2Operations_UUS1_Content);
+
+  return offset;
+}
+
 /*--- PDUs ---*/
 
 static int dissect_IRIsContent_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
@@ -3752,10 +3918,17 @@ static int dissect_IRIsContent_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pr
   offset = dissect_HI2Operations_IRIsContent(FALSE, tvb, offset, &asn1_ctx, tree, hf_HI2Operations_IRIsContent_PDU);
   return offset;
 }
+int dissect_HI2Operations_UUS1_Content_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_) {
+  int offset = 0;
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  offset = dissect_HI2Operations_UUS1_Content(FALSE, tvb, offset, &asn1_ctx, tree, hf_HI2Operations_HI2Operations_UUS1_Content_PDU);
+  return offset;
+}
 
 
 /*--- End of included file: packet-HI2Operations-fn.c ---*/
-#line 36 "./asn1/HI2Operations/packet-HI2Operations-template.c"
+#line 39 "./asn1/HI2Operations/packet-HI2Operations-template.c"
 
 
 /*--- proto_register_HI2Operations ----------------------------------------------*/
@@ -3770,6 +3943,10 @@ void proto_register_HI2Operations(void) {
       { "IRIsContent", "HI2Operations.IRIsContent",
         FT_UINT32, BASE_DEC, VALS(HI2Operations_IRIsContent_vals), 0,
         NULL, HFILL }},
+    { &hf_HI2Operations_HI2Operations_UUS1_Content_PDU,
+      { "UUS1-Content", "HI2Operations.UUS1_Content_element",
+        FT_NONE, BASE_NONE, NULL, 0,
+        NULL, HFILL }},
     { &hf_HI2Operations_iRIContent,
       { "iRIContent", "HI2Operations.iRIContent",
         FT_UINT32, BASE_DEC, VALS(HI2Operations_IRIContent_vals), 0,
@@ -3985,7 +4162,7 @@ void proto_register_HI2Operations(void) {
     { &hf_HI2Operations_e164_Format,
       { "e164-Format", "HI2Operations.e164_Format",
         FT_BYTES, BASE_NONE, NULL, 0,
-        "OCTET_STRING_SIZE_1_25", HFILL }},
+        NULL, HFILL }},
     { &hf_HI2Operations_x25_Format,
       { "x25-Format", "HI2Operations.x25_Format",
         FT_BYTES, BASE_NONE, NULL, 0,
@@ -4050,6 +4227,10 @@ void proto_register_HI2Operations(void) {
       { "msISDN", "HI2Operations.msISDN",
         FT_BYTES, BASE_NONE, NULL, 0,
         "OCTET_STRING_SIZE_1_9", HFILL }},
+    { &hf_HI2Operations_e164_Format_01,
+      { "e164-Format", "HI2Operations.e164_Format",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "OCTET_STRING_SIZE_1_25", HFILL }},
     { &hf_HI2Operations_sip_uri,
       { "sip-uri", "HI2Operations.sip_uri",
         FT_BYTES, BASE_NONE, NULL, 0,
@@ -4430,6 +4611,38 @@ void proto_register_HI2Operations(void) {
       { "countryCode", "HI2Operations.countryCode",
         FT_STRING, BASE_NONE, NULL, 0,
         "PrintableString_SIZE_2", HFILL }},
+    { &hf_HI2Operations_lawfullInterceptionIdentifier,
+      { "lawfullInterceptionIdentifier", "HI2Operations.lawfullInterceptionIdentifier",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "LawfulInterceptionIdentifier", HFILL }},
+    { &hf_HI2Operations_direction_Indication,
+      { "direction-Indication", "HI2Operations.direction_Indication",
+        FT_UINT32, BASE_DEC, VALS(HI2Operations_Direction_Indication_vals), 0,
+        NULL, HFILL }},
+    { &hf_HI2Operations_bearer_capability,
+      { "bearer-capability", "HI2Operations.bearer_capability",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        NULL, HFILL }},
+    { &hf_HI2Operations_service_Information,
+      { "service-Information", "HI2Operations.service_Information_element",
+        FT_NONE, BASE_NONE, NULL, 0,
+        NULL, HFILL }},
+    { &hf_HI2Operations_high_layer_capability,
+      { "high-layer-capability", "HI2Operations.high_layer_capability",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "OCTET_STRING_SIZE_1", HFILL }},
+    { &hf_HI2Operations_tMR,
+      { "tMR", "HI2Operations.tMR",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "OCTET_STRING_SIZE_1", HFILL }},
+    { &hf_HI2Operations_bearerServiceCode,
+      { "bearerServiceCode", "HI2Operations.bearerServiceCode",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "OCTET_STRING_SIZE_1", HFILL }},
+    { &hf_HI2Operations_teleServiceCode,
+      { "teleServiceCode", "HI2Operations.teleServiceCode",
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "OCTET_STRING_SIZE_1", HFILL }},
     { &hf_HI2Operations_qosMobileRadio,
       { "qosMobileRadio", "HI2Operations.qosMobileRadio",
         FT_BYTES, BASE_NONE, NULL, 0,
@@ -5024,7 +5237,7 @@ void proto_register_HI2Operations(void) {
         "SSIType", HFILL }},
 
 /*--- End of included file: packet-HI2Operations-hfarr.c ---*/
-#line 44 "./asn1/HI2Operations/packet-HI2Operations-template.c"
+#line 47 "./asn1/HI2Operations/packet-HI2Operations-template.c"
   };
 
   /* List of subtrees */
@@ -5088,6 +5301,8 @@ void proto_register_HI2Operations(void) {
     &ett_HI2Operations_IPAddress,
     &ett_HI2Operations_IP_value,
     &ett_HI2Operations_National_HI2_ASN1parameters,
+    &ett_HI2Operations_UUS1_Content,
+    &ett_HI2Operations_Service_Information,
     &ett_HI2Operations_UmtsQos,
     &ett_HI2Operations_CorrelationValues,
     &ett_HI2Operations_T_both_IRI_CC,
@@ -5136,7 +5351,7 @@ void proto_register_HI2Operations(void) {
     &ett_HI2Operations_TSIType,
 
 /*--- End of included file: packet-HI2Operations-ettarr.c ---*/
-#line 49 "./asn1/HI2Operations/packet-HI2Operations-template.c"
+#line 52 "./asn1/HI2Operations/packet-HI2Operations-template.c"
   };
 
   /* Register protocol */
@@ -5147,10 +5362,16 @@ void proto_register_HI2Operations(void) {
   proto_register_subtree_array(ett, array_length(ett));
 
   register_dissector("HI2Operations", dissect_IRIsContent_PDU, proto_HI2Operations);
+
+
 }
 
 
 /*--- proto_reg_handoff_HI2Operations -------------------------------------------*/
 void proto_reg_handoff_HI2Operations(void) {
+
+    heur_dissector_add("q931_user", dissect_HI2Operations_UUS1_Content_PDU, "HI3CCLinkData", "hi3cclinkdata",
+        proto_HI2Operations, HEURISTIC_ENABLE);
+
 }
 
diff --git a/epan/dissectors/packet-HI2Operations.h b/epan/dissectors/packet-HI2Operations.h
new file mode 100644 (file)
index 0000000..8d73d4a
--- /dev/null
@@ -0,0 +1,46 @@
+/* Do not modify this file. Changes will be overwritten.                      */
+/* Generated automatically by the ASN.1 to Wireshark dissector compiler       */
+/* packet-HI2Operations.h                                                     */
+/* asn2wrs.py -b -p HI2Operations -c ./HI2Operations.cnf -s ./packet-HI2Operations-template -D . -O ../.. HI2Operations_ver11.asn HI3CCLinkData.asn UmtsHI2Operations.asn TS101909201.asn PCESP.asn EN301040.asn */
+
+/* Input file: packet-HI2Operations-template.h */
+
+#line 1 "./asn1/HI2Operations/packet-HI2Operations-template.h"
+/* packet-HI2Operations-template.h
+ *
+ * Routines for HI2 (ETSI TS 101 671 V3.5.1 (2009-11))
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+
+#ifndef PACKET_HI2OPERATIONS_H
+#define PACKET_HI2OPERATIONS_H
+
+
+/*--- Included file: packet-HI2Operations-exp.h ---*/
+#line 1 "./asn1/HI2Operations/packet-HI2Operations-exp.h"
+int dissect_HI2Operations_UUS1_Content_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void *data _U_);
+
+/*--- End of included file: packet-HI2Operations-exp.h ---*/
+#line 17 "./asn1/HI2Operations/packet-HI2Operations-template.h"
+
+#endif /* if PACKET_HI2OPERATIONS_H */
+
+
+/*
+ * Editor modelines
+ *
+ * Local Variables:
+ * c-basic-offset: 2
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * ex: set shiftwidth=2 tabstop=8 expandtab:
+ * :indentSize=2:tabSize=8:noTabs=true:
+ */