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