#include <string.h> and/or #include <stdio.h> not needed.
[obnox/wireshark/wip.git] / epan / dissectors / packet-disp.c
1 /* Do not modify this file.                                                   */
2 /* It is created automatically by the ASN.1 to Wireshark dissector compiler   */
3 /* packet-disp.c                                                              */
4 /* ../../tools/asn2wrs.py -b -e -p disp -c ./disp.cnf -s ./packet-disp-template -D . disp.asn */
5
6 /* Input file: packet-disp-template.c */
7
8 #line 1 "packet-disp-template.c"
9 /* packet-disp.c
10  * Routines for X.525 (X.500 Directory Shadow Asbtract Service) and X.519 DISP packet dissection
11  * Graeme Lunt 2005
12  *
13  * $Id$
14  *
15  * Wireshark - Network traffic analyzer
16  * By Gerald Combs <gerald@wireshark.org>
17  * Copyright 1998 Gerald Combs
18  *
19  * This program is free software; you can redistribute it and/or
20  * modify it under the terms of the GNU General Public License
21  * as published by the Free Software Foundation; either version 2
22  * of the License, or (at your option) any later version.
23  *
24  * This program is distributed in the hope that it will be useful,
25  * but WITHOUT ANY WARRANTY; without even the implied warranty of
26  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  * GNU General Public License for more details.
28  *
29  * You should have received a copy of the GNU General Public License
30  * along with this program; if not, write to the Free Software
31  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
32  */
33
34 #ifdef HAVE_CONFIG_H
35 # include "config.h"
36 #endif
37
38 #include <glib.h>
39 #include <epan/packet.h>
40 #include <epan/prefs.h>
41 #include <epan/oids.h>
42 #include <epan/asn1.h>
43
44 #include "packet-ber.h"
45 #include "packet-acse.h"
46 #include "packet-ros.h"
47 #include "packet-rtse.h"
48
49 #include "packet-x509if.h"
50 #include "packet-x509af.h"
51 #include "packet-x509sat.h"
52 #include "packet-crmf.h"
53
54 #include "packet-dop.h"
55 #include "packet-dap.h"
56 #include "packet-dsp.h"
57 #include "packet-disp.h"
58
59
60 /* we don't have a separate dissector for X519 - 
61    and most of DISP is defined in X525 */
62 #define PNAME  "X.519 Directory Information Shadowing Protocol"
63 #define PSNAME "DISP"
64 #define PFNAME "disp"
65
66 static guint global_disp_tcp_port = 102;
67 static dissector_handle_t tpkt_handle;
68 void prefs_register_disp(void); /* forward declaration for use in preferences registration */
69
70
71 /* Initialize the protocol and registered fields */
72 static int proto_disp = -1;
73
74 static struct SESSION_DATA_STRUCTURE* session = NULL;
75
76
77 /*--- Included file: packet-disp-hf.c ---*/
78 #line 1 "packet-disp-hf.c"
79 static int hf_disp_EstablishParameter_PDU = -1;   /* EstablishParameter */
80 static int hf_disp_ModificationParameter_PDU = -1;  /* ModificationParameter */
81 static int hf_disp_ShadowingAgreementInfo_PDU = -1;  /* ShadowingAgreementInfo */
82 static int hf_disp_modifiedSecondaryShadows = -1;  /* SET_OF_SupplierAndConsumers */
83 static int hf_disp_modifiedSecondaryShadows_item = -1;  /* SupplierAndConsumers */
84 static int hf_disp_shadowSubject = -1;            /* UnitOfReplication */
85 static int hf_disp_updateMode = -1;               /* UpdateMode */
86 static int hf_disp_master = -1;                   /* AccessPoint */
87 static int hf_disp_secondaryShadows = -1;         /* BOOLEAN */
88 static int hf_disp_area = -1;                     /* AreaSpecification */
89 static int hf_disp_replication_attributes = -1;   /* AttributeSelection */
90 static int hf_disp_knowledge = -1;                /* Knowledge */
91 static int hf_disp_subordinates = -1;             /* BOOLEAN */
92 static int hf_disp_contextSelection = -1;         /* ContextSelection */
93 static int hf_disp_supplyContexts = -1;           /* T_supplyContexts */
94 static int hf_disp_allContexts = -1;              /* NULL */
95 static int hf_disp_selectedContexts = -1;         /* T_selectedContexts */
96 static int hf_disp_selectedContexts_item = -1;    /* OBJECT_IDENTIFIER */
97 static int hf_disp_contextPrefix = -1;            /* DistinguishedName */
98 static int hf_disp_replicationArea = -1;          /* SubtreeSpecification */
99 static int hf_disp_knowledgeType = -1;            /* T_knowledgeType */
100 static int hf_disp_extendedKnowledge = -1;        /* BOOLEAN */
101 static int hf_disp_AttributeSelection_item = -1;  /* ClassAttributeSelection */
102 static int hf_disp_class = -1;                    /* OBJECT_IDENTIFIER */
103 static int hf_disp_classAttributes = -1;          /* ClassAttributes */
104 static int hf_disp_allAttributes = -1;            /* NULL */
105 static int hf_disp_include = -1;                  /* AttributeTypes */
106 static int hf_disp_exclude = -1;                  /* AttributeTypes */
107 static int hf_disp_AttributeTypes_item = -1;      /* AttributeType */
108 static int hf_disp_supplierInitiated = -1;        /* SupplierUpdateMode */
109 static int hf_disp_consumerInitiated = -1;        /* ConsumerUpdateMode */
110 static int hf_disp_onChange = -1;                 /* BOOLEAN */
111 static int hf_disp_scheduled = -1;                /* SchedulingParameters */
112 static int hf_disp_periodic = -1;                 /* PeriodicStrategy */
113 static int hf_disp_othertimes = -1;               /* BOOLEAN */
114 static int hf_disp_beginTime = -1;                /* Time */
115 static int hf_disp_windowSize = -1;               /* INTEGER */
116 static int hf_disp_updateInterval = -1;           /* INTEGER */
117 static int hf_disp_agreementID = -1;              /* AgreementID */
118 static int hf_disp_lastUpdate = -1;               /* Time */
119 static int hf_disp_updateStrategy = -1;           /* T_updateStrategy */
120 static int hf_disp_standardUpdate = -1;           /* StandardUpdate */
121 static int hf_disp_other = -1;                    /* EXTERNAL */
122 static int hf_disp_securityParameters = -1;       /* SecurityParameters */
123 static int hf_disp_unsignedCoordinateShadowUpdateArgument = -1;  /* CoordinateShadowUpdateArgumentData */
124 static int hf_disp_signedCoordinateShadowUpdateArgument = -1;  /* T_signedCoordinateShadowUpdateArgument */
125 static int hf_disp_coordinateShadowUpdateArgument = -1;  /* CoordinateShadowUpdateArgumentData */
126 static int hf_disp_algorithmIdentifier = -1;      /* AlgorithmIdentifier */
127 static int hf_disp_encrypted = -1;                /* BIT_STRING */
128 static int hf_disp_null = -1;                     /* NULL */
129 static int hf_disp_information = -1;              /* Information */
130 static int hf_disp_performer = -1;                /* DistinguishedName */
131 static int hf_disp_aliasDereferenced = -1;        /* BOOLEAN */
132 static int hf_disp_notification = -1;             /* SEQUENCE_OF_Attribute */
133 static int hf_disp_notification_item = -1;        /* Attribute */
134 static int hf_disp_unsignedInformation = -1;      /* InformationData */
135 static int hf_disp_signedInformation = -1;        /* T_signedInformation */
136 static int hf_disp_information_data = -1;         /* InformationData */
137 static int hf_disp_requestedStrategy = -1;        /* T_requestedStrategy */
138 static int hf_disp_standard = -1;                 /* T_standard */
139 static int hf_disp_unsignedRequestShadowUpdateArgument = -1;  /* RequestShadowUpdateArgumentData */
140 static int hf_disp_signedRequestShadowUpdateArgument = -1;  /* T_signedRequestShadowUpdateArgument */
141 static int hf_disp_requestShadowUpdateArgument = -1;  /* RequestShadowUpdateArgumentData */
142 static int hf_disp_updateTime = -1;               /* Time */
143 static int hf_disp_updateWindow = -1;             /* UpdateWindow */
144 static int hf_disp_updatedInfo = -1;              /* RefreshInformation */
145 static int hf_disp_unsignedUpdateShadowArgument = -1;  /* UpdateShadowArgumentData */
146 static int hf_disp_signedUpdateShadowArgument = -1;  /* T_signedUpdateShadowArgument */
147 static int hf_disp_updateShadowArgument = -1;     /* UpdateShadowArgumentData */
148 static int hf_disp_start = -1;                    /* Time */
149 static int hf_disp_stop = -1;                     /* Time */
150 static int hf_disp_noRefresh = -1;                /* NULL */
151 static int hf_disp_total = -1;                    /* TotalRefresh */
152 static int hf_disp_incremental = -1;              /* IncrementalRefresh */
153 static int hf_disp_otherStrategy = -1;            /* EXTERNAL */
154 static int hf_disp_sDSE = -1;                     /* SDSEContent */
155 static int hf_disp_subtree = -1;                  /* SET_OF_Subtree */
156 static int hf_disp_subtree_item = -1;             /* Subtree */
157 static int hf_disp_sDSEType = -1;                 /* SDSEType */
158 static int hf_disp_subComplete = -1;              /* BOOLEAN */
159 static int hf_disp_attComplete = -1;              /* BOOLEAN */
160 static int hf_disp_attributes = -1;               /* SET_OF_Attribute */
161 static int hf_disp_attributes_item = -1;          /* Attribute */
162 static int hf_disp_attValIncomplete = -1;         /* SET_OF_AttributeType */
163 static int hf_disp_attValIncomplete_item = -1;    /* AttributeType */
164 static int hf_disp_rdn = -1;                      /* RelativeDistinguishedName */
165 static int hf_disp_IncrementalRefresh_item = -1;  /* IncrementalStepRefresh */
166 static int hf_disp_sDSEChanges = -1;              /* T_sDSEChanges */
167 static int hf_disp_add = -1;                      /* SDSEContent */
168 static int hf_disp_remove = -1;                   /* NULL */
169 static int hf_disp_modify = -1;                   /* ContentChange */
170 static int hf_disp_subordinateUpdates = -1;       /* SEQUENCE_OF_SubordinateChanges */
171 static int hf_disp_subordinateUpdates_item = -1;  /* SubordinateChanges */
172 static int hf_disp_rename = -1;                   /* T_rename */
173 static int hf_disp_newRDN = -1;                   /* RelativeDistinguishedName */
174 static int hf_disp_newDN = -1;                    /* DistinguishedName */
175 static int hf_disp_attributeChanges = -1;         /* T_attributeChanges */
176 static int hf_disp_replace = -1;                  /* SET_OF_Attribute */
177 static int hf_disp_replace_item = -1;             /* Attribute */
178 static int hf_disp_changes = -1;                  /* SEQUENCE_OF_EntryModification */
179 static int hf_disp_changes_item = -1;             /* EntryModification */
180 static int hf_disp_subordinate = -1;              /* RelativeDistinguishedName */
181 static int hf_disp_subordinate_changes = -1;      /* IncrementalStepRefresh */
182 static int hf_disp_problem = -1;                  /* ShadowProblem */
183 static int hf_disp_unsignedShadowError = -1;      /* ShadowErrorData */
184 static int hf_disp_signedShadowError = -1;        /* T_signedShadowError */
185 static int hf_disp_shadowError = -1;              /* ShadowErrorData */
186
187 /*--- End of included file: packet-disp-hf.c ---*/
188 #line 69 "packet-disp-template.c"
189
190 /* Initialize the subtree pointers */
191 static gint ett_disp = -1;
192
193 /*--- Included file: packet-disp-ett.c ---*/
194 #line 1 "packet-disp-ett.c"
195 static gint ett_disp_ModificationParameter = -1;
196 static gint ett_disp_SET_OF_SupplierAndConsumers = -1;
197 static gint ett_disp_ShadowingAgreementInfo = -1;
198 static gint ett_disp_UnitOfReplication = -1;
199 static gint ett_disp_T_supplyContexts = -1;
200 static gint ett_disp_T_selectedContexts = -1;
201 static gint ett_disp_AreaSpecification = -1;
202 static gint ett_disp_Knowledge = -1;
203 static gint ett_disp_AttributeSelection = -1;
204 static gint ett_disp_ClassAttributeSelection = -1;
205 static gint ett_disp_ClassAttributes = -1;
206 static gint ett_disp_AttributeTypes = -1;
207 static gint ett_disp_UpdateMode = -1;
208 static gint ett_disp_SupplierUpdateMode = -1;
209 static gint ett_disp_SchedulingParameters = -1;
210 static gint ett_disp_PeriodicStrategy = -1;
211 static gint ett_disp_CoordinateShadowUpdateArgumentData = -1;
212 static gint ett_disp_T_updateStrategy = -1;
213 static gint ett_disp_CoordinateShadowUpdateArgument = -1;
214 static gint ett_disp_T_signedCoordinateShadowUpdateArgument = -1;
215 static gint ett_disp_CoordinateShadowUpdateResult = -1;
216 static gint ett_disp_InformationData = -1;
217 static gint ett_disp_SEQUENCE_OF_Attribute = -1;
218 static gint ett_disp_Information = -1;
219 static gint ett_disp_T_signedInformation = -1;
220 static gint ett_disp_RequestShadowUpdateArgumentData = -1;
221 static gint ett_disp_T_requestedStrategy = -1;
222 static gint ett_disp_RequestShadowUpdateArgument = -1;
223 static gint ett_disp_T_signedRequestShadowUpdateArgument = -1;
224 static gint ett_disp_RequestShadowUpdateResult = -1;
225 static gint ett_disp_UpdateShadowArgumentData = -1;
226 static gint ett_disp_UpdateShadowArgument = -1;
227 static gint ett_disp_T_signedUpdateShadowArgument = -1;
228 static gint ett_disp_UpdateShadowResult = -1;
229 static gint ett_disp_UpdateWindow = -1;
230 static gint ett_disp_RefreshInformation = -1;
231 static gint ett_disp_TotalRefresh = -1;
232 static gint ett_disp_SET_OF_Subtree = -1;
233 static gint ett_disp_SDSEContent = -1;
234 static gint ett_disp_SET_OF_Attribute = -1;
235 static gint ett_disp_SET_OF_AttributeType = -1;
236 static gint ett_disp_Subtree = -1;
237 static gint ett_disp_IncrementalRefresh = -1;
238 static gint ett_disp_IncrementalStepRefresh = -1;
239 static gint ett_disp_T_sDSEChanges = -1;
240 static gint ett_disp_SEQUENCE_OF_SubordinateChanges = -1;
241 static gint ett_disp_ContentChange = -1;
242 static gint ett_disp_T_rename = -1;
243 static gint ett_disp_T_attributeChanges = -1;
244 static gint ett_disp_SEQUENCE_OF_EntryModification = -1;
245 static gint ett_disp_SubordinateChanges = -1;
246 static gint ett_disp_ShadowErrorData = -1;
247 static gint ett_disp_ShadowError = -1;
248 static gint ett_disp_T_signedShadowError = -1;
249
250 /*--- End of included file: packet-disp-ett.c ---*/
251 #line 73 "packet-disp-template.c"
252
253
254 /*--- Included file: packet-disp-fn.c ---*/
255 #line 1 "packet-disp-fn.c"
256 /*--- Cyclic dependencies ---*/
257
258 /* Subtree -> Subtree/subtree -> Subtree */
259 static int dissect_disp_Subtree(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
260
261 /* IncrementalStepRefresh -> IncrementalStepRefresh/subordinateUpdates -> SubordinateChanges -> IncrementalStepRefresh */
262 static int dissect_disp_IncrementalStepRefresh(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
263
264
265
266
267 static int
268 dissect_disp_DSAShadowBindArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
269   offset = dissect_dap_DirectoryBindArgument(implicit_tag, tvb, offset, actx, tree, hf_index);
270
271   return offset;
272 }
273
274
275
276 static int
277 dissect_disp_DSAShadowBindResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
278   offset = dissect_dap_DirectoryBindArgument(implicit_tag, tvb, offset, actx, tree, hf_index);
279
280   return offset;
281 }
282
283
284
285 static int
286 dissect_disp_DSAShadowBindError(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
287   offset = dissect_dap_DirectoryBindError(implicit_tag, tvb, offset, actx, tree, hf_index);
288
289   return offset;
290 }
291
292
293
294 static int
295 dissect_disp_EstablishParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
296   offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
297
298   return offset;
299 }
300
301
302 static const ber_sequence_t SET_OF_SupplierAndConsumers_set_of[1] = {
303   { &hf_disp_modifiedSecondaryShadows_item, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_dop_SupplierAndConsumers },
304 };
305
306 static int
307 dissect_disp_SET_OF_SupplierAndConsumers(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
308   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
309                                  SET_OF_SupplierAndConsumers_set_of, hf_index, ett_disp_SET_OF_SupplierAndConsumers);
310
311   return offset;
312 }
313
314
315 static const ber_sequence_t ModificationParameter_sequence[] = {
316   { &hf_disp_modifiedSecondaryShadows, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_disp_SET_OF_SupplierAndConsumers },
317   { NULL, 0, 0, 0, NULL }
318 };
319
320 static int
321 dissect_disp_ModificationParameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
322   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
323                                    ModificationParameter_sequence, hf_index, ett_disp_ModificationParameter);
324
325   return offset;
326 }
327
328
329
330 int
331 dissect_disp_AgreementID(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
332   offset = dissect_dop_OperationalBindingID(implicit_tag, tvb, offset, actx, tree, hf_index);
333
334   return offset;
335 }
336
337
338 static const ber_sequence_t AreaSpecification_sequence[] = {
339   { &hf_disp_contextPrefix  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_DistinguishedName },
340   { &hf_disp_replicationArea, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_SubtreeSpecification },
341   { NULL, 0, 0, 0, NULL }
342 };
343
344 static int
345 dissect_disp_AreaSpecification(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
346   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
347                                    AreaSpecification_sequence, hf_index, ett_disp_AreaSpecification);
348
349   return offset;
350 }
351
352
353
354 static int
355 dissect_disp_OBJECT_IDENTIFIER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
356   offset = dissect_ber_object_identifier(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
357
358   return offset;
359 }
360
361
362
363 static int
364 dissect_disp_NULL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
365   offset = dissect_ber_null(implicit_tag, actx, tree, tvb, offset, hf_index);
366
367   return offset;
368 }
369
370
371 static const ber_sequence_t AttributeTypes_set_of[1] = {
372   { &hf_disp_AttributeTypes_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
373 };
374
375 static int
376 dissect_disp_AttributeTypes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
377   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
378                                  AttributeTypes_set_of, hf_index, ett_disp_AttributeTypes);
379
380   return offset;
381 }
382
383
384 static const value_string disp_ClassAttributes_vals[] = {
385   {   0, "allAttributes" },
386   {   1, "include" },
387   {   2, "exclude" },
388   { 0, NULL }
389 };
390
391 static const ber_choice_t ClassAttributes_choice[] = {
392   {   0, &hf_disp_allAttributes  , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_disp_NULL },
393   {   1, &hf_disp_include        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_AttributeTypes },
394   {   2, &hf_disp_exclude        , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_disp_AttributeTypes },
395   { 0, NULL, 0, 0, 0, NULL }
396 };
397
398 static int
399 dissect_disp_ClassAttributes(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
400   offset = dissect_ber_choice(actx, tree, tvb, offset,
401                                  ClassAttributes_choice, hf_index, ett_disp_ClassAttributes,
402                                  NULL);
403
404   return offset;
405 }
406
407
408 static const ber_sequence_t ClassAttributeSelection_sequence[] = {
409   { &hf_disp_class          , BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_OBJECT_IDENTIFIER },
410   { &hf_disp_classAttributes, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_disp_ClassAttributes },
411   { NULL, 0, 0, 0, NULL }
412 };
413
414 static int
415 dissect_disp_ClassAttributeSelection(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
416   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
417                                    ClassAttributeSelection_sequence, hf_index, ett_disp_ClassAttributeSelection);
418
419   return offset;
420 }
421
422
423 static const ber_sequence_t AttributeSelection_set_of[1] = {
424   { &hf_disp_AttributeSelection_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_ClassAttributeSelection },
425 };
426
427 static int
428 dissect_disp_AttributeSelection(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
429   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
430                                  AttributeSelection_set_of, hf_index, ett_disp_AttributeSelection);
431
432   return offset;
433 }
434
435
436 static const value_string disp_T_knowledgeType_vals[] = {
437   {   0, "master" },
438   {   1, "shadow" },
439   {   2, "both" },
440   { 0, NULL }
441 };
442
443
444 static int
445 dissect_disp_T_knowledgeType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
446   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
447                                   NULL);
448
449   return offset;
450 }
451
452
453
454 static int
455 dissect_disp_BOOLEAN(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
456   offset = dissect_ber_boolean(implicit_tag, actx, tree, tvb, offset, hf_index, NULL);
457
458   return offset;
459 }
460
461
462 static const ber_sequence_t Knowledge_sequence[] = {
463   { &hf_disp_knowledgeType  , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_disp_T_knowledgeType },
464   { &hf_disp_extendedKnowledge, BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_BOOLEAN },
465   { NULL, 0, 0, 0, NULL }
466 };
467
468 static int
469 dissect_disp_Knowledge(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
470   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
471                                    Knowledge_sequence, hf_index, ett_disp_Knowledge);
472
473   return offset;
474 }
475
476
477 static const ber_sequence_t T_selectedContexts_set_of[1] = {
478   { &hf_disp_selectedContexts_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_disp_OBJECT_IDENTIFIER },
479 };
480
481 static int
482 dissect_disp_T_selectedContexts(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
483   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
484                                  T_selectedContexts_set_of, hf_index, ett_disp_T_selectedContexts);
485
486   return offset;
487 }
488
489
490 static const value_string disp_T_supplyContexts_vals[] = {
491   {   0, "allContexts" },
492   {   1, "selectedContexts" },
493   { 0, NULL }
494 };
495
496 static const ber_choice_t T_supplyContexts_choice[] = {
497   {   0, &hf_disp_allContexts    , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_disp_NULL },
498   {   1, &hf_disp_selectedContexts, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_disp_T_selectedContexts },
499   { 0, NULL, 0, 0, 0, NULL }
500 };
501
502 static int
503 dissect_disp_T_supplyContexts(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
504   offset = dissect_ber_choice(actx, tree, tvb, offset,
505                                  T_supplyContexts_choice, hf_index, ett_disp_T_supplyContexts,
506                                  NULL);
507
508   return offset;
509 }
510
511
512 static const ber_sequence_t UnitOfReplication_sequence[] = {
513   { &hf_disp_area           , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_AreaSpecification },
514   { &hf_disp_replication_attributes, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_disp_AttributeSelection },
515   { &hf_disp_knowledge      , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_Knowledge },
516   { &hf_disp_subordinates   , BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_BOOLEAN },
517   { &hf_disp_contextSelection, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dap_ContextSelection },
518   { &hf_disp_supplyContexts , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_disp_T_supplyContexts },
519   { NULL, 0, 0, 0, NULL }
520 };
521
522 static int
523 dissect_disp_UnitOfReplication(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
524   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
525                                    UnitOfReplication_sequence, hf_index, ett_disp_UnitOfReplication);
526
527   return offset;
528 }
529
530
531
532 static int
533 dissect_disp_Time(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
534   offset = dissect_ber_GeneralizedTime(implicit_tag, actx, tree, tvb, offset, hf_index);
535
536   return offset;
537 }
538
539
540
541 static int
542 dissect_disp_INTEGER(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
543   offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
544                                                 NULL);
545
546   return offset;
547 }
548
549
550 static const ber_sequence_t PeriodicStrategy_sequence[] = {
551   { &hf_disp_beginTime      , BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_Time },
552   { &hf_disp_windowSize     , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_disp_INTEGER },
553   { &hf_disp_updateInterval , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_disp_INTEGER },
554   { NULL, 0, 0, 0, NULL }
555 };
556
557 static int
558 dissect_disp_PeriodicStrategy(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
559   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
560                                    PeriodicStrategy_sequence, hf_index, ett_disp_PeriodicStrategy);
561
562   return offset;
563 }
564
565
566 static const ber_sequence_t SchedulingParameters_sequence[] = {
567   { &hf_disp_periodic       , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_PeriodicStrategy },
568   { &hf_disp_othertimes     , BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_BOOLEAN },
569   { NULL, 0, 0, 0, NULL }
570 };
571
572 static int
573 dissect_disp_SchedulingParameters(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
574   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
575                                    SchedulingParameters_sequence, hf_index, ett_disp_SchedulingParameters);
576
577   return offset;
578 }
579
580
581 static const value_string disp_SupplierUpdateMode_vals[] = {
582   {   0, "onChange" },
583   {   1, "scheduled" },
584   { 0, NULL }
585 };
586
587 static const ber_choice_t SupplierUpdateMode_choice[] = {
588   {   0, &hf_disp_onChange       , BER_CLASS_UNI, BER_UNI_TAG_BOOLEAN, BER_FLAGS_NOOWNTAG, dissect_disp_BOOLEAN },
589   {   1, &hf_disp_scheduled      , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_SchedulingParameters },
590   { 0, NULL, 0, 0, 0, NULL }
591 };
592
593 static int
594 dissect_disp_SupplierUpdateMode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
595   offset = dissect_ber_choice(actx, tree, tvb, offset,
596                                  SupplierUpdateMode_choice, hf_index, ett_disp_SupplierUpdateMode,
597                                  NULL);
598
599   return offset;
600 }
601
602
603
604 static int
605 dissect_disp_ConsumerUpdateMode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
606   offset = dissect_disp_SchedulingParameters(implicit_tag, tvb, offset, actx, tree, hf_index);
607
608   return offset;
609 }
610
611
612 static const value_string disp_UpdateMode_vals[] = {
613   {   0, "supplierInitiated" },
614   {   1, "consumerInitiated" },
615   { 0, NULL }
616 };
617
618 static const ber_choice_t UpdateMode_choice[] = {
619   {   0, &hf_disp_supplierInitiated, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_SupplierUpdateMode },
620   {   1, &hf_disp_consumerInitiated, BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_disp_ConsumerUpdateMode },
621   { 0, NULL, 0, 0, 0, NULL }
622 };
623
624 static int
625 dissect_disp_UpdateMode(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
626   offset = dissect_ber_choice(actx, tree, tvb, offset,
627                                  UpdateMode_choice, hf_index, ett_disp_UpdateMode,
628                                  NULL);
629
630   return offset;
631 }
632
633
634 static const ber_sequence_t ShadowingAgreementInfo_sequence[] = {
635   { &hf_disp_shadowSubject  , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_UnitOfReplication },
636   { &hf_disp_updateMode     , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_disp_UpdateMode },
637   { &hf_disp_master         , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dsp_AccessPoint },
638   { &hf_disp_secondaryShadows, BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_disp_BOOLEAN },
639   { NULL, 0, 0, 0, NULL }
640 };
641
642 static int
643 dissect_disp_ShadowingAgreementInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
644   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
645                                    ShadowingAgreementInfo_sequence, hf_index, ett_disp_ShadowingAgreementInfo);
646
647   return offset;
648 }
649
650
651 static const value_string disp_StandardUpdate_vals[] = {
652   {   0, "noChanges" },
653   {   1, "incremental" },
654   {   2, "total" },
655   { 0, NULL }
656 };
657
658
659 static int
660 dissect_disp_StandardUpdate(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
661 #line 58 "disp.cnf"
662   guint32 update;
663
664     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
665                                   &update);
666
667
668   col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", val_to_str(update, disp_StandardUpdate_vals, "unknown(%d)"));
669
670
671
672   return offset;
673 }
674
675
676
677 static int
678 dissect_disp_EXTERNAL(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
679   offset = dissect_ber_external_type(implicit_tag, tree, tvb, offset, actx, hf_index, NULL);
680
681   return offset;
682 }
683
684
685 static const value_string disp_T_updateStrategy_vals[] = {
686   {   0, "standard" },
687   {   1, "other" },
688   { 0, NULL }
689 };
690
691 static const ber_choice_t T_updateStrategy_choice[] = {
692   {   0, &hf_disp_standardUpdate , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_disp_StandardUpdate },
693   {   1, &hf_disp_other          , BER_CLASS_UNI, BER_UNI_TAG_EXTERNAL, BER_FLAGS_NOOWNTAG, dissect_disp_EXTERNAL },
694   { 0, NULL, 0, 0, 0, NULL }
695 };
696
697 static int
698 dissect_disp_T_updateStrategy(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
699   offset = dissect_ber_choice(actx, tree, tvb, offset,
700                                  T_updateStrategy_choice, hf_index, ett_disp_T_updateStrategy,
701                                  NULL);
702
703   return offset;
704 }
705
706
707 static const ber_sequence_t CoordinateShadowUpdateArgumentData_sequence[] = {
708   { &hf_disp_agreementID    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_AgreementID },
709   { &hf_disp_lastUpdate     , BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_Time },
710   { &hf_disp_updateStrategy , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_disp_T_updateStrategy },
711   { &hf_disp_securityParameters, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dap_SecurityParameters },
712   { NULL, 0, 0, 0, NULL }
713 };
714
715 static int
716 dissect_disp_CoordinateShadowUpdateArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
717   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
718                                    CoordinateShadowUpdateArgumentData_sequence, hf_index, ett_disp_CoordinateShadowUpdateArgumentData);
719
720   return offset;
721 }
722
723
724
725 static int
726 dissect_disp_BIT_STRING(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
727   offset = dissect_ber_bitstring(implicit_tag, actx, tree, tvb, offset,
728                                     NULL, hf_index, -1,
729                                     NULL);
730
731   return offset;
732 }
733
734
735 static const ber_sequence_t T_signedCoordinateShadowUpdateArgument_sequence[] = {
736   { &hf_disp_coordinateShadowUpdateArgument, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_CoordinateShadowUpdateArgumentData },
737   { &hf_disp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
738   { &hf_disp_encrypted      , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_disp_BIT_STRING },
739   { NULL, 0, 0, 0, NULL }
740 };
741
742 static int
743 dissect_disp_T_signedCoordinateShadowUpdateArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
744   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
745                                    T_signedCoordinateShadowUpdateArgument_sequence, hf_index, ett_disp_T_signedCoordinateShadowUpdateArgument);
746
747   return offset;
748 }
749
750
751 static const value_string disp_CoordinateShadowUpdateArgument_vals[] = {
752   {   0, "unsignedCoordinateShadowUpdateArgument" },
753   {   1, "signedCoordinateShadowUpdateArgument" },
754   { 0, NULL }
755 };
756
757 static const ber_choice_t CoordinateShadowUpdateArgument_choice[] = {
758   {   0, &hf_disp_unsignedCoordinateShadowUpdateArgument, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_CoordinateShadowUpdateArgumentData },
759   {   1, &hf_disp_signedCoordinateShadowUpdateArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_T_signedCoordinateShadowUpdateArgument },
760   { 0, NULL, 0, 0, 0, NULL }
761 };
762
763 static int
764 dissect_disp_CoordinateShadowUpdateArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
765   offset = dissect_ber_choice(actx, tree, tvb, offset,
766                                  CoordinateShadowUpdateArgument_choice, hf_index, ett_disp_CoordinateShadowUpdateArgument,
767                                  NULL);
768
769   return offset;
770 }
771
772
773 static const ber_sequence_t SEQUENCE_OF_Attribute_sequence_of[1] = {
774   { &hf_disp_notification_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_Attribute },
775 };
776
777 static int
778 dissect_disp_SEQUENCE_OF_Attribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
779   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
780                                       SEQUENCE_OF_Attribute_sequence_of, hf_index, ett_disp_SEQUENCE_OF_Attribute);
781
782   return offset;
783 }
784
785
786 static const ber_sequence_t InformationData_sequence[] = {
787   { &hf_disp_agreementID    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_AgreementID },
788   { &hf_disp_lastUpdate     , BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_Time },
789   { &hf_disp_securityParameters, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dap_SecurityParameters },
790   { &hf_disp_performer      , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509if_DistinguishedName },
791   { &hf_disp_aliasDereferenced, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_disp_BOOLEAN },
792   { &hf_disp_notification   , BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_disp_SEQUENCE_OF_Attribute },
793   { NULL, 0, 0, 0, NULL }
794 };
795
796 static int
797 dissect_disp_InformationData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
798   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
799                                    InformationData_sequence, hf_index, ett_disp_InformationData);
800
801   return offset;
802 }
803
804
805 static const ber_sequence_t T_signedInformation_sequence[] = {
806   { &hf_disp_information_data, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_InformationData },
807   { &hf_disp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
808   { &hf_disp_encrypted      , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_disp_BIT_STRING },
809   { NULL, 0, 0, 0, NULL }
810 };
811
812 static int
813 dissect_disp_T_signedInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
814   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
815                                    T_signedInformation_sequence, hf_index, ett_disp_T_signedInformation);
816
817   return offset;
818 }
819
820
821 static const value_string disp_Information_vals[] = {
822   {   0, "unsignedInformation" },
823   {   1, "signedInformation" },
824   { 0, NULL }
825 };
826
827 static const ber_choice_t Information_choice[] = {
828   {   0, &hf_disp_unsignedInformation, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_InformationData },
829   {   1, &hf_disp_signedInformation, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_T_signedInformation },
830   { 0, NULL, 0, 0, 0, NULL }
831 };
832
833 static int
834 dissect_disp_Information(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
835   offset = dissect_ber_choice(actx, tree, tvb, offset,
836                                  Information_choice, hf_index, ett_disp_Information,
837                                  NULL);
838
839   return offset;
840 }
841
842
843 static const value_string disp_CoordinateShadowUpdateResult_vals[] = {
844   {   0, "null" },
845   {   1, "information" },
846   { 0, NULL }
847 };
848
849 static const ber_choice_t CoordinateShadowUpdateResult_choice[] = {
850   {   0, &hf_disp_null           , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_disp_NULL },
851   {   1, &hf_disp_information    , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_disp_Information },
852   { 0, NULL, 0, 0, 0, NULL }
853 };
854
855 static int
856 dissect_disp_CoordinateShadowUpdateResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
857 #line 68 "disp.cnf"
858   guint32 update;
859
860     offset = dissect_ber_choice(actx, tree, tvb, offset,
861                                  CoordinateShadowUpdateResult_choice, hf_index, ett_disp_CoordinateShadowUpdateResult,
862                                  &update);
863
864
865   col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", val_to_str(update, disp_CoordinateShadowUpdateResult_vals, "unknown(%d)"));
866
867
868
869   return offset;
870 }
871
872
873 static const value_string disp_T_standard_vals[] = {
874   {   1, "incremental" },
875   {   2, "total" },
876   { 0, NULL }
877 };
878
879
880 static int
881 dissect_disp_T_standard(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
882 #line 38 "disp.cnf"
883   guint32 update;
884
885     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
886                                   &update);
887
888
889   col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", val_to_str(update, disp_T_standard_vals, "standard(%d"));
890
891
892
893   return offset;
894 }
895
896
897 static const value_string disp_T_requestedStrategy_vals[] = {
898   {   0, "standard" },
899   {   1, "other" },
900   { 0, NULL }
901 };
902
903 static const ber_choice_t T_requestedStrategy_choice[] = {
904   {   0, &hf_disp_standard       , BER_CLASS_UNI, BER_UNI_TAG_ENUMERATED, BER_FLAGS_NOOWNTAG, dissect_disp_T_standard },
905   {   1, &hf_disp_other          , BER_CLASS_UNI, BER_UNI_TAG_EXTERNAL, BER_FLAGS_NOOWNTAG, dissect_disp_EXTERNAL },
906   { 0, NULL, 0, 0, 0, NULL }
907 };
908
909 static int
910 dissect_disp_T_requestedStrategy(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
911   offset = dissect_ber_choice(actx, tree, tvb, offset,
912                                  T_requestedStrategy_choice, hf_index, ett_disp_T_requestedStrategy,
913                                  NULL);
914
915   return offset;
916 }
917
918
919 static const ber_sequence_t RequestShadowUpdateArgumentData_sequence[] = {
920   { &hf_disp_agreementID    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_AgreementID },
921   { &hf_disp_lastUpdate     , BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_Time },
922   { &hf_disp_requestedStrategy, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_disp_T_requestedStrategy },
923   { &hf_disp_securityParameters, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dap_SecurityParameters },
924   { NULL, 0, 0, 0, NULL }
925 };
926
927 static int
928 dissect_disp_RequestShadowUpdateArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
929   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
930                                    RequestShadowUpdateArgumentData_sequence, hf_index, ett_disp_RequestShadowUpdateArgumentData);
931
932   return offset;
933 }
934
935
936 static const ber_sequence_t T_signedRequestShadowUpdateArgument_sequence[] = {
937   { &hf_disp_requestShadowUpdateArgument, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_RequestShadowUpdateArgumentData },
938   { &hf_disp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
939   { &hf_disp_encrypted      , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_disp_BIT_STRING },
940   { NULL, 0, 0, 0, NULL }
941 };
942
943 static int
944 dissect_disp_T_signedRequestShadowUpdateArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
945   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
946                                    T_signedRequestShadowUpdateArgument_sequence, hf_index, ett_disp_T_signedRequestShadowUpdateArgument);
947
948   return offset;
949 }
950
951
952 static const value_string disp_RequestShadowUpdateArgument_vals[] = {
953   {   0, "unsignedRequestShadowUpdateArgument" },
954   {   1, "signedRequestShadowUpdateArgument" },
955   { 0, NULL }
956 };
957
958 static const ber_choice_t RequestShadowUpdateArgument_choice[] = {
959   {   0, &hf_disp_unsignedRequestShadowUpdateArgument, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_RequestShadowUpdateArgumentData },
960   {   1, &hf_disp_signedRequestShadowUpdateArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_T_signedRequestShadowUpdateArgument },
961   { 0, NULL, 0, 0, 0, NULL }
962 };
963
964 static int
965 dissect_disp_RequestShadowUpdateArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
966   offset = dissect_ber_choice(actx, tree, tvb, offset,
967                                  RequestShadowUpdateArgument_choice, hf_index, ett_disp_RequestShadowUpdateArgument,
968                                  NULL);
969
970   return offset;
971 }
972
973
974 static const value_string disp_RequestShadowUpdateResult_vals[] = {
975   {   0, "null" },
976   {   1, "information" },
977   { 0, NULL }
978 };
979
980 static const ber_choice_t RequestShadowUpdateResult_choice[] = {
981   {   0, &hf_disp_null           , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_disp_NULL },
982   {   1, &hf_disp_information    , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_disp_Information },
983   { 0, NULL, 0, 0, 0, NULL }
984 };
985
986 static int
987 dissect_disp_RequestShadowUpdateResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
988 #line 78 "disp.cnf"
989   guint32 update;
990
991     offset = dissect_ber_choice(actx, tree, tvb, offset,
992                                  RequestShadowUpdateResult_choice, hf_index, ett_disp_RequestShadowUpdateResult,
993                                  &update);
994
995
996   col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", val_to_str(update, disp_RequestShadowUpdateResult_vals, "unknown(%d)"));
997
998
999
1000   return offset;
1001 }
1002
1003
1004 static const ber_sequence_t UpdateWindow_sequence[] = {
1005   { &hf_disp_start          , BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_disp_Time },
1006   { &hf_disp_stop           , BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_disp_Time },
1007   { NULL, 0, 0, 0, NULL }
1008 };
1009
1010 static int
1011 dissect_disp_UpdateWindow(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1012   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1013                                    UpdateWindow_sequence, hf_index, ett_disp_UpdateWindow);
1014
1015   return offset;
1016 }
1017
1018
1019
1020 static int
1021 dissect_disp_SDSEType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1022   offset = dissect_dop_DSEType(implicit_tag, tvb, offset, actx, tree, hf_index);
1023
1024   return offset;
1025 }
1026
1027
1028 static const ber_sequence_t SET_OF_Attribute_set_of[1] = {
1029   { &hf_disp_attributes_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_Attribute },
1030 };
1031
1032 static int
1033 dissect_disp_SET_OF_Attribute(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1034   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1035                                  SET_OF_Attribute_set_of, hf_index, ett_disp_SET_OF_Attribute);
1036
1037   return offset;
1038 }
1039
1040
1041 static const ber_sequence_t SET_OF_AttributeType_set_of[1] = {
1042   { &hf_disp_attValIncomplete_item, BER_CLASS_UNI, BER_UNI_TAG_OID, BER_FLAGS_NOOWNTAG, dissect_x509if_AttributeType },
1043 };
1044
1045 static int
1046 dissect_disp_SET_OF_AttributeType(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1047   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1048                                  SET_OF_AttributeType_set_of, hf_index, ett_disp_SET_OF_AttributeType);
1049
1050   return offset;
1051 }
1052
1053
1054 static const ber_sequence_t SDSEContent_sequence[] = {
1055   { &hf_disp_sDSEType       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_disp_SDSEType },
1056   { &hf_disp_subComplete    , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_disp_BOOLEAN },
1057   { &hf_disp_attComplete    , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_disp_BOOLEAN },
1058   { &hf_disp_attributes     , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_disp_SET_OF_Attribute },
1059   { &hf_disp_attValIncomplete, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_SET_OF_AttributeType },
1060   { NULL, 0, 0, 0, NULL }
1061 };
1062
1063 static int
1064 dissect_disp_SDSEContent(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1065   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1066                                    SDSEContent_sequence, hf_index, ett_disp_SDSEContent);
1067
1068   return offset;
1069 }
1070
1071
1072 static const ber_sequence_t SET_OF_Subtree_set_of[1] = {
1073   { &hf_disp_subtree_item   , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_Subtree },
1074 };
1075
1076 static int
1077 dissect_disp_SET_OF_Subtree(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1078   offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
1079                                  SET_OF_Subtree_set_of, hf_index, ett_disp_SET_OF_Subtree);
1080
1081   return offset;
1082 }
1083
1084
1085 static const ber_sequence_t Subtree_sequence[] = {
1086   { &hf_disp_rdn            , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_RelativeDistinguishedName },
1087   { &hf_disp_sDSE           , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_SDSEContent },
1088   { &hf_disp_subtree        , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_SET_OF_Subtree },
1089   { NULL, 0, 0, 0, NULL }
1090 };
1091
1092 static int
1093 dissect_disp_Subtree(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1094   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1095                                    Subtree_sequence, hf_index, ett_disp_Subtree);
1096
1097   return offset;
1098 }
1099
1100
1101 static const ber_sequence_t TotalRefresh_sequence[] = {
1102   { &hf_disp_sDSE           , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_SDSEContent },
1103   { &hf_disp_subtree        , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_SET_OF_Subtree },
1104   { NULL, 0, 0, 0, NULL }
1105 };
1106
1107 static int
1108 dissect_disp_TotalRefresh(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1109   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1110                                    TotalRefresh_sequence, hf_index, ett_disp_TotalRefresh);
1111
1112   return offset;
1113 }
1114
1115
1116 static const value_string disp_T_rename_vals[] = {
1117   {   0, "newRDN" },
1118   {   1, "newDN" },
1119   { 0, NULL }
1120 };
1121
1122 static const ber_choice_t T_rename_choice[] = {
1123   {   0, &hf_disp_newRDN         , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_RelativeDistinguishedName },
1124   {   1, &hf_disp_newDN          , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509if_DistinguishedName },
1125   { 0, NULL, 0, 0, 0, NULL }
1126 };
1127
1128 static int
1129 dissect_disp_T_rename(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1130   offset = dissect_ber_choice(actx, tree, tvb, offset,
1131                                  T_rename_choice, hf_index, ett_disp_T_rename,
1132                                  NULL);
1133
1134   return offset;
1135 }
1136
1137
1138 static const ber_sequence_t SEQUENCE_OF_EntryModification_sequence_of[1] = {
1139   { &hf_disp_changes_item   , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_dap_EntryModification },
1140 };
1141
1142 static int
1143 dissect_disp_SEQUENCE_OF_EntryModification(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1144   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1145                                       SEQUENCE_OF_EntryModification_sequence_of, hf_index, ett_disp_SEQUENCE_OF_EntryModification);
1146
1147   return offset;
1148 }
1149
1150
1151 static const value_string disp_T_attributeChanges_vals[] = {
1152   {   0, "replace" },
1153   {   1, "changes" },
1154   { 0, NULL }
1155 };
1156
1157 static const ber_choice_t T_attributeChanges_choice[] = {
1158   {   0, &hf_disp_replace        , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_SET_OF_Attribute },
1159   {   1, &hf_disp_changes        , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_disp_SEQUENCE_OF_EntryModification },
1160   { 0, NULL, 0, 0, 0, NULL }
1161 };
1162
1163 static int
1164 dissect_disp_T_attributeChanges(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1165   offset = dissect_ber_choice(actx, tree, tvb, offset,
1166                                  T_attributeChanges_choice, hf_index, ett_disp_T_attributeChanges,
1167                                  NULL);
1168
1169   return offset;
1170 }
1171
1172
1173 static const ber_sequence_t ContentChange_sequence[] = {
1174   { &hf_disp_rename         , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_disp_T_rename },
1175   { &hf_disp_attributeChanges, BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_disp_T_attributeChanges },
1176   { &hf_disp_sDSEType       , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_disp_SDSEType },
1177   { &hf_disp_subComplete    , BER_CLASS_CON, 2, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_disp_BOOLEAN },
1178   { &hf_disp_attComplete    , BER_CLASS_CON, 3, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_disp_BOOLEAN },
1179   { &hf_disp_attValIncomplete, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_SET_OF_AttributeType },
1180   { NULL, 0, 0, 0, NULL }
1181 };
1182
1183 static int
1184 dissect_disp_ContentChange(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1185   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1186                                    ContentChange_sequence, hf_index, ett_disp_ContentChange);
1187
1188   return offset;
1189 }
1190
1191
1192 static const value_string disp_T_sDSEChanges_vals[] = {
1193   {   0, "add" },
1194   {   1, "remove" },
1195   {   2, "modify" },
1196   { 0, NULL }
1197 };
1198
1199 static const ber_choice_t T_sDSEChanges_choice[] = {
1200   {   0, &hf_disp_add            , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_SDSEContent },
1201   {   1, &hf_disp_remove         , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_disp_NULL },
1202   {   2, &hf_disp_modify         , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_disp_ContentChange },
1203   { 0, NULL, 0, 0, 0, NULL }
1204 };
1205
1206 static int
1207 dissect_disp_T_sDSEChanges(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1208   offset = dissect_ber_choice(actx, tree, tvb, offset,
1209                                  T_sDSEChanges_choice, hf_index, ett_disp_T_sDSEChanges,
1210                                  NULL);
1211
1212   return offset;
1213 }
1214
1215
1216 static const ber_sequence_t SubordinateChanges_sequence[] = {
1217   { &hf_disp_subordinate    , BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_NOOWNTAG, dissect_x509if_RelativeDistinguishedName },
1218   { &hf_disp_subordinate_changes, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_IncrementalStepRefresh },
1219   { NULL, 0, 0, 0, NULL }
1220 };
1221
1222 static int
1223 dissect_disp_SubordinateChanges(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1224   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1225                                    SubordinateChanges_sequence, hf_index, ett_disp_SubordinateChanges);
1226
1227   return offset;
1228 }
1229
1230
1231 static const ber_sequence_t SEQUENCE_OF_SubordinateChanges_sequence_of[1] = {
1232   { &hf_disp_subordinateUpdates_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_SubordinateChanges },
1233 };
1234
1235 static int
1236 dissect_disp_SEQUENCE_OF_SubordinateChanges(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1237   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1238                                       SEQUENCE_OF_SubordinateChanges_sequence_of, hf_index, ett_disp_SEQUENCE_OF_SubordinateChanges);
1239
1240   return offset;
1241 }
1242
1243
1244 static const ber_sequence_t IncrementalStepRefresh_sequence[] = {
1245   { &hf_disp_sDSEChanges    , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_disp_T_sDSEChanges },
1246   { &hf_disp_subordinateUpdates, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_SEQUENCE_OF_SubordinateChanges },
1247   { NULL, 0, 0, 0, NULL }
1248 };
1249
1250 static int
1251 dissect_disp_IncrementalStepRefresh(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1252   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1253                                    IncrementalStepRefresh_sequence, hf_index, ett_disp_IncrementalStepRefresh);
1254
1255   return offset;
1256 }
1257
1258
1259 static const ber_sequence_t IncrementalRefresh_sequence_of[1] = {
1260   { &hf_disp_IncrementalRefresh_item, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_IncrementalStepRefresh },
1261 };
1262
1263 static int
1264 dissect_disp_IncrementalRefresh(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1265   offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
1266                                       IncrementalRefresh_sequence_of, hf_index, ett_disp_IncrementalRefresh);
1267
1268   return offset;
1269 }
1270
1271
1272 static const value_string disp_RefreshInformation_vals[] = {
1273   {   0, "noRefresh" },
1274   {   1, "total" },
1275   {   2, "incremental" },
1276   {   3, "otherStrategy" },
1277   { 0, NULL }
1278 };
1279
1280 static const ber_choice_t RefreshInformation_choice[] = {
1281   {   0, &hf_disp_noRefresh      , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_disp_NULL },
1282   {   1, &hf_disp_total          , BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_TotalRefresh },
1283   {   2, &hf_disp_incremental    , BER_CLASS_CON, 1, BER_FLAGS_IMPLTAG, dissect_disp_IncrementalRefresh },
1284   {   3, &hf_disp_otherStrategy  , BER_CLASS_UNI, BER_UNI_TAG_EXTERNAL, BER_FLAGS_NOOWNTAG, dissect_disp_EXTERNAL },
1285   { 0, NULL, 0, 0, 0, NULL }
1286 };
1287
1288 static int
1289 dissect_disp_RefreshInformation(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1290 #line 48 "disp.cnf"
1291   guint32 update;
1292
1293     offset = dissect_ber_choice(actx, tree, tvb, offset,
1294                                  RefreshInformation_choice, hf_index, ett_disp_RefreshInformation,
1295                                  &update);
1296
1297
1298   col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", val_to_str(update, disp_RefreshInformation_vals, "unknown(%d)"));
1299
1300
1301
1302   return offset;
1303 }
1304
1305
1306 static const ber_sequence_t UpdateShadowArgumentData_sequence[] = {
1307   { &hf_disp_agreementID    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_AgreementID },
1308   { &hf_disp_updateTime     , BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_NOOWNTAG, dissect_disp_Time },
1309   { &hf_disp_updateWindow   , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_UpdateWindow },
1310   { &hf_disp_updatedInfo    , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG|BER_FLAGS_NOTCHKTAG, dissect_disp_RefreshInformation },
1311   { &hf_disp_securityParameters, BER_CLASS_UNI, BER_UNI_TAG_SET, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_dap_SecurityParameters },
1312   { NULL, 0, 0, 0, NULL }
1313 };
1314
1315 static int
1316 dissect_disp_UpdateShadowArgumentData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1317   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1318                                    UpdateShadowArgumentData_sequence, hf_index, ett_disp_UpdateShadowArgumentData);
1319
1320   return offset;
1321 }
1322
1323
1324 static const ber_sequence_t T_signedUpdateShadowArgument_sequence[] = {
1325   { &hf_disp_updateShadowArgument, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_UpdateShadowArgumentData },
1326   { &hf_disp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1327   { &hf_disp_encrypted      , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_disp_BIT_STRING },
1328   { NULL, 0, 0, 0, NULL }
1329 };
1330
1331 static int
1332 dissect_disp_T_signedUpdateShadowArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1333   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1334                                    T_signedUpdateShadowArgument_sequence, hf_index, ett_disp_T_signedUpdateShadowArgument);
1335
1336   return offset;
1337 }
1338
1339
1340 static const value_string disp_UpdateShadowArgument_vals[] = {
1341   {   0, "unsignedUpdateShadowArgument" },
1342   {   1, "signedUpdateShadowArgument" },
1343   { 0, NULL }
1344 };
1345
1346 static const ber_choice_t UpdateShadowArgument_choice[] = {
1347   {   0, &hf_disp_unsignedUpdateShadowArgument, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_UpdateShadowArgumentData },
1348   {   1, &hf_disp_signedUpdateShadowArgument, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_T_signedUpdateShadowArgument },
1349   { 0, NULL, 0, 0, 0, NULL }
1350 };
1351
1352 static int
1353 dissect_disp_UpdateShadowArgument(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1354   offset = dissect_ber_choice(actx, tree, tvb, offset,
1355                                  UpdateShadowArgument_choice, hf_index, ett_disp_UpdateShadowArgument,
1356                                  NULL);
1357
1358   return offset;
1359 }
1360
1361
1362 static const value_string disp_UpdateShadowResult_vals[] = {
1363   {   0, "null" },
1364   {   1, "information" },
1365   { 0, NULL }
1366 };
1367
1368 static const ber_choice_t UpdateShadowResult_choice[] = {
1369   {   0, &hf_disp_null           , BER_CLASS_UNI, BER_UNI_TAG_NULL, BER_FLAGS_NOOWNTAG, dissect_disp_NULL },
1370   {   1, &hf_disp_information    , BER_CLASS_ANY/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG, dissect_disp_Information },
1371   { 0, NULL, 0, 0, 0, NULL }
1372 };
1373
1374 static int
1375 dissect_disp_UpdateShadowResult(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1376 #line 88 "disp.cnf"
1377   guint32 update;
1378
1379     offset = dissect_ber_choice(actx, tree, tvb, offset,
1380                                  UpdateShadowResult_choice, hf_index, ett_disp_UpdateShadowResult,
1381                                  &update);
1382
1383
1384   col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", val_to_str(update, disp_UpdateShadowResult_vals, "unknown(%d)"));
1385
1386
1387
1388   return offset;
1389 }
1390
1391
1392 static const value_string disp_ShadowProblem_vals[] = {
1393   {   1, "invalidAgreementID" },
1394   {   2, "inactiveAgreement" },
1395   {   3, "invalidInformationReceived" },
1396   {   4, "unsupportedStrategy" },
1397   {   5, "missedPrevious" },
1398   {   6, "fullUpdateRequired" },
1399   {   7, "unwillingToPerform" },
1400   {   8, "unsuitableTiming" },
1401   {   9, "updateAlreadyReceived" },
1402   {  10, "invalidSequencing" },
1403   {  11, "insufficientResources" },
1404   { 0, NULL }
1405 };
1406
1407
1408 static int
1409 dissect_disp_ShadowProblem(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1410 #line 98 "disp.cnf"
1411   guint32 problem;
1412
1413     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
1414                                                 &problem);
1415
1416
1417   col_append_fstr(actx->pinfo->cinfo, COL_INFO, " %s", val_to_str(problem, disp_ShadowProblem_vals, "ShadowProblem(%d)"));
1418
1419
1420   return offset;
1421 }
1422
1423
1424 static const ber_sequence_t ShadowErrorData_sequence[] = {
1425   { &hf_disp_problem        , BER_CLASS_UNI, BER_UNI_TAG_INTEGER, BER_FLAGS_NOOWNTAG, dissect_disp_ShadowProblem },
1426   { &hf_disp_lastUpdate     , BER_CLASS_UNI, BER_UNI_TAG_GeneralizedTime, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_Time },
1427   { &hf_disp_updateWindow   , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_OPTIONAL|BER_FLAGS_NOOWNTAG, dissect_disp_UpdateWindow },
1428   { &hf_disp_securityParameters, BER_CLASS_CON, 30, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_dap_SecurityParameters },
1429   { &hf_disp_performer      , BER_CLASS_CON, 29, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_x509if_DistinguishedName },
1430   { &hf_disp_aliasDereferenced, BER_CLASS_CON, 28, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_disp_BOOLEAN },
1431   { &hf_disp_notification   , BER_CLASS_CON, 27, BER_FLAGS_OPTIONAL|BER_FLAGS_IMPLTAG, dissect_disp_SEQUENCE_OF_Attribute },
1432   { NULL, 0, 0, 0, NULL }
1433 };
1434
1435 static int
1436 dissect_disp_ShadowErrorData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1437   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1438                                    ShadowErrorData_sequence, hf_index, ett_disp_ShadowErrorData);
1439
1440   return offset;
1441 }
1442
1443
1444 static const ber_sequence_t T_signedShadowError_sequence[] = {
1445   { &hf_disp_shadowError    , BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_ShadowErrorData },
1446   { &hf_disp_algorithmIdentifier, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_x509af_AlgorithmIdentifier },
1447   { &hf_disp_encrypted      , BER_CLASS_UNI, BER_UNI_TAG_BITSTRING, BER_FLAGS_NOOWNTAG, dissect_disp_BIT_STRING },
1448   { NULL, 0, 0, 0, NULL }
1449 };
1450
1451 static int
1452 dissect_disp_T_signedShadowError(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1453   offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
1454                                    T_signedShadowError_sequence, hf_index, ett_disp_T_signedShadowError);
1455
1456   return offset;
1457 }
1458
1459
1460 static const value_string disp_ShadowError_vals[] = {
1461   {   0, "unsignedShadowError" },
1462   {   1, "signedShadowError" },
1463   { 0, NULL }
1464 };
1465
1466 static const ber_choice_t ShadowError_choice[] = {
1467   {   0, &hf_disp_unsignedShadowError, BER_CLASS_UNI, BER_UNI_TAG_SEQUENCE, BER_FLAGS_NOOWNTAG, dissect_disp_ShadowErrorData },
1468   {   1, &hf_disp_signedShadowError, BER_CLASS_CON, 0, BER_FLAGS_IMPLTAG, dissect_disp_T_signedShadowError },
1469   { 0, NULL, 0, 0, 0, NULL }
1470 };
1471
1472 static int
1473 dissect_disp_ShadowError(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
1474   offset = dissect_ber_choice(actx, tree, tvb, offset,
1475                                  ShadowError_choice, hf_index, ett_disp_ShadowError,
1476                                  NULL);
1477
1478   return offset;
1479 }
1480
1481 /*--- PDUs ---*/
1482
1483 static void dissect_EstablishParameter_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1484   asn1_ctx_t asn1_ctx;
1485   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1486   dissect_disp_EstablishParameter(FALSE, tvb, 0, &asn1_ctx, tree, hf_disp_EstablishParameter_PDU);
1487 }
1488 static void dissect_ModificationParameter_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1489   asn1_ctx_t asn1_ctx;
1490   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1491   dissect_disp_ModificationParameter(FALSE, tvb, 0, &asn1_ctx, tree, hf_disp_ModificationParameter_PDU);
1492 }
1493 static void dissect_ShadowingAgreementInfo_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_) {
1494   asn1_ctx_t asn1_ctx;
1495   asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1496   dissect_disp_ShadowingAgreementInfo(FALSE, tvb, 0, &asn1_ctx, tree, hf_disp_ShadowingAgreementInfo_PDU);
1497 }
1498
1499
1500 /*--- End of included file: packet-disp-fn.c ---*/
1501 #line 75 "packet-disp-template.c"
1502
1503 /*
1504 * Dissect DISP PDUs inside a ROS PDUs
1505 */
1506 static void
1507 dissect_disp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
1508 {
1509         int offset = 0;
1510         int old_offset;
1511         proto_item *item=NULL;
1512         proto_tree *tree=NULL;
1513         int (*disp_dissector)(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index _U_) = NULL;
1514         char *disp_op_name;
1515         asn1_ctx_t asn1_ctx;
1516
1517         asn1_ctx_init(&asn1_ctx, ASN1_ENC_BER, TRUE, pinfo);
1518
1519         /* do we have operation information from the ROS dissector?  */
1520         if( !pinfo->private_data ){
1521                 if(parent_tree){
1522                         proto_tree_add_text(parent_tree, tvb, offset, -1,
1523                                 "Internal error: can't get operation information from ROS dissector.");
1524                 } 
1525                 return  ;
1526         } else {
1527                 session  = ( (struct SESSION_DATA_STRUCTURE*)(pinfo->private_data) );
1528         }
1529
1530         if(parent_tree){
1531                 item = proto_tree_add_item(parent_tree, proto_disp, tvb, 0, -1, FALSE);
1532                 tree = proto_item_add_subtree(item, ett_disp);
1533         }
1534         col_set_str(pinfo->cinfo, COL_PROTOCOL, "DISP");
1535         col_clear(pinfo->cinfo, COL_INFO);
1536
1537         switch(session->ros_op & ROS_OP_MASK) {
1538         case (ROS_OP_BIND | ROS_OP_ARGUMENT):   /*  BindInvoke */
1539           disp_dissector = dissect_disp_DSAShadowBindArgument;
1540           disp_op_name = "Shadow-Bind-Argument";
1541           break;
1542         case (ROS_OP_BIND | ROS_OP_RESULT):     /*  BindResult */
1543           disp_dissector = dissect_disp_DSAShadowBindResult;
1544           disp_op_name = "Shadow-Bind-Result";
1545           break;
1546         case (ROS_OP_BIND | ROS_OP_ERROR):      /*  BindError */
1547           disp_dissector = dissect_disp_DSAShadowBindError;
1548           disp_op_name = "Shadow-Bind-Error";
1549           break;
1550         case (ROS_OP_INVOKE | ROS_OP_ARGUMENT): /*  Invoke Argument */
1551           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
1552           case 1: /* requestShadowUpdate */
1553             disp_dissector = dissect_disp_RequestShadowUpdateArgument;
1554             disp_op_name = "Request-Shadow-Update-Argument";
1555             break;
1556           case 2: /* updateShadow*/
1557             disp_dissector = dissect_disp_UpdateShadowArgument;
1558             disp_op_name = "Update-Shadow-Argument";
1559             break;
1560           case 3: /* coordinateShadowUpdate */
1561             disp_dissector = dissect_disp_CoordinateShadowUpdateArgument;
1562             disp_op_name = "Coordinate-Shadow-Update-Argument";
1563             break;
1564           default:
1565             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP opcode (%d)",
1566                                 session->ros_op & ROS_OP_OPCODE_MASK);
1567             break;
1568           }
1569           break;
1570         case (ROS_OP_INVOKE | ROS_OP_RESULT):   /*  Return Result */
1571           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
1572           case 1: /* requestShadowUpdate */
1573             disp_dissector = dissect_disp_RequestShadowUpdateResult;
1574             disp_op_name = "Request-Shadow-Result";
1575             break;
1576           case 2: /* updateShadow */
1577             disp_dissector = dissect_disp_UpdateShadowResult;
1578             disp_op_name = "Update-Shadow-Result";
1579             break;
1580           case 3: /* coordinateShadowUpdate */
1581             disp_dissector = dissect_disp_CoordinateShadowUpdateResult;
1582             disp_op_name = "Coordinate-Shadow-Update-Result";
1583             break;
1584           default:
1585             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP opcode (%d)",
1586                                 session->ros_op & ROS_OP_OPCODE_MASK);
1587             break;
1588           }
1589           break;
1590         case (ROS_OP_INVOKE | ROS_OP_ERROR):    /*  Return Error */
1591           switch(session->ros_op & ROS_OP_OPCODE_MASK) {
1592           case 1: /* shadowError */
1593             disp_dissector = dissect_disp_ShadowError;
1594             disp_op_name = "Shadow-Error";
1595             break;
1596           default:
1597             proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP errcode (%d)",
1598                                 session->ros_op & ROS_OP_OPCODE_MASK);
1599             break;
1600           }
1601           break;
1602         default:
1603           proto_tree_add_text(tree, tvb, offset, -1,"Unsupported DISP PDU");
1604           return;
1605         }
1606
1607         if(disp_dissector) {
1608           col_set_str(pinfo->cinfo, COL_INFO, disp_op_name);
1609
1610           while (tvb_reported_length_remaining(tvb, offset) > 0){
1611             old_offset=offset;
1612             offset=(*disp_dissector)(FALSE, tvb, offset, &asn1_ctx, tree, -1);
1613             if(offset == old_offset){
1614               proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DISP PDU");
1615               offset = tvb_length(tvb);
1616               break;
1617             }
1618           }
1619         }
1620 }
1621
1622
1623 /*--- proto_register_disp -------------------------------------------*/
1624 void proto_register_disp(void) {
1625
1626   /* List of fields */
1627   static hf_register_info hf[] =
1628   {
1629
1630 /*--- Included file: packet-disp-hfarr.c ---*/
1631 #line 1 "packet-disp-hfarr.c"
1632     { &hf_disp_EstablishParameter_PDU,
1633       { "EstablishParameter", "disp.EstablishParameter",
1634         FT_NONE, BASE_NONE, NULL, 0,
1635         "disp.EstablishParameter", HFILL }},
1636     { &hf_disp_ModificationParameter_PDU,
1637       { "ModificationParameter", "disp.ModificationParameter",
1638         FT_NONE, BASE_NONE, NULL, 0,
1639         "disp.ModificationParameter", HFILL }},
1640     { &hf_disp_ShadowingAgreementInfo_PDU,
1641       { "ShadowingAgreementInfo", "disp.ShadowingAgreementInfo",
1642         FT_NONE, BASE_NONE, NULL, 0,
1643         "disp.ShadowingAgreementInfo", HFILL }},
1644     { &hf_disp_modifiedSecondaryShadows,
1645       { "secondaryShadows", "disp.secondaryShadows",
1646         FT_UINT32, BASE_DEC, NULL, 0,
1647         "disp.SET_OF_SupplierAndConsumers", HFILL }},
1648     { &hf_disp_modifiedSecondaryShadows_item,
1649       { "SupplierAndConsumers", "disp.SupplierAndConsumers",
1650         FT_NONE, BASE_NONE, NULL, 0,
1651         "dop.SupplierAndConsumers", HFILL }},
1652     { &hf_disp_shadowSubject,
1653       { "shadowSubject", "disp.shadowSubject",
1654         FT_NONE, BASE_NONE, NULL, 0,
1655         "disp.UnitOfReplication", HFILL }},
1656     { &hf_disp_updateMode,
1657       { "updateMode", "disp.updateMode",
1658         FT_UINT32, BASE_DEC, VALS(disp_UpdateMode_vals), 0,
1659         "disp.UpdateMode", HFILL }},
1660     { &hf_disp_master,
1661       { "master", "disp.master",
1662         FT_NONE, BASE_NONE, NULL, 0,
1663         "dsp.AccessPoint", HFILL }},
1664     { &hf_disp_secondaryShadows,
1665       { "secondaryShadows", "disp.secondaryShadows",
1666         FT_BOOLEAN, BASE_NONE, NULL, 0,
1667         "disp.BOOLEAN", HFILL }},
1668     { &hf_disp_area,
1669       { "area", "disp.area",
1670         FT_NONE, BASE_NONE, NULL, 0,
1671         "disp.AreaSpecification", HFILL }},
1672     { &hf_disp_replication_attributes,
1673       { "attributes", "disp.attributes",
1674         FT_UINT32, BASE_DEC, NULL, 0,
1675         "disp.AttributeSelection", HFILL }},
1676     { &hf_disp_knowledge,
1677       { "knowledge", "disp.knowledge",
1678         FT_NONE, BASE_NONE, NULL, 0,
1679         "disp.Knowledge", HFILL }},
1680     { &hf_disp_subordinates,
1681       { "subordinates", "disp.subordinates",
1682         FT_BOOLEAN, BASE_NONE, NULL, 0,
1683         "disp.BOOLEAN", HFILL }},
1684     { &hf_disp_contextSelection,
1685       { "contextSelection", "disp.contextSelection",
1686         FT_UINT32, BASE_DEC, VALS(dap_ContextSelection_vals), 0,
1687         "dap.ContextSelection", HFILL }},
1688     { &hf_disp_supplyContexts,
1689       { "supplyContexts", "disp.supplyContexts",
1690         FT_UINT32, BASE_DEC, VALS(disp_T_supplyContexts_vals), 0,
1691         "disp.T_supplyContexts", HFILL }},
1692     { &hf_disp_allContexts,
1693       { "allContexts", "disp.allContexts",
1694         FT_NONE, BASE_NONE, NULL, 0,
1695         "disp.NULL", HFILL }},
1696     { &hf_disp_selectedContexts,
1697       { "selectedContexts", "disp.selectedContexts",
1698         FT_UINT32, BASE_DEC, NULL, 0,
1699         "disp.T_selectedContexts", HFILL }},
1700     { &hf_disp_selectedContexts_item,
1701       { "selectedContexts item", "disp.selectedContexts_item",
1702         FT_OID, BASE_NONE, NULL, 0,
1703         "disp.OBJECT_IDENTIFIER", HFILL }},
1704     { &hf_disp_contextPrefix,
1705       { "contextPrefix", "disp.contextPrefix",
1706         FT_UINT32, BASE_DEC, NULL, 0,
1707         "x509if.DistinguishedName", HFILL }},
1708     { &hf_disp_replicationArea,
1709       { "replicationArea", "disp.replicationArea",
1710         FT_NONE, BASE_NONE, NULL, 0,
1711         "x509if.SubtreeSpecification", HFILL }},
1712     { &hf_disp_knowledgeType,
1713       { "knowledgeType", "disp.knowledgeType",
1714         FT_UINT32, BASE_DEC, VALS(disp_T_knowledgeType_vals), 0,
1715         "disp.T_knowledgeType", HFILL }},
1716     { &hf_disp_extendedKnowledge,
1717       { "extendedKnowledge", "disp.extendedKnowledge",
1718         FT_BOOLEAN, BASE_NONE, NULL, 0,
1719         "disp.BOOLEAN", HFILL }},
1720     { &hf_disp_AttributeSelection_item,
1721       { "ClassAttributeSelection", "disp.ClassAttributeSelection",
1722         FT_NONE, BASE_NONE, NULL, 0,
1723         "disp.ClassAttributeSelection", HFILL }},
1724     { &hf_disp_class,
1725       { "class", "disp.class",
1726         FT_OID, BASE_NONE, NULL, 0,
1727         "disp.OBJECT_IDENTIFIER", HFILL }},
1728     { &hf_disp_classAttributes,
1729       { "classAttributes", "disp.classAttributes",
1730         FT_UINT32, BASE_DEC, VALS(disp_ClassAttributes_vals), 0,
1731         "disp.ClassAttributes", HFILL }},
1732     { &hf_disp_allAttributes,
1733       { "allAttributes", "disp.allAttributes",
1734         FT_NONE, BASE_NONE, NULL, 0,
1735         "disp.NULL", HFILL }},
1736     { &hf_disp_include,
1737       { "include", "disp.include",
1738         FT_UINT32, BASE_DEC, NULL, 0,
1739         "disp.AttributeTypes", HFILL }},
1740     { &hf_disp_exclude,
1741       { "exclude", "disp.exclude",
1742         FT_UINT32, BASE_DEC, NULL, 0,
1743         "disp.AttributeTypes", HFILL }},
1744     { &hf_disp_AttributeTypes_item,
1745       { "AttributeType", "disp.AttributeType",
1746         FT_OID, BASE_NONE, NULL, 0,
1747         "x509if.AttributeType", HFILL }},
1748     { &hf_disp_supplierInitiated,
1749       { "supplierInitiated", "disp.supplierInitiated",
1750         FT_UINT32, BASE_DEC, VALS(disp_SupplierUpdateMode_vals), 0,
1751         "disp.SupplierUpdateMode", HFILL }},
1752     { &hf_disp_consumerInitiated,
1753       { "consumerInitiated", "disp.consumerInitiated",
1754         FT_NONE, BASE_NONE, NULL, 0,
1755         "disp.ConsumerUpdateMode", HFILL }},
1756     { &hf_disp_onChange,
1757       { "onChange", "disp.onChange",
1758         FT_BOOLEAN, BASE_NONE, NULL, 0,
1759         "disp.BOOLEAN", HFILL }},
1760     { &hf_disp_scheduled,
1761       { "scheduled", "disp.scheduled",
1762         FT_NONE, BASE_NONE, NULL, 0,
1763         "disp.SchedulingParameters", HFILL }},
1764     { &hf_disp_periodic,
1765       { "periodic", "disp.periodic",
1766         FT_NONE, BASE_NONE, NULL, 0,
1767         "disp.PeriodicStrategy", HFILL }},
1768     { &hf_disp_othertimes,
1769       { "othertimes", "disp.othertimes",
1770         FT_BOOLEAN, BASE_NONE, NULL, 0,
1771         "disp.BOOLEAN", HFILL }},
1772     { &hf_disp_beginTime,
1773       { "beginTime", "disp.beginTime",
1774         FT_STRING, BASE_NONE, NULL, 0,
1775         "disp.Time", HFILL }},
1776     { &hf_disp_windowSize,
1777       { "windowSize", "disp.windowSize",
1778         FT_INT32, BASE_DEC, NULL, 0,
1779         "disp.INTEGER", HFILL }},
1780     { &hf_disp_updateInterval,
1781       { "updateInterval", "disp.updateInterval",
1782         FT_INT32, BASE_DEC, NULL, 0,
1783         "disp.INTEGER", HFILL }},
1784     { &hf_disp_agreementID,
1785       { "agreementID", "disp.agreementID",
1786         FT_NONE, BASE_NONE, NULL, 0,
1787         "disp.AgreementID", HFILL }},
1788     { &hf_disp_lastUpdate,
1789       { "lastUpdate", "disp.lastUpdate",
1790         FT_STRING, BASE_NONE, NULL, 0,
1791         "disp.Time", HFILL }},
1792     { &hf_disp_updateStrategy,
1793       { "updateStrategy", "disp.updateStrategy",
1794         FT_UINT32, BASE_DEC, VALS(disp_T_updateStrategy_vals), 0,
1795         "disp.T_updateStrategy", HFILL }},
1796     { &hf_disp_standardUpdate,
1797       { "standard", "disp.standard",
1798         FT_UINT32, BASE_DEC, VALS(disp_StandardUpdate_vals), 0,
1799         "disp.StandardUpdate", HFILL }},
1800     { &hf_disp_other,
1801       { "other", "disp.other",
1802         FT_NONE, BASE_NONE, NULL, 0,
1803         "disp.EXTERNAL", HFILL }},
1804     { &hf_disp_securityParameters,
1805       { "securityParameters", "disp.securityParameters",
1806         FT_NONE, BASE_NONE, NULL, 0,
1807         "dap.SecurityParameters", HFILL }},
1808     { &hf_disp_unsignedCoordinateShadowUpdateArgument,
1809       { "unsignedCoordinateShadowUpdateArgument", "disp.unsignedCoordinateShadowUpdateArgument",
1810         FT_NONE, BASE_NONE, NULL, 0,
1811         "disp.CoordinateShadowUpdateArgumentData", HFILL }},
1812     { &hf_disp_signedCoordinateShadowUpdateArgument,
1813       { "signedCoordinateShadowUpdateArgument", "disp.signedCoordinateShadowUpdateArgument",
1814         FT_NONE, BASE_NONE, NULL, 0,
1815         "disp.T_signedCoordinateShadowUpdateArgument", HFILL }},
1816     { &hf_disp_coordinateShadowUpdateArgument,
1817       { "coordinateShadowUpdateArgument", "disp.coordinateShadowUpdateArgument",
1818         FT_NONE, BASE_NONE, NULL, 0,
1819         "disp.CoordinateShadowUpdateArgumentData", HFILL }},
1820     { &hf_disp_algorithmIdentifier,
1821       { "algorithmIdentifier", "disp.algorithmIdentifier",
1822         FT_NONE, BASE_NONE, NULL, 0,
1823         "x509af.AlgorithmIdentifier", HFILL }},
1824     { &hf_disp_encrypted,
1825       { "encrypted", "disp.encrypted",
1826         FT_BYTES, BASE_NONE, NULL, 0,
1827         "disp.BIT_STRING", HFILL }},
1828     { &hf_disp_null,
1829       { "null", "disp.null",
1830         FT_NONE, BASE_NONE, NULL, 0,
1831         "disp.NULL", HFILL }},
1832     { &hf_disp_information,
1833       { "information", "disp.information",
1834         FT_UINT32, BASE_DEC, VALS(disp_Information_vals), 0,
1835         "disp.Information", HFILL }},
1836     { &hf_disp_performer,
1837       { "performer", "disp.performer",
1838         FT_UINT32, BASE_DEC, NULL, 0,
1839         "x509if.DistinguishedName", HFILL }},
1840     { &hf_disp_aliasDereferenced,
1841       { "aliasDereferenced", "disp.aliasDereferenced",
1842         FT_BOOLEAN, BASE_NONE, NULL, 0,
1843         "disp.BOOLEAN", HFILL }},
1844     { &hf_disp_notification,
1845       { "notification", "disp.notification",
1846         FT_UINT32, BASE_DEC, NULL, 0,
1847         "disp.SEQUENCE_OF_Attribute", HFILL }},
1848     { &hf_disp_notification_item,
1849       { "Attribute", "disp.Attribute",
1850         FT_NONE, BASE_NONE, NULL, 0,
1851         "x509if.Attribute", HFILL }},
1852     { &hf_disp_unsignedInformation,
1853       { "unsignedInformation", "disp.unsignedInformation",
1854         FT_NONE, BASE_NONE, NULL, 0,
1855         "disp.InformationData", HFILL }},
1856     { &hf_disp_signedInformation,
1857       { "signedInformation", "disp.signedInformation",
1858         FT_NONE, BASE_NONE, NULL, 0,
1859         "disp.T_signedInformation", HFILL }},
1860     { &hf_disp_information_data,
1861       { "information", "disp.information",
1862         FT_NONE, BASE_NONE, NULL, 0,
1863         "disp.InformationData", HFILL }},
1864     { &hf_disp_requestedStrategy,
1865       { "requestedStrategy", "disp.requestedStrategy",
1866         FT_UINT32, BASE_DEC, VALS(disp_T_requestedStrategy_vals), 0,
1867         "disp.T_requestedStrategy", HFILL }},
1868     { &hf_disp_standard,
1869       { "standard", "disp.standard",
1870         FT_UINT32, BASE_DEC, VALS(disp_T_standard_vals), 0,
1871         "disp.T_standard", HFILL }},
1872     { &hf_disp_unsignedRequestShadowUpdateArgument,
1873       { "unsignedRequestShadowUpdateArgument", "disp.unsignedRequestShadowUpdateArgument",
1874         FT_NONE, BASE_NONE, NULL, 0,
1875         "disp.RequestShadowUpdateArgumentData", HFILL }},
1876     { &hf_disp_signedRequestShadowUpdateArgument,
1877       { "signedRequestShadowUpdateArgument", "disp.signedRequestShadowUpdateArgument",
1878         FT_NONE, BASE_NONE, NULL, 0,
1879         "disp.T_signedRequestShadowUpdateArgument", HFILL }},
1880     { &hf_disp_requestShadowUpdateArgument,
1881       { "requestShadowUpdateArgument", "disp.requestShadowUpdateArgument",
1882         FT_NONE, BASE_NONE, NULL, 0,
1883         "disp.RequestShadowUpdateArgumentData", HFILL }},
1884     { &hf_disp_updateTime,
1885       { "updateTime", "disp.updateTime",
1886         FT_STRING, BASE_NONE, NULL, 0,
1887         "disp.Time", HFILL }},
1888     { &hf_disp_updateWindow,
1889       { "updateWindow", "disp.updateWindow",
1890         FT_NONE, BASE_NONE, NULL, 0,
1891         "disp.UpdateWindow", HFILL }},
1892     { &hf_disp_updatedInfo,
1893       { "updatedInfo", "disp.updatedInfo",
1894         FT_UINT32, BASE_DEC, VALS(disp_RefreshInformation_vals), 0,
1895         "disp.RefreshInformation", HFILL }},
1896     { &hf_disp_unsignedUpdateShadowArgument,
1897       { "unsignedUpdateShadowArgument", "disp.unsignedUpdateShadowArgument",
1898         FT_NONE, BASE_NONE, NULL, 0,
1899         "disp.UpdateShadowArgumentData", HFILL }},
1900     { &hf_disp_signedUpdateShadowArgument,
1901       { "signedUpdateShadowArgument", "disp.signedUpdateShadowArgument",
1902         FT_NONE, BASE_NONE, NULL, 0,
1903         "disp.T_signedUpdateShadowArgument", HFILL }},
1904     { &hf_disp_updateShadowArgument,
1905       { "updateShadowArgument", "disp.updateShadowArgument",
1906         FT_NONE, BASE_NONE, NULL, 0,
1907         "disp.UpdateShadowArgumentData", HFILL }},
1908     { &hf_disp_start,
1909       { "start", "disp.start",
1910         FT_STRING, BASE_NONE, NULL, 0,
1911         "disp.Time", HFILL }},
1912     { &hf_disp_stop,
1913       { "stop", "disp.stop",
1914         FT_STRING, BASE_NONE, NULL, 0,
1915         "disp.Time", HFILL }},
1916     { &hf_disp_noRefresh,
1917       { "noRefresh", "disp.noRefresh",
1918         FT_NONE, BASE_NONE, NULL, 0,
1919         "disp.NULL", HFILL }},
1920     { &hf_disp_total,
1921       { "total", "disp.total",
1922         FT_NONE, BASE_NONE, NULL, 0,
1923         "disp.TotalRefresh", HFILL }},
1924     { &hf_disp_incremental,
1925       { "incremental", "disp.incremental",
1926         FT_UINT32, BASE_DEC, NULL, 0,
1927         "disp.IncrementalRefresh", HFILL }},
1928     { &hf_disp_otherStrategy,
1929       { "otherStrategy", "disp.otherStrategy",
1930         FT_NONE, BASE_NONE, NULL, 0,
1931         "disp.EXTERNAL", HFILL }},
1932     { &hf_disp_sDSE,
1933       { "sDSE", "disp.sDSE",
1934         FT_NONE, BASE_NONE, NULL, 0,
1935         "disp.SDSEContent", HFILL }},
1936     { &hf_disp_subtree,
1937       { "subtree", "disp.subtree",
1938         FT_UINT32, BASE_DEC, NULL, 0,
1939         "disp.SET_OF_Subtree", HFILL }},
1940     { &hf_disp_subtree_item,
1941       { "Subtree", "disp.Subtree",
1942         FT_NONE, BASE_NONE, NULL, 0,
1943         "disp.Subtree", HFILL }},
1944     { &hf_disp_sDSEType,
1945       { "sDSEType", "disp.sDSEType",
1946         FT_BYTES, BASE_NONE, NULL, 0,
1947         "disp.SDSEType", HFILL }},
1948     { &hf_disp_subComplete,
1949       { "subComplete", "disp.subComplete",
1950         FT_BOOLEAN, BASE_NONE, NULL, 0,
1951         "disp.BOOLEAN", HFILL }},
1952     { &hf_disp_attComplete,
1953       { "attComplete", "disp.attComplete",
1954         FT_BOOLEAN, BASE_NONE, NULL, 0,
1955         "disp.BOOLEAN", HFILL }},
1956     { &hf_disp_attributes,
1957       { "attributes", "disp.attributes",
1958         FT_UINT32, BASE_DEC, NULL, 0,
1959         "disp.SET_OF_Attribute", HFILL }},
1960     { &hf_disp_attributes_item,
1961       { "Attribute", "disp.Attribute",
1962         FT_NONE, BASE_NONE, NULL, 0,
1963         "x509if.Attribute", HFILL }},
1964     { &hf_disp_attValIncomplete,
1965       { "attValIncomplete", "disp.attValIncomplete",
1966         FT_UINT32, BASE_DEC, NULL, 0,
1967         "disp.SET_OF_AttributeType", HFILL }},
1968     { &hf_disp_attValIncomplete_item,
1969       { "AttributeType", "disp.AttributeType",
1970         FT_OID, BASE_NONE, NULL, 0,
1971         "x509if.AttributeType", HFILL }},
1972     { &hf_disp_rdn,
1973       { "rdn", "disp.rdn",
1974         FT_UINT32, BASE_DEC, NULL, 0,
1975         "x509if.RelativeDistinguishedName", HFILL }},
1976     { &hf_disp_IncrementalRefresh_item,
1977       { "IncrementalStepRefresh", "disp.IncrementalStepRefresh",
1978         FT_NONE, BASE_NONE, NULL, 0,
1979         "disp.IncrementalStepRefresh", HFILL }},
1980     { &hf_disp_sDSEChanges,
1981       { "sDSEChanges", "disp.sDSEChanges",
1982         FT_UINT32, BASE_DEC, VALS(disp_T_sDSEChanges_vals), 0,
1983         "disp.T_sDSEChanges", HFILL }},
1984     { &hf_disp_add,
1985       { "add", "disp.add",
1986         FT_NONE, BASE_NONE, NULL, 0,
1987         "disp.SDSEContent", HFILL }},
1988     { &hf_disp_remove,
1989       { "remove", "disp.remove",
1990         FT_NONE, BASE_NONE, NULL, 0,
1991         "disp.NULL", HFILL }},
1992     { &hf_disp_modify,
1993       { "modify", "disp.modify",
1994         FT_NONE, BASE_NONE, NULL, 0,
1995         "disp.ContentChange", HFILL }},
1996     { &hf_disp_subordinateUpdates,
1997       { "subordinateUpdates", "disp.subordinateUpdates",
1998         FT_UINT32, BASE_DEC, NULL, 0,
1999         "disp.SEQUENCE_OF_SubordinateChanges", HFILL }},
2000     { &hf_disp_subordinateUpdates_item,
2001       { "SubordinateChanges", "disp.SubordinateChanges",
2002         FT_NONE, BASE_NONE, NULL, 0,
2003         "disp.SubordinateChanges", HFILL }},
2004     { &hf_disp_rename,
2005       { "rename", "disp.rename",
2006         FT_UINT32, BASE_DEC, VALS(disp_T_rename_vals), 0,
2007         "disp.T_rename", HFILL }},
2008     { &hf_disp_newRDN,
2009       { "newRDN", "disp.newRDN",
2010         FT_UINT32, BASE_DEC, NULL, 0,
2011         "x509if.RelativeDistinguishedName", HFILL }},
2012     { &hf_disp_newDN,
2013       { "newDN", "disp.newDN",
2014         FT_UINT32, BASE_DEC, NULL, 0,
2015         "x509if.DistinguishedName", HFILL }},
2016     { &hf_disp_attributeChanges,
2017       { "attributeChanges", "disp.attributeChanges",
2018         FT_UINT32, BASE_DEC, VALS(disp_T_attributeChanges_vals), 0,
2019         "disp.T_attributeChanges", HFILL }},
2020     { &hf_disp_replace,
2021       { "replace", "disp.replace",
2022         FT_UINT32, BASE_DEC, NULL, 0,
2023         "disp.SET_OF_Attribute", HFILL }},
2024     { &hf_disp_replace_item,
2025       { "Attribute", "disp.Attribute",
2026         FT_NONE, BASE_NONE, NULL, 0,
2027         "x509if.Attribute", HFILL }},
2028     { &hf_disp_changes,
2029       { "changes", "disp.changes",
2030         FT_UINT32, BASE_DEC, NULL, 0,
2031         "disp.SEQUENCE_OF_EntryModification", HFILL }},
2032     { &hf_disp_changes_item,
2033       { "EntryModification", "disp.EntryModification",
2034         FT_UINT32, BASE_DEC, VALS(dap_EntryModification_vals), 0,
2035         "dap.EntryModification", HFILL }},
2036     { &hf_disp_subordinate,
2037       { "subordinate", "disp.subordinate",
2038         FT_UINT32, BASE_DEC, NULL, 0,
2039         "x509if.RelativeDistinguishedName", HFILL }},
2040     { &hf_disp_subordinate_changes,
2041       { "changes", "disp.changes",
2042         FT_NONE, BASE_NONE, NULL, 0,
2043         "disp.IncrementalStepRefresh", HFILL }},
2044     { &hf_disp_problem,
2045       { "problem", "disp.problem",
2046         FT_INT32, BASE_DEC, VALS(disp_ShadowProblem_vals), 0,
2047         "disp.ShadowProblem", HFILL }},
2048     { &hf_disp_unsignedShadowError,
2049       { "unsignedShadowError", "disp.unsignedShadowError",
2050         FT_NONE, BASE_NONE, NULL, 0,
2051         "disp.ShadowErrorData", HFILL }},
2052     { &hf_disp_signedShadowError,
2053       { "signedShadowError", "disp.signedShadowError",
2054         FT_NONE, BASE_NONE, NULL, 0,
2055         "disp.T_signedShadowError", HFILL }},
2056     { &hf_disp_shadowError,
2057       { "shadowError", "disp.shadowError",
2058         FT_NONE, BASE_NONE, NULL, 0,
2059         "disp.ShadowErrorData", HFILL }},
2060
2061 /*--- End of included file: packet-disp-hfarr.c ---*/
2062 #line 203 "packet-disp-template.c"
2063   };
2064
2065   /* List of subtrees */
2066   static gint *ett[] = {
2067     &ett_disp,
2068
2069 /*--- Included file: packet-disp-ettarr.c ---*/
2070 #line 1 "packet-disp-ettarr.c"
2071     &ett_disp_ModificationParameter,
2072     &ett_disp_SET_OF_SupplierAndConsumers,
2073     &ett_disp_ShadowingAgreementInfo,
2074     &ett_disp_UnitOfReplication,
2075     &ett_disp_T_supplyContexts,
2076     &ett_disp_T_selectedContexts,
2077     &ett_disp_AreaSpecification,
2078     &ett_disp_Knowledge,
2079     &ett_disp_AttributeSelection,
2080     &ett_disp_ClassAttributeSelection,
2081     &ett_disp_ClassAttributes,
2082     &ett_disp_AttributeTypes,
2083     &ett_disp_UpdateMode,
2084     &ett_disp_SupplierUpdateMode,
2085     &ett_disp_SchedulingParameters,
2086     &ett_disp_PeriodicStrategy,
2087     &ett_disp_CoordinateShadowUpdateArgumentData,
2088     &ett_disp_T_updateStrategy,
2089     &ett_disp_CoordinateShadowUpdateArgument,
2090     &ett_disp_T_signedCoordinateShadowUpdateArgument,
2091     &ett_disp_CoordinateShadowUpdateResult,
2092     &ett_disp_InformationData,
2093     &ett_disp_SEQUENCE_OF_Attribute,
2094     &ett_disp_Information,
2095     &ett_disp_T_signedInformation,
2096     &ett_disp_RequestShadowUpdateArgumentData,
2097     &ett_disp_T_requestedStrategy,
2098     &ett_disp_RequestShadowUpdateArgument,
2099     &ett_disp_T_signedRequestShadowUpdateArgument,
2100     &ett_disp_RequestShadowUpdateResult,
2101     &ett_disp_UpdateShadowArgumentData,
2102     &ett_disp_UpdateShadowArgument,
2103     &ett_disp_T_signedUpdateShadowArgument,
2104     &ett_disp_UpdateShadowResult,
2105     &ett_disp_UpdateWindow,
2106     &ett_disp_RefreshInformation,
2107     &ett_disp_TotalRefresh,
2108     &ett_disp_SET_OF_Subtree,
2109     &ett_disp_SDSEContent,
2110     &ett_disp_SET_OF_Attribute,
2111     &ett_disp_SET_OF_AttributeType,
2112     &ett_disp_Subtree,
2113     &ett_disp_IncrementalRefresh,
2114     &ett_disp_IncrementalStepRefresh,
2115     &ett_disp_T_sDSEChanges,
2116     &ett_disp_SEQUENCE_OF_SubordinateChanges,
2117     &ett_disp_ContentChange,
2118     &ett_disp_T_rename,
2119     &ett_disp_T_attributeChanges,
2120     &ett_disp_SEQUENCE_OF_EntryModification,
2121     &ett_disp_SubordinateChanges,
2122     &ett_disp_ShadowErrorData,
2123     &ett_disp_ShadowError,
2124     &ett_disp_T_signedShadowError,
2125
2126 /*--- End of included file: packet-disp-ettarr.c ---*/
2127 #line 209 "packet-disp-template.c"
2128   };
2129   module_t *disp_module;
2130
2131   /* Register protocol */
2132   proto_disp = proto_register_protocol(PNAME, PSNAME, PFNAME);
2133   register_dissector("disp", dissect_disp, proto_disp);
2134
2135   /* Register fields and subtrees */
2136   proto_register_field_array(proto_disp, hf, array_length(hf));
2137   proto_register_subtree_array(ett, array_length(ett));
2138
2139   /* Register our configuration options for DISP, particularly our port */
2140
2141   disp_module = prefs_register_protocol_subtree("OSI/X.500", proto_disp, prefs_register_disp);
2142
2143   prefs_register_uint_preference(disp_module, "tcp.port", "DISP TCP Port",
2144                                  "Set the port for DISP operations (if other"
2145                                  " than the default of 102)",
2146                                  10, &global_disp_tcp_port);
2147
2148 }
2149
2150
2151 /*--- proto_reg_handoff_disp --- */
2152 void proto_reg_handoff_disp(void) {
2153   dissector_handle_t disp_handle;
2154
2155
2156 /*--- Included file: packet-disp-dis-tab.c ---*/
2157 #line 1 "packet-disp-dis-tab.c"
2158   dissector_add_string("dop.oid", "agreement.2.5.19.1", create_dissector_handle(dissect_ShadowingAgreementInfo_PDU, proto_disp));
2159   dissector_add_string("dop.oid", "establish.rolea.2.5.19.1", create_dissector_handle(dissect_EstablishParameter_PDU, proto_disp));
2160   dissector_add_string("dop.oid", "establish.roleb.2.5.19.1", create_dissector_handle(dissect_EstablishParameter_PDU, proto_disp));
2161   dissector_add_string("dop.oid", "modify.rolea.2.5.19.1", create_dissector_handle(dissect_ModificationParameter_PDU, proto_disp));
2162   dissector_add_string("dop.oid", "modify.roleb.2.5.19.1", create_dissector_handle(dissect_ModificationParameter_PDU, proto_disp));
2163
2164
2165 /*--- End of included file: packet-disp-dis-tab.c ---*/
2166 #line 237 "packet-disp-template.c"
2167
2168   /* APPLICATION CONTEXT */
2169
2170   oid_add_from_string("id-ac-shadow-consumer-initiated","2.5.3.4");
2171   oid_add_from_string("id-ac-shadow-supplier-initiated","2.5.3.5");
2172   oid_add_from_string("id-ac-reliable-shadow-consumer-initiated","2.5.3.6");
2173   oid_add_from_string("id-ac-reliable-shadow-supplier-initiated","2.5.3.7");
2174
2175   /* ABSTRACT SYNTAXES */
2176
2177   disp_handle = find_dissector("disp");
2178
2179   register_ros_oid_dissector_handle("2.5.9.3", disp_handle, 0, "id-as-directory-shadow", FALSE); 
2180   register_rtse_oid_dissector_handle("2.5.9.5", disp_handle, 0, "id-as-directory-reliable-shadow", FALSE); 
2181   register_rtse_oid_dissector_handle("2.5.9.6", disp_handle, 0, "id-as-directory-reliable-binding", FALSE); 
2182
2183   /* OPERATIONAL BINDING */
2184   oid_add_from_string("id-op-binding-shadow","2.5.1.0.5.1");
2185
2186   tpkt_handle = find_dissector("tpkt");
2187
2188   /* DNs */
2189   x509if_register_fmt(hf_disp_contextPrefix, "cp=");
2190
2191 }
2192
2193
2194 void prefs_register_disp(void) {
2195   static guint tcp_port = 0;
2196
2197   /* de-register the old port */
2198   /* port 102 is registered by TPKT - don't undo this! */
2199   if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle)
2200     dissector_delete("tcp.port", tcp_port, tpkt_handle);
2201
2202   /* Set our port number for future use */
2203   tcp_port = global_disp_tcp_port;
2204
2205   if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle)
2206     dissector_add("tcp.port", global_disp_tcp_port, tpkt_handle);
2207
2208 }