-
Notifications
You must be signed in to change notification settings - Fork 66
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Example of nodes on different network #195
Comments
How far away? Built-in Discovery should automatically connect to nodes within the same LAN (same broadcast domain). The major problem in connecting to nodes outside the local LAN is Discovery, i.e. how the participants (nodes) find out about the existence of other participants and their Readers and Writers. One way to accomplish this is to set up some kind of DDS-level router that will forward at least Discovery traffic across networks. Some DDS vendors have software products that do exactly this. Another solution would be to bridge two distant networks into one by some VPN-type solution so that UDP multicast works across the bridge. Yet another solution would be to forget automatic Discovery and manually configure the equivalent information to each participant. RustDDS currently has no API to supply Discovery data from the application, but that should not be very hard to implement. When going over a public network, keep in mind that basic DDS has just about zero security in terms of e.g. cryptography or authentication. |
First of, thank you for the explanation. This makes a ton of sense. |
Hey @jhelovuo , I found this old issue and wondering if this was ever implemented. I'm very interested in your guidance! |
Remote Participant discovery by other means than the automatic Discovery in the RTPS spec 2.5 (i.e. the SPDP and SEDP protocols) is still not implemented. If it were, then there would be an application-accessible API to interact with Discovery. Your overlay tunnel (whatever that is) is likely not used automatically, because it is not reachable by IP multicast, or at least not advertised as such. RustDDS runs its automatic Discovery according to the RTPS spec. It opens multicast sockets to all network interfaces that are locally marked multicast-capable. Typically your LAN interface is, but local loopback is not. Then it starts running Discovery over all of the multicast interfaces. Opening multicast sockets could cause the OS kernel do some IGMP signalling with IGMP-capable routers to route the multicast traffic further. But this depends on how your IP network is configured, and is out of scope here. Discovery traffic will go as far as your network routes it. In case there is no-one actively routing, then the scope would be only the local L2-switched LAN. |
Thanks for the detail! It's hard for me to debug, but when deploy my ros2-client application onto my target machine (on dev machine works!), these are my logs when the app immediately crashes. Anything that springs into your eye why it would give these errors?
|
Hi @nisseknudsen , The logs you have shown do not show any real error conditions. Everything before the line Log line Note that all discovered network entities belong to the GUID Prefix If your application was crashing, it is not visible here. If your Rust application is really crashing, then I would expect it to panic instead of just e.g. segfaulting. That should produce at least an output of the crash point, if not a full stack backtrace. |
What would be a best practice (or better an example) to connect to a DDS pubsub from nodes on different networks (even just different IP)?
The text was updated successfully, but these errors were encountered: