source: lib/wag.h @ 49babe0

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

Added initial format_rt and rt_protocol source files
Updated wag to be consistent with latest lt2 fixes and Dean's framing
Added a type field back into libtrace_packet
Fixed return value for trace_start

  • Property mode set to 100644
File size: 4.7 KB
Line 
1/*
2 * This file is part of libtrace
3 *
4 * Copyright (c) 2004 The University of Waikato, Hamilton, New Zealand.
5 * Authors: Daniel Lawson
6 *          Perry Lorier
7 *
8 * All rights reserved.
9 *
10 * This code has been developed by the University of Waikato WAND
11 * research group. For further information please see http://www.wand.net.nz/
12 *
13 * libtrace is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *
18 * libtrace is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with libtrace; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26 *
27 * $Id$
28 *
29 */
30
31#ifndef _WAG_H
32#define _WAG_H
33
34// This is the WAG magic number - used to delimit frames
35#define WAG_MAGIC               (0xdaa1)
36
37// Define frame types
38#define FRAME_TYPE_DATA         (0x0000)
39#define FRAME_TYPE_UNDEFINED    (0xffff)
40
41// Define frame subtypes
42#define FRAME_SUBTYPE_DATA_RX   (0x0000)
43#define FRAME_SUBTYPE_DATA_TX   (0x0001)
44
45// This is the common part of the frame header.
46// We synchronise by scanning a stream to look for the magic number (WAG_MAGIC).
47// We can then tell the size and type of this frame, and pass over it if necessary.
48struct frame_t {
49  uint16_t magic;                                   // magic number (0xdaa1)
50  uint16_t size;                                    // total frame size in bytes
51  uint16_t type;                                    // frame type
52  uint16_t subtype;                                 // frame subtype
53};
54
55///////////////////////////////////////////////////////////////////////////////////
56//
57// Frames that the radio part of the WAG framework understands
58//
59///////////////////////////////////////////////////////////////////////////////////
60// Common subfields...
61
62// timestamp
63struct timestamp_t {
64  uint32_t           secs;                          // seconds since start of 01-01-1970
65  uint32_t           subsecs;                       // (1/(2^32))ths of a second
66};
67
68// frame stream information
69struct strinfo_t {
70  uint16_t unused_1;
71  uint16_t unused_2;
72  uint16_t unused_3;
73  uint16_t packets_lost;
74};
75
76// Type: DATA, Subtype: RX
77struct frame_data_rx_t {
78  struct frame_t                 hdr;               // common frame header
79  struct strinfo_t               strinfo;           // stream status
80  struct timestamp_t             ts;                // timestamp of reception of this frame
81  struct {
82    uint8_t              rssi;                      // receive signal strength of this frame
83    uint8_t              rxstatus;                  // rx status bits from the modem
84    uint16_t             length;                    // length in bytes of the frame payload
85    struct {
86      uint8_t  signal;                              // 802.11PLCP signal field
87      uint8_t  service;                             // 802.11PLCP service field
88      uint16_t length; } plcp; } rxinfo;            // 802.11PLCP length field (uS)
89  char                           data[0];           // placeholder to allow payload access
90};
91
92// Type: DATA, Subtype: TX
93struct frame_data_tx_t {
94  struct frame_t                 hdr;               // common frame header
95  uint64_t                       unused_1;          //
96  uint64_t                       unused_2;          //
97  struct {
98    uint8_t  gain;                                  // tx gain with which to send this packet
99    uint8_t  mode;                                  // tx mode with which to send this packet
100    uint16_t length;                                // length in bytes of the frame payload
101    uint32_t unused_1; }         txinfo;            //
102  char                           data[0];           // placeholder to allow payload access
103};
104
105struct ieee_802_11_header {
106        uint8_t      protocol:2;
107        uint8_t      type:2;
108        uint8_t      subtype:4;
109        uint8_t      to_ds:1;
110        uint8_t      from_ds:1;
111        uint8_t      more_frag:1;
112        uint8_t      retry:1;
113        uint8_t      power:1;
114        uint8_t      more_data:1;
115        uint8_t      wep:1;
116        uint8_t      order:1;
117        uint16_t     duration;
118        uint8_t      mac1[6];
119        uint8_t      mac2[6];
120        uint8_t      mac3[6];
121        uint16_t     SeqCtl;
122        uint8_t      mac4[6];
123        uint8_t      data[1];
124};
125
126struct ieee_802_11_payload {
127        uint16_t     type;
128        uint8_t      data[1];
129};
130
131
132#endif
Note: See TracBrowser for help on using the repository browser.