diff --git a/src/netanim/model/animation-interface.cc b/src/netanim/model/animation-interface.cc index 7f2bca8a9..a0135fa1c 100644 --- a/src/netanim/model/animation-interface.cc +++ b/src/netanim/model/animation-interface.cc @@ -61,7 +61,7 @@ AnimationInterface::AnimationInterface () : m_fHandle (STDOUT_FILENO), m_xml (false), mobilitypollinterval (Seconds(0.25)), usingSockets (false), mport (0), outputfilename (""), OutputFileSet (false), ServerPortSet (false), gAnimUid (0),randomPosition (true), - m_writeCallback (0), m_started (false) + m_writeCallback (0), m_started (false), m_enforceWifiMacRx (true) { initialized = true; StartAnimation (); @@ -71,7 +71,7 @@ AnimationInterface::AnimationInterface (const std::string fn, bool usingXML) : m_fHandle (STDOUT_FILENO), m_xml (usingXML), mobilitypollinterval (Seconds(0.25)), usingSockets (false), mport (0), outputfilename (fn), OutputFileSet (false), ServerPortSet (false), gAnimUid (0), randomPosition (true), - m_writeCallback (0), m_started (false) + m_writeCallback (0), m_started (false), m_enforceWifiMacRx (true) { initialized = true; StartAnimation (); @@ -81,7 +81,7 @@ AnimationInterface::AnimationInterface (const uint16_t port, bool usingXML) : m_fHandle (STDOUT_FILENO), m_xml (usingXML), mobilitypollinterval (Seconds(0.25)), usingSockets (true), mport (port), outputfilename (""), OutputFileSet (false), ServerPortSet (false), gAnimUid (0), randomPosition (true), - m_writeCallback (0), m_started (false) + m_writeCallback (0), m_started (false), m_enforceWifiMacRx (true) { initialized = true; StartAnimation (); @@ -480,6 +480,10 @@ void AnimationInterface::ConnectCallbacks () MakeCallback (&AnimationInterface::WifiPhyTxBeginTrace, this)); Config::Connect ("NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyRxBegin", MakeCallback (&AnimationInterface::WifiPhyRxBeginTrace, this)); + Config::Connect ("NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyRxEnd", + MakeCallback (&AnimationInterface::WifiPhyRxEndTrace, this)); + Config::Connect ("NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/MacRx", + MakeCallback (&AnimationInterface::WifiMacRxTrace, this)); Config::ConnectWithoutContext ("/NodeList/*/$ns3::MobilityModel/CourseChange", MakeCallback (&AnimationInterface::MobilityCourseChangeTrace, this)); Config::Connect ("/NodeList/*/DeviceList/*/$ns3::WimaxNetDevice/Tx", @@ -536,6 +540,10 @@ int AnimationInterface::WriteN (int h, const std::string& st) return WriteN (h, st.c_str (), st.length ()); } +void AnimationInterface::ShowAll802_11 (bool showAll) +{ + m_enforceWifiMacRx = !showAll; +} // Private methods void AnimationInterface::AddMargin () @@ -783,6 +791,8 @@ void AnimationInterface::WifiPhyRxBeginTrace (std::string context, } // TODO: NS_ASSERT (WifiPacketIsPending (AnimUid) == true); pendingWifiPackets[AnimUid].ProcessRxBegin (ndev, Simulator::Now ()); + if (m_enforceWifiMacRx) + return; pendingWifiPackets[AnimUid].ProcessRxEnd (ndev, Simulator::Now (), UpdatePosition (n)); OutputWirelessPacket (pendingWifiPackets[AnimUid], pendingWifiPackets[AnimUid].GetRxInfo (ndev)); } @@ -811,6 +821,8 @@ void AnimationInterface::WifiPhyRxEndTrace (std::string context, void AnimationInterface::WifiMacRxTrace (std::string context, Ptr p) { + if (!m_enforceWifiMacRx) + return; if (!m_started) return; Ptr ndev = GetNetDeviceFromContext (context); diff --git a/src/netanim/model/animation-interface.h b/src/netanim/model/animation-interface.h index 2e6727463..50a0d6c0e 100644 --- a/src/netanim/model/animation-interface.h +++ b/src/netanim/model/animation-interface.h @@ -217,6 +217,14 @@ public: */ bool IsStarted (void); + /** + * \brief Show all 802.11 frames. Default: show only frames accepted by mac layer + * \param showAll if true shows all 802.11 frames including beacons, association + * request and acks (very chatty). if false only frames accepted by mac layer + * + */ + void ShowAll802_11 (bool showAll); + private: #ifndef WIN32 int m_fHandle; // File handle for output (-1 if none) @@ -327,6 +335,7 @@ private: void ConnectCallbacks (); bool m_started; + bool m_enforceWifiMacRx; // Path helper std::vector GetElementsFromContext (std::string context);