This is my first experience with DDS, evaluating it as part of an open process automation initiative.
I have a Pi-based device publishing data to a Linux app subscriber and all works well on a private wireless network. On a closed, corporate wireless network which I have no control over, I am getting no connectivity, with the same system. I'm able to ping and ssh, so I know there's connectivity between the two.
I'm using the community-based rticonnextdds-connector library. My XML file is attached. Thanks for any help.
Attachment | Size |
---|---|
board.xml | 2.87 KB |
Hi Kevin,
As you have said, you are facing a connectivity issue. It is possible that you need to add the initial_peers with the IPs of your devices.
Initial peers are necessary to find other participants in the same DDS domain.
Let me know if they are able to communicate now.
In regard to your question about ports, you can find more information in this knowledge base article.
It described the port used by RTI Connext DDS.
You should verify if the used ports are open up.
Let me know if you need more information about this topic.
Best,
Antonio
Edit: See next post -- I'm able to temporarily get samples transferred over the corporate network by initiating the connection via peer-to-peer Ethernet connection.
Thank you for responding Antonio,
Unfortunately, I have no control over the corporate guest network that I'm using -- and it uses DHCP so I can't even assign IP addresses manually.
Antonio,
edit: disregard this post, see next post.
Running wireshark with the Pi board wireless IP address as filter, I see some interesting information. Here are the steps and the results:
Why would data transfer temporarily be possible only when the peer-to-peer link is established and why does it stop after about 150 seconds? Thanks for any help on this.
Edit: when copper Ethernet is connected/disconnected, Wireshark captures ACKNACK and HEARTBEAT messages. But only on connect/disconnect, no other times.
New day, new information...
It appears I'm dealing with a discovery issue. Using your initial_peers configuration, I can establish connectivity. But I need a different approach since IP addresses on the network are dynamic.
Running "tcpdump multicast or broadcast and not arp" on each device, I see the discovery packets leaving but no packets arriving. Seems strange because I can ping each address (239.255.0.1 and x.x.255.255 respectively). I'm not sure what to try next.
I'll continue researching, but I may need some guidance and any help is greatly appreciated. :)
You're right, thank you Antonio, iperf was what I needed to confirm. The corporate wireless is blocking the multicast packets, whereas my private network passes these packets along and everything is fine.
I believe this is probably a brick wall, since I can't change the firewall easily and can't control what IP addresses are assigned (although IT might be willing to assign some, depending on the DHCP range setting -- I'll check this next).
Thanks,
Kevin
Hi Kevin,
Did you see that initial peers can be updated at runtime using DomainParticipant::add_peer()? One approach would involve:
There's some non-trivial work involved beyond the above: notifications when new peers register, managing the service, etc. Or you can just use the RTI Cloud Discovery Service. From the description:
It's a part of RTI Labs, our place for experimental products. We're always looking for feedback, so let us know if it works for you.
Cheers,
-sumeet