diff -r 893d48fcf7f3 -r 3ebeb7bf3c15 src/helper/yans-wifi-helper.cc --- 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 writer, Ptr packet) +static void PcapSniffTxEvent (Ptr writer, Ptr 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 writer, Ptr 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 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 pcap = ::ns3::Create (); 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