Also add the new dissectors
[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 Ethereal dissector compiler    */
3 /* .\packet-dop.c                                                             */
4 /* ../../tools/asn2eth.py -X -b -e -p dop -c dop.cnf -s packet-dop-template dop.asn */
5
6 /* Input file: packet-dop-template.c */
7
8 #line 1 "packet-dop-template.c"
9 /* packet-dop.c
10  * Routines for X.501 (DSA Operational Attributes)  packet dissection
11  * Graeme Lunt 2005
12  *
13  * $Id$
14  *
15  * Ethereal - Network traffic analyzer
16  * By Gerald Combs <gerald@ethereal.com>
17  * Copyright 1998 Gerald Combs
18  *
19  * This program is free software; you can redistribute it and/or
20  * modify it under the terms of the GNU General Public License
21  * as published by the Free Software Foundation; either version 2
22  * of the License, or (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program; if not, write to the Free Software
31  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
32  */
33
34 #ifdef HAVE_CONFIG_H
35 # include "config.h"
36 #endif
37
38 #include <glib.h>
39 #include <epan/packet.h>
40 #include <epan/prefs.h>
41 #include <epan/conversation.h>
42
43 #include <stdio.h>
44 #include <string.h>
45
46 #include "packet-ber.h"
47 #include "packet-acse.h"
48 #include "packet-ros.h"
49
50 #include "packet-x509sat.h"
51 #include "packet-x509af.h"
52 #include "packet-x509if.h"
53 #include "packet-dap.h"
54 #include "packet-dsp.h"
55
56
57 #include "packet-dop.h"
58
59 #define PNAME  "X.501 Directory Operational Binding Management Protocol"
60 #define PSNAME "DOP"
61 #define PFNAME "dop"
62
63 static guint global_dop_tcp_port = 102;
64 static guint tcp_port = 0;
65 static dissector_handle_t tpkt_handle = NULL;
66 void prefs_register_dop(void); /* forwad declaration for use in preferences registration */
67
68 /* Initialize the protocol and registered fields */
69 int proto_dop = -1;
70
71 static struct SESSION_DATA_STRUCTURE* session = NULL;
72 static const char *binding_type = NULL; /* binding_type */
73
74 static int call_dop_oid_callback(char *base_oid, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree);
75
76
77 /*--- Included file: packet-dop-hf.c ---*/
78 #line 1 "packet-dop-hf.c"
79 static int hf_dop_DSEType_PDU = -1;               /* DSEType */
80 static int hf_dop_SupplierInformation_PDU = -1;   /* SupplierInformation */
81 static int hf_dop_ConsumerInformation_PDU = -1;   /* ConsumerInformation */
82 static int hf_dop_SupplierAndConsumers_PDU = -1;  /* SupplierAndConsumers */
83 static int hf_dop_HierarchicalAgreement_PDU = -1;  /* HierarchicalAgreement */
84 static int hf_dop_SuperiorToSubordinate_PDU = -1;  /* SuperiorToSubordinate */
85 static int hf_dop_SubordinateToSuperior_PDU = -1;  /* SubordinateToSuperior */
86 static int hf_dop_SuperiorToSubordinateModification_PDU = -1;  /* SuperiorToSubordinateModification */
87 static int hf_dop_NonSpecificHierarchicalAgreement_PDU = -1;  /* NonSpecificHierarchicalAgreement */
88 static int hf_dop_NHOBSuperiorToSubordinate_PDU = -1;  /* NHOBSuperiorToSubordinate */
89 static int hf_dop_NHOBSubordinateToSuperior_PDU = -1;  /* NHOBSubordinateToSuperior */
90 static int hf_dop_ae_title = -1;                  /* Name */
91 static int hf_dop_address = -1;                   /* PresentationAddress */
92 static int hf_dop_protocolInformation = -1;       /* SET_OF_ProtocolInformation */
93 static int hf_dop_protocolInformation_item = -1;  /* ProtocolInformation */
94 static int hf_dop_agreementID = -1;               /* OperationalBindingID */
95 static int hf_dop_supplier_is_master = -1;        /* BOOLEAN */
96 static int hf_dop_non_supplying_master = -1;      /* AccessPoint */
97 static int hf_dop_consumers = -1;                 /* SET_OF_AccessPoint */
98 static int hf_dop_consumers_item = -1;            /* AccessPoint */
99 static int hf_dop_bindingType = -1;               /* OBJECT_IDENTIFIER */
100 static int hf_dop_bindingID = -1;                 /* OperationalBindingID */
101 static int hf_dop_accessPoint = -1;               /* AccessPoint */
102 static int hf_dop_establishInitiator = -1;        /* EstablishArgumentInitiator */
103 static int hf_dop_establishSymmetric = -1;        /* EstablishSymmetric */
104 static int hf_dop_establishRoleAInitiates = -1;   /* EstablishRoleAInitiates */
105 static int hf_dop_establishRoleBInitiates = -1;   /* EstablishRoleBInitiates */
106 static int hf_dop_agreement = -1;                 /* T_agreement */
107 static int hf_dop_valid = -1;                     /* Validity */
108 static int hf_dop_securityParameters = -1;        /* SecurityParameters */
109 static int hf_dop_unsignedEstablishOperationalBindingArgument = -1;  /* EstablishOperationalBindingArgumentData */
110 static int hf_dop_signedEstablishOperationalBindingArgument = -1;  /* T_signedEstablishOperationalBindingArgument */
111 static int hf_dop_establishOperationalBindingArgument = -1;  /* EstablishOperationalBindingArgumentData */
112 static int hf_dop_algorithmIdentifier = -1;       /* AlgorithmIdentifier */
113 static int hf_dop_encrypted = -1;                 /* BIT_STRING */
114 static int hf_dop_identifier = -1;                /* INTEGER */
115 static int hf_dop_version = -1;                   /* INTEGER */
116 static int hf_dop_validFrom = -1;                 /* T_validFrom */
117 static int hf_dop_now = -1;                       /* NULL */
118 static int hf_dop_time = -1;                      /* Time */
119 static int hf_dop_validUntil = -1;                /* T_validUntil */
120 static int hf_dop_explicitTermination = -1;       /* NULL */
121 static int hf_dop_utcTime = -1;                   /* UTCTime */
122 static int hf_dop_generalizedTime = -1;           /* GeneralizedTime */
123 static int hf_dop_initiator = -1;                 /* T_initiator */
124 static int hf_dop_symmetric = -1;                 /* T_symmetric */
125 static int hf_dop_roleA_replies = -1;             /* T_roleA_replies */
126 static int hf_dop_roleB_replies = -1;             /* T_roleB_replies */
127 static int hf_dop_performer = -1;                 /* DistinguishedName */
128 static int hf_dop_aliasDereferenced = -1;         /* BOOLEAN */
129 static int hf_dop_notification = -1;              /* SEQUENCE_SIZE_1_MAX_OF_Attribute */
130 static int hf_dop_notification_item = -1;         /* Attribute */
131 static int hf_dop_modifyInitiator = -1;           /* ModifyArgumentInitiator */
132 static int hf_dop_modifySymmetric = -1;           /* ModifySymmetric */
133 static int hf_dop_modifyRoleAInitiates = -1;      /* ModifyRoleAInitiates */
134 static int hf_dop_modifyRoleBInitiates = -1;      /* ModifyRoleBInitiates */
135 static int hf_dop_newBindingID = -1;              /* OperationalBindingID */
136 static int hf_dop_argumentNewAgreement = -1;      /* ArgumentNewAgreement */
137 static int hf_dop_unsignedModifyOperationalBindingArgument = -1;  /* ModifyOperationalBindingArgumentData */
138 static int hf_dop_signedModifyOperationalBindingArgument = -1;  /* T_signedModifyOperationalBindingArgument */
139 static int hf_dop_modifyOperationalBindingArgument = -1;  /* ModifyOperationalBindingArgumentData */
140 static int hf_dop_null = -1;                      /* NULL */
141 static int hf_dop_protectedModifyResult = -1;     /* ProtectedModifyResult */
142 static int hf_dop_modifyOperationalBindingResultData = -1;  /* ModifyOperationalBindingResultData */
143 static int hf_dop_resultNewAgreement = -1;        /* ResultNewAgreement */
144 static int hf_dop_terminateInitiator = -1;        /* TerminateArgumentInitiator */
145 static int hf_dop_terminateSymmetric = -1;        /* TerminateSymmetric */
146 static int hf_dop_terminateRoleAInitiates = -1;   /* TerminateRoleAInitiates */
147 static int hf_dop_terminateRoleBInitiates = -1;   /* TerminateRoleBInitiates */
148 static int hf_dop_terminateAtTime = -1;           /* Time */
149 static int hf_dop_unsignedTerminateOperationalBindingArgument = -1;  /* TerminateOperationalBindingArgumentData */
150 static int hf_dop_signedTerminateOperationalBindingArgument = -1;  /* T_signedTerminateOperationalBindingArgument */
151 static int hf_dop_terminateOperationalBindingArgument = -1;  /* TerminateOperationalBindingArgumentData */
152 static int hf_dop_protectedTerminateResult = -1;  /* ProtectedTerminateResult */
153 static int hf_dop_terminateOperationalBindingResultData = -1;  /* TerminateOperationalBindingResultData */
154 static int hf_dop_terminateAtGeneralizedTime = -1;  /* GeneralizedTime */
155 static int hf_dop_problem = -1;                   /* T_problem */
156 static int hf_dop_agreementProposal = -1;         /* T_agreementProposal */
157 static int hf_dop_retryAt = -1;                   /* Time */
158 static int hf_dop_rdn = -1;                       /* RelativeDistinguishedName */
159 static int hf_dop_immediateSuperior = -1;         /* DistinguishedName */
160 static int hf_dop_contextPrefixInfo = -1;         /* DITcontext */
161 static int hf_dop_entryInfo = -1;                 /* SET_OF_Attribute */
162 static int hf_dop_entryInfo_item = -1;            /* Attribute */
163 static int hf_dop_immediateSuperiorInfo = -1;     /* SET_OF_Attribute */
164 static int hf_dop_immediateSuperiorInfo_item = -1;  /* Attribute */
165 static int hf_dop_DITcontext_item = -1;           /* Vertex */
166 static int hf_dop_admPointInfo = -1;              /* SET_OF_Attribute */
167 static int hf_dop_admPointInfo_item = -1;         /* Attribute */
168 static int hf_dop_subentries = -1;                /* SET_OF_SubentryInfo */
169 static int hf_dop_subentries_item = -1;           /* SubentryInfo */
170 static int hf_dop_accessPoints = -1;              /* MasterAndShadowAccessPoints */
171 static int hf_dop_info = -1;                      /* SET_OF_Attribute */
172 static int hf_dop_info_item = -1;                 /* Attribute */
173 static int hf_dop_alias = -1;                     /* BOOLEAN */
174 /* named bits */
175 static int hf_dop_DSEType_root = -1;
176 static int hf_dop_DSEType_glue = -1;
177 static int hf_dop_DSEType_cp = -1;
178 static int hf_dop_DSEType_entry = -1;
179 static int hf_dop_DSEType_alias = -1;
180 static int hf_dop_DSEType_subr = -1;
181 static int hf_dop_DSEType_nssr = -1;
182 static int hf_dop_DSEType_supr = -1;
183 static int hf_dop_DSEType_xr = -1;
184 static int hf_dop_DSEType_admPoint = -1;
185 static int hf_dop_DSEType_subentry = -1;
186 static int hf_dop_DSEType_shadow = -1;
187 static int hf_dop_DSEType_immSupr = -1;
188 static int hf_dop_DSEType_rhob = -1;
189 static int hf_dop_DSEType_sa = -1;
190 static int hf_dop_DSEType_dsSubentry = -1;
191 static int hf_dop_DSEType_familyMember = -1;
192
193 /*--- End of included file: packet-dop-hf.c ---*/
194 #line 69 "packet-dop-template.c"
195
196 /* Initialize the subtree pointers */
197 static gint ett_dop = -1;
198
199 /*--- Included file: packet-dop-ett.c ---*/
200 #line 1 "packet-dop-ett.c"
201 static gint ett_dop_DSEType = -1;
202 static gint ett_dop_SupplierOrConsumer = -1;
203 static gint ett_dop_SET_OF_ProtocolInformation = -1;
204 static gint ett_dop_SupplierInformation = -1;
205 static gint ett_dop_SupplierAndConsumers = -1;
206 static gint ett_dop_SET_OF_AccessPoint = -1;
207 static gint ett_dop_EstablishOperationalBindingArgumentData = -1;
208 static gint ett_dop_EstablishArgumentInitiator = -1;
209 static gint ett_dop_EstablishOperationalBindingArgument = -1;
210 static gint ett_dop_T_signedEstablishOperationalBindingArgument = -1;
211 static gint ett_dop_OperationalBindingID = -1;
212 static gint ett_dop_Validity = -1;
213 static gint ett_dop_T_validFrom = -1;
214 static gint ett_dop_T_validUntil = -1;
215 static gint ett_dop_Time = -1;
216 static gint ett_dop_EstablishOperationalBindingResult = -1;
217 static gint ett_dop_T_initiator = -1;
218 static gint ett_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute = -1;
219 static gint ett_dop_ModifyOperationalBindingArgumentData = -1;
220 static gint ett_dop_ModifyArgumentInitiator = -1;
221 static gint ett_dop_ModifyOperationalBindingArgument = -1;
222 static gint ett_dop_T_signedModifyOperationalBindingArgument = -1;
223 static gint ett_dop_ModifyOperationalBindingResult = -1;
224 static gint ett_dop_ProtectedModifyResult = -1;
225 static gint ett_dop_ModifyOperationalBindingResultData = -1;
226 static gint ett_dop_TerminateOperationalBindingArgumentData = -1;
227 static gint ett_dop_TerminateArgumentInitiator = -1;
228 static gint ett_dop_TerminateOperationalBindingArgument = -1;
229 static gint ett_dop_T_signedTerminateOperationalBindingArgument = -1;
230 static gint ett_dop_TerminateOperationalBindingResult = -1;
231 static gint ett_dop_ProtectedTerminateResult = -1;
232 static gint ett_dop_TerminateOperationalBindingResultData = -1;
233 static gint ett_dop_OpBindingErrorParam = -1;
234 static gint ett_dop_HierarchicalAgreement = -1;
235 static gint ett_dop_SuperiorToSubordinate = -1;
236 static gint ett_dop_SET_OF_Attribute = -1;
237 static gint ett_dop_DITcontext = -1;
238 static gint ett_dop_Vertex = -1;
239 static gint ett_dop_SET_OF_SubentryInfo = -1;
240 static gint ett_dop_SubentryInfo = -1;
241 static gint ett_dop_SubordinateToSuperior = -1;
242 static gint ett_dop_SuperiorToSubordinateModification = -1;
243 static gint ett_dop_NonSpecificHierarchicalAgreement = -1;
244 static gint ett_dop_NHOBSuperiorToSubordinate = -1;
245 static gint ett_dop_NHOBSubordinateToSuperior = -1;
246
247 /*--- End of included file: packet-dop-ett.c ---*/
248 #line 73 "packet-dop-template.c"
249
250
251 /*--- Included file: packet-dop-fn.c ---*/
252 #line 1 "packet-dop-fn.c"
253 /*--- Fields for imported types ---*/
254
255 static int dissect_ae_title(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
256   return dissect_x509if_Name(FALSE, tvb, offset, pinfo, tree, hf_dop_ae_title);
257 }
258 static int dissect_address(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
259   return dissect_x509sat_PresentationAddress(FALSE, tvb, offset, pinfo, tree, hf_dop_address);
260 }
261 static int dissect_protocolInformation_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
262   return dissect_x509sat_ProtocolInformation(FALSE, tvb, offset, pinfo, tree, hf_dop_protocolInformation_item);
263 }
264 static int dissect_non_supplying_master(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
265   return dissect_dsp_AccessPoint(FALSE, tvb, offset, pinfo, tree, hf_dop_non_supplying_master);
266 }
267 static int dissect_consumers_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
268   return dissect_dsp_AccessPoint(FALSE, tvb, offset, pinfo, tree, hf_dop_consumers_item);
269 }
270 static int dissect_accessPoint(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
271   return dissect_dsp_AccessPoint(FALSE, tvb, offset, pinfo, tree, hf_dop_accessPoint);
272 }
273 static int dissect_securityParameters(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
274   return dissect_dap_SecurityParameters(FALSE, tvb, offset, pinfo, tree, hf_dop_securityParameters);
275 }
276 static int dissect_algorithmIdentifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
277   return dissect_x509af_AlgorithmIdentifier(FALSE, tvb, offset, pinfo, tree, hf_dop_algorithmIdentifier);
278 }
279 static int dissect_performer(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
280   return dissect_x509if_DistinguishedName(FALSE, tvb, offset, pinfo, tree, hf_dop_performer);
281 }
282 static int dissect_notification_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
283   return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_notification_item);
284 }
285 static int dissect_rdn(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
286   return dissect_x509if_RelativeDistinguishedName(FALSE, tvb, offset, pinfo, tree, hf_dop_rdn);
287 }
288 static int dissect_immediateSuperior(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
289   return dissect_x509if_DistinguishedName(FALSE, tvb, offset, pinfo, tree, hf_dop_immediateSuperior);
290 }
291 static int dissect_entryInfo_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
292   return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_entryInfo_item);
293 }
294 static int dissect_immediateSuperiorInfo_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
295   return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_immediateSuperiorInfo_item);
296 }
297 static int dissect_admPointInfo_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
298   return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_admPointInfo_item);
299 }
300 static int dissect_accessPoints(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
301   return dissect_dsp_MasterAndShadowAccessPoints(FALSE, tvb, offset, pinfo, tree, hf_dop_accessPoints);
302 }
303 static int dissect_info_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
304   return dissect_x509if_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_info_item);
305 }
306
307
308 static const asn_namedbit DSEType_bits[] = {
309   {  0, &hf_dop_DSEType_root, -1, -1, "root", NULL },
310   {  1, &hf_dop_DSEType_glue, -1, -1, "glue", NULL },
311   {  2, &hf_dop_DSEType_cp, -1, -1, "cp", NULL },
312   {  3, &hf_dop_DSEType_entry, -1, -1, "entry", NULL },
313   {  4, &hf_dop_DSEType_alias, -1, -1, "alias", NULL },
314   {  5, &hf_dop_DSEType_subr, -1, -1, "subr", NULL },
315   {  6, &hf_dop_DSEType_nssr, -1, -1, "nssr", NULL },
316   {  7, &hf_dop_DSEType_supr, -1, -1, "supr", NULL },
317   {  8, &hf_dop_DSEType_xr, -1, -1, "xr", NULL },
318   {  9, &hf_dop_DSEType_admPoint, -1, -1, "admPoint", NULL },
319   { 10, &hf_dop_DSEType_subentry, -1, -1, "subentry", NULL },
320   { 11, &hf_dop_DSEType_shadow, -1, -1, "shadow", NULL },
321   { 13, &hf_dop_DSEType_immSupr, -1, -1, "immSupr", NULL },
322   { 14, &hf_dop_DSEType_rhob, -1, -1, "rhob", NULL },
323   { 15, &hf_dop_DSEType_sa, -1, -1, "sa", NULL },
324   { 16, &hf_dop_DSEType_dsSubentry, -1, -1, "dsSubentry", NULL },
325   { 17, &hf_dop_DSEType_familyMember, -1, -1, "familyMember", NULL },
326   { 0, NULL, 0, 0, NULL, NULL }
327 };
328
329 int
330 dissect_dop_DSEType(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
331   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
332                                     DSEType_bits, hf_index, ett_dop_DSEType,
333                                     NULL);
334
335   return offset;
336 }
337
338
339 static const ber_sequence_t SET_OF_ProtocolInformation_set_of[1] = {
340   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_protocolInformation_item },
341 };
342
343 static int
344 dissect_dop_SET_OF_ProtocolInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
345   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
346                                  SET_OF_ProtocolInformation_set_of, hf_index, ett_dop_SET_OF_ProtocolInformation);
347
348   return offset;
349 }
350 static int dissect_protocolInformation(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
351   return dissect_dop_SET_OF_ProtocolInformation(FALSE, tvb, offset, pinfo, tree, hf_dop_protocolInformation);
352 }
353
354
355
356 static int
357 dissect_dop_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
358   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
359                                   NULL);
360
361   return offset;
362 }
363 static int dissect_identifier(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
364   return dissect_dop_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_dop_identifier);
365 }
366 static int dissect_version(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
367   return dissect_dop_INTEGER(FALSE, tvb, offset, pinfo, tree, hf_dop_version);
368 }
369
370
371 static const ber_sequence_t OperationalBindingID_sequence[] = {
372   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_identifier },
373   { BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_version },
374   { 0, 0, 0, NULL }
375 };
376
377 static int
378 dissect_dop_OperationalBindingID(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
379   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
380                                    OperationalBindingID_sequence, hf_index, ett_dop_OperationalBindingID);
381
382   return offset;
383 }
384 static int dissect_agreementID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
385   return dissect_dop_OperationalBindingID(FALSE, tvb, offset, pinfo, tree, hf_dop_agreementID);
386 }
387 static int dissect_bindingID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
388   return dissect_dop_OperationalBindingID(FALSE, tvb, offset, pinfo, tree, hf_dop_bindingID);
389 }
390 static int dissect_newBindingID(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
391   return dissect_dop_OperationalBindingID(FALSE, tvb, offset, pinfo, tree, hf_dop_newBindingID);
392 }
393
394
395 static const ber_sequence_t SupplierOrConsumer_set[] = {
396   { BER_CLASS_CON, 0, 0, dissect_ae_title },
397   { BER_CLASS_CON, 1, 0, dissect_address },
398   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_protocolInformation },
399   { BER_CLASS_CON, 3, 0, dissect_agreementID },
400   { 0, 0, 0, NULL }
401 };
402
403 static int
404 dissect_dop_SupplierOrConsumer(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
405   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
406                               SupplierOrConsumer_set, hf_index, ett_dop_SupplierOrConsumer);
407
408   return offset;
409 }
410
411
412
413 static int
414 dissect_dop_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
415   offset = dissect_ber_boolean(implicit_tag, pinfo, tree, tvb, offset, hf_index);
416
417   return offset;
418 }
419 static int dissect_supplier_is_master(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
420   return dissect_dop_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_dop_supplier_is_master);
421 }
422 static int dissect_aliasDereferenced(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
423   return dissect_dop_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_dop_aliasDereferenced);
424 }
425 static int dissect_alias(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
426   return dissect_dop_BOOLEAN(FALSE, tvb, offset, pinfo, tree, hf_dop_alias);
427 }
428
429
430 static const ber_sequence_t SupplierInformation_set[] = {
431   { BER_CLASS_CON, 0, 0, dissect_ae_title },
432   { BER_CLASS_CON, 1, 0, dissect_address },
433   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_protocolInformation },
434   { BER_CLASS_CON, 3, 0, dissect_agreementID },
435   { BER_CLASS_CON, 4, BER_FLAGS_OPTIONAL, dissect_supplier_is_master },
436   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL, dissect_non_supplying_master },
437   { 0, 0, 0, NULL }
438 };
439
440 static int
441 dissect_dop_SupplierInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
442   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
443                               SupplierInformation_set, hf_index, ett_dop_SupplierInformation);
444
445   return offset;
446 }
447
448
449
450 static int
451 dissect_dop_ConsumerInformation(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
452   offset = dissect_dop_SupplierOrConsumer(implicit_tag, tvb, offset, pinfo, tree, hf_index);
453
454   return offset;
455 }
456
457
458 static const ber_sequence_t SET_OF_AccessPoint_set_of[1] = {
459   { BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_consumers_item },
460 };
461
462 static int
463 dissect_dop_SET_OF_AccessPoint(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
464   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
465                                  SET_OF_AccessPoint_set_of, hf_index, ett_dop_SET_OF_AccessPoint);
466
467   return offset;
468 }
469 static int dissect_consumers(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
470   return dissect_dop_SET_OF_AccessPoint(FALSE, tvb, offset, pinfo, tree, hf_dop_consumers);
471 }
472
473
474 static const ber_sequence_t SupplierAndConsumers_set[] = {
475   { BER_CLASS_CON, 0, 0, dissect_ae_title },
476   { BER_CLASS_CON, 1, 0, dissect_address },
477   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_protocolInformation },
478   { BER_CLASS_CON, 3, 0, dissect_consumers },
479   { 0, 0, 0, NULL }
480 };
481
482 int
483 dissect_dop_SupplierAndConsumers(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
484   offset = dissect_ber_set(implicit_tag, pinfo, tree, tvb, offset,
485                               SupplierAndConsumers_set, hf_index, ett_dop_SupplierAndConsumers);
486
487   return offset;
488 }
489
490
491
492 static int
493 dissect_dop_DSAOperationalManagementBindArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
494   offset = dissect_dap_DirectoryBindArgument(implicit_tag, tvb, offset, pinfo, tree, hf_index);
495
496   return offset;
497 }
498
499
500
501 static int
502 dissect_dop_DSAOperationalManagementBindResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
503   offset = dissect_dap_DirectoryBindArgument(implicit_tag, tvb, offset, pinfo, tree, hf_index);
504
505   return offset;
506 }
507
508
509
510 static int
511 dissect_dop_DSAOperationalManagementBindError(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
512   offset = dissect_dap_DirectoryBindError(implicit_tag, tvb, offset, pinfo, tree, hf_index);
513
514   return offset;
515 }
516
517
518
519 static int
520 dissect_dop_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
521   offset = dissect_ber_object_identifier_str(implicit_tag, pinfo, tree, tvb, offset, hf_index, &binding_type);
522
523   return offset;
524 }
525 static int dissect_bindingType(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
526   return dissect_dop_OBJECT_IDENTIFIER(FALSE, tvb, offset, pinfo, tree, hf_dop_bindingType);
527 }
528
529
530
531 static int
532 dissect_dop_EstablishSymmetric(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
533 #line 91 "dop.cnf"
534
535   offset = call_dop_oid_callback("dop.establish.symmetric", tvb, offset, pinfo, tree);
536
537
538
539   return offset;
540 }
541 static int dissect_establishSymmetric(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
542   return dissect_dop_EstablishSymmetric(FALSE, tvb, offset, pinfo, tree, hf_dop_establishSymmetric);
543 }
544
545
546
547 static int
548 dissect_dop_EstablishRoleAInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
549 #line 95 "dop.cnf"
550
551   offset = call_dop_oid_callback("dop.establish.rolea", tvb, offset, pinfo, tree);
552
553
554
555   return offset;
556 }
557 static int dissect_establishRoleAInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
558   return dissect_dop_EstablishRoleAInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_establishRoleAInitiates);
559 }
560
561
562
563 static int
564 dissect_dop_EstablishRoleBInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
565 #line 99 "dop.cnf"
566
567   offset = call_dop_oid_callback("dop.establish.roleb", tvb, offset, pinfo, tree);
568
569
570
571   return offset;
572 }
573 static int dissect_establishRoleBInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
574   return dissect_dop_EstablishRoleBInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_establishRoleBInitiates);
575 }
576
577
578 static const value_string dop_EstablishArgumentInitiator_vals[] = {
579   {   3, "symmetric" },
580   {   4, "roleA-initiates" },
581   {   5, "roleB-initiates" },
582   { 0, NULL }
583 };
584
585 static const ber_choice_t EstablishArgumentInitiator_choice[] = {
586   {   3, BER_CLASS_CON, 3, 0, dissect_establishSymmetric },
587   {   4, BER_CLASS_CON, 4, 0, dissect_establishRoleAInitiates },
588   {   5, BER_CLASS_CON, 5, 0, dissect_establishRoleBInitiates },
589   { 0, 0, 0, 0, NULL }
590 };
591
592 static int
593 dissect_dop_EstablishArgumentInitiator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
594   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
595                                  EstablishArgumentInitiator_choice, hf_index, ett_dop_EstablishArgumentInitiator,
596                                  NULL);
597
598   return offset;
599 }
600 static int dissect_establishInitiator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
601   return dissect_dop_EstablishArgumentInitiator(FALSE, tvb, offset, pinfo, tree, hf_dop_establishInitiator);
602 }
603
604
605
606 static int
607 dissect_dop_T_agreement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
608 #line 127 "dop.cnf"
609
610   offset = call_dop_oid_callback("dop.agreement", tvb, offset, pinfo, tree);
611
612
613
614   return offset;
615 }
616 static int dissect_agreement(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
617   return dissect_dop_T_agreement(FALSE, tvb, offset, pinfo, tree, hf_dop_agreement);
618 }
619
620
621
622 static int
623 dissect_dop_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
624   offset = dissect_ber_null(implicit_tag, pinfo, tree, tvb, offset, hf_index);
625
626   return offset;
627 }
628 static int dissect_now(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
629   return dissect_dop_NULL(FALSE, tvb, offset, pinfo, tree, hf_dop_now);
630 }
631 static int dissect_explicitTermination(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
632   return dissect_dop_NULL(FALSE, tvb, offset, pinfo, tree, hf_dop_explicitTermination);
633 }
634 static int dissect_null(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
635   return dissect_dop_NULL(FALSE, tvb, offset, pinfo, tree, hf_dop_null);
636 }
637
638
639
640 static int
641 dissect_dop_UTCTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
642   offset = dissect_ber_restricted_string(implicit_tag, BER_UNI_TAG_UTCTime,
643                                             pinfo, tree, tvb, offset, hf_index,
644                                             NULL);
645
646   return offset;
647 }
648 static int dissect_utcTime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
649   return dissect_dop_UTCTime(FALSE, tvb, offset, pinfo, tree, hf_dop_utcTime);
650 }
651
652
653
654 static int
655 dissect_dop_GeneralizedTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
656   offset = dissect_ber_GeneralizedTime(implicit_tag, pinfo, tree, tvb, offset, hf_index);
657
658   return offset;
659 }
660 static int dissect_generalizedTime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
661   return dissect_dop_GeneralizedTime(FALSE, tvb, offset, pinfo, tree, hf_dop_generalizedTime);
662 }
663 static int dissect_terminateAtGeneralizedTime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
664   return dissect_dop_GeneralizedTime(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateAtGeneralizedTime);
665 }
666
667
668 static const value_string dop_Time_vals[] = {
669   {   0, "utcTime" },
670   {   1, "generalizedTime" },
671   { 0, NULL }
672 };
673
674 static const ber_choice_t Time_choice[] = {
675   {   0, BER_CLASS_UNI, BER_UNI_TAG_UTCTime, BER_FLAGS_NOOWNTAG, dissect_utcTime },
676   {   1, BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_generalizedTime },
677   { 0, 0, 0, 0, NULL }
678 };
679
680 static int
681 dissect_dop_Time(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
682   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
683                                  Time_choice, hf_index, ett_dop_Time,
684                                  NULL);
685
686   return offset;
687 }
688 static int dissect_time(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
689   return dissect_dop_Time(FALSE, tvb, offset, pinfo, tree, hf_dop_time);
690 }
691 static int dissect_terminateAtTime(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
692   return dissect_dop_Time(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateAtTime);
693 }
694 static int dissect_retryAt(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
695   return dissect_dop_Time(FALSE, tvb, offset, pinfo, tree, hf_dop_retryAt);
696 }
697
698
699 static const value_string dop_T_validFrom_vals[] = {
700   {   0, "now" },
701   {   1, "time" },
702   { 0, NULL }
703 };
704
705 static const ber_choice_t T_validFrom_choice[] = {
706   {   0, BER_CLASS_CON, 0, 0, dissect_now },
707   {   1, BER_CLASS_CON, 1, 0, dissect_time },
708   { 0, 0, 0, 0, NULL }
709 };
710
711 static int
712 dissect_dop_T_validFrom(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
713   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
714                                  T_validFrom_choice, hf_index, ett_dop_T_validFrom,
715                                  NULL);
716
717   return offset;
718 }
719 static int dissect_validFrom(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
720   return dissect_dop_T_validFrom(FALSE, tvb, offset, pinfo, tree, hf_dop_validFrom);
721 }
722
723
724 static const value_string dop_T_validUntil_vals[] = {
725   {   0, "explicitTermination" },
726   {   1, "time" },
727   { 0, NULL }
728 };
729
730 static const ber_choice_t T_validUntil_choice[] = {
731   {   0, BER_CLASS_CON, 0, 0, dissect_explicitTermination },
732   {   1, BER_CLASS_CON, 1, 0, dissect_time },
733   { 0, 0, 0, 0, NULL }
734 };
735
736 static int
737 dissect_dop_T_validUntil(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
738   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
739                                  T_validUntil_choice, hf_index, ett_dop_T_validUntil,
740                                  NULL);
741
742   return offset;
743 }
744 static int dissect_validUntil(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
745   return dissect_dop_T_validUntil(FALSE, tvb, offset, pinfo, tree, hf_dop_validUntil);
746 }
747
748
749 static const ber_sequence_t Validity_sequence[] = {
750   { BER_CLASS_CON, 0, 0, dissect_validFrom },
751   { BER_CLASS_CON, 1, 0, dissect_validUntil },
752   { 0, 0, 0, NULL }
753 };
754
755 static int
756 dissect_dop_Validity(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
757   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
758                                    Validity_sequence, hf_index, ett_dop_Validity);
759
760   return offset;
761 }
762 static int dissect_valid(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
763   return dissect_dop_Validity(FALSE, tvb, offset, pinfo, tree, hf_dop_valid);
764 }
765
766
767 static const ber_sequence_t EstablishOperationalBindingArgumentData_sequence[] = {
768   { BER_CLASS_CON, 0, 0, dissect_bindingType },
769   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_bindingID },
770   { BER_CLASS_CON, 2, 0, dissect_accessPoint },
771   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_establishInitiator },
772   { BER_CLASS_CON, 6, 0, dissect_agreement },
773   { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_valid },
774   { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_securityParameters },
775   { 0, 0, 0, NULL }
776 };
777
778 static int
779 dissect_dop_EstablishOperationalBindingArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
780   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
781                                    EstablishOperationalBindingArgumentData_sequence, hf_index, ett_dop_EstablishOperationalBindingArgumentData);
782
783   return offset;
784 }
785 static int dissect_unsignedEstablishOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
786   return dissect_dop_EstablishOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_unsignedEstablishOperationalBindingArgument);
787 }
788 static int dissect_establishOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
789   return dissect_dop_EstablishOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_establishOperationalBindingArgument);
790 }
791
792
793
794 static int
795 dissect_dop_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
796   offset = dissect_ber_bitstring(implicit_tag, pinfo, tree, tvb, offset,
797                                     NULL, hf_index, -1,
798                                     NULL);
799
800   return offset;
801 }
802 static int dissect_encrypted(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
803   return dissect_dop_BIT_STRING(FALSE, tvb, offset, pinfo, tree, hf_dop_encrypted);
804 }
805
806
807 static const ber_sequence_t T_signedEstablishOperationalBindingArgument_sequence[] = {
808   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_establishOperationalBindingArgument },
809   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
810   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
811   { 0, 0, 0, NULL }
812 };
813
814 static int
815 dissect_dop_T_signedEstablishOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
816   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
817                                    T_signedEstablishOperationalBindingArgument_sequence, hf_index, ett_dop_T_signedEstablishOperationalBindingArgument);
818
819   return offset;
820 }
821 static int dissect_signedEstablishOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
822   return dissect_dop_T_signedEstablishOperationalBindingArgument(FALSE, tvb, offset, pinfo, tree, hf_dop_signedEstablishOperationalBindingArgument);
823 }
824
825
826 static const value_string dop_EstablishOperationalBindingArgument_vals[] = {
827   {   0, "unsignedEstablishOperationalBindingArgument" },
828   {   1, "signedEstablishOperationalBindingArgument" },
829   { 0, NULL }
830 };
831
832 static const ber_choice_t EstablishOperationalBindingArgument_choice[] = {
833   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_unsignedEstablishOperationalBindingArgument },
834   {   1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signedEstablishOperationalBindingArgument },
835   { 0, 0, 0, 0, NULL }
836 };
837
838 static int
839 dissect_dop_EstablishOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
840   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
841                                  EstablishOperationalBindingArgument_choice, hf_index, ett_dop_EstablishOperationalBindingArgument,
842                                  NULL);
843
844   return offset;
845 }
846
847
848
849 static int
850 dissect_dop_T_symmetric(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
851 #line 131 "dop.cnf"
852
853   offset = call_dop_oid_callback("dop.establish.symmetric", tvb, offset, pinfo, tree); 
854
855
856
857   return offset;
858 }
859 static int dissect_symmetric(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
860   return dissect_dop_T_symmetric(FALSE, tvb, offset, pinfo, tree, hf_dop_symmetric);
861 }
862
863
864
865 static int
866 dissect_dop_T_roleA_replies(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
867 #line 135 "dop.cnf"
868
869   offset = call_dop_oid_callback("dop.establish.rolea", tvb, offset, pinfo, tree);
870
871
872
873   return offset;
874 }
875 static int dissect_roleA_replies(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
876   return dissect_dop_T_roleA_replies(FALSE, tvb, offset, pinfo, tree, hf_dop_roleA_replies);
877 }
878
879
880
881 static int
882 dissect_dop_T_roleB_replies(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
883 #line 139 "dop.cnf"
884
885   offset = call_dop_oid_callback("dop.establish.roleb", tvb, offset, pinfo, tree);
886
887
888
889   return offset;
890 }
891 static int dissect_roleB_replies(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
892   return dissect_dop_T_roleB_replies(FALSE, tvb, offset, pinfo, tree, hf_dop_roleB_replies);
893 }
894
895
896 static const value_string dop_T_initiator_vals[] = {
897   {   3, "symmetric" },
898   {   4, "roleA-replies" },
899   {   5, "roleB-replies" },
900   { 0, NULL }
901 };
902
903 static const ber_choice_t T_initiator_choice[] = {
904   {   3, BER_CLASS_CON, 3, 0, dissect_symmetric },
905   {   4, BER_CLASS_CON, 4, 0, dissect_roleA_replies },
906   {   5, BER_CLASS_CON, 5, 0, dissect_roleB_replies },
907   { 0, 0, 0, 0, NULL }
908 };
909
910 static int
911 dissect_dop_T_initiator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
912   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
913                                  T_initiator_choice, hf_index, ett_dop_T_initiator,
914                                  NULL);
915
916   return offset;
917 }
918 static int dissect_initiator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
919   return dissect_dop_T_initiator(FALSE, tvb, offset, pinfo, tree, hf_dop_initiator);
920 }
921
922
923 static const ber_sequence_t SEQUENCE_SIZE_1_MAX_OF_Attribute_sequence_of[1] = {
924   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_notification_item },
925 };
926
927 static int
928 dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
929   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
930                                       SEQUENCE_SIZE_1_MAX_OF_Attribute_sequence_of, hf_index, ett_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute);
931
932   return offset;
933 }
934 static int dissect_notification(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
935   return dissect_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_notification);
936 }
937
938
939 static const ber_sequence_t EstablishOperationalBindingResult_sequence[] = {
940   { BER_CLASS_CON, 0, 0, dissect_bindingType },
941   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_bindingID },
942   { BER_CLASS_CON, 2, 0, dissect_accessPoint },
943   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_initiator },
944   { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_securityParameters },
945   { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_performer },
946   { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_aliasDereferenced },
947   { BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_notification },
948   { 0, 0, 0, NULL }
949 };
950
951 static int
952 dissect_dop_EstablishOperationalBindingResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
953   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
954                                    EstablishOperationalBindingResult_sequence, hf_index, ett_dop_EstablishOperationalBindingResult);
955
956   return offset;
957 }
958
959
960
961 static int
962 dissect_dop_ModifySymmetric(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
963 #line 103 "dop.cnf"
964
965   offset = call_dop_oid_callback("dop.modify.symmetric", tvb, offset, pinfo, tree);
966
967
968
969   return offset;
970 }
971 static int dissect_modifySymmetric(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
972   return dissect_dop_ModifySymmetric(FALSE, tvb, offset, pinfo, tree, hf_dop_modifySymmetric);
973 }
974
975
976
977 static int
978 dissect_dop_ModifyRoleAInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
979 #line 107 "dop.cnf"
980
981   offset = call_dop_oid_callback("dop.modify.rolea", tvb, offset, pinfo, tree);
982
983
984
985   return offset;
986 }
987 static int dissect_modifyRoleAInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
988   return dissect_dop_ModifyRoleAInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_modifyRoleAInitiates);
989 }
990
991
992
993 static int
994 dissect_dop_ModifyRoleBInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
995 #line 111 "dop.cnf"
996
997   offset = call_dop_oid_callback("dop.modify.roleb", tvb, offset, pinfo, tree);
998
999
1000
1001   return offset;
1002 }
1003 static int dissect_modifyRoleBInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1004   return dissect_dop_ModifyRoleBInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_modifyRoleBInitiates);
1005 }
1006
1007
1008 static const value_string dop_ModifyArgumentInitiator_vals[] = {
1009   {   3, "symmetric" },
1010   {   4, "roleA-initiates" },
1011   {   5, "roleB-initiates" },
1012   { 0, NULL }
1013 };
1014
1015 static const ber_choice_t ModifyArgumentInitiator_choice[] = {
1016   {   3, BER_CLASS_CON, 3, 0, dissect_modifySymmetric },
1017   {   4, BER_CLASS_CON, 4, 0, dissect_modifyRoleAInitiates },
1018   {   5, BER_CLASS_CON, 5, 0, dissect_modifyRoleBInitiates },
1019   { 0, 0, 0, 0, NULL }
1020 };
1021
1022 static int
1023 dissect_dop_ModifyArgumentInitiator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1024   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1025                                  ModifyArgumentInitiator_choice, hf_index, ett_dop_ModifyArgumentInitiator,
1026                                  NULL);
1027
1028   return offset;
1029 }
1030 static int dissect_modifyInitiator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1031   return dissect_dop_ModifyArgumentInitiator(FALSE, tvb, offset, pinfo, tree, hf_dop_modifyInitiator);
1032 }
1033
1034
1035
1036 static int
1037 dissect_dop_ArgumentNewAgreement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1038 #line 151 "dop.cnf"
1039
1040   offset = call_dop_oid_callback("dop.agreement", tvb, offset, pinfo, tree);
1041
1042
1043   return offset;
1044 }
1045 static int dissect_argumentNewAgreement(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1046   return dissect_dop_ArgumentNewAgreement(FALSE, tvb, offset, pinfo, tree, hf_dop_argumentNewAgreement);
1047 }
1048
1049
1050 static const ber_sequence_t ModifyOperationalBindingArgumentData_sequence[] = {
1051   { BER_CLASS_CON, 0, 0, dissect_bindingType },
1052   { BER_CLASS_CON, 1, 0, dissect_bindingID },
1053   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_accessPoint },
1054   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_modifyInitiator },
1055   { BER_CLASS_CON, 6, 0, dissect_newBindingID },
1056   { BER_CLASS_CON, 7, BER_FLAGS_OPTIONAL, dissect_argumentNewAgreement },
1057   { BER_CLASS_CON, 8, BER_FLAGS_OPTIONAL, dissect_valid },
1058   { BER_CLASS_CON, 9, BER_FLAGS_OPTIONAL, dissect_securityParameters },
1059   { 0, 0, 0, NULL }
1060 };
1061
1062 static int
1063 dissect_dop_ModifyOperationalBindingArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1064   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1065                                    ModifyOperationalBindingArgumentData_sequence, hf_index, ett_dop_ModifyOperationalBindingArgumentData);
1066
1067   return offset;
1068 }
1069 static int dissect_unsignedModifyOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1070   return dissect_dop_ModifyOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_unsignedModifyOperationalBindingArgument);
1071 }
1072 static int dissect_modifyOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1073   return dissect_dop_ModifyOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_modifyOperationalBindingArgument);
1074 }
1075
1076
1077 static const ber_sequence_t T_signedModifyOperationalBindingArgument_sequence[] = {
1078   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_modifyOperationalBindingArgument },
1079   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
1080   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
1081   { 0, 0, 0, NULL }
1082 };
1083
1084 static int
1085 dissect_dop_T_signedModifyOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1086   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1087                                    T_signedModifyOperationalBindingArgument_sequence, hf_index, ett_dop_T_signedModifyOperationalBindingArgument);
1088
1089   return offset;
1090 }
1091 static int dissect_signedModifyOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1092   return dissect_dop_T_signedModifyOperationalBindingArgument(FALSE, tvb, offset, pinfo, tree, hf_dop_signedModifyOperationalBindingArgument);
1093 }
1094
1095
1096 static const value_string dop_ModifyOperationalBindingArgument_vals[] = {
1097   {   0, "unsignedModifyOperationalBindingArgument" },
1098   {   1, "signedModifyOperationalBindingArgument" },
1099   { 0, NULL }
1100 };
1101
1102 static const ber_choice_t ModifyOperationalBindingArgument_choice[] = {
1103   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_unsignedModifyOperationalBindingArgument },
1104   {   1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signedModifyOperationalBindingArgument },
1105   { 0, 0, 0, 0, NULL }
1106 };
1107
1108 static int
1109 dissect_dop_ModifyOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1110   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1111                                  ModifyOperationalBindingArgument_choice, hf_index, ett_dop_ModifyOperationalBindingArgument,
1112                                  NULL);
1113
1114   return offset;
1115 }
1116
1117
1118
1119 static int
1120 dissect_dop_ResultNewAgreement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1121 #line 147 "dop.cnf"
1122
1123   offset = call_dop_oid_callback("dop.agreement", tvb, offset, pinfo, tree);
1124
1125
1126
1127   return offset;
1128 }
1129 static int dissect_resultNewAgreement(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1130   return dissect_dop_ResultNewAgreement(FALSE, tvb, offset, pinfo, tree, hf_dop_resultNewAgreement);
1131 }
1132
1133
1134 static const ber_sequence_t ModifyOperationalBindingResultData_sequence[] = {
1135   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_newBindingID },
1136   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_bindingType },
1137   { BER_CLASS_ANY, 0, BER_FLAGS_NOOWNTAG, dissect_resultNewAgreement },
1138   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_valid },
1139   { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_securityParameters },
1140   { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_performer },
1141   { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_aliasDereferenced },
1142   { BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_notification },
1143   { 0, 0, 0, NULL }
1144 };
1145
1146 static int
1147 dissect_dop_ModifyOperationalBindingResultData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1148   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1149                                    ModifyOperationalBindingResultData_sequence, hf_index, ett_dop_ModifyOperationalBindingResultData);
1150
1151   return offset;
1152 }
1153 static int dissect_modifyOperationalBindingResultData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1154   return dissect_dop_ModifyOperationalBindingResultData(FALSE, tvb, offset, pinfo, tree, hf_dop_modifyOperationalBindingResultData);
1155 }
1156
1157
1158 static const ber_sequence_t ProtectedModifyResult_sequence[] = {
1159   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_modifyOperationalBindingResultData },
1160   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
1161   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
1162   { 0, 0, 0, NULL }
1163 };
1164
1165 static int
1166 dissect_dop_ProtectedModifyResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1167   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1168                                    ProtectedModifyResult_sequence, hf_index, ett_dop_ProtectedModifyResult);
1169
1170   return offset;
1171 }
1172 static int dissect_protectedModifyResult(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1173   return dissect_dop_ProtectedModifyResult(FALSE, tvb, offset, pinfo, tree, hf_dop_protectedModifyResult);
1174 }
1175
1176
1177 static const value_string dop_ModifyOperationalBindingResult_vals[] = {
1178   {   0, "null" },
1179   {   1, "protected" },
1180   { 0, NULL }
1181 };
1182
1183 static const ber_choice_t ModifyOperationalBindingResult_choice[] = {
1184   {   0, BER_CLASS_CON, 0, 0, dissect_null },
1185   {   1, BER_CLASS_CON, 1, 0, dissect_protectedModifyResult },
1186   { 0, 0, 0, 0, NULL }
1187 };
1188
1189 static int
1190 dissect_dop_ModifyOperationalBindingResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1191   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1192                                  ModifyOperationalBindingResult_choice, hf_index, ett_dop_ModifyOperationalBindingResult,
1193                                  NULL);
1194
1195   return offset;
1196 }
1197
1198
1199
1200 static int
1201 dissect_dop_TerminateSymmetric(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1202 #line 115 "dop.cnf"
1203
1204   offset = call_dop_oid_callback("dop.terminate.symmetric", tvb, offset, pinfo, tree);
1205
1206
1207
1208   return offset;
1209 }
1210 static int dissect_terminateSymmetric(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1211   return dissect_dop_TerminateSymmetric(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateSymmetric);
1212 }
1213
1214
1215
1216 static int
1217 dissect_dop_TerminateRoleAInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1218 #line 119 "dop.cnf"
1219
1220   offset = call_dop_oid_callback("dop.terminate.rolea", tvb, offset, pinfo, tree);
1221
1222
1223
1224   return offset;
1225 }
1226 static int dissect_terminateRoleAInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1227   return dissect_dop_TerminateRoleAInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateRoleAInitiates);
1228 }
1229
1230
1231
1232 static int
1233 dissect_dop_TerminateRoleBInitiates(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1234 #line 123 "dop.cnf"
1235
1236   offset = call_dop_oid_callback("dop.terminate.roleb", tvb, offset, pinfo, tree);
1237
1238
1239
1240   return offset;
1241 }
1242 static int dissect_terminateRoleBInitiates(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1243   return dissect_dop_TerminateRoleBInitiates(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateRoleBInitiates);
1244 }
1245
1246
1247 static const value_string dop_TerminateArgumentInitiator_vals[] = {
1248   {   2, "symmetric" },
1249   {   3, "roleA-initiates" },
1250   {   4, "roleB-initiates" },
1251   { 0, NULL }
1252 };
1253
1254 static const ber_choice_t TerminateArgumentInitiator_choice[] = {
1255   {   2, BER_CLASS_CON, 2, 0, dissect_terminateSymmetric },
1256   {   3, BER_CLASS_CON, 3, 0, dissect_terminateRoleAInitiates },
1257   {   4, BER_CLASS_CON, 4, 0, dissect_terminateRoleBInitiates },
1258   { 0, 0, 0, 0, NULL }
1259 };
1260
1261 static int
1262 dissect_dop_TerminateArgumentInitiator(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1263   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1264                                  TerminateArgumentInitiator_choice, hf_index, ett_dop_TerminateArgumentInitiator,
1265                                  NULL);
1266
1267   return offset;
1268 }
1269 static int dissect_terminateInitiator(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1270   return dissect_dop_TerminateArgumentInitiator(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateInitiator);
1271 }
1272
1273
1274 static const ber_sequence_t TerminateOperationalBindingArgumentData_sequence[] = {
1275   { BER_CLASS_CON, 0, 0, dissect_bindingType },
1276   { BER_CLASS_CON, 1, 0, dissect_bindingID },
1277   { BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_terminateInitiator },
1278   { BER_CLASS_CON, 5, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_terminateAtTime },
1279   { BER_CLASS_CON, 6, BER_FLAGS_OPTIONAL, dissect_securityParameters },
1280   { 0, 0, 0, NULL }
1281 };
1282
1283 static int
1284 dissect_dop_TerminateOperationalBindingArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1285   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1286                                    TerminateOperationalBindingArgumentData_sequence, hf_index, ett_dop_TerminateOperationalBindingArgumentData);
1287
1288   return offset;
1289 }
1290 static int dissect_unsignedTerminateOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1291   return dissect_dop_TerminateOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_unsignedTerminateOperationalBindingArgument);
1292 }
1293 static int dissect_terminateOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1294   return dissect_dop_TerminateOperationalBindingArgumentData(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateOperationalBindingArgument);
1295 }
1296
1297
1298 static const ber_sequence_t T_signedTerminateOperationalBindingArgument_sequence[] = {
1299   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_terminateOperationalBindingArgument },
1300   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
1301   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
1302   { 0, 0, 0, NULL }
1303 };
1304
1305 static int
1306 dissect_dop_T_signedTerminateOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1307   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1308                                    T_signedTerminateOperationalBindingArgument_sequence, hf_index, ett_dop_T_signedTerminateOperationalBindingArgument);
1309
1310   return offset;
1311 }
1312 static int dissect_signedTerminateOperationalBindingArgument(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1313   return dissect_dop_T_signedTerminateOperationalBindingArgument(FALSE, tvb, offset, pinfo, tree, hf_dop_signedTerminateOperationalBindingArgument);
1314 }
1315
1316
1317 static const value_string dop_TerminateOperationalBindingArgument_vals[] = {
1318   {   0, "unsignedTerminateOperationalBindingArgument" },
1319   {   1, "signedTerminateOperationalBindingArgument" },
1320   { 0, NULL }
1321 };
1322
1323 static const ber_choice_t TerminateOperationalBindingArgument_choice[] = {
1324   {   0, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_unsignedTerminateOperationalBindingArgument },
1325   {   1, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_signedTerminateOperationalBindingArgument },
1326   { 0, 0, 0, 0, NULL }
1327 };
1328
1329 static int
1330 dissect_dop_TerminateOperationalBindingArgument(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1331   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1332                                  TerminateOperationalBindingArgument_choice, hf_index, ett_dop_TerminateOperationalBindingArgument,
1333                                  NULL);
1334
1335   return offset;
1336 }
1337
1338
1339 static const ber_sequence_t TerminateOperationalBindingResultData_sequence[] = {
1340   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_bindingID },
1341   { BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_bindingType },
1342   { BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_terminateAtGeneralizedTime },
1343   { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_securityParameters },
1344   { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_performer },
1345   { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_aliasDereferenced },
1346   { BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_notification },
1347   { 0, 0, 0, NULL }
1348 };
1349
1350 static int
1351 dissect_dop_TerminateOperationalBindingResultData(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1352   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1353                                    TerminateOperationalBindingResultData_sequence, hf_index, ett_dop_TerminateOperationalBindingResultData);
1354
1355   return offset;
1356 }
1357 static int dissect_terminateOperationalBindingResultData(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1358   return dissect_dop_TerminateOperationalBindingResultData(FALSE, tvb, offset, pinfo, tree, hf_dop_terminateOperationalBindingResultData);
1359 }
1360
1361
1362 static const ber_sequence_t ProtectedTerminateResult_sequence[] = {
1363   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_terminateOperationalBindingResultData },
1364   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_algorithmIdentifier },
1365   { BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_encrypted },
1366   { 0, 0, 0, NULL }
1367 };
1368
1369 static int
1370 dissect_dop_ProtectedTerminateResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1371   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1372                                    ProtectedTerminateResult_sequence, hf_index, ett_dop_ProtectedTerminateResult);
1373
1374   return offset;
1375 }
1376 static int dissect_protectedTerminateResult(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1377   return dissect_dop_ProtectedTerminateResult(FALSE, tvb, offset, pinfo, tree, hf_dop_protectedTerminateResult);
1378 }
1379
1380
1381 static const value_string dop_TerminateOperationalBindingResult_vals[] = {
1382   {   0, "null" },
1383   {   1, "protected" },
1384   { 0, NULL }
1385 };
1386
1387 static const ber_choice_t TerminateOperationalBindingResult_choice[] = {
1388   {   0, BER_CLASS_CON, 0, 0, dissect_null },
1389   {   1, BER_CLASS_CON, 1, 0, dissect_protectedTerminateResult },
1390   { 0, 0, 0, 0, NULL }
1391 };
1392
1393 static int
1394 dissect_dop_TerminateOperationalBindingResult(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1395   offset = dissect_ber_choice(pinfo, tree, tvb, offset,
1396                                  TerminateOperationalBindingResult_choice, hf_index, ett_dop_TerminateOperationalBindingResult,
1397                                  NULL);
1398
1399   return offset;
1400 }
1401
1402
1403 static const value_string dop_T_problem_vals[] = {
1404   {   0, "invalidID" },
1405   {   1, "duplicateID" },
1406   {   2, "unsupportedBindingType" },
1407   {   3, "notAllowedForRole" },
1408   {   4, "parametersMissing" },
1409   {   5, "roleAssignment" },
1410   {   6, "invalidStartTime" },
1411   {   7, "invalidEndTime" },
1412   {   8, "invalidAgreement" },
1413   {   9, "currentlyNotDecidable" },
1414   {  10, "modificationNotAllowed" },
1415   { 0, NULL }
1416 };
1417
1418
1419 static int
1420 dissect_dop_T_problem(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1421   offset = dissect_ber_integer(implicit_tag, pinfo, tree, tvb, offset, hf_index,
1422                                   NULL);
1423
1424   return offset;
1425 }
1426 static int dissect_problem(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1427   return dissect_dop_T_problem(FALSE, tvb, offset, pinfo, tree, hf_dop_problem);
1428 }
1429
1430
1431
1432 static int
1433 dissect_dop_T_agreementProposal(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1434 #line 143 "dop.cnf"
1435
1436   offset = call_dop_oid_callback("dop.agreement", tvb, offset, pinfo, tree);
1437
1438
1439
1440   return offset;
1441 }
1442 static int dissect_agreementProposal(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1443   return dissect_dop_T_agreementProposal(FALSE, tvb, offset, pinfo, tree, hf_dop_agreementProposal);
1444 }
1445
1446
1447 static const ber_sequence_t OpBindingErrorParam_sequence[] = {
1448   { BER_CLASS_CON, 0, 0, dissect_problem },
1449   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_bindingType },
1450   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_agreementProposal },
1451   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_NOTCHKTAG, dissect_retryAt },
1452   { BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL, dissect_securityParameters },
1453   { BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL, dissect_performer },
1454   { BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL, dissect_aliasDereferenced },
1455   { BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL, dissect_notification },
1456   { 0, 0, 0, NULL }
1457 };
1458
1459 static int
1460 dissect_dop_OpBindingErrorParam(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1461   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1462                                    OpBindingErrorParam_sequence, hf_index, ett_dop_OpBindingErrorParam);
1463
1464   return offset;
1465 }
1466
1467
1468 static const ber_sequence_t HierarchicalAgreement_sequence[] = {
1469   { BER_CLASS_CON, 0, 0, dissect_rdn },
1470   { BER_CLASS_CON, 1, 0, dissect_immediateSuperior },
1471   { 0, 0, 0, NULL }
1472 };
1473
1474 static int
1475 dissect_dop_HierarchicalAgreement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1476   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1477                                    HierarchicalAgreement_sequence, hf_index, ett_dop_HierarchicalAgreement);
1478
1479   return offset;
1480 }
1481
1482
1483 static const ber_sequence_t SET_OF_Attribute_set_of[1] = {
1484   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_entryInfo_item },
1485 };
1486
1487 static int
1488 dissect_dop_SET_OF_Attribute(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1489   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
1490                                  SET_OF_Attribute_set_of, hf_index, ett_dop_SET_OF_Attribute);
1491
1492   return offset;
1493 }
1494 static int dissect_entryInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1495   return dissect_dop_SET_OF_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_entryInfo);
1496 }
1497 static int dissect_immediateSuperiorInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1498   return dissect_dop_SET_OF_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_immediateSuperiorInfo);
1499 }
1500 static int dissect_admPointInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1501   return dissect_dop_SET_OF_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_admPointInfo);
1502 }
1503 static int dissect_info(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1504   return dissect_dop_SET_OF_Attribute(FALSE, tvb, offset, pinfo, tree, hf_dop_info);
1505 }
1506
1507
1508 static const ber_sequence_t SubentryInfo_sequence[] = {
1509   { BER_CLASS_CON, 0, 0, dissect_rdn },
1510   { BER_CLASS_CON, 1, 0, dissect_info },
1511   { 0, 0, 0, NULL }
1512 };
1513
1514 static int
1515 dissect_dop_SubentryInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1516   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1517                                    SubentryInfo_sequence, hf_index, ett_dop_SubentryInfo);
1518
1519   return offset;
1520 }
1521 static int dissect_subentries_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1522   return dissect_dop_SubentryInfo(FALSE, tvb, offset, pinfo, tree, hf_dop_subentries_item);
1523 }
1524
1525
1526 static const ber_sequence_t SET_OF_SubentryInfo_set_of[1] = {
1527   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_subentries_item },
1528 };
1529
1530 static int
1531 dissect_dop_SET_OF_SubentryInfo(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1532   offset = dissect_ber_set_of(implicit_tag, pinfo, tree, tvb, offset,
1533                                  SET_OF_SubentryInfo_set_of, hf_index, ett_dop_SET_OF_SubentryInfo);
1534
1535   return offset;
1536 }
1537 static int dissect_subentries(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1538   return dissect_dop_SET_OF_SubentryInfo(FALSE, tvb, offset, pinfo, tree, hf_dop_subentries);
1539 }
1540
1541
1542 static const ber_sequence_t Vertex_sequence[] = {
1543   { BER_CLASS_CON, 0, 0, dissect_rdn },
1544   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_admPointInfo },
1545   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_subentries },
1546   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_accessPoints },
1547   { 0, 0, 0, NULL }
1548 };
1549
1550 static int
1551 dissect_dop_Vertex(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1552   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1553                                    Vertex_sequence, hf_index, ett_dop_Vertex);
1554
1555   return offset;
1556 }
1557 static int dissect_DITcontext_item(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1558   return dissect_dop_Vertex(FALSE, tvb, offset, pinfo, tree, hf_dop_DITcontext_item);
1559 }
1560
1561
1562 static const ber_sequence_t DITcontext_sequence_of[1] = {
1563   { BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_DITcontext_item },
1564 };
1565
1566 static int
1567 dissect_dop_DITcontext(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1568   offset = dissect_ber_sequence_of(implicit_tag, pinfo, tree, tvb, offset,
1569                                       DITcontext_sequence_of, hf_index, ett_dop_DITcontext);
1570
1571   return offset;
1572 }
1573 static int dissect_contextPrefixInfo(packet_info *pinfo, proto_tree *tree, tvbuff_t *tvb, int offset) {
1574   return dissect_dop_DITcontext(FALSE, tvb, offset, pinfo, tree, hf_dop_contextPrefixInfo);
1575 }
1576
1577
1578 static const ber_sequence_t SuperiorToSubordinate_sequence[] = {
1579   { BER_CLASS_CON, 0, 0, dissect_contextPrefixInfo },
1580   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_entryInfo },
1581   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_immediateSuperiorInfo },
1582   { 0, 0, 0, NULL }
1583 };
1584
1585 static int
1586 dissect_dop_SuperiorToSubordinate(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1587   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1588                                    SuperiorToSubordinate_sequence, hf_index, ett_dop_SuperiorToSubordinate);
1589
1590   return offset;
1591 }
1592
1593
1594 static const ber_sequence_t SubordinateToSuperior_sequence[] = {
1595   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_accessPoints },
1596   { BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_alias },
1597   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_entryInfo },
1598   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_subentries },
1599   { 0, 0, 0, NULL }
1600 };
1601
1602 static int
1603 dissect_dop_SubordinateToSuperior(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1604   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1605                                    SubordinateToSuperior_sequence, hf_index, ett_dop_SubordinateToSuperior);
1606
1607   return offset;
1608 }
1609
1610
1611 static const ber_sequence_t SuperiorToSubordinateModification_sequence[] = {
1612   { BER_CLASS_CON, 0, 0, dissect_contextPrefixInfo },
1613   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_immediateSuperiorInfo },
1614   { 0, 0, 0, NULL }
1615 };
1616
1617 static int
1618 dissect_dop_SuperiorToSubordinateModification(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1619   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1620                                    SuperiorToSubordinateModification_sequence, hf_index, ett_dop_SuperiorToSubordinateModification);
1621
1622   return offset;
1623 }
1624
1625
1626 static const ber_sequence_t NonSpecificHierarchicalAgreement_sequence[] = {
1627   { BER_CLASS_CON, 1, 0, dissect_immediateSuperior },
1628   { 0, 0, 0, NULL }
1629 };
1630
1631 static int
1632 dissect_dop_NonSpecificHierarchicalAgreement(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1633   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1634                                    NonSpecificHierarchicalAgreement_sequence, hf_index, ett_dop_NonSpecificHierarchicalAgreement);
1635
1636   return offset;
1637 }
1638
1639
1640 static const ber_sequence_t NHOBSuperiorToSubordinate_sequence[] = {
1641   { BER_CLASS_CON, 0, 0, dissect_contextPrefixInfo },
1642   { BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL, dissect_immediateSuperiorInfo },
1643   { 0, 0, 0, NULL }
1644 };
1645
1646 static int
1647 dissect_dop_NHOBSuperiorToSubordinate(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1648   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1649                                    NHOBSuperiorToSubordinate_sequence, hf_index, ett_dop_NHOBSuperiorToSubordinate);
1650
1651   return offset;
1652 }
1653
1654
1655 static const ber_sequence_t NHOBSubordinateToSuperior_sequence[] = {
1656   { BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_accessPoints },
1657   { BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL, dissect_subentries },
1658   { 0, 0, 0, NULL }
1659 };
1660
1661 static int
1662 dissect_dop_NHOBSubordinateToSuperior(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) {
1663   offset = dissect_ber_sequence(implicit_tag, pinfo, tree, tvb, offset,
1664                                    NHOBSubordinateToSuperior_sequence, hf_index, ett_dop_NHOBSubordinateToSuperior);
1665
1666   return offset;
1667 }
1668
1669 /*--- PDUs ---*/
1670
1671 static void dissect_DSEType_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1672   dissect_dop_DSEType(FALSE, tvb, 0, pinfo, tree, hf_dop_DSEType_PDU);
1673 }
1674 static void dissect_SupplierInformation_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1675   dissect_dop_SupplierInformation(FALSE, tvb, 0, pinfo, tree, hf_dop_SupplierInformation_PDU);
1676 }
1677 static void dissect_ConsumerInformation_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1678   dissect_dop_ConsumerInformation(FALSE, tvb, 0, pinfo, tree, hf_dop_ConsumerInformation_PDU);
1679 }
1680 static void dissect_SupplierAndConsumers_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1681   dissect_dop_SupplierAndConsumers(FALSE, tvb, 0, pinfo, tree, hf_dop_SupplierAndConsumers_PDU);
1682 }
1683 static void dissect_HierarchicalAgreement_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1684   dissect_dop_HierarchicalAgreement(FALSE, tvb, 0, pinfo, tree, hf_dop_HierarchicalAgreement_PDU);
1685 }
1686 static void dissect_SuperiorToSubordinate_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1687   dissect_dop_SuperiorToSubordinate(FALSE, tvb, 0, pinfo, tree, hf_dop_SuperiorToSubordinate_PDU);
1688 }
1689 static void dissect_SubordinateToSuperior_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1690   dissect_dop_SubordinateToSuperior(FALSE, tvb, 0, pinfo, tree, hf_dop_SubordinateToSuperior_PDU);
1691 }
1692 static void dissect_SuperiorToSubordinateModification_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1693   dissect_dop_SuperiorToSubordinateModification(FALSE, tvb, 0, pinfo, tree, hf_dop_SuperiorToSubordinateModification_PDU);
1694 }
1695 static void dissect_NonSpecificHierarchicalAgreement_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1696   dissect_dop_NonSpecificHierarchicalAgreement(FALSE, tvb, 0, pinfo, tree, hf_dop_NonSpecificHierarchicalAgreement_PDU);
1697 }
1698 static void dissect_NHOBSuperiorToSubordinate_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1699   dissect_dop_NHOBSuperiorToSubordinate(FALSE, tvb, 0, pinfo, tree, hf_dop_NHOBSuperiorToSubordinate_PDU);
1700 }
1701 static void dissect_NHOBSubordinateToSuperior_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) {
1702   dissect_dop_NHOBSubordinateToSuperior(FALSE, tvb, 0, pinfo, tree, hf_dop_NHOBSubordinateToSuperior_PDU);
1703 }
1704
1705
1706 /*--- End of included file: packet-dop-fn.c ---*/
1707 #line 75 "packet-dop-template.c"
1708
1709 static int
1710 call_dop_oid_callback(char *base_oid, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree)
1711 {
1712   char *name = NULL;
1713   char binding_param[BER_MAX_OID_STR_LEN];
1714
1715   sprintf(binding_param, "%s.%s", base_oid, binding_type ? binding_type : "");  
1716
1717   name = get_ber_oid_name(binding_param);
1718   proto_item_append_text(tree, " (%s)", name ? name : binding_param); 
1719
1720   return call_ber_oid_callback(binding_param, tvb, offset, pinfo, tree);
1721
1722 }
1723
1724
1725 /*
1726 * Dissect DOP PDUs inside a ROS PDUs
1727 */
1728 static void
1729 dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
1730 {
1731         int offset = 0;
1732         int old_offset;
1733         proto_item *item=NULL;
1734         proto_tree *tree=NULL;
1735         int (*dop_dissector)(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index _U_) = NULL;
1736         char *dop_op_name;
1737
1738         /* do we have operation information from the ROS dissector?  */
1739         if( !pinfo->private_data ){
1740                 if(parent_tree){
1741                         proto_tree_add_text(parent_tree, tvb, offset, -1,
1742                                 "Internal error: can't get operation information from ROS dissector.");
1743                 } 
1744                 return  ;
1745         } else {
1746                 session  = ( (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data) );
1747         }
1748
1749         if(parent_tree){
1750                 item = proto_tree_add_item(parent_tree, proto_dop, tvb, 0, -1, FALSE);
1751                 tree = proto_item_add_subtree(item, ett_dop);
1752         }
1753         if (check_col(pinfo->cinfo, COL_PROTOCOL))
1754                 col_set_str(pinfo->cinfo, COL_PROTOCOL, "DOP");
1755         if (check_col(pinfo->cinfo, COL_INFO))
1756                 col_clear(pinfo->cinfo, COL_INFO);
1757
1758         switch(session->ros_op & ROS_OP_MASK) {
1759         case (ROS_OP_BIND | ROS_OP_ARGUMENT):   /*  BindInvoke */
1760           dop_dissector = dissect_dop_DSAOperationalManagementBindArgument;
1761           dop_op_name = "DSA-Operational-Bind-Argument";
1762           break;
1763         case (ROS_OP_BIND | ROS_OP_RESULT):     /*  BindResult */
1764           dop_dissector = dissect_dop_DSAOperationalManagementBindResult;
1765           dop_op_name = "DSA-Operational-Bind-Result";
1766           break;
1767         case (ROS_OP_BIND | ROS_OP_ERROR):      /*  BindError */
1768           dop_dissector = dissect_dop_DSAOperationalManagementBindError;
1769           dop_op_name = "DSA-Operational-Management-Bind-Error";
1770           break;
1771         case (ROS_OP_INVOKE | ROS_OP_ARGUMENT): /*  Invoke Argument */
1772           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
1773           case 100: /* establish */
1774             dop_dissector = dissect_dop_EstablishOperationalBindingArgument;
1775             dop_op_name = "Establish-Operational-Binding-Argument";
1776             break;
1777           case 101: /* terminate */
1778             dop_dissector = dissect_dop_TerminateOperationalBindingArgument;
1779             dop_op_name = "Terminate-Operational-Binding-Argument";
1780             break;
1781           case 102: /* modify */
1782             dop_dissector = dissect_dop_ModifyOperationalBindingArgument;
1783             dop_op_name = "Modify-Operational-Binding-Argument";
1784             break;
1785           default:
1786             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Argument opcode (%d)",
1787                                 session->ros_op & ROS_OP_OPCODE_MASK);
1788             break;
1789           }
1790           break;
1791         case (ROS_OP_INVOKE | ROS_OP_RESULT):   /*  Return Result */
1792           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
1793           case 100: /* establish */
1794             dop_dissector = dissect_dop_EstablishOperationalBindingResult;
1795             dop_op_name = "Establish-Operational-Binding-Result";
1796             break;
1797           case 101: /* terminate */
1798             dop_dissector = dissect_dop_TerminateOperationalBindingResult;
1799             dop_op_name = "Terminate-Operational-Binding-Result";
1800             break;
1801           case 102: /* modify */
1802             dop_dissector = dissect_dop_ModifyOperationalBindingResult;
1803             dop_op_name = "Modify-Operational-Binding-Result";
1804             break;
1805           default:
1806             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Result opcode (%d)",
1807                                 session->ros_op & ROS_OP_OPCODE_MASK);
1808             break;
1809           }
1810           break;
1811         case (ROS_OP_INVOKE | ROS_OP_ERROR):    /*  Return Error */
1812           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
1813           case 100: /* operational-binding */
1814             dop_dissector = dissect_dop_OpBindingErrorParam;
1815             dop_op_name = "Operational-Binding-Error";
1816             break;
1817           default:
1818             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP Error opcode (%d)",
1819                                 session->ros_op & ROS_OP_OPCODE_MASK);
1820             break;
1821           }
1822           break;
1823         default:
1824           proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DOP PDU");
1825           return;
1826         }
1827
1828         if(dop_dissector) {
1829           if (check_col(pinfo->cinfo, COL_INFO))
1830             col_add_str(pinfo->cinfo, COL_INFO, dop_op_name);
1831
1832           while (tvb_reported_length_remaining(tvb, offset) > 0){
1833             old_offset=offset;
1834             offset=(*dop_dissector)(FALSE, tvb, offset, pinfo , tree, -1);
1835             if(offset == old_offset){
1836               proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DOP PDU");
1837               offset = tvb_length(tvb);
1838               break;
1839             }
1840           }
1841         }
1842 }
1843
1844
1845
1846 /*--- proto_register_dop -------------------------------------------*/
1847 void proto_register_dop(void) {
1848
1849   /* List of fields */
1850   static hf_register_info hf[] =
1851   {
1852
1853 /*--- Included file: packet-dop-hfarr.c ---*/
1854 #line 1 "packet-dop-hfarr.c"
1855     { &hf_dop_DSEType_PDU,
1856       { "DSEType", "dop.DSEType",
1857         FT_BYTES, BASE_HEX, NULL, 0,
1858         "DSEType", HFILL }},
1859     { &hf_dop_SupplierInformation_PDU,
1860       { "SupplierInformation", "dop.SupplierInformation",
1861         FT_NONE, BASE_NONE, NULL, 0,
1862         "SupplierInformation", HFILL }},
1863     { &hf_dop_ConsumerInformation_PDU,
1864       { "ConsumerInformation", "dop.ConsumerInformation",
1865         FT_NONE, BASE_NONE, NULL, 0,
1866         "ConsumerInformation", HFILL }},
1867     { &hf_dop_SupplierAndConsumers_PDU,
1868       { "SupplierAndConsumers", "dop.SupplierAndConsumers",
1869         FT_NONE, BASE_NONE, NULL, 0,
1870         "SupplierAndConsumers", HFILL }},
1871     { &hf_dop_HierarchicalAgreement_PDU,
1872       { "HierarchicalAgreement", "dop.HierarchicalAgreement",
1873         FT_NONE, BASE_NONE, NULL, 0,
1874         "HierarchicalAgreement", HFILL }},
1875     { &hf_dop_SuperiorToSubordinate_PDU,
1876       { "SuperiorToSubordinate", "dop.SuperiorToSubordinate",
1877         FT_NONE, BASE_NONE, NULL, 0,
1878         "SuperiorToSubordinate", HFILL }},
1879     { &hf_dop_SubordinateToSuperior_PDU,
1880       { "SubordinateToSuperior", "dop.SubordinateToSuperior",
1881         FT_NONE, BASE_NONE, NULL, 0,
1882         "SubordinateToSuperior", HFILL }},
1883     { &hf_dop_SuperiorToSubordinateModification_PDU,
1884       { "SuperiorToSubordinateModification", "dop.SuperiorToSubordinateModification",
1885         FT_NONE, BASE_NONE, NULL, 0,
1886         "SuperiorToSubordinateModification", HFILL }},
1887     { &hf_dop_NonSpecificHierarchicalAgreement_PDU,
1888       { "NonSpecificHierarchicalAgreement", "dop.NonSpecificHierarchicalAgreement",
1889         FT_NONE, BASE_NONE, NULL, 0,
1890         "NonSpecificHierarchicalAgreement", HFILL }},
1891     { &hf_dop_NHOBSuperiorToSubordinate_PDU,
1892       { "NHOBSuperiorToSubordinate", "dop.NHOBSuperiorToSubordinate",
1893         FT_NONE, BASE_NONE, NULL, 0,
1894         "NHOBSuperiorToSubordinate", HFILL }},
1895     { &hf_dop_NHOBSubordinateToSuperior_PDU,
1896       { "NHOBSubordinateToSuperior", "dop.NHOBSubordinateToSuperior",
1897         FT_NONE, BASE_NONE, NULL, 0,
1898         "NHOBSubordinateToSuperior", HFILL }},
1899     { &hf_dop_ae_title,
1900       { "ae-title", "dop.ae_title",
1901         FT_UINT32, BASE_DEC, VALS(x509if_Name_vals), 0,
1902         "", HFILL }},
1903     { &hf_dop_address,
1904       { "address", "dop.address",
1905         FT_NONE, BASE_NONE, NULL, 0,
1906         "", HFILL }},
1907     { &hf_dop_protocolInformation,
1908       { "protocolInformation", "dop.protocolInformation",
1909         FT_UINT32, BASE_DEC, NULL, 0,
1910         "", HFILL }},
1911     { &hf_dop_protocolInformation_item,
1912       { "Item", "dop.protocolInformation_item",
1913         FT_NONE, BASE_NONE, NULL, 0,
1914         "", HFILL }},
1915     { &hf_dop_agreementID,
1916       { "agreementID", "dop.agreementID",
1917         FT_NONE, BASE_NONE, NULL, 0,
1918         "", HFILL }},
1919     { &hf_dop_supplier_is_master,
1920       { "supplier-is-master", "dop.supplier_is_master",
1921         FT_BOOLEAN, 8, NULL, 0,
1922         "SupplierInformation/supplier-is-master", HFILL }},
1923     { &hf_dop_non_supplying_master,
1924       { "non-supplying-master", "dop.non_supplying_master",
1925         FT_NONE, BASE_NONE, NULL, 0,
1926         "SupplierInformation/non-supplying-master", HFILL }},
1927     { &hf_dop_consumers,
1928       { "consumers", "dop.consumers",
1929         FT_UINT32, BASE_DEC, NULL, 0,
1930         "SupplierAndConsumers/consumers", HFILL }},
1931     { &hf_dop_consumers_item,
1932       { "Item", "dop.consumers_item",
1933         FT_NONE, BASE_NONE, NULL, 0,
1934         "SupplierAndConsumers/consumers/_item", HFILL }},
1935     { &hf_dop_bindingType,
1936       { "bindingType", "dop.bindingType",
1937         FT_OID, BASE_NONE, NULL, 0,
1938         "", HFILL }},
1939     { &hf_dop_bindingID,
1940       { "bindingID", "dop.bindingID",
1941         FT_NONE, BASE_NONE, NULL, 0,
1942         "", HFILL }},
1943     { &hf_dop_accessPoint,
1944       { "accessPoint", "dop.accessPoint",
1945         FT_NONE, BASE_NONE, NULL, 0,
1946         "", HFILL }},
1947     { &hf_dop_establishInitiator,
1948       { "initiator", "dop.initiator",
1949         FT_UINT32, BASE_DEC, VALS(dop_EstablishArgumentInitiator_vals), 0,
1950         "EstablishOperationalBindingArgumentData/initiator", HFILL }},
1951     { &hf_dop_establishSymmetric,
1952       { "symmetric", "dop.symmetric",
1953         FT_NONE, BASE_NONE, NULL, 0,
1954         "EstablishOperationalBindingArgumentData/initiator/symmetric", HFILL }},
1955     { &hf_dop_establishRoleAInitiates,
1956       { "roleA-initiates", "dop.roleA_initiates",
1957         FT_NONE, BASE_NONE, NULL, 0,
1958         "EstablishOperationalBindingArgumentData/initiator/roleA-initiates", HFILL }},
1959     { &hf_dop_establishRoleBInitiates,
1960       { "roleB-initiates", "dop.roleB_initiates",
1961         FT_NONE, BASE_NONE, NULL, 0,
1962         "EstablishOperationalBindingArgumentData/initiator/roleB-initiates", HFILL }},
1963     { &hf_dop_agreement,
1964       { "agreement", "dop.agreement",
1965         FT_NONE, BASE_NONE, NULL, 0,
1966         "EstablishOperationalBindingArgumentData/agreement", HFILL }},
1967     { &hf_dop_valid,
1968       { "valid", "dop.valid",
1969         FT_NONE, BASE_NONE, NULL, 0,
1970         "", HFILL }},
1971     { &hf_dop_securityParameters,
1972       { "securityParameters", "dop.securityParameters",
1973         FT_NONE, BASE_NONE, NULL, 0,
1974         "", HFILL }},
1975     { &hf_dop_unsignedEstablishOperationalBindingArgument,
1976       { "unsignedEstablishOperationalBindingArgument", "dop.unsignedEstablishOperationalBindingArgument",
1977         FT_NONE, BASE_NONE, NULL, 0,
1978         "EstablishOperationalBindingArgument/unsignedEstablishOperationalBindingArgument", HFILL }},
1979     { &hf_dop_signedEstablishOperationalBindingArgument,
1980       { "signedEstablishOperationalBindingArgument", "dop.signedEstablishOperationalBindingArgument",
1981         FT_NONE, BASE_NONE, NULL, 0,
1982         "EstablishOperationalBindingArgument/signedEstablishOperationalBindingArgument", HFILL }},
1983     { &hf_dop_establishOperationalBindingArgument,
1984       { "establishOperationalBindingArgument", "dop.establishOperationalBindingArgument",
1985         FT_NONE, BASE_NONE, NULL, 0,
1986         "EstablishOperationalBindingArgument/signedEstablishOperationalBindingArgument/establishOperationalBindingArgument", HFILL }},
1987     { &hf_dop_algorithmIdentifier,
1988       { "algorithmIdentifier", "dop.algorithmIdentifier",
1989         FT_NONE, BASE_NONE, NULL, 0,
1990         "", HFILL }},
1991     { &hf_dop_encrypted,
1992       { "encrypted", "dop.encrypted",
1993         FT_BYTES, BASE_HEX, NULL, 0,
1994         "", HFILL }},
1995     { &hf_dop_identifier,
1996       { "identifier", "dop.identifier",
1997         FT_INT32, BASE_DEC, NULL, 0,
1998         "OperationalBindingID/identifier", HFILL }},
1999     { &hf_dop_version,
2000       { "version", "dop.version",
2001         FT_INT32, BASE_DEC, NULL, 0,
2002         "OperationalBindingID/version", HFILL }},
2003     { &hf_dop_validFrom,
2004       { "validFrom", "dop.validFrom",
2005         FT_UINT32, BASE_DEC, VALS(dop_T_validFrom_vals), 0,
2006         "Validity/validFrom", HFILL }},
2007     { &hf_dop_now,
2008       { "now", "dop.now",
2009         FT_NONE, BASE_NONE, NULL, 0,
2010         "Validity/validFrom/now", HFILL }},
2011     { &hf_dop_time,
2012       { "time", "dop.time",
2013         FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
2014         "", HFILL }},
2015     { &hf_dop_validUntil,
2016       { "validUntil", "dop.validUntil",
2017         FT_UINT32, BASE_DEC, VALS(dop_T_validUntil_vals), 0,
2018         "Validity/validUntil", HFILL }},
2019     { &hf_dop_explicitTermination,
2020       { "explicitTermination", "dop.explicitTermination",
2021         FT_NONE, BASE_NONE, NULL, 0,
2022         "Validity/validUntil/explicitTermination", HFILL }},
2023     { &hf_dop_utcTime,
2024       { "utcTime", "dop.utcTime",
2025         FT_STRING, BASE_NONE, NULL, 0,
2026         "Time/utcTime", HFILL }},
2027     { &hf_dop_generalizedTime,
2028       { "generalizedTime", "dop.generalizedTime",
2029         FT_STRING, BASE_NONE, NULL, 0,
2030         "Time/generalizedTime", HFILL }},
2031     { &hf_dop_initiator,
2032       { "initiator", "dop.initiator",
2033         FT_UINT32, BASE_DEC, VALS(dop_T_initiator_vals), 0,
2034         "EstablishOperationalBindingResult/initiator", HFILL }},
2035     { &hf_dop_symmetric,
2036       { "symmetric", "dop.symmetric",
2037         FT_NONE, BASE_NONE, NULL, 0,
2038         "EstablishOperationalBindingResult/initiator/symmetric", HFILL }},
2039     { &hf_dop_roleA_replies,
2040       { "roleA-replies", "dop.roleA_replies",
2041         FT_NONE, BASE_NONE, NULL, 0,
2042         "EstablishOperationalBindingResult/initiator/roleA-replies", HFILL }},
2043     { &hf_dop_roleB_replies,
2044       { "roleB-replies", "dop.roleB_replies",
2045         FT_NONE, BASE_NONE, NULL, 0,
2046         "EstablishOperationalBindingResult/initiator/roleB-replies", HFILL }},
2047     { &hf_dop_performer,
2048       { "performer", "dop.performer",
2049         FT_UINT32, BASE_DEC, NULL, 0,
2050         "", HFILL }},
2051     { &hf_dop_aliasDereferenced,
2052       { "aliasDereferenced", "dop.aliasDereferenced",
2053         FT_BOOLEAN, 8, NULL, 0,
2054         "", HFILL }},
2055     { &hf_dop_notification,
2056       { "notification", "dop.notification",
2057         FT_UINT32, BASE_DEC, NULL, 0,
2058         "", HFILL }},
2059     { &hf_dop_notification_item,
2060       { "Item", "dop.notification_item",
2061         FT_NONE, BASE_NONE, NULL, 0,
2062         "", HFILL }},
2063     { &hf_dop_modifyInitiator,
2064       { "initiator", "dop.initiator",
2065         FT_UINT32, BASE_DEC, VALS(dop_ModifyArgumentInitiator_vals), 0,
2066         "ModifyOperationalBindingArgumentData/initiator", HFILL }},
2067     { &hf_dop_modifySymmetric,
2068       { "symmetric", "dop.symmetric",
2069         FT_NONE, BASE_NONE, NULL, 0,
2070         "ModifyOperationalBindingArgumentData/initiator/symmetric", HFILL }},
2071     { &hf_dop_modifyRoleAInitiates,
2072       { "roleA-initiates", "dop.roleA_initiates",
2073         FT_NONE, BASE_NONE, NULL, 0,
2074         "ModifyOperationalBindingArgumentData/initiator/roleA-initiates", HFILL }},
2075     { &hf_dop_modifyRoleBInitiates,
2076       { "roleB-initiates", "dop.roleB_initiates",
2077         FT_NONE, BASE_NONE, NULL, 0,
2078         "ModifyOperationalBindingArgumentData/initiator/roleB-initiates", HFILL }},
2079     { &hf_dop_newBindingID,
2080       { "newBindingID", "dop.newBindingID",
2081         FT_NONE, BASE_NONE, NULL, 0,
2082         "", HFILL }},
2083     { &hf_dop_argumentNewAgreement,
2084       { "newAgreement", "dop.newAgreement",
2085         FT_NONE, BASE_NONE, NULL, 0,
2086         "ModifyOperationalBindingArgumentData/newAgreement", HFILL }},
2087     { &hf_dop_unsignedModifyOperationalBindingArgument,
2088       { "unsignedModifyOperationalBindingArgument", "dop.unsignedModifyOperationalBindingArgument",
2089         FT_NONE, BASE_NONE, NULL, 0,
2090         "ModifyOperationalBindingArgument/unsignedModifyOperationalBindingArgument", HFILL }},
2091     { &hf_dop_signedModifyOperationalBindingArgument,
2092       { "signedModifyOperationalBindingArgument", "dop.signedModifyOperationalBindingArgument",
2093         FT_NONE, BASE_NONE, NULL, 0,
2094         "ModifyOperationalBindingArgument/signedModifyOperationalBindingArgument", HFILL }},
2095     { &hf_dop_modifyOperationalBindingArgument,
2096       { "modifyOperationalBindingArgument", "dop.modifyOperationalBindingArgument",
2097         FT_NONE, BASE_NONE, NULL, 0,
2098         "ModifyOperationalBindingArgument/signedModifyOperationalBindingArgument/modifyOperationalBindingArgument", HFILL }},
2099     { &hf_dop_null,
2100       { "null", "dop.null",
2101         FT_NONE, BASE_NONE, NULL, 0,
2102         "", HFILL }},
2103     { &hf_dop_protectedModifyResult,
2104       { "protected", "dop.protected",
2105         FT_NONE, BASE_NONE, NULL, 0,
2106         "ModifyOperationalBindingResult/protected", HFILL }},
2107     { &hf_dop_modifyOperationalBindingResultData,
2108       { "modifyOperationalBindingResultData", "dop.modifyOperationalBindingResultData",
2109         FT_NONE, BASE_NONE, NULL, 0,
2110         "ModifyOperationalBindingResult/protected/modifyOperationalBindingResultData", HFILL }},
2111     { &hf_dop_resultNewAgreement,
2112       { "newAgreement", "dop.newAgreement",
2113         FT_NONE, BASE_NONE, NULL, 0,
2114         "ModifyOperationalBindingResultData/newAgreement", HFILL }},
2115     { &hf_dop_terminateInitiator,
2116       { "initiator", "dop.initiator",
2117         FT_UINT32, BASE_DEC, VALS(dop_TerminateArgumentInitiator_vals), 0,
2118         "TerminateOperationalBindingArgumentData/initiator", HFILL }},
2119     { &hf_dop_terminateSymmetric,
2120       { "symmetric", "dop.symmetric",
2121         FT_NONE, BASE_NONE, NULL, 0,
2122         "TerminateOperationalBindingArgumentData/initiator/symmetric", HFILL }},
2123     { &hf_dop_terminateRoleAInitiates,
2124       { "roleA-initiates", "dop.roleA_initiates",
2125         FT_NONE, BASE_NONE, NULL, 0,
2126         "TerminateOperationalBindingArgumentData/initiator/roleA-initiates", HFILL }},
2127     { &hf_dop_terminateRoleBInitiates,
2128       { "roleB-initiates", "dop.roleB_initiates",
2129         FT_NONE, BASE_NONE, NULL, 0,
2130         "TerminateOperationalBindingArgumentData/initiator/roleB-initiates", HFILL }},
2131     { &hf_dop_terminateAtTime,
2132       { "terminateAt", "dop.terminateAt",
2133         FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
2134         "TerminateOperationalBindingArgumentData/terminateAt", HFILL }},
2135     { &hf_dop_unsignedTerminateOperationalBindingArgument,
2136       { "unsignedTerminateOperationalBindingArgument", "dop.unsignedTerminateOperationalBindingArgument",
2137         FT_NONE, BASE_NONE, NULL, 0,
2138         "TerminateOperationalBindingArgument/unsignedTerminateOperationalBindingArgument", HFILL }},
2139     { &hf_dop_signedTerminateOperationalBindingArgument,
2140       { "signedTerminateOperationalBindingArgument", "dop.signedTerminateOperationalBindingArgument",
2141         FT_NONE, BASE_NONE, NULL, 0,
2142         "TerminateOperationalBindingArgument/signedTerminateOperationalBindingArgument", HFILL }},
2143     { &hf_dop_terminateOperationalBindingArgument,
2144       { "terminateOperationalBindingArgument", "dop.terminateOperationalBindingArgument",
2145         FT_NONE, BASE_NONE, NULL, 0,
2146         "TerminateOperationalBindingArgument/signedTerminateOperationalBindingArgument/terminateOperationalBindingArgument", HFILL }},
2147     { &hf_dop_protectedTerminateResult,
2148       { "protected", "dop.protected",
2149         FT_NONE, BASE_NONE, NULL, 0,
2150         "TerminateOperationalBindingResult/protected", HFILL }},
2151     { &hf_dop_terminateOperationalBindingResultData,
2152       { "terminateOperationalBindingResultData", "dop.terminateOperationalBindingResultData",
2153         FT_NONE, BASE_NONE, NULL, 0,
2154         "TerminateOperationalBindingResult/protected/terminateOperationalBindingResultData", HFILL }},
2155     { &hf_dop_terminateAtGeneralizedTime,
2156       { "terminateAt", "dop.terminateAt",
2157         FT_STRING, BASE_NONE, NULL, 0,
2158         "TerminateOperationalBindingResultData/terminateAt", HFILL }},
2159     { &hf_dop_problem,
2160       { "problem", "dop.problem",
2161         FT_UINT32, BASE_DEC, VALS(dop_T_problem_vals), 0,
2162         "OpBindingErrorParam/problem", HFILL }},
2163     { &hf_dop_agreementProposal,
2164       { "agreementProposal", "dop.agreementProposal",
2165         FT_NONE, BASE_NONE, NULL, 0,
2166         "OpBindingErrorParam/agreementProposal", HFILL }},
2167     { &hf_dop_retryAt,
2168       { "retryAt", "dop.retryAt",
2169         FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
2170         "OpBindingErrorParam/retryAt", HFILL }},
2171     { &hf_dop_rdn,
2172       { "rdn", "dop.rdn",
2173         FT_UINT32, BASE_DEC, NULL, 0,
2174         "", HFILL }},
2175     { &hf_dop_immediateSuperior,
2176       { "immediateSuperior", "dop.immediateSuperior",
2177         FT_UINT32, BASE_DEC, NULL, 0,
2178         "", HFILL }},
2179     { &hf_dop_contextPrefixInfo,
2180       { "contextPrefixInfo", "dop.contextPrefixInfo",
2181         FT_UINT32, BASE_DEC, NULL, 0,
2182         "", HFILL }},
2183     { &hf_dop_entryInfo,
2184       { "entryInfo", "dop.entryInfo",
2185         FT_UINT32, BASE_DEC, NULL, 0,
2186         "", HFILL }},
2187     { &hf_dop_entryInfo_item,
2188       { "Item", "dop.entryInfo_item",
2189         FT_NONE, BASE_NONE, NULL, 0,
2190         "", HFILL }},
2191     { &hf_dop_immediateSuperiorInfo,
2192       { "immediateSuperiorInfo", "dop.immediateSuperiorInfo",
2193         FT_UINT32, BASE_DEC, NULL, 0,
2194         "", HFILL }},
2195     { &hf_dop_immediateSuperiorInfo_item,
2196       { "Item", "dop.immediateSuperiorInfo_item",
2197         FT_NONE, BASE_NONE, NULL, 0,
2198         "", HFILL }},
2199     { &hf_dop_DITcontext_item,
2200       { "Item", "dop.DITcontext_item",
2201         FT_NONE, BASE_NONE, NULL, 0,
2202         "DITcontext/_item", HFILL }},
2203     { &hf_dop_admPointInfo,
2204       { "admPointInfo", "dop.admPointInfo",
2205         FT_UINT32, BASE_DEC, NULL, 0,
2206         "Vertex/admPointInfo", HFILL }},
2207     { &hf_dop_admPointInfo_item,
2208       { "Item", "dop.admPointInfo_item",
2209         FT_NONE, BASE_NONE, NULL, 0,
2210         "Vertex/admPointInfo/_item", HFILL }},
2211     { &hf_dop_subentries,
2212       { "subentries", "dop.subentries",
2213         FT_UINT32, BASE_DEC, NULL, 0,
2214         "", HFILL }},
2215     { &hf_dop_subentries_item,
2216       { "Item", "dop.subentries_item",
2217         FT_NONE, BASE_NONE, NULL, 0,
2218         "", HFILL }},
2219     { &hf_dop_accessPoints,
2220       { "accessPoints", "dop.accessPoints",
2221         FT_NONE, BASE_NONE, NULL, 0,
2222         "", HFILL }},
2223     { &hf_dop_info,
2224       { "info", "dop.info",
2225         FT_UINT32, BASE_DEC, NULL, 0,
2226         "SubentryInfo/info", HFILL }},
2227     { &hf_dop_info_item,
2228       { "Item", "dop.info_item",
2229         FT_NONE, BASE_NONE, NULL, 0,
2230         "SubentryInfo/info/_item", HFILL }},
2231     { &hf_dop_alias,
2232       { "alias", "dop.alias",
2233         FT_BOOLEAN, 8, NULL, 0,
2234         "SubordinateToSuperior/alias", HFILL }},
2235     { &hf_dop_DSEType_root,
2236       { "root", "dop.root",
2237         FT_BOOLEAN, 8, NULL, 0x80,
2238         "", HFILL }},
2239     { &hf_dop_DSEType_glue,
2240       { "glue", "dop.glue",
2241         FT_BOOLEAN, 8, NULL, 0x40,
2242         "", HFILL }},
2243     { &hf_dop_DSEType_cp,
2244       { "cp", "dop.cp",
2245         FT_BOOLEAN, 8, NULL, 0x20,
2246         "", HFILL }},
2247     { &hf_dop_DSEType_entry,
2248       { "entry", "dop.entry",
2249         FT_BOOLEAN, 8, NULL, 0x10,
2250         "", HFILL }},
2251     { &hf_dop_DSEType_alias,
2252       { "alias", "dop.alias",
2253         FT_BOOLEAN, 8, NULL, 0x08,
2254         "", HFILL }},
2255     { &hf_dop_DSEType_subr,
2256       { "subr", "dop.subr",
2257         FT_BOOLEAN, 8, NULL, 0x04,
2258         "", HFILL }},
2259     { &hf_dop_DSEType_nssr,
2260       { "nssr", "dop.nssr",
2261         FT_BOOLEAN, 8, NULL, 0x02,
2262         "", HFILL }},
2263     { &hf_dop_DSEType_supr,
2264       { "supr", "dop.supr",
2265         FT_BOOLEAN, 8, NULL, 0x01,
2266         "", HFILL }},
2267     { &hf_dop_DSEType_xr,
2268       { "xr", "dop.xr",
2269         FT_BOOLEAN, 8, NULL, 0x80,
2270         "", HFILL }},
2271     { &hf_dop_DSEType_admPoint,
2272       { "admPoint", "dop.admPoint",
2273         FT_BOOLEAN, 8, NULL, 0x40,
2274         "", HFILL }},
2275     { &hf_dop_DSEType_subentry,
2276       { "subentry", "dop.subentry",
2277         FT_BOOLEAN, 8, NULL, 0x20,
2278         "", HFILL }},
2279     { &hf_dop_DSEType_shadow,
2280       { "shadow", "dop.shadow",
2281         FT_BOOLEAN, 8, NULL, 0x10,
2282         "", HFILL }},
2283     { &hf_dop_DSEType_immSupr,
2284       { "immSupr", "dop.immSupr",
2285         FT_BOOLEAN, 8, NULL, 0x04,
2286         "", HFILL }},
2287     { &hf_dop_DSEType_rhob,
2288       { "rhob", "dop.rhob",
2289         FT_BOOLEAN, 8, NULL, 0x02,
2290         "", HFILL }},
2291     { &hf_dop_DSEType_sa,
2292       { "sa", "dop.sa",
2293         FT_BOOLEAN, 8, NULL, 0x01,
2294         "", HFILL }},
2295     { &hf_dop_DSEType_dsSubentry,
2296       { "dsSubentry", "dop.dsSubentry",
2297         FT_BOOLEAN, 8, NULL, 0x80,
2298         "", HFILL }},
2299     { &hf_dop_DSEType_familyMember,
2300       { "familyMember", "dop.familyMember",
2301         FT_BOOLEAN, 8, NULL, 0x40,
2302         "", HFILL }},
2303
2304 /*--- End of included file: packet-dop-hfarr.c ---*/
2305 #line 220 "packet-dop-template.c"
2306   };
2307
2308   /* List of subtrees */
2309   static gint *ett[] = {
2310     &ett_dop,
2311
2312 /*--- Included file: packet-dop-ettarr.c ---*/
2313 #line 1 "packet-dop-ettarr.c"
2314     &ett_dop_DSEType,
2315     &ett_dop_SupplierOrConsumer,
2316     &ett_dop_SET_OF_ProtocolInformation,
2317     &ett_dop_SupplierInformation,
2318     &ett_dop_SupplierAndConsumers,
2319     &ett_dop_SET_OF_AccessPoint,
2320     &ett_dop_EstablishOperationalBindingArgumentData,
2321     &ett_dop_EstablishArgumentInitiator,
2322     &ett_dop_EstablishOperationalBindingArgument,
2323     &ett_dop_T_signedEstablishOperationalBindingArgument,
2324     &ett_dop_OperationalBindingID,
2325     &ett_dop_Validity,
2326     &ett_dop_T_validFrom,
2327     &ett_dop_T_validUntil,
2328     &ett_dop_Time,
2329     &ett_dop_EstablishOperationalBindingResult,
2330     &ett_dop_T_initiator,
2331     &ett_dop_SEQUENCE_SIZE_1_MAX_OF_Attribute,
2332     &ett_dop_ModifyOperationalBindingArgumentData,
2333     &ett_dop_ModifyArgumentInitiator,
2334     &ett_dop_ModifyOperationalBindingArgument,
2335     &ett_dop_T_signedModifyOperationalBindingArgument,
2336     &ett_dop_ModifyOperationalBindingResult,
2337     &ett_dop_ProtectedModifyResult,
2338     &ett_dop_ModifyOperationalBindingResultData,
2339     &ett_dop_TerminateOperationalBindingArgumentData,
2340     &ett_dop_TerminateArgumentInitiator,
2341     &ett_dop_TerminateOperationalBindingArgument,
2342     &ett_dop_T_signedTerminateOperationalBindingArgument,
2343     &ett_dop_TerminateOperationalBindingResult,
2344     &ett_dop_ProtectedTerminateResult,
2345     &ett_dop_TerminateOperationalBindingResultData,
2346     &ett_dop_OpBindingErrorParam,
2347     &ett_dop_HierarchicalAgreement,
2348     &ett_dop_SuperiorToSubordinate,
2349     &ett_dop_SET_OF_Attribute,
2350     &ett_dop_DITcontext,
2351     &ett_dop_Vertex,
2352     &ett_dop_SET_OF_SubentryInfo,
2353     &ett_dop_SubentryInfo,
2354     &ett_dop_SubordinateToSuperior,
2355     &ett_dop_SuperiorToSubordinateModification,
2356     &ett_dop_NonSpecificHierarchicalAgreement,
2357     &ett_dop_NHOBSuperiorToSubordinate,
2358     &ett_dop_NHOBSubordinateToSuperior,
2359
2360 /*--- End of included file: packet-dop-ettarr.c ---*/
2361 #line 226 "packet-dop-template.c"
2362   };
2363
2364   module_t *dop_module;
2365
2366   /* Register protocol */
2367   proto_dop = proto_register_protocol(PNAME, PSNAME, PFNAME);
2368
2369   /* initially disable the protocol */
2370   proto_set_decoding(proto_dop, FALSE);
2371
2372   register_dissector("dop", dissect_dop, proto_dop);
2373
2374   /* Register fields and subtrees */
2375   proto_register_field_array(proto_dop, hf, array_length(hf));
2376   proto_register_subtree_array(ett, array_length(ett));
2377
2378   /* Register our configuration options for DOP, particularly our port */
2379
2380 #ifdef PREFERENCE_GROUPING
2381   dop_module = prefs_register_protocol_subtree("OSI/X.500", proto_dop, prefs_register_dop);
2382 #else
2383   dop_module = prefs_register_protocol(proto_dop, prefs_register_dop);
2384 #endif 
2385
2386   prefs_register_uint_preference(dop_module, "tcp.port", "DOP TCP Port",
2387                                  "Set the port for DOP operations (if other"
2388                                  " than the default of 102)",
2389                                  10, &global_dop_tcp_port);
2390
2391
2392 }
2393
2394
2395 /*--- proto_reg_handoff_dop --- */
2396 void proto_reg_handoff_dop(void) {
2397   dissector_handle_t handle = NULL;
2398
2399
2400 /*--- Included file: packet-dop-dis-tab.c ---*/
2401 #line 1 "packet-dop-dis-tab.c"
2402   register_ber_oid_dissector("2.5.12.0", dissect_DSEType_PDU, proto_dop, "id-doa-dseType");
2403   register_ber_oid_dissector("2.5.12.5", dissect_SupplierInformation_PDU, proto_dop, "id-doa-supplierKnowledge");
2404   register_ber_oid_dissector("2.5.12.6", dissect_ConsumerInformation_PDU, proto_dop, "id-doa-consumerKnowledge");
2405   register_ber_oid_dissector("2.5.12.7", dissect_SupplierAndConsumers_PDU, proto_dop, "id-doa-secondaryShadows");
2406   register_ber_oid_dissector("dop.agreement.2.5.19.2", dissect_HierarchicalAgreement_PDU, proto_dop, "hierarchical-agreement");
2407   register_ber_oid_dissector("dop.establish.rolea.2.5.19.2", dissect_SuperiorToSubordinate_PDU, proto_dop, "hierarchical-establish-rolea");
2408   register_ber_oid_dissector("dop.modify.rolea.2.5.19.2", dissect_SuperiorToSubordinateModification_PDU, proto_dop, "hierarchical-modify-rolea");
2409   register_ber_oid_dissector("dop.establish.roleb.2.5.19.2", dissect_SubordinateToSuperior_PDU, proto_dop, "hierarchical-establish-roleb");
2410   register_ber_oid_dissector("dop.modify.roleb.2.5.19.2", dissect_SubordinateToSuperior_PDU, proto_dop, "hierarchical-modify-roleb");
2411   register_ber_oid_dissector("dop.agreement.2.5.19.3", dissect_NonSpecificHierarchicalAgreement_PDU, proto_dop, "non-specific-hierarchical-agreement");
2412   register_ber_oid_dissector("dop.establish.rolea.2.5.19.3", dissect_NHOBSuperiorToSubordinate_PDU, proto_dop, "non-specific-hierarchical-establish-rolea");
2413   register_ber_oid_dissector("dop.modify.rolea.2.5.19.3", dissect_NHOBSuperiorToSubordinate_PDU, proto_dop, "non-specific-hierarchical-modify-rolea");
2414   register_ber_oid_dissector("dop.establish.roleb.2.5.19.3", dissect_NHOBSubordinateToSuperior_PDU, proto_dop, "non-specific-hierarchical-establish-roleb");
2415   register_ber_oid_dissector("dop.modify.roleb.2.5.19.3", dissect_NHOBSubordinateToSuperior_PDU, proto_dop, "non-specific-hierarchical-modify-roleb");
2416
2417
2418 /*--- End of included file: packet-dop-dis-tab.c ---*/
2419 #line 264 "packet-dop-template.c"
2420   /* APPLICATION CONTEXT */
2421
2422   register_ber_oid_name("2.5.3.3", "id-ac-directory-operational-binding-management");
2423
2424   /* ABSTRACT SYNTAXES */
2425     
2426   /* Register DOP with ROS (with no use of RTSE) */
2427   if((handle = find_dissector("dop"))) {
2428     register_ros_oid_dissector_handle("2.5.9.4", handle, 0, "id-as-directory-operational-binding-management", FALSE); 
2429   }
2430
2431   /* remember the tpkt handler for change in preferences */
2432   tpkt_handle = find_dissector("tpkt");
2433
2434 }
2435
2436 void prefs_register_dop(void) {
2437
2438   /* de-register the old port */
2439   /* port 102 is registered by TPKT - don't undo this! */
2440   if((tcp_port != 102) && tpkt_handle)
2441     dissector_delete("tcp.port", tcp_port, tpkt_handle);
2442
2443   /* Set our port number for future use */
2444   tcp_port = global_dop_tcp_port;
2445
2446   if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle)
2447     dissector_add("tcp.port", global_dop_tcp_port, tpkt_handle);
2448
2449 }