1 /* Do not modify this file. Changes will be overwritten. */
2 /* Generated automatically by the ASN.1 to Wireshark dissector compiler */
4 /* asn2wrs.py -b -q -L -p disp -c ./disp.cnf -s ./packet-disp-template -D . -O ../.. disp.asn */
7 * Routines for X.525 (X.500 Directory Shadow Asbtract Service) and X.519 DISP packet dissection
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <gerald@wireshark.org>
12 * Copyright 1998 Gerald Combs
14 * SPDX-License-Identifier: GPL-2.0-or-later
19 #include <epan/packet.h>
20 #include <epan/expert.h>
21 #include <epan/prefs.h>
22 #include <epan/oids.h>
23 #include <epan/asn1.h>
24 #include <epan/proto_data.h>
25 #include <wsutil/array.h>
27 #include "packet-ber.h"
28 #include "packet-acse.h"
29 #include "packet-ros.h"
30 #include "packet-rtse.h"
32 #include "packet-x509if.h"
33 #include "packet-x509af.h"
34 #include "packet-x509sat.h"
35 #include "packet-crmf.h"
37 #include "packet-dop.h"
38 #include "packet-dap.h"
39 #include "packet-dsp.h"
40 #include "packet-disp.h"
43 /* we don't have a separate dissector for X519 -
44 and most of DISP is defined in X525 */
45 #define PNAME "X.519 Directory Information Shadowing Protocol"
49 void proto_register_disp(void);
50 void proto_reg_handoff_disp(void);
52 /* Initialize the protocol and registered fields */
53 static int proto_disp
;
55 static int hf_disp_EstablishParameter_PDU
; /* EstablishParameter */
56 static int hf_disp_ModificationParameter_PDU
; /* ModificationParameter */
57 static int hf_disp_ShadowingAgreementInfo_PDU
; /* ShadowingAgreementInfo */
58 static int hf_disp_modifiedSecondaryShadows
; /* SET_OF_SupplierAndConsumers */
59 static int hf_disp_modifiedSecondaryShadows_item
; /* SupplierAndConsumers */
60 static int hf_disp_shadowSubject
; /* UnitOfReplication */
61 static int hf_disp_updateMode
; /* UpdateMode */
62 static int hf_disp_master
; /* AccessPoint */
63 static int hf_disp_secondaryShadows
; /* BOOLEAN */
64 static int hf_disp_area
; /* AreaSpecification */
65 static int hf_disp_replication_attributes
; /* AttributeSelection */
66 static int hf_disp_knowledge
; /* Knowledge */
67 static int hf_disp_subordinates
; /* BOOLEAN */
68 static int hf_disp_contextSelection
; /* ContextSelection */
69 static int hf_disp_supplyContexts
; /* T_supplyContexts */
70 static int hf_disp_allContexts
; /* NULL */
71 static int hf_disp_selectedContexts
; /* T_selectedContexts */
72 static int hf_disp_selectedContexts_item
; /* OBJECT_IDENTIFIER */
73 static int hf_disp_contextPrefix
; /* DistinguishedName */
74 static int hf_disp_replicationArea
; /* SubtreeSpecification */
75 static int hf_disp_knowledgeType
; /* T_knowledgeType */
76 static int hf_disp_extendedKnowledge
; /* BOOLEAN */
77 static int hf_disp_AttributeSelection_item
; /* ClassAttributeSelection */
78 static int hf_disp_class
; /* OBJECT_IDENTIFIER */
79 static int hf_disp_classAttributes
; /* ClassAttributes */
80 static int hf_disp_allAttributes
; /* NULL */
81 static int hf_disp_include
; /* AttributeTypes */
82 static int hf_disp_exclude
; /* AttributeTypes */
83 static int hf_disp_AttributeTypes_item
; /* AttributeType */
84 static int hf_disp_supplierInitiated
; /* SupplierUpdateMode */
85 static int hf_disp_consumerInitiated
; /* ConsumerUpdateMode */
86 static int hf_disp_onChange
; /* BOOLEAN */
87 static int hf_disp_scheduled
; /* SchedulingParameters */
88 static int hf_disp_periodic
; /* PeriodicStrategy */
89 static int hf_disp_othertimes
; /* BOOLEAN */
90 static int hf_disp_beginTime
; /* Time */
91 static int hf_disp_windowSize
; /* INTEGER */
92 static int hf_disp_updateInterval
; /* INTEGER */
93 static int hf_disp_agreementID
; /* AgreementID */
94 static int hf_disp_lastUpdate
; /* Time */
95 static int hf_disp_updateStrategy
; /* T_updateStrategy */
96 static int hf_disp_standardUpdate
; /* StandardUpdate */
97 static int hf_disp_other
; /* EXTERNAL */
98 static int hf_disp_securityParameters
; /* SecurityParameters */
99 static int hf_disp_unsignedCoordinateShadowUpdateArgument
; /* CoordinateShadowUpdateArgumentData */
100 static int hf_disp_signedCoordinateShadowUpdateArgument
; /* T_signedCoordinateShadowUpdateArgument */
101 static int hf_disp_coordinateShadowUpdateArgument
; /* CoordinateShadowUpdateArgumentData */
102 static int hf_disp_algorithmIdentifier
; /* AlgorithmIdentifier */
103 static int hf_disp_encrypted
; /* BIT_STRING */
104 static int hf_disp_null
; /* NULL */
105 static int hf_disp_information
; /* Information */
106 static int hf_disp_performer
; /* DistinguishedName */
107 static int hf_disp_aliasDereferenced
; /* BOOLEAN */
108 static int hf_disp_notification
; /* SEQUENCE_OF_Attribute */
109 static int hf_disp_notification_item
; /* Attribute */
110 static int hf_disp_unsignedInformation
; /* InformationData */
111 static int hf_disp_signedInformation
; /* T_signedInformation */
112 static int hf_disp_information_data
; /* InformationData */
113 static int hf_disp_requestedStrategy
; /* T_requestedStrategy */
114 static int hf_disp_standard
; /* T_standard */
115 static int hf_disp_unsignedRequestShadowUpdateArgument
; /* RequestShadowUpdateArgumentData */
116 static int hf_disp_signedRequestShadowUpdateArgument
; /* T_signedRequestShadowUpdateArgument */
117 static int hf_disp_requestShadowUpdateArgument
; /* RequestShadowUpdateArgumentData */
118 static int hf_disp_updateTime
; /* Time */
119 static int hf_disp_updateWindow
; /* UpdateWindow */
120 static int hf_disp_updatedInfo
; /* RefreshInformation */
121 static int hf_disp_unsignedUpdateShadowArgument
; /* UpdateShadowArgumentData */
122 static int hf_disp_signedUpdateShadowArgument
; /* T_signedUpdateShadowArgument */
123 static int hf_disp_updateShadowArgument
; /* UpdateShadowArgumentData */
124 static int hf_disp_start
; /* Time */
125 static int hf_disp_stop
; /* Time */
126 static int hf_disp_noRefresh
; /* NULL */
127 static int hf_disp_total
; /* TotalRefresh */
128 static int hf_disp_incremental
; /* IncrementalRefresh */
129 static int hf_disp_otherStrategy
; /* EXTERNAL */
130 static int hf_disp_sDSE
; /* SDSEContent */
131 static int hf_disp_subtree
; /* SET_OF_Subtree */
132 static int hf_disp_subtree_item
; /* Subtree */
133 static int hf_disp_sDSEType
; /* SDSEType */
134 static int hf_disp_subComplete
; /* BOOLEAN */
135 static int hf_disp_attComplete
; /* BOOLEAN */
136 static int hf_disp_attributes
; /* SET_OF_Attribute */
137 static int hf_disp_attributes_item
; /* Attribute */
138 static int hf_disp_attValIncomplete
; /* SET_OF_AttributeType */
139 static int hf_disp_attValIncomplete_item
; /* AttributeType */
140 static int hf_disp_rdn
; /* RelativeDistinguishedName */
141 static int hf_disp_IncrementalRefresh_item
; /* IncrementalStepRefresh */
142 static int hf_disp_sDSEChanges
; /* T_sDSEChanges */
143 static int hf_disp_add
; /* SDSEContent */
144 static int hf_disp_remove
; /* NULL */
145 static int hf_disp_modify
; /* ContentChange */
146 static int hf_disp_subordinateUpdates
; /* SEQUENCE_OF_SubordinateChanges */
147 static int hf_disp_subordinateUpdates_item
; /* SubordinateChanges */
148 static int hf_disp_rename
; /* T_rename */
149 static int hf_disp_newRDN
; /* RelativeDistinguishedName */
150 static int hf_disp_newDN
; /* DistinguishedName */
151 static int hf_disp_attributeChanges
; /* T_attributeChanges */
152 static int hf_disp_replace
; /* SET_OF_Attribute */
153 static int hf_disp_replace_item
; /* Attribute */
154 static int hf_disp_changes
; /* SEQUENCE_OF_EntryModification */
155 static int hf_disp_changes_item
; /* EntryModification */
156 static int hf_disp_subordinate
; /* RelativeDistinguishedName */
157 static int hf_disp_subordinate_changes
; /* IncrementalStepRefresh */
158 static int hf_disp_problem
; /* ShadowProblem */
159 static int hf_disp_unsignedShadowError
; /* ShadowErrorData */
160 static int hf_disp_signedShadowError
; /* T_signedShadowError */
161 static int hf_disp_shadowError
; /* ShadowErrorData */
163 /* Initialize the subtree pointers */
165 static int ett_disp_ModificationParameter
;
166 static int ett_disp_SET_OF_SupplierAndConsumers
;
167 static int ett_disp_ShadowingAgreementInfo
;
168 static int ett_disp_UnitOfReplication
;
169 static int ett_disp_T_supplyContexts
;
170 static int ett_disp_T_selectedContexts
;
171 static int ett_disp_AreaSpecification
;
172 static int ett_disp_Knowledge
;
173 static int ett_disp_AttributeSelection
;
174 static int ett_disp_ClassAttributeSelection
;
175 static int ett_disp_ClassAttributes
;
176 static int ett_disp_AttributeTypes
;
177 static int ett_disp_UpdateMode
;
178 static int ett_disp_SupplierUpdateMode
;
179 static int ett_disp_SchedulingParameters
;
180 static int ett_disp_PeriodicStrategy
;
181 static int ett_disp_CoordinateShadowUpdateArgumentData
;
182 static int ett_disp_T_updateStrategy
;
183 static int ett_disp_CoordinateShadowUpdateArgument
;
184 static int ett_disp_T_signedCoordinateShadowUpdateArgument
;
185 static int ett_disp_CoordinateShadowUpdateResult
;
186 static int ett_disp_InformationData
;
187 static int ett_disp_SEQUENCE_OF_Attribute
;
188 static int ett_disp_Information
;
189 static int ett_disp_T_signedInformation
;
190 static int ett_disp_RequestShadowUpdateArgumentData
;
191 static int ett_disp_T_requestedStrategy
;
192 static int ett_disp_RequestShadowUpdateArgument
;
193 static int ett_disp_T_signedRequestShadowUpdateArgument
;
194 static int ett_disp_RequestShadowUpdateResult
;
195 static int ett_disp_UpdateShadowArgumentData
;
196 static int ett_disp_UpdateShadowArgument
;
197 static int ett_disp_T_signedUpdateShadowArgument
;
198 static int ett_disp_UpdateShadowResult
;
199 static int ett_disp_UpdateWindow
;
200 static int ett_disp_RefreshInformation
;
201 static int ett_disp_TotalRefresh
;
202 static int ett_disp_SET_OF_Subtree
;
203 static int ett_disp_SDSEContent
;
204 static int ett_disp_SET_OF_Attribute
;
205 static int ett_disp_SET_OF_AttributeType
;
206 static int ett_disp_Subtree
;
207 static int ett_disp_IncrementalRefresh
;
208 static int ett_disp_IncrementalStepRefresh
;
209 static int ett_disp_T_sDSEChanges
;
210 static int ett_disp_SEQUENCE_OF_SubordinateChanges
;
211 static int ett_disp_ContentChange
;
212 static int ett_disp_T_rename
;
213 static int ett_disp_T_attributeChanges
;
214 static int ett_disp_SEQUENCE_OF_EntryModification
;
215 static int ett_disp_SubordinateChanges
;
216 static int ett_disp_ShadowErrorData
;
217 static int ett_disp_ShadowError
;
218 static int ett_disp_T_signedShadowError
;
220 static expert_field ei_disp_unsupported_opcode
;
221 static expert_field ei_disp_unsupported_errcode
;
222 static expert_field ei_disp_unsupported_pdu
;
223 static expert_field ei_disp_zero_pdu
;
225 static dissector_handle_t disp_handle
;
227 /*--- Cyclic dependencies ---*/
229 /* Subtree -> Subtree/subtree -> Subtree */
230 static int dissect_disp_Subtree(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
);
232 /* IncrementalStepRefresh -> IncrementalStepRefresh/subordinateUpdates -> SubordinateChanges -> IncrementalStepRefresh */
233 static int dissect_disp_IncrementalStepRefresh(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
);
239 dissect_disp_DSAShadowBindArgument(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
240 offset
= dissect_dap_DirectoryBindArgument(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
248 dissect_disp_DSAShadowBindResult(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
249 offset
= dissect_dap_DirectoryBindArgument(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
257 dissect_disp_DSAShadowBindError(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
258 offset
= dissect_dap_DirectoryBindError(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
266 dissect_disp_EstablishParameter(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
267 offset
= dissect_ber_null(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
);
273 static const ber_sequence_t SET_OF_SupplierAndConsumers_set_of
[1] = {
274 { &hf_disp_modifiedSecondaryShadows_item
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_NOOWNTAG
, dissect_dop_SupplierAndConsumers
},
278 dissect_disp_SET_OF_SupplierAndConsumers(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
279 offset
= dissect_ber_set_of(implicit_tag
, actx
, tree
, tvb
, offset
,
280 SET_OF_SupplierAndConsumers_set_of
, hf_index
, ett_disp_SET_OF_SupplierAndConsumers
);
286 static const ber_sequence_t ModificationParameter_sequence
[] = {
287 { &hf_disp_modifiedSecondaryShadows
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_NOOWNTAG
, dissect_disp_SET_OF_SupplierAndConsumers
},
288 { NULL
, 0, 0, 0, NULL
}
292 dissect_disp_ModificationParameter(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
293 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
294 ModificationParameter_sequence
, hf_index
, ett_disp_ModificationParameter
);
302 dissect_disp_AgreementID(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
303 offset
= dissect_dop_OperationalBindingID(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
309 static const ber_sequence_t AreaSpecification_sequence
[] = {
310 { &hf_disp_contextPrefix
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_x509if_DistinguishedName
},
311 { &hf_disp_replicationArea
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_x509if_SubtreeSpecification
},
312 { NULL
, 0, 0, 0, NULL
}
316 dissect_disp_AreaSpecification(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
317 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
318 AreaSpecification_sequence
, hf_index
, ett_disp_AreaSpecification
);
326 dissect_disp_OBJECT_IDENTIFIER(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
327 offset
= dissect_ber_object_identifier(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
335 dissect_disp_NULL(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
336 offset
= dissect_ber_null(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
);
342 static const ber_sequence_t AttributeTypes_set_of
[1] = {
343 { &hf_disp_AttributeTypes_item
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_NOOWNTAG
, dissect_x509if_AttributeType
},
347 dissect_disp_AttributeTypes(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
348 offset
= dissect_ber_set_of(implicit_tag
, actx
, tree
, tvb
, offset
,
349 AttributeTypes_set_of
, hf_index
, ett_disp_AttributeTypes
);
355 static const value_string disp_ClassAttributes_vals
[] = {
356 { 0, "allAttributes" },
362 static const ber_choice_t ClassAttributes_choice
[] = {
363 { 0, &hf_disp_allAttributes
, BER_CLASS_UNI
, BER_UNI_TAG_NULL
, BER_FLAGS_NOOWNTAG
, dissect_disp_NULL
},
364 { 1, &hf_disp_include
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_AttributeTypes
},
365 { 2, &hf_disp_exclude
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_disp_AttributeTypes
},
366 { 0, NULL
, 0, 0, 0, NULL
}
370 dissect_disp_ClassAttributes(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
371 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
372 ClassAttributes_choice
, hf_index
, ett_disp_ClassAttributes
,
379 static const ber_sequence_t ClassAttributeSelection_sequence
[] = {
380 { &hf_disp_class
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_OBJECT_IDENTIFIER
},
381 { &hf_disp_classAttributes
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_disp_ClassAttributes
},
382 { NULL
, 0, 0, 0, NULL
}
386 dissect_disp_ClassAttributeSelection(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
387 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
388 ClassAttributeSelection_sequence
, hf_index
, ett_disp_ClassAttributeSelection
);
394 static const ber_sequence_t AttributeSelection_set_of
[1] = {
395 { &hf_disp_AttributeSelection_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_ClassAttributeSelection
},
399 dissect_disp_AttributeSelection(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
400 offset
= dissect_ber_set_of(implicit_tag
, actx
, tree
, tvb
, offset
,
401 AttributeSelection_set_of
, hf_index
, ett_disp_AttributeSelection
);
407 static const value_string disp_T_knowledgeType_vals
[] = {
416 dissect_disp_T_knowledgeType(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
417 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
426 dissect_disp_BOOLEAN(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
427 offset
= dissect_ber_boolean(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
, NULL
);
433 static const ber_sequence_t Knowledge_sequence
[] = {
434 { &hf_disp_knowledgeType
, BER_CLASS_UNI
, BER_UNI_TAG_ENUMERATED
, BER_FLAGS_NOOWNTAG
, dissect_disp_T_knowledgeType
},
435 { &hf_disp_extendedKnowledge
, BER_CLASS_UNI
, BER_UNI_TAG_BOOLEAN
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_BOOLEAN
},
436 { NULL
, 0, 0, 0, NULL
}
440 dissect_disp_Knowledge(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
441 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
442 Knowledge_sequence
, hf_index
, ett_disp_Knowledge
);
448 static const ber_sequence_t T_selectedContexts_set_of
[1] = {
449 { &hf_disp_selectedContexts_item
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_NOOWNTAG
, dissect_disp_OBJECT_IDENTIFIER
},
453 dissect_disp_T_selectedContexts(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
454 offset
= dissect_ber_set_of(implicit_tag
, actx
, tree
, tvb
, offset
,
455 T_selectedContexts_set_of
, hf_index
, ett_disp_T_selectedContexts
);
461 static const value_string disp_T_supplyContexts_vals
[] = {
462 { 0, "allContexts" },
463 { 1, "selectedContexts" },
467 static const ber_choice_t T_supplyContexts_choice
[] = {
468 { 0, &hf_disp_allContexts
, BER_CLASS_UNI
, BER_UNI_TAG_NULL
, BER_FLAGS_NOOWNTAG
, dissect_disp_NULL
},
469 { 1, &hf_disp_selectedContexts
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_NOOWNTAG
, dissect_disp_T_selectedContexts
},
470 { 0, NULL
, 0, 0, 0, NULL
}
474 dissect_disp_T_supplyContexts(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
475 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
476 T_supplyContexts_choice
, hf_index
, ett_disp_T_supplyContexts
,
483 static const ber_sequence_t UnitOfReplication_sequence
[] = {
484 { &hf_disp_area
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_AreaSpecification
},
485 { &hf_disp_replication_attributes
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_NOOWNTAG
, dissect_disp_AttributeSelection
},
486 { &hf_disp_knowledge
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_Knowledge
},
487 { &hf_disp_subordinates
, BER_CLASS_UNI
, BER_UNI_TAG_BOOLEAN
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_BOOLEAN
},
488 { &hf_disp_contextSelection
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_dap_ContextSelection
},
489 { &hf_disp_supplyContexts
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_disp_T_supplyContexts
},
490 { NULL
, 0, 0, 0, NULL
}
494 dissect_disp_UnitOfReplication(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
495 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
496 UnitOfReplication_sequence
, hf_index
, ett_disp_UnitOfReplication
);
504 dissect_disp_Time(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
505 offset
= dissect_ber_GeneralizedTime(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
);
513 dissect_disp_INTEGER(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
514 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
521 static const ber_sequence_t PeriodicStrategy_sequence
[] = {
522 { &hf_disp_beginTime
, BER_CLASS_UNI
, BER_UNI_TAG_GeneralizedTime
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_Time
},
523 { &hf_disp_windowSize
, BER_CLASS_UNI
, BER_UNI_TAG_INTEGER
, BER_FLAGS_NOOWNTAG
, dissect_disp_INTEGER
},
524 { &hf_disp_updateInterval
, BER_CLASS_UNI
, BER_UNI_TAG_INTEGER
, BER_FLAGS_NOOWNTAG
, dissect_disp_INTEGER
},
525 { NULL
, 0, 0, 0, NULL
}
529 dissect_disp_PeriodicStrategy(bool 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_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
531 PeriodicStrategy_sequence
, hf_index
, ett_disp_PeriodicStrategy
);
537 static const ber_sequence_t SchedulingParameters_sequence
[] = {
538 { &hf_disp_periodic
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_PeriodicStrategy
},
539 { &hf_disp_othertimes
, BER_CLASS_UNI
, BER_UNI_TAG_BOOLEAN
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_BOOLEAN
},
540 { NULL
, 0, 0, 0, NULL
}
544 dissect_disp_SchedulingParameters(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
545 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
546 SchedulingParameters_sequence
, hf_index
, ett_disp_SchedulingParameters
);
552 static const value_string disp_SupplierUpdateMode_vals
[] = {
558 static const ber_choice_t SupplierUpdateMode_choice
[] = {
559 { 0, &hf_disp_onChange
, BER_CLASS_UNI
, BER_UNI_TAG_BOOLEAN
, BER_FLAGS_NOOWNTAG
, dissect_disp_BOOLEAN
},
560 { 1, &hf_disp_scheduled
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_SchedulingParameters
},
561 { 0, NULL
, 0, 0, 0, NULL
}
565 dissect_disp_SupplierUpdateMode(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
566 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
567 SupplierUpdateMode_choice
, hf_index
, ett_disp_SupplierUpdateMode
,
576 dissect_disp_ConsumerUpdateMode(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
577 offset
= dissect_disp_SchedulingParameters(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
583 static const value_string disp_UpdateMode_vals
[] = {
584 { 0, "supplierInitiated" },
585 { 1, "consumerInitiated" },
589 static const ber_choice_t UpdateMode_choice
[] = {
590 { 0, &hf_disp_supplierInitiated
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_SupplierUpdateMode
},
591 { 1, &hf_disp_consumerInitiated
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_disp_ConsumerUpdateMode
},
592 { 0, NULL
, 0, 0, 0, NULL
}
596 dissect_disp_UpdateMode(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
597 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
598 UpdateMode_choice
, hf_index
, ett_disp_UpdateMode
,
605 static const ber_sequence_t ShadowingAgreementInfo_sequence
[] = {
606 { &hf_disp_shadowSubject
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_UnitOfReplication
},
607 { &hf_disp_updateMode
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_disp_UpdateMode
},
608 { &hf_disp_master
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_dsp_AccessPoint
},
609 { &hf_disp_secondaryShadows
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_disp_BOOLEAN
},
610 { NULL
, 0, 0, 0, NULL
}
614 dissect_disp_ShadowingAgreementInfo(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
615 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
616 ShadowingAgreementInfo_sequence
, hf_index
, ett_disp_ShadowingAgreementInfo
);
622 static const value_string disp_StandardUpdate_vals
[] = {
624 { 1, "incremental" },
631 dissect_disp_StandardUpdate(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
634 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
638 col_append_fstr(actx
->pinfo
->cinfo
, COL_INFO
, " %s", val_to_str(update
, disp_StandardUpdate_vals
, "unknown(%d)"));
647 dissect_disp_EXTERNAL(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
648 offset
= dissect_ber_external_type(implicit_tag
, tree
, tvb
, offset
, actx
, hf_index
, NULL
);
654 static const value_string disp_T_updateStrategy_vals
[] = {
660 static const ber_choice_t T_updateStrategy_choice
[] = {
661 { 0, &hf_disp_standardUpdate
, BER_CLASS_UNI
, BER_UNI_TAG_ENUMERATED
, BER_FLAGS_NOOWNTAG
, dissect_disp_StandardUpdate
},
662 { 1, &hf_disp_other
, BER_CLASS_UNI
, BER_UNI_TAG_EXTERNAL
, BER_FLAGS_NOOWNTAG
, dissect_disp_EXTERNAL
},
663 { 0, NULL
, 0, 0, 0, NULL
}
667 dissect_disp_T_updateStrategy(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
668 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
669 T_updateStrategy_choice
, hf_index
, ett_disp_T_updateStrategy
,
676 static const ber_sequence_t CoordinateShadowUpdateArgumentData_sequence
[] = {
677 { &hf_disp_agreementID
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_AgreementID
},
678 { &hf_disp_lastUpdate
, BER_CLASS_UNI
, BER_UNI_TAG_GeneralizedTime
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_Time
},
679 { &hf_disp_updateStrategy
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_disp_T_updateStrategy
},
680 { &hf_disp_securityParameters
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_dap_SecurityParameters
},
681 { NULL
, 0, 0, 0, NULL
}
685 dissect_disp_CoordinateShadowUpdateArgumentData(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
686 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
687 CoordinateShadowUpdateArgumentData_sequence
, hf_index
, ett_disp_CoordinateShadowUpdateArgumentData
);
695 dissect_disp_BIT_STRING(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
696 offset
= dissect_ber_bitstring(implicit_tag
, actx
, tree
, tvb
, offset
,
697 NULL
, 0, hf_index
, -1,
704 static const ber_sequence_t T_signedCoordinateShadowUpdateArgument_sequence
[] = {
705 { &hf_disp_coordinateShadowUpdateArgument
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_CoordinateShadowUpdateArgumentData
},
706 { &hf_disp_algorithmIdentifier
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_x509af_AlgorithmIdentifier
},
707 { &hf_disp_encrypted
, BER_CLASS_UNI
, BER_UNI_TAG_BITSTRING
, BER_FLAGS_NOOWNTAG
, dissect_disp_BIT_STRING
},
708 { NULL
, 0, 0, 0, NULL
}
712 dissect_disp_T_signedCoordinateShadowUpdateArgument(bool 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 T_signedCoordinateShadowUpdateArgument_sequence
, hf_index
, ett_disp_T_signedCoordinateShadowUpdateArgument
);
720 static const ber_choice_t CoordinateShadowUpdateArgument_choice
[] = {
721 { 0, &hf_disp_unsignedCoordinateShadowUpdateArgument
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_CoordinateShadowUpdateArgumentData
},
722 { 1, &hf_disp_signedCoordinateShadowUpdateArgument
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_T_signedCoordinateShadowUpdateArgument
},
723 { 0, NULL
, 0, 0, 0, NULL
}
727 dissect_disp_CoordinateShadowUpdateArgument(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
728 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
729 CoordinateShadowUpdateArgument_choice
, hf_index
, ett_disp_CoordinateShadowUpdateArgument
,
736 static const ber_sequence_t SEQUENCE_OF_Attribute_sequence_of
[1] = {
737 { &hf_disp_notification_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_x509if_Attribute
},
741 dissect_disp_SEQUENCE_OF_Attribute(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
742 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
743 SEQUENCE_OF_Attribute_sequence_of
, hf_index
, ett_disp_SEQUENCE_OF_Attribute
);
749 static const ber_sequence_t InformationData_sequence
[] = {
750 { &hf_disp_agreementID
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_AgreementID
},
751 { &hf_disp_lastUpdate
, BER_CLASS_UNI
, BER_UNI_TAG_GeneralizedTime
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_Time
},
752 { &hf_disp_securityParameters
, BER_CLASS_CON
, 30, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_dap_SecurityParameters
},
753 { &hf_disp_performer
, BER_CLASS_CON
, 29, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_x509if_DistinguishedName
},
754 { &hf_disp_aliasDereferenced
, BER_CLASS_CON
, 28, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_disp_BOOLEAN
},
755 { &hf_disp_notification
, BER_CLASS_CON
, 27, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_disp_SEQUENCE_OF_Attribute
},
756 { NULL
, 0, 0, 0, NULL
}
760 dissect_disp_InformationData(bool 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_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
762 InformationData_sequence
, hf_index
, ett_disp_InformationData
);
768 static const ber_sequence_t T_signedInformation_sequence
[] = {
769 { &hf_disp_information_data
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_InformationData
},
770 { &hf_disp_algorithmIdentifier
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_x509af_AlgorithmIdentifier
},
771 { &hf_disp_encrypted
, BER_CLASS_UNI
, BER_UNI_TAG_BITSTRING
, BER_FLAGS_NOOWNTAG
, dissect_disp_BIT_STRING
},
772 { NULL
, 0, 0, 0, NULL
}
776 dissect_disp_T_signedInformation(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
777 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
778 T_signedInformation_sequence
, hf_index
, ett_disp_T_signedInformation
);
784 static const value_string disp_Information_vals
[] = {
785 { 0, "unsignedInformation" },
786 { 1, "signedInformation" },
790 static const ber_choice_t Information_choice
[] = {
791 { 0, &hf_disp_unsignedInformation
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_InformationData
},
792 { 1, &hf_disp_signedInformation
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_T_signedInformation
},
793 { 0, NULL
, 0, 0, 0, NULL
}
797 dissect_disp_Information(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
798 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
799 Information_choice
, hf_index
, ett_disp_Information
,
806 static const value_string disp_CoordinateShadowUpdateResult_vals
[] = {
808 { 1, "information" },
812 static const ber_choice_t CoordinateShadowUpdateResult_choice
[] = {
813 { 0, &hf_disp_null
, BER_CLASS_UNI
, BER_UNI_TAG_NULL
, BER_FLAGS_NOOWNTAG
, dissect_disp_NULL
},
814 { 1, &hf_disp_information
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
, dissect_disp_Information
},
815 { 0, NULL
, 0, 0, 0, NULL
}
819 dissect_disp_CoordinateShadowUpdateResult(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
822 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
823 CoordinateShadowUpdateResult_choice
, hf_index
, ett_disp_CoordinateShadowUpdateResult
,
827 col_append_fstr(actx
->pinfo
->cinfo
, COL_INFO
, " %s", val_to_str(update
, disp_CoordinateShadowUpdateResult_vals
, "unknown(%d)"));
834 static const value_string disp_T_standard_vals
[] = {
835 { 1, "incremental" },
842 dissect_disp_T_standard(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
845 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
849 col_append_fstr(actx
->pinfo
->cinfo
, COL_INFO
, " %s", val_to_str(update
, disp_T_standard_vals
, "standard(%d"));
856 static const value_string disp_T_requestedStrategy_vals
[] = {
862 static const ber_choice_t T_requestedStrategy_choice
[] = {
863 { 0, &hf_disp_standard
, BER_CLASS_UNI
, BER_UNI_TAG_ENUMERATED
, BER_FLAGS_NOOWNTAG
, dissect_disp_T_standard
},
864 { 1, &hf_disp_other
, BER_CLASS_UNI
, BER_UNI_TAG_EXTERNAL
, BER_FLAGS_NOOWNTAG
, dissect_disp_EXTERNAL
},
865 { 0, NULL
, 0, 0, 0, NULL
}
869 dissect_disp_T_requestedStrategy(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
870 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
871 T_requestedStrategy_choice
, hf_index
, ett_disp_T_requestedStrategy
,
878 static const ber_sequence_t RequestShadowUpdateArgumentData_sequence
[] = {
879 { &hf_disp_agreementID
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_AgreementID
},
880 { &hf_disp_lastUpdate
, BER_CLASS_UNI
, BER_UNI_TAG_GeneralizedTime
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_Time
},
881 { &hf_disp_requestedStrategy
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_disp_T_requestedStrategy
},
882 { &hf_disp_securityParameters
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_dap_SecurityParameters
},
883 { NULL
, 0, 0, 0, NULL
}
887 dissect_disp_RequestShadowUpdateArgumentData(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
888 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
889 RequestShadowUpdateArgumentData_sequence
, hf_index
, ett_disp_RequestShadowUpdateArgumentData
);
895 static const ber_sequence_t T_signedRequestShadowUpdateArgument_sequence
[] = {
896 { &hf_disp_requestShadowUpdateArgument
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_RequestShadowUpdateArgumentData
},
897 { &hf_disp_algorithmIdentifier
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_x509af_AlgorithmIdentifier
},
898 { &hf_disp_encrypted
, BER_CLASS_UNI
, BER_UNI_TAG_BITSTRING
, BER_FLAGS_NOOWNTAG
, dissect_disp_BIT_STRING
},
899 { NULL
, 0, 0, 0, NULL
}
903 dissect_disp_T_signedRequestShadowUpdateArgument(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
904 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
905 T_signedRequestShadowUpdateArgument_sequence
, hf_index
, ett_disp_T_signedRequestShadowUpdateArgument
);
911 static const ber_choice_t RequestShadowUpdateArgument_choice
[] = {
912 { 0, &hf_disp_unsignedRequestShadowUpdateArgument
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_RequestShadowUpdateArgumentData
},
913 { 1, &hf_disp_signedRequestShadowUpdateArgument
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_T_signedRequestShadowUpdateArgument
},
914 { 0, NULL
, 0, 0, 0, NULL
}
918 dissect_disp_RequestShadowUpdateArgument(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
919 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
920 RequestShadowUpdateArgument_choice
, hf_index
, ett_disp_RequestShadowUpdateArgument
,
927 static const value_string disp_RequestShadowUpdateResult_vals
[] = {
929 { 1, "information" },
933 static const ber_choice_t RequestShadowUpdateResult_choice
[] = {
934 { 0, &hf_disp_null
, BER_CLASS_UNI
, BER_UNI_TAG_NULL
, BER_FLAGS_NOOWNTAG
, dissect_disp_NULL
},
935 { 1, &hf_disp_information
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
, dissect_disp_Information
},
936 { 0, NULL
, 0, 0, 0, NULL
}
940 dissect_disp_RequestShadowUpdateResult(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
943 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
944 RequestShadowUpdateResult_choice
, hf_index
, ett_disp_RequestShadowUpdateResult
,
948 col_append_fstr(actx
->pinfo
->cinfo
, COL_INFO
, " %s", val_to_str(update
, disp_RequestShadowUpdateResult_vals
, "unknown(%d)"));
955 static const ber_sequence_t UpdateWindow_sequence
[] = {
956 { &hf_disp_start
, BER_CLASS_UNI
, BER_UNI_TAG_GeneralizedTime
, BER_FLAGS_NOOWNTAG
, dissect_disp_Time
},
957 { &hf_disp_stop
, BER_CLASS_UNI
, BER_UNI_TAG_GeneralizedTime
, BER_FLAGS_NOOWNTAG
, dissect_disp_Time
},
958 { NULL
, 0, 0, 0, NULL
}
962 dissect_disp_UpdateWindow(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
963 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
964 UpdateWindow_sequence
, hf_index
, ett_disp_UpdateWindow
);
972 dissect_disp_SDSEType(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
973 offset
= dissect_dop_DSEType(implicit_tag
, tvb
, offset
, actx
, tree
, hf_index
);
979 static const ber_sequence_t SET_OF_Attribute_set_of
[1] = {
980 { &hf_disp_attributes_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_x509if_Attribute
},
984 dissect_disp_SET_OF_Attribute(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
985 offset
= dissect_ber_set_of(implicit_tag
, actx
, tree
, tvb
, offset
,
986 SET_OF_Attribute_set_of
, hf_index
, ett_disp_SET_OF_Attribute
);
992 static const ber_sequence_t SET_OF_AttributeType_set_of
[1] = {
993 { &hf_disp_attValIncomplete_item
, BER_CLASS_UNI
, BER_UNI_TAG_OID
, BER_FLAGS_NOOWNTAG
, dissect_x509if_AttributeType
},
997 dissect_disp_SET_OF_AttributeType(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
998 offset
= dissect_ber_set_of(implicit_tag
, actx
, tree
, tvb
, offset
,
999 SET_OF_AttributeType_set_of
, hf_index
, ett_disp_SET_OF_AttributeType
);
1005 static const ber_sequence_t SDSEContent_sequence
[] = {
1006 { &hf_disp_sDSEType
, BER_CLASS_UNI
, BER_UNI_TAG_BITSTRING
, BER_FLAGS_NOOWNTAG
, dissect_disp_SDSEType
},
1007 { &hf_disp_subComplete
, BER_CLASS_CON
, 0, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_disp_BOOLEAN
},
1008 { &hf_disp_attComplete
, BER_CLASS_CON
, 1, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_disp_BOOLEAN
},
1009 { &hf_disp_attributes
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_NOOWNTAG
, dissect_disp_SET_OF_Attribute
},
1010 { &hf_disp_attValIncomplete
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_SET_OF_AttributeType
},
1011 { NULL
, 0, 0, 0, NULL
}
1015 dissect_disp_SDSEContent(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1016 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1017 SDSEContent_sequence
, hf_index
, ett_disp_SDSEContent
);
1023 static const ber_sequence_t SET_OF_Subtree_set_of
[1] = {
1024 { &hf_disp_subtree_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_Subtree
},
1028 dissect_disp_SET_OF_Subtree(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1029 offset
= dissect_ber_set_of(implicit_tag
, actx
, tree
, tvb
, offset
,
1030 SET_OF_Subtree_set_of
, hf_index
, ett_disp_SET_OF_Subtree
);
1036 static const ber_sequence_t Subtree_sequence
[] = {
1037 { &hf_disp_rdn
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_NOOWNTAG
, dissect_x509if_RelativeDistinguishedName
},
1038 { &hf_disp_sDSE
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_SDSEContent
},
1039 { &hf_disp_subtree
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_SET_OF_Subtree
},
1040 { NULL
, 0, 0, 0, NULL
}
1044 dissect_disp_Subtree(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1045 // Subtree -> Subtree/subtree -> Subtree
1046 actx
->pinfo
->dissection_depth
+= 2;
1047 increment_dissection_depth(actx
->pinfo
);
1048 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1049 Subtree_sequence
, hf_index
, ett_disp_Subtree
);
1051 actx
->pinfo
->dissection_depth
-= 2;
1052 decrement_dissection_depth(actx
->pinfo
);
1057 static const ber_sequence_t TotalRefresh_sequence
[] = {
1058 { &hf_disp_sDSE
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_SDSEContent
},
1059 { &hf_disp_subtree
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_SET_OF_Subtree
},
1060 { NULL
, 0, 0, 0, NULL
}
1064 dissect_disp_TotalRefresh(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1065 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1066 TotalRefresh_sequence
, hf_index
, ett_disp_TotalRefresh
);
1072 static const value_string disp_T_rename_vals
[] = {
1078 static const ber_choice_t T_rename_choice
[] = {
1079 { 0, &hf_disp_newRDN
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_NOOWNTAG
, dissect_x509if_RelativeDistinguishedName
},
1080 { 1, &hf_disp_newDN
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_x509if_DistinguishedName
},
1081 { 0, NULL
, 0, 0, 0, NULL
}
1085 dissect_disp_T_rename(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1086 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1087 T_rename_choice
, hf_index
, ett_disp_T_rename
,
1094 static const ber_sequence_t SEQUENCE_OF_EntryModification_sequence_of
[1] = {
1095 { &hf_disp_changes_item
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
, dissect_dap_EntryModification
},
1099 dissect_disp_SEQUENCE_OF_EntryModification(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1100 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
1101 SEQUENCE_OF_EntryModification_sequence_of
, hf_index
, ett_disp_SEQUENCE_OF_EntryModification
);
1107 static const value_string disp_T_attributeChanges_vals
[] = {
1113 static const ber_choice_t T_attributeChanges_choice
[] = {
1114 { 0, &hf_disp_replace
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_SET_OF_Attribute
},
1115 { 1, &hf_disp_changes
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_disp_SEQUENCE_OF_EntryModification
},
1116 { 0, NULL
, 0, 0, 0, NULL
}
1120 dissect_disp_T_attributeChanges(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1121 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1122 T_attributeChanges_choice
, hf_index
, ett_disp_T_attributeChanges
,
1129 static const ber_sequence_t ContentChange_sequence
[] = {
1130 { &hf_disp_rename
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_disp_T_rename
},
1131 { &hf_disp_attributeChanges
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_disp_T_attributeChanges
},
1132 { &hf_disp_sDSEType
, BER_CLASS_UNI
, BER_UNI_TAG_BITSTRING
, BER_FLAGS_NOOWNTAG
, dissect_disp_SDSEType
},
1133 { &hf_disp_subComplete
, BER_CLASS_CON
, 2, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_disp_BOOLEAN
},
1134 { &hf_disp_attComplete
, BER_CLASS_CON
, 3, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_disp_BOOLEAN
},
1135 { &hf_disp_attValIncomplete
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_SET_OF_AttributeType
},
1136 { NULL
, 0, 0, 0, NULL
}
1140 dissect_disp_ContentChange(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1141 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1142 ContentChange_sequence
, hf_index
, ett_disp_ContentChange
);
1148 static const value_string disp_T_sDSEChanges_vals
[] = {
1155 static const ber_choice_t T_sDSEChanges_choice
[] = {
1156 { 0, &hf_disp_add
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_SDSEContent
},
1157 { 1, &hf_disp_remove
, BER_CLASS_UNI
, BER_UNI_TAG_NULL
, BER_FLAGS_NOOWNTAG
, dissect_disp_NULL
},
1158 { 2, &hf_disp_modify
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_disp_ContentChange
},
1159 { 0, NULL
, 0, 0, 0, NULL
}
1163 dissect_disp_T_sDSEChanges(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1164 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1165 T_sDSEChanges_choice
, hf_index
, ett_disp_T_sDSEChanges
,
1172 static const ber_sequence_t SubordinateChanges_sequence
[] = {
1173 { &hf_disp_subordinate
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_NOOWNTAG
, dissect_x509if_RelativeDistinguishedName
},
1174 { &hf_disp_subordinate_changes
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_IncrementalStepRefresh
},
1175 { NULL
, 0, 0, 0, NULL
}
1179 dissect_disp_SubordinateChanges(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1180 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1181 SubordinateChanges_sequence
, hf_index
, ett_disp_SubordinateChanges
);
1187 static const ber_sequence_t SEQUENCE_OF_SubordinateChanges_sequence_of
[1] = {
1188 { &hf_disp_subordinateUpdates_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_SubordinateChanges
},
1192 dissect_disp_SEQUENCE_OF_SubordinateChanges(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1193 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
1194 SEQUENCE_OF_SubordinateChanges_sequence_of
, hf_index
, ett_disp_SEQUENCE_OF_SubordinateChanges
);
1200 static const ber_sequence_t IncrementalStepRefresh_sequence
[] = {
1201 { &hf_disp_sDSEChanges
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_disp_T_sDSEChanges
},
1202 { &hf_disp_subordinateUpdates
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_SEQUENCE_OF_SubordinateChanges
},
1203 { NULL
, 0, 0, 0, NULL
}
1207 dissect_disp_IncrementalStepRefresh(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1208 // IncrementalStepRefresh -> IncrementalStepRefresh/subordinateUpdates -> SubordinateChanges -> IncrementalStepRefresh
1209 actx
->pinfo
->dissection_depth
+= 3;
1210 increment_dissection_depth(actx
->pinfo
);
1211 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1212 IncrementalStepRefresh_sequence
, hf_index
, ett_disp_IncrementalStepRefresh
);
1214 actx
->pinfo
->dissection_depth
-= 3;
1215 decrement_dissection_depth(actx
->pinfo
);
1220 static const ber_sequence_t IncrementalRefresh_sequence_of
[1] = {
1221 { &hf_disp_IncrementalRefresh_item
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_IncrementalStepRefresh
},
1225 dissect_disp_IncrementalRefresh(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1226 offset
= dissect_ber_sequence_of(implicit_tag
, actx
, tree
, tvb
, offset
,
1227 IncrementalRefresh_sequence_of
, hf_index
, ett_disp_IncrementalRefresh
);
1233 static const value_string disp_RefreshInformation_vals
[] = {
1236 { 2, "incremental" },
1237 { 3, "otherStrategy" },
1241 static const ber_choice_t RefreshInformation_choice
[] = {
1242 { 0, &hf_disp_noRefresh
, BER_CLASS_UNI
, BER_UNI_TAG_NULL
, BER_FLAGS_NOOWNTAG
, dissect_disp_NULL
},
1243 { 1, &hf_disp_total
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_TotalRefresh
},
1244 { 2, &hf_disp_incremental
, BER_CLASS_CON
, 1, BER_FLAGS_IMPLTAG
, dissect_disp_IncrementalRefresh
},
1245 { 3, &hf_disp_otherStrategy
, BER_CLASS_UNI
, BER_UNI_TAG_EXTERNAL
, BER_FLAGS_NOOWNTAG
, dissect_disp_EXTERNAL
},
1246 { 0, NULL
, 0, 0, 0, NULL
}
1250 dissect_disp_RefreshInformation(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1253 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1254 RefreshInformation_choice
, hf_index
, ett_disp_RefreshInformation
,
1258 col_append_fstr(actx
->pinfo
->cinfo
, COL_INFO
, " %s", val_to_str(update
, disp_RefreshInformation_vals
, "unknown(%d)"));
1265 static const ber_sequence_t UpdateShadowArgumentData_sequence
[] = {
1266 { &hf_disp_agreementID
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_AgreementID
},
1267 { &hf_disp_updateTime
, BER_CLASS_UNI
, BER_UNI_TAG_GeneralizedTime
, BER_FLAGS_NOOWNTAG
, dissect_disp_Time
},
1268 { &hf_disp_updateWindow
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_UpdateWindow
},
1269 { &hf_disp_updatedInfo
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
|BER_FLAGS_NOTCHKTAG
, dissect_disp_RefreshInformation
},
1270 { &hf_disp_securityParameters
, BER_CLASS_UNI
, BER_UNI_TAG_SET
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_dap_SecurityParameters
},
1271 { NULL
, 0, 0, 0, NULL
}
1275 dissect_disp_UpdateShadowArgumentData(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1276 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1277 UpdateShadowArgumentData_sequence
, hf_index
, ett_disp_UpdateShadowArgumentData
);
1283 static const ber_sequence_t T_signedUpdateShadowArgument_sequence
[] = {
1284 { &hf_disp_updateShadowArgument
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_UpdateShadowArgumentData
},
1285 { &hf_disp_algorithmIdentifier
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_x509af_AlgorithmIdentifier
},
1286 { &hf_disp_encrypted
, BER_CLASS_UNI
, BER_UNI_TAG_BITSTRING
, BER_FLAGS_NOOWNTAG
, dissect_disp_BIT_STRING
},
1287 { NULL
, 0, 0, 0, NULL
}
1291 dissect_disp_T_signedUpdateShadowArgument(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1292 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1293 T_signedUpdateShadowArgument_sequence
, hf_index
, ett_disp_T_signedUpdateShadowArgument
);
1299 static const ber_choice_t UpdateShadowArgument_choice
[] = {
1300 { 0, &hf_disp_unsignedUpdateShadowArgument
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_UpdateShadowArgumentData
},
1301 { 1, &hf_disp_signedUpdateShadowArgument
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_T_signedUpdateShadowArgument
},
1302 { 0, NULL
, 0, 0, 0, NULL
}
1306 dissect_disp_UpdateShadowArgument(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1307 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1308 UpdateShadowArgument_choice
, hf_index
, ett_disp_UpdateShadowArgument
,
1315 static const value_string disp_UpdateShadowResult_vals
[] = {
1317 { 1, "information" },
1321 static const ber_choice_t UpdateShadowResult_choice
[] = {
1322 { 0, &hf_disp_null
, BER_CLASS_UNI
, BER_UNI_TAG_NULL
, BER_FLAGS_NOOWNTAG
, dissect_disp_NULL
},
1323 { 1, &hf_disp_information
, BER_CLASS_ANY
/*choice*/, -1/*choice*/, BER_FLAGS_NOOWNTAG
, dissect_disp_Information
},
1324 { 0, NULL
, 0, 0, 0, NULL
}
1328 dissect_disp_UpdateShadowResult(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1331 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1332 UpdateShadowResult_choice
, hf_index
, ett_disp_UpdateShadowResult
,
1336 col_append_fstr(actx
->pinfo
->cinfo
, COL_INFO
, " %s", val_to_str(update
, disp_UpdateShadowResult_vals
, "unknown(%d)"));
1343 static const value_string disp_ShadowProblem_vals
[] = {
1344 { 1, "invalidAgreementID" },
1345 { 2, "inactiveAgreement" },
1346 { 3, "invalidInformationReceived" },
1347 { 4, "unsupportedStrategy" },
1348 { 5, "missedPrevious" },
1349 { 6, "fullUpdateRequired" },
1350 { 7, "unwillingToPerform" },
1351 { 8, "unsuitableTiming" },
1352 { 9, "updateAlreadyReceived" },
1353 { 10, "invalidSequencing" },
1354 { 11, "insufficientResources" },
1360 dissect_disp_ShadowProblem(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1363 offset
= dissect_ber_integer(implicit_tag
, actx
, tree
, tvb
, offset
, hf_index
,
1367 col_append_fstr(actx
->pinfo
->cinfo
, COL_INFO
, " %s", val_to_str(problem
, disp_ShadowProblem_vals
, "ShadowProblem(%d)"));
1373 static const ber_sequence_t ShadowErrorData_sequence
[] = {
1374 { &hf_disp_problem
, BER_CLASS_UNI
, BER_UNI_TAG_INTEGER
, BER_FLAGS_NOOWNTAG
, dissect_disp_ShadowProblem
},
1375 { &hf_disp_lastUpdate
, BER_CLASS_UNI
, BER_UNI_TAG_GeneralizedTime
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_Time
},
1376 { &hf_disp_updateWindow
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_OPTIONAL
|BER_FLAGS_NOOWNTAG
, dissect_disp_UpdateWindow
},
1377 { &hf_disp_securityParameters
, BER_CLASS_CON
, 30, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_dap_SecurityParameters
},
1378 { &hf_disp_performer
, BER_CLASS_CON
, 29, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_x509if_DistinguishedName
},
1379 { &hf_disp_aliasDereferenced
, BER_CLASS_CON
, 28, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_disp_BOOLEAN
},
1380 { &hf_disp_notification
, BER_CLASS_CON
, 27, BER_FLAGS_OPTIONAL
|BER_FLAGS_IMPLTAG
, dissect_disp_SEQUENCE_OF_Attribute
},
1381 { NULL
, 0, 0, 0, NULL
}
1385 dissect_disp_ShadowErrorData(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1386 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1387 ShadowErrorData_sequence
, hf_index
, ett_disp_ShadowErrorData
);
1393 static const ber_sequence_t T_signedShadowError_sequence
[] = {
1394 { &hf_disp_shadowError
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_ShadowErrorData
},
1395 { &hf_disp_algorithmIdentifier
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_x509af_AlgorithmIdentifier
},
1396 { &hf_disp_encrypted
, BER_CLASS_UNI
, BER_UNI_TAG_BITSTRING
, BER_FLAGS_NOOWNTAG
, dissect_disp_BIT_STRING
},
1397 { NULL
, 0, 0, 0, NULL
}
1401 dissect_disp_T_signedShadowError(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1402 offset
= dissect_ber_sequence(implicit_tag
, actx
, tree
, tvb
, offset
,
1403 T_signedShadowError_sequence
, hf_index
, ett_disp_T_signedShadowError
);
1409 static const ber_choice_t ShadowError_choice
[] = {
1410 { 0, &hf_disp_unsignedShadowError
, BER_CLASS_UNI
, BER_UNI_TAG_SEQUENCE
, BER_FLAGS_NOOWNTAG
, dissect_disp_ShadowErrorData
},
1411 { 1, &hf_disp_signedShadowError
, BER_CLASS_CON
, 0, BER_FLAGS_IMPLTAG
, dissect_disp_T_signedShadowError
},
1412 { 0, NULL
, 0, 0, 0, NULL
}
1416 dissect_disp_ShadowError(bool implicit_tag _U_
, tvbuff_t
*tvb _U_
, int offset _U_
, asn1_ctx_t
*actx _U_
, proto_tree
*tree _U_
, int hf_index _U_
) {
1417 offset
= dissect_ber_choice(actx
, tree
, tvb
, offset
,
1418 ShadowError_choice
, hf_index
, ett_disp_ShadowError
,
1426 static int dissect_EstablishParameter_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1428 asn1_ctx_t asn1_ctx
;
1429 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
1430 offset
= dissect_disp_EstablishParameter(false, tvb
, offset
, &asn1_ctx
, tree
, hf_disp_EstablishParameter_PDU
);
1433 static int dissect_ModificationParameter_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1435 asn1_ctx_t asn1_ctx
;
1436 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
1437 offset
= dissect_disp_ModificationParameter(false, tvb
, offset
, &asn1_ctx
, tree
, hf_disp_ModificationParameter_PDU
);
1440 static int dissect_ShadowingAgreementInfo_PDU(tvbuff_t
*tvb _U_
, packet_info
*pinfo _U_
, proto_tree
*tree _U_
, void *data _U_
) {
1442 asn1_ctx_t asn1_ctx
;
1443 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
1444 offset
= dissect_disp_ShadowingAgreementInfo(false, tvb
, offset
, &asn1_ctx
, tree
, hf_disp_ShadowingAgreementInfo_PDU
);
1450 * Dissect DISP PDUs inside a ROS PDUs
1453 dissect_disp(tvbuff_t
*tvb
, packet_info
*pinfo
, proto_tree
*parent_tree
, void* data
)
1459 struct SESSION_DATA_STRUCTURE
* session
;
1460 int (*disp_dissector
)(bool implicit_tag _U_
, tvbuff_t
*tvb
, int offset
, asn1_ctx_t
*actx
, proto_tree
*tree
, int hf_index _U_
) = NULL
;
1461 const char *disp_op_name
;
1462 asn1_ctx_t asn1_ctx
;
1464 /* do we have operation information from the ROS dissector */
1467 session
= (struct SESSION_DATA_STRUCTURE
*)data
;
1469 asn1_ctx_init(&asn1_ctx
, ASN1_ENC_BER
, true, pinfo
);
1471 asn1_ctx
.private_data
= session
;
1473 item
= proto_tree_add_item(parent_tree
, proto_disp
, tvb
, 0, -1, ENC_NA
);
1474 tree
= proto_item_add_subtree(item
, ett_disp
);
1476 col_set_str(pinfo
->cinfo
, COL_PROTOCOL
, "DISP");
1477 col_clear(pinfo
->cinfo
, COL_INFO
);
1479 switch(session
->ros_op
& ROS_OP_MASK
) {
1480 case (ROS_OP_BIND
| ROS_OP_ARGUMENT
): /* BindInvoke */
1481 disp_dissector
= dissect_disp_DSAShadowBindArgument
;
1482 disp_op_name
= "Shadow-Bind-Argument";
1484 case (ROS_OP_BIND
| ROS_OP_RESULT
): /* BindResult */
1485 disp_dissector
= dissect_disp_DSAShadowBindResult
;
1486 disp_op_name
= "Shadow-Bind-Result";
1488 case (ROS_OP_BIND
| ROS_OP_ERROR
): /* BindError */
1489 disp_dissector
= dissect_disp_DSAShadowBindError
;
1490 disp_op_name
= "Shadow-Bind-Error";
1492 case (ROS_OP_INVOKE
| ROS_OP_ARGUMENT
): /* Invoke Argument */
1493 switch(session
->ros_op
& ROS_OP_OPCODE_MASK
) {
1494 case 1: /* requestShadowUpdate */
1495 disp_dissector
= dissect_disp_RequestShadowUpdateArgument
;
1496 disp_op_name
= "Request-Shadow-Update-Argument";
1498 case 2: /* updateShadow*/
1499 disp_dissector
= dissect_disp_UpdateShadowArgument
;
1500 disp_op_name
= "Update-Shadow-Argument";
1502 case 3: /* coordinateShadowUpdate */
1503 disp_dissector
= dissect_disp_CoordinateShadowUpdateArgument
;
1504 disp_op_name
= "Coordinate-Shadow-Update-Argument";
1507 proto_tree_add_expert_format(tree
, pinfo
, &ei_disp_unsupported_opcode
, tvb
, offset
, -1,
1508 "Unsupported DISP opcode (%d)", session
->ros_op
& ROS_OP_OPCODE_MASK
);
1512 case (ROS_OP_INVOKE
| ROS_OP_RESULT
): /* Return Result */
1513 switch(session
->ros_op
& ROS_OP_OPCODE_MASK
) {
1514 case 1: /* requestShadowUpdate */
1515 disp_dissector
= dissect_disp_RequestShadowUpdateResult
;
1516 disp_op_name
= "Request-Shadow-Result";
1518 case 2: /* updateShadow */
1519 disp_dissector
= dissect_disp_UpdateShadowResult
;
1520 disp_op_name
= "Update-Shadow-Result";
1522 case 3: /* coordinateShadowUpdate */
1523 disp_dissector
= dissect_disp_CoordinateShadowUpdateResult
;
1524 disp_op_name
= "Coordinate-Shadow-Update-Result";
1527 proto_tree_add_expert_format(tree
, pinfo
, &ei_disp_unsupported_opcode
, tvb
, offset
, -1,
1528 "Unsupported DISP opcode (%d)", session
->ros_op
& ROS_OP_OPCODE_MASK
);
1532 case (ROS_OP_INVOKE
| ROS_OP_ERROR
): /* Return Error */
1533 switch(session
->ros_op
& ROS_OP_OPCODE_MASK
) {
1534 case 1: /* shadowError */
1535 disp_dissector
= dissect_disp_ShadowError
;
1536 disp_op_name
= "Shadow-Error";
1539 proto_tree_add_expert_format(tree
, pinfo
, &ei_disp_unsupported_errcode
, tvb
, offset
, -1,
1540 "Unsupported DISP errcode (%d)", session
->ros_op
& ROS_OP_OPCODE_MASK
);
1545 proto_tree_add_expert(tree
, pinfo
, &ei_disp_unsupported_pdu
, tvb
, offset
, -1);
1546 return tvb_captured_length(tvb
);
1549 if(disp_dissector
) {
1550 col_set_str(pinfo
->cinfo
, COL_INFO
, disp_op_name
);
1552 while (tvb_reported_length_remaining(tvb
, offset
) > 0){
1554 offset
=(*disp_dissector
)(false, tvb
, offset
, &asn1_ctx
, tree
, -1);
1555 if(offset
== old_offset
){
1556 proto_tree_add_expert(tree
, pinfo
, &ei_disp_zero_pdu
, tvb
, offset
, -1);
1562 return tvb_captured_length(tvb
);
1566 /*--- proto_register_disp -------------------------------------------*/
1567 void proto_register_disp(void) {
1569 /* List of fields */
1570 static hf_register_info hf
[] =
1572 { &hf_disp_EstablishParameter_PDU
,
1573 { "EstablishParameter", "disp.EstablishParameter_element",
1574 FT_NONE
, BASE_NONE
, NULL
, 0,
1576 { &hf_disp_ModificationParameter_PDU
,
1577 { "ModificationParameter", "disp.ModificationParameter_element",
1578 FT_NONE
, BASE_NONE
, NULL
, 0,
1580 { &hf_disp_ShadowingAgreementInfo_PDU
,
1581 { "ShadowingAgreementInfo", "disp.ShadowingAgreementInfo_element",
1582 FT_NONE
, BASE_NONE
, NULL
, 0,
1584 { &hf_disp_modifiedSecondaryShadows
,
1585 { "secondaryShadows", "disp.modifiedSecondaryShadows",
1586 FT_UINT32
, BASE_DEC
, NULL
, 0,
1587 "SET_OF_SupplierAndConsumers", HFILL
}},
1588 { &hf_disp_modifiedSecondaryShadows_item
,
1589 { "SupplierAndConsumers", "disp.SupplierAndConsumers_element",
1590 FT_NONE
, BASE_NONE
, NULL
, 0,
1592 { &hf_disp_shadowSubject
,
1593 { "shadowSubject", "disp.shadowSubject_element",
1594 FT_NONE
, BASE_NONE
, NULL
, 0,
1595 "UnitOfReplication", HFILL
}},
1596 { &hf_disp_updateMode
,
1597 { "updateMode", "disp.updateMode",
1598 FT_UINT32
, BASE_DEC
, VALS(disp_UpdateMode_vals
), 0,
1601 { "master", "disp.master_element",
1602 FT_NONE
, BASE_NONE
, NULL
, 0,
1603 "AccessPoint", HFILL
}},
1604 { &hf_disp_secondaryShadows
,
1605 { "secondaryShadows", "disp.secondaryShadows",
1606 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
1607 "BOOLEAN", HFILL
}},
1609 { "area", "disp.area_element",
1610 FT_NONE
, BASE_NONE
, NULL
, 0,
1611 "AreaSpecification", HFILL
}},
1612 { &hf_disp_replication_attributes
,
1613 { "attributes", "disp.attributes",
1614 FT_UINT32
, BASE_DEC
, NULL
, 0,
1615 "AttributeSelection", HFILL
}},
1616 { &hf_disp_knowledge
,
1617 { "knowledge", "disp.knowledge_element",
1618 FT_NONE
, BASE_NONE
, NULL
, 0,
1620 { &hf_disp_subordinates
,
1621 { "subordinates", "disp.subordinates",
1622 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
1623 "BOOLEAN", HFILL
}},
1624 { &hf_disp_contextSelection
,
1625 { "contextSelection", "disp.contextSelection",
1626 FT_UINT32
, BASE_DEC
, VALS(dap_ContextSelection_vals
), 0,
1628 { &hf_disp_supplyContexts
,
1629 { "supplyContexts", "disp.supplyContexts",
1630 FT_UINT32
, BASE_DEC
, VALS(disp_T_supplyContexts_vals
), 0,
1632 { &hf_disp_allContexts
,
1633 { "allContexts", "disp.allContexts_element",
1634 FT_NONE
, BASE_NONE
, NULL
, 0,
1636 { &hf_disp_selectedContexts
,
1637 { "selectedContexts", "disp.selectedContexts",
1638 FT_UINT32
, BASE_DEC
, NULL
, 0,
1640 { &hf_disp_selectedContexts_item
,
1641 { "selectedContexts item", "disp.selectedContexts_item",
1642 FT_OID
, BASE_NONE
, NULL
, 0,
1643 "OBJECT_IDENTIFIER", HFILL
}},
1644 { &hf_disp_contextPrefix
,
1645 { "contextPrefix", "disp.contextPrefix",
1646 FT_UINT32
, BASE_DEC
, NULL
, 0,
1647 "DistinguishedName", HFILL
}},
1648 { &hf_disp_replicationArea
,
1649 { "replicationArea", "disp.replicationArea_element",
1650 FT_NONE
, BASE_NONE
, NULL
, 0,
1651 "SubtreeSpecification", HFILL
}},
1652 { &hf_disp_knowledgeType
,
1653 { "knowledgeType", "disp.knowledgeType",
1654 FT_UINT32
, BASE_DEC
, VALS(disp_T_knowledgeType_vals
), 0,
1656 { &hf_disp_extendedKnowledge
,
1657 { "extendedKnowledge", "disp.extendedKnowledge",
1658 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
1659 "BOOLEAN", HFILL
}},
1660 { &hf_disp_AttributeSelection_item
,
1661 { "ClassAttributeSelection", "disp.ClassAttributeSelection_element",
1662 FT_NONE
, BASE_NONE
, NULL
, 0,
1665 { "class", "disp.class",
1666 FT_OID
, BASE_NONE
, NULL
, 0,
1667 "OBJECT_IDENTIFIER", HFILL
}},
1668 { &hf_disp_classAttributes
,
1669 { "classAttributes", "disp.classAttributes",
1670 FT_UINT32
, BASE_DEC
, VALS(disp_ClassAttributes_vals
), 0,
1672 { &hf_disp_allAttributes
,
1673 { "allAttributes", "disp.allAttributes_element",
1674 FT_NONE
, BASE_NONE
, NULL
, 0,
1677 { "include", "disp.include",
1678 FT_UINT32
, BASE_DEC
, NULL
, 0,
1679 "AttributeTypes", HFILL
}},
1681 { "exclude", "disp.exclude",
1682 FT_UINT32
, BASE_DEC
, NULL
, 0,
1683 "AttributeTypes", HFILL
}},
1684 { &hf_disp_AttributeTypes_item
,
1685 { "AttributeType", "disp.AttributeType",
1686 FT_OID
, BASE_NONE
, NULL
, 0,
1688 { &hf_disp_supplierInitiated
,
1689 { "supplierInitiated", "disp.supplierInitiated",
1690 FT_UINT32
, BASE_DEC
, VALS(disp_SupplierUpdateMode_vals
), 0,
1691 "SupplierUpdateMode", HFILL
}},
1692 { &hf_disp_consumerInitiated
,
1693 { "consumerInitiated", "disp.consumerInitiated_element",
1694 FT_NONE
, BASE_NONE
, NULL
, 0,
1695 "ConsumerUpdateMode", HFILL
}},
1696 { &hf_disp_onChange
,
1697 { "onChange", "disp.onChange",
1698 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
1699 "BOOLEAN", HFILL
}},
1700 { &hf_disp_scheduled
,
1701 { "scheduled", "disp.scheduled_element",
1702 FT_NONE
, BASE_NONE
, NULL
, 0,
1703 "SchedulingParameters", HFILL
}},
1704 { &hf_disp_periodic
,
1705 { "periodic", "disp.periodic_element",
1706 FT_NONE
, BASE_NONE
, NULL
, 0,
1707 "PeriodicStrategy", HFILL
}},
1708 { &hf_disp_othertimes
,
1709 { "othertimes", "disp.othertimes",
1710 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
1711 "BOOLEAN", HFILL
}},
1712 { &hf_disp_beginTime
,
1713 { "beginTime", "disp.beginTime",
1714 FT_STRING
, BASE_NONE
, NULL
, 0,
1716 { &hf_disp_windowSize
,
1717 { "windowSize", "disp.windowSize",
1718 FT_INT32
, BASE_DEC
, NULL
, 0,
1719 "INTEGER", HFILL
}},
1720 { &hf_disp_updateInterval
,
1721 { "updateInterval", "disp.updateInterval",
1722 FT_INT32
, BASE_DEC
, NULL
, 0,
1723 "INTEGER", HFILL
}},
1724 { &hf_disp_agreementID
,
1725 { "agreementID", "disp.agreementID_element",
1726 FT_NONE
, BASE_NONE
, NULL
, 0,
1728 { &hf_disp_lastUpdate
,
1729 { "lastUpdate", "disp.lastUpdate",
1730 FT_STRING
, BASE_NONE
, NULL
, 0,
1732 { &hf_disp_updateStrategy
,
1733 { "updateStrategy", "disp.updateStrategy",
1734 FT_UINT32
, BASE_DEC
, VALS(disp_T_updateStrategy_vals
), 0,
1736 { &hf_disp_standardUpdate
,
1737 { "standard", "disp.standard",
1738 FT_UINT32
, BASE_DEC
, VALS(disp_StandardUpdate_vals
), 0,
1739 "StandardUpdate", HFILL
}},
1741 { "other", "disp.other_element",
1742 FT_NONE
, BASE_NONE
, NULL
, 0,
1743 "EXTERNAL", HFILL
}},
1744 { &hf_disp_securityParameters
,
1745 { "securityParameters", "disp.securityParameters_element",
1746 FT_NONE
, BASE_NONE
, NULL
, 0,
1748 { &hf_disp_unsignedCoordinateShadowUpdateArgument
,
1749 { "unsignedCoordinateShadowUpdateArgument", "disp.unsignedCoordinateShadowUpdateArgument_element",
1750 FT_NONE
, BASE_NONE
, NULL
, 0,
1751 "CoordinateShadowUpdateArgumentData", HFILL
}},
1752 { &hf_disp_signedCoordinateShadowUpdateArgument
,
1753 { "signedCoordinateShadowUpdateArgument", "disp.signedCoordinateShadowUpdateArgument_element",
1754 FT_NONE
, BASE_NONE
, NULL
, 0,
1756 { &hf_disp_coordinateShadowUpdateArgument
,
1757 { "coordinateShadowUpdateArgument", "disp.coordinateShadowUpdateArgument_element",
1758 FT_NONE
, BASE_NONE
, NULL
, 0,
1759 "CoordinateShadowUpdateArgumentData", HFILL
}},
1760 { &hf_disp_algorithmIdentifier
,
1761 { "algorithmIdentifier", "disp.algorithmIdentifier_element",
1762 FT_NONE
, BASE_NONE
, NULL
, 0,
1764 { &hf_disp_encrypted
,
1765 { "encrypted", "disp.encrypted",
1766 FT_BYTES
, BASE_NONE
, NULL
, 0,
1767 "BIT_STRING", HFILL
}},
1769 { "null", "disp.null_element",
1770 FT_NONE
, BASE_NONE
, NULL
, 0,
1772 { &hf_disp_information
,
1773 { "information", "disp.information",
1774 FT_UINT32
, BASE_DEC
, VALS(disp_Information_vals
), 0,
1776 { &hf_disp_performer
,
1777 { "performer", "disp.performer",
1778 FT_UINT32
, BASE_DEC
, NULL
, 0,
1779 "DistinguishedName", HFILL
}},
1780 { &hf_disp_aliasDereferenced
,
1781 { "aliasDereferenced", "disp.aliasDereferenced",
1782 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
1783 "BOOLEAN", HFILL
}},
1784 { &hf_disp_notification
,
1785 { "notification", "disp.notification",
1786 FT_UINT32
, BASE_DEC
, NULL
, 0,
1787 "SEQUENCE_OF_Attribute", HFILL
}},
1788 { &hf_disp_notification_item
,
1789 { "Attribute", "disp.Attribute_element",
1790 FT_NONE
, BASE_NONE
, NULL
, 0,
1792 { &hf_disp_unsignedInformation
,
1793 { "unsignedInformation", "disp.unsignedInformation_element",
1794 FT_NONE
, BASE_NONE
, NULL
, 0,
1795 "InformationData", HFILL
}},
1796 { &hf_disp_signedInformation
,
1797 { "signedInformation", "disp.signedInformation_element",
1798 FT_NONE
, BASE_NONE
, NULL
, 0,
1800 { &hf_disp_information_data
,
1801 { "information", "disp.information_element",
1802 FT_NONE
, BASE_NONE
, NULL
, 0,
1803 "InformationData", HFILL
}},
1804 { &hf_disp_requestedStrategy
,
1805 { "requestedStrategy", "disp.requestedStrategy",
1806 FT_UINT32
, BASE_DEC
, VALS(disp_T_requestedStrategy_vals
), 0,
1808 { &hf_disp_standard
,
1809 { "standard", "disp.standard",
1810 FT_UINT32
, BASE_DEC
, VALS(disp_T_standard_vals
), 0,
1812 { &hf_disp_unsignedRequestShadowUpdateArgument
,
1813 { "unsignedRequestShadowUpdateArgument", "disp.unsignedRequestShadowUpdateArgument_element",
1814 FT_NONE
, BASE_NONE
, NULL
, 0,
1815 "RequestShadowUpdateArgumentData", HFILL
}},
1816 { &hf_disp_signedRequestShadowUpdateArgument
,
1817 { "signedRequestShadowUpdateArgument", "disp.signedRequestShadowUpdateArgument_element",
1818 FT_NONE
, BASE_NONE
, NULL
, 0,
1820 { &hf_disp_requestShadowUpdateArgument
,
1821 { "requestShadowUpdateArgument", "disp.requestShadowUpdateArgument_element",
1822 FT_NONE
, BASE_NONE
, NULL
, 0,
1823 "RequestShadowUpdateArgumentData", HFILL
}},
1824 { &hf_disp_updateTime
,
1825 { "updateTime", "disp.updateTime",
1826 FT_STRING
, BASE_NONE
, NULL
, 0,
1828 { &hf_disp_updateWindow
,
1829 { "updateWindow", "disp.updateWindow_element",
1830 FT_NONE
, BASE_NONE
, NULL
, 0,
1832 { &hf_disp_updatedInfo
,
1833 { "updatedInfo", "disp.updatedInfo",
1834 FT_UINT32
, BASE_DEC
, VALS(disp_RefreshInformation_vals
), 0,
1835 "RefreshInformation", HFILL
}},
1836 { &hf_disp_unsignedUpdateShadowArgument
,
1837 { "unsignedUpdateShadowArgument", "disp.unsignedUpdateShadowArgument_element",
1838 FT_NONE
, BASE_NONE
, NULL
, 0,
1839 "UpdateShadowArgumentData", HFILL
}},
1840 { &hf_disp_signedUpdateShadowArgument
,
1841 { "signedUpdateShadowArgument", "disp.signedUpdateShadowArgument_element",
1842 FT_NONE
, BASE_NONE
, NULL
, 0,
1844 { &hf_disp_updateShadowArgument
,
1845 { "updateShadowArgument", "disp.updateShadowArgument_element",
1846 FT_NONE
, BASE_NONE
, NULL
, 0,
1847 "UpdateShadowArgumentData", HFILL
}},
1849 { "start", "disp.start",
1850 FT_STRING
, BASE_NONE
, NULL
, 0,
1853 { "stop", "disp.stop",
1854 FT_STRING
, BASE_NONE
, NULL
, 0,
1856 { &hf_disp_noRefresh
,
1857 { "noRefresh", "disp.noRefresh_element",
1858 FT_NONE
, BASE_NONE
, NULL
, 0,
1861 { "total", "disp.total_element",
1862 FT_NONE
, BASE_NONE
, NULL
, 0,
1863 "TotalRefresh", HFILL
}},
1864 { &hf_disp_incremental
,
1865 { "incremental", "disp.incremental",
1866 FT_UINT32
, BASE_DEC
, NULL
, 0,
1867 "IncrementalRefresh", HFILL
}},
1868 { &hf_disp_otherStrategy
,
1869 { "otherStrategy", "disp.otherStrategy_element",
1870 FT_NONE
, BASE_NONE
, NULL
, 0,
1871 "EXTERNAL", HFILL
}},
1873 { "sDSE", "disp.sDSE_element",
1874 FT_NONE
, BASE_NONE
, NULL
, 0,
1875 "SDSEContent", HFILL
}},
1877 { "subtree", "disp.subtree",
1878 FT_UINT32
, BASE_DEC
, NULL
, 0,
1879 "SET_OF_Subtree", HFILL
}},
1880 { &hf_disp_subtree_item
,
1881 { "Subtree", "disp.Subtree_element",
1882 FT_NONE
, BASE_NONE
, NULL
, 0,
1884 { &hf_disp_sDSEType
,
1885 { "sDSEType", "disp.sDSEType",
1886 FT_BYTES
, BASE_NONE
, NULL
, 0,
1888 { &hf_disp_subComplete
,
1889 { "subComplete", "disp.subComplete",
1890 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
1891 "BOOLEAN", HFILL
}},
1892 { &hf_disp_attComplete
,
1893 { "attComplete", "disp.attComplete",
1894 FT_BOOLEAN
, BASE_NONE
, NULL
, 0,
1895 "BOOLEAN", HFILL
}},
1896 { &hf_disp_attributes
,
1897 { "attributes", "disp.attributes",
1898 FT_UINT32
, BASE_DEC
, NULL
, 0,
1899 "SET_OF_Attribute", HFILL
}},
1900 { &hf_disp_attributes_item
,
1901 { "Attribute", "disp.Attribute_element",
1902 FT_NONE
, BASE_NONE
, NULL
, 0,
1904 { &hf_disp_attValIncomplete
,
1905 { "attValIncomplete", "disp.attValIncomplete",
1906 FT_UINT32
, BASE_DEC
, NULL
, 0,
1907 "SET_OF_AttributeType", HFILL
}},
1908 { &hf_disp_attValIncomplete_item
,
1909 { "AttributeType", "disp.AttributeType",
1910 FT_OID
, BASE_NONE
, NULL
, 0,
1913 { "rdn", "disp.rdn",
1914 FT_UINT32
, BASE_DEC
, NULL
, 0,
1915 "RelativeDistinguishedName", HFILL
}},
1916 { &hf_disp_IncrementalRefresh_item
,
1917 { "IncrementalStepRefresh", "disp.IncrementalStepRefresh_element",
1918 FT_NONE
, BASE_NONE
, NULL
, 0,
1920 { &hf_disp_sDSEChanges
,
1921 { "sDSEChanges", "disp.sDSEChanges",
1922 FT_UINT32
, BASE_DEC
, VALS(disp_T_sDSEChanges_vals
), 0,
1925 { "add", "disp.add_element",
1926 FT_NONE
, BASE_NONE
, NULL
, 0,
1927 "SDSEContent", HFILL
}},
1929 { "remove", "disp.remove_element",
1930 FT_NONE
, BASE_NONE
, NULL
, 0,
1933 { "modify", "disp.modify_element",
1934 FT_NONE
, BASE_NONE
, NULL
, 0,
1935 "ContentChange", HFILL
}},
1936 { &hf_disp_subordinateUpdates
,
1937 { "subordinateUpdates", "disp.subordinateUpdates",
1938 FT_UINT32
, BASE_DEC
, NULL
, 0,
1939 "SEQUENCE_OF_SubordinateChanges", HFILL
}},
1940 { &hf_disp_subordinateUpdates_item
,
1941 { "SubordinateChanges", "disp.SubordinateChanges_element",
1942 FT_NONE
, BASE_NONE
, NULL
, 0,
1945 { "rename", "disp.rename",
1946 FT_UINT32
, BASE_DEC
, VALS(disp_T_rename_vals
), 0,
1949 { "newRDN", "disp.newRDN",
1950 FT_UINT32
, BASE_DEC
, NULL
, 0,
1951 "RelativeDistinguishedName", HFILL
}},
1953 { "newDN", "disp.newDN",
1954 FT_UINT32
, BASE_DEC
, NULL
, 0,
1955 "DistinguishedName", HFILL
}},
1956 { &hf_disp_attributeChanges
,
1957 { "attributeChanges", "disp.attributeChanges",
1958 FT_UINT32
, BASE_DEC
, VALS(disp_T_attributeChanges_vals
), 0,
1961 { "replace", "disp.replace",
1962 FT_UINT32
, BASE_DEC
, NULL
, 0,
1963 "SET_OF_Attribute", HFILL
}},
1964 { &hf_disp_replace_item
,
1965 { "Attribute", "disp.Attribute_element",
1966 FT_NONE
, BASE_NONE
, NULL
, 0,
1969 { "changes", "disp.changes",
1970 FT_UINT32
, BASE_DEC
, NULL
, 0,
1971 "SEQUENCE_OF_EntryModification", HFILL
}},
1972 { &hf_disp_changes_item
,
1973 { "EntryModification", "disp.EntryModification",
1974 FT_UINT32
, BASE_DEC
, VALS(dap_EntryModification_vals
), 0,
1976 { &hf_disp_subordinate
,
1977 { "subordinate", "disp.subordinate",
1978 FT_UINT32
, BASE_DEC
, NULL
, 0,
1979 "RelativeDistinguishedName", HFILL
}},
1980 { &hf_disp_subordinate_changes
,
1981 { "changes", "disp.changes_element",
1982 FT_NONE
, BASE_NONE
, NULL
, 0,
1983 "IncrementalStepRefresh", HFILL
}},
1985 { "problem", "disp.problem",
1986 FT_INT32
, BASE_DEC
, VALS(disp_ShadowProblem_vals
), 0,
1987 "ShadowProblem", HFILL
}},
1988 { &hf_disp_unsignedShadowError
,
1989 { "unsignedShadowError", "disp.unsignedShadowError_element",
1990 FT_NONE
, BASE_NONE
, NULL
, 0,
1991 "ShadowErrorData", HFILL
}},
1992 { &hf_disp_signedShadowError
,
1993 { "signedShadowError", "disp.signedShadowError_element",
1994 FT_NONE
, BASE_NONE
, NULL
, 0,
1996 { &hf_disp_shadowError
,
1997 { "shadowError", "disp.shadowError_element",
1998 FT_NONE
, BASE_NONE
, NULL
, 0,
1999 "ShadowErrorData", HFILL
}},
2002 /* List of subtrees */
2003 static int *ett
[] = {
2005 &ett_disp_ModificationParameter
,
2006 &ett_disp_SET_OF_SupplierAndConsumers
,
2007 &ett_disp_ShadowingAgreementInfo
,
2008 &ett_disp_UnitOfReplication
,
2009 &ett_disp_T_supplyContexts
,
2010 &ett_disp_T_selectedContexts
,
2011 &ett_disp_AreaSpecification
,
2012 &ett_disp_Knowledge
,
2013 &ett_disp_AttributeSelection
,
2014 &ett_disp_ClassAttributeSelection
,
2015 &ett_disp_ClassAttributes
,
2016 &ett_disp_AttributeTypes
,
2017 &ett_disp_UpdateMode
,
2018 &ett_disp_SupplierUpdateMode
,
2019 &ett_disp_SchedulingParameters
,
2020 &ett_disp_PeriodicStrategy
,
2021 &ett_disp_CoordinateShadowUpdateArgumentData
,
2022 &ett_disp_T_updateStrategy
,
2023 &ett_disp_CoordinateShadowUpdateArgument
,
2024 &ett_disp_T_signedCoordinateShadowUpdateArgument
,
2025 &ett_disp_CoordinateShadowUpdateResult
,
2026 &ett_disp_InformationData
,
2027 &ett_disp_SEQUENCE_OF_Attribute
,
2028 &ett_disp_Information
,
2029 &ett_disp_T_signedInformation
,
2030 &ett_disp_RequestShadowUpdateArgumentData
,
2031 &ett_disp_T_requestedStrategy
,
2032 &ett_disp_RequestShadowUpdateArgument
,
2033 &ett_disp_T_signedRequestShadowUpdateArgument
,
2034 &ett_disp_RequestShadowUpdateResult
,
2035 &ett_disp_UpdateShadowArgumentData
,
2036 &ett_disp_UpdateShadowArgument
,
2037 &ett_disp_T_signedUpdateShadowArgument
,
2038 &ett_disp_UpdateShadowResult
,
2039 &ett_disp_UpdateWindow
,
2040 &ett_disp_RefreshInformation
,
2041 &ett_disp_TotalRefresh
,
2042 &ett_disp_SET_OF_Subtree
,
2043 &ett_disp_SDSEContent
,
2044 &ett_disp_SET_OF_Attribute
,
2045 &ett_disp_SET_OF_AttributeType
,
2047 &ett_disp_IncrementalRefresh
,
2048 &ett_disp_IncrementalStepRefresh
,
2049 &ett_disp_T_sDSEChanges
,
2050 &ett_disp_SEQUENCE_OF_SubordinateChanges
,
2051 &ett_disp_ContentChange
,
2053 &ett_disp_T_attributeChanges
,
2054 &ett_disp_SEQUENCE_OF_EntryModification
,
2055 &ett_disp_SubordinateChanges
,
2056 &ett_disp_ShadowErrorData
,
2057 &ett_disp_ShadowError
,
2058 &ett_disp_T_signedShadowError
,
2061 static ei_register_info ei
[] = {
2062 { &ei_disp_unsupported_opcode
, { "disp.unsupported_opcode", PI_UNDECODED
, PI_WARN
, "Unsupported DISP opcode", EXPFILL
}},
2063 { &ei_disp_unsupported_errcode
, { "disp.unsupported_errcode", PI_UNDECODED
, PI_WARN
, "Unsupported DISP errcode", EXPFILL
}},
2064 { &ei_disp_unsupported_pdu
, { "disp.unsupported_pdu", PI_UNDECODED
, PI_WARN
, "Unsupported DISP PDU", EXPFILL
}},
2065 { &ei_disp_zero_pdu
, { "disp.zero_pdu", PI_PROTOCOL
, PI_ERROR
, "Internal error, zero-byte DISP PDU", EXPFILL
}},
2068 module_t
*disp_module
;
2069 expert_module_t
* expert_disp
;
2071 /* Register protocol */
2072 proto_disp
= proto_register_protocol(PNAME
, PSNAME
, PFNAME
);
2073 disp_handle
= register_dissector("disp", dissect_disp
, proto_disp
);
2075 /* Register fields and subtrees */
2076 proto_register_field_array(proto_disp
, hf
, array_length(hf
));
2077 proto_register_subtree_array(ett
, array_length(ett
));
2078 expert_disp
= expert_register_protocol(proto_disp
);
2079 expert_register_field_array(expert_disp
, ei
, array_length(ei
));
2081 /* Register our configuration options for DISP, particularly our port */
2083 disp_module
= prefs_register_protocol_subtree("OSI/X.500", proto_disp
, NULL
);
2085 prefs_register_obsolete_preference(disp_module
, "tcp.port");
2087 prefs_register_static_text_preference(disp_module
, "tcp_port_info",
2088 "The TCP ports used by the DISP protocol should be added to the TPKT preference \"TPKT TCP ports\", or by selecting \"TPKT\" as the \"Transport\" protocol in the \"Decode As\" dialog.",
2089 "DISP TCP Port preference moved information");
2094 /*--- proto_reg_handoff_disp --- */
2095 void proto_reg_handoff_disp(void) {
2096 dissector_add_string("dop.oid", "agreement.2.5.19.1", create_dissector_handle(dissect_ShadowingAgreementInfo_PDU
, proto_disp
));
2097 dissector_add_string("dop.oid", "establish.rolea.2.5.19.1", create_dissector_handle(dissect_EstablishParameter_PDU
, proto_disp
));
2098 dissector_add_string("dop.oid", "establish.roleb.2.5.19.1", create_dissector_handle(dissect_EstablishParameter_PDU
, proto_disp
));
2099 dissector_add_string("dop.oid", "modify.rolea.2.5.19.1", create_dissector_handle(dissect_ModificationParameter_PDU
, proto_disp
));
2100 dissector_add_string("dop.oid", "modify.roleb.2.5.19.1", create_dissector_handle(dissect_ModificationParameter_PDU
, proto_disp
));
2103 /* APPLICATION CONTEXT */
2105 oid_add_from_string("id-ac-shadow-consumer-initiated","2.5.3.4");
2106 oid_add_from_string("id-ac-shadow-supplier-initiated","2.5.3.5");
2107 oid_add_from_string("id-ac-reliable-shadow-consumer-initiated","2.5.3.6");
2108 oid_add_from_string("id-ac-reliable-shadow-supplier-initiated","2.5.3.7");
2110 /* ABSTRACT SYNTAXES */
2111 register_ros_oid_dissector_handle("2.5.9.3", disp_handle
, 0, "id-as-directory-shadow", false);
2112 register_rtse_oid_dissector_handle("2.5.9.5", disp_handle
, 0, "id-as-directory-reliable-shadow", false);
2113 register_rtse_oid_dissector_handle("2.5.9.6", disp_handle
, 0, "id-as-directory-reliable-binding", false);
2115 /* OPERATIONAL BINDING */
2116 oid_add_from_string("id-op-binding-shadow","2.5.1.0.5.1");
2119 x509if_register_fmt(hf_disp_contextPrefix
, "cp=");