src/common/pcap-writer.cc
author Nicola Baldo <nbaldo@cttc.es>
Thu, 13 Aug 2009 09:36:53 +0200
changeset 4709 b0743dbc4e55
parent 4693 ca8cbdd42786
child 4715 d0041768ff60
permissions -rw-r--r--
bug 639: add configurable capture size to pcap
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"
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    32
#include "ns3/uinteger.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
#include "pcap-writer.h"
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
#include "packet.h"
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    36
NS_LOG_COMPONENT_DEFINE ("PcapWriter");
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
    38
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    40
NS_OBJECT_ENSURE_REGISTERED (PcapWriter);
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    41
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
enum {
454
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
    43
  PCAP_ETHERNET = 1,
3012
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
    44
  PCAP_PPP      = 9,
454
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
    45
  PCAP_RAW_IP   = 101,
455
2f16d26e361c add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 454
diff changeset
    46
  PCAP_80211    = 105,
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
    47
  PCAP_80211_PRISM = 119,
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
    48
  PCAP_80211_RADIOTAP  = 127,
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
};
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    51
TypeId 
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    52
PcapWriter::GetTypeId (void)
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    53
{
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    54
  static TypeId tid = TypeId ("ns3::PcapWriter")
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    55
    .SetParent<Object> ()
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    56
    .AddConstructor<PcapWriter> ()
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    57
    .AddAttribute ("CaptureSize",
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    58
                   "Number of bytes to capture at the start of each packet written in the pcap file. Zero means capture all bytes.",
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    59
                   UintegerValue (0),
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    60
                   MakeUintegerAccessor (&PcapWriter::m_captureSize),
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    61
                   MakeUintegerChecker<uint32_t> ())
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    62
    ;
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    63
  return tid;
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    64
}
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
    65
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
PcapWriter::PcapWriter ()
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
{
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    68
  NS_LOG_FUNCTION (this);
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    69
  NS_LOG_LOGIC ("m_writer = 0");
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
    70
  m_writer = 0;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
}
3012
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
    72
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
PcapWriter::~PcapWriter ()
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
{
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    75
  NS_LOG_FUNCTION (this);
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    76
3074
53e41ce6d3de close the writer before deleting it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3012
diff changeset
    77
  if (m_writer != 0)
53e41ce6d3de close the writer before deleting it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3012
diff changeset
    78
    {
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    79
      NS_LOG_LOGIC ("m_writer nonzero " << m_writer);
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    80
      if (m_writer->is_open ())
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    81
        {
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    82
          NS_LOG_LOGIC ("m_writer open.  Closing " << m_writer);
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    83
          m_writer->close ();
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    84
        }
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    85
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    86
      NS_LOG_LOGIC ("Deleting writer " << m_writer);
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    87
      delete 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 ("m_writer = 0");
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    90
      m_writer = 0;
3074
53e41ce6d3de close the writer before deleting it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3012
diff changeset
    91
    }
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    92
  else
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_LOG_LOGIC ("m_writer == 0");
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
    95
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
}
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
void
456
5361882cc2f3 put together a PcapTrace and test it
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 455
diff changeset
    99
PcapWriter::Open (std::string const &name)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
{
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   101
  NS_LOG_FUNCTION (this << name);
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   102
  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
   103
458
0a5f4f427d66 remove dependency on SystemFile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 456
diff changeset
   104
  m_writer = new std::ofstream ();
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   105
  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
   106
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   107
  NS_LOG_LOGIC ("Created writer " << m_writer);
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   108
4099
03dc74055f8a bug 329: pcap files generated in native win32 (mingw) are always corrupt
Guillaume Vu-Brugier <gvubrugier@gmail.com>
parents: 3922
diff changeset
   109
  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
   110
  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
   111
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   112
  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
   113
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   114
  NS_LOG_LOGIC ("Writer opened successfully");
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
void 
454
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   118
PcapWriter::WriteEthernetHeader (void)
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   119
{
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   120
  NS_LOG_FUNCTION_NOARGS ();
454
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   121
  WriteHeader (PCAP_ETHERNET);
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   122
}
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   123
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   124
void 
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   125
PcapWriter::WriteIpHeader (void)
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   126
{
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   127
  NS_LOG_FUNCTION_NOARGS ();
454
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   128
  WriteHeader (PCAP_RAW_IP);
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   129
}
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   130
455
2f16d26e361c add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 454
diff changeset
   131
void
2f16d26e361c add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 454
diff changeset
   132
PcapWriter::WriteWifiHeader (void)
2f16d26e361c add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 454
diff changeset
   133
{
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   134
  NS_LOG_FUNCTION_NOARGS ();
455
2f16d26e361c add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 454
diff changeset
   135
  WriteHeader (PCAP_80211);
2f16d26e361c add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 454
diff changeset
   136
}
2f16d26e361c add wifi pcap output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 454
diff changeset
   137
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   138
void
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   139
PcapWriter::WriteWifiRadiotapHeader (void)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   140
{
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   141
  NS_LOG_FUNCTION_NOARGS ();
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   142
  WriteHeader (PCAP_80211_RADIOTAP);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   143
}
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   144
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   145
void
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   146
PcapWriter::WriteWifiPrismHeader (void)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   147
{
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   148
  NS_LOG_FUNCTION_NOARGS ();
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   149
  WriteHeader (PCAP_80211_PRISM);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   150
}
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   151
454
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   152
void 
3012
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   153
PcapWriter::WritePppHeader (void)
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   154
{
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   155
  NS_LOG_FUNCTION_NOARGS ();
3012
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   156
  WriteHeader (PCAP_PPP);
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   157
}
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   158
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   159
void 
454
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   160
PcapWriter::WriteHeader (uint32_t network)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
{
3922
d549fa894719 instrument PcapWriter
Craig Dowell <craigdo@ee.washington.edu>
parents: 3074
diff changeset
   162
  NS_LOG_FUNCTION (this << network);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   163
  Write32 (0xa1b2c3d4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   164
  Write16 (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   165
  Write16 (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   166
  Write32 (0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   167
  Write32 (0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   168
  Write32 (0xffff);
454
f7d4e9f00b00 add ip output
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 163
diff changeset
   169
  Write32 (network);
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   170
  m_pcapMode = network;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   173
void 
1866
e7dbcc4df546 do not use Packet objects directly. Use Ptr<Packet> instead
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 458
diff changeset
   174
PcapWriter::WritePacket (Ptr<const Packet> packet)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   176
  if (m_writer != 0) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   177
    {
163
2a7e05018eeb rename Time::ApproximateTo methods to Time::Get
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   178
      uint64_t current = Simulator::Now ().GetMicroSeconds ();
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   179
      uint64_t s = current / 1000000;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   180
      uint64_t us = current % 1000000;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   181
      Write32 (s & 0xffffffff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   182
      Write32 (us & 0xffffffff);
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   183
      uint32_t thisCaptureSize;
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   184
      if (m_captureSize == 0)
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   185
        {
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   186
          thisCaptureSize = packet->GetSize ();
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   187
        }
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   188
      else
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   189
        {
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   190
          thisCaptureSize = std::min (m_captureSize, packet->GetSize ());         
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   191
        }          
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   192
      Write32 (thisCaptureSize); 
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   193
      Write32 (packet->GetSize ()); // actual packet size
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   194
      packet->CopyData (m_writer, thisCaptureSize);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 143
diff changeset
   195
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   198
4498
1b3d01bd974d fix build with gcc 3.4.6
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4492
diff changeset
   199
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
   200
                                        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
   201
                                        double signalDbm, double noiseDbm)
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   202
{  
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   203
  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
   204
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   205
  if (m_writer == 0) 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   206
    {
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   207
      return;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   208
    }
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
  if (m_pcapMode == PCAP_80211)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   211
    {
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   212
      WritePacket (packet);    
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   213
      return;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   214
    }
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   215
  
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   216
  /* 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
   217
  
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   218
  uint64_t current = Simulator::Now ().GetMicroSeconds ();
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   219
  uint64_t s = current / 1000000;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   220
  uint64_t us = current % 1000000;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   221
  Write32 (s & 0xffffffff);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   222
  Write32 (us & 0xffffffff);
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
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   225
  // MAC timestamp. Actually according to radiotap specifications
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   226
  // (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
   227
  // 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
   228
  // 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
   229
  // 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
   230
  // 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
   231
  // 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
   232
  // but madwifi actually uses it).
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   233
  uint64_t tsft = current;    
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   234
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   235
  
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   236
  uint32_t wifiMonitorHeaderSize;  
4492
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
  if (m_pcapMode == PCAP_80211_PRISM)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   239
    {
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   240
      
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   241
#define PRISM_MSG_CODE		 0x00000044
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   242
#define PRISM_MSG_LENGTH         144
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   243
#define PRISM_DID_HOSTTIME	 0x00010044
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   244
#define PRISM_DID_MACTIME	 0x00020044
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   245
#define PRISM_DID_CHANNEL	 0x00030044
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   246
#define PRISM_DID_RSSI	         0x00040044
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   247
#define PRISM_DID_SQ		 0x00050044
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   248
#define PRISM_DID_SIGNAL	 0x00060044
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   249
#define PRISM_DID_NOISE	         0x00070044
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   250
#define PRISM_DID_RATE	         0x00080044
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   251
#define PRISM_DID_ISTX	         0x00090044
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   252
#define PRISM_DID_FRMLEN	 0x000A0044
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   253
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   254
#define PRISM_STATUS_PRESENT    0
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   255
#define PRISM_STATUS_ABSENT     1
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   256
#define PRISM_ITEM_LENGTH       4
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   257
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   258
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   259
      wifiMonitorHeaderSize = PRISM_MSG_LENGTH;
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   260
      if (m_captureSize == 0)
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   261
        {
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   262
          Write32 (packet->GetSize () + wifiMonitorHeaderSize); // captured size == actual packet size
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   263
        }
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   264
      else
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   265
        {
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   266
          uint32_t thisCaptureSize = std::min (m_captureSize, packet->GetSize () + wifiMonitorHeaderSize);         
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   267
          Write32 (thisCaptureSize); 
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   268
        }
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   269
      Write32 (packet->GetSize () + wifiMonitorHeaderSize); // actual packet size
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
      Write32(PRISM_MSG_CODE);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   272
      Write32(PRISM_MSG_LENGTH);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   273
      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
   274
    
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   275
      Write32(PRISM_DID_HOSTTIME);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   276
      Write16(PRISM_STATUS_PRESENT);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   277
      Write16(PRISM_ITEM_LENGTH); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   278
      // madwifi reports hosttime in jiffies. 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   279
      // We calculate jiffies assuming HZ = 10
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   280
      Write32((uint32_t) (Now ().GetMilliSeconds () / 10 ) ); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   281
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   282
      Write32(PRISM_DID_MACTIME);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   283
      Write16(PRISM_STATUS_PRESENT);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   284
      Write16(PRISM_ITEM_LENGTH); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   285
      // 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
   286
      // header format.
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   287
      Write32((uint32_t) tsft);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   288
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   289
      Write32(PRISM_DID_CHANNEL);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   290
      Write16(PRISM_STATUS_PRESENT);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   291
      Write16(PRISM_ITEM_LENGTH); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   292
      // 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
   293
      // correct only for IEEE 802.11b/g channels 1-13.
4693
ca8cbdd42786 back out Radiotap header change causing regression
Kirill Andreev <andreev@iitp.ru>
parents: 4518
diff changeset
   294
      Write32((2437 - 2407) / 5);
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   295
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   296
      Write32(PRISM_DID_RSSI);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   297
      Write16(PRISM_STATUS_PRESENT);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   298
      Write16(PRISM_ITEM_LENGTH); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   299
      // 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
   300
      // 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
   301
      // (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
   302
      // 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
   303
      // (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
   304
      // 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
   305
      // 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
   306
      Write32((uint32_t)round(signalDbm - noiseDbm));
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   307
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   308
      // 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
   309
      // 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
   310
      // 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
   311
      // zeroed. 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   312
      Write32(0);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   313
      Write16(0);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   314
      Write16(0); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   315
      Write32(0);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   316
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   317
      Write32(PRISM_DID_SIGNAL);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   318
      Write16(PRISM_STATUS_PRESENT);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   319
      Write16(PRISM_ITEM_LENGTH); 
4498
1b3d01bd974d fix build with gcc 3.4.6
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4492
diff changeset
   320
      Write32((uint32_t)round(signalDbm));
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   321
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   322
      Write32(PRISM_DID_NOISE);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   323
      Write16(PRISM_STATUS_PRESENT);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   324
      Write16(PRISM_ITEM_LENGTH); 
4498
1b3d01bd974d fix build with gcc 3.4.6
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4492
diff changeset
   325
      Write32((uint32_t)round(noiseDbm));
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   326
            
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   327
      Write32(PRISM_DID_RATE);    
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   328
      Write16(PRISM_STATUS_PRESENT);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   329
      Write16(PRISM_ITEM_LENGTH); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   330
      Write32(rate);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   331
 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   332
      Write32(PRISM_DID_ISTX);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   333
      Write16(PRISM_STATUS_PRESENT);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   334
      Write16(PRISM_ITEM_LENGTH); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   335
      Write32(isTx ? 1 : 0);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   336
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   337
      Write32(PRISM_DID_FRMLEN);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   338
      Write16(PRISM_STATUS_ABSENT);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   339
      Write16(PRISM_ITEM_LENGTH); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   340
      Write32(packet->GetSize ());    
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   341
      
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   342
    
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   343
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   344
    } // PCAP_80211_PRISM
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   345
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   346
  else if (m_pcapMode == PCAP_80211_RADIOTAP)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   347
    {      
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   348
      NS_LOG_LOGIC("writing radiotap packet");
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_TSFT               0x00000001
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   351
#define	RADIOTAP_FLAGS              0x00000002
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   352
#define	RADIOTAP_RATE               0x00000004
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   353
#define RADIOTAP_CHANNEL            0x00000008
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   354
#define	RADIOTAP_FHSS               0x00000010
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   355
#define RADIOTAP_DBM_ANTSIGNAL      0x00000020
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   356
#define RADIOTAP_DBM_ANTNOISE       0x00000040
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   357
#define RADIOTAP_LOCK_QUALITY       0x00000080
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   358
#define RADIOTAP_TX_ATTENUATION     0x00000100    
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   359
#define RADIOTAP_DB_TX_ATTENUATION  0x00000200
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   360
#define RADIOTAP_DBM_TX_POWER       0x00000200
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   361
#define RADIOTAP_ANTENNA            0x00000400
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   362
#define RADIOTAP_DB_ANTSIGNAL       0x00000800
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   363
#define RADIOTAP_DB_ANTNOISE        0x00001000
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   364
#define RADIOTAP_EXT                0x10000000
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   365
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   366
#define	RADIOTAP_FLAG_NONE	   0x00	
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   367
#define	RADIOTAP_FLAG_CFP	   0x01	
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   368
#define	RADIOTAP_FLAG_SHORTPRE	   0x02	
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   369
#define	RADIOTAP_FLAG_WEP	   0x04	
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   370
#define	RADIOTAP_FLAG_FRAG	   0x08	
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   371
#define	RADIOTAP_FLAG_FCS	   0x10	
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   372
#define	RADIOTAP_FLAG_DATAPAD	   0x20	
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   373
#define	RADIOTAP_FLAG_BADFCS	   0x40	
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
#define	RADIOTAP_CHANNEL_TURBO	  0x0010
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   376
#define	RADIOTAP_CHANNEL_CCK	  0x0020
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   377
#define	RADIOTAP_CHANNEL_OFDM	  0x0040
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   378
#define	RADIOTAP_CHANNEL_2GHZ	  0x0080
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   379
#define	RADIOTAP_CHANNEL_5GHZ	  0x0100
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   380
#define	RADIOTAP_CHANNEL_PASSIVE  0x0200
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   381
#define	RADIOTAP_CHANNEL_DYN	  0x0400
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   382
#define	RADIOTAP_CHANNEL_GFSK	  0x0800
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
#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
   385
#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
   386
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   387
#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
   388
#define RADIOTAP_TX_LENGTH (8+8+1+1+2+2)
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   389
      
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   390
      if (isTx)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   391
        {
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   392
          wifiMonitorHeaderSize = RADIOTAP_TX_LENGTH;
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   393
        }
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   394
      else
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   395
        {
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   396
          wifiMonitorHeaderSize = RADIOTAP_RX_LENGTH;
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   397
        }      
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   398
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   399
      if (m_captureSize == 0)
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   400
        {
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   401
          Write32 (packet->GetSize () + wifiMonitorHeaderSize); // captured size == actual packet size
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   402
        }
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   403
      else
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   404
        {
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   405
          uint32_t thisCaptureSize = std::min (m_captureSize, packet->GetSize () + wifiMonitorHeaderSize);         
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   406
          Write32 (thisCaptureSize); 
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   407
        }
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   408
      Write32 (packet->GetSize () + wifiMonitorHeaderSize); // actual packet size
4492
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
      Write8(0); // radiotap version
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   411
      Write8(0); // padding
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
      if (isTx)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   414
        {
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   415
          Write16(RADIOTAP_TX_LENGTH); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   416
          Write32(RADIOTAP_TX_PRESENT); 
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
      else
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
          Write16(RADIOTAP_RX_LENGTH); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   421
          Write32(RADIOTAP_RX_PRESENT); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   422
        }
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
      Write64(tsft); 
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
      uint8_t flags = RADIOTAP_FLAG_NONE;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   427
      if (isShortPreamble)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   428
        {
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   429
          flags |= RADIOTAP_FLAG_SHORTPRE; 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   430
        }
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   431
      Write8(flags);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   432
      
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
      Write8(rate); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   435
4693
ca8cbdd42786 back out Radiotap header change causing regression
Kirill Andreev <andreev@iitp.ru>
parents: 4518
diff changeset
   436
      Write16((uint16_t) 2437); 
4492
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
      // 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
   439
      // 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
   440
      // 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
   441
      Write16(RADIOTAP_CHANNEL_OFDM | RADIOTAP_CHANNEL_2GHZ); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   442
    
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   443
      if (!isTx)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   444
        {
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   445
          
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   446
          Write8 (RoundToInt8 (signalDbm)); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   447
          Write8 (RoundToInt8 (noiseDbm)); 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   448
        }
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   449
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   450
    } // PCAP_80211_RADIOTAP
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   451
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   452
    
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   453
  else
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   454
    {
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   455
      NS_LOG_ERROR("unknown PCAP mode");      
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   456
      return;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   457
    }    
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   458
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   459
  // finally, write rest of packet
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   460
  if (m_captureSize == 0)
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   461
    {
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   462
      packet->CopyData (m_writer, packet->GetSize ());
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   463
    }
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   464
  else
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   465
    {
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   466
      packet->CopyData (m_writer, m_captureSize - wifiMonitorHeaderSize);      
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   467
    }
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   468
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   469
}
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   470
    
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   471
  
4709
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   472
void 
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   473
PcapWriter::SetCaptureSize (uint32_t size)
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   474
{
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   475
  m_captureSize = size;
b0743dbc4e55 bug 639: add configurable capture size to pcap
Nicola Baldo <nbaldo@cttc.es>
parents: 4693
diff changeset
   476
}
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   477
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   478
int8_t 
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   479
PcapWriter::RoundToInt8 (double value)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   480
{
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   481
  if (value < -128)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   482
    {
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   483
      return -128;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   484
    }
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   485
  if (value > 127)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   486
    {
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   487
      return 127;
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
  return ((int8_t) round(value));
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   490
}
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   491
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   493
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   494
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   495
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   496
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   497
void
458
0a5f4f427d66 remove dependency on SystemFile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 456
diff changeset
   498
PcapWriter::WriteData (uint8_t const*buffer, uint32_t size)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   499
{
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   500
  NS_LOG_FUNCTION(this << size);
458
0a5f4f427d66 remove dependency on SystemFile
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 456
diff changeset
   501
  m_writer->write ((char const *)buffer, size);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   502
}
3012
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   503
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   504
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   505
void
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   506
PcapWriter::Write64 (uint64_t data)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   507
{
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   508
  uint8_t buffer[8];
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   509
  buffer[0] = (data >> 0) & 0xff;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   510
  buffer[1] = (data >> 8) & 0xff;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   511
  buffer[2] = (data >> 16) & 0xff;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   512
  buffer[3] = (data >> 24) & 0xff;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   513
  buffer[4] = (data >> 32) & 0xff;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   514
  buffer[5] = (data >> 40) & 0xff;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   515
  buffer[6] = (data >> 48) & 0xff;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   516
  buffer[7] = (data >> 56) & 0xff;
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   517
  WriteData (buffer, 8);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   518
}
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   519
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   520
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   521
PcapWriter::Write32 (uint32_t data)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   522
{
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
   523
  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
   524
  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
   525
  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
   526
  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
   527
  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
   528
  WriteData (buffer, 4);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   529
}
3012
56a4c75f9422 fix bug 161
Craig Dowell <craigdo@ee.washington.edu>
parents: 2906
diff changeset
   530
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   531
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   532
PcapWriter::Write16 (uint16_t data)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   533
{
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
   534
  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
   535
  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
   536
  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
   537
  WriteData (buffer, 2);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   538
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   539
4492
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   540
void
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   541
PcapWriter::Write8 (uint8_t data)
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   542
{
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   543
  WriteData (&data, 1);
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   544
}
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   545
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   546
3ebeb7bf3c15 added support for radiotap and prism headers
Nicola Baldo <nbaldo@cttc.es>
parents: 4099
diff changeset
   547
2773
fef4f59da3f8 remove useless trailing ;
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1866
diff changeset
   548
} // namespace ns3