--- a/src/netanim/model/animation-interface.cc Sun Mar 18 20:43:18 2012 +0100
+++ b/src/netanim/model/animation-interface.cc Mon Mar 19 13:20:16 2012 -0700
@@ -61,7 +61,8 @@
: 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_enforceWifiMacRx (true)
+ m_writeCallback (0), m_started (false), m_enforceWifiMacRx (true),
+ m_enablePacketMetadata (false)
{
initialized = true;
StartAnimation ();
@@ -71,7 +72,8 @@
: 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_enforceWifiMacRx (true)
+ m_writeCallback (0), m_started (false), m_enforceWifiMacRx (true),
+ m_enablePacketMetadata (false)
{
initialized = true;
StartAnimation ();
@@ -81,7 +83,8 @@
: 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_enforceWifiMacRx (true)
+ m_writeCallback (0), m_started (false), m_enforceWifiMacRx (true),
+ m_enablePacketMetadata (false)
{
initialized = true;
StartAnimation ();
@@ -123,6 +126,13 @@
return true;
}
+void AnimationInterface::EnablePacketMetadata (bool enable)
+{
+ m_enablePacketMetadata = enable;
+ if (enable)
+ Packet::EnablePrinting ();
+}
+
bool AnimationInterface::IsInitialized ()
{
return initialized;
@@ -642,8 +652,8 @@
double lbRx = now.GetSeconds ();
if (m_xml)
{
- oss << GetXMLOpen_packet (0,0,fbTx,lbTx,"DummyPktIgnoreThis");
- oss << GetXMLOpenClose_rx (0,0,fbRx,lbRx);
+ oss << GetXMLOpen_packet (0, 0, fbTx, lbTx, "DummyPktIgnoreThis");
+ oss << GetXMLOpenClose_rx (0, 0, fbRx, lbRx);
oss << GetXMLClose ("packet");
}
WriteN (m_fHandle, oss.str ());
@@ -666,8 +676,10 @@
double lbRx = (now + rxTime).GetSeconds ();
if (m_xml)
{
- oss << GetXMLOpen_packet (0,tx->GetNode ()->GetId (),fbTx,lbTx);
- oss << GetXMLOpenClose_rx (0,rx->GetNode ()->GetId (),fbRx,lbRx);
+ oss << GetXMLOpen_packet (0, tx->GetNode ()->GetId (), fbTx, lbTx);
+ oss << GetXMLOpenClose_rx (0, rx->GetNode ()->GetId (), fbRx, lbRx);
+ if (m_enablePacketMetadata)
+ oss << GetXMLOpenClose_meta (GetPacketMetadata (p));
oss << GetXMLClose ("packet");
}
else
@@ -794,7 +806,7 @@
if (m_enforceWifiMacRx)
return;
pendingWifiPackets[AnimUid].ProcessRxEnd (ndev, Simulator::Now (), UpdatePosition (n));
- OutputWirelessPacket (pendingWifiPackets[AnimUid], pendingWifiPackets[AnimUid].GetRxInfo (ndev));
+ OutputWirelessPacket (p, pendingWifiPackets[AnimUid], pendingWifiPackets[AnimUid].GetRxInfo (ndev));
}
@@ -841,7 +853,7 @@
if (pktrxInfo.IsPhyRxComplete ())
{
NS_LOG_INFO ("MacRxTrace for packet:" << AnimUid << " complete");
- OutputWirelessPacket (pktInfo, pktrxInfo);
+ OutputWirelessPacket (p, pktInfo, pktrxInfo);
}
}
@@ -885,7 +897,7 @@
pktInfo.ProcessRxEnd (ndev, Simulator::Now () + Seconds (0.001), UpdatePosition (n));
//TODO 0.001 is used until Wimax implements RxBegin and RxEnd traces
AnimRxInfo pktrxInfo = pktInfo.GetRxInfo (ndev);
- OutputWirelessPacket (pktInfo, pktrxInfo);
+ OutputWirelessPacket (p, pktInfo, pktrxInfo);
}
void AnimationInterface::LteTxTrace (std::string context, Ptr<const Packet> p, const Mac48Address & m)
@@ -927,7 +939,7 @@
pktInfo.ProcessRxEnd (ndev, Simulator::Now () + Seconds (0.001), UpdatePosition (n));
//TODO 0.001 is used until Lte implements RxBegin and RxEnd traces
AnimRxInfo pktrxInfo = pktInfo.GetRxInfo (ndev);
- OutputWirelessPacket (pktInfo, pktrxInfo);
+ OutputWirelessPacket (p, pktInfo, pktrxInfo);
}
@@ -1011,7 +1023,7 @@
if (pktrxInfo.IsPhyRxComplete ())
{
NS_LOG_INFO ("MacRxTrace for packet:" << AnimUid << " complete");
- OutputCsmaPacket (pktInfo, pktrxInfo);
+ OutputCsmaPacket (p, pktInfo, pktrxInfo);
}
}
@@ -1082,6 +1094,12 @@
}
}
+std::string AnimationInterface::GetPacketMetadata (Ptr<const Packet> p)
+{
+ std::ostringstream oss;
+ p->Print (oss);
+ return oss.str ();
+}
// Helper to output a wireless packet.
// For now, only the XML interface is supported
@@ -1134,7 +1152,7 @@
return s;
}
-void AnimationInterface::OutputWirelessPacket (AnimPacketInfo &pktInfo, AnimRxInfo pktrxInfo)
+void AnimationInterface::OutputWirelessPacket (Ptr<const Packet> p, AnimPacketInfo &pktInfo, AnimRxInfo pktrxInfo)
{
NS_ASSERT (m_xml);
std::ostringstream oss;
@@ -1146,12 +1164,14 @@
uint32_t rxId = pktrxInfo.m_rxnd->GetNode ()->GetId ();
oss << GetXMLOpenClose_rx (0, rxId, pktrxInfo.m_fbRx, pktrxInfo.m_lbRx);
+ if (m_enablePacketMetadata)
+ oss << GetXMLOpenClose_meta (GetPacketMetadata (p));
oss << GetXMLClose ("wpacket");
WriteN (m_fHandle, oss.str ());
}
-void AnimationInterface::OutputCsmaPacket (AnimPacketInfo &pktInfo, AnimRxInfo pktrxInfo)
+void AnimationInterface::OutputCsmaPacket (Ptr<const Packet> p, AnimPacketInfo &pktInfo, AnimRxInfo pktrxInfo)
{
NS_ASSERT (m_xml);
std::ostringstream oss;
@@ -1161,6 +1181,8 @@
oss << GetXMLOpen_packet (0, nodeId, pktInfo.m_fbTx, pktInfo.m_lbTx);
uint32_t rxId = pktrxInfo.m_rxnd->GetNode ()->GetId ();
oss << GetXMLOpenClose_rx (0, rxId, pktrxInfo.m_fbRx, pktrxInfo.m_lbRx);
+ if (m_enablePacketMetadata)
+ oss << GetXMLOpenClose_meta (GetPacketMetadata (p));
oss << GetXMLClose ("packet");
WriteN (m_fHandle, oss.str ());
}
@@ -1251,6 +1273,14 @@
return oss.str ();
}
+std::string AnimationInterface::GetXMLOpenClose_meta (std::string metaInfo)
+{
+ std::ostringstream oss;
+ oss << "<meta info=\""
+ << metaInfo << " />" << std::endl;
+ return oss.str ();
+}
+
std::vector<std::string> AnimationInterface::GetElementsFromContext (std::string context)
{
std::vector <std::string> elements;
--- a/src/netanim/model/animation-interface.h Sun Mar 18 20:43:18 2012 +0100
+++ b/src/netanim/model/animation-interface.h Mon Mar 19 13:20:16 2012 -0700
@@ -225,6 +225,14 @@
*/
void ShowAll802_11 (bool showAll);
+ /**
+ *
+ * \brief Enable Packet metadata
+ * \param enable if true enables writing the packet metadata to the XML trace file
+ * if false disables writing the packet metadata
+ */
+ void EnablePacketMetadata (bool enable);
+
private:
#ifndef WIN32
int m_fHandle; // File handle for output (-1 if none)
@@ -289,8 +297,8 @@
// Write a string to the specified handle;
int WriteN (int, const std::string&);
- void OutputWirelessPacket (AnimPacketInfo& pktInfo, AnimRxInfo pktrxInfo);
- void OutputCsmaPacket (AnimPacketInfo& pktInfo, AnimRxInfo pktrxInfo);
+ void OutputWirelessPacket (Ptr<const Packet> p, AnimPacketInfo& pktInfo, AnimRxInfo pktrxInfo);
+ void OutputCsmaPacket (Ptr<const Packet> p, AnimPacketInfo& pktInfo, AnimRxInfo pktrxInfo);
void MobilityAutoCheck ();
uint64_t gAnimUid ; // Packet unique identifier used by Animtion
@@ -336,6 +344,7 @@
bool m_started;
bool m_enforceWifiMacRx;
+ bool m_enablePacketMetadata;
// Path helper
std::vector<std::string> GetElementsFromContext (std::string context);
@@ -349,6 +358,8 @@
double topo_maxX;
double topo_maxY;
+ std::string GetPacketMetadata (Ptr<const Packet> p);
+
std::string GetXMLOpen_anim (uint32_t lp);
std::string GetXMLOpen_topology (double minX,double minY,double maxX,double maxY);
std::string GetXMLOpenClose_node (uint32_t lp,uint32_t id,double locX,double locY);
@@ -357,6 +368,7 @@
std::string GetXMLOpenClose_rx (uint32_t toLp, uint32_t toId, double fbRx, double lbRx);
std::string GetXMLOpen_wpacket (uint32_t fromLp,uint32_t fromId, double fbTx, double lbTx, double range);
std::string GetXMLClose (std::string name) {return "</" + name + ">\n"; }
+ std::string GetXMLOpenClose_meta (std::string metaInfo);
};