22 #ifndef netio_interface_h
23 #define netio_interface_h
29 #ifndef osapi_config_h
39 #ifndef reda_sequenceNumber_h
40 #include "reda/reda_sequenceNumber.h"
44 #include "db/db_api.h"
51 #ifndef netio_address_h
52 #include "netio/netio_address.h"
78 #define NETIO_PROTOCOL_INTRA (1)
84 #define NETIO_PROTOCOL_RTPS (2)
90 #define NETIO_PROTOCOL_UDP (3)
100 #define NETIO_RTPS_FLAGS_DISPOSE (0x1)
107 #define NETIO_RTPS_FLAGS_UNREGISTER (0x2)
113 #define NETIO_RTPS_FLAGS_LIVELINESS (0x4)
119 #define NETIO_RTPS_FLAGS_INLINEQOS (0x8)
126 #define NETIO_RTPS_FLAGS_LOST_DATA (0x10)
134 #define NETIO_RTPS_FLAGS_COMMIT_DATA (0x20)
142 #define NETIO_RTPS_FLAGS_DATA (0x40)
148 #define NETIO_RTPS_FLAGS_LAST_WRITE_FOR_SN (0x80)
154 #define NETIO_RTPS_FLAGS_LITTLE_ENDIAN (0x100)
159 struct NETIO_RtpsInfo
164 struct REDA_Buffer *inline_data;
169 struct NETIO_GuidPrefix guid_prefix;
175 struct NETIO_IntraInfo
180 const void *user_data;
186 struct REDA_Buffer *inline_data;
192 #define NETIO_IntraInfo_INITIALIZER \
201 struct NETIO_PacketInfo
206 struct REDA_SequenceNumber sn;
218 RTI_UINT8 valid_data;
223 struct NETIO_Guid instance;
228 RTI_UINT32 rtps_flags;
234 struct REDA_SequenceNumber committable_sn;
241 struct REDA_SequenceNumber first_available_sn;
247 struct REDA_SequenceNumber lost_sample_sn;
253 RTI_UINT32 lost_sample_count;
259 RTI_INT32 protocol_id;
267 struct NETIO_IntraInfo intra_info;
268 struct NETIO_RtpsInfo rtps_data;
276 #define NETIO_PacketInfo_INITIALIZER \
278 REDA_SEQUENCE_NUMBER_ZERO, \
279 OSAPI_NTP_TIME_ZERO, \
282 NETIO_ADDRESS_GUID_UNKNOWN, \
284 REDA_SEQUENCE_NUMBER_ZERO, \
285 REDA_SEQUENCE_NUMBER_ZERO, \
286 REDA_SEQUENCE_NUMBER_ZERO, \
289 {{NULL,NULL},{NULL,{{0,0,0,0,0,0,0,0,0,0,0,0}}}}\
305 struct NETIO_Address source;
317 RTI_SIZE_T max_length;
333 RTI_SIZE_T saved_head_pos;
339 RTI_SIZE_T saved_tail_pos;
345 struct NETIO_PacketInfo info;
350 struct NETIO_AddressSeq *dests;
356 typedef struct NETIO_Packet NETIO_Packet_T;
363 typedef struct REDA_SequenceNumber NETIO_PacketId_T;
369 #define NETIO_Packet_INITIALIZER \
371 NETIO_Address_INITIALIZER,\
378 NETIO_PacketInfo_INITIALIZER,\
395 MUST_CHECK_RETURN NETIODllExport
RTI_BOOL
396 NETIO_Packet_set_head(NETIO_Packet_T *packet,RTI_INT32 delta);
411 MUST_CHECK_RETURN NETIODllExport
RTI_BOOL
412 NETIO_Packet_set_tail(NETIO_Packet_T *packet,RTI_INT32 delta);
428 MUST_CHECK_RETURN NETIODllExport
void*
429 NETIO_Packet_get_head(NETIO_Packet_T *packet);
445 MUST_CHECK_RETURN NETIODllExport
void*
446 NETIO_Packet_get_tail(NETIO_Packet_T *packet);
467 MUST_CHECK_RETURN NETIODllExport
RTI_BOOL
468 NETIO_Packet_initialize(NETIO_Packet_T *packet,
470 RTI_SIZE_T init_length,
471 RTI_SIZE_T trailer_length,
472 struct NETIO_AddressSeq *dest_seq);
486 SHOULD_CHECK_RETURN NETIODllExport
RTI_BOOL
487 NETIO_Packet_finalize(NETIO_Packet_T *packet);
501 MUST_CHECK_RETURN NETIODllExport
struct NETIO_PacketInfo*
502 NETIO_Packet_get_info(NETIO_Packet_T *packet);
505 NETIO_Packet_set_source(NETIO_Packet_T *packet,
struct NETIO_Address *src);
518 SHOULD_CHECK_RETURN NETIODllExport RTI_SIZE_T
519 NETIO_Packet_get_payload_length(NETIO_Packet_T *packet);
534 NETIO_Packet_save_positions(NETIO_Packet_T *packet);
548 NETIO_Packet_restore_positions(NETIO_Packet_T *packet);
564 NETIO_Packet_save_positions_to(NETIO_Packet_T *packet,
582 NETIO_Packet_restore_positions_from(NETIO_Packet_T *packet,
600 #define NETIO_TABLE_NAME_SIZE (16)
605 struct NETIO_InterfaceProperty
607 struct RT_ComponentProperty _parent;
608 RTI_INT32 max_routes;
616 #define NETIO_InterfaceProperty_INITIALIZER \
618 RT_ComponentProperty_INITIALIZER,\
631 struct NETIO_InterfaceListener
636 struct RT_ComponentListener _parent;
643 #define NETIO_InterfaceListener_INITIALIZE \
645 RT_ComponentListener_INITIALIZER \
658 struct NETIO_InterfaceFactoryProperty
663 struct RT_ComponentFactoryProperty _parent;
670 #define NETIO_InterfaceFactoryProperty_INITIALIZER \
672 RT_ComponentFactoryProperty_INITIALIZER \
683 NETIO_INTERFACESTATE_CREATED,
688 NETIO_INTERFACESTATE_ENABLED
689 } NETIO_InterfaceState_T;
700 struct NETIO_Interface
705 struct RT_Component _parent;
721 struct NETIO_InterfaceListener _listener;
728 struct NETIO_Address local_address;
733 NETIO_InterfaceState_T state;
739 typedef struct NETIO_Interface NETIO_Interface_T;
744 struct NETIOBindProperty
757 #define NETIOBindProperty_INITIALIZER \
765 struct NETIORouteProperty
774 #define NETIORouteProperty_INITIALIZER \
782 struct NETIOBindEntryKey
787 struct NETIO_Address source;
792 struct NETIO_Address destination;
798 struct NETIOBindEntry
803 struct NETIO_Address source;
808 struct NETIO_Address destination;
813 NETIO_Interface_T *intf;
824 NETIO_ROUTESTATE_ACTIVE,
829 NETIO_ROUTESTATE_INACTIVE
830 } NETIO_RouteState_T;
836 struct NETIORouteEntryKey
841 struct NETIO_Address destination;
846 NETIO_Interface_T *intf;
851 struct NETIO_Address intf_address;
857 struct NETIORouteEntry
862 struct NETIO_Address destination;
867 NETIO_Interface_T *intf;
872 struct NETIO_Address intf_address;
877 NETIO_RouteState_T state;
888 NETIO_EVENTKIND_INACTIVE_PEER,
893 NETIO_EVENTKIND_ACTIVE_PEER
899 struct NETIO_Event_PeerActivity
904 struct NETIO_Address peer_addr;
909 RTI_INT32 inactive_total;
914 RTI_INT32 inactive_change;
919 RTI_INT32 active_total;
924 RTI_INT32 active_change;
936 NETIO_EventKind_T kind;
942 struct NETIO_Event_PeerActivity peer_activity;
946 struct NETIO_InterfaceI;
961 NETIO_Interface_Table_name_from_id(
char *tbl_name,
962 union RT_ComponentFactoryId *
id,
978 MUST_CHECK_RETURN NETIODllExport
RTI_BOOL
979 NETIO_Interface_initialize(
struct NETIO_Interface *netio,
980 struct NETIO_InterfaceI *netio_intf,
981 const struct NETIO_InterfaceProperty *
const property,
982 const struct NETIO_InterfaceListener *
const listener);
994 SHOULD_CHECK_RETURN NETIODllExport
RTI_BOOL
995 NETIO_Interface_finalize(
struct NETIO_Interface *netio);
1013 MUST_CHECK_RETURN NETIODllExport RTI_INT32
1014 NETIO_Interface_compare_route(RTI_INT32 flags,
1015 const DB_Record_T op1,
void *op2);
1032 MUST_CHECK_RETURN NETIODllExport RTI_INT32
1033 NETIO_Interface_compare_bind(RTI_INT32 flags,
1034 const DB_Record_T op1,
void *op2);
1048 MUST_CHECK_RETURN NETIODllExport
RTI_BOOL
1049 NETIO_Interface_lookup_route(
struct NETIO_Interface *netio_intf,
1050 struct NETIO_Address *dst_reader,
1051 struct NETIO_Interface *via_intf,
1052 struct NETIO_Address *via_address,
1053 struct NETIORouteEntry **route_entry);
1067 FUNCTION_MUST_TYPEDEF(
1069 (*NETIO_Interface_sendFunc)(
1070 NETIO_Interface_T *
self,
1071 struct NETIO_Interface *source,
1072 struct NETIO_Address *destination,
1073 NETIO_Packet_T *packet)
1088 FUNCTION_MUST_TYPEDEF(
1090 (*NETIO_Interface_receiveFunc)(
1091 NETIO_Interface_T *netio_intf,
1092 struct NETIO_Address *src_addr,
1093 struct NETIO_Address *dst_addr,
1094 NETIO_Packet_T *packet)
1109 FUNCTION_MUST_TYPEDEF(
1111 (*NETIO_Interface_acknackFunc)(
1112 NETIO_Interface_T *
self,
1113 struct NETIO_Address *source,
1114 NETIO_PacketId_T *packet_id,
1135 FUNCTION_MUST_TYPEDEF(
1137 (*NETIO_Interface_requestFunc)(
1138 NETIO_Interface_T *
self,
1139 struct NETIO_Address *source,
1140 struct NETIO_Address *dest,
1141 NETIO_Packet_T **packet,
1142 NETIO_PacketId_T *packet_id,
1143 NETIO_PacketId_T *actual_packet_id)
1147 FUNCTION_MUST_TYPEDEF(
1149 (*NETIO_Interface_return_loanFunc)(
1150 NETIO_Interface_T *
self,
1151 struct NETIO_Address *source,
1152 NETIO_Packet_T *packet,
1153 NETIO_PacketId_T *packet_id)
1167 FUNCTION_MUST_TYPEDEF(
1169 (*NETIO_Interface_xmit_removeFunc)(
1170 NETIO_Interface_T *
self,
1171 struct NETIO_Address *destination,
1172 NETIO_PacketId_T *packet_id)
1187 FUNCTION_MUST_TYPEDEF(
1189 (*NETIO_Interface_add_routeFunc)(
1190 NETIO_Interface_T *
self,
1191 struct NETIO_Address *dst_addr,
1192 NETIO_Interface_T *via_intf,
1193 struct NETIO_Address *via_addr,
1194 struct NETIORouteProperty *property,
1212 FUNCTION_MUST_TYPEDEF(
1214 (*NETIO_Interface_delete_routeFunc)(
1215 NETIO_Interface_T *
self,
1216 struct NETIO_Address *dst_addr,
1217 NETIO_Interface_T *via_intf,
1218 struct NETIO_Address *via_addr,
1234 FUNCTION_MUST_TYPEDEF(
1236 (*NETIO_Interface_bindFunc)(NETIO_Interface_T *netio_intf,
1237 struct NETIO_Address *src_addr,
1238 struct NETIOBindProperty *property,
1254 FUNCTION_MUST_TYPEDEF(
1256 (*NETIO_Interface_unbindFunc)(NETIO_Interface_T *netio_intf,
1257 struct NETIO_Address *src_addr,
1258 NETIO_Interface_T *dst_intf,
1276 FUNCTION_MUST_TYPEDEF(
1278 (*NETIO_Interface_bind_externalFunc)(NETIO_Interface_T *src_intf,
1279 struct NETIO_Address *src_addr,
1280 NETIO_Interface_T *dst_intf,
1281 struct NETIO_Address *dst_addr,
1282 struct NETIOBindProperty *property,
1299 FUNCTION_MUST_TYPEDEF(
1301 (*NETIO_Interface_unbind_externalFunc)(NETIO_Interface_T *src_intf,
1302 struct NETIO_Address *src_addr,
1303 NETIO_Interface_T *dst_intf,
1304 struct NETIO_Address *dst_addr,
1321 FUNCTION_MUST_TYPEDEF(
1323 (*NETIO_Interface_get_external_interfaceFunc)(NETIO_Interface_T *netio_intf,
1324 struct NETIO_Address *src_addr,
1325 NETIO_Interface_T **dst_intf,
1326 struct NETIO_Address *dst_addr)
1341 FUNCTION_MUST_TYPEDEF(
1343 (*NETIO_Interface_reserve_addressFunc)(NETIO_Interface_T *
self,
1344 struct NETIO_AddressSeq *req_address,
1345 struct NETIO_AddressSeq *rsvd_address,
1346 struct NETIOBindProperty *property)
1359 FUNCTION_MUST_TYPEDEF(
1361 (*NETIO_Interface_release_addressFunc)(NETIO_Interface_T *
self,
1362 struct NETIO_Address *src_addr)
1375 FUNCTION_MUST_TYPEDEF(
1377 (*NETIO_Interface_set_stateFunc)(NETIO_Interface_T *netio_intf,
1378 NETIO_InterfaceState_T state)
1393 FUNCTION_MUST_TYPEDEF(
1395 (*NETIO_Interface_resolve_adddressFunc)(NETIO_Interface_T *netio_intf,
1396 const char *address_string,
1397 struct NETIO_Address *address_value,
1412 FUNCTION_MUST_TYPEDEF(
1414 (*NETIO_Interface_get_route_tableFunc)(NETIO_Interface_T *netio_intf,
1415 struct NETIO_AddressSeq *address,
1416 struct NETIO_NetmaskSeq *netmask)
1430 FUNCTION_MUST_TYPEDEF(
1432 (*NETIO_Interface_post_eventFunc)(NETIO_Interface_T *
self,
1433 NETIO_Interface_T *src_intf,
1434 struct NETIO_Event *event)
1441 struct NETIO_InterfaceI
1446 struct RT_ComponentI _parent;
1451 NETIO_Interface_sendFunc send;
1456 NETIO_Interface_acknackFunc acknack;
1461 NETIO_Interface_requestFunc request;
1463 NETIO_Interface_return_loanFunc return_loan;
1468 NETIO_Interface_xmit_removeFunc xmit_remove;
1473 NETIO_Interface_add_routeFunc add_route;
1478 NETIO_Interface_delete_routeFunc delete_route;
1483 NETIO_Interface_reserve_addressFunc reserve_address;
1488 NETIO_Interface_bindFunc bind;
1493 NETIO_Interface_unbindFunc unbind;
1498 NETIO_Interface_receiveFunc receive;
1504 NETIO_Interface_get_external_interfaceFunc get_external_interface;
1509 NETIO_Interface_bind_externalFunc bind_external;
1514 NETIO_Interface_unbind_externalFunc unbind_external;
1519 NETIO_Interface_set_stateFunc set_state;
1524 NETIO_Interface_release_addressFunc release_address;
1529 NETIO_Interface_resolve_adddressFunc resolve_address;
1535 NETIO_Interface_get_route_tableFunc get_route_table;
1540 NETIO_Interface_post_eventFunc post_event;
1550 #define NETIO_InterfaceFactory_create_component(f_,p_,l_) \
1551 (NETIO_Interface_T*)((f_)->intf->create_component(\
1560 #define NETIO_InterfaceFactory_delete_component(f_,intf_) \
1561 (f_)->intf->delete_component(f_,(&(intf_)->_parent))
1576 #define NETIO_Interface_send(self_,src_intf_,dst_addr_,pkt_) \
1577 ((struct NETIO_InterfaceI*)(\
1578 (self_)->_parent._intf))->send(self_,src_intf_,dst_addr_,pkt_)
1595 #define NETIO_Interface_acknack(self_,src_intf_,sn_,nack_) \
1596 ((struct NETIO_InterfaceI*)(\
1597 (self_)->_parent._intf))->acknack(self_,src_intf_,sn_,nack_)
1619 #define NETIO_Interface_request(self_,src_,dst_,pkt_,pktid_,nextpktid_) \
1620 ((struct NETIO_InterfaceI*)(\
1621 (self_)->_parent._intf))->request(self_,src_,dst_,pkt_,pktid_,nextpktid_)
1623 #define NETIO_Interface_return_loan(self_,src_,pkt_,pkt_id_) \
1624 ((struct NETIO_InterfaceI*)(\
1625 (self_)->_parent._intf))->return_loan(self_,src_,pkt_,pkt_id_)
1640 #define NETIO_Interface_xmit_remove(self_,dst_,pkt_id_) \
1641 ((struct NETIO_InterfaceI*)(\
1642 (self_)->_parent._intf))->xmit_remove(self_,dst_,pkt_id_)
1660 #define NETIO_Interface_add_route(self_,dst_,intf_,intf_addr,prop_,ex_) \
1661 ((struct NETIO_InterfaceI*)(\
1662 (self_)->_parent._intf))->add_route(self_,dst_,intf_,intf_addr,prop_,ex_)
1680 #define NETIO_Interface_delete_route(self_,dst_,intf_,intf_addr_,exist_) \
1681 ((struct NETIO_InterfaceI*)(\
1682 (self_)->_parent._intf))->delete_route(self_,dst_,intf_,intf_addr_,exist_)
1699 #define NETIO_Interface_reserve_address(self_,src_addr_,pub_addr_,prop_)\
1700 ((struct NETIO_InterfaceI*)(\
1701 (self_)->_parent._intf))->reserve_address(self_,src_addr_,pub_addr_,prop_)
1714 #define NETIO_Interface_release_address(self_,src_addr_)\
1715 ((struct NETIO_InterfaceI*)(\
1716 (self_)->_parent._intf))->release_address(self_,src_addr_)
1734 #define NETIO_Interface_bind(self_,src_,prop_,ex_) \
1735 ((struct NETIO_InterfaceI*)(\
1736 (self_)->_parent._intf))->bind(self_,src_,prop_,ex_)
1754 #define NETIO_Interface_unbind(self_,src_,dst_,exist_) \
1755 ((struct NETIO_InterfaceI*)(\
1756 (self_)->_parent._intf))->unbind(self_,src_,dst_,exist_)
1777 #define NETIO_Interface_bind_external(src_intf_,src_adr_,dst_intf_,dst_adr_,p_,e_) \
1778 ((struct NETIO_InterfaceI*)(\
1779 (src_intf_)->_parent._intf))->bind_external(src_intf_,src_adr_,dst_intf_,dst_adr_,p_,e_)
1799 #define NETIO_Interface_unbind_external(src_intf_,src_adr_,dst_adr_,dst_intf_,exist_) \
1800 ((struct NETIO_InterfaceI*)(\
1801 (src_intf_)->_parent._intf))->unbind_external(src_intf_,src_adr_,dst_adr_,dst_intf_,exist_)
1822 #define NETIO_Interface_receive(self_,src_,dst_,p_) \
1823 ((struct NETIO_InterfaceI*)(\
1824 (self_)->_parent._intf))->receive(self_,src_,dst_,p_)
1841 #define NETIO_Interface_get_external_interface(self_,src_,ul_,dst_) \
1842 ((struct NETIO_InterfaceI*)(\
1843 (self_)->_parent._intf))->get_external_interface(self_,src_,ul_,dst_)
1857 #define NETIO_Interface_set_state(self_,state_) \
1858 ((struct NETIO_InterfaceI*)(\
1859 (self_)->_parent._intf))->set_state(self_,state_)
1876 #define NETIO_Interface_resolve_address(self_,address_,resolved_,is_invalid_) \
1877 ((struct NETIO_InterfaceI*)(\
1878 (self_)->_parent._intf))->resolve_address(self_,address_,resolved_,is_invalid_)
1893 #define NETIO_Interface_get_route_table(self_,address_,netmask_) \
1894 ((struct NETIO_InterfaceI*)(\
1895 (self_)->_parent._intf))->get_route_table(self_,address_,netmask_)
1909 #define NETIO_Interface_post_event(self_,src_intf_,event_) \
1910 ((struct NETIO_InterfaceI*)(\
1911 (self_)->_parent._intf))->post_event(self_,src_intf_,event_)