Support multiple domains in configuration
Change the structure of the configuration file (in a backwards compatible manner) to allow specifying configurations for multiple domains in a file. (Listing multiple files in CYCLONEDDS_URI was already supported.) A configuration specifies an id, with a default of any, configurations for an incompatible id are ignored. If the application specifies an id other than DDS_DOMAIN_DEFAULT in the call to create_participant, then only configuration specifications for Domain elements with that id or with id "any" will be used. If the application does specify DDS_DOMAIN_DEFAULT, then the id will be taken from the first Domain element that specifies an id. If none do, the domain id defaults to 0. Each applicable domain specification is taken as a separate source and may override settings made previously. All settings moved from the top-level CycloneDDS element to the CycloneDDS/Domain element. The CycloneDDS/Domain/Id element moved to become the "id" attribute of CycloneDDS/Domain. The old locations still work, with appropriate deprecation warnings. Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
parent
70a342991f
commit
891fc2b12f
27 changed files with 1161 additions and 711 deletions
|
@ -45,11 +45,32 @@ static dds_return_t dds_domain_init (dds_domain *domain, dds_domainid_t domain_i
|
|||
char * uri = NULL;
|
||||
uint32_t len;
|
||||
|
||||
domain->m_id = domain_id;
|
||||
domain->gv.tstart = now ();
|
||||
domain->m_refc = 1;
|
||||
ddsrt_avl_init (&dds_topictree_def, &domain->m_topics);
|
||||
|
||||
domain->gv.tstart = now ();
|
||||
/* | domain_id | domain id in config | result
|
||||
+-----------+---------------------+----------
|
||||
| DEFAULT | any (or absent) | 0
|
||||
| DEFAULT | n | n
|
||||
| n | any (or absent) | n
|
||||
| n | m = n | n
|
||||
| n | m /= n | n, entire config ignored
|
||||
|
||||
Config models:
|
||||
1: <CycloneDDS>
|
||||
<Domain id="X">...</Domain>
|
||||
<Domain .../>
|
||||
</CycloneDDS>
|
||||
where ... is all that can today be set in children of CycloneDDS
|
||||
with the exception of the id
|
||||
2: <CycloneDDS>
|
||||
<Domain><Id>X</Id></Domain>
|
||||
...
|
||||
</CycloneDDS>
|
||||
legacy form, domain id must be the first element in the file with
|
||||
a value (if nothing has been set previously, it a warning is good
|
||||
enough) */
|
||||
|
||||
(void) ddsrt_getenv ("CYCLONEDDS_URI", &uri);
|
||||
domain->cfgst = config_init (uri, &domain->gv.config, domain_id);
|
||||
|
@ -60,30 +81,8 @@ static dds_return_t dds_domain_init (dds_domain *domain, dds_domainid_t domain_i
|
|||
goto fail_config;
|
||||
}
|
||||
|
||||
/* if a domain id was explicitly given, check & fix up the configuration */
|
||||
if (domain_id != DDS_DOMAIN_DEFAULT)
|
||||
{
|
||||
if (domain_id > 230)
|
||||
{
|
||||
DDS_ILOG (DDS_LC_ERROR, domain_id, "requested domain id %"PRIu32" is out of range\n", domain_id);
|
||||
ret = DDS_RETCODE_ERROR;
|
||||
goto fail_config_domainid;
|
||||
}
|
||||
else if (domain->gv.config.domainId.isdefault)
|
||||
{
|
||||
domain->gv.config.domainId.value = domain_id;
|
||||
}
|
||||
else if (domain_id != domain->gv.config.domainId.value)
|
||||
{
|
||||
DDS_ILOG (DDS_LC_ERROR, domain_id, "requested domain id %"PRIu32" is inconsistent with configured value %"PRIu32"\n", domain_id, domain->gv.config.domainId.value);
|
||||
ret = DDS_RETCODE_ERROR;
|
||||
goto fail_config_domainid;
|
||||
}
|
||||
}
|
||||
|
||||
/* FIXME: The gv.config.domainId can change internally in DDSI. So, remember what the
|
||||
* main configured domain id is. */
|
||||
domain->m_id = domain->gv.config.domainId.value;
|
||||
assert (domain_id == DDS_DOMAIN_DEFAULT || domain_id == domain->gv.config.domainId);
|
||||
domain->m_id = domain->gv.config.domainId;
|
||||
|
||||
if (rtps_config_prep (&domain->gv, domain->cfgst) != 0)
|
||||
{
|
||||
|
@ -146,7 +145,7 @@ static dds_return_t dds_domain_init (dds_domain *domain, dds_domainid_t domain_i
|
|||
|
||||
if (rtps_start (&domain->gv) < 0)
|
||||
{
|
||||
DDS_LOG (DDS_LC_CONFIG, "Failed to start RTPS\n");
|
||||
DDS_ILOG (DDS_LC_CONFIG, domain->m_id, "Failed to start RTPS\n");
|
||||
ret = DDS_RETCODE_ERROR;
|
||||
goto fail_rtps_start;
|
||||
}
|
||||
|
@ -169,7 +168,6 @@ fail_threadmon_new:
|
|||
rtps_fini (&domain->gv);
|
||||
fail_rtps_init:
|
||||
fail_rtps_config:
|
||||
fail_config_domainid:
|
||||
config_fini (domain->cfgst);
|
||||
fail_config:
|
||||
return ret;
|
||||
|
|
|
@ -13,24 +13,23 @@
|
|||
<CycloneDDS>
|
||||
<!-- Simple config-file for testing whether a config-file can be picked up
|
||||
correctly. -->
|
||||
<Domain>
|
||||
<Id>3</Id>
|
||||
<Domain id="3">
|
||||
<General>
|
||||
<NetworkInterfaceAddress>127.0.0.1</NetworkInterfaceAddress>
|
||||
<AllowMulticast>true</AllowMulticast>
|
||||
<EnableMulticastLoopback>true</EnableMulticastLoopback>
|
||||
</General>
|
||||
<Compatibility>
|
||||
<StandardsConformance>lax</StandardsConformance>
|
||||
</Compatibility>
|
||||
<Tracing>
|
||||
<Verbosity>warning</Verbosity>
|
||||
<OutputFile>vortexdds-<![CDATA[trace]]>.${NON_EXISTENT_ENV_VARIABLE:-l}${CYCLONEDDS_URI:+o}g </OutputFile>
|
||||
</Tracing>
|
||||
<Internal>
|
||||
<MaxParticipants>${MAX_PARTICIPANTS}</MaxParticipants>
|
||||
<HeartbeatInterval max="10 s"> 100 ms </HeartbeatInterval>
|
||||
<RediscoveryBlacklistDuration></RediscoveryBlacklistDuration>
|
||||
</Internal>
|
||||
</Domain>
|
||||
<General>
|
||||
<NetworkInterfaceAddress>127.0.0.1</NetworkInterfaceAddress>
|
||||
<AllowMulticast>true</AllowMulticast>
|
||||
<EnableMulticastLoopback>true</EnableMulticastLoopback>
|
||||
</General>
|
||||
<Compatibility>
|
||||
<StandardsConformance>lax</StandardsConformance>
|
||||
</Compatibility>
|
||||
<Tracing>
|
||||
<Verbosity>warning</Verbosity>
|
||||
<OutputFile>vortexdds-<![CDATA[trace]]>.${NON_EXISTENT_ENV_VARIABLE:-l}${CYCLONEDDS_URI:+o}g </OutputFile>
|
||||
</Tracing>
|
||||
<Internal>
|
||||
<MaxParticipants>${MAX_PARTICIPANTS}</MaxParticipants>
|
||||
<HeartbeatInterval max="10 s"> 100 ms </HeartbeatInterval>
|
||||
<RediscoveryBlacklistDuration></RediscoveryBlacklistDuration>
|
||||
</Internal>
|
||||
</CycloneDDS>
|
||||
|
|
|
@ -102,7 +102,7 @@ CU_Test(ddsc_participant, create_multiple_domains)
|
|||
|
||||
/* Test for creating participant with valid configuration file */
|
||||
CU_Test(ddsc_participant, create_with_conf_no_env) {
|
||||
dds_entity_t participant, participant2, participant3;
|
||||
dds_entity_t participant2, participant3;
|
||||
dds_return_t status;
|
||||
dds_domainid_t domain_id;
|
||||
dds_domainid_t valid_domain=3;
|
||||
|
@ -114,10 +114,6 @@ CU_Test(ddsc_participant, create_with_conf_no_env) {
|
|||
ddsrt_getenv(DDS_PROJECT_NAME_NOSPACE_CAPS"_URI", &env_uri);
|
||||
CU_ASSERT_PTR_NOT_EQUAL_FATAL(env_uri, NULL);
|
||||
|
||||
//invalid domain
|
||||
participant = dds_create_participant (1, NULL, NULL);
|
||||
CU_ASSERT_FATAL(participant < 0);
|
||||
|
||||
//valid specific domain value
|
||||
participant2 = dds_create_participant (valid_domain, NULL, NULL);
|
||||
CU_ASSERT_FATAL(participant2 > 0);
|
||||
|
|
|
@ -224,7 +224,7 @@ struct ssl_min_version {
|
|||
struct config
|
||||
{
|
||||
int valid;
|
||||
uint32_t enabled_logcats;
|
||||
uint32_t tracemask;
|
||||
uint32_t enabled_xchecks;
|
||||
char *servicename;
|
||||
char *pcap_file;
|
||||
|
@ -233,8 +233,8 @@ struct config
|
|||
char **networkRecvAddressStrings;
|
||||
char *externalAddressString;
|
||||
char *externalMaskString;
|
||||
FILE *tracingOutputFile;
|
||||
char *tracingOutputFileName;
|
||||
FILE *tracefp;
|
||||
char *tracefile;
|
||||
int tracingTimestamps;
|
||||
int tracingAppendToFile;
|
||||
uint32_t allowMulticast;
|
||||
|
@ -244,7 +244,7 @@ struct config
|
|||
enum boolean_default compat_tcp_enable;
|
||||
int dontRoute;
|
||||
int enableMulticastLoopback;
|
||||
struct config_maybe_uint32 domainId;
|
||||
uint32_t domainId;
|
||||
int participantIndex;
|
||||
int maxAutoParticipantIndex;
|
||||
uint32_t port_base;
|
||||
|
|
|
@ -76,7 +76,7 @@ typedef int64_t seqno_t;
|
|||
struct cfgst;
|
||||
struct q_globals;
|
||||
int rtps_config_prep (struct q_globals *config, struct cfgst *cfgst);
|
||||
int rtps_config_open (struct q_globals *config);
|
||||
int rtps_config_open_trace (struct q_globals *config);
|
||||
int rtps_init (struct q_globals *config);
|
||||
int rtps_start (struct q_globals *config);
|
||||
void rtps_stop (struct q_globals *config);
|
||||
|
|
|
@ -105,7 +105,7 @@ static int add_addresses_to_addrset_1 (const struct q_globals *gv, struct addrse
|
|||
assert (gv->config.maxAutoParticipantIndex >= 0);
|
||||
for (uint32_t i = 0; i <= (uint32_t) gv->config.maxAutoParticipantIndex; i++)
|
||||
{
|
||||
uint32_t port = gv->config.port_base + gv->config.port_dg * gv->config.domainId.value + i * gv->config.port_pg + gv->config.port_d1;
|
||||
uint32_t port = gv->config.port_base + gv->config.port_dg * gv->config.domainId + i * gv->config.port_pg + gv->config.port_d1;
|
||||
loc.port = (unsigned) port;
|
||||
if (i == 0)
|
||||
GVLOG (DDS_LC_CONFIG, "%s", ddsi_locator_to_string(gv, buf, sizeof(buf), &loc));
|
||||
|
@ -118,7 +118,7 @@ static int add_addresses_to_addrset_1 (const struct q_globals *gv, struct addrse
|
|||
{
|
||||
uint32_t port;
|
||||
if (port_mode == -1)
|
||||
port = gv->config.port_base + gv->config.port_dg * gv->config.domainId.value + gv->config.port_d0;
|
||||
port = gv->config.port_base + gv->config.port_dg * gv->config.domainId + gv->config.port_d0;
|
||||
else
|
||||
port = (uint32_t) port_mode;
|
||||
loc.port = (unsigned) port;
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -76,7 +76,7 @@ static int make_uc_sockets (struct q_globals *gv, uint32_t * pdisc, uint32_t * p
|
|||
if (gv->config.many_sockets_mode == MSM_NO_UNICAST)
|
||||
{
|
||||
assert (ppid == PARTICIPANT_INDEX_NONE);
|
||||
*pdata = *pdisc = (uint32_t) (gv->config.port_base + gv->config.port_dg * gv->config.domainId.value);
|
||||
*pdata = *pdisc = (uint32_t) (gv->config.port_base + gv->config.port_dg * gv->config.domainId);
|
||||
if (gv->config.allowMulticast)
|
||||
{
|
||||
/* FIXME: ugly hack - but we'll fix up after creating the multicast sockets */
|
||||
|
@ -87,7 +87,7 @@ static int make_uc_sockets (struct q_globals *gv, uint32_t * pdisc, uint32_t * p
|
|||
if (ppid >= 0)
|
||||
{
|
||||
/* FIXME: verify port numbers are in range instead of truncating them like this */
|
||||
uint32_t base = gv->config.port_base + (gv->config.port_dg * gv->config.domainId.value) + ((uint32_t) ppid * gv->config.port_pg);
|
||||
uint32_t base = gv->config.port_base + (gv->config.port_dg * gv->config.domainId) + ((uint32_t) ppid * gv->config.port_pg);
|
||||
*pdisc = base + gv->config.port_d1;
|
||||
*pdata = base + gv->config.port_d3;
|
||||
}
|
||||
|
@ -286,7 +286,7 @@ static int string_to_default_locator (const struct q_globals *gv, nn_locator_t *
|
|||
|
||||
static int set_spdp_address (struct q_globals *gv)
|
||||
{
|
||||
const uint32_t port = (uint32_t) (gv->config.port_base + gv->config.port_dg * gv->config.domainId.value + gv->config.port_d0);
|
||||
const uint32_t port = (uint32_t) (gv->config.port_base + gv->config.port_dg * gv->config.domainId + gv->config.port_d0);
|
||||
int rc = 0;
|
||||
/* FIXME: FIXME: FIXME: */
|
||||
gv->loc_spdp_mc.kind = NN_LOCATOR_KIND_INVALID;
|
||||
|
@ -318,7 +318,7 @@ static int set_spdp_address (struct q_globals *gv)
|
|||
|
||||
static int set_default_mc_address (struct q_globals *gv)
|
||||
{
|
||||
const uint32_t port = (uint32_t) (gv->config.port_base + gv->config.port_dg * gv->config.domainId.value + gv->config.port_d2);
|
||||
const uint32_t port = (uint32_t) (gv->config.port_base + gv->config.port_dg * gv->config.domainId + gv->config.port_d2);
|
||||
int rc;
|
||||
if (!gv->config.defaultMulticastAddressString)
|
||||
gv->loc_default_mc = gv->loc_spdp_mc;
|
||||
|
@ -404,11 +404,11 @@ static int check_thread_properties (const struct q_globals *gv)
|
|||
}
|
||||
if (chanprefix[i] == NULL)
|
||||
{
|
||||
DDS_ILOG (DDS_LC_ERROR, gv->config.domainId.value, "config: DDSI2Service/Threads/Thread[@name=\"%s\"]: unknown thread\n", e->name);
|
||||
DDS_ILOG (DDS_LC_ERROR, gv->config.domainId, "config: DDSI2Service/Threads/Thread[@name=\"%s\"]: unknown thread\n", e->name);
|
||||
ok = 0;
|
||||
}
|
||||
#else
|
||||
DDS_ILOG (DDS_LC_ERROR, gv->config.domainId.value, "config: DDSI2Service/Threads/Thread[@name=\"%s\"]: unknown thread\n", e->name);
|
||||
DDS_ILOG (DDS_LC_ERROR, gv->config.domainId, "config: DDSI2Service/Threads/Thread[@name=\"%s\"]: unknown thread\n", e->name);
|
||||
ok = 0;
|
||||
#endif /* DDSI_INCLUDE_NETWORK_CHANNELS */
|
||||
}
|
||||
|
@ -416,30 +416,30 @@ static int check_thread_properties (const struct q_globals *gv)
|
|||
return ok;
|
||||
}
|
||||
|
||||
int rtps_config_open (struct q_globals *gv)
|
||||
int rtps_config_open_trace (struct q_globals *gv)
|
||||
{
|
||||
DDSRT_WARNING_MSVC_OFF(4996);
|
||||
int status;
|
||||
|
||||
if (gv->config.tracingOutputFileName == NULL || *gv->config.tracingOutputFileName == 0 || gv->config.enabled_logcats == 0)
|
||||
if (gv->config.tracefile == NULL || *gv->config.tracefile == 0 || gv->config.tracemask == 0)
|
||||
{
|
||||
gv->config.enabled_logcats = 0;
|
||||
gv->config.tracingOutputFile = NULL;
|
||||
gv->config.tracemask = 0;
|
||||
gv->config.tracefp = NULL;
|
||||
status = 1;
|
||||
}
|
||||
else if (ddsrt_strcasecmp (gv->config.tracingOutputFileName, "stdout") == 0)
|
||||
else if (ddsrt_strcasecmp (gv->config.tracefile, "stdout") == 0)
|
||||
{
|
||||
gv->config.tracingOutputFile = stdout;
|
||||
gv->config.tracefp = stdout;
|
||||
status = 1;
|
||||
}
|
||||
else if (ddsrt_strcasecmp (gv->config.tracingOutputFileName, "stderr") == 0)
|
||||
else if (ddsrt_strcasecmp (gv->config.tracefile, "stderr") == 0)
|
||||
{
|
||||
gv->config.tracingOutputFile = stderr;
|
||||
gv->config.tracefp = stderr;
|
||||
status = 1;
|
||||
}
|
||||
else if ((gv->config.tracingOutputFile = fopen (gv->config.tracingOutputFileName, gv->config.tracingAppendToFile ? "a" : "w")) == NULL)
|
||||
else if ((gv->config.tracefp = fopen (gv->config.tracefile, gv->config.tracingAppendToFile ? "a" : "w")) == NULL)
|
||||
{
|
||||
DDS_ILOG (DDS_LC_ERROR, gv->config.domainId.value, "%s: cannot open for writing\n", gv->config.tracingOutputFileName);
|
||||
DDS_ILOG (DDS_LC_ERROR, gv->config.domainId, "%s: cannot open for writing\n", gv->config.tracefile);
|
||||
status = 0;
|
||||
}
|
||||
else
|
||||
|
@ -447,7 +447,7 @@ int rtps_config_open (struct q_globals *gv)
|
|||
status = 1;
|
||||
}
|
||||
|
||||
dds_log_cfg_init (&gv->logconfig, gv->config.domainId.value, gv->config.enabled_logcats, stderr, gv->config.tracingOutputFile);
|
||||
dds_log_cfg_init (&gv->logconfig, gv->config.domainId, gv->config.tracemask, stderr, gv->config.tracefp);
|
||||
return status;
|
||||
DDSRT_WARNING_MSVC_ON(4996);
|
||||
}
|
||||
|
@ -466,7 +466,7 @@ int rtps_config_prep (struct q_globals *gv, struct cfgst *cfgst)
|
|||
gv->config.whc_init_highwater_mark.value < gv->config.whc_lowwater_mark ||
|
||||
gv->config.whc_init_highwater_mark.value > gv->config.whc_highwater_mark)
|
||||
{
|
||||
DDS_ILOG (DDS_LC_ERROR, gv->config.domainId.value, "Invalid watermark settings\n");
|
||||
DDS_ILOG (DDS_LC_ERROR, gv->config.domainId, "Invalid watermark settings\n");
|
||||
goto err_config_late_error;
|
||||
}
|
||||
|
||||
|
@ -478,7 +478,7 @@ int rtps_config_prep (struct q_globals *gv, struct cfgst *cfgst)
|
|||
inherited by readers/writers), but in many sockets mode each
|
||||
participant has its own socket, and therefore unique address
|
||||
set */
|
||||
DDS_ILOG (DDS_LC_ERROR, gv->config.domainId.value, "Minimal built-in endpoint set mode and ManySocketsMode are incompatible\n");
|
||||
DDS_ILOG (DDS_LC_ERROR, gv->config.domainId, "Minimal built-in endpoint set mode and ManySocketsMode are incompatible\n");
|
||||
goto err_config_late_error;
|
||||
}
|
||||
|
||||
|
@ -554,8 +554,8 @@ int rtps_config_prep (struct q_globals *gv, struct cfgst *cfgst)
|
|||
}
|
||||
#endif /* DDSI_INCLUDE_NETWORK_CHANNELS */
|
||||
|
||||
/* Open tracing file after all possible gv->config errors have been printed */
|
||||
if (! rtps_config_open (gv))
|
||||
/* Open tracing file after all possible config errors have been printed */
|
||||
if (! rtps_config_open_trace (gv))
|
||||
{
|
||||
goto err_config_late_error;
|
||||
}
|
||||
|
@ -633,7 +633,7 @@ int joinleave_spdp_defmcip (struct q_globals *gv, int dojoin)
|
|||
unref_addrset (as);
|
||||
if (arg.errcount)
|
||||
{
|
||||
GVERROR ("rtps_init: failed to join multicast groups for domain %"PRIu32" participant %d\n", gv->config.domainId.value, gv->config.participantIndex);
|
||||
GVERROR ("rtps_init: failed to join multicast groups for domain %"PRIu32" participant %d\n", gv->config.domainId, gv->config.participantIndex);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
|
@ -647,7 +647,7 @@ int create_multicast_sockets (struct q_globals *gv)
|
|||
qos->m_multicast = 1;
|
||||
|
||||
/* FIXME: should check for overflow */
|
||||
port = (uint32_t) (gv->config.port_base + gv->config.port_dg * gv->config.domainId.value + gv->config.port_d0);
|
||||
port = (uint32_t) (gv->config.port_base + gv->config.port_dg * gv->config.domainId + gv->config.port_d0);
|
||||
if ((disc = ddsi_factory_create_conn (gv->m_factory, port, qos)) == NULL)
|
||||
goto err_disc;
|
||||
if (gv->config.many_sockets_mode == MSM_NO_UNICAST)
|
||||
|
@ -657,7 +657,7 @@ int create_multicast_sockets (struct q_globals *gv)
|
|||
}
|
||||
else
|
||||
{
|
||||
port = (uint32_t) (gv->config.port_base + gv->config.port_dg * gv->config.domainId.value + gv->config.port_d2);
|
||||
port = (uint32_t) (gv->config.port_base + gv->config.port_dg * gv->config.domainId + gv->config.port_d2);
|
||||
if ((data = ddsi_factory_create_conn (gv->m_factory, port, qos)) == NULL)
|
||||
goto err_data;
|
||||
}
|
||||
|
@ -984,7 +984,7 @@ int rtps_init (struct q_globals *gv)
|
|||
#ifdef DDSI_INCLUDE_NETWORK_PARTITIONS
|
||||
/* Convert address sets in partition mappings from string to address sets */
|
||||
{
|
||||
const uint32_t port = gv->config.port_base + gv->config.port_dg * gv->config.domainId.value + gv->config.port_d2;
|
||||
const uint32_t port = gv->config.port_base + gv->config.port_dg * gv->config.domainId + gv->config.port_d2;
|
||||
struct config_networkpartition_listelem *np;
|
||||
for (np = gv->config.networkPartitions; np; np = np->next)
|
||||
{
|
||||
|
@ -1056,7 +1056,7 @@ int rtps_init (struct q_globals *gv)
|
|||
{
|
||||
if (make_uc_sockets (gv, &port_disc_uc, &port_data_uc, gv->config.participantIndex) < 0)
|
||||
{
|
||||
GVERROR ("rtps_init: failed to create unicast sockets for domain %"PRId32" participant %d\n", gv->config.domainId.value, gv->config.participantIndex);
|
||||
GVERROR ("rtps_init: failed to create unicast sockets for domain %"PRId32" participant %d\n", gv->config.domainId, gv->config.participantIndex);
|
||||
goto err_unicast_sockets;
|
||||
}
|
||||
}
|
||||
|
@ -1074,13 +1074,13 @@ int rtps_init (struct q_globals *gv)
|
|||
continue;
|
||||
else /* Oops! */
|
||||
{
|
||||
GVERROR ("rtps_init: failed to create unicast sockets for domain %"PRId32" participant %d\n", gv->config.domainId.value, ppid);
|
||||
GVERROR ("rtps_init: failed to create unicast sockets for domain %"PRId32" participant %d\n", gv->config.domainId, ppid);
|
||||
goto err_unicast_sockets;
|
||||
}
|
||||
}
|
||||
if (ppid > gv->config.maxAutoParticipantIndex)
|
||||
{
|
||||
GVERROR ("rtps_init: failed to find a free participant index for domain %"PRId32"\n", gv->config.domainId.value);
|
||||
GVERROR ("rtps_init: failed to find a free participant index for domain %"PRId32"\n", gv->config.domainId);
|
||||
goto err_unicast_sockets;
|
||||
}
|
||||
gv->config.participantIndex = ppid;
|
||||
|
@ -1091,7 +1091,7 @@ int rtps_init (struct q_globals *gv)
|
|||
}
|
||||
GVLOG (DDS_LC_CONFIG, "rtps_init: uc ports: disc %"PRIu32" data %"PRIu32"\n", port_disc_uc, port_data_uc);
|
||||
}
|
||||
GVLOG (DDS_LC_CONFIG, "rtps_init: domainid %"PRId32" participantid %d\n", gv->config.domainId.value, gv->config.participantIndex);
|
||||
GVLOG (DDS_LC_CONFIG, "rtps_init: domainid %"PRId32" participantid %d\n", gv->config.domainId, gv->config.participantIndex);
|
||||
|
||||
if (gv->config.pcap_file && *gv->config.pcap_file)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue