aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rtps2.h
blob: 38bee43e0280d416f1edea4a77e3340619c63a21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
/* packet-rtps2.h
 * ~~~~~~~~~~~~~~
 *
 * Routines for Real-Time Publish-Subscribe Protocol (RTPS) dissection
 *
 * Copyright 2005, Fabrizio Bertocci <fabrizio@rti.com>
 * Real-Time Innovations, Inc.
 * 385 Moffett Park Drive
 * Sunnyvale, CA 94089
 *
 * $Id$
 *
 * Wireshark - Network traffic analyzer
 * By Gerald Combs <gerald@wireshark.org>
 * 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.
 *  
 * 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.
 *
 *                  -------------------------------------
 *
 * This is the RTPS packet dissector for RTPS version 2.x
 *
 * RTPS protocol was initially developed by Real-Time Innovations, Inc. as wire 
 * protocol for Data Distribution System, and then adopted as a standard by
 * the Object Management Group (as version 2.0).
 *
 * Additional information at:
 *   Full OMG DDS Standard Specification: 
 *                             http://www.omg.org/cgi-bin/doc?ptc/2003-07-07
 *   
 *   RTI DDS and RTPS information: http://www.rti.com/resources.html
 *
 */


/* Note: This file is only included from packet-rtps2.c, so there is no risk
 * of namespace conflicts with all those macros.
 */
 
#ifndef _TYPEDEFS_DEFINES_RTPS2_H
#define _TYPEDEFS_DEFINES_RTPS2_H

#ifdef __cplusplus
extern "C" {
#endif


typedef enum {
    RTI_CDR_TK_NULL=0,
    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,
    RTI_CDR_TK_VALUE_PARARM
} 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_Q             (0x02)
#define FLAG_DATA_D             (0x04)
#define FLAG_DATA_H             (0x08)
#define FLAG_DATA_I             (0x10)

#define FLAG_DATA_FRAG_Q        (0x02)
#define FLAG_DATA_FRAG_H        (0x04)


#define FLAG_NOKEY_DATA_Q       (0x02)
#define FLAG_NOKEY_DATA_D       (0x04)
#define FLAG_NOKEY_DATA_FRAG_Q  (0x02)
#define FLAG_NOKEY_DATA_FRAG_D  (0x04)
#define FLAG_ACKNACK_F          (0x02)

#define FLAG_HEARTBEAT_F        (0x02)
#define FLAG_HEARTBEAT_L        (0x04)

#define FLAG_INFO_TS_T          (0x02)

#define FLAG_INFO_REPLY_IP4_M   (0x02)

#define FLAG_INFO_REPLY_M       (0x02)

#define FLAG_RTPS_DATA_Q        (0x02)
#define FLAG_RTPS_DATA_D        (0x04)
#define FLAG_RTPS_DATA_K        (0x08)

#define FLAG_RTPS_DATA_FRAG_Q   (0x02)
#define FLAG_RTPS_DATA_FRAG_K   (0x04)

#define FLAG_RTPS_DATA_BATCH_Q  (0x02)

#define FLAG_SAMPLE_INFO_T      (0x01)
#define FLAG_SAMPLE_INFO_Q      (0x02)
#define FLAG_SAMPLE_INFO_O      (0x04)
#define FLAG_SAMPLE_INFO_D      (0x08)
#define FLAG_SAMPLE_INFO_I      (0x10)
#define FLAG_SAMPLE_INFO_K      (0x20)


/* The following PIDs are defined since RTPS 1.0 */
#define PID_PAD                                 (0x0000)
#define PID_SENTINEL                            (0x0001)
#define PID_PARTICIPANT_LEASE_DURATION          (0x0002)
#define PID_TIME_BASED_FILTER                   (0x0004)
#define PID_TOPIC_NAME                          (0x0005)
#define PID_OWNERSHIP_STRENGTH                  (0x0006)
#define PID_TYPE_NAME                           (0x0007)
#define PID_METATRAFFIC_MULTICAST_IPADDRESS     (0x000b)
#define PID_DEFAULT_UNICAST_IPADDRESS           (0x000c)
#define PID_METATRAFFIC_UNICAST_PORT            (0x000d)
#define PID_DEFAULT_UNICAST_PORT                (0x000e)
#define PID_MULTICAST_IPADDRESS                 (0x0011)
#define PID_PROTOCOL_VERSION                    (0x0015)
#define PID_VENDOR_ID                           (0x0016)
#define PID_RELIABILITY                         (0x001a)
#define PID_LIVELINESS                          (0x001b)
#define PID_DURABILITY                          (0x001d)
#define PID_DURABILITY_SERVICE                  (0x001e)
#define PID_OWNERSHIP                           (0x001f)
#define PID_PRESENTATION                        (0x0021)
#define PID_DEADLINE                            (0x0023)
#define PID_DESTINATION_ORDER                   (0x0025)
#define PID_LATENCY_BUDGET                      (0x0027)
#define PID_PARTITION                           (0x0029)
#define PID_LIFESPAN                            (0x002b)
#define PID_USER_DATA                           (0x002c)
#define PID_GROUP_DATA                          (0x002d)
#define PID_TOPIC_DATA                          (0x002e)
#define PID_UNICAST_LOCATOR                     (0x002f)
#define PID_MULTICAST_LOCATOR                   (0x0030)
#define PID_DEFAULT_UNICAST_LOCATOR             (0x0031)
#define PID_METATRAFFIC_UNICAST_LOCATOR         (0x0032)
#define PID_METATRAFFIC_MULTICAST_LOCATOR       (0x0033)
#define PID_PARTICIPANT_MANUAL_LIVELINESS_COUNT (0x0034)
#define PID_CONTENT_FILTER_PROPERTY             (0x0035)
#define PID_PROPERTY_LIST_OLD                   (0x0036)        /* For compatibility between 4.2d and 4.2e */
#define PID_HISTORY                             (0x0040)
#define PID_RESOURCE_LIMIT                      (0x0041)
#define PID_EXPECTS_INLINE_QOS                  (0x0043)
#define PID_PARTICIPANT_BUILTIN_ENDPOINTS       (0x0044)
#define PID_METATRAFFIC_UNICAST_IPADDRESS       (0x0045)
#define PID_METATRAFFIC_MULTICAST_PORT          (0x0046)
#define PID_DEFAULT_MULTICAST_LOCATOR           (0x0048)
#define PID_TRANSPORT_PRIORITY                  (0x0049)
#define PID_PARTICIPANT_GUID                    (0x0050)
#define PID_PARTICIPANT_ENTITY_ID               (0x0051)
#define PID_GROUP_GUID                          (0x0052)
#define PID_GROUP_ENTITY_ID                     (0x0053)
#define PID_CONTENT_FILTER_INFO                 (0x0055)
#define PID_COHERENT_SET                        (0x0056)
#define PID_DIRECTED_WRITE                      (0x0057)
#define PID_BUILTIN_ENDPOINT_SET                (0x0058)
#define PID_PROPERTY_LIST                       (0x0059)        /* RTI DDS 4.2e and newer */
#define PID_ENDPOINT_GUID                       (0x005a)
#define PID_TYPE_MAX_SIZE_SERIALIZED            (0x0060)
#define PID_ORIGINAL_WRITER_INFO                (0x0061)
#define PID_ENTITY_NAME                         (0x0062)
#define PID_KEY_HASH                            (0x0070)
#define PID_STATUS_INFO                         (0x0071)

/* Vendor-specific: RTI */
#define PID_PRODUCT_VERSION                     (0x8000)
#define PID_PLUGIN_PROMISCUITY_KIND             (0x8001)
#define PID_ENTITY_VIRTUAL_GUID                 (0x8002)
#define PID_SERVICE_KIND                        (0x8003)
#define PID_TYPECODE                            (0x8004)        /* Was: 0x47 in RTPS 1.2 */
#define PID_DISABLE_POSITIVE_ACKS               (0x8005)
#define PID_LOCATOR_FILTER_LIST                 (0x8006)


/* The following QoS are deprecated (used in RTPS 1.0 and older) */
#define PID_PERSISTENCE                         (0x0003)
#define PID_TYPE_CHECKSUM                       (0x0008)
#define PID_TYPE2_NAME                          (0x0009)
#define PID_TYPE2_CHECKSUM                      (0x000a)
#define PID_IS_RELIABLE                         (0x000f)
#define PID_EXPECTS_ACK                         (0x0010)
#define PID_MANAGER_KEY                         (0x0012)
#define PID_SEND_QUEUE_SIZE                     (0x0013)
#define PID_RECV_QUEUE_SIZE                     (0x0018)
#define PID_VARGAPPS_SEQUENCE_NUMBER_LAST       (0x0017)
#define PID_RELIABILITY_ENABLED                 (0x0014)
#define PID_RELIABILITY_OFFERED                 (0x0019)
#define PID_LIVELINESS_OFFERED                  (0x001c)
#define PID_OWNERSHIP_OFFERED                   (0x0020)
#define PID_PRESENTATION_OFFERED                (0x0022)
#define PID_DEADLINE_OFFERED                    (0x0024)
#define PID_DESTINATION_ORDER_OFFERED           (0x0026)
#define PID_LATENCY_BUDGET_OFFERED              (0x0028)
#define PID_PARTITION_OFFERED                   (0x002a)



/* appId.appKind possible values */
#define APPKIND_UNKNOWN                         (0x00)
#define APPKIND_MANAGED_APPLICATION             (0x01)
#define APPKIND_MANAGER                         (0x02)



/* Predefined EntityIds */
#define ENTITYID_UNKNOWN                                (0x00000000)
#define ENTITYID_PARTICIPANT                            (0x000001c1)
#define ENTITYID_SEDP_BUILTIN_TOPIC_WRITER              (0x000002c2)        /* Was: ENTITYID_BUILTIN_TOPIC_WRITER */
#define ENTITYID_SEDP_BUILTIN_TOPIC_READER              (0x000002c7)        /* Was: ENTITYID_BUILTIN_TOPIC_READER */
#define ENTITYID_SEDP_BUILTIN_PUBLICATIONS_WRITER       (0x000003c2)        /* Was: ENTITYID_BUILTIN_PUBLICATIONS_WRITER */
#define ENTITYID_SEDP_BUILTIN_PUBLICATIONS_READER       (0x000003c7)        /* Was: ENTITYID_BUILTIN_PUBLICATIONS_READER */
#define ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_WRITER      (0x000004c2)        /* Was: ENTITYID_BUILTIN_SUBSCRIPTIONS_WRITER */
#define ENTITYID_SEDP_BUILTIN_SUBSCRIPTIONS_READER      (0x000004c7)        /* Was: ENTITYID_BUILTIN_SUBSCRIPTIONS_READER */
#define ENTITYID_SPDP_BUILTIN_PARTICIPANT_WRITER        (0x000100c2)        /* Was: ENTITYID_BUILTIN_SDP_PARTICIPANT_WRITER */
#define ENTITYID_SPDP_BUILTIN_PARTICIPANT_READER        (0x000100c7)        /* Was: ENTITYID_BUILTIN_SDP_PARTICIPANT_READER */
#define ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_WRITER (0x000200c2)
#define ENTITYID_P2P_BUILTIN_PARTICIPANT_MESSAGE_READER (0x000200c7)


/* 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 SUBMESSAGE_PAD                                  (0x01)
#define SUBMESSAGE_DATA                                 (0x02)
#define SUBMESSAGE_NOKEY_DATA                           (0x03)
#define SUBMESSAGE_ACKNACK                              (0x06)
#define SUBMESSAGE_HEARTBEAT                            (0x07)
#define SUBMESSAGE_GAP                                  (0x08)
#define SUBMESSAGE_INFO_TS                              (0x09)
#define SUBMESSAGE_INFO_SRC                             (0x0c)
#define SUBMESSAGE_INFO_REPLY_IP4                       (0x0d)
#define SUBMESSAGE_INFO_DST                             (0x0e)
#define SUBMESSAGE_INFO_REPLY                           (0x0f)

#define SUBMESSAGE_DATA_FRAG                            (0x10)  /* RTPS 2.0 Only */
#define SUBMESSAGE_NOKEY_DATA_FRAG                      (0x11)  /* RTPS 2.0 Only */
#define SUBMESSAGE_NACK_FRAG                            (0x12)  /* RTPS 2.0 Only */
#define SUBMESSAGE_HEARTBEAT_FRAG                       (0x13)  /* RTPS 2.0 Only */

#define SUBMESSAGE_RTPS_DATA_SESSION                    (0x14)  /* RTPS 2.1 only */
#define SUBMESSAGE_RTPS_DATA                            (0x15)  /* RTPS 2.1 only */
#define SUBMESSAGE_RTPS_DATA_FRAG                       (0x16)  /* RTPS 2.1 only */
#define SUBMESSAGE_ACKNACK_BATCH                        (0x17)  /* RTPS 2.1 only */
#define SUBMESSAGE_RTPS_DATA_BATCH                      (0x18)  /* RTPS 2.1 Only */
#define SUBMESSAGE_HEARTBEAT_BATCH                      (0x19)  /* RTPS 2.1 only */
#define SUBMESSAGE_ACKNACK_SESSION                      (0x1a)  /* RTPS 2.1 only */
#define SUBMESSAGE_HEARTBEAT_SESSION                    (0x1b)  /* RTPS 2.1 only */

/* Data encapsulation */
#define ENCAPSULATION_CDR_BE            (0x0000)
#define ENCAPSULATION_CDR_LE            (0x0001)
#define ENCAPSULATION_PL_CDR_BE         (0x0002)
#define ENCAPSULATION_PL_CDR_LE         (0x0003)


/* 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."
#define RTPS_VENDOR_TOC                 (0x0106)
#define RTPS_VENDOR_TOC_STRING          "Twin Oaks Computing, 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)



/* Participant message data kind */
#define PARTICIPANT_MESSAGE_DATA_KIND_UNKNOWN (0x00000000)
#define PARTICIPANT_MESSAGE_DATA_KIND_AUTOMATIC_LIVELINESS_UPDATE (0x00000001)
#define PARTICIPANT_MESSAGE_DATA_KIND_MANUAL_LIVELINESS_UPDATE (0x00000002)



#ifdef __cplusplus
} /* extern "C"*/
#endif
            
#endif /* _TYPEDEFS_DEFINES_RTPS2_H */