31 #ifndef netio_address_h
32 #define netio_address_h
37 #ifndef osapi_config_h
43 #ifndef reda_sequence_h
44 #include "reda/reda_sequence.h"
47 #include "db/db_api.h"
62 #define NETIO_ADDRESS_PORT_INVALID (0)
68 #define NETIO_ADDRESS_KIND_INVALID (-1)
74 #define NETIO_ADDRESS_KIND_RESERVED 0
80 #define NETIO_ADDRESS_KIND_UDPv4 1
86 #define NETIO_ADDRESS_KIND_UDPv6 2
93 #define NETIO_ADDRESS_KIND_USER 0x01000000
99 #define NETIO_ADDRESS_KIND_SHMEM 0x01000000
105 #define NETIO_ADDRESS_KIND_INTRA 0x01001000
111 #define NETIO_ADDRESS_KIND_TUDPv4 0x01001001
117 #define NETIO_ADDRESS_MAX_32BIT (4)
123 #define NETIO_ADDRESS_MAX_8IT (16)
128 struct NETIO_GuidPrefix
136 struct NETIO_GuidEntity
144 struct NETIO_AddressRtps
148 RTI_UINT32 instance_id;
149 RTI_UINT32 object_id;
157 struct NETIO_GuidPrefix prefix;
158 struct NETIO_GuidEntity entity;
164 struct NETIO_AddressGuidPrefix
166 RTI_UINT8 prefix[12];
174 struct NETIO_AddressIp4
180 RTI_UINT8 _unused[12];
186 struct NETIO_AddressIpv6
194 struct NETIO_AddressShem
206 struct NETIO_AddressInit
218 struct NETIO_AddressInt32
227 struct NETIO_AddressUInt32
235 union NETIO_AddressValue
237 struct NETIO_AddressRtps rtps_guid;
238 struct NETIO_Guid guid;
239 struct NETIO_AddressGuidPrefix guid_prefix;
240 struct NETIO_AddressIp4 ipv4;
241 struct NETIO_AddressIpv6 ipv6;
242 struct NETIO_AddressShem shmem;
243 struct NETIO_AddressInit init;
244 struct NETIO_AddressInt32 as_int32;
245 struct NETIO_AddressUInt32 as_uint32;
267 union NETIO_AddressValue value;
274 #define NETIO_ADDRESS_FLAG_MULTICAST (0x80000000)
280 #define NETIO_ADDRESS_FLAG_INTERNAL (0x40000000)
289 NETIODllExport RTI_BOOL
290 NETIO_Address_is_multicast(
const struct NETIO_Address *
const addr);
299 NETIODllExport RTI_BOOL
300 NETIO_Address_is_internal(
const struct NETIO_Address *
const addr);
308 NETIO_Address_set_multicast(
struct NETIO_Address *
const addr);
316 NETIO_Address_set_internal(
struct NETIO_Address *
const addr);
326 NETIO_Address_set_kind(
struct NETIO_Address *
const addr,RTI_UINT32 kind,RTI_INT32 flags);
335 NETIODllExport RTI_INT32
336 NETIO_Address_get_kind(
const struct NETIO_Address *
const addr);
345 NETIODllExport RTI_INT32
346 NETIO_Address_kind(RTI_INT32 kind);
352 #define NETIO_NETMASK_MASK_LENGTH (4)
358 #define NETIO_NETMASK_MASK_BITS_PER_UNIT ((RTI_INT32)(sizeof(RTI_INT32) * 8))
363 #define NETIO_NETMASK_MASK_MAX_BITS \
364 (NETIO_NETMASK_MASK_LENGTH * NETIO_NETMASK_MASK_BITS_PER_UNIT)
379 RTI_UINT32 mask[NETIO_NETMASK_MASK_LENGTH];
385 #define NETIO_Netmask_INITIALIZER \
395 #define T struct NETIO_Address
396 #define TSeq NETIO_AddressSeq
397 #include <reda/reda_sequence_decl.h>
399 #define T struct NETIO_Netmask
400 #define TSeq NETIO_NetmaskSeq
401 #include <reda/reda_sequence_decl.h>
407 #define NETIO_AddressSeq_INITIALIZER REDA_DEFINE_SEQUENCE_INITIALIZER(struct NETIO_Address)
413 #define NETIO_NetmaskSeq_INITIALIZER REDA_DEFINE_SEQUENCE_INITIALIZER(struct NETIO_Netmask)
420 #define NETIO_ADDRESS_GUID_UNKNOWN {{{0,0,0,0,0,0,0,0,0,0,0,0}},{{0,0,0,0}}}
436 NETIODllExport RTI_INT32
437 NETIO_Address_compare(
const struct NETIO_Address *left_addr,
438 const struct NETIO_Address *right_addr);
444 #define NETIO_Address_INITIALIZER \
446 NETIO_ADDRESS_KIND_RESERVED, \
458 NETIO_Address_init(
struct NETIO_Address *addr,RTI_INT32 kind);
468 NETIO_Address_set_ipv4(
struct NETIO_Address *addr,RTI_UINT32 port,RTI_UINT32 address);
478 NETIO_Address_set_guid(
struct NETIO_Address *addr,RTI_UINT32 port,
struct NETIO_Guid *guid);
495 NETIO_Address_set_guid_from_key(
struct NETIO_Address *addr,RTI_UINT32 port,
496 struct NETIO_AddressInt32 *key);
513 NETIO_Address_set_guid_from_int32(
struct NETIO_Address *addr,RTI_UINT32 port,
514 RTI_UINT32 int0,RTI_UINT32 int1,
515 RTI_UINT32 int2,RTI_UINT32 int3);
525 NETIODllExport RTI_BOOL
526 NETIO_Address_is_udpv4_multicast(
struct NETIO_Address *addr);
563 MUST_CHECK_RETURN NETIODllExport RTI_BOOL
564 NETIO_Address_parse(
const char *name,
565 RTI_UINT32 *base_port,
566 RTI_INT32 *low_index,
567 RTI_INT32 *high_index,
568 RT_ComponentFactoryId_T *out_id,
569 char *address_string,
570 RTI_SIZE_T address_max_string);
575 #define NETIO_ADDRESS_TOKEN_MAX_SIZE 256
582 #define NETIO_PREFIX_TOKEN_MAX_SIZE (RT_MAX_FACTORY_NAME + 1)
594 NETIO_ROUTEKIND_META,
621 (*NETIO_PortCalculateFunc_T)(
void *param,NETIO_RouteKind_T kind,
622 RTI_UINT32 port_base,RTI_INT32 index,
623 struct NETIO_Address *address);