Hi all,
Sometimes I visualize this message warning(s) in my DDS application:
[D0000|ENABLE]RTINetioConfigurator_populateUnicastLocators:"" ignoring excess locators > capacity 4
[D0000|ENABLE]DDS_DiscoveryQosPolicy_to_unicast_locators:too many (> 4) unicast transport locators, ignoring some; transports = "", enabled_transports = ""
[D0000|ENABLE]NDDS_Transport_UDPv4_Socket_bindWithIp:0X1CF2 in use
[D0000|ENABLE]NDDS_Transport_UDPv4_SocketFactory_create_receive_socket:invalid port 7410
[D0000|ENABLE]NDDS_Transport_UDPv4_create_recvresource_rrEA:!create socket
Sometimes these messages are showed for different port numbers. Nonentheless everything is created correctly and data is being sent and received. My question is, which socket are these message sreferring to??
Thanks,
Antonio
Hello Antonio,
The messages you see are informative and it does not necessarily indicate there is anything wrong.
I think you are seeing this because you have configured RTI Connext DDS with Logging verbosity of WARNING or higher. In other words you must have directly or indirectly called NDDSConfigLogger::set_verbosity and specified NDDS_CONFIG_LOG_VERBOSITY_WARNING or higher.
Regarding the first message:
These messages indicate that RTI Connext DDS has detected more than 4 IP addresses in your computer. This can be due to you having multiple active NIC cards (e.g LAN, wireless, etc.), or it could also be caused by virtual Network Interface Adapters. Applications can create this. For example hypervisors such as VmWare, VirtualBox, etc. create them and also VPN programs such as OpenVPN.
For any one transport (e.g. UDP) RTI Connext DDS only uses the 4 first active network interfaces for communication. This complies with the OMG DDS-RTPS Interoperability Wire protocol. So any interfaces beyond the 4th will be ignored as far as DDS communications. This should not cause a problem as long as the interfaces you need to use for communications are among the first 4. If this is not the case, then you need to tell RTI DDS which interfaces to use explicitly (or which not to use). This can be done via QoS. See this HOWTO: http://community.rti.com/content/forum-topic/control-or-restrict-network...
Depending on the platform, you can use one of this commands to see the active network interfaces in your computer:
On Windows you can use: ipconfig
On Unix (Linux or MacOSX) you can use ifconfig.
For example in my Mac I currently have 5 active interfaces:
So if I start an application with verbosity 2 or higher I get the error you describe:
Regarding the second message:
Hi Gerardo
Thanks so much for the answer! Now I understand better the network interfaces interaction with DDS and that those messages are just mere informative.
Antonio
Hello Antonio,
I would like to add one more comment: If you are using Windows, it may reorder your interfaces after a reboot. If this happens, and the first four interfaces are no longer the NICs that RTI should be using, you may find that discovery no longer works. This will appear random, since it is not obvious that Windows made the change that caused discovery to stop working.
The safest thing to do is to use the HOWTO that Gerardo posted, or just keep this in mind if you ever see problems.
Thank you!
Rose