diff --git a/src/netanim/model/animation-interface.cc b/src/netanim/model/animation-interface.cc index 5a1d785fa..18f570893 100644 --- a/src/netanim/model/animation-interface.cc +++ b/src/netanim/model/animation-interface.cc @@ -37,6 +37,8 @@ #include "ns3/constant-position-mobility-model.h" #include "ns3/lte-ue-phy.h" #include "ns3/lte-enb-phy.h" +#include "ns3/uan-net-device.h" +#include "ns3/uan-mac.h" #include #include @@ -48,8 +50,6 @@ NS_LOG_COMPONENT_DEFINE ("AnimationInterface"); - - namespace ns3 { #define PURGE_INTERVAL 5 @@ -161,6 +161,11 @@ bool AnimationInterface::IsInTimeWindow () return false; } +bool AnimationInterface::UanPacketIsPending (uint64_t AnimUid) +{ + return (m_pendingUanPackets.find (AnimUid) != m_pendingUanPackets.end ()); +} + bool AnimationInterface::WifiPacketIsPending (uint64_t AnimUid) { return (m_pendingWifiPackets.find (AnimUid) != m_pendingWifiPackets.end ()); @@ -547,6 +552,10 @@ void AnimationInterface::ConnectCallbacks () MakeCallback (&AnimationInterface::CsmaPhyRxEndTrace, this)); Config::Connect ("/NodeList/*/DeviceList/*/$ns3::CsmaNetDevice/MacRx", MakeCallback (&AnimationInterface::CsmaMacRxTrace, this)); + Config::Connect ("/NodeList/*/DeviceList/*/$ns3::UanNetDevice/Phy/$ns3::UanPhyGen/Tx", + MakeCallback (&AnimationInterface::UanPhyGenTxTrace, this)); + Config::Connect ("/NodeList/*/DeviceList/*/$ns3::UanNetDevice/Phy/$ns3::UanPhyGen/RxOk", + MakeCallback (&AnimationInterface::UanPhyGenRxTrace, this)); ConnectLte (); @@ -683,7 +692,7 @@ void AnimationInterface::DevTxTrace (std::string context, Ptr p, Ptr tx, Ptr rx, Time txTime, Time rxTime) { - if (!m_started) + if (!m_started || !IsInTimeWindow ()) return; NS_ASSERT (tx); NS_ASSERT (rx); @@ -729,6 +738,12 @@ AnimationInterface::GetNetDeviceFromContext (std::string context) NS_ASSERT (n); return n->GetDevice (atoi (elements[3].c_str ())); } + +void AnimationInterface::AddPendingUanPacket (uint64_t AnimUid, AnimPacketInfo &pktinfo) +{ + m_pendingUanPackets[AnimUid] = pktinfo; +} + void AnimationInterface::AddPendingWifiPacket (uint64_t AnimUid, AnimPacketInfo &pktinfo) { @@ -778,6 +793,49 @@ uint64_t AnimationInterface::GetAnimUidFromPacket (Ptr p) } } +void AnimationInterface::UanPhyGenTxTrace (std::string context, Ptr p, double a, UanTxMode) +{ + NS_LOG_UNCOND ("uan tx"); + if (!m_started || !IsInTimeWindow ()) + return; + Ptr ndev = GetNetDeviceFromContext (context); + NS_ASSERT (ndev); + Ptr n = ndev->GetNode (); + NS_ASSERT (n); + gAnimUid++; + NS_LOG_INFO ("Uan TxBeginTrace for packet:" << gAnimUid); + AnimByteTag tag; + tag.Set (gAnimUid); + p->AddByteTag (tag); + AnimPacketInfo pktinfo (ndev, Simulator::Now (), Simulator::Now (), UpdatePosition (n)); + AddPendingUanPacket (gAnimUid, pktinfo); + + +} + +void AnimationInterface::UanPhyGenRxTrace (std::string context, Ptr p, double a, UanTxMode) +{ + NS_LOG_UNCOND ("uan rx"); + if (!m_started || !IsInTimeWindow ()) + return; + Ptr ndev = GetNetDeviceFromContext (context); + NS_ASSERT (ndev); + Ptr n = ndev->GetNode (); + NS_ASSERT (n); + uint64_t AnimUid = GetAnimUidFromPacket (p); + NS_LOG_INFO ("UanPhyGenRxTrace for packet:" << AnimUid); + if (!UanPacketIsPending (AnimUid)) + { + NS_LOG_WARN ("UanPhyGenRxBeginTrace: unknown Uid"); + return; + } + m_pendingUanPackets[AnimUid].ProcessRxBegin (ndev, Simulator::Now ()); + m_pendingUanPackets[AnimUid].ProcessRxEnd (ndev, Simulator::Now (), UpdatePosition (n)); + OutputWirelessPacket (p, m_pendingUanPackets[AnimUid], m_pendingUanPackets[AnimUid].GetRxInfo (ndev)); + +} + + void AnimationInterface::WifiPhyTxBeginTrace (std::string context, Ptr p) { @@ -789,7 +847,7 @@ void AnimationInterface::WifiPhyTxBeginTrace (std::string context, NS_ASSERT (n); // Add a new pending wireless gAnimUid++; - NS_LOG_INFO ("TxBeginTrace for packet:" << gAnimUid); + NS_LOG_INFO ("Wifi TxBeginTrace for packet:" << gAnimUid); AnimByteTag tag; tag.Set (gAnimUid); p->AddByteTag (tag); @@ -833,7 +891,7 @@ void AnimationInterface::WifiPhyRxBeginTrace (std::string context, Ptr n = ndev->GetNode (); NS_ASSERT (n); uint64_t AnimUid = GetAnimUidFromPacket (p); - NS_LOG_INFO ("RxBeginTrace for packet:" << AnimUid); + NS_LOG_INFO ("Wifi RxBeginTrace for packet:" << AnimUid); if (!WifiPacketIsPending (AnimUid)) { NS_LOG_WARN ("WifiPhyRxBeginTrace: unknown Uid"); diff --git a/src/netanim/model/animation-interface.h b/src/netanim/model/animation-interface.h index 9d2124533..451a7a1fd 100644 --- a/src/netanim/model/animation-interface.h +++ b/src/netanim/model/animation-interface.h @@ -36,6 +36,7 @@ #include "ns3/mac48-address.h" #include "ns3/lte-ue-net-device.h" #include "ns3/lte-enb-net-device.h" +#include "ns3/uan-phy-gen.h" namespace ns3 { @@ -311,6 +312,11 @@ private: void LteSpectrumPhyRxStart (std::string context, Ptr pb); + void UanPhyGenTxTrace (std::string context, + Ptr, double, UanTxMode); + void UanPhyGenRxTrace (std::string context, + Ptr, double, UanTxMode); + void MobilityCourseChangeTrace (Ptr mob); // Write a string to the specified handle; @@ -337,6 +343,10 @@ private: void AddPendingCsmaPacket (uint64_t AnimUid, AnimPacketInfo&); bool CsmaPacketIsPending (uint64_t AnimUid); + std::map m_pendingUanPackets; + void AddPendingUanPacket (uint64_t AnimUid, AnimPacketInfo&); + bool UanPacketIsPending (uint64_t AnimUid); + uint64_t GetAnimUidFromPacket (Ptr ); std::map m_nodeLocation; diff --git a/src/netanim/wscript b/src/netanim/wscript index fd7aac3e3..a6ada6e86 100644 --- a/src/netanim/wscript +++ b/src/netanim/wscript @@ -8,7 +8,7 @@ NETANIM_RELEASE_NAME = "netanim-3.100" def build (bld) : bld.install_files('${INCLUDEDIR}/%s%s/ns3' % (wutils.APPNAME, wutils.VERSION), '../../ns3/netanim-config.h') - module = bld.create_ns3_module ('netanim', ['internet', 'mobility', 'wimax', 'wifi', 'csma', 'lte']) + module = bld.create_ns3_module ('netanim', ['internet', 'mobility', 'wimax', 'wifi', 'csma', 'lte', 'uan']) module.includes = '.' module.source = [ 'model/animation-interface.cc', @@ -29,8 +29,3 @@ def build (bld) : if (bld.env['ENABLE_EXAMPLES']) : bld.add_subdirs ('examples') -def configure (conf) : - conf.check (header_name='sys/socket.h', define_name='HAVE_SYS_SOCKET_H') - conf.check (header_name='netinet/in.h', define_name='HAVE_NETINET_IN_H') - conf.write_config_header ('ns3/netanim-config.h', top=True) -