source: lib/rt_protocol.h @ cd7eec7

4.0.1-hotfixescachetimestampsdevelopdpdk-ndagetsilivegetfragoffhelplibtrace4ndag_formatpfringrc-4.0.1rc-4.0.2rc-4.0.3rc-4.0.4ringdecrementfixringperformanceringtimestampfixes
Last change on this file since cd7eec7 was cd7eec7, checked in by Shane Alcock <salcock@…>, 15 years ago

Added a new format for reading and writing DUCK packets
Added corresponding test cases for DUCK
Removed references to RT_DUCK_* from format_rt
Added a configuration option for meta-data frequency (used solely for DUCK frequency at the moment) and updated other formats to ignore the option

  • Property mode set to 100644
File size: 5.5 KB
Line 
1#ifndef _RT_PROTOCOL_H
2#define _RT_PROTOCOL_H
3
4#include "libtrace.h"
5#include <time.h>
6
7#define CAPTURE_PORT 3434
8#define COLLECTOR_PORT 3435
9
10#define RT_MAX_HDR_SIZE 256
11#define MAX_SEQUENCE 2147483647
12
13#define RT_DATA_SIMPLE 1000
14#define RT_DATA_PCAP 2000
15
16/* Procedure for adding new RT control types
17 * -------------------------------------------
18 *
19 * Add type to the enum list
20 * Add a struct below (even if it is empty - wrap it in an #if 0)
21 * Update rt_get_capture_length
22 * If type is intended to be sent TO clients, update rt_read_packet
23 *      Otherwise, update server implementations e.g. WDCAP
24 *
25 * Procedure for adding new RT data types
26 * ----------------------------------------
27 *
28 * If you are adding a new format:
29 *      RT_DATA_(new format) must be equal to RT_DATA_SIMPLE +
30 *              TRACE_FORMAT_(new_format)
31 *      Add a new dummy trace type to the rt_format_t structure
32 *      Set the dummy trace to NULL in rt_init_input
33 *      Update rt_set_format
34 *
35 * If you are adding a new PCAP DLT type:
36 *      RT_DATA_PCAP_(new DLT) must be equal to RT_DATA_PCAP + (DLT value)
37 *     
38 */
39
40/** Type field definitions */
41enum rt_field_t {
42 RT_HELLO       =1,     /**< Connection accepted */
43 RT_START       =2,     /**< Request for data transmission to begin */
44 RT_ACK         =3,     /**< Data acknowledgement */
45 RT_STATUS      =4,     /**< Fifo status packet */
46 RT_DUCK        =5,     /**< Dag duck info packet */
47 RT_END_DATA    =6,     /**< Server is exiting message */
48 RT_CLOSE       =7,     /**< Client is exiting message */
49 RT_DENY_CONN   =8,     /**< Connection has been denied */
50 RT_PAUSE       =9,     /**< Request server to suspend sending data */
51 RT_PAUSE_ACK   =10,    /**< Server is paused message */
52 RT_OPTION      =11,    /**< Option request */
53 RT_KEYCHANGE   =12,    /**< Anonymisation key has changed */ 
54 RT_DUCK_2_4    =13,    /**< Dag 2.4 Duck */
55 RT_DUCK_2_5    =14,    /**< Dag 2.5 Duck */
56 
57 RT_DATA_ERF            =RT_DATA_SIMPLE + TRACE_FORMAT_ERF, 
58 RT_DATA_WAG            =RT_DATA_SIMPLE + TRACE_FORMAT_WAG, 
59 RT_DATA_LEGACY_ATM     =RT_DATA_SIMPLE + TRACE_FORMAT_LEGACY_ATM, 
60 RT_DATA_LEGACY_POS     =RT_DATA_SIMPLE + TRACE_FORMAT_LEGACY_POS, 
61 RT_DATA_LEGACY_ETH     =RT_DATA_SIMPLE + TRACE_FORMAT_LEGACY_ETH, 
62 RT_DATA_LINUX_NATIVE   =RT_DATA_SIMPLE + TRACE_FORMAT_LINUX_NATIVE,
63
64 RT_DATA_PCAP_NULL              =RT_DATA_PCAP + TRACE_DLT_NULL,
65 RT_DATA_PCAP_EN10MB            =RT_DATA_PCAP + TRACE_DLT_EN10MB,
66 RT_DATA_PCAP_ATM_RFC1483       =RT_DATA_PCAP + TRACE_DLT_ATM_RFC1483,
67 RT_DATA_PCAP_IEEE802_11        =RT_DATA_PCAP + TRACE_DLT_IEEE802_11,
68 RT_DATA_PCAP_LINUX_SLL         =RT_DATA_PCAP + TRACE_DLT_LINUX_SLL,
69 RT_DATA_PCAP_PFLOG             =RT_DATA_PCAP + TRACE_DLT_PFLOG,
70 RT_LAST = 3000
71};
72
73typedef struct fifo_info {
74        uint64_t in;
75        uint64_t out;
76        uint64_t ack;
77        uint64_t length;
78        uint64_t used;
79} fifo_info_t;
80
81/** RT packet header */
82typedef struct rt_header {
83        enum rt_field_t type;
84        uint16_t length;
85        uint32_t sequence;
86} rt_header_t;
87
88/* TODO: Reorganise this struct once more hello info is added */
89/** RT Hello packet sub-header */
90typedef struct rt_hello {
91        uint8_t reliable;
92} rt_hello_t;
93
94#if 0
95typedef struct rt_start {
96
97} rt_start_t;
98#endif
99
100/** RT Ack sub-header */
101typedef struct rt_ack {
102        uint32_t sequence;
103} rt_ack_t;
104
105/** RT Status sub-header */
106typedef struct rt_status {
107        fifo_info_t fifo_status;
108} rt_status_t;
109
110#if 0
111typedef struct rt_duck {
112        /*duckinf_t duck; */
113} rt_duck_t;
114#endif
115
116#if 0
117typedef struct rt_end_data {
118
119} rt_end_data_t;
120#endif
121
122#if 0
123typedef struct rt_close {
124
125} rt_close_t;
126#endif
127
128/** Connection denied reasons */
129enum rt_conn_denied_t {
130 RT_DENY_WRAPPER        =1,
131 RT_DENY_FULL           =2,
132 RT_DENY_AUTH           =3
133};
134
135/** RT Denied Connection sub-header */
136typedef struct rt_deny_conn {
137        enum rt_conn_denied_t reason;
138} rt_deny_conn_t;
139
140#if 0
141typedef struct rt_pause {
142
143} rt_pause_t;
144#endif
145
146#if 0
147typedef struct rt_pause_ack {
148
149} rt_pause_ack_t;
150#endif
151
152#if 0
153typedef struct rt_option {
154
155} rt_option_t;
156#endif
157
158#if 0
159typedef struct rt_keychange {
160       
161} rt_keychange_t;
162#endif
163
164/** Specifications of duck structures - duck2_4 and duck2_5 match Endace's
165 * duck_inf and duckinf_t respectively */
166
167/** DAG 2.4 DUCK */
168typedef struct duck2_4 {
169        uint32_t        Command;
170        uint32_t        Config;
171        uint32_t        Clock_Inc;
172        uint32_t        Clock_Wrap;
173        uint32_t        DDS_Rate;
174        uint32_t        Crystal_Freq;
175        uint32_t        Synth_Freq; 
176        uint32_t        Sync_Rate;
177        uint64_t        Last_Ticks;
178        uint32_t        Resyncs;
179        uint32_t        Bad_Diffs;
180        uint32_t        Bad_Offs;
181        uint32_t        Bad_Pulses;
182        uint32_t        Worst_Error;
183        uint32_t        Worst_Off;
184        uint32_t        Off_Limit;
185        uint32_t        Off_Damp;
186        uint32_t        Pulses;
187        uint32_t        Single_Pulses_Missing;
188        uint32_t        Longest_Pulse_Missing;
189        uint32_t        Health;
190        uint32_t        Sickness;
191        int32_t         Error;
192        int32_t         Offset;
193        time_t          Stat_Start;
194        time_t          Stat_End;   
195        uint32_t        Set_Duck_Field;
196} duck2_4_t;
197
198/** DAG 2.5 DUCK */
199typedef struct duck2_5 {
200        uint32_t        Crystal_Freq;
201        uint32_t        Synth_Freq;
202        uint64_t        Last_Ticks;
203        uint32_t        Resyncs;
204        uint32_t        Bad_Pulses;
205        uint32_t        Worst_Freq_Err;
206        uint32_t        Worst_Phase_Err;
207        uint32_t        Health_Thresh;
208        uint32_t        Pulses;
209        uint32_t        Single_Pulses_Missing;
210        uint32_t        Longest_Pulse_Missing;
211        uint32_t        Health;
212        uint32_t        Sickness;
213        int32_t         Freq_Err;
214        int32_t         Phase_Err;
215        uint32_t        Set_Duck_Field;
216        time_t          Stat_Start;
217        time_t          Stat_End;
218        uint64_t        Last_TSC;
219} duck2_5_t;
220
221/*
222typedef struct rt_duck_2_4 {
223        duck2_4_t duck;
224} rt_duck_2_4_t;
225
226typedef struct rt_duck_2_5 {
227        duck2_5_t duck;
228} rt_duck_2_5_t;
229*/
230
231#endif
Note: See TracBrowser for help on using the repository browser.