Get rid of dissect_ber_boolean_value() and change the signature of
[obnox/wireshark/wip.git] / epan / dissectors / packet-dop.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
3 /* packet-dop.c                                                               */
4 /* ../../tools/asn2wrs.py -b -e -p dop -c dop.cnf -s packet-dop-template dop.asn */
5
6 /* Input file: packet-dop-template.c */
7
8 #line 1 "packet-dop-template.c"
9 /* packet-dop.c
10  * Routines for X.501 (DSA Operational Attributes)  packet dissection
11  * Graeme Lunt 2005
12  *
13  * $Id$
14  *
15  * Wireshark - Network traffic analyzer
16  * By Gerald Combs <gerald@wireshark.org>
17  * Copyright 1998 Gerald Combs
18  *
19  * This program is free software; you can redistribute it and/or
20  * modify it under the terms of the GNU General Public License
21  * as published by the Free Software Foundation; either version 2
22  * of the License, or (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program; if not, write to the Free Software
31  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
32  */
33
34 #ifdef HAVE_CONFIG_H
35 # include "config.h"
36 #endif
37
38 #include <glib.h>
39 #include <epan/packet.h>
40 #include <epan/prefs.h>
41 #include <epan/conversation.h>
42 #include <epan/oids.h>
43 #include <epan/asn1.h>
44 #include <epan/expert.h>
45
46 #include <stdio.h>
47 #include <string.h>
48
49 #include "packet-ber.h"
50 #include "packet-acse.h"
51 #include "packet-ros.h"
52
53 #include "packet-x509sat.h"
54 #include "packet-x509af.h"
55 #include "packet-x509if.h"
56 #include "packet-dap.h"
57 #include "packet-dsp.h"
58 #include "packet-crmf.h"
59
60
61 #include "packet-dop.h"
62
63 #define PNAME  "X.501 Directory Operational Binding Management Protocol"
64 #define PSNAME "DOP"
65 #define PFNAME "dop"
66
67 static guint global_dop_tcp_port = 102;
68 static guint tcp_port = 0;
69 static dissector_handle_t tpkt_handle = NULL;
70 void prefs_register_dop(void); /* forwad declaration for use in preferences registration */
71
72 /* Initialize the protocol and registered fields */
73 int proto_dop = -1;
74
75 static struct SESSION_DATA_STRUCTURE* session = NULL;
76 static const char *binding_type = NULL; /* binding_type */
77
78 static int call_dop_oid_callback(char *base_string, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, char *col_info);
79
80
81 /*--- Included file: packet-dop-hf.c ---*/
82 #line 1 "packet-dop-hf.c"
83 static int hf_dop_DSEType_PDU = -1;               /* DSEType */
84 static int hf_dop_SupplierInformation_PDU = -1;   /* SupplierInformation */
85 static int hf_dop_ConsumerInformation_PDU = -1;   /* ConsumerInformation */
86 static int hf_dop_SupplierAndConsumers_PDU = -1;  /* SupplierAndConsumers */
87 static int hf_dop_HierarchicalAgreement_PDU = -1;  /* HierarchicalAgreement */
88 static int hf_dop_SuperiorToSubordinate_PDU = -1;  /* SuperiorToSubordinate */
89 static int hf_dop_SubordinateToSuperior_PDU = -1;  /* SubordinateToSuperior */
90 static int hf_dop_SuperiorToSubordinateModification_PDU = -1;  /* SuperiorToSubordinateModification */
91 static int hf_dop_NonSpecificHierarchicalAgreement_PDU = -1;  /* NonSpecificHierarchicalAgreement */
92 static int hf_dop_NHOBSuperiorToSubordinate_PDU = -1;  /* NHOBSuperiorToSubordinate */
93 static int hf_dop_NHOBSubordinateToSuperior_PDU = -1;  /* NHOBSubordinateToSuperior */
94 static int hf_dop_ACIItem_PDU = -1;               /* ACIItem */
95 static int hf_dop_ae_title = -1;                  /* Name */
96 static int hf_dop_address = -1;                   /* PresentationAddress */
97 static int hf_dop_protocolInformation = -1;       /* SET_OF_ProtocolInformation */
98 static int hf_dop_protocolInformation_item = -1;  /* ProtocolInformation */
99 static int hf_dop_agreementID = -1;               /* OperationalBindingID */
100 static int hf_dop_supplier_is_master = -1;        /* BOOLEAN */
101 static int hf_dop_non_supplying_master = -1;      /* AccessPoint */
102 static int hf_dop_consumers = -1;                 /* SET_OF_AccessPoint */
103 static int hf_dop_consumers_item = -1;            /* AccessPoint */
104 static int hf_dop_bindingType = -1;               /* BindingType */
105 static int hf_dop_bindingID = -1;                 /* OperationalBindingID */
106 static int hf_dop_accessPoint = -1;               /* AccessPoint */
107 static int hf_dop_establishInitiator = -1;        /* EstablishArgumentInitiator */
108 static int hf_dop_establishSymmetric = -1;        /* EstablishSymmetric */
109 static int hf_dop_establishRoleAInitiates = -1;   /* EstablishRoleAInitiates */
110 static int hf_dop_establishRoleBInitiates = -1;   /* EstablishRoleBInitiates */
111 static int hf_dop_agreement = -1;                 /* T_agreement */
112 static int hf_dop_valid = -1;                     /* Validity */
113 static int hf_dop_securityParameters = -1;        /* SecurityParameters */
114 static int hf_dop_unsignedEstablishOperationalBindingArgument = -1;  /* EstablishOperationalBindingArgumentData */
115 static int hf_dop_signedEstablishOperationalBindingArgument = -1;  /* T_signedEstablishOperationalBindingArgument */
116 static int hf_dop_establishOperationalBindingArgument = -1;  /* EstablishOperationalBindingArgumentData */
117 static int hf_dop_algorithmIdentifier = -1;       /* AlgorithmIdentifier */
118 static int hf_dop_encrypted = -1;                 /* BIT_STRING */
119 static int hf_dop_identifier = -1;                /* T_identifier */
120 static int hf_dop_version = -1;                   /* T_version */
121 static int hf_dop_validFrom = -1;                 /* T_validFrom */
122 static int hf_dop_now = -1;                       /* NULL */
123 static int hf_dop_time = -1;                      /* Time */
124 static int hf_dop_validUntil = -1;                /* T_validUntil */
125 static int hf_dop_explicitTermination = -1;       /* NULL */
126 static int hf_dop_utcTime = -1;                   /* UTCTime */
127 static int hf_dop_generalizedTime = -1;           /* GeneralizedTime */
128 static int hf_dop_initiator = -1;                 /* T_initiator */
129 static int hf_dop_symmetric = -1;                 /* T_symmetric */
130 static int hf_dop_roleA_replies = -1;             /* T_roleA_replies */
131 static int hf_dop_roleB_replies = -1;             /* T_roleB_replies */
132 static int hf_dop_performer = -1;                 /* DistinguishedName */
133 static int hf_dop_aliasDereferenced = -1;         /* BOOLEAN */
134 static int hf_dop_notification = -1;              /* SEQUENCE_SIZE_1_MAX_OF_Attribute */
135 static int hf_dop_notification_item = -1;         /* Attribute */
136 static int hf_dop_modifyInitiator = -1;           /* ModifyArgumentInitiator */
137 static int hf_dop_modifySymmetric = -1;           /* ModifySymmetric */
138 static int hf_dop_modifyRoleAInitiates = -1;      /* ModifyRoleAInitiates */
139 static int hf_dop_modifyRoleBInitiates = -1;      /* ModifyRoleBInitiates */
140 static int hf_dop_newBindingID = -1;              /* OperationalBindingID */
141 static int hf_dop_argumentNewAgreement = -1;      /* ArgumentNewAgreement */
142 static int hf_dop_unsignedModifyOperationalBindingArgument = -1;  /* ModifyOperationalBindingArgumentData */
143 static int hf_dop_signedModifyOperationalBindingArgument = -1;  /* T_signedModifyOperationalBindingArgument */
144 static int hf_dop_modifyOperationalBindingArgument = -1;  /* ModifyOperationalBindingArgumentData */
145 static int hf_dop_null = -1;                      /* NULL */
146 static int hf_dop_protectedModifyResult = -1;     /* ProtectedModifyResult */
147 static int hf_dop_modifyOperationalBindingResultData = -1;  /* ModifyOperationalBindingResultData */
148 static int hf_dop_resultNewAgreement = -1;        /* ResultNewAgreement */
149 static int hf_dop_terminateInitiator = -1;        /* TerminateArgumentInitiator */
150 static int hf_dop_terminateSymmetric = -1;        /* TerminateSymmetric */
151 static int hf_dop_terminateRoleAInitiates = -1;   /* TerminateRoleAInitiates */
152 static int hf_dop_terminateRoleBInitiates = -1;   /* TerminateRoleBInitiates */
153 static int hf_dop_terminateAtTime = -1;           /* Time */
154 static int hf_dop_unsignedTerminateOperationalBindingArgument = -1;  /* TerminateOperationalBindingArgumentData */
155 static int hf_dop_signedTerminateOperationalBindingArgument = -1;  /* T_signedTerminateOperationalBindingArgument */
156 static int hf_dop_terminateOperationalBindingArgument = -1;  /* TerminateOperationalBindingArgumentData */
157 static int hf_dop_protectedTerminateResult = -1;  /* ProtectedTerminateResult */
158 static int hf_dop_terminateOperationalBindingResultData = -1;  /* TerminateOperationalBindingResultData */
159 static int hf_dop_terminateAtGeneralizedTime = -1;  /* GeneralizedTime */
160 static int hf_dop_problem = -1;                   /* T_problem */
161 static int hf_dop_agreementProposal = -1;         /* T_agreementProposal */
162 static int hf_dop_retryAt = -1;                   /* Time */
163 static int hf_dop_rdn = -1;                       /* RelativeDistinguishedName */
164 static int hf_dop_immediateSuperior = -1;         /* DistinguishedName */
165 static int hf_dop_contextPrefixInfo = -1;         /* DITcontext */
166 static int hf_dop_entryInfo = -1;                 /* SET_OF_Attribute */
167 static int hf_dop_entryInfo_item = -1;            /* Attribute */
168 static int hf_dop_immediateSuperiorInfo = -1;     /* SET_OF_Attribute */
169 static int hf_dop_immediateSuperiorInfo_item = -1;  /* Attribute */
170 static int hf_dop_DITcontext_item = -1;           /* Vertex */
171 static int hf_dop_admPointInfo = -1;              /* SET_OF_Attribute */
172 static int hf_dop_admPointInfo_item = -1;         /* Attribute */
173 static int hf_dop_subentries = -1;                /* SET_OF_SubentryInfo */
174 static int hf_dop_subentries_item = -1;           /* SubentryInfo */
175 static int hf_dop_accessPoints = -1;              /* MasterAndShadowAccessPoints */
176 static int hf_dop_info = -1;                      /* SET_OF_Attribute */
177 static int hf_dop_info_item = -1;                 /* Attribute */
178 static int hf_dop_alias = -1;                     /* BOOLEAN */
179 static int hf_dop_identificationTag = -1;         /* DirectoryString */
180 static int hf_dop_precedence = -1;                /* Precedence */
181 static int hf_dop_authenticationLevel = -1;       /* AuthenticationLevel */
182 static int hf_dop_itemOrUserFirst = -1;           /* T_itemOrUserFirst */
183 static int hf_dop_itemFirst = -1;                 /* T_itemFirst */
184 static int hf_dop_protectedItems = -1;            /* ProtectedItems */
185 static int hf_dop_itemPermissions = -1;           /* SET_OF_ItemPermission */
186 static int hf_dop_itemPermissions_item = -1;      /* ItemPermission */
187 static int hf_dop_userFirst = -1;                 /* T_userFirst */
188 static int hf_dop_userClasses = -1;               /* UserClasses */
189 static int hf_dop_userPermissions = -1;           /* SET_OF_UserPermission */
190 static int hf_dop_userPermissions_item = -1;      /* UserPermission */
191 static int hf_dop_entry = -1;                     /* NULL */
192 static int hf_dop_allUserAttributeTypes = -1;     /* NULL */
193 static int hf_dop_attributeType = -1;             /* SET_OF_AttributeType */
194 static int hf_dop_attributeType_item = -1;        /* AttributeType */
195 static int hf_dop_allAttributeValues = -1;        /* SET_OF_AttributeType */
196 static int hf_dop_allAttributeValues_item = -1;   /* AttributeType */
197 static int hf_dop_allUserAttributeTypesAndValues = -1;  /* NULL */
198 static int hf_dop_attributeValue = -1;            /* SET_OF_AttributeTypeAndValue */
199 static int hf_dop_attributeValue_item = -1;       /* AttributeTypeAndValue */
200 static int hf_dop_selfValue = -1;                 /* SET_OF_AttributeType */
201 static int hf_dop_selfValue_item = -1;            /* AttributeType */
202 static int hf_dop_rangeOfValues = -1;             /* Filter */
203 static int hf_dop_maxValueCount = -1;             /* SET_OF_MaxValueCount */
204 static int hf_dop_maxValueCount_item = -1;        /* MaxValueCount */
205 static int hf_dop_maxImmSub = -1;                 /* INTEGER */
206 static int hf_dop_restrictedBy = -1;              /* SET_OF_RestrictedValue */
207 static int hf_dop_restrictedBy_item = -1;         /* RestrictedValue */
208 static int hf_dop_contexts = -1;                  /* SET_OF_ContextAssertion */
209 static int hf_dop_contexts_item = -1;             /* ContextAssertion */
210 static int hf_dop_classes = -1;                   /* Refinement */
211 static int hf_dop_type = -1;                      /* AttributeType */
212 static int hf_dop_maxCount = -1;                  /* INTEGER */
213 static int hf_dop_valuesIn = -1;                  /* AttributeType */
214 static int hf_dop_allUsers = -1;                  /* NULL */
215 static int hf_dop_thisEntry = -1;                 /* NULL */
216 static int hf_dop_name = -1;                      /* SET_OF_NameAndOptionalUID */
217 static int hf_dop_name_item = -1;                 /* NameAndOptionalUID */
218 static int hf_dop_userGroup = -1;                 /* SET_OF_NameAndOptionalUID */
219 static int hf_dop_userGroup_item = -1;            /* NameAndOptionalUID */
220 static int hf_dop_subtree = -1;                   /* SET_OF_SubtreeSpecification */
221 static int hf_dop_subtree_item = -1;              /* SubtreeSpecification */
222 static int hf_dop_grantsAndDenials = -1;          /* GrantsAndDenials */
223 static int hf_dop_basicLevels = -1;               /* T_basicLevels */
224 static int hf_dop_level = -1;                     /* T_level */
225 static int hf_dop_localQualifier = -1;            /* INTEGER */
226 static int hf_dop_signed = -1;                    /* BOOLEAN */
227 static int hf_dop_other = -1;                     /* EXTERNAL */
228 /* named bits */
229 static int hf_dop_DSEType_root = -1;
230 static int hf_dop_DSEType_glue = -1;
231 static int hf_dop_DSEType_cp = -1;
232 static int hf_dop_DSEType_entry = -1;
233 static int hf_dop_DSEType_alias = -1;
234 static int hf_dop_DSEType_subr = -1;
235 static int hf_dop_DSEType_nssr = -1;
236 static int hf_dop_DSEType_supr = -1;
237 static int hf_dop_DSEType_xr = -1;
238 static int hf_dop_DSEType_admPoint = -1;
239 static int hf_dop_DSEType_subentry = -1;
240 static int hf_dop_DSEType_shadow = -1;
241 static int hf_dop_DSEType_immSupr = -1;
242 static int hf_dop_DSEType_rhob = -1;
243 static int hf_dop_DSEType_sa = -1;
244 static int hf_dop_DSEType_dsSubentry = -1;
245 static int hf_dop_DSEType_familyMember = -1;
246 static int hf_dop_GrantsAndDenials_grantAdd = -1;
247 static int hf_dop_GrantsAndDenials_denyAdd = -1;
248 static int hf_dop_GrantsAndDenials_grantDiscloseOnError = -1;
249 static int hf_dop_GrantsAndDenials_denyDiscloseOnError = -1;
250 static int hf_dop_GrantsAndDenials_grantRead = -1;
251 static int hf_dop_GrantsAndDenials_denyRead = -1;
252 static int hf_dop_GrantsAndDenials_grantRemove = -1;
253 static int hf_dop_GrantsAndDenials_denyRemove = -1;
254 static int hf_dop_GrantsAndDenials_grantBrowse = -1;
255 static int hf_dop_GrantsAndDenials_denyBrowse = -1;
256 static int hf_dop_GrantsAndDenials_grantExport = -1;
257 static int hf_dop_GrantsAndDenials_denyExport = -1;
258 static int hf_dop_GrantsAndDenials_grantImport = -1;
259 static int hf_dop_GrantsAndDenials_denyImport = -1;
260 static int hf_dop_GrantsAndDenials_grantModify = -1;
261 static int hf_dop_GrantsAndDenials_denyModify = -1;
262 static int hf_dop_GrantsAndDenials_grantRename = -1;
263 static int hf_dop_GrantsAndDenials_denyRename = -1;
264 static int hf_dop_GrantsAndDenials_grantReturnDN = -1;
265 static int hf_dop_GrantsAndDenials_denyReturnDN = -1;
266 static int hf_dop_GrantsAndDenials_grantCompare = -1;
267 static int hf_dop_GrantsAndDenials_denyCompare = -1;
268 static int hf_dop_GrantsAndDenials_grantFilterMatch = -1;
269 static int hf_dop_GrantsAndDenials_denyFilterMatch = -1;
270 static int hf_dop_GrantsAndDenials_grantInvoke = -1;
271 static int hf_dop_GrantsAndDenials_denyInvoke = -1;
272
273 /*--- End of included file: packet-dop-hf.c ---*/
274 #line 73 "packet-dop-template.c"
275
276 /* Initialize the subtree pointers */
277 static gint ett_dop = -1;
278 static gint ett_dop_unknown = -1;
279
280 /*--- Included file: packet-dop-ett.c ---*/
281 #line 1 "packet-dop-ett.c"
282 static gint ett_dop_DSEType = -1;
283 static gint ett_dop_SupplierOrConsumer = -1;
284 static gint ett_dop_SET_OF_ProtocolInformation = -1;
285 static gint ett_dop_SupplierInformation = -1;
286 static gint ett_dop_SupplierAndConsumers = -1;
287 static gint ett_dop_SET_OF_AccessPoint = -1;
288 static gint ett_dop_EstablishOperationalBindingArgumentData = -1;
289 static gint ett_dop_EstablishArgumentInitiator = -1;
290 static gint ett_dop_EstablishOperationalBindingArgument = -1;
291 static gint ett_dop_T_signedEstablishOperationalBindingArgument = -1;
292 static gint ett_dop_OperationalBindingID = -1;
293 static gint ett_dop_Validity = -1;
294 static gint ett_dop_T_validFrom = -1;
295 static gint ett_dop_T_validUntil = -1;
296 static gint ett_dop_Time = -1;
297 static gint ett_dop_EstablishOperationalBindingResult = -1;
298 static gint ett_dop_T_initiator = -1;
299 static gint ett_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute = -1;
300 static gint ett_dop_ModifyOperationalBindingArgumentData = -1;
301 static gint ett_dop_ModifyArgumentInitiator = -1;
302 static gint ett_dop_ModifyOperationalBindingArgument = -1;
303 static gint ett_dop_T_signedModifyOperationalBindingArgument = -1;
304 static gint ett_dop_ModifyOperationalBindingResult = -1;
305 static gint ett_dop_ProtectedModifyResult = -1;
306 static gint ett_dop_ModifyOperationalBindingResultData = -1;
307 static gint ett_dop_TerminateOperationalBindingArgumentData = -1;
308 static gint ett_dop_TerminateArgumentInitiator = -1;
309 static gint ett_dop_TerminateOperationalBindingArgument = -1;
310 static gint ett_dop_T_signedTerminateOperationalBindingArgument = -1;
311 static gint ett_dop_TerminateOperationalBindingResult = -1;
312 static gint ett_dop_ProtectedTerminateResult = -1;
313 static gint ett_dop_TerminateOperationalBindingResultData = -1;
314 static gint ett_dop_OpBindingErrorParam = -1;
315 static gint ett_dop_HierarchicalAgreement = -1;
316 static gint ett_dop_SuperiorToSubordinate = -1;
317 static gint ett_dop_SET_OF_Attribute = -1;
318 static gint ett_dop_DITcontext = -1;
319 static gint ett_dop_Vertex = -1;
320 static gint ett_dop_SET_OF_SubentryInfo = -1;
321 static gint ett_dop_SubentryInfo = -1;
322 static gint ett_dop_SubordinateToSuperior = -1;
323 static gint ett_dop_SuperiorToSubordinateModification = -1;
324 static gint ett_dop_NonSpecificHierarchicalAgreement = -1;
325 static gint ett_dop_NHOBSuperiorToSubordinate = -1;
326 static gint ett_dop_NHOBSubordinateToSuperior = -1;
327 static gint ett_dop_ACIItem = -1;
328 static gint ett_dop_T_itemOrUserFirst = -1;
329 static gint ett_dop_T_itemFirst = -1;
330 static gint ett_dop_SET_OF_ItemPermission = -1;
331 static gint ett_dop_T_userFirst = -1;
332 static gint ett_dop_SET_OF_UserPermission = -1;
333 static gint ett_dop_ProtectedItems = -1;
334 static gint ett_dop_SET_OF_AttributeType = -1;
335 static gint ett_dop_SET_OF_AttributeTypeAndValue = -1;
336 static gint ett_dop_SET_OF_MaxValueCount = -1;
337 static gint ett_dop_SET_OF_RestrictedValue = -1;
338 static gint ett_dop_SET_OF_ContextAssertion = -1;
339 static gint ett_dop_MaxValueCount = -1;
340 static gint ett_dop_RestrictedValue = -1;
341 static gint ett_dop_UserClasses = -1;
342 static gint ett_dop_SET_OF_NameAndOptionalUID = -1;
343 static gint ett_dop_SET_OF_SubtreeSpecification = -1;
344 static gint ett_dop_ItemPermission = -1;
345 static gint ett_dop_UserPermission = -1;
346 static gint ett_dop_AuthenticationLevel = -1;
347 static gint ett_dop_T_basicLevels = -1;
348 static gint ett_dop_GrantsAndDenials = -1;
349
350 /*--- End of included file: packet-dop-ett.c ---*/
351 #line 78 "packet-dop-template.c"
352
353 /* Dissector table */
354 static dissector_table_t dop_dissector_table;
355
356 static void append_oid(packet_info *pinfo, const char *oid)
357 {
358         const char *name = NULL;
359
360   if(check_col(pinfo->cinfo, COL_INFO)) {
361     name = oid_resolved_from_string(oid);
362     col_append_fstr(pinfo->cinfo, COL_INFO, " %s", name ? name : oid);
363   }
364 }
365
366
367 /*--- Included file: packet-dop-fn.c ---*/
368 #line 1 "packet-dop-fn.c"
369
370 static const asn_namedbit DSEType_bits[] = {
371   {  0, &hf_dop_DSEType_root, -1, -1, "root", NULL },
372   {  1, &hf_dop_DSEType_glue, -1, -1, "glue", NULL },
373   {  2, &hf_dop_DSEType_cp, -1, -1, "cp", NULL },
374   {  3, &hf_dop_DSEType_entry, -1, -1, "entry", NULL },
375   {  4, &hf_dop_DSEType_alias, -1, -1, "alias", NULL },
376   {  5, &hf_dop_DSEType_subr, -1, -1, "subr", NULL },
377   {  6, &hf_dop_DSEType_nssr, -1, -1, "nssr", NULL },
378   {  7, &hf_dop_DSEType_supr, -1, -1, "supr", NULL },
379   {  8, &hf_dop_DSEType_xr, -1, -1, "xr", NULL },
380   {  9, &hf_dop_DSEType_admPoint, -1, -1, "admPoint", NULL },
381   { 10, &hf_dop_DSEType_subentry, -1, -1, "subentry", NULL },
382   { 11, &hf_dop_DSEType_shadow, -1, -1, "shadow", NULL },
383   { 13, &hf_dop_DSEType_immSupr, -1, -1, "immSupr", NULL },
384   { 14, &hf_dop_DSEType_rhob, -1, -1, "rhob", NULL },
385   { 15, &hf_dop_DSEType_sa, -1, -1, "sa", NULL },
386   { 16, &hf_dop_DSEType_dsSubentry, -1, -1, "dsSubentry", NULL },
387   { 17, &hf_dop_DSEType_familyMember, -1, -1, "familyMember", NULL },
388   { 0, NULL, 0, 0, NULL, NULL }
389 };
390
391 int
392 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_) {
393   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
394                                     DSEType_bits, hf_index, ett_dop_DSEType,
395                                     NULL);
396
397   return offset;
398 }
399
400
401 static const ber_sequence_t SET_OF_ProtocolInformation_set_of[1] = {
402   { &hf_dop_protocolInformation_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509sat_ProtocolInformation },
403 };
404
405 static int
406 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_) {
407   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
408                                  SET_OF_ProtocolInformation_set_of, hf_index, ett_dop_SET_OF_ProtocolInformation);
409
410   return offset;
411 }
412
413
414
415 static int
416 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_) {
417 #line 172 "dop.cnf"
418         guint32 value;
419
420           offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
421                                   &value);
422
423
424         if (check_col(actx->pinfo->cinfo, COL_INFO)) {
425                         col_append_fstr(actx->pinfo->cinfo, COL_INFO, " id=%d", value);
426         }
427
428
429
430
431
432   return offset;
433 }
434
435
436
437 static int
438 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_) {
439 #line 183 "dop.cnf"
440         guint32 value;
441
442           offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
443                                   &value);
444
445
446         if (check_col(actx->pinfo->cinfo, COL_INFO)) {
447                         col_append_fstr(actx->pinfo->cinfo, COL_INFO, " id=%d", value);
448         }
449
450
451
452   return offset;
453 }
454
455
456 static const ber_sequence_t OperationalBindingID_sequence[] = {
457   { &hf_dop_identifier      , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_dop_T_identifier },
458   { &hf_dop_version         , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_dop_T_version },
459   { NULL, 0, 0, 0, NULL }
460 };
461
462 int
463 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_) {
464   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
465                                    OperationalBindingID_sequence, hf_index, ett_dop_OperationalBindingID);
466
467   return offset;
468 }
469
470
471 static const ber_sequence_t SupplierOrConsumer_set[] = {
472   { &hf_dop_ae_title        , BER_CLASS_CON, 0, 0, dissect_x509if_Name },
473   { &hf_dop_address         , BER_CLASS_CON, 1, 0, dissect_x509sat_PresentationAddress },
474   { &hf_dop_protocolInformation, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_ProtocolInformation },
475   { &hf_dop_agreementID     , BER_CLASS_CON, 3, 0, dissect_dop_OperationalBindingID },
476   { NULL, 0, 0, 0, NULL }
477 };
478
479 static int
480 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_) {
481   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
482                               SupplierOrConsumer_set, hf_index, ett_dop_SupplierOrConsumer);
483
484   return offset;
485 }
486
487
488
489 static int
490 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_) {
491   offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
492
493   return offset;
494 }
495
496
497 static const ber_sequence_t SupplierInformation_set[] = {
498   { &hf_dop_ae_title        , BER_CLASS_CON, 0, 0, dissect_x509if_Name },
499   { &hf_dop_address         , BER_CLASS_CON, 1, 0, dissect_x509sat_PresentationAddress },
500   { &hf_dop_protocolInformation, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_ProtocolInformation },
501   { &hf_dop_agreementID     , BER_CLASS_CON, 3, 0, dissect_dop_OperationalBindingID },
502   { &hf_dop_supplier_is_master, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
503   { &hf_dop_non_supplying_master, BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_dsp_AccessPoint },
504   { NULL, 0, 0, 0, NULL }
505 };
506
507 static int
508 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_) {
509   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
510                               SupplierInformation_set, hf_index, ett_dop_SupplierInformation);
511
512   return offset;
513 }
514
515
516
517 static int
518 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_) {
519   offset = dissect_dop_SupplierOrConsumer(implicit_tag, tvb, offset, actx, tree, hf_index);
520
521   return offset;
522 }
523
524
525 static const ber_sequence_t SET_OF_AccessPoint_set_of[1] = {
526   { &hf_dop_consumers_item  , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dsp_AccessPoint },
527 };
528
529 static int
530 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_) {
531   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
532                                  SET_OF_AccessPoint_set_of, hf_index, ett_dop_SET_OF_AccessPoint);
533
534   return offset;
535 }
536
537
538 static const ber_sequence_t SupplierAndConsumers_set[] = {
539   { &hf_dop_ae_title        , BER_CLASS_CON, 0, 0, dissect_x509if_Name },
540   { &hf_dop_address         , BER_CLASS_CON, 1, 0, dissect_x509sat_PresentationAddress },
541   { &hf_dop_protocolInformation, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_ProtocolInformation },
542   { &hf_dop_consumers       , BER_CLASS_CON, 3, 0, dissect_dop_SET_OF_AccessPoint },
543   { NULL, 0, 0, 0, NULL }
544 };
545
546 int
547 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_) {
548   offset = dissect_ber_set(implicit_tag, actx, tree, tvb, offset,
549                               SupplierAndConsumers_set, hf_index, ett_dop_SupplierAndConsumers);
550
551   return offset;
552 }
553
554
555
556 static int
557 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_) {
558   offset = dissect_dap_DirectoryBindArgument(implicit_tag, tvb, offset, actx, tree, hf_index);
559
560   return offset;
561 }
562
563
564
565 static int
566 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_) {
567   offset = dissect_dap_DirectoryBindArgument(implicit_tag, tvb, offset, actx, tree, hf_index);
568
569   return offset;
570 }
571
572
573
574 static int
575 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_) {
576   offset = dissect_dap_DirectoryBindError(implicit_tag, tvb, offset, actx, tree, hf_index);
577
578   return offset;
579 }
580
581
582
583 static int
584 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_) {
585   offset = dissect_ber_object_identifier_str(implicit_tag, actx, tree, tvb, offset, hf_index, &binding_type);
586
587 #line 103 "dop.cnf"
588   append_oid(actx->pinfo, binding_type);
589
590   return offset;
591 }
592
593
594
595 static int
596 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_) {
597 #line 107 "dop.cnf"
598
599   offset = call_dop_oid_callback("establish.symmetric", tvb, offset, actx->pinfo, tree, "symmetric");
600
601
602
603   return offset;
604 }
605
606
607
608 static int
609 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_) {
610 #line 111 "dop.cnf"
611
612   offset = call_dop_oid_callback("establish.rolea", tvb, offset, actx->pinfo, tree, "roleA");
613
614
615
616   return offset;
617 }
618
619
620
621 static int
622 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_) {
623 #line 115 "dop.cnf"
624
625   offset = call_dop_oid_callback("establish.roleb", tvb, offset, actx->pinfo, tree, "roleB");
626
627
628
629   return offset;
630 }
631
632
633 static const value_string dop_EstablishArgumentInitiator_vals[] = {
634   {   3, "symmetric" },
635   {   4, "roleA-initiates" },
636   {   5, "roleB-initiates" },
637   { 0, NULL }
638 };
639
640 static const ber_choice_t EstablishArgumentInitiator_choice[] = {
641   {   3, &hf_dop_establishSymmetric, BER_CLASS_CON, 3, 0, dissect_dop_EstablishSymmetric },
642   {   4, &hf_dop_establishRoleAInitiates, BER_CLASS_CON, 4, 0, dissect_dop_EstablishRoleAInitiates },
643   {   5, &hf_dop_establishRoleBInitiates, BER_CLASS_CON, 5, 0, dissect_dop_EstablishRoleBInitiates },
644   { 0, NULL, 0, 0, 0, NULL }
645 };
646
647 static int
648 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_) {
649   offset = dissect_ber_choice(actx, tree, tvb, offset,
650                                  EstablishArgumentInitiator_choice, hf_index, ett_dop_EstablishArgumentInitiator,
651                                  NULL);
652
653   return offset;
654 }
655
656
657
658 static int
659 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_) {
660 #line 143 "dop.cnf"
661
662   offset = call_dop_oid_callback("agreement", tvb, offset, actx->pinfo, tree, NULL);
663
664
665
666   return offset;
667 }
668
669
670
671 static int
672 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_) {
673   offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
674
675   return offset;
676 }
677
678
679
680 static int
681 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_) {
682   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
683                                             actx, tree, tvb, offset, hf_index,
684                                             NULL);
685
686   return offset;
687 }
688
689
690
691 static int
692 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_) {
693   offset = dissect_ber_GeneralizedTime(implicit_tag, actx, tree, tvb, offset, hf_index);
694
695   return offset;
696 }
697
698
699 static const value_string dop_Time_vals[] = {
700   {   0, "utcTime" },
701   {   1, "generalizedTime" },
702   { 0, NULL }
703 };
704
705 static const ber_choice_t Time_choice[] = {
706   {   0, &hf_dop_utcTime         , BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_dop_UTCTime },
707   {   1, &hf_dop_generalizedTime , BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_dop_GeneralizedTime },
708   { 0, NULL, 0, 0, 0, NULL }
709 };
710
711 static int
712 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_) {
713   offset = dissect_ber_choice(actx, tree, tvb, offset,
714                                  Time_choice, hf_index, ett_dop_Time,
715                                  NULL);
716
717   return offset;
718 }
719
720
721 static const value_string dop_T_validFrom_vals[] = {
722   {   0, "now" },
723   {   1, "time" },
724   { 0, NULL }
725 };
726
727 static const ber_choice_t T_validFrom_choice[] = {
728   {   0, &hf_dop_now             , BER_CLASS_CON, 0, 0, dissect_dop_NULL },
729   {   1, &hf_dop_time            , BER_CLASS_CON, 1, 0, dissect_dop_Time },
730   { 0, NULL, 0, 0, 0, NULL }
731 };
732
733 static int
734 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_) {
735   offset = dissect_ber_choice(actx, tree, tvb, offset,
736                                  T_validFrom_choice, hf_index, ett_dop_T_validFrom,
737                                  NULL);
738
739   return offset;
740 }
741
742
743 static const value_string dop_T_validUntil_vals[] = {
744   {   0, "explicitTermination" },
745   {   1, "time" },
746   { 0, NULL }
747 };
748
749 static const ber_choice_t T_validUntil_choice[] = {
750   {   0, &hf_dop_explicitTermination, BER_CLASS_CON, 0, 0, dissect_dop_NULL },
751   {   1, &hf_dop_time            , BER_CLASS_CON, 1, 0, dissect_dop_Time },
752   { 0, NULL, 0, 0, 0, NULL }
753 };
754
755 static int
756 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_) {
757   offset = dissect_ber_choice(actx, tree, tvb, offset,
758                                  T_validUntil_choice, hf_index, ett_dop_T_validUntil,
759                                  NULL);
760
761   return offset;
762 }
763
764
765 static const ber_sequence_t Validity_sequence[] = {
766   { &hf_dop_validFrom       , BER_CLASS_CON, 0, 0, dissect_dop_T_validFrom },
767   { &hf_dop_validUntil      , BER_CLASS_CON, 1, 0, dissect_dop_T_validUntil },
768   { NULL, 0, 0, 0, NULL }
769 };
770
771 static int
772 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_) {
773   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
774                                    Validity_sequence, hf_index, ett_dop_Validity);
775
776   return offset;
777 }
778
779
780 static const ber_sequence_t EstablishOperationalBindingArgumentData_sequence[] = {
781   { &hf_dop_bindingType     , BER_CLASS_CON, 0, 0, dissect_dop_BindingType },
782   { &hf_dop_bindingID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_OperationalBindingID },
783   { &hf_dop_accessPoint     , BER_CLASS_CON, 2, 0, dissect_dsp_AccessPoint },
784   { &hf_dop_establishInitiator, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_EstablishArgumentInitiator },
785   { &hf_dop_agreement       , BER_CLASS_CON, 6, 0, dissect_dop_T_agreement },
786   { &hf_dop_valid           , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_dop_Validity },
787   { &hf_dop_securityParameters, BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
788   { NULL, 0, 0, 0, NULL }
789 };
790
791 static int
792 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_) {
793   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
794                                    EstablishOperationalBindingArgumentData_sequence, hf_index, ett_dop_EstablishOperationalBindingArgumentData);
795
796   return offset;
797 }
798
799
800
801 static int
802 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_) {
803   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
804                                     NULL, hf_index, -1,
805                                     NULL);
806
807   return offset;
808 }
809
810
811 static const ber_sequence_t T_signedEstablishOperationalBindingArgument_sequence[] = {
812   { &hf_dop_establishOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_EstablishOperationalBindingArgumentData },
813   { &hf_dop_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
814   { &hf_dop_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_BIT_STRING },
815   { NULL, 0, 0, 0, NULL }
816 };
817
818 static int
819 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_) {
820   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
821                                    T_signedEstablishOperationalBindingArgument_sequence, hf_index, ett_dop_T_signedEstablishOperationalBindingArgument);
822
823   return offset;
824 }
825
826
827 static const value_string dop_EstablishOperationalBindingArgument_vals[] = {
828   {   0, "unsignedEstablishOperationalBindingArgument" },
829   {   1, "signedEstablishOperationalBindingArgument" },
830   { 0, NULL }
831 };
832
833 static const ber_choice_t EstablishOperationalBindingArgument_choice[] = {
834   {   0, &hf_dop_unsignedEstablishOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_EstablishOperationalBindingArgumentData },
835   {   1, &hf_dop_signedEstablishOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_T_signedEstablishOperationalBindingArgument },
836   { 0, NULL, 0, 0, 0, NULL }
837 };
838
839 static int
840 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_) {
841   offset = dissect_ber_choice(actx, tree, tvb, offset,
842                                  EstablishOperationalBindingArgument_choice, hf_index, ett_dop_EstablishOperationalBindingArgument,
843                                  NULL);
844
845   return offset;
846 }
847
848
849
850 static int
851 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_) {
852 #line 147 "dop.cnf"
853
854   offset = call_dop_oid_callback("establish.symmetric", tvb, offset, actx->pinfo, tree, "symmetric"); 
855
856
857
858   return offset;
859 }
860
861
862
863 static int
864 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_) {
865 #line 151 "dop.cnf"
866
867   offset = call_dop_oid_callback("establish.rolea", tvb, offset, actx->pinfo, tree, "roleA");
868
869
870
871   return offset;
872 }
873
874
875
876 static int
877 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_) {
878 #line 155 "dop.cnf"
879
880   offset = call_dop_oid_callback("establish.roleb", tvb, offset, actx->pinfo, tree, "roleB");
881
882
883
884   return offset;
885 }
886
887
888 static const value_string dop_T_initiator_vals[] = {
889   {   3, "symmetric" },
890   {   4, "roleA-replies" },
891   {   5, "roleB-replies" },
892   { 0, NULL }
893 };
894
895 static const ber_choice_t T_initiator_choice[] = {
896   {   3, &hf_dop_symmetric       , BER_CLASS_CON, 3, 0, dissect_dop_T_symmetric },
897   {   4, &hf_dop_roleA_replies   , BER_CLASS_CON, 4, 0, dissect_dop_T_roleA_replies },
898   {   5, &hf_dop_roleB_replies   , BER_CLASS_CON, 5, 0, dissect_dop_T_roleB_replies },
899   { 0, NULL, 0, 0, 0, NULL }
900 };
901
902 static int
903 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_) {
904   offset = dissect_ber_choice(actx, tree, tvb, offset,
905                                  T_initiator_choice, hf_index, ett_dop_T_initiator,
906                                  NULL);
907
908   return offset;
909 }
910
911
912 static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_Attribute_sequence_of[1] = {
913   { &hf_dop_notification_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_Attribute },
914 };
915
916 static int
917 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_) {
918   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
919                                       SEQUENCE_SIZE_1_MAX_OF_Attribute_sequence_of, hf_index, ett_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute);
920
921   return offset;
922 }
923
924
925 static const ber_sequence_t EstablishOperationalBindingResult_sequence[] = {
926   { &hf_dop_bindingType     , BER_CLASS_CON, 0, 0, dissect_dop_BindingType },
927   { &hf_dop_bindingID       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_OperationalBindingID },
928   { &hf_dop_accessPoint     , BER_CLASS_CON, 2, 0, dissect_dsp_AccessPoint },
929   { &hf_dop_initiator       , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_T_initiator },
930   { &hf_dop_securityParameters, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
931   { &hf_dop_performer       , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
932   { &hf_dop_aliasDereferenced, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
933   { &hf_dop_notification    , BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute },
934   { NULL, 0, 0, 0, NULL }
935 };
936
937 static int
938 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_) {
939   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
940                                    EstablishOperationalBindingResult_sequence, hf_index, ett_dop_EstablishOperationalBindingResult);
941
942   return offset;
943 }
944
945
946
947 static int
948 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_) {
949 #line 119 "dop.cnf"
950
951   offset = call_dop_oid_callback("modify.symmetric", tvb, offset, actx->pinfo, tree, "symmetric");
952
953
954
955   return offset;
956 }
957
958
959
960 static int
961 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_) {
962 #line 123 "dop.cnf"
963
964   offset = call_dop_oid_callback("modify.rolea", tvb, offset, actx->pinfo, tree, "roleA");
965
966
967
968   return offset;
969 }
970
971
972
973 static int
974 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_) {
975 #line 127 "dop.cnf"
976
977   offset = call_dop_oid_callback("modify.roleb", tvb, offset, actx->pinfo, tree, "roleB");
978
979
980
981   return offset;
982 }
983
984
985 static const value_string dop_ModifyArgumentInitiator_vals[] = {
986   {   3, "symmetric" },
987   {   4, "roleA-initiates" },
988   {   5, "roleB-initiates" },
989   { 0, NULL }
990 };
991
992 static const ber_choice_t ModifyArgumentInitiator_choice[] = {
993   {   3, &hf_dop_modifySymmetric , BER_CLASS_CON, 3, 0, dissect_dop_ModifySymmetric },
994   {   4, &hf_dop_modifyRoleAInitiates, BER_CLASS_CON, 4, 0, dissect_dop_ModifyRoleAInitiates },
995   {   5, &hf_dop_modifyRoleBInitiates, BER_CLASS_CON, 5, 0, dissect_dop_ModifyRoleBInitiates },
996   { 0, NULL, 0, 0, 0, NULL }
997 };
998
999 static int
1000 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_) {
1001   offset = dissect_ber_choice(actx, tree, tvb, offset,
1002                                  ModifyArgumentInitiator_choice, hf_index, ett_dop_ModifyArgumentInitiator,
1003                                  NULL);
1004
1005   return offset;
1006 }
1007
1008
1009
1010 static int
1011 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_) {
1012 #line 167 "dop.cnf"
1013
1014   offset = call_dop_oid_callback("agreement", tvb, offset, actx->pinfo, tree, NULL);
1015
1016
1017
1018
1019   return offset;
1020 }
1021
1022
1023 static const ber_sequence_t ModifyOperationalBindingArgumentData_sequence[] = {
1024   { &hf_dop_bindingType     , BER_CLASS_CON, 0, 0, dissect_dop_BindingType },
1025   { &hf_dop_bindingID       , BER_CLASS_CON, 1, 0, dissect_dop_OperationalBindingID },
1026   { &hf_dop_accessPoint     , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dsp_AccessPoint },
1027   { &hf_dop_modifyInitiator , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_ModifyArgumentInitiator },
1028   { &hf_dop_newBindingID    , BER_CLASS_CON, 6, 0, dissect_dop_OperationalBindingID },
1029   { &hf_dop_argumentNewAgreement, BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_dop_ArgumentNewAgreement },
1030   { &hf_dop_valid           , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_dop_Validity },
1031   { &hf_dop_securityParameters, BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
1032   { NULL, 0, 0, 0, NULL }
1033 };
1034
1035 static int
1036 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_) {
1037   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1038                                    ModifyOperationalBindingArgumentData_sequence, hf_index, ett_dop_ModifyOperationalBindingArgumentData);
1039
1040   return offset;
1041 }
1042
1043
1044 static const ber_sequence_t T_signedModifyOperationalBindingArgument_sequence[] = {
1045   { &hf_dop_modifyOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ModifyOperationalBindingArgumentData },
1046   { &hf_dop_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1047   { &hf_dop_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_BIT_STRING },
1048   { NULL, 0, 0, 0, NULL }
1049 };
1050
1051 static int
1052 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_) {
1053   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1054                                    T_signedModifyOperationalBindingArgument_sequence, hf_index, ett_dop_T_signedModifyOperationalBindingArgument);
1055
1056   return offset;
1057 }
1058
1059
1060 static const value_string dop_ModifyOperationalBindingArgument_vals[] = {
1061   {   0, "unsignedModifyOperationalBindingArgument" },
1062   {   1, "signedModifyOperationalBindingArgument" },
1063   { 0, NULL }
1064 };
1065
1066 static const ber_choice_t ModifyOperationalBindingArgument_choice[] = {
1067   {   0, &hf_dop_unsignedModifyOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ModifyOperationalBindingArgumentData },
1068   {   1, &hf_dop_signedModifyOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_T_signedModifyOperationalBindingArgument },
1069   { 0, NULL, 0, 0, 0, NULL }
1070 };
1071
1072 static int
1073 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_) {
1074   offset = dissect_ber_choice(actx, tree, tvb, offset,
1075                                  ModifyOperationalBindingArgument_choice, hf_index, ett_dop_ModifyOperationalBindingArgument,
1076                                  NULL);
1077
1078   return offset;
1079 }
1080
1081
1082
1083 static int
1084 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_) {
1085 #line 163 "dop.cnf"
1086
1087   offset = call_dop_oid_callback("agreement", tvb, offset, actx->pinfo, tree, NULL);
1088
1089
1090
1091   return offset;
1092 }
1093
1094
1095 static const ber_sequence_t ModifyOperationalBindingResultData_sequence[] = {
1096   { &hf_dop_newBindingID    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_OperationalBindingID },
1097   { &hf_dop_bindingType     , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_dop_BindingType },
1098   { &hf_dop_resultNewAgreement, BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_dop_ResultNewAgreement },
1099   { &hf_dop_valid           , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_Validity },
1100   { &hf_dop_securityParameters, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
1101   { &hf_dop_performer       , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
1102   { &hf_dop_aliasDereferenced, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
1103   { &hf_dop_notification    , BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute },
1104   { NULL, 0, 0, 0, NULL }
1105 };
1106
1107 static int
1108 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_) {
1109   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1110                                    ModifyOperationalBindingResultData_sequence, hf_index, ett_dop_ModifyOperationalBindingResultData);
1111
1112   return offset;
1113 }
1114
1115
1116 static const ber_sequence_t ProtectedModifyResult_sequence[] = {
1117   { &hf_dop_modifyOperationalBindingResultData, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ModifyOperationalBindingResultData },
1118   { &hf_dop_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1119   { &hf_dop_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_BIT_STRING },
1120   { NULL, 0, 0, 0, NULL }
1121 };
1122
1123 static int
1124 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_) {
1125   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1126                                    ProtectedModifyResult_sequence, hf_index, ett_dop_ProtectedModifyResult);
1127
1128   return offset;
1129 }
1130
1131
1132 static const value_string dop_ModifyOperationalBindingResult_vals[] = {
1133   {   0, "null" },
1134   {   1, "protected" },
1135   { 0, NULL }
1136 };
1137
1138 static const ber_choice_t ModifyOperationalBindingResult_choice[] = {
1139   {   0, &hf_dop_null            , BER_CLASS_CON, 0, 0, dissect_dop_NULL },
1140   {   1, &hf_dop_protectedModifyResult, BER_CLASS_CON, 1, 0, dissect_dop_ProtectedModifyResult },
1141   { 0, NULL, 0, 0, 0, NULL }
1142 };
1143
1144 static int
1145 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_) {
1146   offset = dissect_ber_choice(actx, tree, tvb, offset,
1147                                  ModifyOperationalBindingResult_choice, hf_index, ett_dop_ModifyOperationalBindingResult,
1148                                  NULL);
1149
1150   return offset;
1151 }
1152
1153
1154
1155 static int
1156 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_) {
1157 #line 131 "dop.cnf"
1158
1159   offset = call_dop_oid_callback("terminate.symmetric", tvb, offset, actx->pinfo, tree, "symmetric");
1160
1161
1162
1163   return offset;
1164 }
1165
1166
1167
1168 static int
1169 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_) {
1170 #line 135 "dop.cnf"
1171
1172   offset = call_dop_oid_callback("terminate.rolea", tvb, offset, actx->pinfo, tree, "roleA");
1173
1174
1175
1176   return offset;
1177 }
1178
1179
1180
1181 static int
1182 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_) {
1183 #line 139 "dop.cnf"
1184
1185   offset = call_dop_oid_callback("terminate.roleb", tvb, offset, actx->pinfo, tree, "roleB");
1186
1187
1188
1189   return offset;
1190 }
1191
1192
1193 static const value_string dop_TerminateArgumentInitiator_vals[] = {
1194   {   2, "symmetric" },
1195   {   3, "roleA-initiates" },
1196   {   4, "roleB-initiates" },
1197   { 0, NULL }
1198 };
1199
1200 static const ber_choice_t TerminateArgumentInitiator_choice[] = {
1201   {   2, &hf_dop_terminateSymmetric, BER_CLASS_CON, 2, 0, dissect_dop_TerminateSymmetric },
1202   {   3, &hf_dop_terminateRoleAInitiates, BER_CLASS_CON, 3, 0, dissect_dop_TerminateRoleAInitiates },
1203   {   4, &hf_dop_terminateRoleBInitiates, BER_CLASS_CON, 4, 0, dissect_dop_TerminateRoleBInitiates },
1204   { 0, NULL, 0, 0, 0, NULL }
1205 };
1206
1207 static int
1208 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_) {
1209   offset = dissect_ber_choice(actx, tree, tvb, offset,
1210                                  TerminateArgumentInitiator_choice, hf_index, ett_dop_TerminateArgumentInitiator,
1211                                  NULL);
1212
1213   return offset;
1214 }
1215
1216
1217 static const ber_sequence_t TerminateOperationalBindingArgumentData_sequence[] = {
1218   { &hf_dop_bindingType     , BER_CLASS_CON, 0, 0, dissect_dop_BindingType },
1219   { &hf_dop_bindingID       , BER_CLASS_CON, 1, 0, dissect_dop_OperationalBindingID },
1220   { &hf_dop_terminateInitiator, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_TerminateArgumentInitiator },
1221   { &hf_dop_terminateAtTime , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_dop_Time },
1222   { &hf_dop_securityParameters, BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
1223   { NULL, 0, 0, 0, NULL }
1224 };
1225
1226 static int
1227 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_) {
1228   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1229                                    TerminateOperationalBindingArgumentData_sequence, hf_index, ett_dop_TerminateOperationalBindingArgumentData);
1230
1231   return offset;
1232 }
1233
1234
1235 static const ber_sequence_t T_signedTerminateOperationalBindingArgument_sequence[] = {
1236   { &hf_dop_terminateOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_TerminateOperationalBindingArgumentData },
1237   { &hf_dop_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1238   { &hf_dop_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_BIT_STRING },
1239   { NULL, 0, 0, 0, NULL }
1240 };
1241
1242 static int
1243 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_) {
1244   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1245                                    T_signedTerminateOperationalBindingArgument_sequence, hf_index, ett_dop_T_signedTerminateOperationalBindingArgument);
1246
1247   return offset;
1248 }
1249
1250
1251 static const value_string dop_TerminateOperationalBindingArgument_vals[] = {
1252   {   0, "unsignedTerminateOperationalBindingArgument" },
1253   {   1, "signedTerminateOperationalBindingArgument" },
1254   { 0, NULL }
1255 };
1256
1257 static const ber_choice_t TerminateOperationalBindingArgument_choice[] = {
1258   {   0, &hf_dop_unsignedTerminateOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_TerminateOperationalBindingArgumentData },
1259   {   1, &hf_dop_signedTerminateOperationalBindingArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_T_signedTerminateOperationalBindingArgument },
1260   { 0, NULL, 0, 0, 0, NULL }
1261 };
1262
1263 static int
1264 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_) {
1265   offset = dissect_ber_choice(actx, tree, tvb, offset,
1266                                  TerminateOperationalBindingArgument_choice, hf_index, ett_dop_TerminateOperationalBindingArgument,
1267                                  NULL);
1268
1269   return offset;
1270 }
1271
1272
1273 static const ber_sequence_t TerminateOperationalBindingResultData_sequence[] = {
1274   { &hf_dop_bindingID       , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_OperationalBindingID },
1275   { &hf_dop_bindingType     , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_dop_BindingType },
1276   { &hf_dop_terminateAtGeneralizedTime, BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_GeneralizedTime },
1277   { &hf_dop_securityParameters, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
1278   { &hf_dop_performer       , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
1279   { &hf_dop_aliasDereferenced, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
1280   { &hf_dop_notification    , BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute },
1281   { NULL, 0, 0, 0, NULL }
1282 };
1283
1284 static int
1285 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_) {
1286   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1287                                    TerminateOperationalBindingResultData_sequence, hf_index, ett_dop_TerminateOperationalBindingResultData);
1288
1289   return offset;
1290 }
1291
1292
1293 static const ber_sequence_t ProtectedTerminateResult_sequence[] = {
1294   { &hf_dop_terminateOperationalBindingResultData, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_TerminateOperationalBindingResultData },
1295   { &hf_dop_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1296   { &hf_dop_encrypted       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_BIT_STRING },
1297   { NULL, 0, 0, 0, NULL }
1298 };
1299
1300 static int
1301 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_) {
1302   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1303                                    ProtectedTerminateResult_sequence, hf_index, ett_dop_ProtectedTerminateResult);
1304
1305   return offset;
1306 }
1307
1308
1309 static const value_string dop_TerminateOperationalBindingResult_vals[] = {
1310   {   0, "null" },
1311   {   1, "protected" },
1312   { 0, NULL }
1313 };
1314
1315 static const ber_choice_t TerminateOperationalBindingResult_choice[] = {
1316   {   0, &hf_dop_null            , BER_CLASS_CON, 0, 0, dissect_dop_NULL },
1317   {   1, &hf_dop_protectedTerminateResult, BER_CLASS_CON, 1, 0, dissect_dop_ProtectedTerminateResult },
1318   { 0, NULL, 0, 0, 0, NULL }
1319 };
1320
1321 static int
1322 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_) {
1323   offset = dissect_ber_choice(actx, tree, tvb, offset,
1324                                  TerminateOperationalBindingResult_choice, hf_index, ett_dop_TerminateOperationalBindingResult,
1325                                  NULL);
1326
1327   return offset;
1328 }
1329
1330
1331 static const value_string dop_T_problem_vals[] = {
1332   {   0, "invalidID" },
1333   {   1, "duplicateID" },
1334   {   2, "unsupportedBindingType" },
1335   {   3, "notAllowedForRole" },
1336   {   4, "parametersMissing" },
1337   {   5, "roleAssignment" },
1338   {   6, "invalidStartTime" },
1339   {   7, "invalidEndTime" },
1340   {   8, "invalidAgreement" },
1341   {   9, "currentlyNotDecidable" },
1342   {  10, "modificationNotAllowed" },
1343   { 0, NULL }
1344 };
1345
1346
1347 static int
1348 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_) {
1349   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1350                                   NULL);
1351
1352   return offset;
1353 }
1354
1355
1356
1357 static int
1358 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_) {
1359 #line 159 "dop.cnf"
1360
1361   offset = call_dop_oid_callback("agreement", tvb, offset, actx->pinfo, tree, NULL);
1362
1363
1364
1365   return offset;
1366 }
1367
1368
1369 static const ber_sequence_t OpBindingErrorParam_sequence[] = {
1370   { &hf_dop_problem         , BER_CLASS_CON, 0, 0, dissect_dop_T_problem },
1371   { &hf_dop_bindingType     , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_BindingType },
1372   { &hf_dop_agreementProposal, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_T_agreementProposal },
1373   { &hf_dop_retryAt         , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_dop_Time },
1374   { &hf_dop_securityParameters, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_dap_SecurityParameters },
1375   { &hf_dop_performer       , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_x509if_DistinguishedName },
1376   { &hf_dop_aliasDereferenced, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
1377   { &hf_dop_notification    , BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute },
1378   { NULL, 0, 0, 0, NULL }
1379 };
1380
1381 static int
1382 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_) {
1383   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1384                                    OpBindingErrorParam_sequence, hf_index, ett_dop_OpBindingErrorParam);
1385
1386   return offset;
1387 }
1388
1389
1390 static const ber_sequence_t HierarchicalAgreement_sequence[] = {
1391   { &hf_dop_rdn             , BER_CLASS_CON, 0, 0, dissect_x509if_RelativeDistinguishedName },
1392   { &hf_dop_immediateSuperior, BER_CLASS_CON, 1, 0, dissect_x509if_DistinguishedName },
1393   { NULL, 0, 0, 0, NULL }
1394 };
1395
1396 static int
1397 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_) {
1398   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1399                                    HierarchicalAgreement_sequence, hf_index, ett_dop_HierarchicalAgreement);
1400
1401   return offset;
1402 }
1403
1404
1405 static const ber_sequence_t SET_OF_Attribute_set_of[1] = {
1406   { &hf_dop_entryInfo_item  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_Attribute },
1407 };
1408
1409 static int
1410 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_) {
1411   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1412                                  SET_OF_Attribute_set_of, hf_index, ett_dop_SET_OF_Attribute);
1413
1414   return offset;
1415 }
1416
1417
1418 static const ber_sequence_t SubentryInfo_sequence[] = {
1419   { &hf_dop_rdn             , BER_CLASS_CON, 0, 0, dissect_x509if_RelativeDistinguishedName },
1420   { &hf_dop_info            , BER_CLASS_CON, 1, 0, dissect_dop_SET_OF_Attribute },
1421   { NULL, 0, 0, 0, NULL }
1422 };
1423
1424 static int
1425 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_) {
1426   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1427                                    SubentryInfo_sequence, hf_index, ett_dop_SubentryInfo);
1428
1429   return offset;
1430 }
1431
1432
1433 static const ber_sequence_t SET_OF_SubentryInfo_set_of[1] = {
1434   { &hf_dop_subentries_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_SubentryInfo },
1435 };
1436
1437 static int
1438 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_) {
1439   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1440                                  SET_OF_SubentryInfo_set_of, hf_index, ett_dop_SET_OF_SubentryInfo);
1441
1442   return offset;
1443 }
1444
1445
1446 static const ber_sequence_t Vertex_sequence[] = {
1447   { &hf_dop_rdn             , BER_CLASS_CON, 0, 0, dissect_x509if_RelativeDistinguishedName },
1448   { &hf_dop_admPointInfo    , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
1449   { &hf_dop_subentries      , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_SubentryInfo },
1450   { &hf_dop_accessPoints    , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dsp_MasterAndShadowAccessPoints },
1451   { NULL, 0, 0, 0, NULL }
1452 };
1453
1454 static int
1455 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_) {
1456   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1457                                    Vertex_sequence, hf_index, ett_dop_Vertex);
1458
1459   return offset;
1460 }
1461
1462
1463 static const ber_sequence_t DITcontext_sequence_of[1] = {
1464   { &hf_dop_DITcontext_item , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_Vertex },
1465 };
1466
1467 static int
1468 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_) {
1469   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1470                                       DITcontext_sequence_of, hf_index, ett_dop_DITcontext);
1471
1472   return offset;
1473 }
1474
1475
1476 static const ber_sequence_t SuperiorToSubordinate_sequence[] = {
1477   { &hf_dop_contextPrefixInfo, BER_CLASS_CON, 0, 0, dissect_dop_DITcontext },
1478   { &hf_dop_entryInfo       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
1479   { &hf_dop_immediateSuperiorInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
1480   { NULL, 0, 0, 0, NULL }
1481 };
1482
1483 static int
1484 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_) {
1485   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1486                                    SuperiorToSubordinate_sequence, hf_index, ett_dop_SuperiorToSubordinate);
1487
1488   return offset;
1489 }
1490
1491
1492 static const ber_sequence_t SubordinateToSuperior_sequence[] = {
1493   { &hf_dop_accessPoints    , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dsp_MasterAndShadowAccessPoints },
1494   { &hf_dop_alias           , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_BOOLEAN },
1495   { &hf_dop_entryInfo       , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
1496   { &hf_dop_subentries      , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_SubentryInfo },
1497   { NULL, 0, 0, 0, NULL }
1498 };
1499
1500 static int
1501 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_) {
1502   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1503                                    SubordinateToSuperior_sequence, hf_index, ett_dop_SubordinateToSuperior);
1504
1505   return offset;
1506 }
1507
1508
1509 static const ber_sequence_t SuperiorToSubordinateModification_sequence[] = {
1510   { &hf_dop_contextPrefixInfo, BER_CLASS_CON, 0, 0, dissect_dop_DITcontext },
1511   { &hf_dop_immediateSuperiorInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
1512   { NULL, 0, 0, 0, NULL }
1513 };
1514
1515 static int
1516 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_) {
1517   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1518                                    SuperiorToSubordinateModification_sequence, hf_index, ett_dop_SuperiorToSubordinateModification);
1519
1520   return offset;
1521 }
1522
1523
1524 static const ber_sequence_t NonSpecificHierarchicalAgreement_sequence[] = {
1525   { &hf_dop_immediateSuperior, BER_CLASS_CON, 1, 0, dissect_x509if_DistinguishedName },
1526   { NULL, 0, 0, 0, NULL }
1527 };
1528
1529 static int
1530 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_) {
1531   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1532                                    NonSpecificHierarchicalAgreement_sequence, hf_index, ett_dop_NonSpecificHierarchicalAgreement);
1533
1534   return offset;
1535 }
1536
1537
1538 static const ber_sequence_t NHOBSuperiorToSubordinate_sequence[] = {
1539   { &hf_dop_contextPrefixInfo, BER_CLASS_CON, 0, 0, dissect_dop_DITcontext },
1540   { &hf_dop_immediateSuperiorInfo, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_Attribute },
1541   { NULL, 0, 0, 0, NULL }
1542 };
1543
1544 static int
1545 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_) {
1546   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1547                                    NHOBSuperiorToSubordinate_sequence, hf_index, ett_dop_NHOBSuperiorToSubordinate);
1548
1549   return offset;
1550 }
1551
1552
1553 static const ber_sequence_t NHOBSubordinateToSuperior_sequence[] = {
1554   { &hf_dop_accessPoints    , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dsp_MasterAndShadowAccessPoints },
1555   { &hf_dop_subentries      , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_SubentryInfo },
1556   { NULL, 0, 0, 0, NULL }
1557 };
1558
1559 static int
1560 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_) {
1561   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1562                                    NHOBSubordinateToSuperior_sequence, hf_index, ett_dop_NHOBSubordinateToSuperior);
1563
1564   return offset;
1565 }
1566
1567
1568
1569 static int
1570 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_) {
1571 #line 194 "dop.cnf"
1572   guint32 precedence = 0;
1573
1574     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1575                                   &precedence);
1576
1577
1578   proto_item_append_text(tree, " precedence=%d", precedence);
1579
1580
1581
1582   return offset;
1583 }
1584
1585
1586 static const value_string dop_T_level_vals[] = {
1587   {   0, "none" },
1588   {   1, "simple" },
1589   {   2, "strong" },
1590   { 0, NULL }
1591 };
1592
1593
1594 static int
1595 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_) {
1596   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1597                                   NULL);
1598
1599   return offset;
1600 }
1601
1602
1603
1604 static int
1605 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_) {
1606   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1607                                   NULL);
1608
1609   return offset;
1610 }
1611
1612
1613 static const ber_sequence_t T_basicLevels_sequence[] = {
1614   { &hf_dop_level           , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_dop_T_level },
1615   { &hf_dop_localQualifier  , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_INTEGER },
1616   { &hf_dop_signed          , BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_BOOLEAN },
1617   { NULL, 0, 0, 0, NULL }
1618 };
1619
1620 static int
1621 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_) {
1622   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1623                                    T_basicLevels_sequence, hf_index, ett_dop_T_basicLevels);
1624
1625   return offset;
1626 }
1627
1628
1629
1630 static int
1631 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_) {
1632   offset = dissect_ber_external_type(implicit_tag, tree, tvb, offset, actx, hf_index, NULL);
1633
1634   return offset;
1635 }
1636
1637
1638 static const value_string dop_AuthenticationLevel_vals[] = {
1639   {   0, "basicLevels" },
1640   {   1, "other" },
1641   { 0, NULL }
1642 };
1643
1644 static const ber_choice_t AuthenticationLevel_choice[] = {
1645   {   0, &hf_dop_basicLevels     , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_T_basicLevels },
1646   {   1, &hf_dop_other           , BER_CLASS_UNI, BER_UNI_TAG_EXTERNAL, BER_FLAGS_NOOWNTAG, dissect_dop_EXTERNAL },
1647   { 0, NULL, 0, 0, 0, NULL }
1648 };
1649
1650 static int
1651 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_) {
1652   offset = dissect_ber_choice(actx, tree, tvb, offset,
1653                                  AuthenticationLevel_choice, hf_index, ett_dop_AuthenticationLevel,
1654                                  NULL);
1655
1656   return offset;
1657 }
1658
1659
1660 static const ber_sequence_t SET_OF_AttributeType_set_of[1] = {
1661   { &hf_dop_attributeType_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
1662 };
1663
1664 static int
1665 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_) {
1666   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1667                                  SET_OF_AttributeType_set_of, hf_index, ett_dop_SET_OF_AttributeType);
1668
1669   return offset;
1670 }
1671
1672
1673 static const ber_sequence_t SET_OF_AttributeTypeAndValue_set_of[1] = {
1674   { &hf_dop_attributeValue_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_crmf_AttributeTypeAndValue },
1675 };
1676
1677 static int
1678 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_) {
1679   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1680                                  SET_OF_AttributeTypeAndValue_set_of, hf_index, ett_dop_SET_OF_AttributeTypeAndValue);
1681
1682   return offset;
1683 }
1684
1685
1686 static const ber_sequence_t MaxValueCount_sequence[] = {
1687   { &hf_dop_type            , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
1688   { &hf_dop_maxCount        , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_dop_INTEGER },
1689   { NULL, 0, 0, 0, NULL }
1690 };
1691
1692 static int
1693 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_) {
1694   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1695                                    MaxValueCount_sequence, hf_index, ett_dop_MaxValueCount);
1696
1697   return offset;
1698 }
1699
1700
1701 static const ber_sequence_t SET_OF_MaxValueCount_set_of[1] = {
1702   { &hf_dop_maxValueCount_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_MaxValueCount },
1703 };
1704
1705 static int
1706 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_) {
1707   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1708                                  SET_OF_MaxValueCount_set_of, hf_index, ett_dop_SET_OF_MaxValueCount);
1709
1710   return offset;
1711 }
1712
1713
1714 static const ber_sequence_t RestrictedValue_sequence[] = {
1715   { &hf_dop_type            , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
1716   { &hf_dop_valuesIn        , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
1717   { NULL, 0, 0, 0, NULL }
1718 };
1719
1720 static int
1721 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_) {
1722   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1723                                    RestrictedValue_sequence, hf_index, ett_dop_RestrictedValue);
1724
1725   return offset;
1726 }
1727
1728
1729 static const ber_sequence_t SET_OF_RestrictedValue_set_of[1] = {
1730   { &hf_dop_restrictedBy_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_RestrictedValue },
1731 };
1732
1733 static int
1734 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_) {
1735   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1736                                  SET_OF_RestrictedValue_set_of, hf_index, ett_dop_SET_OF_RestrictedValue);
1737
1738   return offset;
1739 }
1740
1741
1742 static const ber_sequence_t SET_OF_ContextAssertion_set_of[1] = {
1743   { &hf_dop_contexts_item   , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_ContextAssertion },
1744 };
1745
1746 static int
1747 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_) {
1748   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1749                                  SET_OF_ContextAssertion_set_of, hf_index, ett_dop_SET_OF_ContextAssertion);
1750
1751   return offset;
1752 }
1753
1754
1755 static const ber_sequence_t ProtectedItems_sequence[] = {
1756   { &hf_dop_entry           , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dop_NULL },
1757   { &hf_dop_allUserAttributeTypes, BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_NULL },
1758   { &hf_dop_attributeType   , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_AttributeType },
1759   { &hf_dop_allAttributeValues, BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_AttributeType },
1760   { &hf_dop_allUserAttributeTypesAndValues, BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_dop_NULL },
1761   { &hf_dop_attributeValue  , BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_AttributeTypeAndValue },
1762   { &hf_dop_selfValue       , BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_AttributeType },
1763   { &hf_dop_rangeOfValues   , BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_dap_Filter },
1764   { &hf_dop_maxValueCount   , BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_MaxValueCount },
1765   { &hf_dop_maxImmSub       , BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL, dissect_dop_INTEGER },
1766   { &hf_dop_restrictedBy    , BER_CLASS_CON, 10, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_RestrictedValue },
1767   { &hf_dop_contexts        , BER_CLASS_CON, 11, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_ContextAssertion },
1768   { &hf_dop_classes         , BER_CLASS_CON, 12, BER_FLAGS_OPTIONAL, dissect_x509if_Refinement },
1769   { NULL, 0, 0, 0, NULL }
1770 };
1771
1772 static int
1773 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_) {
1774   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1775                                    ProtectedItems_sequence, hf_index, ett_dop_ProtectedItems);
1776
1777   return offset;
1778 }
1779
1780
1781 static const ber_sequence_t SET_OF_NameAndOptionalUID_set_of[1] = {
1782   { &hf_dop_name_item       , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509sat_NameAndOptionalUID },
1783 };
1784
1785 static int
1786 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_) {
1787   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1788                                  SET_OF_NameAndOptionalUID_set_of, hf_index, ett_dop_SET_OF_NameAndOptionalUID);
1789
1790   return offset;
1791 }
1792
1793
1794 static const ber_sequence_t SET_OF_SubtreeSpecification_set_of[1] = {
1795   { &hf_dop_subtree_item    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_SubtreeSpecification },
1796 };
1797
1798 static int
1799 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_) {
1800   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1801                                  SET_OF_SubtreeSpecification_set_of, hf_index, ett_dop_SET_OF_SubtreeSpecification);
1802
1803   return offset;
1804 }
1805
1806
1807 static const ber_sequence_t UserClasses_sequence[] = {
1808   { &hf_dop_allUsers        , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dop_NULL },
1809   { &hf_dop_thisEntry       , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_NULL },
1810   { &hf_dop_name            , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_NameAndOptionalUID },
1811   { &hf_dop_userGroup       , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_NameAndOptionalUID },
1812   { &hf_dop_subtree         , BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_dop_SET_OF_SubtreeSpecification },
1813   { NULL, 0, 0, 0, NULL }
1814 };
1815
1816 static int
1817 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_) {
1818   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1819                                    UserClasses_sequence, hf_index, ett_dop_UserClasses);
1820
1821   return offset;
1822 }
1823
1824
1825 static const asn_namedbit GrantsAndDenials_bits[] = {
1826   {  0, &hf_dop_GrantsAndDenials_grantAdd, -1, -1, "grantAdd", NULL },
1827   {  1, &hf_dop_GrantsAndDenials_denyAdd, -1, -1, "denyAdd", NULL },
1828   {  2, &hf_dop_GrantsAndDenials_grantDiscloseOnError, -1, -1, "grantDiscloseOnError", NULL },
1829   {  3, &hf_dop_GrantsAndDenials_denyDiscloseOnError, -1, -1, "denyDiscloseOnError", NULL },
1830   {  4, &hf_dop_GrantsAndDenials_grantRead, -1, -1, "grantRead", NULL },
1831   {  5, &hf_dop_GrantsAndDenials_denyRead, -1, -1, "denyRead", NULL },
1832   {  6, &hf_dop_GrantsAndDenials_grantRemove, -1, -1, "grantRemove", NULL },
1833   {  7, &hf_dop_GrantsAndDenials_denyRemove, -1, -1, "denyRemove", NULL },
1834   {  8, &hf_dop_GrantsAndDenials_grantBrowse, -1, -1, "grantBrowse", NULL },
1835   {  9, &hf_dop_GrantsAndDenials_denyBrowse, -1, -1, "denyBrowse", NULL },
1836   { 10, &hf_dop_GrantsAndDenials_grantExport, -1, -1, "grantExport", NULL },
1837   { 11, &hf_dop_GrantsAndDenials_denyExport, -1, -1, "denyExport", NULL },
1838   { 12, &hf_dop_GrantsAndDenials_grantImport, -1, -1, "grantImport", NULL },
1839   { 13, &hf_dop_GrantsAndDenials_denyImport, -1, -1, "denyImport", NULL },
1840   { 14, &hf_dop_GrantsAndDenials_grantModify, -1, -1, "grantModify", NULL },
1841   { 15, &hf_dop_GrantsAndDenials_denyModify, -1, -1, "denyModify", NULL },
1842   { 16, &hf_dop_GrantsAndDenials_grantRename, -1, -1, "grantRename", NULL },
1843   { 17, &hf_dop_GrantsAndDenials_denyRename, -1, -1, "denyRename", NULL },
1844   { 18, &hf_dop_GrantsAndDenials_grantReturnDN, -1, -1, "grantReturnDN", NULL },
1845   { 19, &hf_dop_GrantsAndDenials_denyReturnDN, -1, -1, "denyReturnDN", NULL },
1846   { 20, &hf_dop_GrantsAndDenials_grantCompare, -1, -1, "grantCompare", NULL },
1847   { 21, &hf_dop_GrantsAndDenials_denyCompare, -1, -1, "denyCompare", NULL },
1848   { 22, &hf_dop_GrantsAndDenials_grantFilterMatch, -1, -1, "grantFilterMatch", NULL },
1849   { 23, &hf_dop_GrantsAndDenials_denyFilterMatch, -1, -1, "denyFilterMatch", NULL },
1850   { 24, &hf_dop_GrantsAndDenials_grantInvoke, -1, -1, "grantInvoke", NULL },
1851   { 25, &hf_dop_GrantsAndDenials_denyInvoke, -1, -1, "denyInvoke", NULL },
1852   { 0, NULL, 0, 0, NULL, NULL }
1853 };
1854
1855 static int
1856 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_) {
1857   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
1858                                     GrantsAndDenials_bits, hf_index, ett_dop_GrantsAndDenials,
1859                                     NULL);
1860
1861   return offset;
1862 }
1863
1864
1865 static const ber_sequence_t ItemPermission_sequence[] = {
1866   { &hf_dop_precedence      , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_Precedence },
1867   { &hf_dop_userClasses     , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_UserClasses },
1868   { &hf_dop_grantsAndDenials, BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_GrantsAndDenials },
1869   { NULL, 0, 0, 0, NULL }
1870 };
1871
1872 static int
1873 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_) {
1874   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1875                                    ItemPermission_sequence, hf_index, ett_dop_ItemPermission);
1876
1877   return offset;
1878 }
1879
1880
1881 static const ber_sequence_t SET_OF_ItemPermission_set_of[1] = {
1882   { &hf_dop_itemPermissions_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ItemPermission },
1883 };
1884
1885 static int
1886 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_) {
1887   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1888                                  SET_OF_ItemPermission_set_of, hf_index, ett_dop_SET_OF_ItemPermission);
1889
1890   return offset;
1891 }
1892
1893
1894 static const ber_sequence_t T_itemFirst_sequence[] = {
1895   { &hf_dop_protectedItems  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ProtectedItems },
1896   { &hf_dop_itemPermissions , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dop_SET_OF_ItemPermission },
1897   { NULL, 0, 0, 0, NULL }
1898 };
1899
1900 static int
1901 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_) {
1902   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1903                                    T_itemFirst_sequence, hf_index, ett_dop_T_itemFirst);
1904
1905   return offset;
1906 }
1907
1908
1909 static const ber_sequence_t UserPermission_sequence[] = {
1910   { &hf_dop_precedence      , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dop_Precedence },
1911   { &hf_dop_protectedItems  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_ProtectedItems },
1912   { &hf_dop_grantsAndDenials, BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_dop_GrantsAndDenials },
1913   { NULL, 0, 0, 0, NULL }
1914 };
1915
1916 static int
1917 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_) {
1918   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1919                                    UserPermission_sequence, hf_index, ett_dop_UserPermission);
1920
1921   return offset;
1922 }
1923
1924
1925 static const ber_sequence_t SET_OF_UserPermission_set_of[1] = {
1926   { &hf_dop_userPermissions_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_UserPermission },
1927 };
1928
1929 static int
1930 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_) {
1931   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1932                                  SET_OF_UserPermission_set_of, hf_index, ett_dop_SET_OF_UserPermission);
1933
1934   return offset;
1935 }
1936
1937
1938 static const ber_sequence_t T_userFirst_sequence[] = {
1939   { &hf_dop_userClasses     , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_dop_UserClasses },
1940   { &hf_dop_userPermissions , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dop_SET_OF_UserPermission },
1941   { NULL, 0, 0, 0, NULL }
1942 };
1943
1944 static int
1945 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_) {
1946   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1947                                    T_userFirst_sequence, hf_index, ett_dop_T_userFirst);
1948
1949   return offset;
1950 }
1951
1952
1953 static const value_string dop_T_itemOrUserFirst_vals[] = {
1954   {   0, "itemFirst" },
1955   {   1, "userFirst" },
1956   { 0, NULL }
1957 };
1958
1959 static const ber_choice_t T_itemOrUserFirst_choice[] = {
1960   {   0, &hf_dop_itemFirst       , BER_CLASS_CON, 0, 0, dissect_dop_T_itemFirst },
1961   {   1, &hf_dop_userFirst       , BER_CLASS_CON, 1, 0, dissect_dop_T_userFirst },
1962   { 0, NULL, 0, 0, 0, NULL }
1963 };
1964
1965 static int
1966 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_) {
1967   offset = dissect_ber_choice(actx, tree, tvb, offset,
1968                                  T_itemOrUserFirst_choice, hf_index, ett_dop_T_itemOrUserFirst,
1969                                  NULL);
1970
1971   return offset;
1972 }
1973
1974
1975 static const ber_sequence_t ACIItem_sequence[] = {
1976   { &hf_dop_identificationTag, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_x509sat_DirectoryString },
1977   { &hf_dop_precedence      , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_dop_Precedence },
1978   { &hf_dop_authenticationLevel, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_AuthenticationLevel },
1979   { &hf_dop_itemOrUserFirst , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_dop_T_itemOrUserFirst },
1980   { NULL, 0, 0, 0, NULL }
1981 };
1982
1983 static int
1984 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_) {
1985   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1986                                    ACIItem_sequence, hf_index, ett_dop_ACIItem);
1987
1988   return offset;
1989 }
1990
1991 /*--- PDUs ---*/
1992
1993 static void dissect_DSEType_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1994   asn1_ctx_t asn1_ctx;
1995   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1996   dissect_dop_DSEType(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_DSEType_PDU);
1997 }
1998 static void dissect_SupplierInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1999   asn1_ctx_t asn1_ctx;
2000   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2001   dissect_dop_SupplierInformation(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_SupplierInformation_PDU);
2002 }
2003 static void dissect_ConsumerInformation_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2004   asn1_ctx_t asn1_ctx;
2005   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2006   dissect_dop_ConsumerInformation(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_ConsumerInformation_PDU);
2007 }
2008 static void dissect_SupplierAndConsumers_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2009   asn1_ctx_t asn1_ctx;
2010   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2011   dissect_dop_SupplierAndConsumers(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_SupplierAndConsumers_PDU);
2012 }
2013 static void dissect_HierarchicalAgreement_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2014   asn1_ctx_t asn1_ctx;
2015   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2016   dissect_dop_HierarchicalAgreement(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_HierarchicalAgreement_PDU);
2017 }
2018 static void dissect_SuperiorToSubordinate_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2019   asn1_ctx_t asn1_ctx;
2020   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2021   dissect_dop_SuperiorToSubordinate(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_SuperiorToSubordinate_PDU);
2022 }
2023 static void dissect_SubordinateToSuperior_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2024   asn1_ctx_t asn1_ctx;
2025   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2026   dissect_dop_SubordinateToSuperior(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_SubordinateToSuperior_PDU);
2027 }
2028 static void dissect_SuperiorToSubordinateModification_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2029   asn1_ctx_t asn1_ctx;
2030   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2031   dissect_dop_SuperiorToSubordinateModification(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_SuperiorToSubordinateModification_PDU);
2032 }
2033 static void dissect_NonSpecificHierarchicalAgreement_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2034   asn1_ctx_t asn1_ctx;
2035   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2036   dissect_dop_NonSpecificHierarchicalAgreement(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_NonSpecificHierarchicalAgreement_PDU);
2037 }
2038 static void dissect_NHOBSuperiorToSubordinate_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2039   asn1_ctx_t asn1_ctx;
2040   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2041   dissect_dop_NHOBSuperiorToSubordinate(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_NHOBSuperiorToSubordinate_PDU);
2042 }
2043 static void dissect_NHOBSubordinateToSuperior_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2044   asn1_ctx_t asn1_ctx;
2045   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2046   dissect_dop_NHOBSubordinateToSuperior(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_NHOBSubordinateToSuperior_PDU);
2047 }
2048 static void dissect_ACIItem_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
2049   asn1_ctx_t asn1_ctx;
2050   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2051   dissect_dop_ACIItem(FALSE, tvb, 0, &asn1_ctx, tree, hf_dop_ACIItem_PDU);
2052 }
2053
2054
2055 /*--- End of included file: packet-dop-fn.c ---*/
2056 #line 93 "packet-dop-template.c"
2057
2058 static int
2059 call_dop_oid_callback(char *base_string, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, char *col_info)
2060 {
2061   char* binding_param;
2062
2063   binding_param = ep_strdup_printf("%s.%s", base_string, binding_type ? binding_type : "");
2064
2065   if (col_info && (check_col(pinfo->cinfo, COL_INFO))) 
2066     col_append_fstr(pinfo->cinfo, COL_INFO, " %s", col_info);
2067
2068   if (dissector_try_string(dop_dissector_table, binding_param, tvb, pinfo, tree)) {
2069      offset += tvb_length_remaining (tvb, offset);
2070   } else {
2071      proto_item *item=NULL;
2072      proto_tree *next_tree=NULL;
2073
2074      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>");
2075      if (item) {
2076         next_tree = proto_item_add_subtree(item, ett_dop_unknown);
2077      }
2078      offset = dissect_unknown_ber(pinfo, tvb, offset, next_tree);
2079      expert_add_info_format(pinfo, item, PI_UNDECODED, PI_WARN, "Unknown binding-parameter");
2080    }
2081
2082    return offset;
2083 }
2084
2085
2086 /*
2087 * Dissect DOP PDUs inside a ROS PDUs
2088 */
2089 static void
2090 dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
2091 {
2092         int offset = 0;
2093         int old_offset;
2094         proto_item *item=NULL;
2095         proto_tree *tree=NULL;
2096         int (*dop_dissector)(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index _U_) = NULL;
2097         char *dop_op_name;
2098         asn1_ctx_t asn1_ctx;
2099
2100         asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
2101
2102         /* do we have operation information from the ROS dissector?  */
2103         if( !pinfo->private_data ){
2104                 if(parent_tree){
2105                         proto_tree_add_text(parent_tree, tvb, offset, -1,
2106                                 "Internal error: can't get operation information from ROS dissector.");
2107                 } 
2108                 return  ;
2109         } else {
2110                 session  = ( (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data) );
2111         }
2112
2113         if(parent_tree){
2114                 item = proto_tree_add_item(parent_tree, proto_dop, tvb, 0, -1, FALSE);
2115                 tree = proto_item_add_subtree(item, ett_dop);
2116         }
2117         if (check_col(pinfo->cinfo, COL_PROTOCOL))
2118                 col_set_str(pinfo->cinfo, COL_PROTOCOL, "DOP");
2119         if (check_col(pinfo->cinfo, COL_INFO))
2120                 col_clear(pinfo->cinfo, COL_INFO);
2121
2122         switch(session->ros_op & ROS_OP_MASK) {
2123         case (ROS_OP_BIND | ROS_OP_ARGUMENT):   /*  BindInvoke */
2124           dop_dissector = dissect_dop_DSAOperationalManagementBindArgument;
2125           dop_op_name = "DSA-Operational-Bind-Argument";
2126           break;
2127         case (ROS_OP_BIND | ROS_OP_RESULT):     /*  BindResult */
2128           dop_dissector = dissect_dop_DSAOperationalManagementBindResult;
2129           dop_op_name = "DSA-Operational-Bind-Result";
2130           break;
2131         case (ROS_OP_BIND | ROS_OP_ERROR):      /*  BindError */
2132           dop_dissector = dissect_dop_DSAOperationalManagementBindError;
2133           dop_op_name = "DSA-Operational-Management-Bind-Error";
2134           break;
2135         case (ROS_OP_INVOKE | ROS_OP_ARGUMENT): /*  Invoke Argument */
2136           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
2137           case 100: /* establish */
2138             dop_dissector = dissect_dop_EstablishOperationalBindingArgument;
2139             dop_op_name = "Establish-Operational-Binding-Argument";
2140             break;
2141           case 101: /* terminate */
2142             dop_dissector = dissect_dop_TerminateOperationalBindingArgument;
2143             dop_op_name = "Terminate-Operational-Binding-Argument";
2144             break;
2145           case 102: /* modify */
2146             dop_dissector = dissect_dop_ModifyOperationalBindingArgument;
2147             dop_op_name = "Modify-Operational-Binding-Argument";
2148             break;
2149           default:
2150             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Argument opcode (%d)",
2151                                 session->ros_op & ROS_OP_OPCODE_MASK);
2152             break;
2153           }
2154           break;
2155         case (ROS_OP_INVOKE | ROS_OP_RESULT):   /*  Return Result */
2156           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
2157           case 100: /* establish */
2158             dop_dissector = dissect_dop_EstablishOperationalBindingResult;
2159             dop_op_name = "Establish-Operational-Binding-Result";
2160             break;
2161           case 101: /* terminate */
2162             dop_dissector = dissect_dop_TerminateOperationalBindingResult;
2163             dop_op_name = "Terminate-Operational-Binding-Result";
2164             break;
2165           case 102: /* modify */
2166             dop_dissector = dissect_dop_ModifyOperationalBindingResult;
2167             dop_op_name = "Modify-Operational-Binding-Result";
2168             break;
2169           default:
2170             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Result opcode (%d)",
2171                                 session->ros_op & ROS_OP_OPCODE_MASK);
2172             break;
2173           }
2174           break;
2175         case (ROS_OP_INVOKE | ROS_OP_ERROR):    /*  Return Error */
2176           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
2177           case 100: /* operational-binding */
2178             dop_dissector = dissect_dop_OpBindingErrorParam;
2179             dop_op_name = "Operational-Binding-Error";
2180             break;
2181           default:
2182             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Error opcode (%d)",
2183                                 session->ros_op & ROS_OP_OPCODE_MASK);
2184             break;
2185           }
2186           break;
2187         default:
2188           proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP PDU");
2189           return;
2190         }
2191
2192         if(dop_dissector) {
2193           if (check_col(pinfo->cinfo, COL_INFO))
2194             col_set_str(pinfo->cinfo, COL_INFO, dop_op_name);
2195
2196           while (tvb_reported_length_remaining(tvb, offset) > 0){
2197             old_offset=offset;
2198             offset=(*dop_dissector)(FALSE, tvb, offset, &asn1_ctx, tree, -1);
2199             if(offset == old_offset){
2200               proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DOP PDU");
2201               offset = tvb_length(tvb);
2202               break;
2203             }
2204           }
2205         }
2206 }
2207
2208
2209
2210 /*--- proto_register_dop -------------------------------------------*/
2211 void proto_register_dop(void) {
2212
2213   /* List of fields */
2214   static hf_register_info hf[] =
2215   {
2216
2217 /*--- Included file: packet-dop-hfarr.c ---*/
2218 #line 1 "packet-dop-hfarr.c"
2219     { &hf_dop_DSEType_PDU,
2220       { "DSEType", "dop.DSEType",
2221         FT_BYTES, BASE_HEX, NULL, 0,
2222         "dop.DSEType", HFILL }},
2223     { &hf_dop_SupplierInformation_PDU,
2224       { "SupplierInformation", "dop.SupplierInformation",
2225         FT_NONE, BASE_NONE, NULL, 0,
2226         "dop.SupplierInformation", HFILL }},
2227     { &hf_dop_ConsumerInformation_PDU,
2228       { "ConsumerInformation", "dop.ConsumerInformation",
2229         FT_NONE, BASE_NONE, NULL, 0,
2230         "dop.ConsumerInformation", HFILL }},
2231     { &hf_dop_SupplierAndConsumers_PDU,
2232       { "SupplierAndConsumers", "dop.SupplierAndConsumers",
2233         FT_NONE, BASE_NONE, NULL, 0,
2234         "dop.SupplierAndConsumers", HFILL }},
2235     { &hf_dop_HierarchicalAgreement_PDU,
2236       { "HierarchicalAgreement", "dop.HierarchicalAgreement",
2237         FT_NONE, BASE_NONE, NULL, 0,
2238         "dop.HierarchicalAgreement", HFILL }},
2239     { &hf_dop_SuperiorToSubordinate_PDU,
2240       { "SuperiorToSubordinate", "dop.SuperiorToSubordinate",
2241         FT_NONE, BASE_NONE, NULL, 0,
2242         "dop.SuperiorToSubordinate", HFILL }},
2243     { &hf_dop_SubordinateToSuperior_PDU,
2244       { "SubordinateToSuperior", "dop.SubordinateToSuperior",
2245         FT_NONE, BASE_NONE, NULL, 0,
2246         "dop.SubordinateToSuperior", HFILL }},
2247     { &hf_dop_SuperiorToSubordinateModification_PDU,
2248       { "SuperiorToSubordinateModification", "dop.SuperiorToSubordinateModification",
2249         FT_NONE, BASE_NONE, NULL, 0,
2250         "dop.SuperiorToSubordinateModification", HFILL }},
2251     { &hf_dop_NonSpecificHierarchicalAgreement_PDU,
2252       { "NonSpecificHierarchicalAgreement", "dop.NonSpecificHierarchicalAgreement",
2253         FT_NONE, BASE_NONE, NULL, 0,
2254         "dop.NonSpecificHierarchicalAgreement", HFILL }},
2255     { &hf_dop_NHOBSuperiorToSubordinate_PDU,
2256       { "NHOBSuperiorToSubordinate", "dop.NHOBSuperiorToSubordinate",
2257         FT_NONE, BASE_NONE, NULL, 0,
2258         "dop.NHOBSuperiorToSubordinate", HFILL }},
2259     { &hf_dop_NHOBSubordinateToSuperior_PDU,
2260       { "NHOBSubordinateToSuperior", "dop.NHOBSubordinateToSuperior",
2261         FT_NONE, BASE_NONE, NULL, 0,
2262         "dop.NHOBSubordinateToSuperior", HFILL }},
2263     { &hf_dop_ACIItem_PDU,
2264       { "ACIItem", "dop.ACIItem",
2265         FT_NONE, BASE_NONE, NULL, 0,
2266         "dop.ACIItem", HFILL }},
2267     { &hf_dop_ae_title,
2268       { "ae-title", "dop.ae_title",
2269         FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
2270         "x509if.Name", HFILL }},
2271     { &hf_dop_address,
2272       { "address", "dop.address",
2273         FT_NONE, BASE_NONE, NULL, 0,
2274         "x509sat.PresentationAddress", HFILL }},
2275     { &hf_dop_protocolInformation,
2276       { "protocolInformation", "dop.protocolInformation",
2277         FT_UINT32, BASE_DEC, NULL, 0,
2278         "dop.SET_OF_ProtocolInformation", HFILL }},
2279     { &hf_dop_protocolInformation_item,
2280       { "Item", "dop.protocolInformation_item",
2281         FT_NONE, BASE_NONE, NULL, 0,
2282         "x509sat.ProtocolInformation", HFILL }},
2283     { &hf_dop_agreementID,
2284       { "agreementID", "dop.agreementID",
2285         FT_NONE, BASE_NONE, NULL, 0,
2286         "dop.OperationalBindingID", HFILL }},
2287     { &hf_dop_supplier_is_master,
2288       { "supplier-is-master", "dop.supplier_is_master",
2289         FT_BOOLEAN, 8, NULL, 0,
2290         "dop.BOOLEAN", HFILL }},
2291     { &hf_dop_non_supplying_master,
2292       { "non-supplying-master", "dop.non_supplying_master",
2293         FT_NONE, BASE_NONE, NULL, 0,
2294         "dsp.AccessPoint", HFILL }},
2295     { &hf_dop_consumers,
2296       { "consumers", "dop.consumers",
2297         FT_UINT32, BASE_DEC, NULL, 0,
2298         "dop.SET_OF_AccessPoint", HFILL }},
2299     { &hf_dop_consumers_item,
2300       { "Item", "dop.consumers_item",
2301         FT_NONE, BASE_NONE, NULL, 0,
2302         "dsp.AccessPoint", HFILL }},
2303     { &hf_dop_bindingType,
2304       { "bindingType", "dop.bindingType",
2305         FT_OID, BASE_NONE, NULL, 0,
2306         "dop.BindingType", HFILL }},
2307     { &hf_dop_bindingID,
2308       { "bindingID", "dop.bindingID",
2309         FT_NONE, BASE_NONE, NULL, 0,
2310         "dop.OperationalBindingID", HFILL }},
2311     { &hf_dop_accessPoint,
2312       { "accessPoint", "dop.accessPoint",
2313         FT_NONE, BASE_NONE, NULL, 0,
2314         "dsp.AccessPoint", HFILL }},
2315     { &hf_dop_establishInitiator,
2316       { "initiator", "dop.initiator",
2317         FT_UINT32, BASE_DEC, VALS(dop_EstablishArgumentInitiator_vals), 0,
2318         "dop.EstablishArgumentInitiator", HFILL }},
2319     { &hf_dop_establishSymmetric,
2320       { "symmetric", "dop.symmetric",
2321         FT_NONE, BASE_NONE, NULL, 0,
2322         "dop.EstablishSymmetric", HFILL }},
2323     { &hf_dop_establishRoleAInitiates,
2324       { "roleA-initiates", "dop.roleA_initiates",
2325         FT_NONE, BASE_NONE, NULL, 0,
2326         "dop.EstablishRoleAInitiates", HFILL }},
2327     { &hf_dop_establishRoleBInitiates,
2328       { "roleB-initiates", "dop.roleB_initiates",
2329         FT_NONE, BASE_NONE, NULL, 0,
2330         "dop.EstablishRoleBInitiates", HFILL }},
2331     { &hf_dop_agreement,
2332       { "agreement", "dop.agreement",
2333         FT_NONE, BASE_NONE, NULL, 0,
2334         "dop.T_agreement", HFILL }},
2335     { &hf_dop_valid,
2336       { "valid", "dop.valid",
2337         FT_NONE, BASE_NONE, NULL, 0,
2338         "dop.Validity", HFILL }},
2339     { &hf_dop_securityParameters,
2340       { "securityParameters", "dop.securityParameters",
2341         FT_NONE, BASE_NONE, NULL, 0,
2342         "dap.SecurityParameters", HFILL }},
2343     { &hf_dop_unsignedEstablishOperationalBindingArgument,
2344       { "unsignedEstablishOperationalBindingArgument", "dop.unsignedEstablishOperationalBindingArgument",
2345         FT_NONE, BASE_NONE, NULL, 0,
2346         "dop.EstablishOperationalBindingArgumentData", HFILL }},
2347     { &hf_dop_signedEstablishOperationalBindingArgument,
2348       { "signedEstablishOperationalBindingArgument", "dop.signedEstablishOperationalBindingArgument",
2349         FT_NONE, BASE_NONE, NULL, 0,
2350         "dop.T_signedEstablishOperationalBindingArgument", HFILL }},
2351     { &hf_dop_establishOperationalBindingArgument,
2352       { "establishOperationalBindingArgument", "dop.establishOperationalBindingArgument",
2353         FT_NONE, BASE_NONE, NULL, 0,
2354         "dop.EstablishOperationalBindingArgumentData", HFILL }},
2355     { &hf_dop_algorithmIdentifier,
2356       { "algorithmIdentifier", "dop.algorithmIdentifier",
2357         FT_NONE, BASE_NONE, NULL, 0,
2358         "x509af.AlgorithmIdentifier", HFILL }},
2359     { &hf_dop_encrypted,
2360       { "encrypted", "dop.encrypted",
2361         FT_BYTES, BASE_HEX, NULL, 0,
2362         "dop.BIT_STRING", HFILL }},
2363     { &hf_dop_identifier,
2364       { "identifier", "dop.identifier",
2365         FT_INT32, BASE_DEC, NULL, 0,
2366         "dop.T_identifier", HFILL }},
2367     { &hf_dop_version,
2368       { "version", "dop.version",
2369         FT_INT32, BASE_DEC, NULL, 0,
2370         "dop.T_version", HFILL }},
2371     { &hf_dop_validFrom,
2372       { "validFrom", "dop.validFrom",
2373         FT_UINT32, BASE_DEC, VALS(dop_T_validFrom_vals), 0,
2374         "dop.T_validFrom", HFILL }},
2375     { &hf_dop_now,
2376       { "now", "dop.now",
2377         FT_NONE, BASE_NONE, NULL, 0,
2378         "dop.NULL", HFILL }},
2379     { &hf_dop_time,
2380       { "time", "dop.time",
2381         FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
2382         "dop.Time", HFILL }},
2383     { &hf_dop_validUntil,
2384       { "validUntil", "dop.validUntil",
2385         FT_UINT32, BASE_DEC, VALS(dop_T_validUntil_vals), 0,
2386         "dop.T_validUntil", HFILL }},
2387     { &hf_dop_explicitTermination,
2388       { "explicitTermination", "dop.explicitTermination",
2389         FT_NONE, BASE_NONE, NULL, 0,
2390         "dop.NULL", HFILL }},
2391     { &hf_dop_utcTime,
2392       { "utcTime", "dop.utcTime",
2393         FT_STRING, BASE_NONE, NULL, 0,
2394         "dop.UTCTime", HFILL }},
2395     { &hf_dop_generalizedTime,
2396       { "generalizedTime", "dop.generalizedTime",
2397         FT_STRING, BASE_NONE, NULL, 0,
2398         "dop.GeneralizedTime", HFILL }},
2399     { &hf_dop_initiator,
2400       { "initiator", "dop.initiator",
2401         FT_UINT32, BASE_DEC, VALS(dop_T_initiator_vals), 0,
2402         "dop.T_initiator", HFILL }},
2403     { &hf_dop_symmetric,
2404       { "symmetric", "dop.symmetric",
2405         FT_NONE, BASE_NONE, NULL, 0,
2406         "dop.T_symmetric", HFILL }},
2407     { &hf_dop_roleA_replies,
2408       { "roleA-replies", "dop.roleA_replies",
2409         FT_NONE, BASE_NONE, NULL, 0,
2410         "dop.T_roleA_replies", HFILL }},
2411     { &hf_dop_roleB_replies,
2412       { "roleB-replies", "dop.roleB_replies",
2413         FT_NONE, BASE_NONE, NULL, 0,
2414         "dop.T_roleB_replies", HFILL }},
2415     { &hf_dop_performer,
2416       { "performer", "dop.performer",
2417         FT_UINT32, BASE_DEC, NULL, 0,
2418         "x509if.DistinguishedName", HFILL }},
2419     { &hf_dop_aliasDereferenced,
2420       { "aliasDereferenced", "dop.aliasDereferenced",
2421         FT_BOOLEAN, 8, NULL, 0,
2422         "dop.BOOLEAN", HFILL }},
2423     { &hf_dop_notification,
2424       { "notification", "dop.notification",
2425         FT_UINT32, BASE_DEC, NULL, 0,
2426         "dop.SEQUENCE_SIZE_1_MAX_OF_Attribute", HFILL }},
2427     { &hf_dop_notification_item,
2428       { "Item", "dop.notification_item",
2429         FT_NONE, BASE_NONE, NULL, 0,
2430         "x509if.Attribute", HFILL }},
2431     { &hf_dop_modifyInitiator,
2432       { "initiator", "dop.initiator",
2433         FT_UINT32, BASE_DEC, VALS(dop_ModifyArgumentInitiator_vals), 0,
2434         "dop.ModifyArgumentInitiator", HFILL }},
2435     { &hf_dop_modifySymmetric,
2436       { "symmetric", "dop.symmetric",
2437         FT_NONE, BASE_NONE, NULL, 0,
2438         "dop.ModifySymmetric", HFILL }},
2439     { &hf_dop_modifyRoleAInitiates,
2440       { "roleA-initiates", "dop.roleA_initiates",
2441         FT_NONE, BASE_NONE, NULL, 0,
2442         "dop.ModifyRoleAInitiates", HFILL }},
2443     { &hf_dop_modifyRoleBInitiates,
2444       { "roleB-initiates", "dop.roleB_initiates",
2445         FT_NONE, BASE_NONE, NULL, 0,
2446         "dop.ModifyRoleBInitiates", HFILL }},
2447     { &hf_dop_newBindingID,
2448       { "newBindingID", "dop.newBindingID",
2449         FT_NONE, BASE_NONE, NULL, 0,
2450         "dop.OperationalBindingID", HFILL }},
2451     { &hf_dop_argumentNewAgreement,
2452       { "newAgreement", "dop.newAgreement",
2453         FT_NONE, BASE_NONE, NULL, 0,
2454         "dop.ArgumentNewAgreement", HFILL }},
2455     { &hf_dop_unsignedModifyOperationalBindingArgument,
2456       { "unsignedModifyOperationalBindingArgument", "dop.unsignedModifyOperationalBindingArgument",
2457         FT_NONE, BASE_NONE, NULL, 0,
2458         "dop.ModifyOperationalBindingArgumentData", HFILL }},
2459     { &hf_dop_signedModifyOperationalBindingArgument,
2460       { "signedModifyOperationalBindingArgument", "dop.signedModifyOperationalBindingArgument",
2461         FT_NONE, BASE_NONE, NULL, 0,
2462         "dop.T_signedModifyOperationalBindingArgument", HFILL }},
2463     { &hf_dop_modifyOperationalBindingArgument,
2464       { "modifyOperationalBindingArgument", "dop.modifyOperationalBindingArgument",
2465         FT_NONE, BASE_NONE, NULL, 0,
2466         "dop.ModifyOperationalBindingArgumentData", HFILL }},
2467     { &hf_dop_null,
2468       { "null", "dop.null",
2469         FT_NONE, BASE_NONE, NULL, 0,
2470         "dop.NULL", HFILL }},
2471     { &hf_dop_protectedModifyResult,
2472       { "protected", "dop.protected",
2473         FT_NONE, BASE_NONE, NULL, 0,
2474         "dop.ProtectedModifyResult", HFILL }},
2475     { &hf_dop_modifyOperationalBindingResultData,
2476       { "modifyOperationalBindingResultData", "dop.modifyOperationalBindingResultData",
2477         FT_NONE, BASE_NONE, NULL, 0,
2478         "dop.ModifyOperationalBindingResultData", HFILL }},
2479     { &hf_dop_resultNewAgreement,
2480       { "newAgreement", "dop.newAgreement",
2481         FT_NONE, BASE_NONE, NULL, 0,
2482         "dop.ResultNewAgreement", HFILL }},
2483     { &hf_dop_terminateInitiator,
2484       { "initiator", "dop.initiator",
2485         FT_UINT32, BASE_DEC, VALS(dop_TerminateArgumentInitiator_vals), 0,
2486         "dop.TerminateArgumentInitiator", HFILL }},
2487     { &hf_dop_terminateSymmetric,
2488       { "symmetric", "dop.symmetric",
2489         FT_NONE, BASE_NONE, NULL, 0,
2490         "dop.TerminateSymmetric", HFILL }},
2491     { &hf_dop_terminateRoleAInitiates,
2492       { "roleA-initiates", "dop.roleA_initiates",
2493         FT_NONE, BASE_NONE, NULL, 0,
2494         "dop.TerminateRoleAInitiates", HFILL }},
2495     { &hf_dop_terminateRoleBInitiates,
2496       { "roleB-initiates", "dop.roleB_initiates",
2497         FT_NONE, BASE_NONE, NULL, 0,
2498         "dop.TerminateRoleBInitiates", HFILL }},
2499     { &hf_dop_terminateAtTime,
2500       { "terminateAt", "dop.terminateAt",
2501         FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
2502         "dop.Time", HFILL }},
2503     { &hf_dop_unsignedTerminateOperationalBindingArgument,
2504       { "unsignedTerminateOperationalBindingArgument", "dop.unsignedTerminateOperationalBindingArgument",
2505         FT_NONE, BASE_NONE, NULL, 0,
2506         "dop.TerminateOperationalBindingArgumentData", HFILL }},
2507     { &hf_dop_signedTerminateOperationalBindingArgument,
2508       { "signedTerminateOperationalBindingArgument", "dop.signedTerminateOperationalBindingArgument",
2509         FT_NONE, BASE_NONE, NULL, 0,
2510         "dop.T_signedTerminateOperationalBindingArgument", HFILL }},
2511     { &hf_dop_terminateOperationalBindingArgument,
2512       { "terminateOperationalBindingArgument", "dop.terminateOperationalBindingArgument",
2513         FT_NONE, BASE_NONE, NULL, 0,
2514         "dop.TerminateOperationalBindingArgumentData", HFILL }},
2515     { &hf_dop_protectedTerminateResult,
2516       { "protected", "dop.protected",
2517         FT_NONE, BASE_NONE, NULL, 0,
2518         "dop.ProtectedTerminateResult", HFILL }},
2519     { &hf_dop_terminateOperationalBindingResultData,
2520       { "terminateOperationalBindingResultData", "dop.terminateOperationalBindingResultData",
2521         FT_NONE, BASE_NONE, NULL, 0,
2522         "dop.TerminateOperationalBindingResultData", HFILL }},
2523     { &hf_dop_terminateAtGeneralizedTime,
2524       { "terminateAt", "dop.terminateAt",
2525         FT_STRING, BASE_NONE, NULL, 0,
2526         "dop.GeneralizedTime", HFILL }},
2527     { &hf_dop_problem,
2528       { "problem", "dop.problem",
2529         FT_UINT32, BASE_DEC, VALS(dop_T_problem_vals), 0,
2530         "dop.T_problem", HFILL }},
2531     { &hf_dop_agreementProposal,
2532       { "agreementProposal", "dop.agreementProposal",
2533         FT_NONE, BASE_NONE, NULL, 0,
2534         "dop.T_agreementProposal", HFILL }},
2535     { &hf_dop_retryAt,
2536       { "retryAt", "dop.retryAt",
2537         FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
2538         "dop.Time", HFILL }},
2539     { &hf_dop_rdn,
2540       { "rdn", "dop.rdn",
2541         FT_UINT32, BASE_DEC, NULL, 0,
2542         "x509if.RelativeDistinguishedName", HFILL }},
2543     { &hf_dop_immediateSuperior,
2544       { "immediateSuperior", "dop.immediateSuperior",
2545         FT_UINT32, BASE_DEC, NULL, 0,
2546         "x509if.DistinguishedName", HFILL }},
2547     { &hf_dop_contextPrefixInfo,
2548       { "contextPrefixInfo", "dop.contextPrefixInfo",
2549         FT_UINT32, BASE_DEC, NULL, 0,
2550         "dop.DITcontext", HFILL }},
2551     { &hf_dop_entryInfo,
2552       { "entryInfo", "dop.entryInfo",
2553         FT_UINT32, BASE_DEC, NULL, 0,
2554         "dop.SET_OF_Attribute", HFILL }},
2555     { &hf_dop_entryInfo_item,
2556       { "Item", "dop.entryInfo_item",
2557         FT_NONE, BASE_NONE, NULL, 0,
2558         "x509if.Attribute", HFILL }},
2559     { &hf_dop_immediateSuperiorInfo,
2560       { "immediateSuperiorInfo", "dop.immediateSuperiorInfo",
2561         FT_UINT32, BASE_DEC, NULL, 0,
2562         "dop.SET_OF_Attribute", HFILL }},
2563     { &hf_dop_immediateSuperiorInfo_item,
2564       { "Item", "dop.immediateSuperiorInfo_item",
2565         FT_NONE, BASE_NONE, NULL, 0,
2566         "x509if.Attribute", HFILL }},
2567     { &hf_dop_DITcontext_item,
2568       { "Item", "dop.DITcontext_item",
2569         FT_NONE, BASE_NONE, NULL, 0,
2570         "dop.Vertex", HFILL }},
2571     { &hf_dop_admPointInfo,
2572       { "admPointInfo", "dop.admPointInfo",
2573         FT_UINT32, BASE_DEC, NULL, 0,
2574         "dop.SET_OF_Attribute", HFILL }},
2575     { &hf_dop_admPointInfo_item,
2576       { "Item", "dop.admPointInfo_item",
2577         FT_NONE, BASE_NONE, NULL, 0,
2578         "x509if.Attribute", HFILL }},
2579     { &hf_dop_subentries,
2580       { "subentries", "dop.subentries",
2581         FT_UINT32, BASE_DEC, NULL, 0,
2582         "dop.SET_OF_SubentryInfo", HFILL }},
2583     { &hf_dop_subentries_item,
2584       { "Item", "dop.subentries_item",
2585         FT_NONE, BASE_NONE, NULL, 0,
2586         "dop.SubentryInfo", HFILL }},
2587     { &hf_dop_accessPoints,
2588       { "accessPoints", "dop.accessPoints",
2589         FT_UINT32, BASE_DEC, NULL, 0,
2590         "dsp.MasterAndShadowAccessPoints", HFILL }},
2591     { &hf_dop_info,
2592       { "info", "dop.info",
2593         FT_UINT32, BASE_DEC, NULL, 0,
2594         "dop.SET_OF_Attribute", HFILL }},
2595     { &hf_dop_info_item,
2596       { "Item", "dop.info_item",
2597         FT_NONE, BASE_NONE, NULL, 0,
2598         "x509if.Attribute", HFILL }},
2599     { &hf_dop_alias,
2600       { "alias", "dop.alias",
2601         FT_BOOLEAN, 8, NULL, 0,
2602         "dop.BOOLEAN", HFILL }},
2603     { &hf_dop_identificationTag,
2604       { "identificationTag", "dop.identificationTag",
2605         FT_UINT32, BASE_DEC, VALS(x509sat_DirectoryString_vals), 0,
2606         "x509sat.DirectoryString", HFILL }},
2607     { &hf_dop_precedence,
2608       { "precedence", "dop.precedence",
2609         FT_INT32, BASE_DEC, NULL, 0,
2610         "dop.Precedence", HFILL }},
2611     { &hf_dop_authenticationLevel,
2612       { "authenticationLevel", "dop.authenticationLevel",
2613         FT_UINT32, BASE_DEC, VALS(dop_AuthenticationLevel_vals), 0,
2614         "dop.AuthenticationLevel", HFILL }},
2615     { &hf_dop_itemOrUserFirst,
2616       { "itemOrUserFirst", "dop.itemOrUserFirst",
2617         FT_UINT32, BASE_DEC, VALS(dop_T_itemOrUserFirst_vals), 0,
2618         "dop.T_itemOrUserFirst", HFILL }},
2619     { &hf_dop_itemFirst,
2620       { "itemFirst", "dop.itemFirst",
2621         FT_NONE, BASE_NONE, NULL, 0,
2622         "dop.T_itemFirst", HFILL }},
2623     { &hf_dop_protectedItems,
2624       { "protectedItems", "dop.protectedItems",
2625         FT_NONE, BASE_NONE, NULL, 0,
2626         "dop.ProtectedItems", HFILL }},
2627     { &hf_dop_itemPermissions,
2628       { "itemPermissions", "dop.itemPermissions",
2629         FT_UINT32, BASE_DEC, NULL, 0,
2630         "dop.SET_OF_ItemPermission", HFILL }},
2631     { &hf_dop_itemPermissions_item,
2632       { "Item", "dop.itemPermissions_item",
2633         FT_NONE, BASE_NONE, NULL, 0,
2634         "dop.ItemPermission", HFILL }},
2635     { &hf_dop_userFirst,
2636       { "userFirst", "dop.userFirst",
2637         FT_NONE, BASE_NONE, NULL, 0,
2638         "dop.T_userFirst", HFILL }},
2639     { &hf_dop_userClasses,
2640       { "userClasses", "dop.userClasses",
2641         FT_NONE, BASE_NONE, NULL, 0,
2642         "dop.UserClasses", HFILL }},
2643     { &hf_dop_userPermissions,
2644       { "userPermissions", "dop.userPermissions",
2645         FT_UINT32, BASE_DEC, NULL, 0,
2646         "dop.SET_OF_UserPermission", HFILL }},
2647     { &hf_dop_userPermissions_item,
2648       { "Item", "dop.userPermissions_item",
2649         FT_NONE, BASE_NONE, NULL, 0,
2650         "dop.UserPermission", HFILL }},
2651     { &hf_dop_entry,
2652       { "entry", "dop.entry",
2653         FT_NONE, BASE_NONE, NULL, 0,
2654         "dop.NULL", HFILL }},
2655     { &hf_dop_allUserAttributeTypes,
2656       { "allUserAttributeTypes", "dop.allUserAttributeTypes",
2657         FT_NONE, BASE_NONE, NULL, 0,
2658         "dop.NULL", HFILL }},
2659     { &hf_dop_attributeType,
2660       { "attributeType", "dop.attributeType",
2661         FT_UINT32, BASE_DEC, NULL, 0,
2662         "dop.SET_OF_AttributeType", HFILL }},
2663     { &hf_dop_attributeType_item,
2664       { "Item", "dop.attributeType_item",
2665         FT_OID, BASE_NONE, NULL, 0,
2666         "x509if.AttributeType", HFILL }},
2667     { &hf_dop_allAttributeValues,
2668       { "allAttributeValues", "dop.allAttributeValues",
2669         FT_UINT32, BASE_DEC, NULL, 0,
2670         "dop.SET_OF_AttributeType", HFILL }},
2671     { &hf_dop_allAttributeValues_item,
2672       { "Item", "dop.allAttributeValues_item",
2673         FT_OID, BASE_NONE, NULL, 0,
2674         "x509if.AttributeType", HFILL }},
2675     { &hf_dop_allUserAttributeTypesAndValues,
2676       { "allUserAttributeTypesAndValues", "dop.allUserAttributeTypesAndValues",
2677         FT_NONE, BASE_NONE, NULL, 0,
2678         "dop.NULL", HFILL }},
2679     { &hf_dop_attributeValue,
2680       { "attributeValue", "dop.attributeValue",
2681         FT_UINT32, BASE_DEC, NULL, 0,
2682         "dop.SET_OF_AttributeTypeAndValue", HFILL }},
2683     { &hf_dop_attributeValue_item,
2684       { "Item", "dop.attributeValue_item",
2685         FT_NONE, BASE_NONE, NULL, 0,
2686         "crmf.AttributeTypeAndValue", HFILL }},
2687     { &hf_dop_selfValue,
2688       { "selfValue", "dop.selfValue",
2689         FT_UINT32, BASE_DEC, NULL, 0,
2690         "dop.SET_OF_AttributeType", HFILL }},
2691     { &hf_dop_selfValue_item,
2692       { "Item", "dop.selfValue_item",
2693         FT_OID, BASE_NONE, NULL, 0,
2694         "x509if.AttributeType", HFILL }},
2695     { &hf_dop_rangeOfValues,
2696       { "rangeOfValues", "dop.rangeOfValues",
2697         FT_UINT32, BASE_DEC, VALS(dap_Filter_vals), 0,
2698         "dap.Filter", HFILL }},
2699     { &hf_dop_maxValueCount,
2700       { "maxValueCount", "dop.maxValueCount",
2701         FT_UINT32, BASE_DEC, NULL, 0,
2702         "dop.SET_OF_MaxValueCount", HFILL }},
2703     { &hf_dop_maxValueCount_item,
2704       { "Item", "dop.maxValueCount_item",
2705         FT_NONE, BASE_NONE, NULL, 0,
2706         "dop.MaxValueCount", HFILL }},
2707     { &hf_dop_maxImmSub,
2708       { "maxImmSub", "dop.maxImmSub",
2709         FT_INT32, BASE_DEC, NULL, 0,
2710         "dop.INTEGER", HFILL }},
2711     { &hf_dop_restrictedBy,
2712       { "restrictedBy", "dop.restrictedBy",
2713         FT_UINT32, BASE_DEC, NULL, 0,
2714         "dop.SET_OF_RestrictedValue", HFILL }},
2715     { &hf_dop_restrictedBy_item,
2716       { "Item", "dop.restrictedBy_item",
2717         FT_NONE, BASE_NONE, NULL, 0,
2718         "dop.RestrictedValue", HFILL }},
2719     { &hf_dop_contexts,
2720       { "contexts", "dop.contexts",
2721         FT_UINT32, BASE_DEC, NULL, 0,
2722         "dop.SET_OF_ContextAssertion", HFILL }},
2723     { &hf_dop_contexts_item,
2724       { "Item", "dop.contexts_item",
2725         FT_NONE, BASE_NONE, NULL, 0,
2726         "x509if.ContextAssertion", HFILL }},
2727     { &hf_dop_classes,
2728       { "classes", "dop.classes",
2729         FT_UINT32, BASE_DEC, VALS(x509if_Refinement_vals), 0,
2730         "x509if.Refinement", HFILL }},
2731     { &hf_dop_type,
2732       { "type", "dop.type",
2733         FT_OID, BASE_NONE, NULL, 0,
2734         "x509if.AttributeType", HFILL }},
2735     { &hf_dop_maxCount,
2736       { "maxCount", "dop.maxCount",
2737         FT_INT32, BASE_DEC, NULL, 0,
2738         "dop.INTEGER", HFILL }},
2739     { &hf_dop_valuesIn,
2740       { "valuesIn", "dop.valuesIn",
2741         FT_OID, BASE_NONE, NULL, 0,
2742         "x509if.AttributeType", HFILL }},
2743     { &hf_dop_allUsers,
2744       { "allUsers", "dop.allUsers",
2745         FT_NONE, BASE_NONE, NULL, 0,
2746         "dop.NULL", HFILL }},
2747     { &hf_dop_thisEntry,
2748       { "thisEntry", "dop.thisEntry",
2749         FT_NONE, BASE_NONE, NULL, 0,
2750         "dop.NULL", HFILL }},
2751     { &hf_dop_name,
2752       { "name", "dop.name",
2753         FT_UINT32, BASE_DEC, NULL, 0,
2754         "dop.SET_OF_NameAndOptionalUID", HFILL }},
2755     { &hf_dop_name_item,
2756       { "Item", "dop.name_item",
2757         FT_NONE, BASE_NONE, NULL, 0,
2758         "x509sat.NameAndOptionalUID", HFILL }},
2759     { &hf_dop_userGroup,
2760       { "userGroup", "dop.userGroup",
2761         FT_UINT32, BASE_DEC, NULL, 0,
2762         "dop.SET_OF_NameAndOptionalUID", HFILL }},
2763     { &hf_dop_userGroup_item,
2764       { "Item", "dop.userGroup_item",
2765         FT_NONE, BASE_NONE, NULL, 0,
2766         "x509sat.NameAndOptionalUID", HFILL }},
2767     { &hf_dop_subtree,
2768       { "subtree", "dop.subtree",
2769         FT_UINT32, BASE_DEC, NULL, 0,
2770         "dop.SET_OF_SubtreeSpecification", HFILL }},
2771     { &hf_dop_subtree_item,
2772       { "Item", "dop.subtree_item",
2773         FT_NONE, BASE_NONE, NULL, 0,
2774         "x509if.SubtreeSpecification", HFILL }},
2775     { &hf_dop_grantsAndDenials,
2776       { "grantsAndDenials", "dop.grantsAndDenials",
2777         FT_BYTES, BASE_HEX, NULL, 0,
2778         "dop.GrantsAndDenials", HFILL }},
2779     { &hf_dop_basicLevels,
2780       { "basicLevels", "dop.basicLevels",
2781         FT_NONE, BASE_NONE, NULL, 0,
2782         "dop.T_basicLevels", HFILL }},
2783     { &hf_dop_level,
2784       { "level", "dop.level",
2785         FT_UINT32, BASE_DEC, VALS(dop_T_level_vals), 0,
2786         "dop.T_level", HFILL }},
2787     { &hf_dop_localQualifier,
2788       { "localQualifier", "dop.localQualifier",
2789         FT_INT32, BASE_DEC, NULL, 0,
2790         "dop.INTEGER", HFILL }},
2791     { &hf_dop_signed,
2792       { "signed", "dop.signed",
2793         FT_BOOLEAN, 8, NULL, 0,
2794         "dop.BOOLEAN", HFILL }},
2795     { &hf_dop_other,
2796       { "other", "dop.other",
2797         FT_NONE, BASE_NONE, NULL, 0,
2798         "dop.EXTERNAL", HFILL }},
2799     { &hf_dop_DSEType_root,
2800       { "root", "dop.root",
2801         FT_BOOLEAN, 8, NULL, 0x80,
2802         "", HFILL }},
2803     { &hf_dop_DSEType_glue,
2804       { "glue", "dop.glue",
2805         FT_BOOLEAN, 8, NULL, 0x40,
2806         "", HFILL }},
2807     { &hf_dop_DSEType_cp,
2808       { "cp", "dop.cp",
2809         FT_BOOLEAN, 8, NULL, 0x20,
2810         "", HFILL }},
2811     { &hf_dop_DSEType_entry,
2812       { "entry", "dop.entry",
2813         FT_BOOLEAN, 8, NULL, 0x10,
2814         "", HFILL }},
2815     { &hf_dop_DSEType_alias,
2816       { "alias", "dop.alias",
2817         FT_BOOLEAN, 8, NULL, 0x08,
2818         "", HFILL }},
2819     { &hf_dop_DSEType_subr,
2820       { "subr", "dop.subr",
2821         FT_BOOLEAN, 8, NULL, 0x04,
2822         "", HFILL }},
2823     { &hf_dop_DSEType_nssr,
2824       { "nssr", "dop.nssr",
2825         FT_BOOLEAN, 8, NULL, 0x02,
2826         "", HFILL }},
2827     { &hf_dop_DSEType_supr,
2828       { "supr", "dop.supr",
2829         FT_BOOLEAN, 8, NULL, 0x01,
2830         "", HFILL }},
2831     { &hf_dop_DSEType_xr,
2832       { "xr", "dop.xr",
2833         FT_BOOLEAN, 8, NULL, 0x80,
2834         "", HFILL }},
2835     { &hf_dop_DSEType_admPoint,
2836       { "admPoint", "dop.admPoint",
2837         FT_BOOLEAN, 8, NULL, 0x40,
2838         "", HFILL }},
2839     { &hf_dop_DSEType_subentry,
2840       { "subentry", "dop.subentry",
2841         FT_BOOLEAN, 8, NULL, 0x20,
2842         "", HFILL }},
2843     { &hf_dop_DSEType_shadow,
2844       { "shadow", "dop.shadow",
2845         FT_BOOLEAN, 8, NULL, 0x10,
2846         "", HFILL }},
2847     { &hf_dop_DSEType_immSupr,
2848       { "immSupr", "dop.immSupr",
2849         FT_BOOLEAN, 8, NULL, 0x04,
2850         "", HFILL }},
2851     { &hf_dop_DSEType_rhob,
2852       { "rhob", "dop.rhob",
2853         FT_BOOLEAN, 8, NULL, 0x02,
2854         "", HFILL }},
2855     { &hf_dop_DSEType_sa,
2856       { "sa", "dop.sa",
2857         FT_BOOLEAN, 8, NULL, 0x01,
2858         "", HFILL }},
2859     { &hf_dop_DSEType_dsSubentry,
2860       { "dsSubentry", "dop.dsSubentry",
2861         FT_BOOLEAN, 8, NULL, 0x80,
2862         "", HFILL }},
2863     { &hf_dop_DSEType_familyMember,
2864       { "familyMember", "dop.familyMember",
2865         FT_BOOLEAN, 8, NULL, 0x40,
2866         "", HFILL }},
2867     { &hf_dop_GrantsAndDenials_grantAdd,
2868       { "grantAdd", "dop.grantAdd",
2869         FT_BOOLEAN, 8, NULL, 0x80,
2870         "", HFILL }},
2871     { &hf_dop_GrantsAndDenials_denyAdd,
2872       { "denyAdd", "dop.denyAdd",
2873         FT_BOOLEAN, 8, NULL, 0x40,
2874         "", HFILL }},
2875     { &hf_dop_GrantsAndDenials_grantDiscloseOnError,
2876       { "grantDiscloseOnError", "dop.grantDiscloseOnError",
2877         FT_BOOLEAN, 8, NULL, 0x20,
2878         "", HFILL }},
2879     { &hf_dop_GrantsAndDenials_denyDiscloseOnError,
2880       { "denyDiscloseOnError", "dop.denyDiscloseOnError",
2881         FT_BOOLEAN, 8, NULL, 0x10,
2882         "", HFILL }},
2883     { &hf_dop_GrantsAndDenials_grantRead,
2884       { "grantRead", "dop.grantRead",
2885         FT_BOOLEAN, 8, NULL, 0x08,
2886         "", HFILL }},
2887     { &hf_dop_GrantsAndDenials_denyRead,
2888       { "denyRead", "dop.denyRead",
2889         FT_BOOLEAN, 8, NULL, 0x04,
2890         "", HFILL }},
2891     { &hf_dop_GrantsAndDenials_grantRemove,
2892       { "grantRemove", "dop.grantRemove",
2893         FT_BOOLEAN, 8, NULL, 0x02,
2894         "", HFILL }},
2895     { &hf_dop_GrantsAndDenials_denyRemove,
2896       { "denyRemove", "dop.denyRemove",
2897         FT_BOOLEAN, 8, NULL, 0x01,
2898         "", HFILL }},
2899     { &hf_dop_GrantsAndDenials_grantBrowse,
2900       { "grantBrowse", "dop.grantBrowse",
2901         FT_BOOLEAN, 8, NULL, 0x80,
2902         "", HFILL }},
2903     { &hf_dop_GrantsAndDenials_denyBrowse,
2904       { "denyBrowse", "dop.denyBrowse",
2905         FT_BOOLEAN, 8, NULL, 0x40,
2906         "", HFILL }},
2907     { &hf_dop_GrantsAndDenials_grantExport,
2908       { "grantExport", "dop.grantExport",
2909         FT_BOOLEAN, 8, NULL, 0x20,
2910         "", HFILL }},
2911     { &hf_dop_GrantsAndDenials_denyExport,
2912       { "denyExport", "dop.denyExport",
2913         FT_BOOLEAN, 8, NULL, 0x10,
2914         "", HFILL }},
2915     { &hf_dop_GrantsAndDenials_grantImport,
2916       { "grantImport", "dop.grantImport",
2917         FT_BOOLEAN, 8, NULL, 0x08,
2918         "", HFILL }},
2919     { &hf_dop_GrantsAndDenials_denyImport,
2920       { "denyImport", "dop.denyImport",
2921         FT_BOOLEAN, 8, NULL, 0x04,
2922         "", HFILL }},
2923     { &hf_dop_GrantsAndDenials_grantModify,
2924       { "grantModify", "dop.grantModify",
2925         FT_BOOLEAN, 8, NULL, 0x02,
2926         "", HFILL }},
2927     { &hf_dop_GrantsAndDenials_denyModify,
2928       { "denyModify", "dop.denyModify",
2929         FT_BOOLEAN, 8, NULL, 0x01,
2930         "", HFILL }},
2931     { &hf_dop_GrantsAndDenials_grantRename,
2932       { "grantRename", "dop.grantRename",
2933         FT_BOOLEAN, 8, NULL, 0x80,
2934         "", HFILL }},
2935     { &hf_dop_GrantsAndDenials_denyRename,
2936       { "denyRename", "dop.denyRename",
2937         FT_BOOLEAN, 8, NULL, 0x40,
2938         "", HFILL }},
2939     { &hf_dop_GrantsAndDenials_grantReturnDN,
2940       { "grantReturnDN", "dop.grantReturnDN",
2941         FT_BOOLEAN, 8, NULL, 0x20,
2942         "", HFILL }},
2943     { &hf_dop_GrantsAndDenials_denyReturnDN,
2944       { "denyReturnDN", "dop.denyReturnDN",
2945         FT_BOOLEAN, 8, NULL, 0x10,
2946         "", HFILL }},
2947     { &hf_dop_GrantsAndDenials_grantCompare,
2948       { "grantCompare", "dop.grantCompare",
2949         FT_BOOLEAN, 8, NULL, 0x08,
2950         "", HFILL }},
2951     { &hf_dop_GrantsAndDenials_denyCompare,
2952       { "denyCompare", "dop.denyCompare",
2953         FT_BOOLEAN, 8, NULL, 0x04,
2954         "", HFILL }},
2955     { &hf_dop_GrantsAndDenials_grantFilterMatch,
2956       { "grantFilterMatch", "dop.grantFilterMatch",
2957         FT_BOOLEAN, 8, NULL, 0x02,
2958         "", HFILL }},
2959     { &hf_dop_GrantsAndDenials_denyFilterMatch,
2960       { "denyFilterMatch", "dop.denyFilterMatch",
2961         FT_BOOLEAN, 8, NULL, 0x01,
2962         "", HFILL }},
2963     { &hf_dop_GrantsAndDenials_grantInvoke,
2964       { "grantInvoke", "dop.grantInvoke",
2965         FT_BOOLEAN, 8, NULL, 0x80,
2966         "", HFILL }},
2967     { &hf_dop_GrantsAndDenials_denyInvoke,
2968       { "denyInvoke", "dop.denyInvoke",
2969         FT_BOOLEAN, 8, NULL, 0x40,
2970         "", HFILL }},
2971
2972 /*--- End of included file: packet-dop-hfarr.c ---*/
2973 #line 253 "packet-dop-template.c"
2974   };
2975
2976   /* List of subtrees */
2977   static gint *ett[] = {
2978     &ett_dop,
2979     &ett_dop_unknown,
2980
2981 /*--- Included file: packet-dop-ettarr.c ---*/
2982 #line 1 "packet-dop-ettarr.c"
2983     &ett_dop_DSEType,
2984     &ett_dop_SupplierOrConsumer,
2985     &ett_dop_SET_OF_ProtocolInformation,
2986     &ett_dop_SupplierInformation,
2987     &ett_dop_SupplierAndConsumers,
2988     &ett_dop_SET_OF_AccessPoint,
2989     &ett_dop_EstablishOperationalBindingArgumentData,
2990     &ett_dop_EstablishArgumentInitiator,
2991     &ett_dop_EstablishOperationalBindingArgument,
2992     &ett_dop_T_signedEstablishOperationalBindingArgument,
2993     &ett_dop_OperationalBindingID,
2994     &ett_dop_Validity,
2995     &ett_dop_T_validFrom,
2996     &ett_dop_T_validUntil,
2997     &ett_dop_Time,
2998     &ett_dop_EstablishOperationalBindingResult,
2999     &ett_dop_T_initiator,
3000     &ett_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute,
3001     &ett_dop_ModifyOperationalBindingArgumentData,
3002     &ett_dop_ModifyArgumentInitiator,
3003     &ett_dop_ModifyOperationalBindingArgument,
3004     &ett_dop_T_signedModifyOperationalBindingArgument,
3005     &ett_dop_ModifyOperationalBindingResult,
3006     &ett_dop_ProtectedModifyResult,
3007     &ett_dop_ModifyOperationalBindingResultData,
3008     &ett_dop_TerminateOperationalBindingArgumentData,
3009     &ett_dop_TerminateArgumentInitiator,
3010     &ett_dop_TerminateOperationalBindingArgument,
3011     &ett_dop_T_signedTerminateOperationalBindingArgument,
3012     &ett_dop_TerminateOperationalBindingResult,
3013     &ett_dop_ProtectedTerminateResult,
3014     &ett_dop_TerminateOperationalBindingResultData,
3015     &ett_dop_OpBindingErrorParam,
3016     &ett_dop_HierarchicalAgreement,
3017     &ett_dop_SuperiorToSubordinate,
3018     &ett_dop_SET_OF_Attribute,
3019     &ett_dop_DITcontext,
3020     &ett_dop_Vertex,
3021     &ett_dop_SET_OF_SubentryInfo,
3022     &ett_dop_SubentryInfo,
3023     &ett_dop_SubordinateToSuperior,
3024     &ett_dop_SuperiorToSubordinateModification,
3025     &ett_dop_NonSpecificHierarchicalAgreement,
3026     &ett_dop_NHOBSuperiorToSubordinate,
3027     &ett_dop_NHOBSubordinateToSuperior,
3028     &ett_dop_ACIItem,
3029     &ett_dop_T_itemOrUserFirst,
3030     &ett_dop_T_itemFirst,
3031     &ett_dop_SET_OF_ItemPermission,
3032     &ett_dop_T_userFirst,
3033     &ett_dop_SET_OF_UserPermission,
3034     &ett_dop_ProtectedItems,
3035     &ett_dop_SET_OF_AttributeType,
3036     &ett_dop_SET_OF_AttributeTypeAndValue,
3037     &ett_dop_SET_OF_MaxValueCount,
3038     &ett_dop_SET_OF_RestrictedValue,
3039     &ett_dop_SET_OF_ContextAssertion,
3040     &ett_dop_MaxValueCount,
3041     &ett_dop_RestrictedValue,
3042     &ett_dop_UserClasses,
3043     &ett_dop_SET_OF_NameAndOptionalUID,
3044     &ett_dop_SET_OF_SubtreeSpecification,
3045     &ett_dop_ItemPermission,
3046     &ett_dop_UserPermission,
3047     &ett_dop_AuthenticationLevel,
3048     &ett_dop_T_basicLevels,
3049     &ett_dop_GrantsAndDenials,
3050
3051 /*--- End of included file: packet-dop-ettarr.c ---*/
3052 #line 260 "packet-dop-template.c"
3053   };
3054
3055   module_t *dop_module;
3056
3057   /* Register protocol */
3058   proto_dop = proto_register_protocol(PNAME, PSNAME, PFNAME);
3059
3060   register_dissector("dop", dissect_dop, proto_dop);
3061
3062   dop_dissector_table = register_dissector_table("dop.oid", "DOP OID Dissectors", FT_STRING, BASE_NONE);
3063
3064   /* Register fields and subtrees */
3065   proto_register_field_array(proto_dop, hf, array_length(hf));
3066   proto_register_subtree_array(ett, array_length(ett));
3067
3068   /* Register our configuration options for DOP, particularly our port */
3069
3070 #ifdef PREFERENCE_GROUPING
3071   dop_module = prefs_register_protocol_subtree("OSI/X.500", proto_dop, prefs_register_dop);
3072 #else
3073   dop_module = prefs_register_protocol(proto_dop, prefs_register_dop);
3074 #endif 
3075
3076   prefs_register_uint_preference(dop_module, "tcp.port", "DOP TCP Port",
3077                                  "Set the port for DOP operations (if other"
3078                                  " than the default of 102)",
3079                                  10, &global_dop_tcp_port);
3080
3081
3082 }
3083
3084
3085 /*--- proto_reg_handoff_dop --- */
3086 void proto_reg_handoff_dop(void) {
3087   dissector_handle_t handle = NULL;
3088
3089
3090 /*--- Included file: packet-dop-dis-tab.c ---*/
3091 #line 1 "packet-dop-dis-tab.c"
3092   register_ber_oid_dissector("2.5.12.0", dissect_DSEType_PDU, proto_dop, "id-doa-dseType");
3093   register_ber_oid_dissector("2.5.12.5", dissect_SupplierInformation_PDU, proto_dop, "id-doa-supplierKnowledge");
3094   register_ber_oid_dissector("2.5.12.6", dissect_ConsumerInformation_PDU, proto_dop, "id-doa-consumerKnowledge");
3095   register_ber_oid_dissector("2.5.12.7", dissect_SupplierAndConsumers_PDU, proto_dop, "id-doa-secondaryShadows");
3096   dissector_add_string("dop.oid", "agreement.2.5.19.2", create_dissector_handle(dissect_HierarchicalAgreement_PDU, proto_dop));
3097   dissector_add_string("dop.oid", "establish.rolea.2.5.19.2", create_dissector_handle(dissect_SuperiorToSubordinate_PDU, proto_dop));
3098   dissector_add_string("dop.oid", "modify.rolea.2.5.19.2", create_dissector_handle(dissect_SuperiorToSubordinateModification_PDU, proto_dop));
3099   dissector_add_string("dop.oid", "establish.roleb.2.5.19.2", create_dissector_handle(dissect_SubordinateToSuperior_PDU, proto_dop));
3100   dissector_add_string("dop.oid", "modify.roleb.2.5.19.2", create_dissector_handle(dissect_SubordinateToSuperior_PDU, proto_dop));
3101   dissector_add_string("dop.oid", "agreement.2.5.19.3", create_dissector_handle(dissect_NonSpecificHierarchicalAgreement_PDU, proto_dop));
3102   dissector_add_string("dop.oid", "establish.rolea.2.5.19.3", create_dissector_handle(dissect_NHOBSuperiorToSubordinate_PDU, proto_dop));
3103   dissector_add_string("dop.oid", "modify.rolea.2.5.19.3", create_dissector_handle(dissect_NHOBSuperiorToSubordinate_PDU, proto_dop));
3104   dissector_add_string("dop.oid", "establish.roleb.2.5.19.3", create_dissector_handle(dissect_NHOBSubordinateToSuperior_PDU, proto_dop));
3105   dissector_add_string("dop.oid", "modify.roleb.2.5.19.3", create_dissector_handle(dissect_NHOBSubordinateToSuperior_PDU, proto_dop));
3106   register_ber_oid_dissector("2.5.24.4", dissect_ACIItem_PDU, proto_dop, "id-aca-prescriptiveACI");
3107   register_ber_oid_dissector("2.5.24.5", dissect_ACIItem_PDU, proto_dop, "id-aca-entryACI");
3108   register_ber_oid_dissector("2.5.24.6", dissect_ACIItem_PDU, proto_dop, "id-aca-subentryACI");
3109
3110
3111 /*--- End of included file: packet-dop-dis-tab.c ---*/
3112 #line 297 "packet-dop-template.c"
3113   /* APPLICATION CONTEXT */
3114
3115   oid_add_from_string("id-ac-directory-operational-binding-management","2.5.3.3");
3116
3117   /* ABSTRACT SYNTAXES */
3118     
3119   /* Register DOP with ROS (with no use of RTSE) */
3120   if((handle = find_dissector("dop"))) {
3121     register_ros_oid_dissector_handle("2.5.9.4", handle, 0, "id-as-directory-operational-binding-management", FALSE); 
3122   }
3123
3124   /* BINDING TYPES */
3125
3126   oid_add_from_string("shadow-agreement","2.5.19.1");
3127   oid_add_from_string("hierarchical-agreement","2.5.19.2");
3128   oid_add_from_string("non-specific-hierarchical-agreement","2.5.19.3");
3129
3130   /* ACCESS CONTROL SCHEMES */
3131   oid_add_from_string("basic-ACS","2.5.28.1");
3132   oid_add_from_string("simplified-ACS","2.5.28.2");
3133   oid_add_from_string("ruleBased-ACS","2.5.28.3");
3134   oid_add_from_string("ruleAndBasic-ACS","2.5.28.4");
3135   oid_add_from_string("ruleAndSimple-ACS","2.5.28.5");
3136
3137   /* ADMINISTRATIVE ROLES */
3138   oid_add_from_string("id-ar-autonomousArea","2.5.23.1");
3139   oid_add_from_string("id-ar-accessControlSpecificArea","2.5.23.2");
3140   oid_add_from_string("id-ar-accessControlInnerArea","2.5.23.3");
3141   oid_add_from_string("id-ar-subschemaAdminSpecificArea","2.5.23.4");
3142   oid_add_from_string("id-ar-collectiveAttributeSpecificArea","2.5.23.5");
3143   oid_add_from_string("id-ar-collectiveAttributeInnerArea","2.5.23.6");
3144   oid_add_from_string("id-ar-contextDefaultSpecificArea","2.5.23.7");
3145   oid_add_from_string("id-ar-serviceSpecificArea","2.5.23.8");
3146
3147   /* remember the tpkt handler for change in preferences */
3148   tpkt_handle = find_dissector("tpkt");
3149
3150 }
3151
3152 void prefs_register_dop(void) {
3153
3154   /* de-register the old port */
3155   /* port 102 is registered by TPKT - don't undo this! */
3156   if((tcp_port != 102) && tpkt_handle)
3157     dissector_delete("tcp.port", tcp_port, tpkt_handle);
3158
3159   /* Set our port number for future use */
3160   tcp_port = global_dop_tcp_port;
3161
3162   if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle)
3163     dissector_add("tcp.port", global_dop_tcp_port, tpkt_handle);
3164
3165 }