#include <stdio.h> not needed.
[obnox/wireshark/wip.git] / epan / dissectors / packet-dop.c
index eb8b18d63d6c1d362529b61a8ea374fe9302b81a..d8c9248025935d086dd91340cb344ddff6923921 100644 (file)
@@ -1,7 +1,7 @@
 /* Do not modify this file.                                                   */
 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
-/* .\packet-dop.c                                                             */
-/* ../../tools/asn2wrs.py -b -e -p dop -c dop.cnf -s packet-dop-template dop.asn */
+/* packet-dop.c                                                               */
+/* ../../tools/asn2wrs.py -b -e -p dop -c ./dop.cnf -s ./packet-dop-template -D . dop.asn */
 
 /* Input file: packet-dop-template.c */
 
 #include <glib.h>
 #include <epan/packet.h>
 #include <epan/prefs.h>
-#include <epan/conversation.h>
+#include <epan/oids.h>
+#include <epan/asn1.h>
+#include <epan/expert.h>
 
-#include <stdio.h>
 #include <string.h>
 
 #include "packet-ber.h"
 #define PFNAME "dop"
 
 static guint global_dop_tcp_port = 102;
-static guint tcp_port = 0;
-static dissector_handle_t tpkt_handle = NULL;
-void prefs_register_dop(void); /* forwad declaration for use in preferences registration */
+static dissector_handle_t tpkt_handle;
+void prefs_register_dop(void); /* forward declaration for use in preferences registration */
 
 /* Initialize the protocol and registered fields */
-int proto_dop = -1;
+static int proto_dop = -1;
 
 static struct SESSION_DATA_STRUCTURE* session = NULL;
 static const char *binding_type = NULL; /* binding_type */
 
-static int call_dop_oid_callback(char *base_oid, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, char *col_info);
+static int call_dop_oid_callback(char *base_string, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, char *col_info);
 
 
 /*--- Included file: packet-dop-hf.c ---*/
@@ -98,7 +98,7 @@ static int hf_dop_supplier_is_master = -1;        /* BOOLEAN */
 static int hf_dop_non_supplying_master = -1;      /* AccessPoint */
 static int hf_dop_consumers = -1;                 /* SET_OF_AccessPoint */
 static int hf_dop_consumers_item = -1;            /* AccessPoint */
-static int hf_dop_bindingType = -1;               /* OBJECT_IDENTIFIER */
+static int hf_dop_bindingType = -1;               /* BindingType */
 static int hf_dop_bindingID = -1;                 /* OperationalBindingID */
 static int hf_dop_accessPoint = -1;               /* AccessPoint */
 static int hf_dop_establishInitiator = -1;        /* EstablishArgumentInitiator */
@@ -113,8 +113,8 @@ static int hf_dop_signedEstablishOperationalBindingArgument = -1;  /* T_signedEs
 static int hf_dop_establishOperationalBindingArgument = -1;  /* EstablishOperationalBindingArgumentData */
 static int hf_dop_algorithmIdentifier = -1;       /* AlgorithmIdentifier */
 static int hf_dop_encrypted = -1;                 /* BIT_STRING */
-static int hf_dop_identifier = -1;                /* INTEGER */
-static int hf_dop_version = -1;                   /* INTEGER */
+static int hf_dop_identifier = -1;                /* T_identifier */
+static int hf_dop_version = -1;                   /* T_version */
 static int hf_dop_validFrom = -1;                 /* T_validFrom */
 static int hf_dop_now = -1;                       /* NULL */
 static int hf_dop_time = -1;                      /* Time */
@@ -240,6 +240,8 @@ static int hf_dop_DSEType_rhob = -1;
 static int hf_dop_DSEType_sa = -1;
 static int hf_dop_DSEType_dsSubentry = -1;
 static int hf_dop_DSEType_familyMember = -1;
+static int hf_dop_DSEType_ditBridge = -1;
+static int hf_dop_DSEType_writeableCopy = -1;
 static int hf_dop_GrantsAndDenials_grantAdd = -1;
 static int hf_dop_GrantsAndDenials_denyAdd = -1;
 static int hf_dop_GrantsAndDenials_grantDiscloseOnError = -1;
@@ -272,6 +274,7 @@ static int hf_dop_GrantsAndDenials_denyInvoke = -1;
 
 /* Initialize the subtree pointers */
 static gint ett_dop = -1;
+static gint ett_dop_unknown = -1;
 
 /*--- Included file: packet-dop-ett.c ---*/
 #line 1 "packet-dop-ett.c"
@@ -344,108 +347,23 @@ static gint ett_dop_T_basicLevels = -1;
 static gint ett_dop_GrantsAndDenials = -1;
 
 /*--- End of included file: packet-dop-ett.c ---*/
-#line 74 "packet-dop-template.c"
+#line 75 "packet-dop-template.c"
 
+/* Dissector table */
+static dissector_table_t dop_dissector_table;
 
-/*--- Included file: packet-dop-fn.c ---*/
-#line 1 "packet-dop-fn.c"
-/*--- Fields for imported types ---*/
+static void append_oid(packet_info *pinfo, const char *oid)
+{
+       const char *name = NULL;
 
-static int dissect_ae_title(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Name(FALSE, tvb, offset, pinfo, tree, hf_dop_ae_title);
-}
-static int dissect_address(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509sat_PresentationAddress(FALSE, tvb, offset, pinfo, tree, hf_dop_address);
-}
-static int dissect_protocolInformation_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509sat_ProtocolInformation(FALSE, tvb, offset, pinfo, tree, hf_dop_protocolInformation_item);
-}
-static int dissect_non_supplying_master(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dsp_AccessPoint(FALSE, tvb, offset, pinfo, tree, hf_dop_non_supplying_master);
-}
-static int dissect_consumers_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dsp_AccessPoint(FALSE, tvb, offset, pinfo, tree, hf_dop_consumers_item);
-}
-static int dissect_accessPoint(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dsp_AccessPoint(FALSE, tvb, offset, pinfo, tree, hf_dop_accessPoint);
-}
-static int dissect_securityParameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dap_SecurityParameters(FALSE, tvb, offset, pinfo, tree, hf_dop_securityParameters);
-}
-static int dissect_algorithmIdentifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509af_AlgorithmIdentifier(FALSE, tvb, offset, pinfo, tree, hf_dop_algorithmIdentifier);
-}
-static int dissect_performer(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_DistinguishedName(FALSE, tvb, offset, pinfo, tree, hf_dop_performer);
-}
-static int dissect_notification_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_notification_item);
-}
-static int dissect_rdn(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_RelativeDistinguishedName(FALSE, tvb, offset, pinfo, tree, hf_dop_rdn);
-}
-static int dissect_immediateSuperior(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_DistinguishedName(FALSE, tvb, offset, pinfo, tree, hf_dop_immediateSuperior);
-}
-static int dissect_entryInfo_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_entryInfo_item);
-}
-static int dissect_immediateSuperiorInfo_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_immediateSuperiorInfo_item);
-}
-static int dissect_admPointInfo_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_admPointInfo_item);
-}
-static int dissect_accessPoints(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dsp_MasterAndShadowAccessPoints(FALSE, tvb, offset, pinfo, tree, hf_dop_accessPoints);
-}
-static int dissect_info_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_info_item);
-}
-static int dissect_identificationTag(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509sat_DirectoryString(FALSE, tvb, offset, pinfo, tree, hf_dop_identificationTag);
-}
-static int dissect_attributeType_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_dop_attributeType_item);
-}
-static int dissect_allAttributeValues_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_dop_allAttributeValues_item);
-}
-static int dissect_attributeValue_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_crmf_AttributeTypeAndValue(FALSE, tvb, offset, pinfo, tree, hf_dop_attributeValue_item);
-}
-static int dissect_selfValue_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_dop_selfValue_item);
-}
-static int dissect_rangeOfValues(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dap_Filter(FALSE, tvb, offset, pinfo, tree, hf_dop_rangeOfValues);
-}
-static int dissect_contexts_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_ContextAssertion(FALSE, tvb, offset, pinfo, tree, hf_dop_contexts_item);
-}
-static int dissect_classes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_Refinement(FALSE, tvb, offset, pinfo, tree, hf_dop_classes);
-}
-static int dissect_type(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_dop_type);
-}
-static int dissect_valuesIn(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_dop_valuesIn);
-}
-static int dissect_name_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509sat_NameAndOptionalUID(FALSE, tvb, offset, pinfo, tree, hf_dop_name_item);
-}
-static int dissect_userGroup_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509sat_NameAndOptionalUID(FALSE, tvb, offset, pinfo, tree, hf_dop_userGroup_item);
-}
-static int dissect_subtree_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_x509if_SubtreeSpecification(FALSE, tvb, offset, pinfo, tree, hf_dop_subtree_item);
-}
-static int dissect_other(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_acse_EXTERNAL(FALSE, tvb, offset, pinfo, tree, hf_dop_other);
+    name = oid_resolved_from_string(oid);
+    col_append_fstr(pinfo->cinfo, COL_INFO, " %s", name ? name : oid);
 }
 
 
+/*--- Included file: packet-dop-fn.c ---*/
+#line 1 "packet-dop-fn.c"
+
 static const asn_namedbit DSEType_bits[] = {
   {  0, &hf_dop_DSEType_root, -1, -1, "root", NULL },
   {  1, &hf_dop_DSEType_glue, -1, -1, "glue", NULL },
@@ -464,12 +382,14 @@ static const asn_namedbit DSEType_bits[] = {
   { 15, &hf_dop_DSEType_sa, -1, -1, "sa", NULL },
   { 16, &hf_dop_DSEType_dsSubentry, -1, -1, "dsSubentry", NULL },
   { 17, &hf_dop_DSEType_familyMember, -1, -1, "familyMember", NULL },
+  { 18, &hf_dop_DSEType_ditBridge, -1, -1, "ditBridge", NULL },
+  { 19, &hf_dop_DSEType_writeableCopy, -1, -1, "writeableCopy", NULL },
   { 0, NULL, 0, 0, NULL, NULL }
 };
 
 int
-dissect_dop_DSEType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_DSEType(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_bitstring(implicit_tag, actx, tree, tvb, offset,
                                     DSEType_bits, hf_index, ett_dop_DSEType,
                                     NULL);
 
@@ -478,95 +398,82 @@ dissect_dop_DSEType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet
 
 
 static const ber_sequence_t SET_OF_ProtocolInformation_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_protocolInformation_item },
+  { &hf_dop_protocolInformation_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509sat_ProtocolInformation },
 };
 
 static int
-dissect_dop_SET_OF_ProtocolInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_ProtocolInformation(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_ProtocolInformation_set_of, hf_index, ett_dop_SET_OF_ProtocolInformation);
 
   return offset;
 }
-static int dissect_protocolInformation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_ProtocolInformation(FALSE, tvb, offset, pinfo, tree, hf_dop_protocolInformation);
-}
 
 
 
 static int
-dissect_dop_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
+dissect_dop_T_identifier(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 172 "dop.cnf"
        guint32 value;
 
-         offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                  &value);
+         offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
+                                                &value);
+
+
+       col_append_fstr(actx->pinfo->cinfo, COL_INFO, " id=%d", value);
 
 
-       if (check_col(pinfo->cinfo, COL_INFO)) {
-               if(hf_index == hf_dop_identifier) {
-                       col_append_fstr(pinfo->cinfo, COL_INFO, " id=%d", value);
-               } else if (hf_index == hf_dop_version) {
-                       col_append_fstr(pinfo->cinfo, COL_INFO, ",%d", value);
-               }
-       }
 
 
 
   return offset;
 }
-static int dissect_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_dop_identifier);
-}
-static int dissect_version(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_dop_version);
-}
-static int dissect_maxImmSub(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_dop_maxImmSub);
-}
-static int dissect_maxCount(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_dop_maxCount);
-}
-static int dissect_localQualifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_dop_localQualifier);
+
+
+
+static int
+dissect_dop_T_version(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 181 "dop.cnf"
+       guint32 value;
+
+         offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
+                                                &value);
+
+
+       col_append_fstr(actx->pinfo->cinfo, COL_INFO, ",%d", value);
+
+
+
+  return offset;
 }
 
 
 static const ber_sequence_t OperationalBindingID_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_identifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
-  { 0, 0, 0, NULL }
+  { &hf_dop_identifier      , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_dop_T_identifier },
+  { &hf_dop_version         , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_dop_T_version },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_dop_OperationalBindingID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_OperationalBindingID(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    OperationalBindingID_sequence, hf_index, ett_dop_OperationalBindingID);
 
   return offset;
 }
-static int dissect_agreementID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_OperationalBindingID(FALSE, tvb, offset, pinfo, tree, hf_dop_agreementID);
-}
-static int dissect_bindingID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_OperationalBindingID(FALSE, tvb, offset, pinfo, tree, hf_dop_bindingID);
-}
-static int dissect_newBindingID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_OperationalBindingID(FALSE, tvb, offset, pinfo, tree, hf_dop_newBindingID);
-}
 
 
 static const ber_sequence_t SupplierOrConsumer_set[] = {
-  { BER_CLASS_CON, 0, 0, dissect_ae_title },
-  { BER_CLASS_CON, 1, 0, dissect_address },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_protocolInformation },
-  { BER_CLASS_CON, 3, 0, dissect_agreementID },
-  { 0, 0, 0, NULL }
+  { &hf_dop_ae_title        , BER_CLASS_CON, 0, 0, dissect_x509if_Name },
+  { &hf_dop_address         , BER_CLASS_CON, 1, 0, dissect_x509sat_PresentationAddress },
+  { &hf_dop_protocolInformation, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_ProtocolInformation },
+  { &hf_dop_agreementID     , BER_CLASS_CON, 3, 0, dissect_dop_OperationalBindingID },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_SupplierOrConsumer(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SupplierOrConsumer(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,
                               SupplierOrConsumer_set, hf_index, ett_dop_SupplierOrConsumer);
 
   return offset;
@@ -575,38 +482,26 @@ dissect_dop_SupplierOrConsumer(gboolean implicit_tag _U_, tvbuff_t *tvb, int off
 
 
 static int
-dissect_dop_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index);
+dissect_dop_BOOLEAN(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_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
 
   return offset;
 }
-static int dissect_supplier_is_master(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_dop_supplier_is_master);
-}
-static int dissect_aliasDereferenced(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_dop_aliasDereferenced);
-}
-static int dissect_alias(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_dop_alias);
-}
-static int dissect_signed(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_dop_signed);
-}
 
 
 static const ber_sequence_t SupplierInformation_set[] = {
-  { BER_CLASS_CON, 0, 0, dissect_ae_title },
-  { BER_CLASS_CON, 1, 0, dissect_address },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_protocolInformation },
-  { BER_CLASS_CON, 3, 0, dissect_agreementID },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_supplier_is_master },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_non_supplying_master },
-  { 0, 0, 0, NULL }
+  { &hf_dop_ae_title        , BER_CLASS_CON, 0, 0, dissect_x509if_Name },
+  { &hf_dop_address         , BER_CLASS_CON, 1, 0, dissect_x509sat_PresentationAddress },
+  { &hf_dop_protocolInformation, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_ProtocolInformation },
+  { &hf_dop_agreementID     , BER_CLASS_CON, 3, 0, dissect_dop_OperationalBindingID },
+  { &hf_dop_supplier_is_master, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
+  { &hf_dop_non_supplying_master, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_dsp_AccessPoint },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_SupplierInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SupplierInformation(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,
                               SupplierInformation_set, hf_index, ett_dop_SupplierInformation);
 
   return offset;
@@ -615,40 +510,37 @@ dissect_dop_SupplierInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int of
 
 
 static int
-dissect_dop_ConsumerInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_dop_SupplierOrConsumer(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+dissect_dop_ConsumerInformation(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_dop_SupplierOrConsumer(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
 
 
 static const ber_sequence_t SET_OF_AccessPoint_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_consumers_item },
+  { &hf_dop_consumers_item  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_AccessPoint },
 };
 
 static int
-dissect_dop_SET_OF_AccessPoint(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_AccessPoint(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_AccessPoint_set_of, hf_index, ett_dop_SET_OF_AccessPoint);
 
   return offset;
 }
-static int dissect_consumers(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_AccessPoint(FALSE, tvb, offset, pinfo, tree, hf_dop_consumers);
-}
 
 
 static const ber_sequence_t SupplierAndConsumers_set[] = {
-  { BER_CLASS_CON, 0, 0, dissect_ae_title },
-  { BER_CLASS_CON, 1, 0, dissect_address },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_protocolInformation },
-  { BER_CLASS_CON, 3, 0, dissect_consumers },
-  { 0, 0, 0, NULL }
+  { &hf_dop_ae_title        , BER_CLASS_CON, 0, 0, dissect_x509if_Name },
+  { &hf_dop_address         , BER_CLASS_CON, 1, 0, dissect_x509sat_PresentationAddress },
+  { &hf_dop_protocolInformation, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_ProtocolInformation },
+  { &hf_dop_consumers       , BER_CLASS_CON, 3, 0, dissect_dop_SET_OF_AccessPoint },
+  { NULL, 0, 0, 0, NULL }
 };
 
 int
-dissect_dop_SupplierAndConsumers(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SupplierAndConsumers(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,
                               SupplierAndConsumers_set, hf_index, ett_dop_SupplierAndConsumers);
 
   return offset;
@@ -657,8 +549,8 @@ dissect_dop_SupplierAndConsumers(gboolean implicit_tag _U_, tvbuff_t *tvb, int o
 
 
 static int
-dissect_dop_DSAOperationalManagementBindArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_dap_DirectoryBindArgument(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+dissect_dop_DSAOperationalManagementBindArgument(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_dap_DirectoryBindArgument(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
@@ -666,8 +558,8 @@ dissect_dop_DSAOperationalManagementBindArgument(gboolean implicit_tag _U_, tvbu
 
 
 static int
-dissect_dop_DSAOperationalManagementBindResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_dap_DirectoryBindArgument(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+dissect_dop_DSAOperationalManagementBindResult(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_dap_DirectoryBindArgument(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
@@ -675,8 +567,8 @@ dissect_dop_DSAOperationalManagementBindResult(gboolean implicit_tag _U_, tvbuff
 
 
 static int
-dissect_dop_DSAOperationalManagementBindError(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_dap_DirectoryBindError(implicit_tag, tvb, offset, pinfo, tree, hf_index);
+dissect_dop_DSAOperationalManagementBindError(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_dap_DirectoryBindError(implicit_tag, tvb, offset, actx, tree, hf_index);
 
   return offset;
 }
@@ -684,73 +576,53 @@ dissect_dop_DSAOperationalManagementBindError(gboolean implicit_tag _U_, tvbuff_
 
 
 static int
-dissect_dop_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 94 "dop.cnf"
-  const char *name;
-
-    offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_index, &binding_type);
-
-
-  if(check_col(pinfo->cinfo, COL_INFO)) {
-    name = get_ber_oid_name(binding_type);
-    col_append_fstr(pinfo->cinfo, COL_INFO, " %s", name ? name : binding_type);
-  }
-
+dissect_dop_BindingType(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_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &binding_type);
 
+#line 103 "dop.cnf"
+  append_oid(actx->pinfo, binding_type);
 
   return offset;
 }
-static int dissect_bindingType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_dop_bindingType);
-}
 
 
 
 static int
-dissect_dop_EstablishSymmetric(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 104 "dop.cnf"
+dissect_dop_EstablishSymmetric(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 107 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.establish.symmetric", tvb, offset, pinfo, tree, "symmetric");
+  offset = call_dop_oid_callback("establish.symmetric", tvb, offset, actx->pinfo, tree, "symmetric");
 
 
 
   return offset;
 }
-static int dissect_establishSymmetric(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_EstablishSymmetric(FALSE, tvb, offset, pinfo, tree, hf_dop_establishSymmetric);
-}
 
 
 
 static int
-dissect_dop_EstablishRoleAInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 108 "dop.cnf"
+dissect_dop_EstablishRoleAInitiates(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 111 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.establish.rolea", tvb, offset, pinfo, tree, "roleA");
+  offset = call_dop_oid_callback("establish.rolea", tvb, offset, actx->pinfo, tree, "roleA");
 
 
 
   return offset;
 }
-static int dissect_establishRoleAInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_EstablishRoleAInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_establishRoleAInitiates);
-}
 
 
 
 static int
-dissect_dop_EstablishRoleBInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 112 "dop.cnf"
+dissect_dop_EstablishRoleBInitiates(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 115 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.establish.roleb", tvb, offset, pinfo, tree, "roleB");
+  offset = call_dop_oid_callback("establish.roleb", tvb, offset, actx->pinfo, tree, "roleB");
 
 
 
   return offset;
 }
-static int dissect_establishRoleBInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_EstablishRoleBInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_establishRoleBInitiates);
-}
 
 
 static const value_string dop_EstablishArgumentInitiator_vals[] = {
@@ -761,101 +633,60 @@ static const value_string dop_EstablishArgumentInitiator_vals[] = {
 };
 
 static const ber_choice_t EstablishArgumentInitiator_choice[] = {
-  {   3, BER_CLASS_CON, 3, 0, dissect_establishSymmetric },
-  {   4, BER_CLASS_CON, 4, 0, dissect_establishRoleAInitiates },
-  {   5, BER_CLASS_CON, 5, 0, dissect_establishRoleBInitiates },
-  { 0, 0, 0, 0, NULL }
+  {   3, &hf_dop_establishSymmetric, BER_CLASS_CON, 3, 0, dissect_dop_EstablishSymmetric },
+  {   4, &hf_dop_establishRoleAInitiates, BER_CLASS_CON, 4, 0, dissect_dop_EstablishRoleAInitiates },
+  {   5, &hf_dop_establishRoleBInitiates, BER_CLASS_CON, 5, 0, dissect_dop_EstablishRoleBInitiates },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_EstablishArgumentInitiator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_EstablishArgumentInitiator(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_choice(actx, tree, tvb, offset,
                                  EstablishArgumentInitiator_choice, hf_index, ett_dop_EstablishArgumentInitiator,
                                  NULL);
 
   return offset;
 }
-static int dissect_establishInitiator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_EstablishArgumentInitiator(FALSE, tvb, offset, pinfo, tree, hf_dop_establishInitiator);
-}
 
 
 
 static int
-dissect_dop_T_agreement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 140 "dop.cnf"
+dissect_dop_T_agreement(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 143 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.agreement", tvb, offset, pinfo, tree, NULL);
+  offset = call_dop_oid_callback("agreement", tvb, offset, actx->pinfo, tree, NULL);
 
 
 
   return offset;
 }
-static int dissect_agreement(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_agreement(FALSE, tvb, offset, pinfo, tree, hf_dop_agreement);
-}
 
 
 
 static int
-dissect_dop_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index);
+dissect_dop_NULL(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_null(implicit_tag, actx, tree, tvb, offset, hf_index);
 
   return offset;
 }
-static int dissect_now(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_NULL(FALSE, tvb, offset, pinfo, tree, hf_dop_now);
-}
-static int dissect_explicitTermination(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_NULL(FALSE, tvb, offset, pinfo, tree, hf_dop_explicitTermination);
-}
-static int dissect_null(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_NULL(FALSE, tvb, offset, pinfo, tree, hf_dop_null);
-}
-static int dissect_entry(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_NULL(FALSE, tvb, offset, pinfo, tree, hf_dop_entry);
-}
-static int dissect_allUserAttributeTypes(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_NULL(FALSE, tvb, offset, pinfo, tree, hf_dop_allUserAttributeTypes);
-}
-static int dissect_allUserAttributeTypesAndValues(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_NULL(FALSE, tvb, offset, pinfo, tree, hf_dop_allUserAttributeTypesAndValues);
-}
-static int dissect_allUsers(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_NULL(FALSE, tvb, offset, pinfo, tree, hf_dop_allUsers);
-}
-static int dissect_thisEntry(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_NULL(FALSE, tvb, offset, pinfo, tree, hf_dop_thisEntry);
-}
 
 
 
 static int
-dissect_dop_UTCTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
-                                            pinfo, tree, tvb, offset, hf_index,
-                                            NULL);
+dissect_dop_UTCTime(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_UTCTime(implicit_tag, actx, tree, tvb, offset, hf_index);
 
   return offset;
 }
-static int dissect_utcTime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_UTCTime(FALSE, tvb, offset, pinfo, tree, hf_dop_utcTime);
-}
 
 
 
 static int
-dissect_dop_GeneralizedTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_GeneralizedTime(implicit_tag, pinfo, tree, tvb, offset, hf_index);
+dissect_dop_GeneralizedTime(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_GeneralizedTime(implicit_tag, actx, tree, tvb, offset, hf_index);
 
   return offset;
 }
-static int dissect_generalizedTime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_GeneralizedTime(FALSE, tvb, offset, pinfo, tree, hf_dop_generalizedTime);
-}
-static int dissect_terminateAtGeneralizedTime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_GeneralizedTime(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateAtGeneralizedTime);
-}
 
 
 static const value_string dop_Time_vals[] = {
@@ -865,28 +696,19 @@ static const value_string dop_Time_vals[] = {
 };
 
 static const ber_choice_t Time_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_utcTime },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_generalizedTime },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_dop_utcTime         , BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_dop_UTCTime },
+  {   1, &hf_dop_generalizedTime , BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_dop_GeneralizedTime },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_Time(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_Time(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_choice(actx, tree, tvb, offset,
                                  Time_choice, hf_index, ett_dop_Time,
                                  NULL);
 
   return offset;
 }
-static int dissect_time(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_Time(FALSE, tvb, offset, pinfo, tree, hf_dop_time);
-}
-static int dissect_terminateAtTime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_Time(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateAtTime);
-}
-static int dissect_retryAt(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_Time(FALSE, tvb, offset, pinfo, tree, hf_dop_retryAt);
-}
 
 
 static const value_string dop_T_validFrom_vals[] = {
@@ -896,22 +718,19 @@ static const value_string dop_T_validFrom_vals[] = {
 };
 
 static const ber_choice_t T_validFrom_choice[] = {
-  {   0, BER_CLASS_CON, 0, 0, dissect_now },
-  {   1, BER_CLASS_CON, 1, 0, dissect_time },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_dop_now             , BER_CLASS_CON, 0, 0, dissect_dop_NULL },
+  {   1, &hf_dop_time            , BER_CLASS_CON, 1, 0, dissect_dop_Time },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_T_validFrom(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_T_validFrom(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_choice(actx, tree, tvb, offset,
                                  T_validFrom_choice, hf_index, ett_dop_T_validFrom,
                                  NULL);
 
   return offset;
 }
-static int dissect_validFrom(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_validFrom(FALSE, tvb, offset, pinfo, tree, hf_dop_validFrom);
-}
 
 
 static const value_string dop_T_validUntil_vals[] = {
@@ -921,99 +740,81 @@ static const value_string dop_T_validUntil_vals[] = {
 };
 
 static const ber_choice_t T_validUntil_choice[] = {
-  {   0, BER_CLASS_CON, 0, 0, dissect_explicitTermination },
-  {   1, BER_CLASS_CON, 1, 0, dissect_time },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_dop_explicitTermination, BER_CLASS_CON, 0, 0, dissect_dop_NULL },
+  {   1, &hf_dop_time            , BER_CLASS_CON, 1, 0, dissect_dop_Time },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_T_validUntil(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_T_validUntil(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_choice(actx, tree, tvb, offset,
                                  T_validUntil_choice, hf_index, ett_dop_T_validUntil,
                                  NULL);
 
   return offset;
 }
-static int dissect_validUntil(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_validUntil(FALSE, tvb, offset, pinfo, tree, hf_dop_validUntil);
-}
 
 
 static const ber_sequence_t Validity_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_validFrom },
-  { BER_CLASS_CON, 1, 0, dissect_validUntil },
-  { 0, 0, 0, NULL }
+  { &hf_dop_validFrom       , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dop_T_validFrom },
+  { &hf_dop_validUntil      , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_T_validUntil },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_Validity(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_Validity(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    Validity_sequence, hf_index, ett_dop_Validity);
 
   return offset;
 }
-static int dissect_valid(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_Validity(FALSE, tvb, offset, pinfo, tree, hf_dop_valid);
-}
 
 
 static const ber_sequence_t EstablishOperationalBindingArgumentData_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_bindingType },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_bindingID },
-  { BER_CLASS_CON, 2, 0, dissect_accessPoint },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_establishInitiator },
-  { BER_CLASS_CON, 6, 0, dissect_agreement },
-  { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_valid },
-  { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_securityParameters },
-  { 0, 0, 0, NULL }
+  { &hf_dop_bindingType     , BER_CLASS_CON, 0, 0, dissect_dop_BindingType },
+  { &hf_dop_bindingID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_OperationalBindingID },
+  { &hf_dop_accessPoint     , BER_CLASS_CON, 2, 0, dissect_dsp_AccessPoint },
+  { &hf_dop_establishInitiator, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_EstablishArgumentInitiator },
+  { &hf_dop_agreement       , BER_CLASS_CON, 6, 0, dissect_dop_T_agreement },
+  { &hf_dop_valid           , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_dop_Validity },
+  { &hf_dop_securityParameters, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_EstablishOperationalBindingArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_EstablishOperationalBindingArgumentData(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    EstablishOperationalBindingArgumentData_sequence, hf_index, ett_dop_EstablishOperationalBindingArgumentData);
 
   return offset;
 }
-static int dissect_unsignedEstablishOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_EstablishOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_unsignedEstablishOperationalBindingArgument);
-}
-static int dissect_establishOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_EstablishOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_establishOperationalBindingArgument);
-}
 
 
 
 static int
-dissect_dop_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_BIT_STRING(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_bitstring(implicit_tag, actx, tree, tvb, offset,
                                     NULL, hf_index, -1,
                                     NULL);
 
   return offset;
 }
-static int dissect_encrypted(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_BIT_STRING(FALSE, tvb, offset, pinfo, tree, hf_dop_encrypted);
-}
 
 
 static const ber_sequence_t T_signedEstablishOperationalBindingArgument_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_establishOperationalBindingArgument },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
-  { 0, 0, 0, NULL }
+  { &hf_dop_establishOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_EstablishOperationalBindingArgumentData },
+  { &hf_dop_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
+  { &hf_dop_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_BIT_STRING },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_T_signedEstablishOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_T_signedEstablishOperationalBindingArgument(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    T_signedEstablishOperationalBindingArgument_sequence, hf_index, ett_dop_T_signedEstablishOperationalBindingArgument);
 
   return offset;
 }
-static int dissect_signedEstablishOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_signedEstablishOperationalBindingArgument(FALSE, tvb, offset, pinfo, tree, hf_dop_signedEstablishOperationalBindingArgument);
-}
 
 
 static const value_string dop_EstablishOperationalBindingArgument_vals[] = {
@@ -1023,14 +824,14 @@ static const value_string dop_EstablishOperationalBindingArgument_vals[] = {
 };
 
 static const ber_choice_t EstablishOperationalBindingArgument_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_unsignedEstablishOperationalBindingArgument },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signedEstablishOperationalBindingArgument },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_dop_unsignedEstablishOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_EstablishOperationalBindingArgumentData },
+  {   1, &hf_dop_signedEstablishOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_T_signedEstablishOperationalBindingArgument },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_EstablishOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_EstablishOperationalBindingArgument(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_choice(actx, tree, tvb, offset,
                                  EstablishOperationalBindingArgument_choice, hf_index, ett_dop_EstablishOperationalBindingArgument,
                                  NULL);
 
@@ -1040,50 +841,41 @@ dissect_dop_EstablishOperationalBindingArgument(gboolean implicit_tag _U_, tvbuf
 
 
 static int
-dissect_dop_T_symmetric(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 144 "dop.cnf"
+dissect_dop_T_symmetric(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 147 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.establish.symmetric", tvb, offset, pinfo, tree, "symmetric"); 
+  offset = call_dop_oid_callback("establish.symmetric", tvb, offset, actx->pinfo, tree, "symmetric"); 
 
 
 
   return offset;
 }
-static int dissect_symmetric(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_symmetric(FALSE, tvb, offset, pinfo, tree, hf_dop_symmetric);
-}
 
 
 
 static int
-dissect_dop_T_roleA_replies(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 148 "dop.cnf"
+dissect_dop_T_roleA_replies(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 151 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.establish.rolea", tvb, offset, pinfo, tree, "roleA");
+  offset = call_dop_oid_callback("establish.rolea", tvb, offset, actx->pinfo, tree, "roleA");
 
 
 
   return offset;
 }
-static int dissect_roleA_replies(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_roleA_replies(FALSE, tvb, offset, pinfo, tree, hf_dop_roleA_replies);
-}
 
 
 
 static int
-dissect_dop_T_roleB_replies(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 152 "dop.cnf"
+dissect_dop_T_roleB_replies(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 155 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.establish.roleb", tvb, offset, pinfo, tree, "roleB");
+  offset = call_dop_oid_callback("establish.roleb", tvb, offset, actx->pinfo, tree, "roleB");
 
 
 
   return offset;
 }
-static int dissect_roleB_replies(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_roleB_replies(FALSE, tvb, offset, pinfo, tree, hf_dop_roleB_replies);
-}
 
 
 static const value_string dop_T_initiator_vals[] = {
@@ -1094,56 +886,50 @@ static const value_string dop_T_initiator_vals[] = {
 };
 
 static const ber_choice_t T_initiator_choice[] = {
-  {   3, BER_CLASS_CON, 3, 0, dissect_symmetric },
-  {   4, BER_CLASS_CON, 4, 0, dissect_roleA_replies },
-  {   5, BER_CLASS_CON, 5, 0, dissect_roleB_replies },
-  { 0, 0, 0, 0, NULL }
+  {   3, &hf_dop_symmetric       , BER_CLASS_CON, 3, 0, dissect_dop_T_symmetric },
+  {   4, &hf_dop_roleA_replies   , BER_CLASS_CON, 4, 0, dissect_dop_T_roleA_replies },
+  {   5, &hf_dop_roleB_replies   , BER_CLASS_CON, 5, 0, dissect_dop_T_roleB_replies },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_T_initiator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_T_initiator(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_choice(actx, tree, tvb, offset,
                                  T_initiator_choice, hf_index, ett_dop_T_initiator,
                                  NULL);
 
   return offset;
 }
-static int dissect_initiator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_initiator(FALSE, tvb, offset, pinfo, tree, hf_dop_initiator);
-}
 
 
 static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_Attribute_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_notification_item },
+  { &hf_dop_notification_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_Attribute },
 };
 
 static int
-dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute(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_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       SEQUENCE_SIZE_1_MAX_OF_Attribute_sequence_of, hf_index, ett_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute);
 
   return offset;
 }
-static int dissect_notification(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_notification);
-}
 
 
 static const ber_sequence_t EstablishOperationalBindingResult_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_bindingType },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_bindingID },
-  { BER_CLASS_CON, 2, 0, dissect_accessPoint },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_initiator },
-  { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_securityParameters },
-  { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_performer },
-  { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_aliasDereferenced },
-  { BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_notification },
-  { 0, 0, 0, NULL }
+  { &hf_dop_bindingType     , BER_CLASS_CON, 0, 0, dissect_dop_BindingType },
+  { &hf_dop_bindingID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_OperationalBindingID },
+  { &hf_dop_accessPoint     , BER_CLASS_CON, 2, 0, dissect_dsp_AccessPoint },
+  { &hf_dop_initiator       , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_T_initiator },
+  { &hf_dop_securityParameters, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
+  { &hf_dop_performer       , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
+  { &hf_dop_aliasDereferenced, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
+  { &hf_dop_notification    , BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_EstablishOperationalBindingResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_EstablishOperationalBindingResult(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    EstablishOperationalBindingResult_sequence, hf_index, ett_dop_EstablishOperationalBindingResult);
 
   return offset;
@@ -1152,50 +938,41 @@ dissect_dop_EstablishOperationalBindingResult(gboolean implicit_tag _U_, tvbuff_
 
 
 static int
-dissect_dop_ModifySymmetric(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 116 "dop.cnf"
+dissect_dop_ModifySymmetric(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 119 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.modify.symmetric", tvb, offset, pinfo, tree, "symmetric");
+  offset = call_dop_oid_callback("modify.symmetric", tvb, offset, actx->pinfo, tree, "symmetric");
 
 
 
   return offset;
 }
-static int dissect_modifySymmetric(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ModifySymmetric(FALSE, tvb, offset, pinfo, tree, hf_dop_modifySymmetric);
-}
 
 
 
 static int
-dissect_dop_ModifyRoleAInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 120 "dop.cnf"
+dissect_dop_ModifyRoleAInitiates(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 123 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.modify.rolea", tvb, offset, pinfo, tree, "roleA");
+  offset = call_dop_oid_callback("modify.rolea", tvb, offset, actx->pinfo, tree, "roleA");
 
 
 
   return offset;
 }
-static int dissect_modifyRoleAInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ModifyRoleAInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_modifyRoleAInitiates);
-}
 
 
 
 static int
-dissect_dop_ModifyRoleBInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 124 "dop.cnf"
+dissect_dop_ModifyRoleBInitiates(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 127 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.modify.roleb", tvb, offset, pinfo, tree, "roleB");
+  offset = call_dop_oid_callback("modify.roleb", tvb, offset, actx->pinfo, tree, "roleB");
 
 
 
   return offset;
 }
-static int dissect_modifyRoleBInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ModifyRoleBInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_modifyRoleBInitiates);
-}
 
 
 static const value_string dop_ModifyArgumentInitiator_vals[] = {
@@ -1206,86 +983,71 @@ static const value_string dop_ModifyArgumentInitiator_vals[] = {
 };
 
 static const ber_choice_t ModifyArgumentInitiator_choice[] = {
-  {   3, BER_CLASS_CON, 3, 0, dissect_modifySymmetric },
-  {   4, BER_CLASS_CON, 4, 0, dissect_modifyRoleAInitiates },
-  {   5, BER_CLASS_CON, 5, 0, dissect_modifyRoleBInitiates },
-  { 0, 0, 0, 0, NULL }
+  {   3, &hf_dop_modifySymmetric , BER_CLASS_CON, 3, 0, dissect_dop_ModifySymmetric },
+  {   4, &hf_dop_modifyRoleAInitiates, BER_CLASS_CON, 4, 0, dissect_dop_ModifyRoleAInitiates },
+  {   5, &hf_dop_modifyRoleBInitiates, BER_CLASS_CON, 5, 0, dissect_dop_ModifyRoleBInitiates },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_ModifyArgumentInitiator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_ModifyArgumentInitiator(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_choice(actx, tree, tvb, offset,
                                  ModifyArgumentInitiator_choice, hf_index, ett_dop_ModifyArgumentInitiator,
                                  NULL);
 
   return offset;
 }
-static int dissect_modifyInitiator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ModifyArgumentInitiator(FALSE, tvb, offset, pinfo, tree, hf_dop_modifyInitiator);
-}
 
 
 
 static int
-dissect_dop_ArgumentNewAgreement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 164 "dop.cnf"
+dissect_dop_ArgumentNewAgreement(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 167 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.agreement", tvb, offset, pinfo, tree, NULL);
+  offset = call_dop_oid_callback("agreement", tvb, offset, actx->pinfo, tree, NULL);
 
 
 
 
   return offset;
 }
-static int dissect_argumentNewAgreement(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ArgumentNewAgreement(FALSE, tvb, offset, pinfo, tree, hf_dop_argumentNewAgreement);
-}
 
 
 static const ber_sequence_t ModifyOperationalBindingArgumentData_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_bindingType },
-  { BER_CLASS_CON, 1, 0, dissect_bindingID },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_accessPoint },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_modifyInitiator },
-  { BER_CLASS_CON, 6, 0, dissect_newBindingID },
-  { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_argumentNewAgreement },
-  { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_valid },
-  { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL, dissect_securityParameters },
-  { 0, 0, 0, NULL }
+  { &hf_dop_bindingType     , BER_CLASS_CON, 0, 0, dissect_dop_BindingType },
+  { &hf_dop_bindingID       , BER_CLASS_CON, 1, 0, dissect_dop_OperationalBindingID },
+  { &hf_dop_accessPoint     , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dsp_AccessPoint },
+  { &hf_dop_modifyInitiator , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_ModifyArgumentInitiator },
+  { &hf_dop_newBindingID    , BER_CLASS_CON, 6, 0, dissect_dop_OperationalBindingID },
+  { &hf_dop_argumentNewAgreement, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_dop_ArgumentNewAgreement },
+  { &hf_dop_valid           , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_dop_Validity },
+  { &hf_dop_securityParameters, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_ModifyOperationalBindingArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_ModifyOperationalBindingArgumentData(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ModifyOperationalBindingArgumentData_sequence, hf_index, ett_dop_ModifyOperationalBindingArgumentData);
 
   return offset;
 }
-static int dissect_unsignedModifyOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ModifyOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_unsignedModifyOperationalBindingArgument);
-}
-static int dissect_modifyOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ModifyOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_modifyOperationalBindingArgument);
-}
 
 
 static const ber_sequence_t T_signedModifyOperationalBindingArgument_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_modifyOperationalBindingArgument },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
-  { 0, 0, 0, NULL }
+  { &hf_dop_modifyOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ModifyOperationalBindingArgumentData },
+  { &hf_dop_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
+  { &hf_dop_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_BIT_STRING },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_T_signedModifyOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_T_signedModifyOperationalBindingArgument(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    T_signedModifyOperationalBindingArgument_sequence, hf_index, ett_dop_T_signedModifyOperationalBindingArgument);
 
   return offset;
 }
-static int dissect_signedModifyOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_signedModifyOperationalBindingArgument(FALSE, tvb, offset, pinfo, tree, hf_dop_signedModifyOperationalBindingArgument);
-}
 
 
 static const value_string dop_ModifyOperationalBindingArgument_vals[] = {
@@ -1295,14 +1057,14 @@ static const value_string dop_ModifyOperationalBindingArgument_vals[] = {
 };
 
 static const ber_choice_t ModifyOperationalBindingArgument_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_unsignedModifyOperationalBindingArgument },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signedModifyOperationalBindingArgument },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_dop_unsignedModifyOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ModifyOperationalBindingArgumentData },
+  {   1, &hf_dop_signedModifyOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_T_signedModifyOperationalBindingArgument },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_ModifyOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_ModifyOperationalBindingArgument(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_choice(actx, tree, tvb, offset,
                                  ModifyOperationalBindingArgument_choice, hf_index, ett_dop_ModifyOperationalBindingArgument,
                                  NULL);
 
@@ -1312,61 +1074,52 @@ dissect_dop_ModifyOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t
 
 
 static int
-dissect_dop_ResultNewAgreement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 160 "dop.cnf"
+dissect_dop_ResultNewAgreement(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 163 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.agreement", tvb, offset, pinfo, tree, NULL);
+  offset = call_dop_oid_callback("agreement", tvb, offset, actx->pinfo, tree, NULL);
 
 
 
   return offset;
 }
-static int dissect_resultNewAgreement(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ResultNewAgreement(FALSE, tvb, offset, pinfo, tree, hf_dop_resultNewAgreement);
-}
 
 
 static const ber_sequence_t ModifyOperationalBindingResultData_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_newBindingID },
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_bindingType },
-  { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_resultNewAgreement },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_valid },
-  { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_securityParameters },
-  { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_performer },
-  { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_aliasDereferenced },
-  { BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_notification },
-  { 0, 0, 0, NULL }
+  { &hf_dop_newBindingID    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_OperationalBindingID },
+  { &hf_dop_bindingType     , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_dop_BindingType },
+  { &hf_dop_resultNewAgreement, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_dop_ResultNewAgreement },
+  { &hf_dop_valid           , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_Validity },
+  { &hf_dop_securityParameters, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
+  { &hf_dop_performer       , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
+  { &hf_dop_aliasDereferenced, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
+  { &hf_dop_notification    , BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_ModifyOperationalBindingResultData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_ModifyOperationalBindingResultData(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ModifyOperationalBindingResultData_sequence, hf_index, ett_dop_ModifyOperationalBindingResultData);
 
   return offset;
 }
-static int dissect_modifyOperationalBindingResultData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ModifyOperationalBindingResultData(FALSE, tvb, offset, pinfo, tree, hf_dop_modifyOperationalBindingResultData);
-}
 
 
 static const ber_sequence_t ProtectedModifyResult_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_modifyOperationalBindingResultData },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
-  { 0, 0, 0, NULL }
+  { &hf_dop_modifyOperationalBindingResultData, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ModifyOperationalBindingResultData },
+  { &hf_dop_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
+  { &hf_dop_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_BIT_STRING },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_ProtectedModifyResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_ProtectedModifyResult(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ProtectedModifyResult_sequence, hf_index, ett_dop_ProtectedModifyResult);
 
   return offset;
 }
-static int dissect_protectedModifyResult(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ProtectedModifyResult(FALSE, tvb, offset, pinfo, tree, hf_dop_protectedModifyResult);
-}
 
 
 static const value_string dop_ModifyOperationalBindingResult_vals[] = {
@@ -1376,14 +1129,14 @@ static const value_string dop_ModifyOperationalBindingResult_vals[] = {
 };
 
 static const ber_choice_t ModifyOperationalBindingResult_choice[] = {
-  {   0, BER_CLASS_CON, 0, 0, dissect_null },
-  {   1, BER_CLASS_CON, 1, 0, dissect_protectedModifyResult },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_dop_null            , BER_CLASS_CON, 0, 0, dissect_dop_NULL },
+  {   1, &hf_dop_protectedModifyResult, BER_CLASS_CON, 1, 0, dissect_dop_ProtectedModifyResult },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_ModifyOperationalBindingResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_ModifyOperationalBindingResult(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_choice(actx, tree, tvb, offset,
                                  ModifyOperationalBindingResult_choice, hf_index, ett_dop_ModifyOperationalBindingResult,
                                  NULL);
 
@@ -1393,50 +1146,41 @@ dissect_dop_ModifyOperationalBindingResult(gboolean implicit_tag _U_, tvbuff_t *
 
 
 static int
-dissect_dop_TerminateSymmetric(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 128 "dop.cnf"
+dissect_dop_TerminateSymmetric(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 131 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.terminate.symmetric", tvb, offset, pinfo, tree, "symmetric");
+  offset = call_dop_oid_callback("terminate.symmetric", tvb, offset, actx->pinfo, tree, "symmetric");
 
 
 
   return offset;
 }
-static int dissect_terminateSymmetric(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_TerminateSymmetric(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateSymmetric);
-}
 
 
 
 static int
-dissect_dop_TerminateRoleAInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 132 "dop.cnf"
+dissect_dop_TerminateRoleAInitiates(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 135 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.terminate.rolea", tvb, offset, pinfo, tree, "roleA");
+  offset = call_dop_oid_callback("terminate.rolea", tvb, offset, actx->pinfo, tree, "roleA");
 
 
 
   return offset;
 }
-static int dissect_terminateRoleAInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_TerminateRoleAInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateRoleAInitiates);
-}
 
 
 
 static int
-dissect_dop_TerminateRoleBInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 136 "dop.cnf"
+dissect_dop_TerminateRoleBInitiates(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 139 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.terminate.roleb", tvb, offset, pinfo, tree, "roleB");
+  offset = call_dop_oid_callback("terminate.roleb", tvb, offset, actx->pinfo, tree, "roleB");
 
 
 
   return offset;
 }
-static int dissect_terminateRoleBInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_TerminateRoleBInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateRoleBInitiates);
-}
 
 
 static const value_string dop_TerminateArgumentInitiator_vals[] = {
@@ -1447,66 +1191,54 @@ static const value_string dop_TerminateArgumentInitiator_vals[] = {
 };
 
 static const ber_choice_t TerminateArgumentInitiator_choice[] = {
-  {   2, BER_CLASS_CON, 2, 0, dissect_terminateSymmetric },
-  {   3, BER_CLASS_CON, 3, 0, dissect_terminateRoleAInitiates },
-  {   4, BER_CLASS_CON, 4, 0, dissect_terminateRoleBInitiates },
-  { 0, 0, 0, 0, NULL }
+  {   2, &hf_dop_terminateSymmetric, BER_CLASS_CON, 2, 0, dissect_dop_TerminateSymmetric },
+  {   3, &hf_dop_terminateRoleAInitiates, BER_CLASS_CON, 3, 0, dissect_dop_TerminateRoleAInitiates },
+  {   4, &hf_dop_terminateRoleBInitiates, BER_CLASS_CON, 4, 0, dissect_dop_TerminateRoleBInitiates },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_TerminateArgumentInitiator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_TerminateArgumentInitiator(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_choice(actx, tree, tvb, offset,
                                  TerminateArgumentInitiator_choice, hf_index, ett_dop_TerminateArgumentInitiator,
                                  NULL);
 
   return offset;
 }
-static int dissect_terminateInitiator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_TerminateArgumentInitiator(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateInitiator);
-}
 
 
 static const ber_sequence_t TerminateOperationalBindingArgumentData_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_bindingType },
-  { BER_CLASS_CON, 1, 0, dissect_bindingID },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_terminateInitiator },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_terminateAtTime },
-  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_securityParameters },
-  { 0, 0, 0, NULL }
+  { &hf_dop_bindingType     , BER_CLASS_CON, 0, 0, dissect_dop_BindingType },
+  { &hf_dop_bindingID       , BER_CLASS_CON, 1, 0, dissect_dop_OperationalBindingID },
+  { &hf_dop_terminateInitiator, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_TerminateArgumentInitiator },
+  { &hf_dop_terminateAtTime , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_dop_Time },
+  { &hf_dop_securityParameters, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_TerminateOperationalBindingArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_TerminateOperationalBindingArgumentData(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    TerminateOperationalBindingArgumentData_sequence, hf_index, ett_dop_TerminateOperationalBindingArgumentData);
 
   return offset;
 }
-static int dissect_unsignedTerminateOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_TerminateOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_unsignedTerminateOperationalBindingArgument);
-}
-static int dissect_terminateOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_TerminateOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateOperationalBindingArgument);
-}
 
 
 static const ber_sequence_t T_signedTerminateOperationalBindingArgument_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_terminateOperationalBindingArgument },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
-  { 0, 0, 0, NULL }
+  { &hf_dop_terminateOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_TerminateOperationalBindingArgumentData },
+  { &hf_dop_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
+  { &hf_dop_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_BIT_STRING },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_T_signedTerminateOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_T_signedTerminateOperationalBindingArgument(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    T_signedTerminateOperationalBindingArgument_sequence, hf_index, ett_dop_T_signedTerminateOperationalBindingArgument);
 
   return offset;
 }
-static int dissect_signedTerminateOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_signedTerminateOperationalBindingArgument(FALSE, tvb, offset, pinfo, tree, hf_dop_signedTerminateOperationalBindingArgument);
-}
 
 
 static const value_string dop_TerminateOperationalBindingArgument_vals[] = {
@@ -1516,14 +1248,14 @@ static const value_string dop_TerminateOperationalBindingArgument_vals[] = {
 };
 
 static const ber_choice_t TerminateOperationalBindingArgument_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_unsignedTerminateOperationalBindingArgument },
-  {   1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signedTerminateOperationalBindingArgument },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_dop_unsignedTerminateOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_TerminateOperationalBindingArgumentData },
+  {   1, &hf_dop_signedTerminateOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_T_signedTerminateOperationalBindingArgument },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_TerminateOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_TerminateOperationalBindingArgument(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_choice(actx, tree, tvb, offset,
                                  TerminateOperationalBindingArgument_choice, hf_index, ett_dop_TerminateOperationalBindingArgument,
                                  NULL);
 
@@ -1532,45 +1264,39 @@ dissect_dop_TerminateOperationalBindingArgument(gboolean implicit_tag _U_, tvbuf
 
 
 static const ber_sequence_t TerminateOperationalBindingResultData_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_bindingID },
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_bindingType },
-  { BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_terminateAtGeneralizedTime },
-  { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_securityParameters },
-  { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_performer },
-  { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_aliasDereferenced },
-  { BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_notification },
-  { 0, 0, 0, NULL }
+  { &hf_dop_bindingID       , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_OperationalBindingID },
+  { &hf_dop_bindingType     , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_dop_BindingType },
+  { &hf_dop_terminateAtGeneralizedTime, BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_GeneralizedTime },
+  { &hf_dop_securityParameters, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
+  { &hf_dop_performer       , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
+  { &hf_dop_aliasDereferenced, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
+  { &hf_dop_notification    , BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_TerminateOperationalBindingResultData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_TerminateOperationalBindingResultData(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    TerminateOperationalBindingResultData_sequence, hf_index, ett_dop_TerminateOperationalBindingResultData);
 
   return offset;
 }
-static int dissect_terminateOperationalBindingResultData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_TerminateOperationalBindingResultData(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateOperationalBindingResultData);
-}
 
 
 static const ber_sequence_t ProtectedTerminateResult_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_terminateOperationalBindingResultData },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
-  { 0, 0, 0, NULL }
+  { &hf_dop_terminateOperationalBindingResultData, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_TerminateOperationalBindingResultData },
+  { &hf_dop_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
+  { &hf_dop_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_BIT_STRING },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_ProtectedTerminateResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_ProtectedTerminateResult(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ProtectedTerminateResult_sequence, hf_index, ett_dop_ProtectedTerminateResult);
 
   return offset;
 }
-static int dissect_protectedTerminateResult(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ProtectedTerminateResult(FALSE, tvb, offset, pinfo, tree, hf_dop_protectedTerminateResult);
-}
 
 
 static const value_string dop_TerminateOperationalBindingResult_vals[] = {
@@ -1580,14 +1306,14 @@ static const value_string dop_TerminateOperationalBindingResult_vals[] = {
 };
 
 static const ber_choice_t TerminateOperationalBindingResult_choice[] = {
-  {   0, BER_CLASS_CON, 0, 0, dissect_null },
-  {   1, BER_CLASS_CON, 1, 0, dissect_protectedTerminateResult },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_dop_null            , BER_CLASS_CON, 0, 0, dissect_dop_NULL },
+  {   1, &hf_dop_protectedTerminateResult, BER_CLASS_CON, 1, 0, dissect_dop_ProtectedTerminateResult },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_TerminateOperationalBindingResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_TerminateOperationalBindingResult(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_choice(actx, tree, tvb, offset,
                                  TerminateOperationalBindingResult_choice, hf_index, ett_dop_TerminateOperationalBindingResult,
                                  NULL);
 
@@ -1612,48 +1338,42 @@ static const value_string dop_T_problem_vals[] = {
 
 
 static int
-dissect_dop_T_problem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+dissect_dop_T_problem(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_problem(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_problem(FALSE, tvb, offset, pinfo, tree, hf_dop_problem);
-}
 
 
 
 static int
-dissect_dop_T_agreementProposal(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 156 "dop.cnf"
+dissect_dop_T_agreementProposal(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 159 "dop.cnf"
 
-  offset = call_dop_oid_callback("dop.agreement", tvb, offset, pinfo, tree, NULL);
+  offset = call_dop_oid_callback("agreement", tvb, offset, actx->pinfo, tree, NULL);
 
 
 
   return offset;
 }
-static int dissect_agreementProposal(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_agreementProposal(FALSE, tvb, offset, pinfo, tree, hf_dop_agreementProposal);
-}
 
 
 static const ber_sequence_t OpBindingErrorParam_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_problem },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_bindingType },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_agreementProposal },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_retryAt },
-  { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_securityParameters },
-  { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_performer },
-  { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_aliasDereferenced },
-  { BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_notification },
-  { 0, 0, 0, NULL }
+  { &hf_dop_problem         , BER_CLASS_CON, 0, 0, dissect_dop_T_problem },
+  { &hf_dop_bindingType     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_BindingType },
+  { &hf_dop_agreementProposal, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_T_agreementProposal },
+  { &hf_dop_retryAt         , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_dop_Time },
+  { &hf_dop_securityParameters, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
+  { &hf_dop_performer       , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
+  { &hf_dop_aliasDereferenced, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
+  { &hf_dop_notification    , BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_OpBindingErrorParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_OpBindingErrorParam(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    OpBindingErrorParam_sequence, hf_index, ett_dop_OpBindingErrorParam);
 
   return offset;
@@ -1661,14 +1381,14 @@ dissect_dop_OpBindingErrorParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int of
 
 
 static const ber_sequence_t HierarchicalAgreement_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_rdn },
-  { BER_CLASS_CON, 1, 0, dissect_immediateSuperior },
-  { 0, 0, 0, NULL }
+  { &hf_dop_rdn             , BER_CLASS_CON, 0, 0, dissect_x509if_RelativeDistinguishedName },
+  { &hf_dop_immediateSuperior, BER_CLASS_CON, 1, 0, dissect_x509if_DistinguishedName },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_HierarchicalAgreement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_HierarchicalAgreement(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    HierarchicalAgreement_sequence, hf_index, ett_dop_HierarchicalAgreement);
 
   return offset;
@@ -1676,110 +1396,86 @@ dissect_dop_HierarchicalAgreement(gboolean implicit_tag _U_, tvbuff_t *tvb, int
 
 
 static const ber_sequence_t SET_OF_Attribute_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_entryInfo_item },
+  { &hf_dop_entryInfo_item  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_Attribute },
 };
 
 static int
-dissect_dop_SET_OF_Attribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_Attribute(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_Attribute_set_of, hf_index, ett_dop_SET_OF_Attribute);
 
   return offset;
 }
-static int dissect_entryInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_entryInfo);
-}
-static int dissect_immediateSuperiorInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_immediateSuperiorInfo);
-}
-static int dissect_admPointInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_admPointInfo);
-}
-static int dissect_info(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_info);
-}
 
 
 static const ber_sequence_t SubentryInfo_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_rdn },
-  { BER_CLASS_CON, 1, 0, dissect_info },
-  { 0, 0, 0, NULL }
+  { &hf_dop_rdn             , BER_CLASS_CON, 0, 0, dissect_x509if_RelativeDistinguishedName },
+  { &hf_dop_info            , BER_CLASS_CON, 1, 0, dissect_dop_SET_OF_Attribute },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_SubentryInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SubentryInfo(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    SubentryInfo_sequence, hf_index, ett_dop_SubentryInfo);
 
   return offset;
 }
-static int dissect_subentries_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SubentryInfo(FALSE, tvb, offset, pinfo, tree, hf_dop_subentries_item);
-}
 
 
 static const ber_sequence_t SET_OF_SubentryInfo_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_subentries_item },
+  { &hf_dop_subentries_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_SubentryInfo },
 };
 
 static int
-dissect_dop_SET_OF_SubentryInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_SubentryInfo(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_SubentryInfo_set_of, hf_index, ett_dop_SET_OF_SubentryInfo);
 
   return offset;
 }
-static int dissect_subentries(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_SubentryInfo(FALSE, tvb, offset, pinfo, tree, hf_dop_subentries);
-}
 
 
 static const ber_sequence_t Vertex_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_rdn },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_admPointInfo },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_subentries },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_accessPoints },
-  { 0, 0, 0, NULL }
+  { &hf_dop_rdn             , BER_CLASS_CON, 0, 0, dissect_x509if_RelativeDistinguishedName },
+  { &hf_dop_admPointInfo    , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
+  { &hf_dop_subentries      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_SubentryInfo },
+  { &hf_dop_accessPoints    , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dsp_MasterAndShadowAccessPoints },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_Vertex(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_Vertex(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    Vertex_sequence, hf_index, ett_dop_Vertex);
 
   return offset;
 }
-static int dissect_DITcontext_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_Vertex(FALSE, tvb, offset, pinfo, tree, hf_dop_DITcontext_item);
-}
 
 
 static const ber_sequence_t DITcontext_sequence_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_DITcontext_item },
+  { &hf_dop_DITcontext_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_Vertex },
 };
 
 static int
-dissect_dop_DITcontext(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_DITcontext(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_sequence_of(implicit_tag, actx, tree, tvb, offset,
                                       DITcontext_sequence_of, hf_index, ett_dop_DITcontext);
 
   return offset;
 }
-static int dissect_contextPrefixInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_DITcontext(FALSE, tvb, offset, pinfo, tree, hf_dop_contextPrefixInfo);
-}
 
 
 static const ber_sequence_t SuperiorToSubordinate_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_contextPrefixInfo },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_entryInfo },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_immediateSuperiorInfo },
-  { 0, 0, 0, NULL }
+  { &hf_dop_contextPrefixInfo, BER_CLASS_CON, 0, 0, dissect_dop_DITcontext },
+  { &hf_dop_entryInfo       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
+  { &hf_dop_immediateSuperiorInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_SuperiorToSubordinate(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SuperiorToSubordinate(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    SuperiorToSubordinate_sequence, hf_index, ett_dop_SuperiorToSubordinate);
 
   return offset;
@@ -1787,16 +1483,16 @@ dissect_dop_SuperiorToSubordinate(gboolean implicit_tag _U_, tvbuff_t *tvb, int
 
 
 static const ber_sequence_t SubordinateToSuperior_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_accessPoints },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_alias },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_entryInfo },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_subentries },
-  { 0, 0, 0, NULL }
+  { &hf_dop_accessPoints    , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dsp_MasterAndShadowAccessPoints },
+  { &hf_dop_alias           , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
+  { &hf_dop_entryInfo       , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
+  { &hf_dop_subentries      , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_SubentryInfo },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_SubordinateToSuperior(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SubordinateToSuperior(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    SubordinateToSuperior_sequence, hf_index, ett_dop_SubordinateToSuperior);
 
   return offset;
@@ -1804,14 +1500,14 @@ dissect_dop_SubordinateToSuperior(gboolean implicit_tag _U_, tvbuff_t *tvb, int
 
 
 static const ber_sequence_t SuperiorToSubordinateModification_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_contextPrefixInfo },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_immediateSuperiorInfo },
-  { 0, 0, 0, NULL }
+  { &hf_dop_contextPrefixInfo, BER_CLASS_CON, 0, 0, dissect_dop_DITcontext },
+  { &hf_dop_immediateSuperiorInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_SuperiorToSubordinateModification(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SuperiorToSubordinateModification(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    SuperiorToSubordinateModification_sequence, hf_index, ett_dop_SuperiorToSubordinateModification);
 
   return offset;
@@ -1819,13 +1515,13 @@ dissect_dop_SuperiorToSubordinateModification(gboolean implicit_tag _U_, tvbuff_
 
 
 static const ber_sequence_t NonSpecificHierarchicalAgreement_sequence[] = {
-  { BER_CLASS_CON, 1, 0, dissect_immediateSuperior },
-  { 0, 0, 0, NULL }
+  { &hf_dop_immediateSuperior, BER_CLASS_CON, 1, 0, dissect_x509if_DistinguishedName },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_NonSpecificHierarchicalAgreement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_NonSpecificHierarchicalAgreement(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    NonSpecificHierarchicalAgreement_sequence, hf_index, ett_dop_NonSpecificHierarchicalAgreement);
 
   return offset;
@@ -1833,14 +1529,14 @@ dissect_dop_NonSpecificHierarchicalAgreement(gboolean implicit_tag _U_, tvbuff_t
 
 
 static const ber_sequence_t NHOBSuperiorToSubordinate_sequence[] = {
-  { BER_CLASS_CON, 0, 0, dissect_contextPrefixInfo },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_immediateSuperiorInfo },
-  { 0, 0, 0, NULL }
+  { &hf_dop_contextPrefixInfo, BER_CLASS_CON, 0, 0, dissect_dop_DITcontext },
+  { &hf_dop_immediateSuperiorInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_NHOBSuperiorToSubordinate(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_NHOBSuperiorToSubordinate(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    NHOBSuperiorToSubordinate_sequence, hf_index, ett_dop_NHOBSuperiorToSubordinate);
 
   return offset;
@@ -1848,14 +1544,14 @@ dissect_dop_NHOBSuperiorToSubordinate(gboolean implicit_tag _U_, tvbuff_t *tvb,
 
 
 static const ber_sequence_t NHOBSubordinateToSuperior_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_accessPoints },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_subentries },
-  { 0, 0, 0, NULL }
+  { &hf_dop_accessPoints    , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dsp_MasterAndShadowAccessPoints },
+  { &hf_dop_subentries      , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_SubentryInfo },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_NHOBSubordinateToSuperior(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_NHOBSubordinateToSuperior(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    NHOBSubordinateToSuperior_sequence, hf_index, ett_dop_NHOBSubordinateToSuperior);
 
   return offset;
@@ -1864,12 +1560,12 @@ dissect_dop_NHOBSubordinateToSuperior(gboolean implicit_tag _U_, tvbuff_t *tvb,
 
 
 static int
-dissect_dop_Precedence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-#line 187 "dop.cnf"
+dissect_dop_Precedence(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 190 "dop.cnf"
   guint32 precedence = 0;
 
-    offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
-                                  &precedence);
+    offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
+                                                &precedence);
 
 
   proto_item_append_text(tree, " precedence=%d", precedence);
@@ -1878,9 +1574,6 @@ dissect_dop_Precedence(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, pac
 
   return offset;
 }
-static int dissect_precedence(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_Precedence(FALSE, tvb, offset, pinfo, tree, hf_dop_precedence);
-}
 
 
 static const value_string dop_T_level_vals[] = {
@@ -1892,33 +1585,46 @@ static const value_string dop_T_level_vals[] = {
 
 
 static int
-dissect_dop_T_level(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
+dissect_dop_T_level(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_level(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_level(FALSE, tvb, offset, pinfo, tree, hf_dop_level);
+
+
+
+static int
+dissect_dop_INTEGER(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 const ber_sequence_t T_basicLevels_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_level },
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_localQualifier },
-  { BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_signed },
-  { 0, 0, 0, NULL }
+  { &hf_dop_level           , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_dop_T_level },
+  { &hf_dop_localQualifier  , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_INTEGER },
+  { &hf_dop_signed          , BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_BOOLEAN },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_T_basicLevels(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_T_basicLevels(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    T_basicLevels_sequence, hf_index, ett_dop_T_basicLevels);
 
   return offset;
 }
-static int dissect_basicLevels(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_basicLevels(FALSE, tvb, offset, pinfo, tree, hf_dop_basicLevels);
+
+
+
+static int
+dissect_dop_EXTERNAL(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_external_type(implicit_tag, tree, tvb, offset, actx, hf_index, NULL);
+
+  return offset;
 }
 
 
@@ -1929,229 +1635,184 @@ static const value_string dop_AuthenticationLevel_vals[] = {
 };
 
 static const ber_choice_t AuthenticationLevel_choice[] = {
-  {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_basicLevels },
-  {   1, BER_CLASS_UNI, 8, BER_FLAGS_NOOWNTAG, dissect_other },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_dop_basicLevels     , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_T_basicLevels },
+  {   1, &hf_dop_other           , BER_CLASS_UNI, BER_UNI_TAG_EXTERNAL, BER_FLAGS_NOOWNTAG, dissect_dop_EXTERNAL },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_AuthenticationLevel(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_AuthenticationLevel(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_choice(actx, tree, tvb, offset,
                                  AuthenticationLevel_choice, hf_index, ett_dop_AuthenticationLevel,
                                  NULL);
 
   return offset;
 }
-static int dissect_authenticationLevel(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_AuthenticationLevel(FALSE, tvb, offset, pinfo, tree, hf_dop_authenticationLevel);
-}
 
 
 static const ber_sequence_t SET_OF_AttributeType_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_attributeType_item },
+  { &hf_dop_attributeType_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
 };
 
 static int
-dissect_dop_SET_OF_AttributeType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_AttributeType(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_AttributeType_set_of, hf_index, ett_dop_SET_OF_AttributeType);
 
   return offset;
 }
-static int dissect_attributeType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_dop_attributeType);
-}
-static int dissect_allAttributeValues(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_dop_allAttributeValues);
-}
-static int dissect_selfValue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_AttributeType(FALSE, tvb, offset, pinfo, tree, hf_dop_selfValue);
-}
 
 
 static const ber_sequence_t SET_OF_AttributeTypeAndValue_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_attributeValue_item },
+  { &hf_dop_attributeValue_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_crmf_AttributeTypeAndValue },
 };
 
 static int
-dissect_dop_SET_OF_AttributeTypeAndValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_AttributeTypeAndValue(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_AttributeTypeAndValue_set_of, hf_index, ett_dop_SET_OF_AttributeTypeAndValue);
 
   return offset;
 }
-static int dissect_attributeValue(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_AttributeTypeAndValue(FALSE, tvb, offset, pinfo, tree, hf_dop_attributeValue);
-}
 
 
 static const ber_sequence_t MaxValueCount_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_type },
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_maxCount },
-  { 0, 0, 0, NULL }
+  { &hf_dop_type            , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
+  { &hf_dop_maxCount        , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_dop_INTEGER },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_MaxValueCount(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_MaxValueCount(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    MaxValueCount_sequence, hf_index, ett_dop_MaxValueCount);
 
   return offset;
 }
-static int dissect_maxValueCount_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_MaxValueCount(FALSE, tvb, offset, pinfo, tree, hf_dop_maxValueCount_item);
-}
 
 
 static const ber_sequence_t SET_OF_MaxValueCount_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_maxValueCount_item },
+  { &hf_dop_maxValueCount_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_MaxValueCount },
 };
 
 static int
-dissect_dop_SET_OF_MaxValueCount(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_MaxValueCount(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_MaxValueCount_set_of, hf_index, ett_dop_SET_OF_MaxValueCount);
 
   return offset;
 }
-static int dissect_maxValueCount(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_MaxValueCount(FALSE, tvb, offset, pinfo, tree, hf_dop_maxValueCount);
-}
 
 
 static const ber_sequence_t RestrictedValue_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_type },
-  { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_valuesIn },
-  { 0, 0, 0, NULL }
+  { &hf_dop_type            , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
+  { &hf_dop_valuesIn        , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_RestrictedValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_RestrictedValue(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    RestrictedValue_sequence, hf_index, ett_dop_RestrictedValue);
 
   return offset;
 }
-static int dissect_restrictedBy_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_RestrictedValue(FALSE, tvb, offset, pinfo, tree, hf_dop_restrictedBy_item);
-}
 
 
 static const ber_sequence_t SET_OF_RestrictedValue_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_restrictedBy_item },
+  { &hf_dop_restrictedBy_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_RestrictedValue },
 };
 
 static int
-dissect_dop_SET_OF_RestrictedValue(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_RestrictedValue(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_RestrictedValue_set_of, hf_index, ett_dop_SET_OF_RestrictedValue);
 
   return offset;
 }
-static int dissect_restrictedBy(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_RestrictedValue(FALSE, tvb, offset, pinfo, tree, hf_dop_restrictedBy);
-}
 
 
 static const ber_sequence_t SET_OF_ContextAssertion_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_contexts_item },
+  { &hf_dop_contexts_item   , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_ContextAssertion },
 };
 
 static int
-dissect_dop_SET_OF_ContextAssertion(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_ContextAssertion(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_ContextAssertion_set_of, hf_index, ett_dop_SET_OF_ContextAssertion);
 
   return offset;
 }
-static int dissect_contexts(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_ContextAssertion(FALSE, tvb, offset, pinfo, tree, hf_dop_contexts);
-}
 
 
 static const ber_sequence_t ProtectedItems_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_entry },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_allUserAttributeTypes },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_attributeType },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_allAttributeValues },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_allUserAttributeTypesAndValues },
-  { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_attributeValue },
-  { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_selfValue },
-  { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_rangeOfValues },
-  { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_maxValueCount },
-  { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL, dissect_maxImmSub },
-  { BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL, dissect_restrictedBy },
-  { BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_contexts },
-  { BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_classes },
-  { 0, 0, 0, NULL }
-};
-
-static int
-dissect_dop_ProtectedItems(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+  { &hf_dop_entry           , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dop_NULL },
+  { &hf_dop_allUserAttributeTypes, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_NULL },
+  { &hf_dop_attributeType   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_AttributeType },
+  { &hf_dop_allAttributeValues, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_AttributeType },
+  { &hf_dop_allUserAttributeTypesAndValues, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_dop_NULL },
+  { &hf_dop_attributeValue  , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_AttributeTypeAndValue },
+  { &hf_dop_selfValue       , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_AttributeType },
+  { &hf_dop_rangeOfValues   , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_dap_Filter },
+  { &hf_dop_maxValueCount   , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_MaxValueCount },
+  { &hf_dop_maxImmSub       , BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL, dissect_dop_INTEGER },
+  { &hf_dop_restrictedBy    , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_RestrictedValue },
+  { &hf_dop_contexts        , BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_ContextAssertion },
+  { &hf_dop_classes         , BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_x509if_Refinement },
+  { NULL, 0, 0, 0, NULL }
+};
+
+static int
+dissect_dop_ProtectedItems(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ProtectedItems_sequence, hf_index, ett_dop_ProtectedItems);
 
   return offset;
 }
-static int dissect_protectedItems(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ProtectedItems(FALSE, tvb, offset, pinfo, tree, hf_dop_protectedItems);
-}
 
 
 static const ber_sequence_t SET_OF_NameAndOptionalUID_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_name_item },
+  { &hf_dop_name_item       , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509sat_NameAndOptionalUID },
 };
 
 static int
-dissect_dop_SET_OF_NameAndOptionalUID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_NameAndOptionalUID(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_NameAndOptionalUID_set_of, hf_index, ett_dop_SET_OF_NameAndOptionalUID);
 
   return offset;
 }
-static int dissect_name(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_NameAndOptionalUID(FALSE, tvb, offset, pinfo, tree, hf_dop_name);
-}
-static int dissect_userGroup(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_NameAndOptionalUID(FALSE, tvb, offset, pinfo, tree, hf_dop_userGroup);
-}
 
 
 static const ber_sequence_t SET_OF_SubtreeSpecification_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_subtree_item },
+  { &hf_dop_subtree_item    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_SubtreeSpecification },
 };
 
 static int
-dissect_dop_SET_OF_SubtreeSpecification(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_SubtreeSpecification(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_SubtreeSpecification_set_of, hf_index, ett_dop_SET_OF_SubtreeSpecification);
 
   return offset;
 }
-static int dissect_subtree(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_SubtreeSpecification(FALSE, tvb, offset, pinfo, tree, hf_dop_subtree);
-}
 
 
 static const ber_sequence_t UserClasses_sequence[] = {
-  { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_allUsers },
-  { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_thisEntry },
-  { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_name },
-  { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_userGroup },
-  { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_subtree },
-  { 0, 0, 0, NULL }
+  { &hf_dop_allUsers        , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dop_NULL },
+  { &hf_dop_thisEntry       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_NULL },
+  { &hf_dop_name            , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_NameAndOptionalUID },
+  { &hf_dop_userGroup       , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_NameAndOptionalUID },
+  { &hf_dop_subtree         , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_SubtreeSpecification },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_UserClasses(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_UserClasses(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    UserClasses_sequence, hf_index, ett_dop_UserClasses);
 
   return offset;
 }
-static int dissect_userClasses(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_UserClasses(FALSE, tvb, offset, pinfo, tree, hf_dop_userClasses);
-}
 
 
 static const asn_namedbit GrantsAndDenials_bits[] = {
@@ -2185,122 +1846,101 @@ static const asn_namedbit GrantsAndDenials_bits[] = {
 };
 
 static int
-dissect_dop_GrantsAndDenials(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_GrantsAndDenials(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_bitstring(implicit_tag, actx, tree, tvb, offset,
                                     GrantsAndDenials_bits, hf_index, ett_dop_GrantsAndDenials,
                                     NULL);
 
   return offset;
 }
-static int dissect_grantsAndDenials(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_GrantsAndDenials(FALSE, tvb, offset, pinfo, tree, hf_dop_grantsAndDenials);
-}
 
 
 static const ber_sequence_t ItemPermission_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_precedence },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_userClasses },
-  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_grantsAndDenials },
-  { 0, 0, 0, NULL }
+  { &hf_dop_precedence      , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_Precedence },
+  { &hf_dop_userClasses     , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_UserClasses },
+  { &hf_dop_grantsAndDenials, BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_GrantsAndDenials },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_ItemPermission(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_ItemPermission(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ItemPermission_sequence, hf_index, ett_dop_ItemPermission);
 
   return offset;
 }
-static int dissect_itemPermissions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_ItemPermission(FALSE, tvb, offset, pinfo, tree, hf_dop_itemPermissions_item);
-}
 
 
 static const ber_sequence_t SET_OF_ItemPermission_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_itemPermissions_item },
+  { &hf_dop_itemPermissions_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ItemPermission },
 };
 
 static int
-dissect_dop_SET_OF_ItemPermission(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_ItemPermission(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_ItemPermission_set_of, hf_index, ett_dop_SET_OF_ItemPermission);
 
   return offset;
 }
-static int dissect_itemPermissions(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_ItemPermission(FALSE, tvb, offset, pinfo, tree, hf_dop_itemPermissions);
-}
 
 
 static const ber_sequence_t T_itemFirst_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_protectedItems },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_itemPermissions },
-  { 0, 0, 0, NULL }
+  { &hf_dop_protectedItems  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ProtectedItems },
+  { &hf_dop_itemPermissions , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dop_SET_OF_ItemPermission },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_T_itemFirst(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_T_itemFirst(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    T_itemFirst_sequence, hf_index, ett_dop_T_itemFirst);
 
   return offset;
 }
-static int dissect_itemFirst(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_itemFirst(FALSE, tvb, offset, pinfo, tree, hf_dop_itemFirst);
-}
 
 
 static const ber_sequence_t UserPermission_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_precedence },
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_protectedItems },
-  { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_grantsAndDenials },
-  { 0, 0, 0, NULL }
+  { &hf_dop_precedence      , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_Precedence },
+  { &hf_dop_protectedItems  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ProtectedItems },
+  { &hf_dop_grantsAndDenials, BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_GrantsAndDenials },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_UserPermission(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_UserPermission(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    UserPermission_sequence, hf_index, ett_dop_UserPermission);
 
   return offset;
 }
-static int dissect_userPermissions_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_UserPermission(FALSE, tvb, offset, pinfo, tree, hf_dop_userPermissions_item);
-}
 
 
 static const ber_sequence_t SET_OF_UserPermission_set_of[1] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_userPermissions_item },
+  { &hf_dop_userPermissions_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_UserPermission },
 };
 
 static int
-dissect_dop_SET_OF_UserPermission(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_SET_OF_UserPermission(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_of(implicit_tag, actx, tree, tvb, offset,
                                  SET_OF_UserPermission_set_of, hf_index, ett_dop_SET_OF_UserPermission);
 
   return offset;
 }
-static int dissect_userPermissions(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_SET_OF_UserPermission(FALSE, tvb, offset, pinfo, tree, hf_dop_userPermissions);
-}
 
 
 static const ber_sequence_t T_userFirst_sequence[] = {
-  { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_userClasses },
-  { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_userPermissions },
-  { 0, 0, 0, NULL }
+  { &hf_dop_userClasses     , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_UserClasses },
+  { &hf_dop_userPermissions , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dop_SET_OF_UserPermission },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_T_userFirst(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_T_userFirst(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    T_userFirst_sequence, hf_index, ett_dop_T_userFirst);
 
   return offset;
 }
-static int dissect_userFirst(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_userFirst(FALSE, tvb, offset, pinfo, tree, hf_dop_userFirst);
-}
 
 
 static const value_string dop_T_itemOrUserFirst_vals[] = {
@@ -2310,35 +1950,32 @@ static const value_string dop_T_itemOrUserFirst_vals[] = {
 };
 
 static const ber_choice_t T_itemOrUserFirst_choice[] = {
-  {   0, BER_CLASS_CON, 0, 0, dissect_itemFirst },
-  {   1, BER_CLASS_CON, 1, 0, dissect_userFirst },
-  { 0, 0, 0, 0, NULL }
+  {   0, &hf_dop_itemFirst       , BER_CLASS_CON, 0, 0, dissect_dop_T_itemFirst },
+  {   1, &hf_dop_userFirst       , BER_CLASS_CON, 1, 0, dissect_dop_T_userFirst },
+  { 0, NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_T_itemOrUserFirst(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_choice(pinfo, tree, tvb, offset,
+dissect_dop_T_itemOrUserFirst(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_choice(actx, tree, tvb, offset,
                                  T_itemOrUserFirst_choice, hf_index, ett_dop_T_itemOrUserFirst,
                                  NULL);
 
   return offset;
 }
-static int dissect_itemOrUserFirst(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
-  return dissect_dop_T_itemOrUserFirst(FALSE, tvb, offset, pinfo, tree, hf_dop_itemOrUserFirst);
-}
 
 
 static const ber_sequence_t ACIItem_sequence[] = {
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_identificationTag },
-  { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_precedence },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_authenticationLevel },
-  { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_itemOrUserFirst },
-  { 0, 0, 0, NULL }
+  { &hf_dop_identificationTag, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_x509sat_DirectoryString },
+  { &hf_dop_precedence      , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_dop_Precedence },
+  { &hf_dop_authenticationLevel, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_AuthenticationLevel },
+  { &hf_dop_itemOrUserFirst , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_T_itemOrUserFirst },
+  { NULL, 0, 0, 0, NULL }
 };
 
 static int
-dissect_dop_ACIItem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
-  offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
+dissect_dop_ACIItem(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_sequence(implicit_tag, actx, tree, tvb, offset,
                                    ACIItem_sequence, hf_index, ett_dop_ACIItem);
 
   return offset;
@@ -2346,58 +1983,95 @@ dissect_dop_ACIItem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet
 
 /*--- PDUs ---*/
 
-static void dissect_DSEType_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_DSEType(FALSE, tvb, 0, pinfo, tree, hf_dop_DSEType_PDU);
+static void dissect_DSEType_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_DSEType(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_DSEType_PDU);
 }
-static void dissect_SupplierInformation_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_SupplierInformation(FALSE, tvb, 0, pinfo, tree, hf_dop_SupplierInformation_PDU);
+static void dissect_SupplierInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_SupplierInformation(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_SupplierInformation_PDU);
 }
-static void dissect_ConsumerInformation_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_ConsumerInformation(FALSE, tvb, 0, pinfo, tree, hf_dop_ConsumerInformation_PDU);
+static void dissect_ConsumerInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_ConsumerInformation(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_ConsumerInformation_PDU);
 }
-static void dissect_SupplierAndConsumers_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_SupplierAndConsumers(FALSE, tvb, 0, pinfo, tree, hf_dop_SupplierAndConsumers_PDU);
+static void dissect_SupplierAndConsumers_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_SupplierAndConsumers(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_SupplierAndConsumers_PDU);
 }
-static void dissect_HierarchicalAgreement_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_HierarchicalAgreement(FALSE, tvb, 0, pinfo, tree, hf_dop_HierarchicalAgreement_PDU);
+static void dissect_HierarchicalAgreement_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_HierarchicalAgreement(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_HierarchicalAgreement_PDU);
 }
-static void dissect_SuperiorToSubordinate_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_SuperiorToSubordinate(FALSE, tvb, 0, pinfo, tree, hf_dop_SuperiorToSubordinate_PDU);
+static void dissect_SuperiorToSubordinate_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_SuperiorToSubordinate(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_SuperiorToSubordinate_PDU);
 }
-static void dissect_SubordinateToSuperior_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_SubordinateToSuperior(FALSE, tvb, 0, pinfo, tree, hf_dop_SubordinateToSuperior_PDU);
+static void dissect_SubordinateToSuperior_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_SubordinateToSuperior(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_SubordinateToSuperior_PDU);
 }
-static void dissect_SuperiorToSubordinateModification_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_SuperiorToSubordinateModification(FALSE, tvb, 0, pinfo, tree, hf_dop_SuperiorToSubordinateModification_PDU);
+static void dissect_SuperiorToSubordinateModification_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_SuperiorToSubordinateModification(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_SuperiorToSubordinateModification_PDU);
 }
-static void dissect_NonSpecificHierarchicalAgreement_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_NonSpecificHierarchicalAgreement(FALSE, tvb, 0, pinfo, tree, hf_dop_NonSpecificHierarchicalAgreement_PDU);
+static void dissect_NonSpecificHierarchicalAgreement_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_NonSpecificHierarchicalAgreement(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_NonSpecificHierarchicalAgreement_PDU);
 }
-static void dissect_NHOBSuperiorToSubordinate_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_NHOBSuperiorToSubordinate(FALSE, tvb, 0, pinfo, tree, hf_dop_NHOBSuperiorToSubordinate_PDU);
+static void dissect_NHOBSuperiorToSubordinate_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_NHOBSuperiorToSubordinate(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_NHOBSuperiorToSubordinate_PDU);
 }
-static void dissect_NHOBSubordinateToSuperior_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_NHOBSubordinateToSuperior(FALSE, tvb, 0, pinfo, tree, hf_dop_NHOBSubordinateToSuperior_PDU);
+static void dissect_NHOBSubordinateToSuperior_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_NHOBSubordinateToSuperior(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_NHOBSubordinateToSuperior_PDU);
 }
-static void dissect_ACIItem_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
-  dissect_dop_ACIItem(FALSE, tvb, 0, pinfo, tree, hf_dop_ACIItem_PDU);
+static void dissect_ACIItem_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
+  asn1_ctx_t asn1_ctx;
+  asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
+  dissect_dop_ACIItem(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_ACIItem_PDU);
 }
 
 
 /*--- End of included file: packet-dop-fn.c ---*/
-#line 76 "packet-dop-template.c"
+#line 88 "packet-dop-template.c"
 
 static int
-call_dop_oid_callback(char *base_oid, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, char *col_info)
+call_dop_oid_callback(char *base_string, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, char *col_info)
 {
-  char binding_param[BER_MAX_OID_STR_LEN];
+  char* binding_param;
+
+  binding_param = ep_strdup_printf("%s.%s", base_string, binding_type ? binding_type : "");
+
+  col_append_fstr(pinfo->cinfo, COL_INFO, " %s", col_info);
 
-  g_snprintf(binding_param, BER_MAX_OID_STR_LEN, "%s.%s", base_oid, binding_type ? binding_type : ""); 
+  if (dissector_try_string(dop_dissector_table, binding_param, tvb, pinfo, tree)) {
+     offset += tvb_length_remaining (tvb, offset);
+  } else {
+     proto_item *item=NULL;
+     proto_tree *next_tree=NULL;
 
-  if (col_info && (check_col(pinfo->cinfo, COL_INFO))) 
-    col_append_fstr(pinfo->cinfo, COL_INFO, " %s", col_info);
+     item = proto_tree_add_text(tree, tvb, 0, tvb_length_remaining(tvb, offset), "Dissector for parameter %s OID:%s not implemented. Contact Wireshark developers if you want this supported", base_string, binding_type ? binding_type : "<empty>");
+     if (item) {
+        next_tree = proto_item_add_subtree(item, ett_dop_unknown);
+     }
+     offset = dissect_unknown_ber(pinfo, tvb, offset, next_tree);
+     expert_add_info_format(pinfo, item, PI_UNDECODED, PI_WARN, "Unknown binding-parameter");
+   }
 
-  return call_ber_oid_callback(binding_param, tvb, offset, pinfo, tree);
+   return offset;
 }
 
 
@@ -2411,8 +2085,11 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
        int old_offset;
        proto_item *item=NULL;
        proto_tree *tree=NULL;
-       int (*dop_dissector)(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) = NULL;
+       int (*dop_dissector)(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index _U_) = NULL;
        char *dop_op_name;
+       asn1_ctx_t asn1_ctx;
+
+       asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
 
        /* do we have operation information from the ROS dissector?  */
        if( !pinfo->private_data ){
@@ -2429,10 +2106,8 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
                item = proto_tree_add_item(parent_tree, proto_dop, tvb, 0, -1, FALSE);
                tree = proto_item_add_subtree(item, ett_dop);
        }
-       if (check_col(pinfo->cinfo, COL_PROTOCOL))
-               col_set_str(pinfo->cinfo, COL_PROTOCOL, "DOP");
-       if (check_col(pinfo->cinfo, COL_INFO))
-               col_clear(pinfo->cinfo, COL_INFO);
+       col_set_str(pinfo->cinfo, COL_PROTOCOL, "DOP");
+       col_clear(pinfo->cinfo, COL_INFO);
 
        switch(session->ros_op & ROS_OP_MASK) {
        case (ROS_OP_BIND | ROS_OP_ARGUMENT):   /*  BindInvoke */
@@ -2505,15 +2180,13 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
        }
 
        if(dop_dissector) {
-         if (check_col(pinfo->cinfo, COL_INFO))
-           col_add_str(pinfo->cinfo, COL_INFO, dop_op_name);
+      col_set_str(pinfo->cinfo, COL_INFO, dop_op_name);
 
          while (tvb_reported_length_remaining(tvb, offset) > 0){
            old_offset=offset;
-           offset=(*dop_dissector)(FALSE, tvb, offset, pinfo , tree, -1);
+           offset=(*dop_dissector)(FALSE, tvb, offset, &asn1_ctx, tree, -1);
            if(offset == old_offset){
              proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DOP PDU");
-             offset = tvb_length(tvb);
              break;
            }
          }
@@ -2533,764 +2206,773 @@ void proto_register_dop(void) {
 #line 1 "packet-dop-hfarr.c"
     { &hf_dop_DSEType_PDU,
       { "DSEType", "dop.DSEType",
-        FT_BYTES, BASE_HEX, NULL, 0,
-        "DSEType", HFILL }},
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "dop.DSEType", HFILL }},
     { &hf_dop_SupplierInformation_PDU,
       { "SupplierInformation", "dop.SupplierInformation",
         FT_NONE, BASE_NONE, NULL, 0,
-        "SupplierInformation", HFILL }},
+        "dop.SupplierInformation", HFILL }},
     { &hf_dop_ConsumerInformation_PDU,
       { "ConsumerInformation", "dop.ConsumerInformation",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ConsumerInformation", HFILL }},
+        "dop.ConsumerInformation", HFILL }},
     { &hf_dop_SupplierAndConsumers_PDU,
       { "SupplierAndConsumers", "dop.SupplierAndConsumers",
         FT_NONE, BASE_NONE, NULL, 0,
-        "SupplierAndConsumers", HFILL }},
+        "dop.SupplierAndConsumers", HFILL }},
     { &hf_dop_HierarchicalAgreement_PDU,
       { "HierarchicalAgreement", "dop.HierarchicalAgreement",
         FT_NONE, BASE_NONE, NULL, 0,
-        "HierarchicalAgreement", HFILL }},
+        "dop.HierarchicalAgreement", HFILL }},
     { &hf_dop_SuperiorToSubordinate_PDU,
       { "SuperiorToSubordinate", "dop.SuperiorToSubordinate",
         FT_NONE, BASE_NONE, NULL, 0,
-        "SuperiorToSubordinate", HFILL }},
+        "dop.SuperiorToSubordinate", HFILL }},
     { &hf_dop_SubordinateToSuperior_PDU,
       { "SubordinateToSuperior", "dop.SubordinateToSuperior",
         FT_NONE, BASE_NONE, NULL, 0,
-        "SubordinateToSuperior", HFILL }},
+        "dop.SubordinateToSuperior", HFILL }},
     { &hf_dop_SuperiorToSubordinateModification_PDU,
       { "SuperiorToSubordinateModification", "dop.SuperiorToSubordinateModification",
         FT_NONE, BASE_NONE, NULL, 0,
-        "SuperiorToSubordinateModification", HFILL }},
+        "dop.SuperiorToSubordinateModification", HFILL }},
     { &hf_dop_NonSpecificHierarchicalAgreement_PDU,
       { "NonSpecificHierarchicalAgreement", "dop.NonSpecificHierarchicalAgreement",
         FT_NONE, BASE_NONE, NULL, 0,
-        "NonSpecificHierarchicalAgreement", HFILL }},
+        "dop.NonSpecificHierarchicalAgreement", HFILL }},
     { &hf_dop_NHOBSuperiorToSubordinate_PDU,
       { "NHOBSuperiorToSubordinate", "dop.NHOBSuperiorToSubordinate",
         FT_NONE, BASE_NONE, NULL, 0,
-        "NHOBSuperiorToSubordinate", HFILL }},
+        "dop.NHOBSuperiorToSubordinate", HFILL }},
     { &hf_dop_NHOBSubordinateToSuperior_PDU,
       { "NHOBSubordinateToSuperior", "dop.NHOBSubordinateToSuperior",
         FT_NONE, BASE_NONE, NULL, 0,
-        "NHOBSubordinateToSuperior", HFILL }},
+        "dop.NHOBSubordinateToSuperior", HFILL }},
     { &hf_dop_ACIItem_PDU,
       { "ACIItem", "dop.ACIItem",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ACIItem", HFILL }},
+        "dop.ACIItem", HFILL }},
     { &hf_dop_ae_title,
       { "ae-title", "dop.ae_title",
         FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
-        "", HFILL }},
+        "x509if.Name", HFILL }},
     { &hf_dop_address,
       { "address", "dop.address",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509sat.PresentationAddress", HFILL }},
     { &hf_dop_protocolInformation,
       { "protocolInformation", "dop.protocolInformation",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "dop.SET_OF_ProtocolInformation", HFILL }},
     { &hf_dop_protocolInformation_item,
-      { "Item", "dop.protocolInformation_item",
+      { "ProtocolInformation", "dop.ProtocolInformation",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509sat.ProtocolInformation", HFILL }},
     { &hf_dop_agreementID,
       { "agreementID", "dop.agreementID",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "dop.OperationalBindingID", HFILL }},
     { &hf_dop_supplier_is_master,
       { "supplier-is-master", "dop.supplier_is_master",
-        FT_BOOLEAN, 8, NULL, 0,
-        "SupplierInformation/supplier-is-master", HFILL }},
+        FT_BOOLEAN, BASE_NONE, NULL, 0,
+        "dop.BOOLEAN", HFILL }},
     { &hf_dop_non_supplying_master,
       { "non-supplying-master", "dop.non_supplying_master",
         FT_NONE, BASE_NONE, NULL, 0,
-        "SupplierInformation/non-supplying-master", HFILL }},
+        "dsp.AccessPoint", HFILL }},
     { &hf_dop_consumers,
       { "consumers", "dop.consumers",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "SupplierAndConsumers/consumers", HFILL }},
+        "dop.SET_OF_AccessPoint", HFILL }},
     { &hf_dop_consumers_item,
-      { "Item", "dop.consumers_item",
+      { "AccessPoint", "dop.AccessPoint",
         FT_NONE, BASE_NONE, NULL, 0,
-        "SupplierAndConsumers/consumers/_item", HFILL }},
+        "dsp.AccessPoint", HFILL }},
     { &hf_dop_bindingType,
       { "bindingType", "dop.bindingType",
         FT_OID, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "dop.BindingType", HFILL }},
     { &hf_dop_bindingID,
       { "bindingID", "dop.bindingID",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "dop.OperationalBindingID", HFILL }},
     { &hf_dop_accessPoint,
       { "accessPoint", "dop.accessPoint",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "dsp.AccessPoint", HFILL }},
     { &hf_dop_establishInitiator,
       { "initiator", "dop.initiator",
         FT_UINT32, BASE_DEC, VALS(dop_EstablishArgumentInitiator_vals), 0,
-        "EstablishOperationalBindingArgumentData/initiator", HFILL }},
+        "dop.EstablishArgumentInitiator", HFILL }},
     { &hf_dop_establishSymmetric,
       { "symmetric", "dop.symmetric",
         FT_NONE, BASE_NONE, NULL, 0,
-        "EstablishOperationalBindingArgumentData/initiator/symmetric", HFILL }},
+        "dop.EstablishSymmetric", HFILL }},
     { &hf_dop_establishRoleAInitiates,
       { "roleA-initiates", "dop.roleA_initiates",
         FT_NONE, BASE_NONE, NULL, 0,
-        "EstablishOperationalBindingArgumentData/initiator/roleA-initiates", HFILL }},
+        "dop.EstablishRoleAInitiates", HFILL }},
     { &hf_dop_establishRoleBInitiates,
       { "roleB-initiates", "dop.roleB_initiates",
         FT_NONE, BASE_NONE, NULL, 0,
-        "EstablishOperationalBindingArgumentData/initiator/roleB-initiates", HFILL }},
+        "dop.EstablishRoleBInitiates", HFILL }},
     { &hf_dop_agreement,
       { "agreement", "dop.agreement",
         FT_NONE, BASE_NONE, NULL, 0,
-        "EstablishOperationalBindingArgumentData/agreement", HFILL }},
+        "dop.T_agreement", HFILL }},
     { &hf_dop_valid,
       { "valid", "dop.valid",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "dop.Validity", HFILL }},
     { &hf_dop_securityParameters,
       { "securityParameters", "dop.securityParameters",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "dap.SecurityParameters", HFILL }},
     { &hf_dop_unsignedEstablishOperationalBindingArgument,
       { "unsignedEstablishOperationalBindingArgument", "dop.unsignedEstablishOperationalBindingArgument",
         FT_NONE, BASE_NONE, NULL, 0,
-        "EstablishOperationalBindingArgument/unsignedEstablishOperationalBindingArgument", HFILL }},
+        "dop.EstablishOperationalBindingArgumentData", HFILL }},
     { &hf_dop_signedEstablishOperationalBindingArgument,
       { "signedEstablishOperationalBindingArgument", "dop.signedEstablishOperationalBindingArgument",
         FT_NONE, BASE_NONE, NULL, 0,
-        "EstablishOperationalBindingArgument/signedEstablishOperationalBindingArgument", HFILL }},
+        "dop.T_signedEstablishOperationalBindingArgument", HFILL }},
     { &hf_dop_establishOperationalBindingArgument,
       { "establishOperationalBindingArgument", "dop.establishOperationalBindingArgument",
         FT_NONE, BASE_NONE, NULL, 0,
-        "EstablishOperationalBindingArgument/signedEstablishOperationalBindingArgument/establishOperationalBindingArgument", HFILL }},
+        "dop.EstablishOperationalBindingArgumentData", HFILL }},
     { &hf_dop_algorithmIdentifier,
       { "algorithmIdentifier", "dop.algorithmIdentifier",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509af.AlgorithmIdentifier", HFILL }},
     { &hf_dop_encrypted,
       { "encrypted", "dop.encrypted",
-        FT_BYTES, BASE_HEX, NULL, 0,
-        "", HFILL }},
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "dop.BIT_STRING", HFILL }},
     { &hf_dop_identifier,
       { "identifier", "dop.identifier",
         FT_INT32, BASE_DEC, NULL, 0,
-        "OperationalBindingID/identifier", HFILL }},
+        "dop.T_identifier", HFILL }},
     { &hf_dop_version,
       { "version", "dop.version",
         FT_INT32, BASE_DEC, NULL, 0,
-        "OperationalBindingID/version", HFILL }},
+        "dop.T_version", HFILL }},
     { &hf_dop_validFrom,
       { "validFrom", "dop.validFrom",
         FT_UINT32, BASE_DEC, VALS(dop_T_validFrom_vals), 0,
-        "Validity/validFrom", HFILL }},
+        "dop.T_validFrom", HFILL }},
     { &hf_dop_now,
       { "now", "dop.now",
         FT_NONE, BASE_NONE, NULL, 0,
-        "Validity/validFrom/now", HFILL }},
+        "dop.NULL", HFILL }},
     { &hf_dop_time,
       { "time", "dop.time",
-        FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
-        "", HFILL }},
+        FT_UINT32, BASE_DEC, VALS(dop_Time_vals), 0,
+        "dop.Time", HFILL }},
     { &hf_dop_validUntil,
       { "validUntil", "dop.validUntil",
         FT_UINT32, BASE_DEC, VALS(dop_T_validUntil_vals), 0,
-        "Validity/validUntil", HFILL }},
+        "dop.T_validUntil", HFILL }},
     { &hf_dop_explicitTermination,
       { "explicitTermination", "dop.explicitTermination",
         FT_NONE, BASE_NONE, NULL, 0,
-        "Validity/validUntil/explicitTermination", HFILL }},
+        "dop.NULL", HFILL }},
     { &hf_dop_utcTime,
       { "utcTime", "dop.utcTime",
         FT_STRING, BASE_NONE, NULL, 0,
-        "Time/utcTime", HFILL }},
+        "dop.UTCTime", HFILL }},
     { &hf_dop_generalizedTime,
       { "generalizedTime", "dop.generalizedTime",
         FT_STRING, BASE_NONE, NULL, 0,
-        "Time/generalizedTime", HFILL }},
+        "dop.GeneralizedTime", HFILL }},
     { &hf_dop_initiator,
       { "initiator", "dop.initiator",
         FT_UINT32, BASE_DEC, VALS(dop_T_initiator_vals), 0,
-        "EstablishOperationalBindingResult/initiator", HFILL }},
+        "dop.T_initiator", HFILL }},
     { &hf_dop_symmetric,
       { "symmetric", "dop.symmetric",
         FT_NONE, BASE_NONE, NULL, 0,
-        "EstablishOperationalBindingResult/initiator/symmetric", HFILL }},
+        "dop.T_symmetric", HFILL }},
     { &hf_dop_roleA_replies,
       { "roleA-replies", "dop.roleA_replies",
         FT_NONE, BASE_NONE, NULL, 0,
-        "EstablishOperationalBindingResult/initiator/roleA-replies", HFILL }},
+        "dop.T_roleA_replies", HFILL }},
     { &hf_dop_roleB_replies,
       { "roleB-replies", "dop.roleB_replies",
         FT_NONE, BASE_NONE, NULL, 0,
-        "EstablishOperationalBindingResult/initiator/roleB-replies", HFILL }},
+        "dop.T_roleB_replies", HFILL }},
     { &hf_dop_performer,
       { "performer", "dop.performer",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.DistinguishedName", HFILL }},
     { &hf_dop_aliasDereferenced,
       { "aliasDereferenced", "dop.aliasDereferenced",
-        FT_BOOLEAN, 8, NULL, 0,
-        "", HFILL }},
+        FT_BOOLEAN, BASE_NONE, NULL, 0,
+        "dop.BOOLEAN", HFILL }},
     { &hf_dop_notification,
       { "notification", "dop.notification",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "dop.SEQUENCE_SIZE_1_MAX_OF_Attribute", HFILL }},
     { &hf_dop_notification_item,
-      { "Item", "dop.notification_item",
+      { "Attribute", "dop.Attribute",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.Attribute", HFILL }},
     { &hf_dop_modifyInitiator,
       { "initiator", "dop.initiator",
         FT_UINT32, BASE_DEC, VALS(dop_ModifyArgumentInitiator_vals), 0,
-        "ModifyOperationalBindingArgumentData/initiator", HFILL }},
+        "dop.ModifyArgumentInitiator", HFILL }},
     { &hf_dop_modifySymmetric,
       { "symmetric", "dop.symmetric",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ModifyOperationalBindingArgumentData/initiator/symmetric", HFILL }},
+        "dop.ModifySymmetric", HFILL }},
     { &hf_dop_modifyRoleAInitiates,
       { "roleA-initiates", "dop.roleA_initiates",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ModifyOperationalBindingArgumentData/initiator/roleA-initiates", HFILL }},
+        "dop.ModifyRoleAInitiates", HFILL }},
     { &hf_dop_modifyRoleBInitiates,
       { "roleB-initiates", "dop.roleB_initiates",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ModifyOperationalBindingArgumentData/initiator/roleB-initiates", HFILL }},
+        "dop.ModifyRoleBInitiates", HFILL }},
     { &hf_dop_newBindingID,
       { "newBindingID", "dop.newBindingID",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "dop.OperationalBindingID", HFILL }},
     { &hf_dop_argumentNewAgreement,
       { "newAgreement", "dop.newAgreement",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ModifyOperationalBindingArgumentData/newAgreement", HFILL }},
+        "dop.ArgumentNewAgreement", HFILL }},
     { &hf_dop_unsignedModifyOperationalBindingArgument,
       { "unsignedModifyOperationalBindingArgument", "dop.unsignedModifyOperationalBindingArgument",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ModifyOperationalBindingArgument/unsignedModifyOperationalBindingArgument", HFILL }},
+        "dop.ModifyOperationalBindingArgumentData", HFILL }},
     { &hf_dop_signedModifyOperationalBindingArgument,
       { "signedModifyOperationalBindingArgument", "dop.signedModifyOperationalBindingArgument",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ModifyOperationalBindingArgument/signedModifyOperationalBindingArgument", HFILL }},
+        "dop.T_signedModifyOperationalBindingArgument", HFILL }},
     { &hf_dop_modifyOperationalBindingArgument,
       { "modifyOperationalBindingArgument", "dop.modifyOperationalBindingArgument",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ModifyOperationalBindingArgument/signedModifyOperationalBindingArgument/modifyOperationalBindingArgument", HFILL }},
+        "dop.ModifyOperationalBindingArgumentData", HFILL }},
     { &hf_dop_null,
       { "null", "dop.null",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "dop.NULL", HFILL }},
     { &hf_dop_protectedModifyResult,
       { "protected", "dop.protected",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ModifyOperationalBindingResult/protected", HFILL }},
+        "dop.ProtectedModifyResult", HFILL }},
     { &hf_dop_modifyOperationalBindingResultData,
       { "modifyOperationalBindingResultData", "dop.modifyOperationalBindingResultData",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ModifyOperationalBindingResult/protected/modifyOperationalBindingResultData", HFILL }},
+        "dop.ModifyOperationalBindingResultData", HFILL }},
     { &hf_dop_resultNewAgreement,
       { "newAgreement", "dop.newAgreement",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ModifyOperationalBindingResultData/newAgreement", HFILL }},
+        "dop.ResultNewAgreement", HFILL }},
     { &hf_dop_terminateInitiator,
       { "initiator", "dop.initiator",
         FT_UINT32, BASE_DEC, VALS(dop_TerminateArgumentInitiator_vals), 0,
-        "TerminateOperationalBindingArgumentData/initiator", HFILL }},
+        "dop.TerminateArgumentInitiator", HFILL }},
     { &hf_dop_terminateSymmetric,
       { "symmetric", "dop.symmetric",
         FT_NONE, BASE_NONE, NULL, 0,
-        "TerminateOperationalBindingArgumentData/initiator/symmetric", HFILL }},
+        "dop.TerminateSymmetric", HFILL }},
     { &hf_dop_terminateRoleAInitiates,
       { "roleA-initiates", "dop.roleA_initiates",
         FT_NONE, BASE_NONE, NULL, 0,
-        "TerminateOperationalBindingArgumentData/initiator/roleA-initiates", HFILL }},
+        "dop.TerminateRoleAInitiates", HFILL }},
     { &hf_dop_terminateRoleBInitiates,
       { "roleB-initiates", "dop.roleB_initiates",
         FT_NONE, BASE_NONE, NULL, 0,
-        "TerminateOperationalBindingArgumentData/initiator/roleB-initiates", HFILL }},
+        "dop.TerminateRoleBInitiates", HFILL }},
     { &hf_dop_terminateAtTime,
       { "terminateAt", "dop.terminateAt",
-        FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
-        "TerminateOperationalBindingArgumentData/terminateAt", HFILL }},
+        FT_UINT32, BASE_DEC, VALS(dop_Time_vals), 0,
+        "dop.Time", HFILL }},
     { &hf_dop_unsignedTerminateOperationalBindingArgument,
       { "unsignedTerminateOperationalBindingArgument", "dop.unsignedTerminateOperationalBindingArgument",
         FT_NONE, BASE_NONE, NULL, 0,
-        "TerminateOperationalBindingArgument/unsignedTerminateOperationalBindingArgument", HFILL }},
+        "dop.TerminateOperationalBindingArgumentData", HFILL }},
     { &hf_dop_signedTerminateOperationalBindingArgument,
       { "signedTerminateOperationalBindingArgument", "dop.signedTerminateOperationalBindingArgument",
         FT_NONE, BASE_NONE, NULL, 0,
-        "TerminateOperationalBindingArgument/signedTerminateOperationalBindingArgument", HFILL }},
+        "dop.T_signedTerminateOperationalBindingArgument", HFILL }},
     { &hf_dop_terminateOperationalBindingArgument,
       { "terminateOperationalBindingArgument", "dop.terminateOperationalBindingArgument",
         FT_NONE, BASE_NONE, NULL, 0,
-        "TerminateOperationalBindingArgument/signedTerminateOperationalBindingArgument/terminateOperationalBindingArgument", HFILL }},
+        "dop.TerminateOperationalBindingArgumentData", HFILL }},
     { &hf_dop_protectedTerminateResult,
       { "protected", "dop.protected",
         FT_NONE, BASE_NONE, NULL, 0,
-        "TerminateOperationalBindingResult/protected", HFILL }},
+        "dop.ProtectedTerminateResult", HFILL }},
     { &hf_dop_terminateOperationalBindingResultData,
       { "terminateOperationalBindingResultData", "dop.terminateOperationalBindingResultData",
         FT_NONE, BASE_NONE, NULL, 0,
-        "TerminateOperationalBindingResult/protected/terminateOperationalBindingResultData", HFILL }},
+        "dop.TerminateOperationalBindingResultData", HFILL }},
     { &hf_dop_terminateAtGeneralizedTime,
       { "terminateAt", "dop.terminateAt",
         FT_STRING, BASE_NONE, NULL, 0,
-        "TerminateOperationalBindingResultData/terminateAt", HFILL }},
+        "dop.GeneralizedTime", HFILL }},
     { &hf_dop_problem,
       { "problem", "dop.problem",
         FT_UINT32, BASE_DEC, VALS(dop_T_problem_vals), 0,
-        "OpBindingErrorParam/problem", HFILL }},
+        "dop.T_problem", HFILL }},
     { &hf_dop_agreementProposal,
       { "agreementProposal", "dop.agreementProposal",
         FT_NONE, BASE_NONE, NULL, 0,
-        "OpBindingErrorParam/agreementProposal", HFILL }},
+        "dop.T_agreementProposal", HFILL }},
     { &hf_dop_retryAt,
       { "retryAt", "dop.retryAt",
-        FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
-        "OpBindingErrorParam/retryAt", HFILL }},
+        FT_UINT32, BASE_DEC, VALS(dop_Time_vals), 0,
+        "dop.Time", HFILL }},
     { &hf_dop_rdn,
       { "rdn", "dop.rdn",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.RelativeDistinguishedName", HFILL }},
     { &hf_dop_immediateSuperior,
       { "immediateSuperior", "dop.immediateSuperior",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "x509if.DistinguishedName", HFILL }},
     { &hf_dop_contextPrefixInfo,
       { "contextPrefixInfo", "dop.contextPrefixInfo",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "dop.DITcontext", HFILL }},
     { &hf_dop_entryInfo,
       { "entryInfo", "dop.entryInfo",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "dop.SET_OF_Attribute", HFILL }},
     { &hf_dop_entryInfo_item,
-      { "Item", "dop.entryInfo_item",
+      { "Attribute", "dop.Attribute",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.Attribute", HFILL }},
     { &hf_dop_immediateSuperiorInfo,
       { "immediateSuperiorInfo", "dop.immediateSuperiorInfo",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "dop.SET_OF_Attribute", HFILL }},
     { &hf_dop_immediateSuperiorInfo_item,
-      { "Item", "dop.immediateSuperiorInfo_item",
+      { "Attribute", "dop.Attribute",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.Attribute", HFILL }},
     { &hf_dop_DITcontext_item,
-      { "Item", "dop.DITcontext_item",
+      { "Vertex", "dop.Vertex",
         FT_NONE, BASE_NONE, NULL, 0,
-        "DITcontext/_item", HFILL }},
+        "dop.Vertex", HFILL }},
     { &hf_dop_admPointInfo,
       { "admPointInfo", "dop.admPointInfo",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "Vertex/admPointInfo", HFILL }},
+        "dop.SET_OF_Attribute", HFILL }},
     { &hf_dop_admPointInfo_item,
-      { "Item", "dop.admPointInfo_item",
+      { "Attribute", "dop.Attribute",
         FT_NONE, BASE_NONE, NULL, 0,
-        "Vertex/admPointInfo/_item", HFILL }},
+        "x509if.Attribute", HFILL }},
     { &hf_dop_subentries,
       { "subentries", "dop.subentries",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "dop.SET_OF_SubentryInfo", HFILL }},
     { &hf_dop_subentries_item,
-      { "Item", "dop.subentries_item",
+      { "SubentryInfo", "dop.SubentryInfo",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "dop.SubentryInfo", HFILL }},
     { &hf_dop_accessPoints,
       { "accessPoints", "dop.accessPoints",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "dsp.MasterAndShadowAccessPoints", HFILL }},
     { &hf_dop_info,
       { "info", "dop.info",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "SubentryInfo/info", HFILL }},
+        "dop.SET_OF_Attribute", HFILL }},
     { &hf_dop_info_item,
-      { "Item", "dop.info_item",
+      { "Attribute", "dop.Attribute",
         FT_NONE, BASE_NONE, NULL, 0,
-        "SubentryInfo/info/_item", HFILL }},
+        "x509if.Attribute", HFILL }},
     { &hf_dop_alias,
       { "alias", "dop.alias",
-        FT_BOOLEAN, 8, NULL, 0,
-        "SubordinateToSuperior/alias", HFILL }},
+        FT_BOOLEAN, BASE_NONE, NULL, 0,
+        "dop.BOOLEAN", HFILL }},
     { &hf_dop_identificationTag,
       { "identificationTag", "dop.identificationTag",
         FT_UINT32, BASE_DEC, VALS(x509sat_DirectoryString_vals), 0,
-        "ACIItem/identificationTag", HFILL }},
+        "x509sat.DirectoryString", HFILL }},
     { &hf_dop_precedence,
       { "precedence", "dop.precedence",
         FT_INT32, BASE_DEC, NULL, 0,
-        "", HFILL }},
+        "dop.Precedence", HFILL }},
     { &hf_dop_authenticationLevel,
       { "authenticationLevel", "dop.authenticationLevel",
         FT_UINT32, BASE_DEC, VALS(dop_AuthenticationLevel_vals), 0,
-        "ACIItem/authenticationLevel", HFILL }},
+        "dop.AuthenticationLevel", HFILL }},
     { &hf_dop_itemOrUserFirst,
       { "itemOrUserFirst", "dop.itemOrUserFirst",
         FT_UINT32, BASE_DEC, VALS(dop_T_itemOrUserFirst_vals), 0,
-        "ACIItem/itemOrUserFirst", HFILL }},
+        "dop.T_itemOrUserFirst", HFILL }},
     { &hf_dop_itemFirst,
       { "itemFirst", "dop.itemFirst",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ACIItem/itemOrUserFirst/itemFirst", HFILL }},
+        "dop.T_itemFirst", HFILL }},
     { &hf_dop_protectedItems,
       { "protectedItems", "dop.protectedItems",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "dop.ProtectedItems", HFILL }},
     { &hf_dop_itemPermissions,
       { "itemPermissions", "dop.itemPermissions",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ACIItem/itemOrUserFirst/itemFirst/itemPermissions", HFILL }},
+        "dop.SET_OF_ItemPermission", HFILL }},
     { &hf_dop_itemPermissions_item,
-      { "Item", "dop.itemPermissions_item",
+      { "ItemPermission", "dop.ItemPermission",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ACIItem/itemOrUserFirst/itemFirst/itemPermissions/_item", HFILL }},
+        "dop.ItemPermission", HFILL }},
     { &hf_dop_userFirst,
       { "userFirst", "dop.userFirst",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ACIItem/itemOrUserFirst/userFirst", HFILL }},
+        "dop.T_userFirst", HFILL }},
     { &hf_dop_userClasses,
       { "userClasses", "dop.userClasses",
         FT_NONE, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "dop.UserClasses", HFILL }},
     { &hf_dop_userPermissions,
       { "userPermissions", "dop.userPermissions",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ACIItem/itemOrUserFirst/userFirst/userPermissions", HFILL }},
+        "dop.SET_OF_UserPermission", HFILL }},
     { &hf_dop_userPermissions_item,
-      { "Item", "dop.userPermissions_item",
+      { "UserPermission", "dop.UserPermission",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ACIItem/itemOrUserFirst/userFirst/userPermissions/_item", HFILL }},
+        "dop.UserPermission", HFILL }},
     { &hf_dop_entry,
       { "entry", "dop.entry",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ProtectedItems/entry", HFILL }},
+        "dop.NULL", HFILL }},
     { &hf_dop_allUserAttributeTypes,
       { "allUserAttributeTypes", "dop.allUserAttributeTypes",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ProtectedItems/allUserAttributeTypes", HFILL }},
+        "dop.NULL", HFILL }},
     { &hf_dop_attributeType,
       { "attributeType", "dop.attributeType",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ProtectedItems/attributeType", HFILL }},
+        "dop.SET_OF_AttributeType", HFILL }},
     { &hf_dop_attributeType_item,
-      { "Item", "dop.attributeType_item",
+      { "AttributeType", "dop.AttributeType",
         FT_OID, BASE_NONE, NULL, 0,
-        "ProtectedItems/attributeType/_item", HFILL }},
+        "x509if.AttributeType", HFILL }},
     { &hf_dop_allAttributeValues,
       { "allAttributeValues", "dop.allAttributeValues",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ProtectedItems/allAttributeValues", HFILL }},
+        "dop.SET_OF_AttributeType", HFILL }},
     { &hf_dop_allAttributeValues_item,
-      { "Item", "dop.allAttributeValues_item",
+      { "AttributeType", "dop.AttributeType",
         FT_OID, BASE_NONE, NULL, 0,
-        "ProtectedItems/allAttributeValues/_item", HFILL }},
+        "x509if.AttributeType", HFILL }},
     { &hf_dop_allUserAttributeTypesAndValues,
       { "allUserAttributeTypesAndValues", "dop.allUserAttributeTypesAndValues",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ProtectedItems/allUserAttributeTypesAndValues", HFILL }},
+        "dop.NULL", HFILL }},
     { &hf_dop_attributeValue,
       { "attributeValue", "dop.attributeValue",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ProtectedItems/attributeValue", HFILL }},
+        "dop.SET_OF_AttributeTypeAndValue", HFILL }},
     { &hf_dop_attributeValue_item,
-      { "Item", "dop.attributeValue_item",
+      { "AttributeTypeAndValue", "dop.AttributeTypeAndValue",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ProtectedItems/attributeValue/_item", HFILL }},
+        "crmf.AttributeTypeAndValue", HFILL }},
     { &hf_dop_selfValue,
       { "selfValue", "dop.selfValue",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ProtectedItems/selfValue", HFILL }},
+        "dop.SET_OF_AttributeType", HFILL }},
     { &hf_dop_selfValue_item,
-      { "Item", "dop.selfValue_item",
+      { "AttributeType", "dop.AttributeType",
         FT_OID, BASE_NONE, NULL, 0,
-        "ProtectedItems/selfValue/_item", HFILL }},
+        "x509if.AttributeType", HFILL }},
     { &hf_dop_rangeOfValues,
       { "rangeOfValues", "dop.rangeOfValues",
         FT_UINT32, BASE_DEC, VALS(dap_Filter_vals), 0,
-        "ProtectedItems/rangeOfValues", HFILL }},
+        "dap.Filter", HFILL }},
     { &hf_dop_maxValueCount,
       { "maxValueCount", "dop.maxValueCount",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ProtectedItems/maxValueCount", HFILL }},
+        "dop.SET_OF_MaxValueCount", HFILL }},
     { &hf_dop_maxValueCount_item,
-      { "Item", "dop.maxValueCount_item",
+      { "MaxValueCount", "dop.MaxValueCount",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ProtectedItems/maxValueCount/_item", HFILL }},
+        "dop.MaxValueCount", HFILL }},
     { &hf_dop_maxImmSub,
       { "maxImmSub", "dop.maxImmSub",
         FT_INT32, BASE_DEC, NULL, 0,
-        "ProtectedItems/maxImmSub", HFILL }},
+        "dop.INTEGER", HFILL }},
     { &hf_dop_restrictedBy,
       { "restrictedBy", "dop.restrictedBy",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ProtectedItems/restrictedBy", HFILL }},
+        "dop.SET_OF_RestrictedValue", HFILL }},
     { &hf_dop_restrictedBy_item,
-      { "Item", "dop.restrictedBy_item",
+      { "RestrictedValue", "dop.RestrictedValue",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ProtectedItems/restrictedBy/_item", HFILL }},
+        "dop.RestrictedValue", HFILL }},
     { &hf_dop_contexts,
       { "contexts", "dop.contexts",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "ProtectedItems/contexts", HFILL }},
+        "dop.SET_OF_ContextAssertion", HFILL }},
     { &hf_dop_contexts_item,
-      { "Item", "dop.contexts_item",
+      { "ContextAssertion", "dop.ContextAssertion",
         FT_NONE, BASE_NONE, NULL, 0,
-        "ProtectedItems/contexts/_item", HFILL }},
+        "x509if.ContextAssertion", HFILL }},
     { &hf_dop_classes,
       { "classes", "dop.classes",
         FT_UINT32, BASE_DEC, VALS(x509if_Refinement_vals), 0,
-        "ProtectedItems/classes", HFILL }},
+        "x509if.Refinement", HFILL }},
     { &hf_dop_type,
       { "type", "dop.type",
         FT_OID, BASE_NONE, NULL, 0,
-        "", HFILL }},
+        "x509if.AttributeType", HFILL }},
     { &hf_dop_maxCount,
       { "maxCount", "dop.maxCount",
         FT_INT32, BASE_DEC, NULL, 0,
-        "MaxValueCount/maxCount", HFILL }},
+        "dop.INTEGER", HFILL }},
     { &hf_dop_valuesIn,
       { "valuesIn", "dop.valuesIn",
         FT_OID, BASE_NONE, NULL, 0,
-        "RestrictedValue/valuesIn", HFILL }},
+        "x509if.AttributeType", HFILL }},
     { &hf_dop_allUsers,
       { "allUsers", "dop.allUsers",
         FT_NONE, BASE_NONE, NULL, 0,
-        "UserClasses/allUsers", HFILL }},
+        "dop.NULL", HFILL }},
     { &hf_dop_thisEntry,
       { "thisEntry", "dop.thisEntry",
         FT_NONE, BASE_NONE, NULL, 0,
-        "UserClasses/thisEntry", HFILL }},
+        "dop.NULL", HFILL }},
     { &hf_dop_name,
       { "name", "dop.name",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "UserClasses/name", HFILL }},
+        "dop.SET_OF_NameAndOptionalUID", HFILL }},
     { &hf_dop_name_item,
-      { "Item", "dop.name_item",
+      { "NameAndOptionalUID", "dop.NameAndOptionalUID",
         FT_NONE, BASE_NONE, NULL, 0,
-        "UserClasses/name/_item", HFILL }},
+        "x509sat.NameAndOptionalUID", HFILL }},
     { &hf_dop_userGroup,
       { "userGroup", "dop.userGroup",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "UserClasses/userGroup", HFILL }},
+        "dop.SET_OF_NameAndOptionalUID", HFILL }},
     { &hf_dop_userGroup_item,
-      { "Item", "dop.userGroup_item",
+      { "NameAndOptionalUID", "dop.NameAndOptionalUID",
         FT_NONE, BASE_NONE, NULL, 0,
-        "UserClasses/userGroup/_item", HFILL }},
+        "x509sat.NameAndOptionalUID", HFILL }},
     { &hf_dop_subtree,
       { "subtree", "dop.subtree",
         FT_UINT32, BASE_DEC, NULL, 0,
-        "UserClasses/subtree", HFILL }},
+        "dop.SET_OF_SubtreeSpecification", HFILL }},
     { &hf_dop_subtree_item,
-      { "Item", "dop.subtree_item",
+      { "SubtreeSpecification", "dop.SubtreeSpecification",
         FT_NONE, BASE_NONE, NULL, 0,
-        "UserClasses/subtree/_item", HFILL }},
+        "x509if.SubtreeSpecification", HFILL }},
     { &hf_dop_grantsAndDenials,
       { "grantsAndDenials", "dop.grantsAndDenials",
-        FT_BYTES, BASE_HEX, NULL, 0,
-        "", HFILL }},
+        FT_BYTES, BASE_NONE, NULL, 0,
+        "dop.GrantsAndDenials", HFILL }},
     { &hf_dop_basicLevels,
       { "basicLevels", "dop.basicLevels",
         FT_NONE, BASE_NONE, NULL, 0,
-        "AuthenticationLevel/basicLevels", HFILL }},
+        "dop.T_basicLevels", HFILL }},
     { &hf_dop_level,
       { "level", "dop.level",
         FT_UINT32, BASE_DEC, VALS(dop_T_level_vals), 0,
-        "AuthenticationLevel/basicLevels/level", HFILL }},
+        "dop.T_level", HFILL }},
     { &hf_dop_localQualifier,
       { "localQualifier", "dop.localQualifier",
         FT_INT32, BASE_DEC, NULL, 0,
-        "AuthenticationLevel/basicLevels/localQualifier", HFILL }},
+        "dop.INTEGER", HFILL }},
     { &hf_dop_signed,
       { "signed", "dop.signed",
-        FT_BOOLEAN, 8, NULL, 0,
-        "AuthenticationLevel/basicLevels/signed", HFILL }},
+        FT_BOOLEAN, BASE_NONE, NULL, 0,
+        "dop.BOOLEAN", HFILL }},
     { &hf_dop_other,
       { "other", "dop.other",
         FT_NONE, BASE_NONE, NULL, 0,
-        "AuthenticationLevel/other", HFILL }},
+        "dop.EXTERNAL", HFILL }},
     { &hf_dop_DSEType_root,
       { "root", "dop.root",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_glue,
       { "glue", "dop.glue",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_cp,
       { "cp", "dop.cp",
         FT_BOOLEAN, 8, NULL, 0x20,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_entry,
       { "entry", "dop.entry",
         FT_BOOLEAN, 8, NULL, 0x10,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_alias,
       { "alias", "dop.alias",
         FT_BOOLEAN, 8, NULL, 0x08,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_subr,
       { "subr", "dop.subr",
         FT_BOOLEAN, 8, NULL, 0x04,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_nssr,
       { "nssr", "dop.nssr",
         FT_BOOLEAN, 8, NULL, 0x02,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_supr,
       { "supr", "dop.supr",
         FT_BOOLEAN, 8, NULL, 0x01,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_xr,
       { "xr", "dop.xr",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_admPoint,
       { "admPoint", "dop.admPoint",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_subentry,
       { "subentry", "dop.subentry",
         FT_BOOLEAN, 8, NULL, 0x20,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_shadow,
       { "shadow", "dop.shadow",
         FT_BOOLEAN, 8, NULL, 0x10,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_immSupr,
       { "immSupr", "dop.immSupr",
         FT_BOOLEAN, 8, NULL, 0x04,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_rhob,
       { "rhob", "dop.rhob",
         FT_BOOLEAN, 8, NULL, 0x02,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_sa,
       { "sa", "dop.sa",
         FT_BOOLEAN, 8, NULL, 0x01,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_dsSubentry,
       { "dsSubentry", "dop.dsSubentry",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_familyMember,
       { "familyMember", "dop.familyMember",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
+    { &hf_dop_DSEType_ditBridge,
+      { "ditBridge", "dop.ditBridge",
+        FT_BOOLEAN, 8, NULL, 0x20,
+        NULL, HFILL }},
+    { &hf_dop_DSEType_writeableCopy,
+      { "writeableCopy", "dop.writeableCopy",
+        FT_BOOLEAN, 8, NULL, 0x10,
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantAdd,
       { "grantAdd", "dop.grantAdd",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyAdd,
       { "denyAdd", "dop.denyAdd",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantDiscloseOnError,
       { "grantDiscloseOnError", "dop.grantDiscloseOnError",
         FT_BOOLEAN, 8, NULL, 0x20,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyDiscloseOnError,
       { "denyDiscloseOnError", "dop.denyDiscloseOnError",
         FT_BOOLEAN, 8, NULL, 0x10,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantRead,
       { "grantRead", "dop.grantRead",
         FT_BOOLEAN, 8, NULL, 0x08,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyRead,
       { "denyRead", "dop.denyRead",
         FT_BOOLEAN, 8, NULL, 0x04,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantRemove,
       { "grantRemove", "dop.grantRemove",
         FT_BOOLEAN, 8, NULL, 0x02,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyRemove,
       { "denyRemove", "dop.denyRemove",
         FT_BOOLEAN, 8, NULL, 0x01,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantBrowse,
       { "grantBrowse", "dop.grantBrowse",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyBrowse,
       { "denyBrowse", "dop.denyBrowse",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantExport,
       { "grantExport", "dop.grantExport",
         FT_BOOLEAN, 8, NULL, 0x20,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyExport,
       { "denyExport", "dop.denyExport",
         FT_BOOLEAN, 8, NULL, 0x10,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantImport,
       { "grantImport", "dop.grantImport",
         FT_BOOLEAN, 8, NULL, 0x08,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyImport,
       { "denyImport", "dop.denyImport",
         FT_BOOLEAN, 8, NULL, 0x04,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantModify,
       { "grantModify", "dop.grantModify",
         FT_BOOLEAN, 8, NULL, 0x02,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyModify,
       { "denyModify", "dop.denyModify",
         FT_BOOLEAN, 8, NULL, 0x01,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantRename,
       { "grantRename", "dop.grantRename",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyRename,
       { "denyRename", "dop.denyRename",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantReturnDN,
       { "grantReturnDN", "dop.grantReturnDN",
         FT_BOOLEAN, 8, NULL, 0x20,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyReturnDN,
       { "denyReturnDN", "dop.denyReturnDN",
         FT_BOOLEAN, 8, NULL, 0x10,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantCompare,
       { "grantCompare", "dop.grantCompare",
         FT_BOOLEAN, 8, NULL, 0x08,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyCompare,
       { "denyCompare", "dop.denyCompare",
         FT_BOOLEAN, 8, NULL, 0x04,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantFilterMatch,
       { "grantFilterMatch", "dop.grantFilterMatch",
         FT_BOOLEAN, 8, NULL, 0x02,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyFilterMatch,
       { "denyFilterMatch", "dop.denyFilterMatch",
         FT_BOOLEAN, 8, NULL, 0x01,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantInvoke,
       { "grantInvoke", "dop.grantInvoke",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyInvoke,
       { "denyInvoke", "dop.denyInvoke",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
 
 /*--- End of included file: packet-dop-hfarr.c ---*/
-#line 219 "packet-dop-template.c"
+#line 243 "packet-dop-template.c"
   };
 
   /* List of subtrees */
   static gint *ett[] = {
     &ett_dop,
+    &ett_dop_unknown,
 
 /*--- Included file: packet-dop-ettarr.c ---*/
 #line 1 "packet-dop-ettarr.c"
@@ -3363,7 +3045,7 @@ void proto_register_dop(void) {
     &ett_dop_GrantsAndDenials,
 
 /*--- End of included file: packet-dop-ettarr.c ---*/
-#line 225 "packet-dop-template.c"
+#line 250 "packet-dop-template.c"
   };
 
   module_t *dop_module;
@@ -3373,17 +3055,15 @@ void proto_register_dop(void) {
 
   register_dissector("dop", dissect_dop, proto_dop);
 
+  dop_dissector_table = register_dissector_table("dop.oid", "DOP OID Dissectors", FT_STRING, BASE_NONE);
+
   /* Register fields and subtrees */
   proto_register_field_array(proto_dop, hf, array_length(hf));
   proto_register_subtree_array(ett, array_length(ett));
 
   /* Register our configuration options for DOP, particularly our port */
 
-#ifdef PREFERENCE_GROUPING
   dop_module = prefs_register_protocol_subtree("OSI/X.500", proto_dop, prefs_register_dop);
-#else
-  dop_module = prefs_register_protocol(proto_dop, prefs_register_dop);
-#endif 
 
   prefs_register_uint_preference(dop_module, "tcp.port", "DOP TCP Port",
                                 "Set the port for DOP operations (if other"
@@ -3396,7 +3076,7 @@ void proto_register_dop(void) {
 
 /*--- proto_reg_handoff_dop --- */
 void proto_reg_handoff_dop(void) {
-  dissector_handle_t handle = NULL;
+  dissector_handle_t dop_handle;
 
 
 /*--- Included file: packet-dop-dis-tab.c ---*/
@@ -3405,56 +3085,55 @@ void proto_reg_handoff_dop(void) {
   register_ber_oid_dissector("2.5.12.5", dissect_SupplierInformation_PDU, proto_dop, "id-doa-supplierKnowledge");
   register_ber_oid_dissector("2.5.12.6", dissect_ConsumerInformation_PDU, proto_dop, "id-doa-consumerKnowledge");
   register_ber_oid_dissector("2.5.12.7", dissect_SupplierAndConsumers_PDU, proto_dop, "id-doa-secondaryShadows");
-  register_ber_oid_dissector("dop.agreement.2.5.19.2", dissect_HierarchicalAgreement_PDU, proto_dop, "hierarchical-agreement");
-  register_ber_oid_dissector("dop.establish.rolea.2.5.19.2", dissect_SuperiorToSubordinate_PDU, proto_dop, "hierarchical-establish-rolea");
-  register_ber_oid_dissector("dop.modify.rolea.2.5.19.2", dissect_SuperiorToSubordinateModification_PDU, proto_dop, "hierarchical-modify-rolea");
-  register_ber_oid_dissector("dop.establish.roleb.2.5.19.2", dissect_SubordinateToSuperior_PDU, proto_dop, "hierarchical-establish-roleb");
-  register_ber_oid_dissector("dop.modify.roleb.2.5.19.2", dissect_SubordinateToSuperior_PDU, proto_dop, "hierarchical-modify-roleb");
-  register_ber_oid_dissector("dop.agreement.2.5.19.3", dissect_NonSpecificHierarchicalAgreement_PDU, proto_dop, "non-specific-hierarchical-agreement");
-  register_ber_oid_dissector("dop.establish.rolea.2.5.19.3", dissect_NHOBSuperiorToSubordinate_PDU, proto_dop, "non-specific-hierarchical-establish-rolea");
-  register_ber_oid_dissector("dop.modify.rolea.2.5.19.3", dissect_NHOBSuperiorToSubordinate_PDU, proto_dop, "non-specific-hierarchical-modify-rolea");
-  register_ber_oid_dissector("dop.establish.roleb.2.5.19.3", dissect_NHOBSubordinateToSuperior_PDU, proto_dop, "non-specific-hierarchical-establish-roleb");
-  register_ber_oid_dissector("dop.modify.roleb.2.5.19.3", dissect_NHOBSubordinateToSuperior_PDU, proto_dop, "non-specific-hierarchical-modify-roleb");
+  dissector_add_string("dop.oid", "agreement.2.5.19.2", create_dissector_handle(dissect_HierarchicalAgreement_PDU, proto_dop));
+  dissector_add_string("dop.oid", "establish.rolea.2.5.19.2", create_dissector_handle(dissect_SuperiorToSubordinate_PDU, proto_dop));
+  dissector_add_string("dop.oid", "modify.rolea.2.5.19.2", create_dissector_handle(dissect_SuperiorToSubordinateModification_PDU, proto_dop));
+  dissector_add_string("dop.oid", "establish.roleb.2.5.19.2", create_dissector_handle(dissect_SubordinateToSuperior_PDU, proto_dop));
+  dissector_add_string("dop.oid", "modify.roleb.2.5.19.2", create_dissector_handle(dissect_SubordinateToSuperior_PDU, proto_dop));
+  dissector_add_string("dop.oid", "agreement.2.5.19.3", create_dissector_handle(dissect_NonSpecificHierarchicalAgreement_PDU, proto_dop));
+  dissector_add_string("dop.oid", "establish.rolea.2.5.19.3", create_dissector_handle(dissect_NHOBSuperiorToSubordinate_PDU, proto_dop));
+  dissector_add_string("dop.oid", "modify.rolea.2.5.19.3", create_dissector_handle(dissect_NHOBSuperiorToSubordinate_PDU, proto_dop));
+  dissector_add_string("dop.oid", "establish.roleb.2.5.19.3", create_dissector_handle(dissect_NHOBSubordinateToSuperior_PDU, proto_dop));
+  dissector_add_string("dop.oid", "modify.roleb.2.5.19.3", create_dissector_handle(dissect_NHOBSubordinateToSuperior_PDU, proto_dop));
   register_ber_oid_dissector("2.5.24.4", dissect_ACIItem_PDU, proto_dop, "id-aca-prescriptiveACI");
   register_ber_oid_dissector("2.5.24.5", dissect_ACIItem_PDU, proto_dop, "id-aca-entryACI");
   register_ber_oid_dissector("2.5.24.6", dissect_ACIItem_PDU, proto_dop, "id-aca-subentryACI");
 
 
 /*--- End of included file: packet-dop-dis-tab.c ---*/
-#line 260 "packet-dop-template.c"
+#line 283 "packet-dop-template.c"
   /* APPLICATION CONTEXT */
 
-  register_ber_oid_name("2.5.3.3", "id-ac-directory-operational-binding-management");
+  oid_add_from_string("id-ac-directory-operational-binding-management","2.5.3.3");
 
   /* ABSTRACT SYNTAXES */
     
   /* Register DOP with ROS (with no use of RTSE) */
-  if((handle = find_dissector("dop"))) {
-    register_ros_oid_dissector_handle("2.5.9.4", handle, 0, "id-as-directory-operational-binding-management", FALSE); 
-  }
+  dop_handle = find_dissector("dop");
+  register_ros_oid_dissector_handle("2.5.9.4", dop_handle, 0, "id-as-directory-operational-binding-management", FALSE); 
 
   /* BINDING TYPES */
 
-  register_ber_oid_name("2.5.19.1", "shadow-agreement");
-  register_ber_oid_name("2.5.19.2", "hierarchical-agreement");
-  register_ber_oid_name("2.5.19.3", "non-specific-hierarchical-agreement");
+  oid_add_from_string("shadow-agreement","2.5.19.1");
+  oid_add_from_string("hierarchical-agreement","2.5.19.2");
+  oid_add_from_string("non-specific-hierarchical-agreement","2.5.19.3");
 
   /* ACCESS CONTROL SCHEMES */
-  register_ber_oid_name("2.5.28.1", "basic-ACS");
-  register_ber_oid_name("2.5.28.2", "simplified-ACS");
-  register_ber_oid_name("2.5.28.3", "ruleBased-ACS");
-  register_ber_oid_name("2.5.28.4", "ruleAndBasic-ACS");
-  register_ber_oid_name("2.5.28.5", "ruleAndSimple-ACS");
+  oid_add_from_string("basic-ACS","2.5.28.1");
+  oid_add_from_string("simplified-ACS","2.5.28.2");
+  oid_add_from_string("ruleBased-ACS","2.5.28.3");
+  oid_add_from_string("ruleAndBasic-ACS","2.5.28.4");
+  oid_add_from_string("ruleAndSimple-ACS","2.5.28.5");
 
   /* ADMINISTRATIVE ROLES */
-  register_ber_oid_name("2.5.23.1", "id-ar-autonomousArea");
-  register_ber_oid_name("2.5.23.2", "id-ar-accessControlSpecificArea");
-  register_ber_oid_name("2.5.23.3", "id-ar-accessControlInnerArea");
-  register_ber_oid_name("2.5.23.4", "id-ar-subschemaAdminSpecificArea");
-  register_ber_oid_name("2.5.23.5", "id-ar-collectiveAttributeSpecificArea");
-  register_ber_oid_name("2.5.23.6", "id-ar-collectiveAttributeInnerArea");
-  register_ber_oid_name("2.5.23.7", "id-ar-contextDefaultSpecificArea");
-  register_ber_oid_name("2.5.23.8", "id-ar-serviceSpecificArea");
+  oid_add_from_string("id-ar-autonomousArea","2.5.23.1");
+  oid_add_from_string("id-ar-accessControlSpecificArea","2.5.23.2");
+  oid_add_from_string("id-ar-accessControlInnerArea","2.5.23.3");
+  oid_add_from_string("id-ar-subschemaAdminSpecificArea","2.5.23.4");
+  oid_add_from_string("id-ar-collectiveAttributeSpecificArea","2.5.23.5");
+  oid_add_from_string("id-ar-collectiveAttributeInnerArea","2.5.23.6");
+  oid_add_from_string("id-ar-contextDefaultSpecificArea","2.5.23.7");
+  oid_add_from_string("id-ar-serviceSpecificArea","2.5.23.8");
 
   /* remember the tpkt handler for change in preferences */
   tpkt_handle = find_dissector("tpkt");
@@ -3462,16 +3141,17 @@ void proto_reg_handoff_dop(void) {
 }
 
 void prefs_register_dop(void) {
+  static guint tcp_port = 0;
 
   /* de-register the old port */
   /* port 102 is registered by TPKT - don't undo this! */
-  if((tcp_port != 102) && tpkt_handle)
+  if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle)
     dissector_delete("tcp.port", tcp_port, tpkt_handle);
 
   /* Set our port number for future use */
   tcp_port = global_dop_tcp_port;
 
   if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle)
-    dissector_add("tcp.port", global_dop_tcp_port, tpkt_handle);
+    dissector_add("tcp.port", tcp_port, tpkt_handle);
 
 }