aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rtps.h
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2008-08-13 06:09:54 +0000
committerAnders Broman <anders.broman@ericsson.com>2008-08-13 06:09:54 +0000
commita143298812a9511991f9400ed3c2b848a6e57774 (patch)
tree99a2c6e628960d8b79af6aebe13d71c77b8afb09 /epan/dissectors/packet-rtps.h
parent7ec695d943d28417bf94e9516bb7607d575e016e (diff)
From Fabrizio Bertocci:
- The RTPS packet dissector has been rewritten from scratch to dissect RTPS 1.0 - 1.2 packets svn path=/trunk/; revision=25994
Diffstat (limited to 'epan/dissectors/packet-rtps.h')
-rw-r--r--epan/dissectors/packet-rtps.h509
1 files changed, 285 insertions, 224 deletions
diff --git a/epan/dissectors/packet-rtps.h b/epan/dissectors/packet-rtps.h
index cbd768f2e3..a3df24625a 100644
--- a/epan/dissectors/packet-rtps.h
+++ b/epan/dissectors/packet-rtps.h
@@ -1,21 +1,53 @@
-/*
- * $Id$
+/* packet-rtps.h
+ * ~~~~~~~~~~~~~
*
- * AUTHOR: Petr Smolik petr.smolik@wo.cz
+ * Routines for Real-Time Publish-Subscribe Protocol (RTPS) dissection
*
- * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/
- * --------------------------------------------------------------------
+ * Copyright 2005, Fabrizio Bertocci <fabrizio@rti.com>
+ * Real-Time Innovations, Inc.
+ * 3975 Freedom Circle
+ * Santa Clara, CA 95054
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * Copyright 2003, LUKAS POKORNY <maskis@seznam.cz>
+ * PETR SMOLIK <petr.smolik@wo.cz>
+ * ZDENEK SEBEK <sebek@fel.cvut.cz>
+ *
+ * Czech Technical University in Prague
+ * Faculty of Electrical Engineering <www.fel.cvut.cz>
+ * Department of Control Engineering <dce.felk.cvut.cz>
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@ethereal.com>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
*
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * -------------------------------------
+ *
+ * The following file is part of the RTPS packet dissector for Wireshark.
+ *
+ * RTPS protocol was developed by Real-Time Innovations, Inc. as wire
+ * protocol for Data Distribution System.
+ * Additional information at:
+ * Full OMG DDS Standard Specification:
+ * http://www.omg.org/cgi-bin/doc?ptc/2003-07-07
+ *
+ * NDDS and RTPS information: http://www.rti.com/resources.html
+ *
*/
#ifndef _TYPEDEFS_DEFINES_RTPS_H
@@ -25,223 +57,252 @@
extern "C" {
#endif
-#define RTPS_HEADER_LENGTH 16
-
-#define MAX_PATHNAME 128
-#define MAX_TYPENAME 128
-#define ORTE_TRUE 1
-#define ORTE_FALSE 0
-
-typedef gint8 Boolean;
-
-typedef gint8 PathName[MAX_PATHNAME];
-typedef gint8 TypeName[MAX_TYPENAME];
-
-typedef gint32 TypeChecksum;
-
-/*****************************************************************/
-/* Wire Protocol Specification (WPS) */
-/*****************************************************************/
-
-
-/**
- Host identifier.
-
- for example: IP address working nodes
-*/
-typedef gint32 HostId;
-#define HID_UNKNOWN 0x00
-
-/**
- Application identifier.
-
- composed from: 3 bytes - instance Id
- 1 byte - appKind (1 - ManagedApplication, 2 - Manager)
-*/
-typedef gint32 AppId;
-#define AID_UNKNOWN 0x00
-#define MANAGEDAPPLICATION 0x01
-#define MANAGER 0x02
-
-/**
- Object identifier.
-
- composed from: 3 bytes - instance Id
- 1 byte - objKind
-*/
-typedef gint32 ObjectId;
-
-#define OID_UNKNOWN 0x00000000
-#define OID_APP 0x000001C1
-#define OID_WRITE_APPSELF 0x000008C2
-#define OID_READ_APPSELF 0x000008C7
-#define OID_WRITE_APP 0x000001C2
-#define OID_READ_APP 0x000001C7
-#define OID_WRITE_MGR 0x000007C2
-#define OID_READ_MGR 0x000007C7
-#define OID_WRITE_PUBL 0x000003C2
-#define OID_READ_PUBL 0x000003C7
-#define OID_WRITE_SUBS 0x000004C2
-#define OID_READ_SUBS 0x000004C7
-/* Kind */
-#define OID_APPLICATION 0x01
-#define OID_CSTWRITER 0x02
-#define OID_PUBLICATION 0x03
-#define OID_SUBSCRIPTION 0x04
-#define OID_CSTREADER 0x07
-
-#define OID_USEROBJ 0x00
-#define OID_RESUSEROBJ 0x40
-#define OID_METAOBJ 0x80
-#define OID_RESMETAOBJ 0xC0
-
-typedef struct {
- HostId hid;
- AppId aid;
- ObjectId oid;
- } GUID_RTPS;
-
-typedef struct {
- gint8 major;
- gint8 minor;
- } VendorId;
-
-#define VENDOR_ID_UNKNOWN(id) {id.major=0;id.minor=0;}
-#define VENDOR_ID_RTI(id) {id.major=1;id.minor=1;}
-#define VENDOR_ID_OCERA(id) {id.major=0;id.minor=0;}
-
-typedef struct {
- gint8 major;
- gint8 minor;
- } ProtocolVersion;
-
-#define PROTOCOL_VERSION_1_0(pv) {pv.major=1;pv.minor=0;}
-
-typedef struct {
- gint32 high;
- gint32 low;
- } SequenceNumber;
-
-
-#define SEQUENCE_NUMBER_NONE(sn) {sn.high=0;sn.low=0;}
-#define SEQUENCE_NUMBER_UNKNOWN(sn) {sn.high=0x7fffffff;sn.low=0xffffffff;}
-
-
-typedef struct {
- gint32 seconds; /* time in seconds */
- guint32 fraction; /* time in seconds / 2^32 */
- } NtpTime;
-
-#define NTPTIME_ZERO(t) {t.seconds=0;t.fraction=0;}
-#define NTPTIME_BUILD(t,s) {t.seconds=s;t.fraction=0;}
-#define NTPTIME_INFINITE(t) {t.seconds=0xffffffff;t.fraction=0;}
-
-typedef gint32 IPAddress;
-
-#define IPADDRESS_INVALID 0
-
-typedef gint32 Port;
-
-#define PORT_INVALID 0
typedef enum {
- PAD = 0x01,
- VAR = 0x02,
- ISSUE = 0x03,
- ACK = 0x06,
- HEARTBEAT = 0x07,
- GAP = 0x08,
- INFO_TS = 0x09,
- INFO_SRC = 0x0c,
- INFO_REPLY = 0x0d,
- INFO_DST = 0x0e,
- APP_QUIT = 0x90
- } SubmessageId;
-
-typedef struct {
- ProtocolVersion sourceVersion;
- VendorId sourceVendorId;
- HostId sourceHostId;
- AppId sourceAppId;
- HostId destHostId;
- AppId destAppId;
- IPAddress unicastReplyIPAddress;
- Port unicastReplyPort;
- IPAddress multicastReplyIPAddress;
- Port multicastReplyPort;
- Boolean haveTimestamp;
- NtpTime timestamp;
- } MessageInterpret;
-
-
-#define PID_PAD 0x00
-#define PID_SENTINEL 0x01
-#define PID_EXPIRATION_TIME 0x02
-#define PID_PERSISTENCE 0x03
-#define PID_MINIMUM_SEPARATION 0x04
-#define PID_TOPIC 0x05
-#define PID_STRENGTH 0x06
-#define PID_TYPE_NAME 0x07
-#define PID_TYPE_CHECKSUM 0x08
-#define RTPS_PID_TYPE2_NAME 0x09
-#define RTPS_PID_TYPE2_CHECKSUM 0x0a
-#define PID_METATRAFFIC_MULTICAST_IPADDRESS 0x0b /*tady byla chyba MATA_TRAFF....*/
-#define PID_APP_IPADDRESS 0x0c
-#define PID_METATRAFFIC_UNICAST_PORT 0x0d
-#define PID_USERDATA_UNICAST_PORT 0x0e
-#define PID_IS_RELIABLE 0x0f
-#define PID_EXPECTS_ACK 0x10
-#define PID_USERDATA_MULTICAST_IPADDRESS 0x11
-#define PID_MANAGER_KEY 0x12
-#define PID_SEND_QUEUE_SIZE 0x13
-#define PID_RELIABILITY_ENABLED 0x14
-#define PID_PROTOCOL_VERSION 0x15
-#define PID_VENDOR_ID 0x16
-#define PID_VARGAPPS_SEQUENCE_NUMBER_LAST 0x17
-#define PID_RECV_QUEUE_SIZE 0x18
-#define PID_RELIABILITY_OFFERED 0x19
-#define PID_RELIABILITY_REQUESTED 0x1a
-
-/* possible values for PID_RELIABILITY_REQUEST */
-#define PID_VALUE_RELIABILITY_BEST_EFFORTS 0x01
-#define PID_VALUE_RELIABILITY_STRICT 0x02
-
-typedef guint16 ParameterId;
-typedef guint16 ParameterLength;
-
-/* State Machines */
-typedef enum {
- MAYSENDHB = 0x01,
- MUSTSENDHB = 0x02,
- SENDHB = 0x03
- } StateMachineHB;
+ RTI_CDR_TK_NULL,
+ RTI_CDR_TK_SHORT,
+ RTI_CDR_TK_LONG,
+ RTI_CDR_TK_USHORT,
+ RTI_CDR_TK_ULONG,
+ RTI_CDR_TK_FLOAT,
+ RTI_CDR_TK_DOUBLE,
+ RTI_CDR_TK_BOOLEAN,
+ RTI_CDR_TK_CHAR,
+ RTI_CDR_TK_OCTET,
+ RTI_CDR_TK_STRUCT,
+ RTI_CDR_TK_UNION,
+ RTI_CDR_TK_ENUM,
+ RTI_CDR_TK_STRING,
+ RTI_CDR_TK_SEQUENCE,
+ RTI_CDR_TK_ARRAY,
+ RTI_CDR_TK_ALIAS,
+ RTI_CDR_TK_LONGLONG,
+ RTI_CDR_TK_ULONGLONG,
+ RTI_CDR_TK_LONGDOUBLE,
+ RTI_CDR_TK_WCHAR,
+ RTI_CDR_TK_WSTRING,
+ RTI_CDR_TK_VALUE
+} RTICdrTCKind;
+
+
+/* Traffic type */
+#define PORT_BASE (7400)
+#define PORT_METATRAFFIC_UNICAST (0)
+#define PORT_USERTRAFFIC_MULTICAST (1)
+#define PORT_METATRAFFIC_MULTICAST (2)
+#define PORT_USERTRAFFIC_UNICAST (3)
+
+/* Flags defined in the 'flag' bitmask of a submessage */
+#define FLAG_E (0x01) /* Common to all the submessages */
+#define FLAG_DATA_D (0x02)
+#define FLAG_DATA_A (0x04)
+#define FLAG_DATA_H (0x08)
+#define FLAG_DATA_Q (0x10)
+#define FLAG_DATA_U (0x20)
+#define FLAG_NOKEY_DATA_Q (0x02)
+#define FLAG_NOKEY_DATA_D (0x04)
+#define FLAG_ACKNACK_F (0x02)
+#define FLAG_HEARTBEAT_F (0x02)
+#define FLAG_GAP_F (0x02)
+#define FLAG_INFO_TS_T (0x02)
+#define FLAG_INFO_REPLY_IP4_M (0x02)
+#define FLAG_INFO_REPLY_M (0x02)
+
+
+
+/* The following PIDs are defined since RTPS 1.0 */
+#define PID_PAD (0x00)
+#define PID_SENTINEL (0x01)
+#define PID_PARTICIPANT_LEASE_DURATION (0x02)
+#define PID_TIME_BASED_FILTER (0x04)
+#define PID_TOPIC_NAME (0x05)
+#define PID_OWNERSHIP_STRENGTH (0x06)
+#define PID_TYPE_NAME (0x07)
+#define PID_METATRAFFIC_MULTICAST_IPADDRESS (0x0b)
+#define PID_DEFAULT_UNICAST_IPADDRESS (0x0c)
+#define PID_METATRAFFIC_UNICAST_PORT (0x0d)
+#define PID_DEFAULT_UNICAST_PORT (0x0e)
+#define PID_MULTICAST_IPADDRESS (0x11)
+#define PID_PROTOCOL_VERSION (0x15)
+#define PID_VENDOR_ID (0x16)
+#define PID_RELIABILITY (0x1a)
+#define PID_LIVELINESS (0x1b)
+#define PID_DURABILITY (0x1d)
+#define PID_DURABILITY_SERVICE (0x1e)
+#define PID_OWNERSHIP (0x1f)
+#define PID_PRESENTATION (0x21)
+#define PID_DEADLINE (0x23)
+#define PID_DESTINATION_ORDER (0x25)
+#define PID_LATENCY_BUDGET (0x27)
+#define PID_PARTITION (0x29)
+#define PID_LIFESPAN (0x2b)
+#define PID_USER_DATA (0x2c)
+#define PID_GROUP_DATA (0x2d)
+#define PID_TOPIC_DATA (0x2e)
+#define PID_UNICAST_LOCATOR (0x2f)
+#define PID_MULTICAST_LOCATOR (0x30)
+#define PID_DEFAULT_UNICAST_LOCATOR (0x31)
+#define PID_METATRAFFIC_UNICAST_LOCATOR (0x32)
+#define PID_METATRAFFIC_MULTICAST_LOCATOR (0x33)
+#define PID_PARTICIPANT_MANUAL_LIVELINESS_COUNT (0x34)
+#define PID_CONTENT_FILTER_PROPERTY (0x35)
+#define PID_PROPERTY_LIST (0x36)
+#define PID_HISTORY (0x40)
+#define PID_RESOURCE_LIMIT (0x41)
+#define PID_DEFAULT_EXPECTS_INLINE_QOS (0x43)
+#define PID_PARTICIPANT_BUILTIN_ENDPOINTS (0x44)
+#define PID_METATRAFFIC_UNICAST_IPADDRESS (0x45)
+#define PID_METATRAFFIC_MULTICAST_PORT (0x46)
+#define PID_TYPECODE (0x47)
+#define PID_PARTICIPANT_GUID (0x50)
+#define PID_PARTICIPANT_ENTITY_ID (0x51)
+#define PID_GROUP_GUID (0x52)
+#define PID_GROUP_ENTITY_ID (0x53)
+#define PID_FILTER_SIGNATURE (0x55)
+#define PID_COHERENT_SET (0x56)
+
+/* The following QoS are deprecated */
+#define PID_RELIABILITY_OFFERED (0x19)
+#define PID_LIVELINESS_OFFERED (0x1c)
+#define PID_OWNERSHIP_OFFERED (0x20)
+#define PID_PRESENTATION_OFFERED (0x22)
+#define PID_DEADLINE_OFFERED (0x24)
+#define PID_DESTINATION_ORDER_OFFERED (0x26)
+#define PID_LATENCY_BUDGET_OFFERED (0x28)
+#define PID_PARTITION_OFFERED (0x2a)
+#define PID_PERSISTENCE (0x03)
+#define PID_TYPE_CHECKSUM (0x08)
+#define PID_TYPE2_NAME (0x09)
+#define PID_TYPE2_CHECKSUM (0x0a)
+#define PID_IS_RELIABLE (0x0f)
+#define PID_EXPECTS_ACK (0x10)
+#define PID_MANAGER_KEY (0x12)
+#define PID_SEND_QUEUE_SIZE (0x13)
+#define PID_RECV_QUEUE_SIZE (0x18)
+#define PID_VARGAPPS_SEQUENCE_NUMBER_LAST (0x17)
+#define PID_RELIABILITY_ENABLED (0x14)
+
+/* appId.appKind possible values */
+#define APPKIND_UNKNOWN (0x00)
+#define APPKIND_MANAGED_APPLICATION (0x01)
+#define APPKIND_MANAGER (0x02)
+
+
+
+/* Predefined EntityId */
+#define ENTITYID_UNKNOWN (0x00000000)
+#define ENTITYID_BUILTIN_TOPIC_WRITER (0x000002c2)
+#define ENTITYID_BUILTIN_TOPIC_READER (0x000002c7)
+#define ENTITYID_BUILTIN_PUBLICATIONS_WRITER (0x000003c2)
+#define ENTITYID_BUILTIN_PUBLICATIONS_READER (0x000003c7)
+#define ENTITYID_BUILTIN_SUBSCRIPTIONS_WRITER (0x000004c2)
+#define ENTITYID_BUILTIN_SUBSCRIPTIONS_READER (0x000004c7)
+#define ENTITYID_BUILTIN_SDP_PARTICIPANT_WRITER (0x000100c2)
+#define ENTITYID_BUILTIN_SDP_PARTICIPANT_READER (0x000100c7)
+
+/* Deprecated EntityId */
+#define ENTITYID_APPLICATIONS_WRITER (0x000001c2)
+#define ENTITYID_APPLICATIONS_READER (0x000001c7)
+#define ENTITYID_CLIENTS_WRITER (0x000005c2)
+#define ENTITYID_CLIENTS_READER (0x000005c7)
+#define ENTITYID_SERVICES_WRITER (0x000006c2)
+#define ENTITYID_SERVICES_READER (0x000006c7)
+#define ENTITYID_MANAGERS_WRITER (0x000007c2)
+#define ENTITYID_MANAGERS_READER (0x000007c7)
+#define ENTITYID_APPLICATION_SELF (0x000008c1)
+#define ENTITYID_APPLICATION_SELF_WRITER (0x000008c2)
+#define ENTITYID_APPLICATION_SELF_READER (0x000008c7)
+
+/* Predefined Entity Kind */
+#define ENTITYKIND_APPDEF_UNKNOWN (0x00)
+#define ENTITYKIND_APPDEF_PARTICIPANT (0x01)
+#define ENTITYKIND_APPDEF_WRITER_WITH_KEY (0x02)
+#define ENTITYKIND_APPDEF_WRITER_NO_KEY (0x03)
+#define ENTITYKIND_APPDEF_READER_NO_KEY (0x04)
+#define ENTITYKIND_APPDEF_READER_WITH_KEY (0x07)
+#define ENTITYKIND_BUILTIN_PARTICIPANT (0xc1)
+#define ENTITYKIND_BUILTIN_WRITER_WITH_KEY (0xc2)
+#define ENTITYKIND_BUILTIN_WRITER_NO_KEY (0xc3)
+#define ENTITYKIND_BUILTIN_READER_NO_KEY (0xc4)
+#define ENTITYKIND_BUILTIN_READER_WITH_KEY (0xc7)
+
+
+/* Submessage Type */
+#define PAD (0x01)
+#define DATA (0x02)
+#define NOKEY_DATA (0x03)
+#define ACKNACK (0x06)
+#define HEARTBEAT (0x07)
+#define GAP (0x08)
+#define INFO_TS (0x09)
+#define INFO_SRC (0x0c)
+#define INFO_REPLY_IP4 (0x0d)
+#define INFO_DST (0x0e)
+#define INFO_REPLY (0x0f)
+
+
+
+/* An invalid IP Address:
+ * Make sure the _STRING macro is bigger than a normal IP
+ */
+#define IPADDRESS_INVALID (0)
+#define IPADDRESS_INVALID_STRING "ADDRESS_INVALID (0x00000000)"
+
+/* Identifies the value of an invalid port number:
+ * Make sure the _STRING macro is bigger than a normal port
+ */
+#define PORT_INVALID (0)
+#define PORT_INVALID_STRING "PORT_INVALID"
+
+/* Protocol Vendor Information (guint16) */
+#define RTPS_VENDOR_UNKNOWN (0x0000)
+#define RTPS_VENDOR_UNKNOWN_STRING "VENDOR_ID_UNKNOWN (0x0000)"
+#define RTPS_VENDOR_RTI (0x0101)
+#define RTPS_VENDOR_RTI_STRING "Real-Time Innovations, Inc."
+
+/* Parameter Liveliness */
+#define LIVELINESS_AUTOMATIC (0)
+#define LIVELINESS_BY_PARTICIPANT (1)
+#define LIVELINESS_BY_TOPIC (2)
+
+/* Parameter Durability */
+#define DURABILITY_VOLATILE (0)
+#define DURABILITY_TRANSIENT_LOCAL (1)
+#define DURABILITY_TRANSIENT (2)
+#define DURABILITY_PERSISTENT (3)
+
+/* Parameter Ownership */
+#define OWNERSHIP_SHARED (0)
+#define OWNERSHIP_EXCLUSIVE (1)
+
+/* Parameter Presentation */
+#define PRESENTATION_INSTANCE (0)
+#define PRESENTATION_TOPIC (1)
+#define PRESENTATION_GROUP (2)
+
+
+#define LOCATOR_KIND_INVALID (-1)
+#define LOCATOR_KIND_RESERVED (0)
+#define LOCATOR_KIND_UDPV4 (1)
+#define LOCATOR_KIND_UDPV6 (2)
+
+/* History Kind */
+#define HISTORY_KIND_KEEP_LAST (0)
+#define HISTORY_KIND_KEEP_ALL (1)
+
+/* Reliability Values */
+#define RELIABILITY_BEST_EFFORT (1)
+#define RELIABILITY_RELIABLE (2)
+
+/* Destination Order */
+#define BY_RECEPTION_TIMESTAMP (0)
+#define BY_SOURCE_TIMESTAMP (1)
+
+
-typedef enum {
- NOTHNIGTOSEND = 0x01,
- MUSTSENDDATA = 0x02
- } StateMachineSend;
-typedef enum {
- NEW = 0x01,
- TOSEND = 0x02,
- UNDERWAY = 0x03,
- UNACKNOWLEDGED = 0x04,
- ANNOUCED = 0x05,
- ACKNOWLEDGED = 0x06
- } StateMachineChFReader;
-typedef enum {
- WAITING = 0x01,
- PULLING = 0x02,
- ACKPENDING = 0x03
- } StateMachineACK;
-typedef enum {
- FUTURE = 0x01,
- REQUESTED = 0x02,
- MISSING = 0x03,
- RECEIVED = 0x04
- } StateMachineChFWriter;
#ifdef __cplusplus
} /* extern "C"*/