--- a/src/lr-wpan/model/lr-wpan-phy.cc Sat Mar 11 21:49:29 2017 -0800
+++ b/src/lr-wpan/model/lr-wpan-phy.cc Sun Mar 12 14:16:09 2017 +0100
@@ -546,6 +546,10 @@
LrWpanLqiTag lqiTag;
p->RemovePacketTag (lqiTag);
+ m_phyTxBeginTrace (p);
+ m_currentTxPacket.first = p;
+ m_currentTxPacket.second = false;
+
Ptr<LrWpanSpectrumSignalParameters> txParams = Create<LrWpanSpectrumSignalParameters> ();
txParams->duration = CalculateTxTime (p);
txParams->txPhy = GetObject<SpectrumPhy> ();
@@ -557,9 +561,6 @@
m_channel->StartTx (txParams);
m_pdDataRequest = Simulator::Schedule (txParams->duration, &LrWpanPhy::EndTx, this);
ChangeTrxState (IEEE_802_15_4_PHY_BUSY_TX);
- m_phyTxBeginTrace (p);
- m_currentTxPacket.first = p;
- m_currentTxPacket.second = false;
return;
}
else if ((m_trxState == IEEE_802_15_4_PHY_RX_ON)
--- a/src/netanim/model/animation-interface.cc Sat Mar 11 21:49:29 2017 -0800
+++ b/src/netanim/model/animation-interface.cc Sun Mar 12 14:16:09 2017 +0100
@@ -44,6 +44,8 @@
#include "ns3/wimax-mac-header.h"
#include "ns3/wifi-net-device.h"
#include "ns3/wifi-mac.h"
+#include "ns3/lr-wpan-mac-header.h"
+#include "ns3/lr-wpan-net-device.h"
#include "ns3/constant-position-mobility-model.h"
#include "ns3/lte-ue-phy.h"
#include "ns3/lte-enb-phy.h"
@@ -454,6 +456,7 @@
PurgePendingPackets (AnimationInterface::WIMAX);
PurgePendingPackets (AnimationInterface::LTE);
PurgePendingPackets (AnimationInterface::CSMA);
+ PurgePendingPackets (AnimationInterface::LRWPAN);
Simulator::Schedule (m_mobilityPollInterval, &AnimationInterface::MobilityAutoCheck, this);
}
}
@@ -691,6 +694,34 @@
}
void
+AnimationInterface::LrWpanMacTxTrace (std::string context, Ptr<const Packet> p)
+{
+ const Ptr <const Node> node = GetNodeFromContext (context);
+ ++m_nodeLrWpanMacTx[node->GetId ()];
+}
+
+void
+AnimationInterface::LrWpanMacTxDropTrace (std::string context, Ptr<const Packet> p)
+{
+ const Ptr <const Node> node = GetNodeFromContext (context);
+ ++m_nodeLrWpanMacTxDrop[node->GetId ()];
+}
+
+void
+AnimationInterface::LrWpanMacRxTrace (std::string context, Ptr<const Packet> p)
+{
+ const Ptr <const Node> node = GetNodeFromContext (context);
+ ++m_nodeLrWpanMacRx[node->GetId ()];
+}
+
+void
+AnimationInterface::LrWpanMacRxDropTrace (std::string context, Ptr<const Packet> p)
+{
+ const Ptr <const Node> node = GetNodeFromContext (context);
+ ++m_nodeLrWpanMacRxDrop[node->GetId ()];
+}
+
+void
AnimationInterface::Ipv4TxTrace (std::string context, Ptr<const Packet> p, Ptr<Ipv4> ipv4, uint32_t interfaceIndex)
{
const Ptr <const Node> node = GetNodeFromContext (context);
@@ -878,6 +909,87 @@
}
void
+AnimationInterface::LrWpanPhyTxBeginTrace (std::string context,
+ Ptr<const Packet> p)
+{
+ if (!m_started || !IsInTimeWindow () || !m_trackPackets)
+ return;
+
+ Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
+ NS_ASSERT (ndev);
+ Ptr<LrWpanNetDevice> netDevice = DynamicCast<LrWpanNetDevice> (ndev);
+
+ Ptr <Node> n = ndev->GetNode ();
+ NS_ASSERT (n);
+
+ UpdatePosition (n);
+
+ LrWpanMacHeader hdr;
+ if (!p->PeekHeader (hdr))
+ {
+ NS_LOG_WARN ("LrWpanMacHeader not present");
+ return;
+ }
+
+ std::ostringstream oss;
+ if (hdr.GetSrcAddrMode () == 2)
+ {
+ Mac16Address nodeAddr = netDevice->GetMac ()->GetShortAddress ();
+ oss << nodeAddr;
+ }
+ else if (hdr.GetSrcAddrMode () == 3)
+ {
+ Mac64Address nodeAddr = netDevice->GetMac ()->GetExtendedAddress ();
+ oss << nodeAddr;
+ }
+ else
+ {
+ NS_LOG_WARN ("LrWpanMacHeader without source address");
+ return;
+ }
+ m_macToNodeIdMap[oss.str ()] = n->GetId ();
+ NS_LOG_INFO ("Added Mac" << oss.str () << " node:" <<m_macToNodeIdMap[oss.str ()]);
+
+ ++gAnimUid;
+ NS_LOG_INFO ("LrWpan TxBeginTrace for packet:" << gAnimUid);
+ AddByteTag (gAnimUid, p);
+
+ AnimPacketInfo pktInfo (ndev, Simulator::Now ());
+ AddPendingPacket (AnimationInterface::LRWPAN, gAnimUid, pktInfo);
+
+ OutputWirelessPacketTxInfo (p, m_pendingLrWpanPackets[gAnimUid], gAnimUid);
+}
+
+void
+AnimationInterface::LrWpanPhyRxBeginTrace (std::string context,
+ Ptr<const Packet> p)
+{
+ if (!m_started || !IsInTimeWindow () || !m_trackPackets)
+ return;
+ Ptr <NetDevice> ndev = GetNetDeviceFromContext (context);
+ NS_ASSERT (ndev);
+ Ptr <Node> n = ndev->GetNode ();
+ NS_ASSERT (n);
+
+ AnimByteTag tag;
+ if (!p->FindFirstMatchingByteTag (tag))
+ {
+ return;
+ }
+
+ uint64_t animUid = GetAnimUidFromPacket (p);
+ NS_LOG_INFO ("LrWpan RxBeginTrace for packet:" << animUid);
+ if (!IsPacketPending (animUid, AnimationInterface::LRWPAN))
+ {
+ NS_LOG_WARN ("LrWpanPhyRxBeginTrace: unknown Uid - most probably it's an ACK.");
+ }
+
+ UpdatePosition (n);
+ m_pendingLrWpanPackets[animUid].ProcessRxBegin (ndev, Simulator::Now ().GetSeconds ());
+ OutputWirelessPacketRxInfo (p, m_pendingLrWpanPackets[animUid], animUid);
+}
+
+void
AnimationInterface::WimaxTxTrace (std::string context, Ptr<const Packet> p, const Mac48Address & m)
{
NS_LOG_FUNCTION (this);
@@ -1172,6 +1284,11 @@
pendingPackets = &m_pendingLtePackets;
break;
}
+ case AnimationInterface::LRWPAN:
+ {
+ pendingPackets = &m_pendingLrWpanPackets;
+ break;
+ }
}
return pendingPackets;
@@ -1208,6 +1325,11 @@
result = "LTE";
break;
}
+ case AnimationInterface::LRWPAN:
+ {
+ result = "LRWPAN";
+ break;
+ }
}
return result;
}
@@ -1494,6 +1616,20 @@
MakeCallback (&AnimationInterface::WifiPhyTxDropTrace, this));
Config::Connect ("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyRxDrop",
MakeCallback (&AnimationInterface::WifiPhyRxDropTrace, this));
+
+ // LrWpan
+ Config::Connect ("NodeList/*/DeviceList/*/$ns3::LrWpanNetDevice/Phy/PhyTxBegin",
+ MakeCallback (&AnimationInterface::LrWpanPhyTxBeginTrace, this));
+ Config::Connect ("NodeList/*/DeviceList/*/$ns3::LrWpanNetDevice/Phy/PhyRxBegin",
+ MakeCallback (&AnimationInterface::LrWpanPhyRxBeginTrace, this));
+ Config::Connect ("/NodeList/*/DeviceList/*/$ns3::LrWpanNetDevice/Mac/MacTx",
+ MakeCallback (&AnimationInterface::LrWpanMacTxTrace, this));
+ Config::Connect ("/NodeList/*/DeviceList/*/$ns3::LrWpanNetDevice/Mac/MacTxDrop",
+ MakeCallback (&AnimationInterface::LrWpanMacTxDropTrace, this));
+ Config::Connect ("/NodeList/*/DeviceList/*/$ns3::LrWpanNetDevice/Mac/MacRx",
+ MakeCallback (&AnimationInterface::LrWpanMacRxTrace, this));
+ Config::Connect ("/NodeList/*/DeviceList/*/$ns3::LrWpanNetDevice/Mac/MacRxDrop",
+ MakeCallback (&AnimationInterface::LrWpanMacRxDropTrace, this));
}
Vector
--- a/src/netanim/model/animation-interface.h Sat Mar 11 21:49:29 2017 -0800
+++ b/src/netanim/model/animation-interface.h Sun Mar 12 14:16:09 2017 +0100
@@ -497,7 +497,8 @@
LTE,
WIFI,
WIMAX,
- CSMA
+ CSMA,
+ LRWPAN
} ProtocolType;
typedef struct
@@ -590,6 +591,7 @@
AnimUidPacketInfoMap m_pendingWifiPackets;
AnimUidPacketInfoMap m_pendingWimaxPackets;
+ AnimUidPacketInfoMap m_pendingLrWpanPackets;
AnimUidPacketInfoMap m_pendingLtePackets;
AnimUidPacketInfoMap m_pendingCsmaPackets;
AnimUidPacketInfoMap m_pendingUanPackets;
@@ -623,6 +625,10 @@
NodeCounterMap64 m_nodeWifiMacRxDrop;
NodeCounterMap64 m_nodeWifiPhyTxDrop;
NodeCounterMap64 m_nodeWifiPhyRxDrop;
+ NodeCounterMap64 m_nodeLrWpanMacTx;
+ NodeCounterMap64 m_nodeLrWpanMacTxDrop;
+ NodeCounterMap64 m_nodeLrWpanMacRx;
+ NodeCounterMap64 m_nodeLrWpanMacRxDrop;
const std::vector<std::string> GetElementsFromContext (const std::string& context) const;
Ptr <Node> GetNodeFromContext (const std::string& context) const;
@@ -698,9 +704,17 @@
void WifiMacRxDropTrace (std::string context,
Ptr<const Packet>);
void WifiPhyTxDropTrace (std::string context,
- Ptr<const Packet>);
+ Ptr<const Packet>);
void WifiPhyRxDropTrace (std::string context,
- Ptr<const Packet>);
+ Ptr<const Packet>);
+ void LrWpanMacTxTrace (std::string context,
+ Ptr<const Packet>);
+ void LrWpanMacTxDropTrace (std::string context,
+ Ptr<const Packet>);
+ void LrWpanMacRxTrace (std::string context,
+ Ptr<const Packet>);
+ void LrWpanMacRxDropTrace (std::string context,
+ Ptr<const Packet>);
void DevTxTrace (std::string context,
Ptr<const Packet> p,
Ptr<NetDevice> tx,
@@ -711,9 +725,13 @@
Ptr<const Packet> p);
void WifiPhyRxBeginTrace (std::string context,
Ptr<const Packet> p);
+ void LrWpanPhyTxBeginTrace (std::string context,
+ Ptr<const Packet> p);
+ void LrWpanPhyRxBeginTrace (std::string context,
+ Ptr<const Packet> p);
void WimaxTxTrace (std::string context,
Ptr<const Packet> p,
- const Mac48Address &);
+ const Mac48Address &);
void WimaxRxTrace (std::string context,
Ptr<const Packet> p,
const Mac48Address &);
--- a/src/netanim/wscript Sat Mar 11 21:49:29 2017 -0800
+++ b/src/netanim/wscript Sun Mar 12 14:16:09 2017 +0100
@@ -6,7 +6,7 @@
NETANIM_RELEASE_NAME = "netanim-3.108"
def build (bld) :
- module = bld.create_ns3_module ('netanim', ['internet', 'mobility', 'wimax', 'wifi', 'csma', 'lte', 'uan', 'energy'])
+ module = bld.create_ns3_module ('netanim', ['internet', 'mobility', 'wimax', 'wifi', 'csma', 'lte', 'uan', 'lr-wpan', 'energy'])
module.includes = '.'
module.source = [ 'model/animation-interface.cc', ]
netanim_test = bld.create_ns3_module_test_library('netanim')