Coverage Report

Created: 2026-05-18 07:03

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cyclonedds/install/include/dds/ddsi/ddsi_config.h
Line
Count
Source
1
// Copyright(c) 2006 to 2022 ZettaScale Technology and others
2
//
3
// This program and the accompanying materials are made available under the
4
// terms of the Eclipse Public License v. 2.0 which is available at
5
// http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
6
// v. 1.0 which is available at
7
// http://www.eclipse.org/org/documents/edl-v10.php.
8
//
9
// SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
10
11
#ifndef DDSI_CONFIG_H
12
#define DDSI_CONFIG_H
13
14
#include <stdio.h>
15
16
#include "dds/export.h"
17
#include "dds/features.h"
18
#include "dds/ddsrt/sched.h"
19
#include "dds/ddsrt/random.h"
20
#include "dds/ddsi/ddsi_portmapping.h"
21
#include "dds/ddsi/ddsi_protocol_version.h"
22
#include "dds/ddsi/ddsi_locator.h"
23
#include "dds/ddsi/ddsi_addrset_costs.h"
24
#include "dds/ddsi/ddsi_xqos.h"
25
26
#if defined (__cplusplus)
27
extern "C" {
28
#endif
29
30
struct ddsi_config;
31
32
enum ddsi_standards_conformance {
33
  DDSI_SC_PEDANTIC,
34
  DDSI_SC_STRICT,
35
  DDSI_SC_LAX
36
};
37
38
#define DDSI_SC_PEDANTIC_P(config) ((config).standards_conformance <= DDSI_SC_PEDANTIC)
39
#define DDSI_SC_STRICT_P(config) ((config).standards_conformance <= DDSI_SC_STRICT)
40
41
enum ddsi_besmode {
42
  DDSI_BESMODE_FULL,
43
  DDSI_BESMODE_WRITERS
44
};
45
46
enum ddsi_retransmit_merging {
47
  DDSI_REXMIT_MERGE_NEVER,
48
  DDSI_REXMIT_MERGE_ADAPTIVE,
49
  DDSI_REXMIT_MERGE_ALWAYS
50
};
51
52
enum ddsi_boolean_default {
53
  DDSI_BOOLDEF_DEFAULT,
54
  DDSI_BOOLDEF_FALSE,
55
  DDSI_BOOLDEF_TRUE
56
};
57
58
/* deprecated shm log level */
59
enum ddsi_shm_loglevel {
60
  DDSI_SHM_OFF = 0,
61
  DDSI_SHM_FATAL,
62
  DDSI_SHM_ERROR,
63
  DDSI_SHM_WARN,
64
  DDSI_SHM_INFO,
65
  DDSI_SHM_DEBUG,
66
  DDSI_SHM_VERBOSE
67
};
68
69
#define DDSI_PARTICIPANT_INDEX_AUTO -1
70
#define DDSI_PARTICIPANT_INDEX_NONE -2
71
#define DDSI_PARTICIPANT_INDEX_DEFAULT -3
72
73
/* ddsi_config_listelem must be an overlay for all used listelem types */
74
struct ddsi_config_listelem {
75
  struct ddsi_config_listelem *next;
76
};
77
78
#ifdef DDS_HAS_NETWORK_PARTITIONS
79
struct ddsi_networkpartition_address {
80
  struct ddsi_networkpartition_address *next;
81
  ddsi_locator_t loc;
82
};
83
84
struct ddsi_config_networkpartition_listelem {
85
  struct ddsi_config_networkpartition_listelem *next;
86
  char *name;
87
  char *address_string;
88
  char *interface_names;
89
  struct ddsi_networkpartition_address *uc_addresses;
90
  struct ddsi_networkpartition_address *asm_addresses;
91
#ifdef DDSRT_HAVE_SSM
92
  struct ddsi_networkpartition_address *ssm_addresses;
93
#endif
94
};
95
96
struct ddsi_config_ignoredpartition_listelem {
97
  struct ddsi_config_ignoredpartition_listelem *next;
98
  char *DCPSPartitionTopic;
99
};
100
101
struct ddsi_config_partitionmapping_listelem {
102
  struct ddsi_config_partitionmapping_listelem *next;
103
  char *networkPartition;
104
  char *DCPSPartitionTopic;
105
  struct ddsi_config_networkpartition_listelem *partition;
106
};
107
#endif /* DDS_HAS_NETWORK_PARTITIONS */
108
109
struct ddsi_config_maybe_int32 {
110
  int isdefault;
111
  int32_t value;
112
};
113
114
struct ddsi_config_maybe_uint32 {
115
  int isdefault;
116
  uint32_t value;
117
};
118
119
struct ddsi_config_maybe_duration {
120
  int isdefault;
121
  dds_duration_t value;
122
};
123
124
struct ddsi_config_uint32_array {
125
  uint32_t n;
126
  uint32_t *xs;
127
};
128
129
struct ddsi_config_thread_properties_listelem {
130
  struct ddsi_config_thread_properties_listelem *next;
131
  char *name;
132
  ddsrt_sched_t sched_class;
133
  struct ddsi_config_maybe_int32 schedule_priority;
134
  struct ddsi_config_maybe_uint32 stack_size;
135
  struct ddsi_config_uint32_array affinity;
136
};
137
138
struct ddsi_config_peer_listelem
139
{
140
  struct ddsi_config_peer_listelem *next;
141
  char *peer;
142
  struct ddsi_config_maybe_duration prune_delay;
143
};
144
145
struct ddsi_config_prune_deleted_ppant {
146
  int64_t delay;
147
  int enforce_delay;
148
};
149
150
/* allow multicast bits (default depends on network type): */
151
#define DDSI_AMC_FALSE 0u
152
#define DDSI_AMC_SPDP 1u
153
#define DDSI_AMC_ASM 2u
154
#ifdef DDSRT_HAVE_SSM
155
#define DDSI_AMC_SSM 4u
156
#define DDSI_AMC_TRUE (DDSI_AMC_SPDP | DDSI_AMC_ASM | DDSI_AMC_SSM)
157
#else
158
#define DDSI_AMC_TRUE (DDSI_AMC_SPDP | DDSI_AMC_ASM)
159
#endif
160
#define DDSI_AMC_DEFAULT 0x80000000u
161
162
/* FIXME: this should be fully dynamic ... but this is easier for a quick hack */
163
enum ddsi_transport_selector {
164
  DDSI_TRANS_DEFAULT, /* actually UDP, but this is so we can tell what has been set */
165
  DDSI_TRANS_UDP,
166
  DDSI_TRANS_UDP6,
167
  DDSI_TRANS_TCP,
168
  DDSI_TRANS_TCP6,
169
  DDSI_TRANS_RAWETH,
170
  DDSI_TRANS_NONE /* FIXME: see FIXME above ... :( */
171
};
172
173
enum ddsi_many_sockets_mode {
174
  DDSI_MSM_NO_UNICAST,
175
  DDSI_MSM_SINGLE_UNICAST,
176
  DDSI_MSM_MANY_UNICAST
177
};
178
179
#ifdef DDS_HAS_SECURITY
180
struct ddsi_plugin_library_properties {
181
  char *library_path;
182
  char *library_init;
183
  char *library_finalize;
184
};
185
186
struct ddsi_authentication_properties {
187
  char *identity_certificate;
188
  char *identity_ca;
189
  char *private_key;
190
  char *password;
191
  char *trusted_ca_dir;
192
  char *crl;
193
  int include_optional_fields;
194
};
195
196
struct ddsi_access_control_properties {
197
  char *permissions;
198
  char *permissions_ca;
199
  char *governance;
200
};
201
202
struct ddsi_config_omg_security {
203
  struct ddsi_authentication_properties authentication_properties;
204
  struct ddsi_access_control_properties access_control_properties;
205
  struct ddsi_plugin_library_properties authentication_plugin;
206
  struct ddsi_plugin_library_properties access_control_plugin;
207
  struct ddsi_plugin_library_properties cryptography_plugin;
208
};
209
210
struct ddsi_config_omg_security_listelem {
211
  struct ddsi_config_omg_security_listelem *next;
212
  struct ddsi_config_omg_security cfg;
213
};
214
#endif /* DDS_HAS_SECURITY */
215
216
#ifdef DDS_HAS_TCP_TLS
217
struct ddsi_config_ssl_min_version {
218
  int major;
219
  int minor;
220
};
221
#endif
222
223
struct ddsi_config_socket_buf_size {
224
  struct ddsi_config_maybe_uint32 min, max;
225
};
226
227
struct ddsi_config_addrset_costs {
228
  struct ddsi_config_maybe_int32 uc;
229
  struct ddsi_config_maybe_int32 mc;
230
  struct ddsi_config_maybe_int32 ssm;
231
  struct ddsi_config_maybe_int32 delivered;
232
  struct ddsi_config_maybe_int32 discarded;
233
  struct ddsi_config_maybe_int32 redundant_psmx;
234
};
235
236
struct ddsi_config_network_interface {
237
  int automatic;
238
  char *name;
239
  char *address;
240
  int prefer_multicast;
241
  int presence_required;
242
  enum ddsi_boolean_default multicast;
243
  struct ddsi_config_maybe_int32 priority;
244
  uint32_t allow_multicast; // no need for a "maybe" type: DDSI_AMC_DEFAULT takes care of that
245
  struct ddsi_config_addrset_costs addrset_costs;
246
};
247
248
struct ddsi_config_network_interface_listelem {
249
  struct ddsi_config_network_interface_listelem *next;
250
  struct ddsi_config_network_interface cfg;
251
};
252
253
enum ddsi_config_entity_naming_mode {
254
  DDSI_ENTITY_NAMING_DEFAULT_EMPTY,
255
  DDSI_ENTITY_NAMING_DEFAULT_FANCY
256
};
257
258
struct ddsi_config_psmx {
259
  char *type;
260
  char *library;
261
  char *config;
262
  struct ddsi_config_maybe_int32 priority;
263
};
264
265
struct ddsi_config_psmx_listelem {
266
  struct ddsi_config_psmx_listelem *next;
267
  struct ddsi_config_psmx cfg;
268
};
269
270
/* Expensive checks (compiled in when NDEBUG not defined, enabled only if flag set in xchecks) */
271
#define DDSI_XCHECK_WHC 1u
272
#define DDSI_XCHECK_RHC 2u
273
#define DDSI_XCHECK_XEV 4u
274
275
/**
276
 * @brief Default-initialize a configuration (unstable)
277
 * @component config
278
 *
279
 * @param[out]  cfg The configuration struct to be initialized.
280
 */
281
DDS_EXPORT void ddsi_config_init_default (struct ddsi_config *cfg);
282
283
struct ddsi_config
284
{
285
  int valid;
286
  uint32_t tracemask;
287
  uint32_t enabled_xchecks;
288
  char *pcap_file;
289
290
  /* interfaces */
291
  struct ddsi_config_network_interface_listelem *network_interfaces;
292
  struct ddsi_config_psmx_listelem *psmx_instances;
293
294
  /* deprecated interface support */
295
  char *depr_networkAddressString;
296
  int depr_prefer_multicast;
297
  char *depr_assumeMulticastCapable;
298
299
  char **networkRecvAddressStrings;
300
  uint32_t allowMulticast;
301
  char *externalAddressString;
302
  char *externalMaskString;
303
  FILE *tracefp;
304
  char *tracefile;
305
  int tracingAppendToFile;
306
  enum ddsi_transport_selector transport_selector;
307
  enum ddsi_boolean_default compat_use_ipv6;
308
  enum ddsi_boolean_default compat_tcp_enable;
309
  int dontRoute;
310
  int enableMulticastLoopback;
311
  uint32_t domainId;
312
  struct ddsi_config_maybe_uint32 extDomainId; // domain id advertised in discovery
313
  char *domainTag;
314
  int participantIndex;
315
  int maxAutoParticipantIndex;
316
  char *spdpMulticastAddressString;
317
  char *defaultMulticastAddressString;
318
  struct ddsi_config_maybe_duration spdp_interval;
319
  int64_t spdp_response_delay_max;
320
  int64_t spdp_prune_delay_initial;
321
  int64_t spdp_prune_delay_discovered;
322
  int64_t lease_duration;
323
  int64_t const_hb_intv_sched;
324
  int64_t const_hb_intv_sched_min;
325
  int64_t const_hb_intv_sched_max;
326
  int64_t const_hb_intv_min;
327
  enum ddsi_retransmit_merging retransmit_merging;
328
  int64_t retransmit_merging_period;
329
  int squash_participants;
330
  int liveliness_monitoring;
331
  int noprogress_log_stacktraces;
332
  int64_t liveliness_monitoring_interval;
333
  int prioritize_retransmit;
334
  enum ddsi_boolean_default multiple_recv_threads;
335
  unsigned recv_thread_stop_maxretries;
336
337
  unsigned primary_reorder_maxsamples;
338
  unsigned secondary_reorder_maxsamples;
339
340
  unsigned delivery_queue_maxsamples;
341
342
  uint16_t fragment_size;
343
  uint32_t max_msg_size;
344
  uint32_t max_rexmit_msg_size;
345
  uint32_t init_transmit_extra_pct;
346
  uint32_t max_rexmit_burst_size;
347
  uint32_t max_frags_in_rexmit_of_sample;
348
349
  int publish_uc_locators; /* Publish discovery unicast locators */
350
  int enable_uc_locators; /* If false, don't even try to create a unicast socket */
351
352
#ifdef DDS_HAS_TOPIC_DISCOVERY
353
  int enable_topic_discovery_endpoints;
354
#endif
355
356
  /* TCP transport configuration */
357
  int tcp_nodelay;
358
  int tcp_port;
359
  int64_t tcp_read_timeout;
360
  int64_t tcp_write_timeout;
361
  int tcp_use_peeraddr_for_unicast;
362
363
#ifdef DDS_HAS_TCP_TLS
364
  /* SSL support for TCP */
365
  int ssl_enable;
366
  int ssl_verify;
367
  int ssl_verify_client;
368
  int ssl_self_signed;
369
  char * ssl_keystore;
370
  char * ssl_rand_file;
371
  char * ssl_key_pass;
372
  char * ssl_ciphers;
373
  struct ddsi_config_ssl_min_version ssl_min_version;
374
#endif
375
376
#ifdef DDS_HAS_NETWORK_PARTITIONS
377
  struct ddsi_config_networkpartition_listelem *networkPartitions;
378
  unsigned nof_networkPartitions;
379
  struct ddsi_config_ignoredpartition_listelem *ignoredPartitions;
380
  struct ddsi_config_partitionmapping_listelem *partitionMappings;
381
#endif /* DDS_HAS_NETWORK_PARTITIONS */
382
  enum ddsi_boolean_default add_localhost_to_peers;
383
  struct ddsi_config_peer_listelem *peers;
384
  struct ddsi_config_thread_properties_listelem *thread_properties;
385
386
  /* debug/test/undoc features: */
387
  int xmit_lossiness;           /**<< fraction of packets to drop on xmit, in units of 1e-3 */
388
  uint32_t rmsg_chunk_size;          /**<< size of a chunk in the receive buffer */
389
  uint32_t rbuf_size;                /* << size of a single receiver buffer */
390
  enum ddsi_besmode besmode;
391
  int meas_hb_to_ack_latency;
392
  int synchronous_delivery_priority_threshold;
393
  int64_t synchronous_delivery_latency_bound;
394
395
  /* Write cache */
396
397
  int whc_batch;
398
  uint32_t whc_lowwater_mark;
399
  uint32_t whc_highwater_mark;
400
  struct ddsi_config_maybe_uint32 whc_init_highwater_mark;
401
  int whc_adaptive;
402
403
  unsigned defrag_unreliable_maxsamples;
404
  unsigned defrag_reliable_maxsamples;
405
  unsigned accelerate_rexmit_block_size;
406
  int64_t responsiveness_timeout;
407
  uint32_t max_participants;
408
  int64_t writer_linger_duration;
409
  int multicast_ttl;
410
  struct ddsi_config_socket_buf_size socket_rcvbuf_size;
411
  struct ddsi_config_socket_buf_size socket_sndbuf_size;
412
  int64_t ack_delay;
413
  int64_t nack_delay;
414
  int64_t preemptive_ack_delay;
415
  int64_t auto_resched_nack_delay;
416
  int64_t ds_grace_period;
417
  uint32_t max_queued_rexmit_bytes;
418
  unsigned max_queued_rexmit_msgs;
419
  int late_ack_mode;
420
  int retry_on_reject_besteffort;
421
  int generate_keyhash;
422
  uint32_t max_sample_size;
423
  enum ddsi_boolean_default extended_packet_info;
424
425
  /* compability options */
426
  enum ddsi_standards_conformance standards_conformance;
427
  int explicitly_publish_qos_set_to_default;
428
  enum ddsi_many_sockets_mode many_sockets_mode;
429
  int assume_rti_has_pmd_endpoints;
430
  ddsi_protocol_version_t protocol_version;
431
  int allow_invalid_try_construct;
432
  uint32_t ignore_type_information; // bitmask, vendor id 1.N maps to 1<<(N-1)
433
434
  struct ddsi_portmapping ports;
435
436
  int monitor_port;
437
438
  int enable_control_topic;
439
  int initial_deaf;
440
  int initial_mute;
441
  int64_t initial_deaf_mute_reset;
442
443
  int use_multicast_if_mreqn;
444
  struct ddsi_config_prune_deleted_ppant prune_deleted_ppant;
445
  int redundant_networking;
446
  struct ddsi_addrset_costs addrset_costs;
447
448
#ifdef DDS_HAS_SECURITY
449
  struct ddsi_config_omg_security_listelem *omg_security_configuration;
450
#endif
451
452
  /* deprecated shm options */
453
  int enable_shm;
454
  char *shm_locator;
455
  char *iceoryx_service;
456
  enum ddsi_shm_loglevel shm_log_lvl;
457
458
  enum ddsi_config_entity_naming_mode entity_naming_mode;
459
  ddsrt_prng_seed_t entity_naming_seed;
460
461
#if defined (__cplusplus)
462
public:
463
0
  ddsi_config() {
464
0
    ddsi_config_init_default (this);
465
0
  }
466
#endif
467
};
468
469
/** @component config */
470
struct ddsi_cfgst *ddsi_config_init (const char *config, struct ddsi_config *cfg, uint32_t domid) ddsrt_nonnull((1,2));
471
472
/** @component config */
473
DDS_EXPORT void ddsi_config_fini (struct ddsi_cfgst *cfgst);
474
475
#if defined (__cplusplus)
476
}
477
#endif
478
479
#endif /* DDSI_CONFIG_H */