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