src/common/pcap-writer.cc
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--
avoid extra memory allocations when using PcapWriter
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
    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
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
    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
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   135
PcapWriter::WritePppHeader (void)
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   136
{
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   137
  NS_LOG_FUNCTION_NOARGS ();
3012
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   138
  WriteHeader (PCAP_PPP);
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   139
}
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   140
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   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
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   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
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   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