src/helper/yans-wifi-helper.cc
changeset 4492 3ebeb7bf3c15
parent 4264 9d2e96c4e6e4
child 4497 43c7dfd72eb1
--- a/src/helper/yans-wifi-helper.cc	Wed Jun 03 10:04:51 2009 +0200
+++ b/src/helper/yans-wifi-helper.cc	Wed Jun 03 11:53:26 2009 +0200
@@ -31,11 +31,19 @@
 
 namespace ns3 {
 
-static void PcapSnifferEvent (Ptr<PcapWriter> writer, Ptr<const Packet> packet)
+static void PcapSniffTxEvent (Ptr<PcapWriter> writer, Ptr<const Packet> packet, uint16_t channelFreqMhz,  uint32_t rate, bool isShortPreamble)
 {
-  writer->WritePacket (packet);
+  const double unusedValue = 0;
+  writer->WriteWifiMonitorPacket(packet, channelFreqMhz, rate, isShortPreamble, true, unusedValue, unusedValue); 
 }
 
+
+static void PcapSniffRxEvent (Ptr<PcapWriter> writer, Ptr<const Packet> packet, uint16_t channelFreqMhz,  uint32_t rate, bool isShortPreamble, double signalDbm, double noiseDbm)
+{
+  writer->WriteWifiMonitorPacket(packet, channelFreqMhz, rate, isShortPreamble, false, signalDbm, noiseDbm); 
+}
+
+
 static void AsciiPhyTxEvent (std::ostream *os, std::string context, 
                              Ptr<const Packet> packet,
                              WifiMode mode, WifiPreamble preamble, 
@@ -137,7 +145,9 @@
 
 
 YansWifiPhyHelper::YansWifiPhyHelper ()
-  : m_channel (0)
+  : m_channel (0),
+    m_pcapFormat(PCAP_FORMAT_80211)
+    
 {
   m_phy.SetTypeId ("ns3::YansWifiPhy");
 }
@@ -202,6 +212,14 @@
   return phy;
 }
 
+
+void 
+YansWifiPhyHelper::SetPcapFormat (enum PcapFormat format)
+{
+  m_pcapFormat = format;
+}
+
+
 void 
 YansWifiPhyHelper::EnablePcap (std::string filename, uint32_t nodeid, uint32_t deviceid)
 {
@@ -218,11 +236,28 @@
   // with the locally-defined WifiPhyHelper::Create method.
   Ptr<PcapWriter> pcap = ::ns3::Create<PcapWriter> ();
   pcap->Open (oss.str ());
-  pcap->WriteWifiHeader ();
+
+  switch (m_pcapFormat) {
+  case PCAP_FORMAT_80211:
+    pcap->WriteWifiHeader ();  
+    break;
+  case PCAP_FORMAT_80211_RADIOTAP:
+    pcap->WriteWifiRadiotapHeader ();  
+    break;
+  case PCAP_FORMAT_80211_PRISM:
+    pcap->WriteWifiPrismHeader ();  
+    break;
+  }
+  
   oss.str ("");
   oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid;
-  oss << "/$ns3::WifiNetDevice/Phy/PromiscSniffer";
-  Config::ConnectWithoutContext (oss.str (), MakeBoundCallback (&PcapSnifferEvent, pcap));
+  oss << "/$ns3::WifiNetDevice/Phy/PromiscSnifferTx";
+  Config::ConnectWithoutContext (oss.str (), MakeBoundCallback (&PcapSniffTxEvent, pcap));
+
+  oss.str ("");
+  oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid;
+  oss << "/$ns3::WifiNetDevice/Phy/PromiscSnifferRx";
+  Config::ConnectWithoutContext (oss.str (), MakeBoundCallback (&PcapSniffRxEvent, pcap));  
 }
 
 void