Files
qt6-migration-pipeline/external/tmsif/include/dds/ddsi/ddsi_protocol.h
T
2026-10-23 16:13:31 +00:00

246 lines
10 KiB
C

// 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 DDSI_PROTOCOL_H
#define DDSI_PROTOCOL_H
#include "dds/ddsrt/endian.h"
#include "dds/ddsrt/misc.h"
#include "dds/ddsi/ddsi_feature_check.h"
#include "dds/ddsi/ddsi_locator.h"
#include "dds/ddsi/ddsi_guid.h"
#if defined (__cplusplus)
extern "C" {
#endif
#define DDSI_STATUSINFO_DISPOSE 0x1u
#define DDSI_STATUSINFO_UNREGISTER 0x2u
#define DDSI_STATUSINFO_STANDARDIZED (DDSI_STATUSINFO_DISPOSE | DDSI_STATUSINFO_UNREGISTER)
#define DDSI_STATUSINFO_OSPL_AUTO 0x10000000u /* OSPL extension, not on the wire */
#define DDSI_STATUSINFOX_OSPL_AUTO 0x1 /* statusinfo word 2, OSPL L_AUTO flag on the wire */
#define DDSI_LOCATOR_KIND_INVALID -1
#define DDSI_LOCATOR_KIND_RESERVED 0
#define DDSI_LOCATOR_KIND_UDPv4 1
#define DDSI_LOCATOR_KIND_UDPv6 2
#define DDSI_LOCATOR_KIND_TCPv4 4
#define DDSI_LOCATOR_KIND_TCPv6 8
#define DDSI_LOCATOR_KIND_PSMX 16
#define DDSI_LOCATOR_KIND_RAWETH 0x02000000
#define DDSI_LOCATOR_KIND_UDPv4MCGEN 0x4fff0000
#define DDSI_LOCATOR_PORT_INVALID 0
// The maximum size of the index in a MCGEN locator, so that it can be stored in a cover_info_t
#define DDSI_LOCATOR_UDPv4MCGEN_INDEX_MASK_BITS 12
typedef uint32_t ddsi_count_t;
typedef struct ddsi_protocol_version {
uint8_t major, minor;
} ddsi_protocol_version_t;
typedef uint64_t ddsi_seqno_t;
#define DDSI_MAX_SEQ_NUMBER INT64_MAX
#define PGUIDPREFIX(gp) (gp).u[0], (gp).u[1], (gp).u[2]
#define PGUID(g) PGUIDPREFIX ((g).prefix), (g).entityid.u
#define PGUIDPREFIXFMT "%" PRIx32 ":%" PRIx32 ":%" PRIx32
#define PGUIDFMT PGUIDPREFIXFMT ":%" PRIx32
typedef struct {
uint8_t id[2];
} ddsi_vendorid_t;
typedef struct ddsi_protocolid {
uint8_t id[4];
} ddsi_protocolid_t;
typedef struct ddsi_rtps_header {
ddsi_protocolid_t protocol;
ddsi_protocol_version_t version;
ddsi_vendorid_t vendorid;
ddsi_guid_prefix_t guid_prefix;
} ddsi_rtps_header_t;
#define DDSI_RTPS_MESSAGE_HEADER_SIZE (sizeof (ddsi_rtps_header_t))
typedef struct ddsi_rtps_submessage_header {
uint8_t submessageId;
uint8_t flags;
uint16_t octetsToNextHeader;
} ddsi_rtps_submessage_header_t;
#define DDSI_RTPS_SUBMESSAGE_HEADER_SIZE (sizeof (ddsi_rtps_submessage_header_t))
#define DDSI_RTPS_SUBMESSAGE_FLAG_ENDIANNESS 0x01u
typedef enum ddsi_rtps_submessage_kind {
DDSI_RTPS_SMID_PAD = 0x01,
DDSI_RTPS_SMID_ACKNACK = 0x06,
DDSI_RTPS_SMID_HEARTBEAT = 0x07,
DDSI_RTPS_SMID_GAP = 0x08,
DDSI_RTPS_SMID_INFO_TS = 0x09,
DDSI_RTPS_SMID_INFO_SRC = 0x0c,
DDSI_RTPS_SMID_INFO_REPLY_IP4 = 0x0d,
DDSI_RTPS_SMID_INFO_DST = 0x0e,
DDSI_RTPS_SMID_INFO_REPLY = 0x0f,
DDSI_RTPS_SMID_NACK_FRAG = 0x12,
DDSI_RTPS_SMID_HEARTBEAT_FRAG = 0x13,
DDSI_RTPS_SMID_DATA = 0x15,
DDSI_RTPS_SMID_DATA_FRAG = 0x16,
/* security-specific sub messages */
DDSI_RTPS_SMID_SEC_BODY = 0x30,
DDSI_RTPS_SMID_SEC_PREFIX = 0x31,
DDSI_RTPS_SMID_SEC_POSTFIX = 0x32,
DDSI_RTPS_SMID_SRTPS_PREFIX = 0x33,
DDSI_RTPS_SMID_SRTPS_POSTFIX = 0x34,
/* vendor-specific sub messages (0x80 .. 0xff) */
DDSI_RTPS_SMID_ADLINK_MSG_LEN = 0x81,
DDSI_RTPS_SMID_ADLINK_ENTITY_ID = 0x82
} ddsi_rtps_submessage_kind_t;
typedef struct ddsi_rtps_info_src {
ddsi_rtps_submessage_header_t smhdr;
unsigned unused;
ddsi_protocol_version_t version;
ddsi_vendorid_t vendorid;
ddsi_guid_prefix_t guid_prefix;
} ddsi_rtps_info_src_t;
#if DDSRT_ENDIAN == DDSRT_LITTLE_ENDIAN
#define DDSI_RTPS_CDR_BE 0x0000u
#define DDSI_RTPS_CDR_LE 0x0100u
#define DDSI_RTPS_PL_CDR_BE 0x0200u
#define DDSI_RTPS_PL_CDR_LE 0x0300u
#define DDSI_RTPS_CDR2_BE 0x0600u
#define DDSI_RTPS_CDR2_LE 0x0700u
#define DDSI_RTPS_D_CDR2_BE 0x0800u
#define DDSI_RTPS_D_CDR2_LE 0x0900u
#define DDSI_RTPS_PL_CDR2_BE 0x0a00u
#define DDSI_RTPS_PL_CDR2_LE 0x0b00u
#define DDSI_RTPS_SAMPLE_NATIVE 0x00c0u
#define DDSI_RTPS_CDR_ENC_LE(x) (assert((x) != DDSI_RTPS_SAMPLE_NATIVE), ((x) & 0x0100) == 0x0100)
#define DDSI_RTPS_CDR_ENC_IS_NATIVE(x) (DDSI_RTPS_CDR_ENC_LE ((x)))
#define DDSI_RTPS_CDR_ENC_IS_VALID(x) (!((x) > DDSI_RTPS_PL_CDR2_LE || (x) == DDSI_RTPS_SAMPLE_NATIVE || (x) == 0x0400 || (x) == 0x0500))
#define DDSI_RTPS_CDR_ENC_TO_NATIVE(x) (assert((x) != DDSI_RTPS_SAMPLE_NATIVE), ((x) | 0x0100))
#else
#define DDSI_RTPS_CDR_BE 0x0000u
#define DDSI_RTPS_CDR_LE 0x0001u
#define DDSI_RTPS_PL_CDR_BE 0x0002u
#define DDSI_RTPS_PL_CDR_LE 0x0003u
#define DDSI_RTPS_CDR2_BE 0x0006u
#define DDSI_RTPS_CDR2_LE 0x0007u
#define DDSI_RTPS_D_CDR2_BE 0x0008u
#define DDSI_RTPS_D_CDR2_LE 0x0009u
#define DDSI_RTPS_PL_CDR2_BE 0x000au
#define DDSI_RTPS_PL_CDR2_LE 0x000bu
#define DDSI_RTPS_SAMPLE_NATIVE 0xc000u
#define DDSI_RTPS_CDR_ENC_LE(x) (assert((x) != DDSI_RTPS_SAMPLE_NATIVE), ((x) & 0x0001) == 0x0001)
#define DDSI_RTPS_CDR_ENC_IS_NATIVE(x) (!DDSI_RTPS_CDR_ENC_LE ((x)))
#define DDSI_RTPS_CDR_ENC_IS_VALID(x) (!((x) > DDSI_RTPS_PL_CDR2_LE || (x) == DDSI_RTPS_SAMPLE_NATIVE || (x) == 0x0004 || (x) == 0x0005))
#define DDSI_RTPS_CDR_ENC_TO_NATIVE(x) (assert((x) != DDSI_RTPS_SAMPLE_NATIVE), ((x) & ~0x0001))
#endif
typedef struct ddsi_rtps_msg_len {
ddsi_rtps_submessage_header_t smhdr;
uint32_t length;
} ddsi_rtps_msg_len_t;
#define DDSI_PARTICIPANT_MESSAGE_DATA_KIND_UNKNOWN 0x0u
#define DDSI_PARTICIPANT_MESSAGE_DATA_KIND_AUTOMATIC_LIVELINESS_UPDATE 0x1u
#define DDSI_PARTICIPANT_MESSAGE_DATA_KIND_MANUAL_LIVELINESS_UPDATE 0x2u
#define DDSI_PARTICIPANT_MESSAGE_DATA_VENDOR_SPECIFIC_KIND_FLAG 0x8000000u
/* predefined entity ids; here viewed as an unsigned int, on the
network as four bytes corresponding to the integer in network byte
order */
#define DDSI_ENTITYID_UNKNOWN 0x0
#define DDSI_ENTITYID_PARTICIPANT 0x1c1
#define DDSI_ENTITYID_SEDP_BUILTIN_TOPIC_WRITER 0x2c2
#define DDSI_ENTITYID_SEDP_BUILTIN_TOPIC_READER 0x2c7
#define DDSI_ENTITYID_SEDP_BUILTIN_PUBLICATIONS_WRITER 0x3c2
#define DDSI_ENTITYID_SEDP_BUILTIN_PUBLICATIONS_READER 0x3c7
#define DDSI_ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_WRITER 0x4c2
#define DDSI_ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_READER 0x4c7
#define DDSI_ENTITYID_SPDP_BUILTIN_PARTICIPANT_WRITER 0x100c2
#define DDSI_ENTITYID_SPDP_BUILTIN_PARTICIPANT_READER 0x100c7
#define DDSI_ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER 0x200c2
#define DDSI_ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER 0x200c7
#define DDSI_ENTITYID_TL_SVC_BUILTIN_REQUEST_WRITER 0x300c3
#define DDSI_ENTITYID_TL_SVC_BUILTIN_REQUEST_READER 0x300c4
#define DDSI_ENTITYID_TL_SVC_BUILTIN_REPLY_WRITER 0x301c3
#define DDSI_ENTITYID_TL_SVC_BUILTIN_REPLY_READER 0x301c4
#define DDSI_ENTITYID_SEDP_BUILTIN_PUBLICATIONS_SECURE_WRITER 0xff0003c2
#define DDSI_ENTITYID_SEDP_BUILTIN_PUBLICATIONS_SECURE_READER 0xff0003c7
#define DDSI_ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_SECURE_WRITER 0xff0004c2
#define DDSI_ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_SECURE_READER 0xff0004c7
#define DDSI_ENTITYID_P2P_BUILTIN_PARTICIPANT_STATELESS_MESSAGE_WRITER 0x201c3
#define DDSI_ENTITYID_P2P_BUILTIN_PARTICIPANT_STATELESS_MESSAGE_READER 0x201c4
#define DDSI_ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_SECURE_WRITER 0xff0200c2
#define DDSI_ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_SECURE_READER 0xff0200c7
#define DDSI_ENTITYID_P2P_BUILTIN_PARTICIPANT_VOLATILE_SECURE_WRITER 0xff0202c3
#define DDSI_ENTITYID_P2P_BUILTIN_PARTICIPANT_VOLATILE_SECURE_READER 0xff0202c4
#define DDSI_ENTITYID_SPDP_RELIABLE_BUILTIN_PARTICIPANT_SECURE_WRITER 0xff0101c2
#define DDSI_ENTITYID_SPDP_RELIABLE_BUILTIN_PARTICIPANT_SECURE_READER 0xff0101c7
#define DDSI_ENTITYID_SOURCE_MASK 0xc0
#define DDSI_ENTITYID_SOURCE_USER 0x00
#define DDSI_ENTITYID_SOURCE_BUILTIN 0xc0
#define DDSI_ENTITYID_SOURCE_VENDOR 0x40
#define DDSI_ENTITYID_KIND_MASK 0x3f
#define DDSI_ENTITYID_KIND_WRITER_WITH_KEY 0x02
#define DDSI_ENTITYID_KIND_WRITER_NO_KEY 0x03
#define DDSI_ENTITYID_KIND_READER_NO_KEY 0x04
#define DDSI_ENTITYID_KIND_READER_WITH_KEY 0x07
/* Entity kind topic is not defined in the RTPS spec, so the following two
should to be used as vendor specific entities using DDSI_ENTITYID_SOURCE_VENDOR.
Two entity kinds for built-in and user topics are required, because the
vendor and built-in flags cannot be combined. */
#define DDSI_ENTITYID_KIND_CYCLONE_TOPIC_BUILTIN 0x0c
#define DDSI_ENTITYID_KIND_CYCLONE_TOPIC_USER 0x0d
#define DDSI_ENTITYID_ALLOCSTEP 0x100
/* 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 /* DDSI_PROTOCOL_H */