--- a/src/netanim/model/animation-interface.cc Thu May 24 03:02:51 2012 -0400
+++ b/src/netanim/model/animation-interface.cc Fri May 25 11:45:23 2012 -0700
@@ -35,6 +35,8 @@
#include "ns3/wifi-net-device.h"
#include "ns3/wifi-mac.h"
#include "ns3/constant-position-mobility-model.h"
+#include "ns3/lte-ue-phy.h"
+#include "ns3/lte-enb-phy.h"
#include <stdio.h>
#include <unistd.h>
@@ -44,14 +46,6 @@
#include <iomanip>
#include <map>
-// Socket related includes
-#if defined(HAVE_SYS_SOCKET_H) && defined(HAVE_NETINET_IN_H)
-#include <sys/socket.h>
-#include <netinet/in.h>
-#else
-#include <fcntl.h>
-#endif
-
NS_LOG_COMPONENT_DEFINE ("AnimationInterface");
@@ -455,6 +449,77 @@
ConnectCallbacks ();
}
+void AnimationInterface::ConnectLteEnb (Ptr <Node> n, Ptr <LteEnbNetDevice> nd, uint32_t devIndex)
+{
+
+ Ptr<LteEnbPhy> lteEnbPhy = nd->GetPhy ();
+ Ptr<LteSpectrumPhy> dlPhy = lteEnbPhy->GetDownlinkSpectrumPhy ();
+ Ptr<LteSpectrumPhy> ulPhy = lteEnbPhy->GetUplinkSpectrumPhy ();
+ std::ostringstream oss;
+ //NodeList/*/DeviceList/*/
+ oss << "NodeList/" << n->GetId () << "/DeviceList/" << devIndex << "/";
+ if (dlPhy)
+ {
+ dlPhy->TraceConnect ("TxStart",oss.str (), MakeCallback (&AnimationInterface::LteSpectrumPhyTxStart, this));
+ dlPhy->TraceConnect ("RxStart",oss.str (), MakeCallback (&AnimationInterface::LteSpectrumPhyRxStart, this));
+ }
+ if (ulPhy)
+ {
+ ulPhy->TraceConnect ("TxStart",oss.str (), MakeCallback (&AnimationInterface::LteSpectrumPhyTxStart, this));
+ ulPhy->TraceConnect ("RxStart",oss.str (), MakeCallback (&AnimationInterface::LteSpectrumPhyRxStart, this));
+ }
+}
+
+
+
+void AnimationInterface::ConnectLteUe (Ptr <Node> n, Ptr <LteUeNetDevice> nd, uint32_t devIndex)
+{
+
+ Ptr<LteUePhy> lteUePhy = nd->GetPhy ();
+ Ptr<LteSpectrumPhy> dlPhy = lteUePhy->GetDownlinkSpectrumPhy ();
+ Ptr<LteSpectrumPhy> ulPhy = lteUePhy->GetUplinkSpectrumPhy ();
+ std::ostringstream oss;
+ //NodeList/*/DeviceList/*/
+ oss << "NodeList/" << n->GetId () << "/DeviceList/" << devIndex << "/";
+ if (dlPhy)
+ {
+ dlPhy->TraceConnect ("TxStart",oss.str (), MakeCallback (&AnimationInterface::LteSpectrumPhyTxStart, this));
+ dlPhy->TraceConnect ("RxStart",oss.str (), MakeCallback (&AnimationInterface::LteSpectrumPhyRxStart, this));
+ }
+ if (ulPhy)
+ {
+ ulPhy->TraceConnect ("TxStart",oss.str (), MakeCallback (&AnimationInterface::LteSpectrumPhyTxStart, this));
+ ulPhy->TraceConnect ("RxStart",oss.str (), MakeCallback (&AnimationInterface::LteSpectrumPhyRxStart, this));
+ }
+}
+
+void AnimationInterface::ConnectLte ()
+{
+
+ for (NodeList::Iterator i = NodeList::Begin (); i != NodeList::End (); ++i)
+ {
+ Ptr<Node> n = *i;
+ NS_ASSERT (n);
+ uint32_t nDevices = n->GetNDevices ();
+ for (uint32_t devIndex = 0; devIndex < nDevices; ++devIndex)
+ {
+ Ptr <NetDevice> nd = n->GetDevice(devIndex);
+ if (!nd)
+ continue;
+ Ptr<LteUeNetDevice> lteUeNetDevice = DynamicCast<LteUeNetDevice> (nd);
+ if (lteUeNetDevice)
+ {
+ ConnectLteUe (n, lteUeNetDevice, devIndex);
+ continue;
+ }
+ Ptr<LteEnbNetDevice> lteEnbNetDevice = DynamicCast<LteEnbNetDevice> (nd);
+ if (lteEnbNetDevice)
+ ConnectLteEnb (n, lteEnbNetDevice, devIndex);
+ }
+
+ }
+}
+
void AnimationInterface::ConnectCallbacks ()
{
// Connect the callbacks
@@ -483,6 +548,7 @@
Config::Connect ("/NodeList/*/DeviceList/*/$ns3::CsmaNetDevice/MacRx",
MakeCallback (&AnimationInterface::CsmaMacRxTrace, this));
+ ConnectLte ();
}
@@ -933,6 +999,62 @@
OutputWirelessPacket (p, pktInfo, pktrxInfo);
}
+void AnimationInterface::LteSpectrumPhyTxStart (std::string context, Ptr<const PacketBurst> pb)
+{
+ if (!m_started || !IsInTimeWindow ())
+ return;
+ Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
+ NS_ASSERT (ndev);
+ Ptr <Node> n = ndev->GetNode ();
+ NS_ASSERT (n);
+
+ std::list <Ptr <Packet> > pbList = pb->GetPackets ();
+ for (std::list <Ptr <Packet> >::iterator i = pbList.begin ();
+ i != pbList.end ();
+ ++i)
+ {
+ Ptr <Packet> p = *i;
+ gAnimUid++;
+ NS_LOG_INFO ("LteSpectrumPhyTxTrace for packet:" << gAnimUid);
+ AnimPacketInfo pktinfo (ndev, Simulator::Now (), Simulator::Now () + Seconds (0.001), UpdatePosition (n));
+ //TODO 0.0001 is used until Lte implements TxBegin and TxEnd traces
+ AnimByteTag tag;
+ tag.Set (gAnimUid);
+ p->AddByteTag (tag);
+ AddPendingLtePacket (gAnimUid, pktinfo);
+ }
+}
+
+void AnimationInterface::LteSpectrumPhyRxStart (std::string context, Ptr<const PacketBurst> pb)
+{
+ if (!m_started || !IsInTimeWindow ())
+ return;
+ Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
+ NS_ASSERT (ndev);
+ Ptr <Node> n = ndev->GetNode ();
+ NS_ASSERT (n);
+
+ std::list <Ptr <Packet> > pbList = pb->GetPackets ();
+ for (std::list <Ptr <Packet> >::iterator i = pbList.begin ();
+ i != pbList.end ();
+ ++i)
+ {
+ Ptr <Packet> p = *i;
+ uint64_t AnimUid = GetAnimUidFromPacket (p);
+ NS_LOG_INFO ("LteSpectrumPhyRxTrace for packet:" << gAnimUid);
+ if (!LtePacketIsPending (AnimUid))
+ {
+ NS_LOG_WARN ("LteSpectrumPhyRxTrace: unknown Uid");
+ return;
+ }
+ AnimPacketInfo& pktInfo = m_pendingLtePackets[AnimUid];
+ pktInfo.ProcessRxBegin (ndev, Simulator::Now ());
+ 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 (p, pktInfo, pktrxInfo);
+ }
+}
void AnimationInterface::CsmaPhyTxBeginTrace (std::string context, Ptr<const Packet> p)
{
--- a/src/netanim/model/animation-interface.h Thu May 24 03:02:51 2012 -0400
+++ b/src/netanim/model/animation-interface.h Fri May 25 11:45:23 2012 -0700
@@ -34,6 +34,8 @@
#include "ns3/config.h"
#include "ns3/animation-interface-helper.h"
#include "ns3/mac48-address.h"
+#include "ns3/lte-ue-net-device.h"
+#include "ns3/lte-enb-net-device.h"
namespace ns3 {
@@ -304,6 +306,11 @@
Ptr<const Packet> p,
const Mac48Address &);
+ void LteSpectrumPhyTxStart (std::string context,
+ Ptr<const PacketBurst> pb);
+ void LteSpectrumPhyRxStart (std::string context,
+ Ptr<const PacketBurst> pb);
+
void MobilityCourseChangeTrace (Ptr <const MobilityModel> mob);
// Write a string to the specified handle;
@@ -350,6 +357,9 @@
std::vector < Ptr <Node> > RecalcTopoBounds ();
void ConnectCallbacks ();
+ void ConnectLte ();
+ void ConnectLteUe (Ptr <Node> n, Ptr <LteUeNetDevice> nd, uint32_t devIndex);
+ void ConnectLteEnb (Ptr <Node> n, Ptr <LteEnbNetDevice> nd, uint32_t devIndex);
std::map <std::string, uint32_t> m_macToNodeIdMap;