Coverage Report

Created: 2026-08-14 06:45

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