author | Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
Mon, 08 Jun 2009 16:43:21 +0200 | |
changeset 4518 | 31f2881aa214 |
parent 4498 | 1b3d01bd974d |
child 4693 | ca8cbdd42786 |
permissions | -rw-r--r-- |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
1 |
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
2 |
/* |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
3 |
* Copyright (c) 2005,2006 INRIA |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
* |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
* This program is free software; you can redistribute it and/or modify |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
* it under the terms of the GNU General Public License version 2 as |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation; |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
8 |
* |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
9 |
* This program is distributed in the hope that it will be useful, |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
12 |
* GNU General Public License for more details. |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
13 |
* |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
* You should have received a copy of the GNU General Public License |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
* along with this program; if not, write to the Free Software |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
17 |
* |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
18 |
* Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
19 |
*/ |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
20 |
|
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
21 |
/* |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
22 |
* Documentation kindly pointed out by Tom Henderson: |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
23 |
* http://wiki.ethereal.com/Development/LibpcapFileFormat |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
24 |
*/ |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
25 |
|
458
0a5f4f427d66
remove dependency on SystemFile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
456
diff
changeset
|
26 |
#include <fstream> |
0a5f4f427d66
remove dependency on SystemFile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
456
diff
changeset
|
27 |
|
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
28 |
#include "ns3/log.h" |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
29 |
#include "ns3/assert.h" |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
30 |
#include "ns3/abort.h" |
14
6dd7d31c6fc3
replace yans include with ns3 include
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
9
diff
changeset
|
31 |
#include "ns3/simulator.h" |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
32 |
#include "pcap-writer.h" |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
33 |
#include "packet.h" |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
34 |
|
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
35 |
NS_LOG_COMPONENT_DEFINE ("PcapWriter"); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
36 |
|
16
99e833adbb46
change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
14
diff
changeset
|
37 |
namespace ns3 { |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
38 |
|
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
39 |
enum { |
454
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
40 |
PCAP_ETHERNET = 1, |
3012 | 41 |
PCAP_PPP = 9, |
454
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
42 |
PCAP_RAW_IP = 101, |
455
2f16d26e361c
add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
454
diff
changeset
|
43 |
PCAP_80211 = 105, |
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
44 |
PCAP_80211_PRISM = 119, |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
45 |
PCAP_80211_RADIOTAP = 127, |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
46 |
}; |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
47 |
|
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
48 |
PcapWriter::PcapWriter () |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
49 |
{ |
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
50 |
NS_LOG_FUNCTION (this); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
51 |
NS_LOG_LOGIC ("m_writer = 0"); |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
52 |
m_writer = 0; |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
53 |
} |
3012 | 54 |
|
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
55 |
PcapWriter::~PcapWriter () |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
56 |
{ |
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
57 |
NS_LOG_FUNCTION (this); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
58 |
|
3074
53e41ce6d3de
close the writer before deleting it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3012
diff
changeset
|
59 |
if (m_writer != 0) |
53e41ce6d3de
close the writer before deleting it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3012
diff
changeset
|
60 |
{ |
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
61 |
NS_LOG_LOGIC ("m_writer nonzero " << m_writer); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
62 |
if (m_writer->is_open ()) |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
63 |
{ |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
64 |
NS_LOG_LOGIC ("m_writer open. Closing " << m_writer); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
65 |
m_writer->close (); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
66 |
} |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
67 |
|
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
68 |
NS_LOG_LOGIC ("Deleting writer " << m_writer); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
69 |
delete m_writer; |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
70 |
|
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
71 |
NS_LOG_LOGIC ("m_writer = 0"); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
72 |
m_writer = 0; |
3074
53e41ce6d3de
close the writer before deleting it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
3012
diff
changeset
|
73 |
} |
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
74 |
else |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
75 |
{ |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
76 |
NS_LOG_LOGIC ("m_writer == 0"); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
77 |
} |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
78 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
79 |
|
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
80 |
void |
456
5361882cc2f3
put together a PcapTrace and test it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
455
diff
changeset
|
81 |
PcapWriter::Open (std::string const &name) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
82 |
{ |
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
83 |
NS_LOG_FUNCTION (this << name); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
84 |
NS_ABORT_MSG_UNLESS (m_writer == 0, "PcapWriter::Open(): m_writer already allocated (std::ofstream leak detected)"); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
85 |
|
458
0a5f4f427d66
remove dependency on SystemFile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
456
diff
changeset
|
86 |
m_writer = new std::ofstream (); |
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
87 |
NS_ABORT_MSG_UNLESS (m_writer, "PcapWriter::Open(): Cannot allocate m_writer"); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
88 |
|
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
89 |
NS_LOG_LOGIC ("Created writer " << m_writer); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
90 |
|
4099
03dc74055f8a
bug 329: pcap files generated in native win32 (mingw) are always corrupt
Guillaume Vu-Brugier <gvubrugier@gmail.com>
parents:
3922
diff
changeset
|
91 |
m_writer->open (name.c_str (), std::ios_base::binary | std::ios_base::out); |
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
92 |
NS_ABORT_MSG_IF (m_writer->fail (), "PcapWriter::Open(): m_writer->open(" << name.c_str () << ") failed"); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
93 |
|
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
94 |
NS_ASSERT_MSG (m_writer->is_open (), "PcapWriter::Open(): m_writer not open"); |
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
95 |
|
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
96 |
NS_LOG_LOGIC ("Writer opened successfully"); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
97 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
98 |
|
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
99 |
void |
454
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
100 |
PcapWriter::WriteEthernetHeader (void) |
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
101 |
{ |
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
102 |
NS_LOG_FUNCTION_NOARGS (); |
454
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
103 |
WriteHeader (PCAP_ETHERNET); |
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
104 |
} |
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
105 |
|
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
106 |
void |
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
107 |
PcapWriter::WriteIpHeader (void) |
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
108 |
{ |
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
109 |
NS_LOG_FUNCTION_NOARGS (); |
454
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
110 |
WriteHeader (PCAP_RAW_IP); |
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
111 |
} |
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
112 |
|
455
2f16d26e361c
add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
454
diff
changeset
|
113 |
void |
2f16d26e361c
add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
454
diff
changeset
|
114 |
PcapWriter::WriteWifiHeader (void) |
2f16d26e361c
add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
454
diff
changeset
|
115 |
{ |
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
116 |
NS_LOG_FUNCTION_NOARGS (); |
455
2f16d26e361c
add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
454
diff
changeset
|
117 |
WriteHeader (PCAP_80211); |
2f16d26e361c
add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
454
diff
changeset
|
118 |
} |
2f16d26e361c
add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
454
diff
changeset
|
119 |
|
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
120 |
void |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
121 |
PcapWriter::WriteWifiRadiotapHeader (void) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
122 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
123 |
NS_LOG_FUNCTION_NOARGS (); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
124 |
WriteHeader (PCAP_80211_RADIOTAP); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
125 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
126 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
127 |
void |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
128 |
PcapWriter::WriteWifiPrismHeader (void) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
129 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
130 |
NS_LOG_FUNCTION_NOARGS (); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
131 |
WriteHeader (PCAP_80211_PRISM); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
132 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
133 |
|
454
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
134 |
void |
3012 | 135 |
PcapWriter::WritePppHeader (void) |
136 |
{ |
|
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
137 |
NS_LOG_FUNCTION_NOARGS (); |
3012 | 138 |
WriteHeader (PCAP_PPP); |
139 |
} |
|
140 |
||
141 |
void |
|
454
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
142 |
PcapWriter::WriteHeader (uint32_t network) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
143 |
{ |
3922
d549fa894719
instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents:
3074
diff
changeset
|
144 |
NS_LOG_FUNCTION (this << network); |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
145 |
Write32 (0xa1b2c3d4); |
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
146 |
Write16 (2); |
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
147 |
Write16 (4); |
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
148 |
Write32 (0); |
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
149 |
Write32 (0); |
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
150 |
Write32 (0xffff); |
454
f7d4e9f00b00
add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
163
diff
changeset
|
151 |
Write32 (network); |
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
152 |
m_pcapMode = network; |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
153 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
154 |
|
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
155 |
void |
1866
e7dbcc4df546
do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
458
diff
changeset
|
156 |
PcapWriter::WritePacket (Ptr<const Packet> packet) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
157 |
{ |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
158 |
if (m_writer != 0) |
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
159 |
{ |
163
2a7e05018eeb
rename Time::ApproximateTo methods to Time::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
150
diff
changeset
|
160 |
uint64_t current = Simulator::Now ().GetMicroSeconds (); |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
161 |
uint64_t s = current / 1000000; |
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
162 |
uint64_t us = current % 1000000; |
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
163 |
Write32 (s & 0xffffffff); |
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
164 |
Write32 (us & 0xffffffff); |
1866
e7dbcc4df546
do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
458
diff
changeset
|
165 |
Write32 (packet->GetSize ()); |
e7dbcc4df546
do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
458
diff
changeset
|
166 |
Write32 (packet->GetSize ()); |
4518
31f2881aa214
avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4498
diff
changeset
|
167 |
packet->CopyData (m_writer, packet->GetSize ()); |
150
663120712cd9
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
143
diff
changeset
|
168 |
} |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
169 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
170 |
|
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
171 |
|
4498
1b3d01bd974d
fix build with gcc 3.4.6
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4492
diff
changeset
|
172 |
void PcapWriter::WriteWifiMonitorPacket(Ptr<const Packet> packet, uint16_t channelFreqMhz, |
1b3d01bd974d
fix build with gcc 3.4.6
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4492
diff
changeset
|
173 |
uint32_t rate, bool isShortPreamble, bool isTx, |
1b3d01bd974d
fix build with gcc 3.4.6
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4492
diff
changeset
|
174 |
double signalDbm, double noiseDbm) |
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
175 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
176 |
NS_LOG_FUNCTION (this << packet->GetSize() << channelFreqMhz << rate << isShortPreamble << isTx << signalDbm << noiseDbm); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
177 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
178 |
if (m_writer == 0) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
179 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
180 |
return; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
181 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
182 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
183 |
if (m_pcapMode == PCAP_80211) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
184 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
185 |
WritePacket (packet); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
186 |
return; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
187 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
188 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
189 |
/* the following is common between PRISM and RADIOTAP */ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
190 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
191 |
uint64_t current = Simulator::Now ().GetMicroSeconds (); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
192 |
uint64_t s = current / 1000000; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
193 |
uint64_t us = current % 1000000; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
194 |
Write32 (s & 0xffffffff); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
195 |
Write32 (us & 0xffffffff); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
196 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
197 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
198 |
// MAC timestamp. Actually according to radiotap specifications |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
199 |
// (http://www.radiotap.org/defined-fields/TSFT) this should be |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
200 |
// the time "when the first bit of the MPDU arrived at the |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
201 |
// MAC". This is not exactly what we're doing here, but to handle |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
202 |
// this properly we would need to first of all investigate how |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
203 |
// real devices (e.g. madwifi) handle this case, especially for TX |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
204 |
// packets (radiotap specs says TSFT is not used for TX packets, |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
205 |
// but madwifi actually uses it). |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
206 |
uint64_t tsft = current; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
207 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
208 |
if (m_pcapMode == PCAP_80211_PRISM) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
209 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
210 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
211 |
#define PRISM_MSG_CODE 0x00000044 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
212 |
#define PRISM_MSG_LENGTH 144 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
213 |
#define PRISM_DID_HOSTTIME 0x00010044 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
214 |
#define PRISM_DID_MACTIME 0x00020044 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
215 |
#define PRISM_DID_CHANNEL 0x00030044 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
216 |
#define PRISM_DID_RSSI 0x00040044 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
217 |
#define PRISM_DID_SQ 0x00050044 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
218 |
#define PRISM_DID_SIGNAL 0x00060044 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
219 |
#define PRISM_DID_NOISE 0x00070044 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
220 |
#define PRISM_DID_RATE 0x00080044 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
221 |
#define PRISM_DID_ISTX 0x00090044 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
222 |
#define PRISM_DID_FRMLEN 0x000A0044 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
223 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
224 |
#define PRISM_STATUS_PRESENT 0 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
225 |
#define PRISM_STATUS_ABSENT 1 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
226 |
#define PRISM_ITEM_LENGTH 4 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
227 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
228 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
229 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
230 |
uint32_t size = packet->GetSize () + PRISM_MSG_LENGTH; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
231 |
Write32 (size); // total packet size |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
232 |
Write32 (size); // captured size |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
233 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
234 |
Write32(PRISM_MSG_CODE); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
235 |
Write32(PRISM_MSG_LENGTH); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
236 |
WriteData((const uint8_t *)"unknown wifi device!!!!!!!!", 16); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
237 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
238 |
Write32(PRISM_DID_HOSTTIME); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
239 |
Write16(PRISM_STATUS_PRESENT); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
240 |
Write16(PRISM_ITEM_LENGTH); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
241 |
// madwifi reports hosttime in jiffies. |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
242 |
// We calculate jiffies assuming HZ = 10 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
243 |
Write32((uint32_t) (Now ().GetMilliSeconds () / 10 ) ); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
244 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
245 |
Write32(PRISM_DID_MACTIME); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
246 |
Write16(PRISM_STATUS_PRESENT); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
247 |
Write16(PRISM_ITEM_LENGTH); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
248 |
// This looses precision, which is a well-known issue of the prism |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
249 |
// header format. |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
250 |
Write32((uint32_t) tsft); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
251 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
252 |
Write32(PRISM_DID_CHANNEL); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
253 |
Write16(PRISM_STATUS_PRESENT); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
254 |
Write16(PRISM_ITEM_LENGTH); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
255 |
// convert from frequency to channel number. This conversion is |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
256 |
// correct only for IEEE 802.11b/g channels 1-13. |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
257 |
Write32((channelFreqMhz - 2407) / 5); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
258 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
259 |
Write32(PRISM_DID_RSSI); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
260 |
Write16(PRISM_STATUS_PRESENT); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
261 |
Write16(PRISM_ITEM_LENGTH); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
262 |
// madwifi here reports a value which is said to be "the value in |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
263 |
// dBm above noise". Apart from the fact that this is incorrect |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
264 |
// (if it is relative to a value in dBm, then it must be in dB, |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
265 |
// not in dBm again), this means that in fact it is not a RSSI |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
266 |
// (which stands for Received Signal Strength Indicator) but it is |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
267 |
// rather a Signal to Noise Ratio (SNR), of course in dB. |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
268 |
// Anyway, in the end we calculate the value exactly as madwifi does. |
4498
1b3d01bd974d
fix build with gcc 3.4.6
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4492
diff
changeset
|
269 |
Write32((uint32_t)round(signalDbm - noiseDbm)); |
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
270 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
271 |
// SQ field not used. I would expect a PRISM_STATUS_ABSENT to be |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
272 |
// needed here, but if you look at the prism header that madwifi |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
273 |
// produces you'll just see that the whole field structure is |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
274 |
// zeroed. |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
275 |
Write32(0); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
276 |
Write16(0); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
277 |
Write16(0); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
278 |
Write32(0); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
279 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
280 |
Write32(PRISM_DID_SIGNAL); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
281 |
Write16(PRISM_STATUS_PRESENT); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
282 |
Write16(PRISM_ITEM_LENGTH); |
4498
1b3d01bd974d
fix build with gcc 3.4.6
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4492
diff
changeset
|
283 |
Write32((uint32_t)round(signalDbm)); |
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
284 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
285 |
Write32(PRISM_DID_NOISE); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
286 |
Write16(PRISM_STATUS_PRESENT); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
287 |
Write16(PRISM_ITEM_LENGTH); |
4498
1b3d01bd974d
fix build with gcc 3.4.6
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4492
diff
changeset
|
288 |
Write32((uint32_t)round(noiseDbm)); |
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
289 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
290 |
Write32(PRISM_DID_RATE); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
291 |
Write16(PRISM_STATUS_PRESENT); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
292 |
Write16(PRISM_ITEM_LENGTH); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
293 |
Write32(rate); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
294 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
295 |
Write32(PRISM_DID_ISTX); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
296 |
Write16(PRISM_STATUS_PRESENT); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
297 |
Write16(PRISM_ITEM_LENGTH); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
298 |
Write32(isTx ? 1 : 0); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
299 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
300 |
Write32(PRISM_DID_FRMLEN); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
301 |
Write16(PRISM_STATUS_ABSENT); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
302 |
Write16(PRISM_ITEM_LENGTH); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
303 |
Write32(packet->GetSize ()); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
304 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
305 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
306 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
307 |
} // PCAP_80211_PRISM |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
308 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
309 |
else if (m_pcapMode == PCAP_80211_RADIOTAP) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
310 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
311 |
NS_LOG_LOGIC("writing radiotap packet"); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
312 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
313 |
#define RADIOTAP_TSFT 0x00000001 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
314 |
#define RADIOTAP_FLAGS 0x00000002 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
315 |
#define RADIOTAP_RATE 0x00000004 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
316 |
#define RADIOTAP_CHANNEL 0x00000008 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
317 |
#define RADIOTAP_FHSS 0x00000010 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
318 |
#define RADIOTAP_DBM_ANTSIGNAL 0x00000020 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
319 |
#define RADIOTAP_DBM_ANTNOISE 0x00000040 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
320 |
#define RADIOTAP_LOCK_QUALITY 0x00000080 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
321 |
#define RADIOTAP_TX_ATTENUATION 0x00000100 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
322 |
#define RADIOTAP_DB_TX_ATTENUATION 0x00000200 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
323 |
#define RADIOTAP_DBM_TX_POWER 0x00000200 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
324 |
#define RADIOTAP_ANTENNA 0x00000400 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
325 |
#define RADIOTAP_DB_ANTSIGNAL 0x00000800 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
326 |
#define RADIOTAP_DB_ANTNOISE 0x00001000 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
327 |
#define RADIOTAP_EXT 0x10000000 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
328 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
329 |
#define RADIOTAP_FLAG_NONE 0x00 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
330 |
#define RADIOTAP_FLAG_CFP 0x01 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
331 |
#define RADIOTAP_FLAG_SHORTPRE 0x02 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
332 |
#define RADIOTAP_FLAG_WEP 0x04 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
333 |
#define RADIOTAP_FLAG_FRAG 0x08 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
334 |
#define RADIOTAP_FLAG_FCS 0x10 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
335 |
#define RADIOTAP_FLAG_DATAPAD 0x20 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
336 |
#define RADIOTAP_FLAG_BADFCS 0x40 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
337 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
338 |
#define RADIOTAP_CHANNEL_TURBO 0x0010 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
339 |
#define RADIOTAP_CHANNEL_CCK 0x0020 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
340 |
#define RADIOTAP_CHANNEL_OFDM 0x0040 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
341 |
#define RADIOTAP_CHANNEL_2GHZ 0x0080 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
342 |
#define RADIOTAP_CHANNEL_5GHZ 0x0100 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
343 |
#define RADIOTAP_CHANNEL_PASSIVE 0x0200 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
344 |
#define RADIOTAP_CHANNEL_DYN 0x0400 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
345 |
#define RADIOTAP_CHANNEL_GFSK 0x0800 |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
346 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
347 |
#define RADIOTAP_RX_PRESENT (RADIOTAP_TSFT | RADIOTAP_FLAGS | RADIOTAP_RATE | RADIOTAP_CHANNEL | RADIOTAP_DBM_ANTSIGNAL | RADIOTAP_DBM_ANTNOISE) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
348 |
#define RADIOTAP_RX_LENGTH (8+8+1+1+2+2+1+1) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
349 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
350 |
#define RADIOTAP_TX_PRESENT (RADIOTAP_TSFT | RADIOTAP_FLAGS | RADIOTAP_RATE | RADIOTAP_CHANNEL) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
351 |
#define RADIOTAP_TX_LENGTH (8+8+1+1+2+2) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
352 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
353 |
uint32_t size; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
354 |
if (isTx) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
355 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
356 |
size = packet->GetSize () + RADIOTAP_TX_LENGTH; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
357 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
358 |
else |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
359 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
360 |
size = packet->GetSize () + RADIOTAP_RX_LENGTH; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
361 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
362 |
Write32 (size); // total packet size |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
363 |
Write32 (size); // captured size |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
364 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
365 |
Write8(0); // radiotap version |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
366 |
Write8(0); // padding |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
367 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
368 |
if (isTx) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
369 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
370 |
Write16(RADIOTAP_TX_LENGTH); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
371 |
Write32(RADIOTAP_TX_PRESENT); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
372 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
373 |
else |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
374 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
375 |
Write16(RADIOTAP_RX_LENGTH); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
376 |
Write32(RADIOTAP_RX_PRESENT); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
377 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
378 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
379 |
Write64(tsft); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
380 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
381 |
uint8_t flags = RADIOTAP_FLAG_NONE; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
382 |
if (isShortPreamble) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
383 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
384 |
flags |= RADIOTAP_FLAG_SHORTPRE; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
385 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
386 |
Write8(flags); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
387 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
388 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
389 |
Write8(rate); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
390 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
391 |
Write16((uint16_t) channelFreqMhz); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
392 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
393 |
// we might want to make this setting depend on the WifiMode and |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
394 |
// on the ChannelFrequency at some time in the future. But for now |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
395 |
// I think a fixed setting is more than enough for most purposes. |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
396 |
Write16(RADIOTAP_CHANNEL_OFDM | RADIOTAP_CHANNEL_2GHZ); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
397 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
398 |
if (!isTx) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
399 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
400 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
401 |
Write8 (RoundToInt8 (signalDbm)); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
402 |
Write8 (RoundToInt8 (noiseDbm)); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
403 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
404 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
405 |
} // PCAP_80211_RADIOTAP |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
406 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
407 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
408 |
else |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
409 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
410 |
NS_LOG_ERROR("unknown PCAP mode"); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
411 |
return; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
412 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
413 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
414 |
// finally, write rest of packet |
4518
31f2881aa214
avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
4498
diff
changeset
|
415 |
packet->CopyData (m_writer, packet->GetSize ()); |
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
416 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
417 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
418 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
419 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
420 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
421 |
int8_t |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
422 |
PcapWriter::RoundToInt8 (double value) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
423 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
424 |
if (value < -128) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
425 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
426 |
return -128; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
427 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
428 |
if (value > 127) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
429 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
430 |
return 127; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
431 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
432 |
return ((int8_t) round(value)); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
433 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
434 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
435 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
436 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
437 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
438 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
439 |
|
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
440 |
void |
458
0a5f4f427d66
remove dependency on SystemFile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
456
diff
changeset
|
441 |
PcapWriter::WriteData (uint8_t const*buffer, uint32_t size) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
442 |
{ |
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
443 |
NS_LOG_FUNCTION(this << size); |
458
0a5f4f427d66
remove dependency on SystemFile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
456
diff
changeset
|
444 |
m_writer->write ((char const *)buffer, size); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
445 |
} |
3012 | 446 |
|
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
447 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
448 |
void |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
449 |
PcapWriter::Write64 (uint64_t data) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
450 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
451 |
uint8_t buffer[8]; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
452 |
buffer[0] = (data >> 0) & 0xff; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
453 |
buffer[1] = (data >> 8) & 0xff; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
454 |
buffer[2] = (data >> 16) & 0xff; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
455 |
buffer[3] = (data >> 24) & 0xff; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
456 |
buffer[4] = (data >> 32) & 0xff; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
457 |
buffer[5] = (data >> 40) & 0xff; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
458 |
buffer[6] = (data >> 48) & 0xff; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
459 |
buffer[7] = (data >> 56) & 0xff; |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
460 |
WriteData (buffer, 8); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
461 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
462 |
|
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
463 |
void |
122
6b8f1eda5c57
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
111
diff
changeset
|
464 |
PcapWriter::Write32 (uint32_t data) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
465 |
{ |
2906
5a7ae076410e
ensure that out PcapTraces are generated in a consistant format to allow simple comparison of traces against a single set of reference traces.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
466 |
uint8_t buffer[4]; |
5a7ae076410e
ensure that out PcapTraces are generated in a consistant format to allow simple comparison of traces against a single set of reference traces.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
467 |
buffer[0] = (data >> 0) & 0xff; |
5a7ae076410e
ensure that out PcapTraces are generated in a consistant format to allow simple comparison of traces against a single set of reference traces.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
468 |
buffer[1] = (data >> 8) & 0xff; |
5a7ae076410e
ensure that out PcapTraces are generated in a consistant format to allow simple comparison of traces against a single set of reference traces.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
469 |
buffer[2] = (data >> 16) & 0xff; |
5a7ae076410e
ensure that out PcapTraces are generated in a consistant format to allow simple comparison of traces against a single set of reference traces.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
470 |
buffer[3] = (data >> 24) & 0xff; |
5a7ae076410e
ensure that out PcapTraces are generated in a consistant format to allow simple comparison of traces against a single set of reference traces.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
471 |
WriteData (buffer, 4); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
472 |
} |
3012 | 473 |
|
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
474 |
void |
122
6b8f1eda5c57
fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
111
diff
changeset
|
475 |
PcapWriter::Write16 (uint16_t data) |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
476 |
{ |
2906
5a7ae076410e
ensure that out PcapTraces are generated in a consistant format to allow simple comparison of traces against a single set of reference traces.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
477 |
uint8_t buffer[2]; |
5a7ae076410e
ensure that out PcapTraces are generated in a consistant format to allow simple comparison of traces against a single set of reference traces.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
478 |
buffer[0] = (data >> 0) & 0xff; |
5a7ae076410e
ensure that out PcapTraces are generated in a consistant format to allow simple comparison of traces against a single set of reference traces.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
479 |
buffer[1] = (data >> 8) & 0xff; |
5a7ae076410e
ensure that out PcapTraces are generated in a consistant format to allow simple comparison of traces against a single set of reference traces.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
2834
diff
changeset
|
480 |
WriteData (buffer, 2); |
9
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
481 |
} |
2c31ae7c94db
import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
482 |
|
4492
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
483 |
void |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
484 |
PcapWriter::Write8 (uint8_t data) |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
485 |
{ |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
486 |
WriteData (&data, 1); |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
487 |
} |
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
488 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
489 |
|
3ebeb7bf3c15
added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents:
4099
diff
changeset
|
490 |
|
2773
fef4f59da3f8
remove useless trailing ;
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
1866
diff
changeset
|
491 |
} // namespace ns3 |