/* * Copyright(c) 2006 to 2021 ZettaScale Technology and others * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at * http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License * v. 1.0 which is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause */ #ifndef NN_PROTOCOL_H #define NN_PROTOCOL_H #include "dds/ddsrt/endian.h" #include "dds/ddsrt/misc.h" #include "dds/ddsi/q_feature_check.h" #include "dds/ddsi/q_rtps.h" #include "dds/ddsi/ddsi_time.h" #include "dds/ddsi/ddsi_locator.h" #if defined (__cplusplus) extern "C" { #endif typedef struct { uint8_t id[4]; } nn_protocolid_t; typedef struct { int32_t high; uint32_t low; } nn_sequence_number_t; #define NN_SEQUENCE_NUMBER_UNKNOWN_HIGH -1 #define NN_SEQUENCE_NUMBER_UNKNOWN_LOW 0 #define NN_SEQUENCE_NUMBER_UNKNOWN ((seqno_t) (((uint64_t)NN_SEQUENCE_NUMBER_UNKNOWN_HIGH << 32) | NN_SEQUENCE_NUMBER_UNKNOWN_LOW)) /* C99 disallows flex array in nested struct, so only put the header in. (GCC and Clang allow it, but there are other compilers in the world as well.) */ typedef struct nn_sequence_number_set_header { nn_sequence_number_t bitmap_base; uint32_t numbits; } nn_sequence_number_set_header_t; /* SequenceNumberSet size is base (2 words) + numbits (1 word) + bitmap ((numbits+31)/32 words), and this at 4 bytes/word */ #define NN_SEQUENCE_NUMBER_SET_MAX_BITS (256u) #define NN_SEQUENCE_NUMBER_SET_BITS_SIZE(numbits) ((unsigned) (4 * (((numbits) + 31) / 32))) #define NN_SEQUENCE_NUMBER_SET_SIZE(numbits) (sizeof (nn_sequence_number_set_header_t) + NN_SEQUENCE_NUMBER_SET_BITS_SIZE (numbits)) typedef uint32_t nn_fragment_number_t; typedef struct nn_fragment_number_set_header { nn_fragment_number_t bitmap_base; uint32_t numbits; } nn_fragment_number_set_header_t; /* FragmentNumberSet size is base (2 words) + numbits (1 word) + bitmap ((numbits+31)/32 words), and this at 4 bytes/word */ #define NN_FRAGMENT_NUMBER_SET_MAX_BITS (256u) #define NN_FRAGMENT_NUMBER_SET_BITS_SIZE(numbits) ((unsigned) (4 * (((numbits) + 31) / 32))) #define NN_FRAGMENT_NUMBER_SET_SIZE(numbits) (sizeof (nn_fragment_number_set_header_t) + NN_FRAGMENT_NUMBER_SET_BITS_SIZE (numbits)) typedef uint32_t nn_count_t; #define NN_STATUSINFO_DISPOSE 0x1u #define NN_STATUSINFO_UNREGISTER 0x2u #define NN_STATUSINFO_STANDARDIZED (NN_STATUSINFO_DISPOSE | NN_STATUSINFO_UNREGISTER) #define NN_STATUSINFO_OSPL_AUTO 0x10000000u /* OSPL extension, not on the wire */ #define NN_STATUSINFOX_OSPL_AUTO 0x1 /* statusinfo word 2, OSPL L_AUTO flag on the wire */ #define NN_GUID_PREFIX_UNKNOWN_INITIALIZER {{0,0,0,0, 0,0,0,0, 0,0,0,0}} #define NN_DISC_BUILTIN_ENDPOINT_PARTICIPANT_ANNOUNCER (1u << 0) #define NN_DISC_BUILTIN_ENDPOINT_PARTICIPANT_DETECTOR (1u << 1) #define NN_DISC_BUILTIN_ENDPOINT_PUBLICATION_ANNOUNCER (1u << 2) #define NN_DISC_BUILTIN_ENDPOINT_PUBLICATION_DETECTOR (1u << 3) #define NN_DISC_BUILTIN_ENDPOINT_SUBSCRIPTION_ANNOUNCER (1u << 4) #define NN_DISC_BUILTIN_ENDPOINT_SUBSCRIPTION_DETECTOR (1u << 5) #define NN_DISC_BUILTIN_ENDPOINT_PARTICIPANT_PROXY_ANNOUNCER (1u << 6) /* undefined meaning */ #define NN_DISC_BUILTIN_ENDPOINT_PARTICIPANT_PROXY_DETECTOR (1u << 7) /* undefined meaning */ #define NN_DISC_BUILTIN_ENDPOINT_PARTICIPANT_STATE_ANNOUNCER (1u << 8) /* undefined meaning */ #define NN_DISC_BUILTIN_ENDPOINT_PARTICIPANT_STATE_DETECTOR (1u << 9) /* undefined meaning */ #define NN_BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_DATA_WRITER (1u << 10) #define NN_BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_DATA_READER (1u << 11) #define NN_BUILTIN_ENDPOINT_TL_SVC_REQUEST_DATA_WRITER (1u << 12) #define NN_BUILTIN_ENDPOINT_TL_SVC_REQUEST_DATA_READER (1u << 13) #define NN_BUILTIN_ENDPOINT_TL_SVC_REPLY_DATA_WRITER (1u << 14) #define NN_BUILTIN_ENDPOINT_TL_SVC_REPLY_DATA_READER (1u << 15) #define NN_DISC_BUILTIN_ENDPOINT_TOPICS_ANNOUNCER (1u << 28) #define NN_DISC_BUILTIN_ENDPOINT_TOPICS_DETECTOR (1u << 29) /* Security extensions: */ #define NN_BUILTIN_ENDPOINT_PUBLICATION_MESSAGE_SECURE_ANNOUNCER (1u<<16) #define NN_BUILTIN_ENDPOINT_PUBLICATION_MESSAGE_SECURE_DETECTOR (1u<<17) #define NN_BUILTIN_ENDPOINT_SUBSCRIPTION_MESSAGE_SECURE_ANNOUNCER (1u<<18) #define NN_BUILTIN_ENDPOINT_SUBSCRIPTION_MESSAGE_SECURE_DETECTOR (1u<<19) #define NN_BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_SECURE_ANNOUNCER (1u<<20) #define NN_BUILTIN_ENDPOINT_PARTICIPANT_MESSAGE_SECURE_DETECTOR (1u<<21) #define NN_BUILTIN_ENDPOINT_PARTICIPANT_STATELESS_MESSAGE_ANNOUNCER (1u<<22) #define NN_BUILTIN_ENDPOINT_PARTICIPANT_STATELESS_MESSAGE_DETECTOR (1u<<23) #define NN_BUILTIN_ENDPOINT_PARTICIPANT_VOLATILE_SECURE_ANNOUNCER (1u<<24) #define NN_BUILTIN_ENDPOINT_PARTICIPANT_VOLATILE_SECURE_DETECTOR (1u<<25) #define NN_DISC_BUILTIN_ENDPOINT_PARTICIPANT_SECURE_ANNOUNCER (1u << 26) #define NN_DISC_BUILTIN_ENDPOINT_PARTICIPANT_SECURE_DETECTOR (1u << 27) #define NN_BES_MASK_NON_SECURITY 0xf000ffffu #define NN_LOCATOR_KIND_INVALID -1 #define NN_LOCATOR_KIND_RESERVED 0 #define NN_LOCATOR_KIND_UDPv4 1 #define NN_LOCATOR_KIND_UDPv6 2 #define NN_LOCATOR_KIND_TCPv4 4 #define NN_LOCATOR_KIND_TCPv6 8 #define NN_LOCATOR_KIND_SHEM 16 #define NN_LOCATOR_KIND_RAWETH 0x8000 /* proposed vendor-specific */ #define NN_LOCATOR_KIND_UDPv4MCGEN 0x4fff0000 #define NN_LOCATOR_PORT_INVALID 0 /* Only one specific version is grokked */ #define RTPS_MAJOR 2 #define RTPS_MINOR 1 #define RTPS_MINOR_MINIMUM 1 typedef struct Header { nn_protocolid_t protocol; nn_protocol_version_t version; nn_vendorid_t vendorid; ddsi_guid_prefix_t guid_prefix; } Header_t; #if DDSRT_ENDIAN == DDSRT_LITTLE_ENDIAN #define NN_PROTOCOLID_AS_UINT32 (((uint32_t)'R' << 0) | ((uint32_t)'T' << 8) | ((uint32_t)'P' << 16) | ((uint32_t)'S' << 24)) #elif DDSRT_ENDIAN == DDSRT_BIG_ENDIAN #define NN_PROTOCOLID_AS_UINT32 (((uint32_t)'R' << 24) | ((uint32_t)'T' << 16) | ((uint32_t)'P' << 8) | ((uint32_t)'S' << 0)) #else #error "DDSRT_ENDIAN neither LITTLE nor BIG" #endif #define RTPS_MESSAGE_HEADER_SIZE (sizeof (Header_t)) typedef struct SubmessageHeader { uint8_t submessageId; uint8_t flags; uint16_t octetsToNextHeader; } SubmessageHeader_t; #define RTPS_SUBMESSAGE_HEADER_SIZE (sizeof (SubmessageHeader_t)) #define SMFLAG_ENDIANNESS 0x01u typedef enum SubmessageKind { SMID_PAD = 0x01, SMID_ACKNACK = 0x06, SMID_HEARTBEAT = 0x07, SMID_GAP = 0x08, SMID_INFO_TS = 0x09, SMID_INFO_SRC = 0x0c, SMID_INFO_REPLY_IP4 = 0x0d, SMID_INFO_DST = 0x0e, SMID_INFO_REPLY = 0x0f, SMID_NACK_FRAG = 0x12, SMID_HEARTBEAT_FRAG = 0x13, SMID_DATA = 0x15, SMID_DATA_FRAG = 0x16, /* security-specific sub messages */ SMID_SEC_BODY = 0x30, SMID_SEC_PREFIX = 0x31, SMID_SEC_POSTFIX = 0x32, SMID_SRTPS_PREFIX = 0x33, SMID_SRTPS_POSTFIX = 0x34, /* vendor-specific sub messages (0x80 .. 0xff) */ SMID_ADLINK_MSG_LEN = 0x81, SMID_ADLINK_ENTITY_ID = 0x82 } SubmessageKind_t; typedef struct InfoTimestamp { SubmessageHeader_t smhdr; ddsi_time_t time; } InfoTimestamp_t; typedef struct EntityId { SubmessageHeader_t smhdr; ddsi_entityid_t entityid; } EntityId_t; typedef struct InfoDST { SubmessageHeader_t smhdr; ddsi_guid_prefix_t guid_prefix; } InfoDST_t; typedef struct InfoSRC { SubmessageHeader_t smhdr; unsigned unused; nn_protocol_version_t version; nn_vendorid_t vendorid; ddsi_guid_prefix_t guid_prefix; } InfoSRC_t; #if DDSRT_ENDIAN == DDSRT_LITTLE_ENDIAN #define CDR_BE 0x0000u #define CDR_LE 0x0100u #define PL_CDR_BE 0x0200u #define PL_CDR_LE 0x0300u #define CDR2_BE 0x0600u #define CDR2_LE 0x0700u #define D_CDR2_BE 0x0800u #define D_CDR2_LE 0x0900u #define PL_CDR2_BE 0x0a00u #define PL_CDR2_LE 0x0b00u #define CDR_ENC_LE(x) (((x) & 0x0100) == 0x0100) #define CDR_ENC_IS_NATIVE(x) (CDR_ENC_LE ((x))) #define CDR_ENC_IS_VALID(x) (!((x) > PL_CDR2_LE || (x) == 0x0400 || (x) == 0x0500)) #define CDR_ENC_TO_NATIVE(x) ((x) | 0x0100) #else #define CDR_BE 0x0000u #define CDR_LE 0x0001u #define PL_CDR_BE 0x0002u #define PL_CDR_LE 0x0003u #define CDR2_BE 0x0006u #define CDR2_LE 0x0007u #define D_CDR2_BE 0x0008u #define D_CDR2_LE 0x0009u #define PL_CDR2_BE 0x000au #define PL_CDR2_LE 0x000bu #define CDR_ENC_LE(x) (((x) & 0x0001) == 0x0001) #define CDR_ENC_IS_NATIVE(x) (!CDR_ENC_LE ((x))) #define CDR_ENC_IS_VALID(x) (!((x) > PL_CDR2_LE || (x) == 0x0004 || (x) == 0x0005)) #define CDR_ENC_TO_NATIVE(x) ((x) & ~0x0001) #endif /* Encoding version to be used for serialization. Encoding version 1 represents the XCDR1 format as defined in the DDS XTypes specification, with PLAIN_CDR(1) that is backwards compatible with the CDR encoding used by non-XTypes enabled nodes. */ #define CDR_ENC_VERSION_UNDEF 0 #define CDR_ENC_VERSION_1 1 #define CDR_ENC_VERSION_2 2 #define CDR_ENC_FORMAT_PLAIN 0 #define CDR_ENC_FORMAT_DELIMITED 1 #define CDR_ENC_FORMAT_PL 2 typedef uint16_t nn_parameterid_t; /* spec says short */ typedef struct nn_parameter { nn_parameterid_t parameterid; uint16_t length; /* spec says signed short */ /* char value[] */ } nn_parameter_t; typedef struct Data_DataFrag_common { SubmessageHeader_t smhdr; uint16_t extraFlags; uint16_t octetsToInlineQos; ddsi_entityid_t readerId; ddsi_entityid_t writerId; nn_sequence_number_t writerSN; } Data_DataFrag_common_t; typedef struct Data { Data_DataFrag_common_t x; } Data_t; #define DATA_FLAG_INLINE_QOS 0x02u #define DATA_FLAG_DATAFLAG 0x04u #define DATA_FLAG_KEYFLAG 0x08u typedef struct DataFrag { Data_DataFrag_common_t x; nn_fragment_number_t fragmentStartingNum; uint16_t fragmentsInSubmessage; uint16_t fragmentSize; uint32_t sampleSize; } DataFrag_t; #define DATAFRAG_FLAG_INLINE_QOS 0x02u #define DATAFRAG_FLAG_KEYFLAG 0x04u typedef struct MsgLen { SubmessageHeader_t smhdr; uint32_t length; } MsgLen_t; DDSRT_WARNING_MSVC_OFF(4200) typedef struct AckNack { SubmessageHeader_t smhdr; ddsi_entityid_t readerId; ddsi_entityid_t writerId; nn_sequence_number_set_header_t readerSNState; uint32_t bits[]; /* nn_count_t count; */ } AckNack_t; DDSRT_WARNING_MSVC_ON(4200) #define ACKNACK_FLAG_FINAL 0x02u #define ACKNACK_SIZE(numbits) (offsetof (AckNack_t, bits) + NN_SEQUENCE_NUMBER_SET_BITS_SIZE (numbits) + 4) #define ACKNACK_SIZE_MAX ACKNACK_SIZE (NN_SEQUENCE_NUMBER_SET_MAX_BITS) DDSRT_WARNING_MSVC_OFF(4200) typedef struct Gap { SubmessageHeader_t smhdr; ddsi_entityid_t readerId; ddsi_entityid_t writerId; nn_sequence_number_t gapStart; nn_sequence_number_set_header_t gapList; uint32_t bits[]; } Gap_t; DDSRT_WARNING_MSVC_ON(4200) #define GAP_SIZE(numbits) (offsetof (Gap_t, bits) + NN_SEQUENCE_NUMBER_SET_BITS_SIZE (numbits)) #define GAP_SIZE_MAX GAP_SIZE (NN_SEQUENCE_NUMBER_SET_MAX_BITS) typedef struct InfoTS { SubmessageHeader_t smhdr; ddsi_time_t time; } InfoTS_t; #define INFOTS_INVALIDATE_FLAG 0x2u typedef struct Heartbeat { SubmessageHeader_t smhdr; ddsi_entityid_t readerId; ddsi_entityid_t writerId; nn_sequence_number_t firstSN; nn_sequence_number_t lastSN; nn_count_t count; } Heartbeat_t; #define HEARTBEAT_FLAG_FINAL 0x02u #define HEARTBEAT_FLAG_LIVELINESS 0x04u typedef struct HeartbeatFrag { SubmessageHeader_t smhdr; ddsi_entityid_t readerId; ddsi_entityid_t writerId; nn_sequence_number_t writerSN; nn_fragment_number_t lastFragmentNum; nn_count_t count; } HeartbeatFrag_t; DDSRT_WARNING_MSVC_OFF(4200) typedef struct NackFrag { SubmessageHeader_t smhdr; ddsi_entityid_t readerId; ddsi_entityid_t writerId; nn_sequence_number_t writerSN; nn_fragment_number_set_header_t fragmentNumberState; uint32_t bits[]; /* nn_count_t count; */ } NackFrag_t; DDSRT_WARNING_MSVC_ON(4200) #define NACKFRAG_SIZE(numbits) (offsetof (NackFrag_t, bits) + NN_FRAGMENT_NUMBER_SET_BITS_SIZE (numbits) + 4) #define NACKFRAG_SIZE_MAX NACKFRAG_SIZE (NN_FRAGMENT_NUMBER_SET_MAX_BITS) typedef union Submessage { SubmessageHeader_t smhdr; AckNack_t acknack; Data_t data; DataFrag_t datafrag; InfoTS_t infots; InfoDST_t infodst; InfoSRC_t infosrc; Heartbeat_t heartbeat; HeartbeatFrag_t heartbeatfrag; Gap_t gap; NackFrag_t nackfrag; } Submessage_t; #define PARTICIPANT_MESSAGE_DATA_KIND_UNKNOWN 0x0u #define PARTICIPANT_MESSAGE_DATA_KIND_AUTOMATIC_LIVELINESS_UPDATE 0x1u #define PARTICIPANT_MESSAGE_DATA_KIND_MANUAL_LIVELINESS_UPDATE 0x2u #define PARTICIPANT_MESSAGE_DATA_VENDOR_SPECIFIC_KIND_FLAG 0x8000000u #define PID_VENDORSPECIFIC_FLAG 0x8000u #define PID_UNRECOGNIZED_INCOMPATIBLE_FLAG 0x4000u #define PID_PAD 0x0u #define PID_SENTINEL 0x1u #define PID_DOMAIN_ID 0xfu #define PID_DOMAIN_TAG (0x14u | PID_UNRECOGNIZED_INCOMPATIBLE_FLAG) #define PID_USER_DATA 0x2cu #define PID_TOPIC_NAME 0x5u #define PID_TYPE_NAME 0x7u #define PID_GROUP_DATA 0x2du #define PID_TOPIC_DATA 0x2eu #define PID_DURABILITY 0x1du #define PID_DURABILITY_SERVICE 0x1eu #define PID_DEADLINE 0x23u #define PID_LATENCY_BUDGET 0x27u #define PID_LIVELINESS 0x1bu #define PID_RELIABILITY 0x1au #define PID_LIFESPAN 0x2bu #define PID_DESTINATION_ORDER 0x25u #define PID_HISTORY 0x40u #define PID_RESOURCE_LIMITS 0x41u #define PID_OWNERSHIP 0x1fu #define PID_OWNERSHIP_STRENGTH 0x6u #define PID_PRESENTATION 0x21u #define PID_PARTITION 0x29u #define PID_TIME_BASED_FILTER 0x4u #define PID_TRANSPORT_PRIORITY 0x49u #define PID_PROTOCOL_VERSION 0x15u #define PID_VENDORID 0x16u #define PID_UNICAST_LOCATOR 0x2fu #define PID_MULTICAST_LOCATOR 0x30u #define PID_MULTICAST_IPADDRESS 0x11u #define PID_DEFAULT_UNICAST_LOCATOR 0x31u #define PID_DEFAULT_MULTICAST_LOCATOR 0x48u #define PID_METATRAFFIC_UNICAST_LOCATOR 0x32u #define PID_METATRAFFIC_MULTICAST_LOCATOR 0x33u #define PID_DEFAULT_UNICAST_IPADDRESS 0xcu #define PID_DEFAULT_UNICAST_PORT 0xeu #define PID_METATRAFFIC_UNICAST_IPADDRESS 0x45u #define PID_METATRAFFIC_UNICAST_PORT 0xdu #define PID_METATRAFFIC_MULTICAST_IPADDRESS 0xbu #define PID_METATRAFFIC_MULTICAST_PORT 0x46u #define PID_EXPECTS_INLINE_QOS 0x43u #define PID_PARTICIPANT_MANUAL_LIVELINESS_COUNT 0x34u #define PID_PARTICIPANT_BUILTIN_ENDPOINTS 0x44u #define PID_PARTICIPANT_LEASE_DURATION 0x2u #define PID_CONTENT_FILTER_PROPERTY 0x35u #define PID_PARTICIPANT_GUID 0x50u #define PID_PARTICIPANT_ENTITYID 0x51u #define PID_GROUP_GUID 0x52u #define PID_GROUP_ENTITYID 0x53u #define PID_BUILTIN_ENDPOINT_SET 0x58u #define PID_PROPERTY_LIST 0x59u #define PID_TYPE_MAX_SIZE_SERIALIZED 0x60u #define PID_ENTITY_NAME 0x62u #define PID_KEYHASH 0x70u #define PID_STATUSINFO 0x71u #define PID_CONTENT_FILTER_INFO 0x55u #define PID_COHERENT_SET 0x56u #define PID_DIRECTED_WRITE 0x57u #define PID_ORIGINAL_WRITER_INFO 0x61u #define PID_ENDPOINT_GUID 0x5au /* !SPEC <=> ADLINK_ENDPOINT_GUID */ #define PID_DATA_REPRESENTATION 0x73u #define PID_TYPE_CONSISTENCY_ENFORCEMENT 0x74u #define PID_TYPE_INFORMATION 0x75u /* Security related PID values. */ #define PID_IDENTITY_TOKEN 0x1001u #define PID_PERMISSIONS_TOKEN 0x1002u #define PID_DATA_TAGS 0x1003u #define PID_ENDPOINT_SECURITY_INFO 0x1004u #define PID_PARTICIPANT_SECURITY_INFO 0x1005u #define PID_IDENTITY_STATUS_TOKEN 0x1006u #ifdef DDS_HAS_SSM /* To indicate whether a reader favours the use of SSM. Iff the reader favours SSM, it will use SSM if available. */ #define PID_READER_FAVOURS_SSM 0x72u #endif /* Deprecated parameter IDs (accepted but ignored) */ #define PID_PERSISTENCE 0x03u #define PID_TYPE_CHECKSUM 0x08u #define PID_TYPE2_NAME 0x09u #define PID_TYPE2_CHECKSUM 0x0au #define PID_EXPECTS_ACK 0x10u #define PID_MANAGER_KEY 0x12u #define PID_SEND_QUEUE_SIZE 0x13u #define PID_RELIABILITY_ENABLED 0x14u #define PID_VARGAPPS_SEQUENCE_NUMBER_LAST 0x17u #define PID_RECV_QUEUE_SIZE 0x18u #define PID_RELIABILITY_OFFERED 0x19u #define PID_ADLINK_BUILTIN_ENDPOINT_SET (PID_VENDORSPECIFIC_FLAG | 0x0u) /* parameter ids for READER_DATA_LIFECYCLE & WRITER_DATA_LIFECYCLE are undefined, but let's publish them anyway */ #define PID_ADLINK_READER_DATA_LIFECYCLE (PID_VENDORSPECIFIC_FLAG | 0x2u) #define PID_ADLINK_WRITER_DATA_LIFECYCLE (PID_VENDORSPECIFIC_FLAG | 0x3u) /* ENDPOINT_GUID is formally undefined, so in strictly conforming mode, we use our own */ #define PID_ADLINK_ENDPOINT_GUID (PID_VENDORSPECIFIC_FLAG | 0x4u) #define PID_ADLINK_SYNCHRONOUS_ENDPOINT (PID_VENDORSPECIFIC_FLAG | 0x5u) /* Relaxed QoS matching readers/writers are best ignored by implementations that don't understand them. This also covers "old" DDSI2's, although they may emit an error. */ #define PID_ADLINK_RELAXED_QOS_MATCHING (PID_VENDORSPECIFIC_FLAG | PID_UNRECOGNIZED_INCOMPATIBLE_FLAG | 0x6u) #define PID_ADLINK_PARTICIPANT_VERSION_INFO (PID_VENDORSPECIFIC_FLAG | 0x7u) #define PID_ADLINK_NODE_NAME (PID_VENDORSPECIFIC_FLAG | 0x8u) #define PID_ADLINK_EXEC_NAME (PID_VENDORSPECIFIC_FLAG | 0x9u) #define PID_ADLINK_PROCESS_ID (PID_VENDORSPECIFIC_FLAG | 0xau) #define PID_ADLINK_SERVICE_TYPE (PID_VENDORSPECIFIC_FLAG | 0xbu) #define PID_ADLINK_ENTITY_FACTORY (PID_VENDORSPECIFIC_FLAG | 0xcu) #define PID_ADLINK_WATCHDOG_SCHEDULING (PID_VENDORSPECIFIC_FLAG | 0xdu) #define PID_ADLINK_LISTENER_SCHEDULING (PID_VENDORSPECIFIC_FLAG | 0xeu) #define PID_ADLINK_SUBSCRIPTION_KEYS (PID_VENDORSPECIFIC_FLAG | 0xfu) #define PID_ADLINK_READER_LIFESPAN (PID_VENDORSPECIFIC_FLAG | 0x10u) #define PID_ADLINK_TYPE_DESCRIPTION (PID_VENDORSPECIFIC_FLAG | 0x12u) #define PID_ADLINK_LAN (PID_VENDORSPECIFIC_FLAG | 0x13u) #define PID_ADLINK_ENDPOINT_GID (PID_VENDORSPECIFIC_FLAG | 0x14u) #define PID_ADLINK_GROUP_GID (PID_VENDORSPECIFIC_FLAG | 0x15u) #define PID_ADLINK_EOTINFO (PID_VENDORSPECIFIC_FLAG | 0x16u) #define PID_ADLINK_PART_CERT_NAME (PID_VENDORSPECIFIC_FLAG | 0x17u) #define PID_ADLINK_LAN_CERT_NAME (PID_VENDORSPECIFIC_FLAG | 0x18u) #define PID_CYCLONE_RECEIVE_BUFFER_SIZE (PID_VENDORSPECIFIC_FLAG | 0x19u) #define PID_CYCLONE_TYPE_INFORMATION (PID_VENDORSPECIFIC_FLAG | 0x1au) #define PID_CYCLONE_TOPIC_GUID (PID_VENDORSPECIFIC_FLAG | 0x1bu) #define PID_CYCLONE_REQUESTS_KEYHASH (PID_VENDORSPECIFIC_FLAG | 0x1cu) #define PID_CYCLONE_REDUNDANT_NETWORKING (PID_VENDORSPECIFIC_FLAG | 0x1du) /* Names of the built-in topics */ #define DDS_BUILTIN_TOPIC_PARTICIPANT_NAME "DCPSParticipant" #define DDS_BUILTIN_TOPIC_PUBLICATION_NAME "DCPSPublication" #define DDS_BUILTIN_TOPIC_SUBSCRIPTION_NAME "DCPSSubscription" #define DDS_BUILTIN_TOPIC_TOPIC_NAME "DCPSTopic" #define DDS_BUILTIN_TOPIC_PARTICIPANT_MESSAGE_NAME "DCPSParticipantMessage" #define DDS_BUILTIN_TOPIC_TYPELOOKUP_REQUEST_NAME "DCPSTypeLookupRequest" #define DDS_BUILTIN_TOPIC_TYPELOOKUP_REPLY_NAME "DCPSTypeLookupReply" #define DDS_BUILTIN_TOPIC_PARTICIPANT_SECURE_NAME "DCPSParticipantsSecure" #define DDS_BUILTIN_TOPIC_PUBLICATION_SECURE_NAME "DCPSPublicationsSecure" #define DDS_BUILTIN_TOPIC_SUBSCRIPTION_SECURE_NAME "DCPSSubscriptionsSecure" #define DDS_BUILTIN_TOPIC_PARTICIPANT_MESSAGE_SECURE_NAME "DCPSParticipantMessageSecure" #define DDS_BUILTIN_TOPIC_PARTICIPANT_STATELESS_MESSAGE_NAME "DCPSParticipantStatelessMessage" #define DDS_BUILTIN_TOPIC_PARTICIPANT_VOLATILE_MESSAGE_SECURE_NAME "DCPSParticipantVolatileMessageSecure" /* Participant built-in topic qos properties */ #define DDS_BUILTIN_TOPIC_PARTICIPANT_PROPERTY_PROCESS_NAME "__ProcessName" #define DDS_BUILTIN_TOPIC_PARTICIPANT_PROPERTY_PID "__Pid" #define DDS_BUILTIN_TOPIC_PARTICIPANT_PROPERTY_HOSTNAME "__Hostname" #define DDS_BUILTIN_TOPIC_PARTICIPANT_PROPERTY_NETWORKADDRESSES "__NetworkAddresses" #define DDS_BUILTIN_TOPIC_PARTICIPANT_DEBUG_MONITOR "__DebugMonitor" #define DDS_BUILTIN_TOPIC_NULL_NAME NULL #if defined (__cplusplus) } #endif #endif /* NN_PROTOCOL_H */