38#include "ns3/constant-position-mobility-model.h" 
   39#include "ns3/core-module.h" 
   41#include "ns3/lr-wpan-module.h" 
   42#include "ns3/packet.h" 
   43#include "ns3/propagation-delay-model.h" 
   44#include "ns3/propagation-loss-model.h" 
   45#include "ns3/simulator.h" 
   46#include "ns3/single-model-spectrum-channel.h" 
   47#include "ns3/zigbee-module.h" 
   63              << 
"Traceroute to destination [" << dst << 
"]:\n";
 
   73            if (zstack->GetNwk()->GetNetworkAddress() == target)
 
   79        bool neighbor = 
false;
 
   80        target = zstack->GetNwk()->FindRoute(dst, neighbor);
 
   83            std::cout << count << 
". Node " << zstack->GetNode()->GetId() << 
" [" 
   84                      << zstack->GetNwk()->GetNetworkAddress() << 
" | " 
   85                      << zstack->GetNwk()->GetIeeeAddress() << 
"]: " 
   86                      << 
" Destination Unreachable\n";
 
   90            std::cout << count << 
". Node " << zstack->GetNode()->GetId() << 
" [" 
   91                      << zstack->GetNwk()->GetNetworkAddress() << 
" | " 
   92                      << zstack->GetNwk()->GetIeeeAddress() << 
"]: " 
   93                      << 
"NextHop [" << target << 
"] ";
 
   96                std::cout << 
"(*Neighbor)\n";
 
 
  112              << 
"NsdeDataIndication:  Received packet of size " << p->GetSize() << 
"\n";
 
 
  118    std::cout << 
"NlmeNetworkFormationConfirmStatus = " << params.m_status << 
"\n";
 
 
  131        std::cout << 
" Network discovery confirm Received. Networks found (" 
  132                  << params.m_netDescList.size() << 
"):\n";
 
  134        for (
const auto& netDescriptor : params.m_netDescList)
 
  136            std::cout << 
" ExtPanID: 0x" << std::hex << netDescriptor.m_extPanId << 
"\n" 
  137                      << std::dec << 
" CH:  " << 
static_cast<uint32_t>(netDescriptor.m_logCh)
 
  139                      << std::hex << 
" Pan ID: 0x" << netDescriptor.m_panId << 
"\n" 
  140                      << 
" Stack profile: " << std::dec
 
  141                      << 
static_cast<uint32_t>(netDescriptor.m_stackProfile) << 
"\n" 
  142                      << 
"--------------------\n";
 
  159        NS_ABORT_MSG(
"Unable to discover networks | status: " << params.m_status);
 
 
  169                  << 
" The device joined the network SUCCESSFULLY with short address " << std::hex
 
  170                  << params.m_networkAddress << 
" on the Extended PAN Id: " << std::hex
 
  171                  << params.m_extendedPanId << 
"\n" 
  183        std::cout << 
" The device FAILED to join the network with status " << params.m_status
 
 
  191    std::cout << 
"NlmeRouteDiscoveryConfirmStatus = " << params.m_status << 
"\n";
 
 
  207    dataReqParams.
m_dstAddr = stackDst->GetNwk()->GetNetworkAddress();
 
  217                        stackSrc->GetNwk()->GetNetworkAddress(),
 
  218                        stackDst->GetNwk()->GetNetworkAddress());
 
 
  232main(
int argc, 
char* argv[])
 
  256    dev0->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:CA:FE");
 
  257    dev1->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:01");
 
  258    dev2->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:02");
 
  259    dev3->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:03");
 
  260    dev4->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:04");
 
  269    channel->AddPropagationLossModel(propModel);
 
  270    channel->SetPropagationDelayModel(delayModel);
 
  272    dev0->SetChannel(channel);
 
  273    dev1->SetChannel(channel);
 
  274    dev2->SetChannel(channel);
 
  275    dev3->SetChannel(channel);
 
  276    dev4->SetChannel(channel);
 
  299    zstack0->GetNwk()->AssignStreams(0);
 
  300    zstack1->GetNwk()->AssignStreams(10);
 
  301    zstack2->GetNwk()->AssignStreams(20);
 
  302    zstack3->GetNwk()->AssignStreams(30);
 
  303    zstack4->GetNwk()->AssignStreams(40);
 
  308    dev0Mobility->SetPosition(Vector(0, 0, 0));
 
  309    dev0->GetPhy()->SetMobility(dev0Mobility);
 
  312    dev1Mobility->SetPosition(Vector(90, 0, 0));
 
  313    dev1->GetPhy()->SetMobility(dev1Mobility);
 
  316    dev2Mobility->SetPosition(Vector(170, 0, 0));
 
  317    dev2->GetPhy()->SetMobility(dev2Mobility);
 
  320    dev3Mobility->SetPosition(Vector(250, 0, 0));
 
  321    dev3->GetPhy()->SetMobility(dev3Mobility);
 
  324    dev4Mobility->SetPosition(Vector(90, 50, 0));
 
  325    dev4->GetPhy()->SetMobility(dev4Mobility);
 
  332    zstack0->GetNwk()->SetNlmeNetworkFormationConfirmCallback(
 
  334    zstack0->GetNwk()->SetNlmeRouteDiscoveryConfirmCallback(
 
  337    zstack0->GetNwk()->SetNldeDataIndicationCallback(
 
  339    zstack1->GetNwk()->SetNldeDataIndicationCallback(
 
  341    zstack2->GetNwk()->SetNldeDataIndicationCallback(
 
  343    zstack3->GetNwk()->SetNldeDataIndicationCallback(
 
  345    zstack4->GetNwk()->SetNldeDataIndicationCallback(
 
  348    zstack1->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
 
  350    zstack2->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
 
  352    zstack3->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
 
  354    zstack4->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
 
helps to manage and create IEEE 802.15.4 NetDevice objects
 
NetDeviceContainer Install(NodeContainer c)
Install a LrWpanNetDevice and the associated structures (e.g., channel) in the nodes.
 
This class can contain 16 bit addresses.
 
holds a vector of ns3::NetDevice pointers
 
Ptr< NetDevice > Get(uint32_t i) const
Get the Ptr<NetDevice> stored in this container at a given index.
 
keep track of a set of node pointers.
 
Smart pointer class similar to boost::intrusive_ptr.
 
static void SetRun(uint64_t run)
Set the run number of simulation.
 
static void SetSeed(uint32_t seed)
Set the seed.
 
static EventId Schedule(const Time &delay, FUNC f, Ts &&... args)
Schedule an event to expire after delay.
 
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
 
static void ScheduleWithContext(uint32_t context, const Time &delay, FUNC f, Ts &&... args)
Schedule an event with the given context.
 
static Time Now()
Return the current simulation virtual time.
 
static void Run()
Run the simulation.
 
static EventId ScheduleNow(FUNC f, Ts &&... args)
Schedule an event to expire Now.
 
static void Stop()
Tell the Simulator the calling event should be the last one executed.
 
TimeWithUnit As(const Unit unit=Time::AUTO) const
Attach a unit to a Time, to facilitate output in a specific unit.
 
Setup a Zigbee stack to be used with LrWpanNetDevice.
 
zigbee::ZigbeeStackContainer Install(NetDeviceContainer c)
Install the Zigbee stack on top of an existing LrWpanNetDevice.
 
void SetNwkLayerOnly()
If this is set, the helper will only create Zigbee stacks that contain only the NWK layer.
 
Network layer to device interface.
 
void PrintRoutingTable(Ptr< OutputStreamWrapper > stream) const
Print the entries in the routing table.
 
void NlmeStartRouterRequest(NlmeStartRouterRequestParams params)
Zigbee Specification r22.1.0, section 3.2.2.9 NLME-START-ROUTER.request This primitive allows the nex...
 
void NldeDataRequest(NldeDataRequestParams params, Ptr< Packet > packet)
Zigbee Specification r22.1.0, Section 3.2.1.1 NLDE-DATA.request Request to transfer a NSDU.
 
void PrintNeighborTable(Ptr< OutputStreamWrapper > stream) const
Print the entries in the neighbor table.
 
void NlmeNetworkDiscoveryRequest(NlmeNetworkDiscoveryRequestParams params)
Zigbee Specification r22.1.0, section 3.2.2.3 NLME-NETWORK-DISCOVERY.request Allows the next higher l...
 
void NlmeJoinRequest(NlmeJoinRequestParams params)
Zigbee Specification r22.1.0, section 3.2.2.13 NLME-JOIN.request This primitive allows the next highe...
 
void PrintRouteDiscoveryTable(Ptr< OutputStreamWrapper > stream)
Print the entries in the route discovery table.
 
void NlmeNetworkFormationRequest(NlmeNetworkFormationRequestParams params)
Zigbee Specification r22.1.0, Section 3.2.2.5 and 3.6.1.1 NLME-NETWORK-FORMATION.request Request the ...
 
Holds a vector of ns3::ZigbeeStack pointers.
 
Ptr< ZigbeeStack > Get(uint32_t i) const
Get a stack element from the container.
 
Zigbee protocol stack to device interface.
 
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
 
auto MakeBoundCallback(R(*fnPtr)(Args...), BArgs &&... bargs)
Make Callbacks with varying number of bound arguments.
 
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.
 
@ ENABLE_ROUTE_DISCOVERY
Enable route discovery.
 
@ ASSOCIATION
The device is requesting to join a network through association.
 
@ UCST_BCST
Unicast or Broadcast address mode.
 
static constexpr uint32_t ALL_CHANNELS
Bitmap representing all channels (11~26) LSB b0-b26, b27-b31 MSB Page 0 in Zigbee (250kbps O-QPSK).
 
@ SUCCESS
The operation was completed successfully.
 
Every class exported by the ns3 library is enclosed in the ns3 namespace.
 
LogLevel
Logging severity classes and levels.
 
@ LOG_PREFIX_FUNC
Prefix all trace prints with function.
 
@ LOG_PREFIX_TIME
Prefix all trace prints with simulation time.
 
@ LOG_PREFIX_NODE
Prefix all trace prints with simulation node.
 
void LogComponentEnableAll(LogLevel level)
Enable the logging output for all registered log components.
 
uint8_t channelPageCount
The number of the channel page structures contained in the channel list structure.
 
std::vector< uint32_t > channelsField
The set of channels for a given page.
 
NLDE-DATA.indication params.
 
NLDE-DATA.request params.
 
Mac16Address m_dstAddr
The destination address.
 
uint8_t m_nsduHandle
The NSDU handle.
 
AddressMode m_dstAddrMode
Destination address mode.
 
uint8_t m_discoverRoute
0x01 Enable Route Discovery | 0x00: Suppress Route discovery
 
NLME-JOIN.confirm params.
 
NLME-JOIN.request params.
 
JoiningMethod m_rejoinNetwork
This parameter controls the method of joining the network.
 
uint8_t m_capabilityInfo
The operating capabilities of the device being directly joined (Bit map).
 
uint64_t m_extendedPanId
The 64 bit PAN identifier of the the network to join.
 
NLME-NETWORK-DISCOVERY.confirm params.
 
NLME-NETWORK-DISCOVERY.request params.
 
uint8_t m_scanDuration
A value used to calculate the length of time to spend.
 
ChannelList m_scanChannelList
The list of all channel pages and the associated channels that shall be scanned.
 
NLME-ROUTE-DISCOVERY.confirm params.
 
NLME-START-ROUTER.request params.
 
static void NwkNetworkDiscoveryConfirm(Ptr< ZigbeeStack > stack, NlmeNetworkDiscoveryConfirmParams params)
 
static void NwkJoinConfirm(Ptr< ZigbeeStack > stack, NlmeJoinConfirmParams params)
 
ZigbeeStackContainer zigbeeStacks
 
static void NwkRouteDiscoveryConfirm(Ptr< ZigbeeStack > stack, NlmeRouteDiscoveryConfirmParams params)
 
static void NwkNetworkFormationConfirm(Ptr< ZigbeeStack > stack, NlmeNetworkFormationConfirmParams params)
 
static void NwkDataIndication(Ptr< ZigbeeStack > stack, NldeDataIndicationParams params, Ptr< Packet > p)
 
static void TraceRoute(Mac16Address src, Mac16Address dst)
 
static void NwkNetworkDiscoveryConfirm(Ptr< ZigbeeStack > stack, NlmeNetworkDiscoveryConfirmParams params)
 
static void SendData(Ptr< ZigbeeStack > stackSrc, Ptr< ZigbeeStack > stackDst)
 
static void TraceRoute(Mac16Address src, Mac16Address dst)
 
static void NwkDataIndication(Ptr< ZigbeeStack > stack, NldeDataIndicationParams params, Ptr< Packet > p)
 
static void NwkJoinConfirm(Ptr< ZigbeeStack > stack, NlmeJoinConfirmParams params)
 
static void NwkRouteDiscoveryConfirm(Ptr< ZigbeeStack > stack, NlmeRouteDiscoveryConfirmParams params)
 
static void NwkNetworkFormationConfirm(Ptr< ZigbeeStack > stack, NlmeNetworkFormationConfirmParams params)