No extra transmit socket in MSM_NO_UNICAST mode
Reuse unicast data socket in MSM_NO_UNICAST, just like it did in all
modes before the extra socket was introduced in
d1ed8df9f3
. This restores support for the
"raw ethernet" transport on Linux by no longer requiring the transport
to create a socket with an arbitrary "port".
Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
parent
f33867e884
commit
bffe386f2d
1 changed files with 22 additions and 21 deletions
|
@ -1010,6 +1010,22 @@ void ddsi_set_deafmute (struct ddsi_domaingv *gv, bool deaf, bool mute, int64_t
|
||||||
GVLOGDISC ("\n");
|
GVLOGDISC ("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void free_conns (struct ddsi_domaingv *gv)
|
||||||
|
{
|
||||||
|
// Depending on settings, various "conn"s can alias others, this makes sure we free each one only once
|
||||||
|
// FIXME: perhaps store them in a table instead?
|
||||||
|
ddsi_tran_conn_t cs[] = { gv->xmit_conn, gv->disc_conn_mc, gv->data_conn_mc, gv->disc_conn_uc, gv->data_conn_uc };
|
||||||
|
for (size_t i = 0; i < sizeof (cs) / sizeof (cs[0]); i++)
|
||||||
|
{
|
||||||
|
if (cs[i] == NULL)
|
||||||
|
continue;
|
||||||
|
for (size_t j = i + 1; j < sizeof (cs) / sizeof (cs[0]); j++)
|
||||||
|
if (cs[i] == cs[j])
|
||||||
|
cs[j] = NULL;
|
||||||
|
ddsi_conn_free (cs[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int rtps_init (struct ddsi_domaingv *gv)
|
int rtps_init (struct ddsi_domaingv *gv)
|
||||||
{
|
{
|
||||||
uint32_t port_disc_uc = 0;
|
uint32_t port_disc_uc = 0;
|
||||||
|
@ -1390,7 +1406,10 @@ int rtps_init (struct ddsi_domaingv *gv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create shared transmit connection */
|
/* Create shared transmit connection -- FIXME: no longer needed, but can't do the testing right now */
|
||||||
|
if (gv->config.many_sockets_mode == MSM_NO_UNICAST)
|
||||||
|
gv->xmit_conn = gv->data_conn_uc;
|
||||||
|
else
|
||||||
{
|
{
|
||||||
const ddsi_tran_qos_t qos = { .m_purpose = DDSI_TRAN_QOS_XMIT, .m_diffserv = 0 };
|
const ddsi_tran_qos_t qos = { .m_purpose = DDSI_TRAN_QOS_XMIT, .m_diffserv = 0 };
|
||||||
dds_return_t rc;
|
dds_return_t rc;
|
||||||
|
@ -1534,18 +1553,9 @@ err_post_omg_security_init:
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
err_mc_conn:
|
err_mc_conn:
|
||||||
if (gv->xmit_conn)
|
free_conns (gv);
|
||||||
ddsi_conn_free (gv->xmit_conn);
|
|
||||||
if (gv->disc_conn_mc)
|
|
||||||
ddsi_conn_free (gv->disc_conn_mc);
|
|
||||||
if (gv->data_conn_mc && gv->data_conn_mc != gv->disc_conn_mc)
|
|
||||||
ddsi_conn_free (gv->data_conn_mc);
|
|
||||||
if (gv->pcap_fp)
|
if (gv->pcap_fp)
|
||||||
ddsrt_mutex_destroy (&gv->pcap_lock);
|
ddsrt_mutex_destroy (&gv->pcap_lock);
|
||||||
if (gv->disc_conn_uc != gv->disc_conn_mc)
|
|
||||||
ddsi_conn_free (gv->disc_conn_uc);
|
|
||||||
if (gv->data_conn_uc != gv->disc_conn_uc)
|
|
||||||
ddsi_conn_free (gv->data_conn_uc);
|
|
||||||
free_group_membership (gv->mship);
|
free_group_membership (gv->mship);
|
||||||
err_unicast_sockets:
|
err_unicast_sockets:
|
||||||
ddsi_tkmap_free (gv->m_tkmap);
|
ddsi_tkmap_free (gv->m_tkmap);
|
||||||
|
@ -1876,16 +1886,7 @@ void rtps_fini (struct ddsi_domaingv *gv)
|
||||||
ddsrt_thread_pool_free (gv->thread_pool);
|
ddsrt_thread_pool_free (gv->thread_pool);
|
||||||
|
|
||||||
(void) joinleave_spdp_defmcip (gv, 0);
|
(void) joinleave_spdp_defmcip (gv, 0);
|
||||||
|
free_conns (gv);
|
||||||
ddsi_conn_free (gv->xmit_conn);
|
|
||||||
ddsi_conn_free (gv->disc_conn_mc);
|
|
||||||
if (gv->data_conn_mc != gv->disc_conn_mc)
|
|
||||||
ddsi_conn_free (gv->data_conn_mc);
|
|
||||||
if (gv->disc_conn_uc != gv->disc_conn_mc)
|
|
||||||
ddsi_conn_free (gv->disc_conn_uc);
|
|
||||||
if (gv->data_conn_uc != gv->disc_conn_uc)
|
|
||||||
ddsi_conn_free (gv->data_conn_uc);
|
|
||||||
|
|
||||||
free_group_membership(gv->mship);
|
free_group_membership(gv->mship);
|
||||||
ddsi_tran_factories_fini (gv);
|
ddsi_tran_factories_fini (gv);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue