11#ifndef transport_udp_h
12#define transport_udp_h
14#include "osapi/osapi_socket.h"
15#include "osapi/osapi_atomic.h"
16#include "clock/clock_interface.h"
17#include "transport/transport_dll.h"
18#include "transport/transport_interface.h"
19#include "transport/transport_udp_wan_library.h"
25struct NDDS_Transport_UDP;
27struct NDDS_Transport_UDP_SocketFactory;
29struct NDDS_Transport_UDP_Interface_t;
57 *NDDS_Transport_UDP_WAN_Listener_Public_Mapping_Resolved_Callback)(
62struct NDDS_Transport_UDP_WAN_Listener {
64 NDDS_Transport_UDP_WAN_Listener_Public_Mapping_Resolved_Callback
65 on_public_mapping_resolved;
75#define NDDS_TRANSPORT_UDP_PORT_INVALID (0)
76#define NDDS_TRANSPORT_UDP_PORT_MAX (RTI_UINT16_MAX)
116struct NDDS_Transport_UDP_Property_t {
118 RTI_INT32 send_socket_buffer_size;
119 RTI_INT32 recv_socket_buffer_size;
120 RTI_INT32 unicast_enabled;
121 RTI_INT32 multicast_enabled;
122 RTI_INT32 multicast_ttl;
123 RTI_INT32 multicast_loopback_disabled;
124 RTI_INT32 ignore_loopback_interface;
125 RTI_INT32 ignore_nonup_interfaces;
126 RTI_INT32 ignore_nonrunning_interfaces;
127 RTI_INT32 no_zero_copy;
128 RTI_INT32 send_blocking;
129 RTI_INT32 enable_v4mapped;
130 RTI_INT32 use_checksum;
131 RTI_UINT32 transport_priority_mask;
132 RTI_INT32 transport_priority_mapping_low;
133 RTI_INT32 transport_priority_mapping_high;
135 RTI_INT32 force_interface_poll_detection;
136 RTI_UINT32 interface_poll_period;
137 RTI_INT32 reuse_multicast_receive_resource;
138 RTI_INT32 protocol_overhead_max;
139 RTI_INT32 disable_interface_tracking;
140 RTI_UINT32 join_multicast_group_timeout;
141 char *public_address;
143 RTI_INT32 comm_ports_list_length;
144 struct NDDS_Transport_UDP_WAN_Listener *wan_listener;
145 RTI_INT32 port_offset;
146 RTI_UINT32 binding_ping_period;
151 RTI_UINT32 binding_ping_mapping_expiration;
157 NDDS_Transport_UDP_WAN_Library_Is_Plugin_Enabled_Function
158 plugin_enabled_function_ptr;
168 RTIBool gather_detailed_statistics;
174 RTIBool drop_samples_by_guid_prefix;
179 struct RTIOsapiRtpsGuidPrefix guid_prefix_to_drop;
186#define NDDS_TRANSPORT_UDP_PROPERTIES_BITMAP_DEFAULT (0)
199#define NDDS_TRANSPORT_UDP_GATHER_SEND_BUFFER_COUNT_MAX_DEFAULT (16)
220#define NDDS_TRANSPORT_UDP_SOCKET_BUFFER_SIZE_OS_MAX \
221 RTI_OSAPI_UDP_SOCKET_BUFFER_SIZE_OS_MAX
232#define NDDS_TRANSPORT_UDP_SOCKET_BUFFER_SIZE_OS_DEFAULT \
233 RTI_OSAPI_UDP_SOCKET_BUFFER_SIZE_OS_DEFAULT
240#define NDDS_TRANSPORT_UDP_SEND_SOCKET_BUFFER_SIZE_DEFAULT \
241 RTI_OSAPI_UDP_SEND_SOCKET_BUFFER_SIZE_DEFAULT
248#define NDDS_TRANSPORT_UDP_RECV_SOCKET_BUFFER_SIZE_DEFAULT \
249 RTI_OSAPI_UDP_RECV_SOCKET_BUFFER_SIZE_DEFAULT
251#define NDDS_TRANSPORT_UDP_DATAGRAM_LENGTH_MAX (65535)
256#define NDDS_TRANSPORT_UDP_MULTICAST_TTL_DEFAULT (1)
260 #define NDDS_TRANSPORT_UDP_USE_MULTICAST_DEFAULT 1
262 #define NDDS_TRANSPORT_UDP_USE_MULTICAST_DEFAULT 0
268#define NDDS_TRANSPORT_UDP_IGNORE_LOOPBACK_DISABLED (0)
272#define NDDS_TRANSPORT_UDP_IGNORE_LOOPBACK_ENABLED (1)
276#define NDDS_TRANSPORT_UDP_IGNORE_LOOPBACK_AUTO (-1)
281#define NDDS_TRANSPORT_UDP_BLOCKING_NEVER (0)
285#define NDDS_TRANSPORT_UDP_BLOCKING_ALWAYS (1)
286#define NDDS_TRANSPORT_UDP_BLOCKING_UNICAST_ONLY (2)
290#define NDDS_TRANSPORT_UDP_BLOCKING_DEFAULT NDDS_TRANSPORT_UDP_BLOCKING_ALWAYS
305struct NDDS_Transport_UDP_InterfaceListener;
351typedef RTI_INT32 (*NDDS_Transport_UDP_Interface_Filter_Fcn)(
352 struct NDDS_Transport_UDP_InterfaceListener *self,
353 struct NDDS_Transport_UDP *plugin,
354 RTI_INT32 *multicast_enabled_out,
356 const char *interface_name_in);
362struct NDDS_Transport_UDP_InterfaceListener {
364 NDDS_Transport_UDP_Interface_Filter_Fcn onInterface;
384struct NDDS_Transport_UDP_SocketFactory;
417typedef RTI_INT32 (*NDDS_Transport_UDP_SocketFactory_Send_Socket_Create_Fcn)(
418 struct NDDS_Transport_UDP_SocketFactory *me,
420 const struct NDDS_Transport_UDP *transport_in,
422 const int *interface_index_in);
468typedef RTI_INT32 (*NDDS_Transport_UDP_SocketFactory_Receive_Socket_Create_Fcn)(
469 struct NDDS_Transport_UDP_SocketFactory *me,
471 const struct NDDS_Transport_UDP *transport_in,
486typedef RTI_INT32 (*NDDS_Transport_UDP_SocketFactory_Socket_Destroy_Fcn)(
487 struct NDDS_Transport_UDP_SocketFactory *me,
494struct NDDS_Transport_UDP_SocketFactory {
496 NDDS_Transport_UDP_SocketFactory_Send_Socket_Create_Fcn create_send_socket;
499 NDDS_Transport_UDP_SocketFactory_Receive_Socket_Create_Fcn
500 create_receive_socket;
504 NDDS_Transport_UDP_SocketFactory_Socket_Destroy_Fcn destroy_socket;
511#define NDDS_Transport_UDP_SocketFactory_is_valid(m) \
512 ((m)->create_send_socket && (m)->create_receive_socket && (m)->destroy_socket)
527extern NDDS_Transport_DllExport
const char *
528NDDS_Transport_UDP_get_class_name_cEA(NDDS_Transport_Plugin *self);
548extern NDDS_Transport_DllExport RTI_INT32
549NDDS_Transport_UDP_string_to_address_cEA(
550 NDDS_Transport_Plugin *self,
552 const char *address_in);
589extern NDDS_Transport_DllExport NDDS_Transport_Plugin *NDDS_Transport_UDP_new(
590 const struct NDDS_Transport_UDP_Property_t *property_in);
612extern NDDS_Transport_DllExport NDDS_Transport_Plugin *NDDS_Transport_UDP_newI(
613 const struct NDDS_Transport_UDP_Property_t *property_in,
614 struct NDDS_Transport_UDP_SocketFactory *socket_factory_in,
615 struct NDDS_Transport_UDP_InterfaceListener *interface_listener_in);
626extern NDDS_Transport_DllExport RTI_INT32
627NDDS_Transport_UDP_get_receive_interfaces_cEA(
628 NDDS_Transport_Plugin *self,
629 RTI_INT32 *found_more_than_provided_for_out,
630 RTI_INT32 *interface_reported_count_out,
632 RTI_INT32 interface_array_size_in);
637extern NDDS_Transport_DllExport RTI_INT32
638NDDS_Transport_UDP_get_ignore_loopback_interface_status(
639 const NDDS_Transport_Plugin *self);
652extern NDDS_Transport_DllExport RTIBool NDDS_Transport_UDP_is_local_address(
653 const NDDS_Transport_Plugin *self,
662extern NDDS_Transport_DllExport RTI_INT32
663NDDS_Transport_UDP_map_transport_priority(
664 struct NDDS_Transport_UDP_Property_t *property,
665 RTI_INT32 transport_priority_in);
677#define NDDS_TRANSPORT_UDP_UNBLOCK_MESSAGE_SIZE \
678 (4 + 4 + sizeof(NDDS_Transport_Plugin *))
685#define NDDS_TRANSPORT_UDP_DIFF_SERV_MAX_VALUE RTI_OSAPI_SOCKET_MAX_DIFF_SERV
687struct NDDS_Transport_UDP_Statistics {
691 RTI_ATOMIC(RTI_UINT64) user_bytes_sent;
692 RTI_ATOMIC(RTI_UINT64) user_bytes_received;
693 RTI_ATOMIC(RTI_UINT64) user_packets_sent;
694 RTI_ATOMIC(RTI_UINT64) user_packets_received;
703 RTI_ATOMIC(RTI_UINT64) discovery_bytes_sent;
704 RTI_ATOMIC(RTI_UINT64) discovery_bytes_received;
705 RTI_ATOMIC(RTI_UINT64) discovery_packets_sent;
706 RTI_ATOMIC(RTI_UINT64) discovery_packets_received;
712 RTI_ATOMIC(RTI_UINT64) participant_discovery_bytes_sent;
713 RTI_ATOMIC(RTI_UINT64) participant_discovery_bytes_received;
714 RTI_ATOMIC(RTI_UINT64) participant_discovery_packets_sent;
715 RTI_ATOMIC(RTI_UINT64) participant_discovery_packets_received;
721 RTI_ATOMIC(RTI_UINT64) participant_config_bytes_sent;
722 RTI_ATOMIC(RTI_UINT64) participant_config_bytes_received;
723 RTI_ATOMIC(RTI_UINT64) participant_config_packets_sent;
724 RTI_ATOMIC(RTI_UINT64) participant_config_packets_received;
725 RTI_ATOMIC(RTI_UINT64) automatic_liveliness_bytes_sent;
726 RTI_ATOMIC(RTI_UINT64) automatic_liveliness_bytes_received;
727 RTI_ATOMIC(RTI_UINT64) automatic_liveliness_packets_sent;
728 RTI_ATOMIC(RTI_UINT64) automatic_liveliness_packets_received;
729 RTI_ATOMIC(RTI_UINT64) manual_liveliness_bytes_sent;
730 RTI_ATOMIC(RTI_UINT64) manual_liveliness_bytes_received;
731 RTI_ATOMIC(RTI_UINT64) manual_liveliness_packets_sent;
732 RTI_ATOMIC(RTI_UINT64) manual_liveliness_packets_received;
733 RTI_ATOMIC(RTI_UINT64) endpoint_discovery_bytes_sent;
734 RTI_ATOMIC(RTI_UINT64) endpoint_discovery_bytes_received;
735 RTI_ATOMIC(RTI_UINT64) endpoint_discovery_packets_sent;
736 RTI_ATOMIC(RTI_UINT64) endpoint_discovery_packets_received;
742 RTI_ATOMIC(RTI_UINT64) overhead_bytes_sent;
743 RTI_ATOMIC(RTI_UINT64) overhead_bytes_received;
744 RTI_ATOMIC(RTI_UINT64) overhead_packets_sent;
745 RTI_ATOMIC(RTI_UINT64) overhead_packets_received;
746 RTI_ATOMIC(RTI_UINT64) binding_ping_event_count;
747 RTI_ATOMIC(RTI_UINT64) binding_ping_packets_sent;
748 RTI_ATOMIC(RTI_UINT64) binding_ping_bytes_sent;
749 RTI_ATOMIC(RTI_UINT64) binding_ping_packets_received;
750 RTI_ATOMIC(RTI_UINT64) binding_ping_bytes_received;
762 RTI_ATOMIC(RTI_UINT32)
763 received_priority_count[NDDS_TRANSPORT_UDP_DIFF_SERV_MAX_VALUE + 1];
775 RTI_ATOMIC(RTI_UINT64) _liveliness_bytes_sent;
776 RTI_ATOMIC(RTI_UINT64) _liveliness_bytes_received;
777 RTI_ATOMIC(RTI_UINT64) _liveliness_packets_sent;
778 RTI_ATOMIC(RTI_UINT64) _liveliness_packets_received;
784NDDS_Transport_DllExport
void NDDS_Transport_UDP_Statistics_initialize(
785 struct NDDS_Transport_UDP_Statistics *stats);
791NDDS_Transport_DllExport
void NDDS_Transport_UDP_copy_statistics(
792 struct NDDS_Transport_UDP_Statistics *dst,
793 const struct NDDS_Transport_UDP_Statistics *src);
798NDDS_Transport_DllExport
void NDDS_Transport_UDP_get_statistics(
799 NDDS_Transport_Plugin *self,
800 struct NDDS_Transport_UDP_Statistics *statistics_out);
806NDDS_Transport_DllExport
void NDDS_Transport_UDP_get_priority_range(
807 NDDS_Transport_Plugin *self,
808 RTI_INT32 *min_priority,
809 RTI_INT32 *max_priority);
815NDDS_Transport_DllExport
void NDDS_Transport_UDP_Address_print(
824NDDS_Transport_DllExport RTI_UINT64 NDDS_Transport_UDP_get_bytes_sent(
825 const struct NDDS_Transport_UDP_Statistics *
const before,
826 const struct NDDS_Transport_UDP_Statistics *
const after);
832NDDS_Transport_DllExport RTI_UINT64 NDDS_Transport_UDP_get_packets_sent(
833 const struct NDDS_Transport_UDP_Statistics *
const before,
834 const struct NDDS_Transport_UDP_Statistics *
const after);
840NDDS_Transport_DllExport RTI_UINT64 NDDS_Transport_UDP_get_bytes_received(
841 const struct NDDS_Transport_UDP_Statistics *
const before,
842 const struct NDDS_Transport_UDP_Statistics *
const after);
848NDDS_Transport_DllExport RTI_UINT64 NDDS_Transport_UDP_get_packets_received(
849 const struct NDDS_Transport_UDP_Statistics *
const before,
850 const struct NDDS_Transport_UDP_Statistics *
const after);
858} NDDS_Transport_UDP_WAN_UUID;
860#define NDDS_Transport_UDP_WAN_UUID_Initializer \
861 {{0, 0, 0, 0, 0, 0, 0, 0, 0}}
863extern NDDS_Transport_DllVariable
const NDDS_Transport_UDP_WAN_UUID
864 NDDS_Transport_UDP_WAN_UUID_ZERO;
866extern NDDS_Transport_DllExport RTIBool
867NDDS_Transport_UDP_WAN_UUID_is_zero(NDDS_Transport_UDP_WAN_UUID *uuid);
879extern NDDS_Transport_DllExport RTIBool NDDS_Transport_UDP_WAN_UUID_populate(
880 NDDS_Transport_UDP_WAN_UUID *self,
881 const struct RTIOsapiRtpsGuidPrefix *guidPrefix,
882 RTI_UINT32 hostAddress);
888typedef RTI_UINT8 NDDS_Transport_UDP_WAN_AddressFlag;
891#define NDDS_TRANSPORT_UDP_WAN_ADDRESS_FLAG_NONE (0)
900#define NDDS_TRANSPORT_UDP_WAN_ADDRESS_FLAG_U (0x01U << 0)
908#define NDDS_TRANSPORT_UDP_WAN_ADDRESS_FLAG_P (0x01U << 1)
914#define NDDS_TRANSPORT_UDP_WAN_ADDRESS_FLAG_B (0x01U << 2)
919#define NDDS_TRANSPORT_UDP_WAN_ADDRESS_FLAG_R (0x01U << 3)
926 RTI_UINT8 network_ordered_value[2];
927} NDDS_Transport_UDP_WAN_NetworkPort;
929#define NDDS_TRANSPORT_UDP_WAN_NETWORK_PORT_INVALID {{0}}
936 RTI_UINT8 network_ordered_value[4];
937} NDDS_Transport_UDP_WAN_NetworkIpv4Address;
939#define NDDS_TRANSPORT_UDP_WAN_NETWORK_IP_ADDRESS_INVALID {{0}}
959 NDDS_Transport_UDP_WAN_AddressFlag _flags;
960 NDDS_Transport_UDP_WAN_UUID _uuid;
961 NDDS_Transport_UDP_WAN_NetworkPort _publicPort;
962 NDDS_Transport_UDP_WAN_NetworkIpv4Address _publicAddress;
963} NDDS_Transport_UDPv4_WAN_Address;
966NDDS_Transport_UDPv4_WAN_Address_get_public_port(
967 const NDDS_Transport_UDPv4_WAN_Address *self);
970NDDS_Transport_UDPv4_WAN_Address_get_public_port_for_rtps_port(
971 const NDDS_Transport_UDPv4_WAN_Address *self,
973 RTI_INT32 udp_port_offset);
975extern NDDS_Transport_DllExport
void
976NDDS_Transport_UDPv4_WAN_Address_set_public_port(
977 NDDS_Transport_UDPv4_WAN_Address *self,
980extern NDDS_Transport_DllExport RTI_UINT32
981NDDS_Transport_UDPv4_WAN_Address_get_public_address(
982 const NDDS_Transport_UDPv4_WAN_Address *self);
984extern NDDS_Transport_DllExport
void
985NDDS_Transport_UDPv4_WAN_Address_set_public_address(
986 NDDS_Transport_UDPv4_WAN_Address *self,
987 RTI_UINT32 public_address);
1003extern NDDS_Transport_DllExport
void NDDS_Transport_UDP_combine_addresses(
1004 const NDDS_Transport_Plugin *self,
1021extern NDDS_Transport_DllExport RTIBool
1022NDDS_Transport_UDP_get_binding_ping_mapping(
1023 NDDS_Transport_Plugin *self,
1024 NDDS_Transport_UDPv4_WAN_Address *address,
1026 const NDDS_Transport_UDP_WAN_UUID *uuid);
1032#include "transport/transport_udp_impl.h"
RTI_UINT32 NDDS_Transport_Port_t
Type for storing RTI Connext RTPS ports.
Definition: transport_common.h:92
RTI_UINT16 NDDS_Transport_UDP_Port
UDP port.
Definition: transport_udp.h:73
Addresses are stored individually as network-ordered bytes.
Definition: transport_common_user.h:384
Storage for the description of a network interface used by a Transport Plugin.
Definition: transport_common.h:204
Base configuration structure that must be inherited by derived Transport Plugin classes.
Definition: transport_interface_user.h:38
Type for storing UDP WAN communication ports.
Definition: transport_udp.h:84
NDDS_Transport_UDP_Port public_port
Public port.
Definition: transport_udp.h:93
NDDS_Transport_UDP_Port host_port
Host port.
Definition: transport_udp.h:90
NDDS_Transport_Port_t rtps_port
RTPS port.
Definition: transport_udp.h:87