Hi. I have a question regarding the potential ability to isolate datawriters and readers on a local network. I work in an environment where the pplication we develop uses 4 constant domain ids. However, all the computers in our lab are on a local network. If someone runs the application on one computer, every other computer is also getting that same DDS traffic. Is there any way to isolate each computer, besides changing the domain id, through perhaps the QoS settings?
Are you just trying to run every application on a single computer and don't want that application to connect to anything off the computer on a physical network?
If so, you can just prevent the applications from using the UDPv4 transport by setting the Participant QoS, builtin_transport, mask to shmem
<participant_qos>
<transport_builtin>
<mask>SHMEM</mask>
</transport_builtin>
</participant_qos>
alternatively, you may also want to disable the discovery over udp using
<participant_qos>
<discovery>
<accept_unknown_peers>false</accept_unknown_peers>
</discovery>
<initial_peers>
<element> 10@127.0.0.1 </element>
<element> 10@shmem:// </element>
</initial_peers>
</participant_qos>
My goal was to ensure that other people on the same network can use the same domain IDs and not see other's DDS traffic. Would your solution work?
Do the applications that each person runs using DDS all run on their own machine? Or do the applications that a single person runs have to communicate across a network and/or may run on a host that other people are also using for their applications?
If it's the first (all apps for a single person runs on a single machine), then yes, the solution I outlined should work.
If the applications that people run must communicate over the network and/or are running on shared hosts, then no, the solution would not work. In that case, each person should run their applications in a different DDS domain. That's one of the primary use cases for having different DDS domains.
Each application is running on its own machine. For example, I'll run it to test something, but then I'll get traffic from someone else on the network becuase they decided to run it as well and didn't know I was running it. The application has uses a set of four domains that don't change.
Unfortunately, if your DDS applications all share the same machines and same network, then they will automatically communicate with each other. That's how DDS works.
The applications should be programmed to accept a domain ID for runtime configuration if you want the applications to use different domains depending on who is running them.
However, you could try to use the concept of a Domain Tag to group applications together in the same domain.
Please look at this documentation about Domain Tags. It has been supported since RTI Connext 6.0.
https://community.rti.com/static/documentation/connext-dds/7.1.0/doc/manuals/connext_dds_professional/users_manual/users_manual/Creating_ParticipantPartitions.htm