Coverage Report

Created: 2025-02-15 06:25

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