25#include "ns3/bs-net-device.h" 
   26#include "ns3/csma-net-device.h" 
   30#include "ns3/channel.h" 
   31#include "ns3/config.h" 
   32#include "ns3/constant-position-mobility-model.h" 
   33#include "ns3/double.h" 
   34#include "ns3/energy-source-container.h" 
   35#include "ns3/ipv4-routing-protocol.h" 
   38#include "ns3/lr-wpan-mac-header.h" 
   39#include "ns3/lr-wpan-net-device.h" 
   40#include "ns3/lte-enb-phy.h" 
   41#include "ns3/lte-ue-phy.h" 
   42#include "ns3/mobility-model.h" 
   44#include "ns3/packet.h" 
   45#include "ns3/simulator.h" 
   46#include "ns3/uan-mac.h" 
   47#include "ns3/uan-net-device.h" 
   48#include "ns3/wifi-mac-header.h" 
   49#include "ns3/wifi-mac.h" 
   50#include "ns3/wifi-net-device.h" 
   51#include "ns3/wifi-psdu.h" 
   52#include "ns3/wimax-mac-header.h" 
   68      m_mobilityPollInterval(
Seconds(0.25)),
 
   71      m_writeCallback(nullptr),
 
   73      m_enablePacketMetadata(false),
 
   75      m_stopTime(
Seconds(3600 * 1000)),
 
   77      m_originalFileName(fn),
 
   79      m_routingFileName(
""),
 
   80      m_routingPollInterval(
Seconds(5)),
 
 
  321        n->AggregateObject(loc);
 
  323    Vector hubVec(x, y, z);
 
  324    loc->SetPosition(hubVec);
 
  325    NS_LOG_INFO(
"Node:" << n->GetId() << 
" Position set to:(" << x << 
"," << y << 
"," << z << 
")");
 
 
  331    NS_LOG_INFO(
"Setting node image for Node Id:" << nodeId);
 
  334        NS_FATAL_ERROR(
"Resource Id:" << resourceId << 
" not found. Did you use AddResource?");
 
 
  345                                         << 
" not found. Did you use AddNodeCounter?");
 
 
  358    if ((opacity < 0) || (opacity > 1))
 
 
  389    NS_LOG_INFO(
"Setting node color for Node Id:" << nodeId);
 
 
  398                                          std::string linkDescription)
 
 
  406                                          std::string linkDescription)
 
 
  434    return fractionIter->second;
 
 
  450        v = mobility->GetPosition();
 
 
  460    bool moved = !((ceil(oldLocation.x) == ceil(newLocation.x)) &&
 
  461                   (ceil(oldLocation.y) == ceil(newLocation.y)));
 
 
  470    for (
uint32_t i = 0; i < MovedNodes.size(); i++)
 
 
  488std::vector<Ptr<Node>>
 
  491    std::vector<Ptr<Node>> movedNodes;
 
  504            newLocation = mobility->GetPosition();
 
  513            movedNodes.push_back(n);
 
 
  530    return WriteN(st.c_str(), st.length(), f);
 
 
  542    const char* p = 
data;
 
  546        int n = std::fwrite(p, 1, nLeft, f);
 
 
  560                                   std::string destination,
 
  563    NS_LOG_INFO(
"Writing Route Path From :" << nodeId << 
" To: " << destination);
 
 
  578                                              std::string ipv4Address,
 
  579                                              std::string channelType)
 
 
  584const std::vector<std::string>
 
  587    std::vector<std::string> elements;
 
  588    std::size_t pos1 = 0;
 
  590    while (pos1 != std::string::npos)
 
  592        pos1 = context.find(
'/', pos1);
 
  593        pos2 = context.find(
'/', pos1 + 1);
 
  594        elements.push_back(context.substr(pos1 + 1, pos2 - (pos1 + 1)));
 
  596        pos2 = std::string::npos;
 
 
  624    return n->GetDevice(std::stoi(elements.at(3)));
 
 
  663                                         double previousEnergy,
 
  664                                         double currentEnergy)
 
  668    const uint32_t nodeId = node->GetId();
 
  670    NS_LOG_INFO(
"Remaining energy on one of sources on node " << nodeId << 
": " << currentEnergy);
 
  676    const double energyFraction = currentEnergy / energySource->GetInitialEnergy();
 
  678    NS_LOG_INFO(
"Total energy fraction on node " << nodeId << 
": " << energyFraction);
 
 
  823    double lbTx = (now + txTime).GetSeconds();
 
  824    double fbRx = (now + rxTime - txTime).GetSeconds();
 
  825    double lbRx = (now + rxTime).GetSeconds();
 
  828              tx->GetNode()->GetId(),
 
  831              rx->GetNode()->GetId(),
 
 
  850                << 
" GenericWirelessTxTrace for packet:" << 
gAnimUid);
 
  858        Mac48Address nodeAddr = netDevice->GetMac()->GetAddress();
 
  859        std::ostringstream oss;
 
 
  888    pendingPackets->at(animUid).ProcessRxBegin(ndev, 
Simulator::Now().GetSeconds());
 
 
  920    for (
auto& psdu : psduMap)
 
  930                mpdu->GetProtocolDataUnit(),
 
  939        Mac48Address nodeAddr = netDevice->GetMac()->GetAddress();
 
  940        std::ostringstream oss;
 
  949        NS_ABORT_MSG(
"This NetDevice should be a Wi-Fi network device");
 
 
  964    NS_LOG_INFO(
"Wifi RxBeginTrace for packet: " << animUid);
 
  968        std::ostringstream oss;
 
  970        if (!p->PeekHeader(hdr))
 
  978            NS_LOG_WARN(
"Transmitter Mac address " << oss.str() << 
" never seen before. Skipping");
 
  985        NS_LOG_WARN(
"WifiPhyRxBegin: unknown Uid, but we are adding a wifi packet");
 
 
 1008    if (!p->PeekHeader(hdr))
 
 1014    std::ostringstream oss;
 
 1017        Mac16Address nodeAddr = netDevice->GetMac()->GetShortAddress();
 
 1022        Mac64Address nodeAddr = netDevice->GetMac()->GetExtendedAddress();
 
 1027        NS_LOG_WARN(
"LrWpanMacHeader without source address");
 
 
 1054    if (!p->FindFirstMatchingByteTag(tag))
 
 1060    NS_LOG_INFO(
"LrWpan RxBeginTrace for packet:" << animUid);
 
 1063        NS_LOG_WARN(
"LrWpanPhyRxBeginTrace: unknown Uid - most probably it's an ACK.");
 
 
 1109    context = 
"/" + context;
 
 1114    std::list<Ptr<Packet>> pbList = pb->GetPackets();
 
 1115    for (
auto i = pbList.begin(); i != pbList.end(); ++i)
 
 
 1137    context = 
"/" + context;
 
 1142    std::list<Ptr<Packet>> pbList = pb->GetPackets();
 
 1143    for (
auto i = pbList.begin(); i != pbList.end(); ++i)
 
 1150            NS_LOG_WARN(
"LteSpectrumPhyRxTrace: unknown Uid");
 
 
 1184    NS_LOG_INFO(
"CsmaPhyTxEndTrace for packet:" << animUid);
 
 1191        NS_LOG_WARN(
"Unknown Uid, but adding Csma Packet anyway");
 
 
 1215    NS_LOG_INFO(
"CsmaPhyRxEndTrace for packet:" << animUid);
 
 1216    NS_LOG_INFO(
"CsmaPhyRxEndTrace for packet:" << animUid << 
" complete");
 
 
 1235    NS_LOG_INFO(
"MacRxTrace for packet:" << animUid << 
" complete");
 
 
 1295    pendingPackets->insert(AnimUidPacketInfoMap::value_type(animUid, pktInfo));
 
 
 1303    return (pendingPackets->find(animUid) != pendingPackets->end());
 
 
 1311    if (pendingPackets->empty())
 
 1315    std::vector<uint64_t> purgeList;
 
 1316    for (
auto i = pendingPackets->begin(); i != pendingPackets->end(); ++i)
 
 1322            purgeList.push_back(i->first);
 
 1325    for (
auto i = purgeList.begin(); i != purgeList.end(); ++i)
 
 1327        pendingPackets->erase(*i);
 
 
 1335    switch (protocolType)
 
 1362    return pendingPackets;
 
 
 1368    std::string result = 
"Unknown";
 
 1369    switch (protocolType)
 
 
 1404    std::string typeString = 
"unknown";
 
 1405    switch (counterType)
 
 1408        typeString = 
"UINT32";
 
 1412        typeString = 
"DOUBLE";
 
 
 1424    std::ostringstream oss;
 
 
 1492    for (
auto i = ipv4Addresses.begin(); i != ipv4Addresses.end(); ++i)
 
 
 1509    for (
auto i = ipv6Addresses.begin(); i != ipv6Addresses.end(); ++i)
 
 
 1522    std::ostringstream oss;
 
 1524    oss << 
"NodeList/" << n->GetId() << 
"/DeviceList/" << devIndex << 
"/";
 
 1527        dlPhy->TraceConnect(
"TxStart",
 
 1530        dlPhy->TraceConnect(
"RxStart",
 
 1536        ulPhy->TraceConnect(
"TxStart",
 
 1539        ulPhy->TraceConnect(
"RxStart",
 
 
 1551    std::ostringstream oss;
 
 1553    oss << 
"NodeList/" << n->GetId() << 
"/DeviceList/" << devIndex << 
"/";
 
 1556        dlPhy->TraceConnect(
"TxStart",
 
 1559        dlPhy->TraceConnect(
"RxStart",
 
 1565        ulPhy->TraceConnect(
"TxStart",
 
 1568        ulPhy->TraceConnect(
"RxStart",
 
 
 1581        uint32_t nDevices = n->GetNDevices();
 
 1582        for (
uint32_t devIndex = 0; devIndex < nDevices; ++devIndex)
 
 1596            if (lteEnbNetDevice)
 
 
 1615        "/NodeList/*/$ns3::MobilityModel/CourseChange",
 
 
 1718            "AnimationInterface WARNING:Node:" 
 1720            << 
" Does not have a mobility model. Use SetConstantPosition if it is stationary");
 
 1727        m_nodeLocation[n->GetId()] = Vector(
int(x->GetValue()), 
int(y->GetValue()), 0);
 
 
 1752        NS_FATAL_ERROR(
"Node:" << n->GetId() << 
" not found in Location table");
 
 
 1760    Address nodeAddr = nd->GetAddress();
 
 1761    std::ostringstream oss;
 
 1763    return oss.str().substr(6); 
 
 
 1772        NS_LOG_WARN(
"Node: " << nd->GetNode()->GetId() << 
" No ipv4 object found");
 
 1775    int32_t ifIndex = ipv4->GetInterfaceForDevice(nd);
 
 1778        NS_LOG_WARN(
"Node :" << nd->GetNode()->GetId() << 
" Could not find index of NetDevice");
 
 1782    std::ostringstream oss;
 
 
 1793        NS_LOG_WARN(
"Node: " << nd->GetNode()->GetId() << 
" No ipv4 object found");
 
 1796    int32_t ifIndex = ipv6->GetInterfaceForDevice(nd);
 
 1799        NS_LOG_WARN(
"Node :" << nd->GetNode()->GetId() << 
" Could not find index of NetDevice");
 
 1802    bool nonLinkLocalFound = 
false;
 
 1803    uint32_t nAddresses = ipv6->GetNAddresses(ifIndex);
 
 1805    for (
uint32_t addressIndex = 0; addressIndex < nAddresses; ++addressIndex)
 
 1807        addr = ipv6->GetAddress(ifIndex, addressIndex);
 
 1810            nonLinkLocalFound = 
true;
 
 1814    if (!nonLinkLocalFound)
 
 1816        addr = ipv6->GetAddress(ifIndex, 0);
 
 1818    std::ostringstream oss;
 
 
 1823std::vector<std::string>
 
 1826    std::vector<std::string> ipv4Addresses;
 
 1830        NS_LOG_WARN(
"Node: " << nd->GetNode()->GetId() << 
" No ipv4 object found");
 
 1831        return ipv4Addresses;
 
 1833    int32_t ifIndex = ipv4->GetInterfaceForDevice(nd);
 
 1836        NS_LOG_WARN(
"Node :" << nd->GetNode()->GetId() << 
" Could not find index of NetDevice");
 
 1837        return ipv4Addresses;
 
 1839    for (
uint32_t index = 0; index < ipv4->GetNAddresses(ifIndex); ++index)
 
 1842        std::ostringstream oss;
 
 1844        ipv4Addresses.push_back(oss.str());
 
 1846    return ipv4Addresses;
 
 
 1849std::vector<std::string>
 
 1852    std::vector<std::string> ipv6Addresses;
 
 1856        NS_LOG_WARN(
"Node: " << nd->GetNode()->GetId() << 
" No ipv6 object found");
 
 1857        return ipv6Addresses;
 
 1859    int32_t ifIndex = ipv6->GetInterfaceForDevice(nd);
 
 1862        NS_LOG_WARN(
"Node :" << nd->GetNode()->GetId() << 
" Could not find index of NetDevice");
 
 1863        return ipv6Addresses;
 
 1865    for (
uint32_t index = 0; index < ipv6->GetNAddresses(ifIndex); ++index)
 
 1868        std::ostringstream oss;
 
 1870        ipv6Addresses.push_back(oss.str());
 
 1872    return ipv6Addresses;
 
 
 1880        std::vector<std::string> ipv4Addresses;
 
 1882        for (
auto it = iterPair.first; it != iterPair.second; ++it)
 
 1884            ipv4Addresses.push_back(it->second);
 
 
 1896        std::vector<std::string> ipv6Addresses;
 
 1898        for (
auto it = iterPair.first; it != iterPair.second; ++it)
 
 1900            ipv6Addresses.push_back(it->second);
 
 
 1915        for (
uint32_t i = 0; i < nDev; ++i)
 
 1920            std::string channelType = 
"Unknown channel";
 
 1923                channelType = ch->GetInstanceTypeId().GetName();
 
 1927            if (!ch || (channelType != 
"ns3::PointToPointChannel"))
 
 1945                if (!ipv4Addresses.empty())
 
 1952                else if (!ipv6Addresses.empty())
 
 1962            else if (channelType == 
"ns3::PointToPointChannel")
 
 1965                std::size_t nChDev = ch->GetNDevices();
 
 1966                for (std::size_t j = 0; j < nChDev; ++j)
 
 1969                    uint32_t n2Id = chDev->GetNode()->GetId();
 
 1984                        if (!ipv4Addresses.empty())
 
 1991                        else if (!ipv6Addresses.empty())
 
 
 2013        NS_LOG_INFO(
"Update Position for Node: " << n->GetId());
 
 
 2025        Rgb rgb = {255, 0, 0};
 
 
 2040        NS_LOG_INFO(
"Update Size for Node: " << n->GetId());
 
 
 2071    if (!routing && 
m_f)
 
 2083    f = std::fopen(fn.c_str(), 
"w");
 
 
 2183        NS_LOG_INFO(
"TrackIpv4L3ProtocolCounters Completed");
 
 
 2234        Ptr<Ipv4Route> rt = rp->RouteOutput(pkt, header, 
nullptr, sockerr);
 
 2240            rpElements.push_back(elem);
 
 2244        std::ostringstream oss;
 
 2245        oss << rt->GetGateway();
 
 2247        if (rt->GetGateway() == 
"0.0.0.0")
 
 2250            rpElements.push_back(elem);
 
 2254                rpElements.push_back(elem2);
 
 2257        else if (rt->GetGateway() == 
"127.0.0.1")
 
 2260            rpElements.push_back(elem);
 
 2265            rpElements.push_back(elem);
 
 
 2307        NS_LOG_WARN(
"Node " << n->GetId() << 
" Does not have an Ipv4 object");
 
 2310    std::stringstream stream;
 
 2312    ipv4->GetRoutingProtocol()->PrintRoutingTable(routingstream);
 
 2313    return stream.str();
 
 
 2321    NS_LOG_INFO(
"RecursiveIpv4RoutePathSearch from:" << from << 
" to:" << to);
 
 2322    if (from == 
"0.0.0.0" || from == 
"127.0.0.1")
 
 2329    if (fromNode->GetId() == toNode->GetId())
 
 2332        rpElements.push_back(elem);
 
 2361    Ptr<Ipv4Route> rt = rp->RouteOutput(pkt, header, 
nullptr, sockerr);
 
 2366    NS_LOG_DEBUG(
"Node: " << fromNode->GetId() << 
" G:" << rt->GetGateway());
 
 2367    std::ostringstream oss;
 
 2368    oss << rt->GetGateway();
 
 2373        rpElements.push_back(elem);
 
 2377            rpElements.push_back(elem2);
 
 2381    NS_LOG_INFO(
"Node:" << fromNode->GetId() << 
"-->" << rt->GetGateway());
 
 2383    rpElements.push_back(elem);
 
 
 2410    std::string closeString = 
"</" + name + 
">\n";
 
 
 2477    for (
auto i = ipv4Addresses.begin(); i != ipv4Addresses.end(); ++i)
 
 
 2491    for (
auto i = ipv6Addresses.begin(); i != ipv6Addresses.end(); ++i)
 
 
 2506    element.
AddAttribute(
"info", routingInfo.c_str(), 
true);
 
 
 2512                               std::string destination,
 
 2515    std::string tagName = 
"rp";
 
 2521    for (
const auto& rpElement : rpElements)
 
 2525        rpeElement.
AddAttribute(
"nH", rpElement.nextHop.c_str());
 
 
 2538    if (!metaInfo.empty())
 
 2540        element.
AddAttribute(
"meta-info", metaInfo.c_str(), 
true);
 
 
 2547                              std::string pktType,
 
 
 2568                              std::string metaInfo)
 
 2574    if (!metaInfo.empty())
 
 2576        element.
AddAttribute(
"meta-info", metaInfo.c_str(), 
true);
 
 
 2586                                           std::string counterName,
 
 
 2670                                              double counterValue)
 
 
 2700                                                 std::string ipAddress,
 
 2701                                                 std::string channelType)
 
 
 2713    : m_tagName(tagName),
 
 
 2718template <
typename T>
 
 2722    std::ostringstream oss;
 
 2723    oss << std::setprecision(10);
 
 2725    std::string attributeString = attribute;
 
 2728        attributeString += 
"=\"";
 
 2729        std::string valueStr = oss.str();
 
 2730        for (
auto it = valueStr.begin(); it != valueStr.end(); ++it)
 
 2735                attributeString += 
"&";
 
 2738                attributeString += 
""";
 
 2741                attributeString += 
"'";
 
 2744                attributeString += 
"<";
 
 2747                attributeString += 
">";
 
 2750                attributeString += *it;
 
 2754        attributeString += 
"\" ";
 
 2758        attributeString += 
"=\"" + oss.str() + 
"\" ";
 
 2760    m_attributes.push_back(attributeString);
 
 
 2766    m_children.push_back(e.
ToString());
 
 
 2778    std::string elementString = 
"<" + m_tagName + 
" ";
 
 2780    for (
auto i = m_attributes.begin(); i != m_attributes.end(); ++i)
 
 2782        elementString += *i;
 
 2784    if (m_children.empty() && m_text.empty())
 
 2788            elementString += 
"/>";
 
 2793        elementString += 
">";
 
 2794        if (!m_text.empty())
 
 2796            elementString += m_text;
 
 2798        if (!m_children.empty())
 
 2800            elementString += 
"\n";
 
 2801            for (
auto i = m_children.begin(); i != m_children.end(); ++i)
 
 2803                elementString += *i + 
"\n";
 
 2808            elementString += 
"</" + m_tagName + 
">";
 
 2812    return elementString + ((autoClose) ? 
"\n" : 
"");
 
 
 2822                            .SetGroupName(
"NetAnim")
 
 
 2836    return sizeof(uint64_t);
 
 
 2854    os << 
"AnimUid=" << m_AnimUid;
 
 
 2860    m_AnimUid = AnimUid;
 
 
 2892      m_fbTx(fbTx.GetSeconds()),
 
 
#define MAX_PKTS_PER_TRACE_FILE
#define CHECK_STARTED_INTIMEWINDOW_TRACKPACKETS
#define CHECK_STARTED_INTIMEWINDOW
a polymophic address class
Byte tag using by Anim to uniquely identify packets.
TypeId GetInstanceTypeId() const override
Get Instance Type Id.
void Serialize(TagBuffer i) const override
Serialize function.
void Print(std::ostream &os) const override
Print tag info.
uint32_t GetSerializedSize() const override
Get Serialized Size.
uint64_t Get() const
Get Uid in tag.
static TypeId GetTypeId()
Get Type Id.
void Deserialize(TagBuffer i) override
Deserialize function.
void Set(uint64_t AnimUid)
Set global Uid in tag.
Ptr< const NetDevice > m_txnd
transmit device
void ProcessRxBegin(Ptr< const NetDevice > nd, const double fbRx)
Process receive begin.
Ptr< const NetDevice > m_rxnd
receive device
uint32_t m_txNodeId
node ID
void AppendChild(AnimXmlElement e)
Append child function.
void SetText(std::string text)
Set text function.
std::string ToString(bool autoClose=true)
Get text for the element function.
AnimXmlElement(std::string tagName, bool emptyElement=true)
Constructor.
void AddAttribute(std::string attribute, T value, bool xmlEscape=false)
Add attribute function.
Interface to network animator.
FILE * m_f
File handle for output (0 if none)
Time m_wifiMacCountersPollInterval
wifi MAC counters poll interval
void CsmaPhyRxEndTrace(std::string context, Ptr< const Packet > p)
CSMA Phy receive end trace function.
void WriteNodeSizes()
Write node sizes function.
uint32_t AddNodeCounter(std::string counterName, CounterType counterType)
Setup a node counter.
void TrackQueueCounters()
Track queue counters function.
void SetMobilityPollInterval(Time t)
Set mobility poll interval:WARNING: setting a low interval can cause slowness.
uint32_t m_wifiMacRxCounterId
wifi MAC receive counter ID
bool IsPacketPending(uint64_t animUid, ProtocolType protocolType)
Is packet pending function.
bool NodeHasMoved(Ptr< Node > n, Vector newLocation)
Node has moved function.
void LrWpanPhyTxBeginTrace(std::string context, Ptr< const Packet > p)
LR-WPAN Phy receive begin trace function.
uint32_t m_queueDropCounterId
queue drop counter ID
void WimaxTxTrace(std::string context, Ptr< const Packet > p, const Mac48Address &m)
WIMax transmit trace function.
void LrWpanPhyRxBeginTrace(std::string context, Ptr< const Packet > p)
LR-WPAN Phy receive begin trace function.
Time m_routingPollInterval
routing poll interval
void OutputCsmaPacket(Ptr< const Packet > p, AnimPacketInfo &pktInfo)
Output CSMA packet function.
uint64_t GetAnimUidFromPacket(Ptr< const Packet >)
Get anim UID from packet function.
EnergyFractionMap m_nodeEnergyFraction
node energy fraction
void GenericWirelessTxTrace(std::string context, Ptr< const Packet > p, ProtocolType protocolType)
Generic wireless transmit trace function.
void LteRxTrace(std::string context, Ptr< const Packet > p, const Mac48Address &m)
LTE receive trace function.
std::string ProtocolTypeToString(ProtocolType protocolType)
Protocol type to string function.
NodeCounterMap64 m_nodeLrWpanMacRx
node LR-WPAN MAC receive
std::string m_routingFileName
routing file name
NodeCounterMap64 m_nodeIpv4Tx
node IPv4 transmit
std::map< std::string, uint32_t > m_ipv6ToNodeIdMap
IPv6 to node ID map.
void MobilityAutoCheck()
Mobility auto check function.
void WriteXmlRouting(uint32_t id, std::string routingInfo)
Write XML routing function.
void WifiPhyRxDropTrace(std::string context, Ptr< const Packet > p, WifiPhyRxfailureReason reason)
wifi Phy receive drop trace function
void WifiMacRxDropTrace(std::string context, Ptr< const Packet > p)
wifi MAC receive drop trace function
NodeCounterMap64 m_nodeQueueDrop
node queue drop
void ConnectLteUe(Ptr< Node > n, Ptr< LteUeNetDevice > nd, uint32_t devIndex)
Connect LTE ue function.
void DequeueTrace(std::string context, Ptr< const Packet >)
Dequeue trace function.
void ConnectCallbacks()
Connect callbacks function.
void WriteRoutePath(uint32_t nodeId, std::string destination, Ipv4RoutePathElements rpElements)
Write route path function.
AnimUidPacketInfoMap * ProtocolTypeToPendingPackets(ProtocolType protocolType)
Protocol type to pending packets function.
void RemainingEnergyTrace(std::string context, double previousEnergy, double currentEnergy)
Remaining energy trace function.
void Ipv4DropTrace(std::string context, const Ipv4Header &ipv4Header, Ptr< const Packet > p, Ipv4L3Protocol::DropReason dropReason, Ptr< Ipv4 > ipv4, uint32_t interfaceIndex)
IPv4 drop trace function.
NodeColorsMap m_nodeColors
node colors
void UpdateNodeCounter(uint32_t nodeCounterId, uint32_t nodeId, double counter)
Helper function to update a node's counter referenced by the nodeCounterId.
void WifiPhyRxBeginTrace(std::string context, Ptr< const Packet > p, RxPowerWattPerChannelBand rxPowersW)
wifi Phy receive begin trace function
void LrWpanMacRxDropTrace(std::string context, Ptr< const Packet > p)
LR-WPAN MAC receive drop trace function.
void LteSpectrumPhyTxStart(std::string context, Ptr< const PacketBurst > pb)
LTE Spectrum Phy transmit start function.
NodeCounterMap64 m_nodeLrWpanMacTx
node LR-WPAN MAC transmit
void WriteXmlAddNodeCounter(uint32_t counterId, std::string counterName, CounterType counterType)
Write XML add node counter function.
void WriteXmlPRef(uint64_t animUid, uint32_t fId, double fbTx, std::string metaInfo="")
Write XMLP Ref function.
NodeCounterMap64 m_nodeWifiPhyTxDrop
node wifi Phy transmit drop
void WriteLinkProperties()
Write link properties function.
void WriteIpv4Addresses()
Write IPv4 Addresses function.
const std::vector< std::string > GetElementsFromContext(const std::string &context) const
Get elements from context.
void WriteXmlAddResource(uint32_t resourceId, std::string resourcePath)
Write XML add resource function.
void OutputWirelessPacketTxInfo(Ptr< const Packet > p, AnimPacketInfo &pktInfo, uint64_t animUid)
Output wireless packet transmit info.
void LteSpectrumPhyRxStart(std::string context, Ptr< const PacketBurst > pb)
LTE Spectrum Phy receive start function.
void SetOutputFile(const std::string &fn, bool routing=false)
Set output file function.
NodeCounterMap64 m_nodeWifiMacTx
node wifi MAC transmit
AnimUidPacketInfoMap m_pendingWimaxPackets
pending wimax packets
void LteTxTrace(std::string context, Ptr< const Packet > p, const Mac48Address &m)
LTE transmit trace function.
void EnableIpv4L3ProtocolCounters(Time startTime, Time stopTime, Time pollInterval=Seconds(1))
Enable tracking of Ipv4 L3 Protocol Counters such as Tx, Rx, Drop.
int WriteN(const char *data, uint32_t count, FILE *f)
WriteN function.
std::map< std::string, uint32_t > m_macToNodeIdMap
MAC to node ID map.
Ptr< Node > GetNodeFromContext(const std::string &context) const
Get node from context.
std::map< uint32_t, Vector > m_nodeLocation
node location
Ptr< NetDevice > GetNetDeviceFromContext(std::string context)
Get net device from context.
FILE * m_routingF
File handle for routing table output (0 if None);.
void UpdateNodeImage(uint32_t nodeId, uint32_t resourceId)
Helper function to update the image of a node.
void TrackWifiPhyCounters()
Track wifi phy counters function.
AnimUidPacketInfoMap m_pendingUanPackets
pending UAN packets
void TrackIpv4RoutePaths()
Track IPv4 route paths function.
double GetNodeEnergyFraction(Ptr< const Node > node) const
Get node's energy fraction (This used only for testing)
bool IsInTimeWindow()
Is in time window function.
void CsmaPhyTxBeginTrace(std::string context, Ptr< const Packet > p)
CSMA Phy transmit begin trace function.
bool m_enablePacketMetadata
enable packet metadata
void PurgePendingPackets(ProtocolType protocolType)
Purge pending packets function.
void SetMaxPktsPerTraceFile(uint64_t maxPktsPerFile)
Set Max packets per trace file.
uint64_t m_maxPktsPerFile
maximum packets per file
uint32_t m_ipv4L3ProtocolRxCounterId
IPv4 L3 protocol receive counter ID.
NodeCounterMap64 m_nodeIpv4Rx
node IPv4 receive
~AnimationInterface()
Destructor for the animator interface.
void AddToIpv4AddressNodeIdTable(std::string ipv4Address, uint32_t nodeId)
Add to IPv4 address node ID table function.
NodeIdIpv4Map m_nodeIdIpv4Map
node ID to IPv4 map
Time m_queueCountersPollInterval
queue counters poll interval
std::vector< std::string > GetIpv6Addresses(Ptr< NetDevice > nd)
Get IPv6 addresses.
void UpdateLinkDescription(uint32_t fromNode, uint32_t toNode, std::string linkDescription)
Helper function to update the description for a link.
void Ipv4RxTrace(std::string context, Ptr< const Packet > p, Ptr< Ipv4 > ipv4, uint32_t interfaceIndex)
IPv4 receive trace function.
NodeCounterMap64 m_nodeQueueEnqueue
node queue enqueue
void WriteXmlUpdateNodeCounter(uint32_t counterId, uint32_t nodeId, double value)
Write XML update node counter function.
std::vector< std::string > GetIpv4Addresses(Ptr< NetDevice > nd)
Get IPv4 addresses.
Time m_wifiPhyCountersPollInterval
wifi Phy counters poll interval
uint32_t m_queueDequeueCounterId
queue dequeue counter ID
NodeCounterMap64 m_nodeWifiMacRx
node wifi MAC receive
void AddToIpv6AddressNodeIdTable(std::string ipv6Address, uint32_t nodeId)
Add to IPv6 address node ID table function.
AnimationInterface & AddSourceDestination(uint32_t fromNodeId, std::string destinationIpv4Address)
Helper function to print the routing path from a source node to destination IP.
NodeCounterMap64 m_nodeIpv4Drop
node IPv4 drop
Time m_ipv4L3ProtocolCountersStopTime
IPv4 L3 protocol counters stop time.
uint32_t m_queueEnqueueCounterId
queue enqueue counter ID
void AddByteTag(uint64_t animUid, Ptr< const Packet > p)
Add byte tag function.
Time m_ipv4L3ProtocolCountersPollInterval
IPv4 L3 protocol counters poll interval.
void WriteNonP2pLinkProperties(uint32_t id, std::string ipv4Address, std::string channelType)
Write non P2P link properties function.
void StopAnimation(bool onlyAnimation=false)
Stop animation function.
std::vector< Ipv4RoutePathElement > Ipv4RoutePathElements
Ipv4RoutePathElements typedef.
void UanPhyGenTxTrace(std::string context, Ptr< const Packet >)
UAN Phy gen transmit trace function.
void WifiMacTxDropTrace(std::string context, Ptr< const Packet > p)
wifi MAC transmit drop trace function
uint32_t m_ipv4L3ProtocolTxCounterId
IPv4 L3 protocol transmit counter ID.
Time m_queueCountersStopTime
queue counters stop time
std::string CounterTypeToString(CounterType counterType)
Counter type to string function.
ProtocolType
ProtocolType enumeration.
CounterType
Counter Types.
std::string GetMacAddress(Ptr< NetDevice > nd)
Get MAC address function.
std::vector< Ptr< Node > > GetMovedNodes()
Get moved nodes function.
uint32_t m_wifiMacTxCounterId
wifi MAC transmit counter ID
void SkipPacketTracing()
Do not trace packets.
NodeCounterMap64 m_nodeWifiMacRxDrop
node wifi MAC receive drop
NodeDescriptionsMap m_nodeDescriptions
node description
void WriteXmlAnim(bool routing=false)
Write XML anim function.
void SetStartTime(Time t)
Specify the time at which capture should start.
uint32_t AddResource(std::string resourcePath)
Add a resource such as the path to an image file.
AnimationInterface(const std::string filename)
Constructor.
std::string GetIpv6Address(Ptr< NetDevice > nd)
Get IPv6 address.
void WriteNodeEnergies()
Write node energies function.
void CsmaMacRxTrace(std::string context, Ptr< const Packet > p)
CSMA MAC receive trace function.
void WifiPhyTxBeginTrace(std::string context, WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW)
wifi Phy transmit PSDU begin trace function
void UanPhyGenRxTrace(std::string context, Ptr< const Packet >)
UAN Phy gen receive trace function.
LinkPropertiesMap m_linkProperties
link properties
void WriteXmlUpdateNodeDescription(uint32_t nodeId)
Write XML update node description function.
void UpdateNodeSize(Ptr< Node > n, double width, double height)
Helper function to update the size of a node.
std::map< uint32_t, NodeSize > m_nodeSizes
node sizes
std::pair< uint32_t, std::string > NodeIdIpv6Pair
NodeIdIpv6Pair typedef.
void ConnectLte()
Connect LTE function.
bool m_trackPackets
track packets
std::string GetNetAnimVersion()
Get netanim version function.
void WriteXmlNonP2pLinkProperties(uint32_t id, std::string ipAddress, std::string channelType)
Write XML non P2P link properties function.
AnimationInterface & EnableIpv4RouteTracking(std::string fileName, Time startTime, Time stopTime, Time pollInterval=Seconds(5))
Enable tracking of the Ipv4 routing table for all Nodes.
void WriteXmlClose(std::string name, bool routing=false)
Write XML close function.
uint64_t gAnimUid
Packet unique identifier used by AnimationInterface.
void CheckMaxPktsPerTraceFile()
Check maximum packets per trace file function.
NodeCounterMap64 m_nodeLrWpanMacTxDrop
node LR-WPAN MAC transmit drop
NodeIdIpv6Map m_nodeIdIpv6Map
node ID to IPv6 map
void TrackIpv4Route()
Track IPv4 router function.
void EnableWifiPhyCounters(Time startTime, Time stopTime, Time pollInterval=Seconds(1))
Enable tracking of Wifi Phy Counters such as TxDrop, RxDrop.
AnimUidPacketInfoMap m_pendingWifiPackets
pending wifi packets
void EnablePacketMetadata(bool enable=true)
Enable Packet metadata.
Time m_routingStopTime
routing stop time
void SetStopTime(Time t)
Specify the time at which capture should stop.
void MobilityCourseChangeTrace(Ptr< const MobilityModel > mob)
Mobility course change trace function.
void EnableWifiMacCounters(Time startTime, Time stopTime, Time pollInterval=Seconds(1))
Enable tracking of Wifi Mac Counters such as Tx, TxDrop, Rx, RxDrop.
void WriteXmlP(std::string pktType, uint32_t fId, double fbTx, double lbTx, uint32_t tId, double fbRx, double lbRx, std::string metaInfo="")
Write XMLP function.
uint32_t m_wifiMacTxDropCounterId
wifi MAC transmit drop counter ID
void WriteXmlRp(uint32_t nodeId, std::string destination, Ipv4RoutePathElements rpElements)
Write XMLRP function.
AnimUidPacketInfoMap m_pendingLrWpanPackets
pending LR-WPAN packets
void WifiMacTxTrace(std::string context, Ptr< const Packet > p)
wifi MAC transmit trace function
void ResetAnimWriteCallback()
Reset the write callback function.
void WimaxRxTrace(std::string context, Ptr< const Packet > p, const Mac48Address &m)
WIMax receive trace function.
void LrWpanMacTxDropTrace(std::string context, Ptr< const Packet > p)
LR-WPAN MAC transmit drop trace function.
void LrWpanMacRxTrace(std::string context, Ptr< const Packet > p)
LR-WPAN MAC receive trace function.
std::vector< std::string > m_nodeCounters
node counters
void WriteXmlNode(uint32_t id, uint32_t sysId, double locX, double locY)
Write XML node function.
AnimWriteCallback m_writeCallback
write callback
NodeCounterMap64 m_nodeWifiMacTxDrop
node wifi MAC transmit drop
uint64_t m_currentPktCount
current packet count
std::string GetIpv4RoutingTable(Ptr< Node > n)
Get IPv4 routing table function.
void Ipv4TxTrace(std::string context, Ptr< const Packet > p, Ptr< Ipv4 > ipv4, uint32_t interfaceIndex)
IPv4 transmit trace function.
std::pair< uint32_t, std::string > NodeIdIpv4Pair
NodeIdIpv4Pair typedef.
void EnqueueTrace(std::string context, Ptr< const Packet >)
Enqueue trace function.
uint64_t GetTracePktCount() const
Get trace file packet count (This used only for testing)
void WriteXmlUpdateNodeColor(uint32_t nodeId, uint8_t r, uint8_t g, uint8_t b)
Write XML update node color function.
Vector UpdatePosition(Ptr< Node > n)
Update position function.
std::string m_outputFileName
output file name
void WriteIpv6Addresses()
Write IPv6 Addresses function.
void AddPendingPacket(ProtocolType protocolType, uint64_t animUid, AnimPacketInfo pktInfo)
Add pending packet function.
NodeCounterMap64 m_nodeWifiPhyRxDrop
node wifi Phy receive drop
void WriteXmlIpv4Addresses(uint32_t nodeId, std::vector< std::string > ipv4Addresses)
Write XML Ipv4 addresses function.
Vector GetPosition(Ptr< Node > n)
Get position function.
AnimUidPacketInfoMap m_pendingLtePackets
pending LTE packets
void SetBackgroundImage(std::string fileName, double x, double y, double scaleX, double scaleY, double opacity)
Helper function to set the background image.
void WriteNodes()
Write nodes function.
NodeCounterMap64 m_nodeLrWpanMacRxDrop
node LR-WPAN MAC receive drop
Time m_wifiMacCountersStopTime
wifi MAC counters stop time
void WriteNodeColors()
Write node colors function.
Time m_startTime
start time
void RecursiveIpv4RoutePathSearch(std::string from, std::string to, Ipv4RoutePathElements &rpElements)
Recursive IPv4 route path search function.
static bool IsInitialized()
Check if AnimationInterface is initialized.
void LrWpanMacTxTrace(std::string context, Ptr< const Packet > p)
LR-WPAN MAC transmit trace function.
void WriteXmlUpdateBackground(std::string fileName, double x, double y, double scaleX, double scaleY, double opacity)
Write XML update background function.
void CsmaPhyTxEndTrace(std::string context, Ptr< const Packet > p)
CSMA Phy transmit end trace function.
void WriteXmlUpdateNodeSize(uint32_t nodeId, double width, double height)
Write XML update node size function.
uint32_t m_remainingEnergyCounterId
remaining energy counter ID
void WriteXmlUpdateNodeImage(uint32_t nodeId, uint32_t resourceId)
Write XML update node image function.
uint32_t m_wifiMacRxDropCounterId
wifi MAC receive drop counter ID
void TrackWifiMacCounters()
Track wifi MAC counters function.
void UpdateNodeDescription(Ptr< Node > n, std::string descr)
Helper function to update the description for a given node.
void UpdateNodeColor(Ptr< Node > n, uint8_t r, uint8_t g, uint8_t b)
Helper function to update the node color.
static void SetConstantPosition(Ptr< Node > n, double x, double y, double z=0)
Helper function to set Constant Position for a given node.
NodeCounterMap64 m_nodeQueueDequeue
node queue dequeue
void WifiPhyTxDropTrace(std::string context, Ptr< const Packet > p)
wifi Phy transmit drop trace function
uint32_t m_wifiPhyRxDropCounterId
wifi Phy receive drop counter ID
void WriteXmlUpdateLink(uint32_t fromId, uint32_t toId, std::string linkDescription)
Write XML update link counter function.
void ConnectLteEnb(Ptr< Node > n, Ptr< LteEnbNetDevice > nd, uint32_t devIndex)
Connect LTE ENB function.
void GenericWirelessRxTrace(std::string context, Ptr< const Packet > p, ProtocolType protocolType)
Generic wireless receive trace function.
std::string GetPacketMetadata(Ptr< const Packet > p)
Get packet metadata function.
uint32_t m_wifiPhyTxDropCounterId
wifi Phy transmit drop counter ID
std::vector< Ipv4RouteTrackElement > m_ipv4RouteTrackElements
IPv route track elements.
void EnableQueueCounters(Time startTime, Time stopTime, Time pollInterval=Seconds(1))
Enable tracking of Queue Counters such as Enqueue, Dequeue, Queue Drops.
uint32_t m_ipv4L3ProtocolDropCounterId
IPv4 protocol drop counter ID.
Time m_wifiPhyCountersStopTime
wifi Phy counters stop time
Time m_mobilityPollInterval
mobility poll interval
void OutputWirelessPacketRxInfo(Ptr< const Packet > p, AnimPacketInfo &pktInfo, uint64_t animUid)
Output wireless packet receive info.
std::map< std::string, uint32_t > m_ipv4ToNodeIdMap
IPv4 to node ID map.
AnimUidPacketInfoMap m_pendingCsmaPackets
pending CSMA packets
std::vector< std::string > m_resources
resources
void TrackIpv4L3ProtocolCounters()
Track IPv4 L3 protocol counters function.
void WriteXmlUpdateNodePosition(uint32_t nodeId, double x, double y)
Write XML update node position function.
void StartAnimation(bool restart=false)
Start animation function.
void DevTxTrace(std::string context, Ptr< const Packet > p, Ptr< NetDevice > tx, Ptr< NetDevice > rx, Time txTime, Time rxTime)
Device transmit trace function.
std::string GetIpv4Address(Ptr< NetDevice > nd)
Get IPv4 address.
void WifiMacRxTrace(std::string context, Ptr< const Packet > p)
wifi MAC receive trace function
bool IsStarted() const
Is AnimationInterface started.
void WriteXmlIpv6Addresses(uint32_t nodeId, std::vector< std::string > ipv6Addresses)
Write XML Ipv6 addresses function.
NodeContainer m_routingNc
routing node container
void SetAnimWriteCallback(AnimWriteCallback cb)
Set a callback function to listen to AnimationInterface write events.
void QueueDropTrace(std::string context, Ptr< const Packet >)
Queue trace function.
void WriteXmlLink(uint32_t fromId, uint32_t toLp, uint32_t toId)
Write XML link counter function.
std::map< uint64_t, AnimPacketInfo > AnimUidPacketInfoMap
AnimUidPacketInfoMap typedef.
Identifies a byte tag and a set of bytes within a packet to which the tag applies.
void GetTag(Tag &tag) const
Read the requested tag and store it in the user-provided tag instance.
Iterator over the set of byte tags in a packet.
Mobility model for which the current position does not change once it has been set and until it is se...
A Device for a Csma Network Link.
This class can be used to hold variables of floating point type such as 'double' or 'float'.
Ipv4 addresses are stored in host order in this class.
Access to the IPv4 forwarding table, interfaces, and configuration.
a class to store IPv4 address information on an interface
Ipv4Address GetLocal() const
Get the local address.
DropReason
Reason why a packet has been dropped.
bool IsLinkLocal() const
If the IPv6 address is a link-local address (fe80::/64).
Access to the IPv6 forwarding table, interfaces, and configuration.
IPv6 address associated with an interface.
Ipv6Address GetAddress() const
Get the IPv6 address.
This class can contain 16 bit addresses.
Keep track of the current position and velocity of an object.
virtual Ptr< Node > GetNode() const =0
keep track of a set of node pointers.
Iterator End() const
Get an iterator which indicates past-the-last Node in the container.
uint32_t GetN() const
Get the number of Ptr<Node> stored in this container.
Iterator Begin() const
Get an iterator which refers to the first Node in the container.
static Ptr< Node > GetNode(uint32_t n)
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
static void EnablePrinting()
Enable printing packets metadata.
Smart pointer class similar to boost::intrusive_ptr.
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
static bool IsFinished()
Check if the simulation should finish.
static Time Now()
Return the current simulation virtual time.
SocketErrno
Enumeration of the possible errors returned by a socket.
void WriteU64(uint64_t v)
tag a set of bytes in a packet
Simulation virtual time values and global simulation resolution.
double GetSeconds() const
Get an approximation of the time stored in this instance in the indicated unit.
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
Net device for UAN models.
Hold together all Wifi-related objects.
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
Energy source base class.
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file,...
#define NS_ASSERT_MSG(condition, message)
At runtime, in debugging builds, if this condition is not true, the program prints the message to out...
bool ConnectFailSafe(std::string path, const CallbackBase &cb)
bool ConnectWithoutContextFailSafe(std::string path, const CallbackBase &cb)
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
#define NS_LOG_UNCOND(msg)
Output the requested message unconditionally.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO.
Ptr< T > CreateObject(Args &&... args)
Create an object by type, with varying number of constructor parameters.
Ptr< T > Create(Ts &&... args)
Create class instances by constructors with varying numbers of arguments and return them by Ptr.
Time Seconds(double value)
Construct a Time in the indicated unit.
WifiPhyRxfailureReason
Enumeration of the possible reception failure reasons.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
U * PeekPointer(const Ptr< U > &p)
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
static bool initialized
Initialization flag.
Ptr< T1 > DynamicCast(const Ptr< T2 > &p)
Cast a Ptr.
std::map< WifiSpectrumBandInfo, Watt_u > RxPowerWattPerChannelBand
A map of the received power for each band.
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
Ipv4RoutePathElement structure.
Ipv4RouteTrackElement structure.
uint32_t fromNodeId
from node ID
std::string destination
destination
LinkProperties structure.
std::string fromNodeDescription
from node description
std::string linkDescription
link description
std::string toNodeDescription
to node description
P2pLinkNodeIdPair structure.
uint32_t fromNode
from node