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 <<
"ApsdeDataIndication: Received packet of size " << p->GetSize()
113 <<
" for destination EndPoint " << params.m_dstEndPoint <<
"\n";
119 std::cout <<
"NlmeNetworkFormationConfirmStatus = " << params.m_status <<
"\n";
130 if (params.m_status == NwkStatus::SUCCESS)
132 std::cout <<
" Network discovery confirm Received. Networks found ("
133 << params.m_netDescList.size() <<
"):\n";
135 for (
const auto& netDescriptor : params.m_netDescList)
137 std::cout <<
" ExtPanID: 0x" << std::hex << netDescriptor.m_extPanId <<
"\n"
138 << std::dec <<
" CH: " <<
static_cast<uint32_t>(netDescriptor.m_logCh)
140 << std::hex <<
" Pan ID: 0x" << netDescriptor.m_panId <<
"\n"
141 <<
" Stack profile: " << std::dec
142 <<
static_cast<uint32_t>(netDescriptor.m_stackProfile) <<
"\n"
143 <<
"--------------------\n";
160 NS_ABORT_MSG(
"Unable to discover networks | status: " << params.m_status);
167 if (params.m_status == NwkStatus::SUCCESS)
170 <<
" The device joined the network SUCCESSFULLY with short address " << std::hex
171 << params.m_networkAddress <<
" on the Extended PAN Id: " << std::hex
172 << params.m_extendedPanId <<
"\n"
184 std::cout <<
" The device FAILED to join the network with status " << params.m_status
192 std::cout <<
"NlmeRouteDiscoveryConfirmStatus = " << params.m_status <<
"\n";
220 dataReqParams.
m_dstAddrMode = ApsDstAddressMode::DST_ADDR16_DST_ENDPOINT_PRESENT;
221 dataReqParams.
m_dstAddr16 = stackDst->GetNwk()->GetNetworkAddress();
230 stackSrc->GetNwk()->GetNetworkAddress(),
231 stackDst->GetNwk()->GetNetworkAddress());
245main(
int argc,
char* argv[])
269 dev0->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:CA:FE");
270 dev1->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:01");
271 dev2->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:02");
272 dev3->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:03");
273 dev4->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:04");
282 channel->AddPropagationLossModel(propModel);
283 channel->SetPropagationDelayModel(delayModel);
285 dev0->SetChannel(channel);
286 dev1->SetChannel(channel);
287 dev2->SetChannel(channel);
288 dev3->SetChannel(channel);
289 dev4->SetChannel(channel);
311 zstack0->GetNwk()->AssignStreams(0);
312 zstack1->GetNwk()->AssignStreams(10);
313 zstack2->GetNwk()->AssignStreams(20);
314 zstack3->GetNwk()->AssignStreams(30);
315 zstack4->GetNwk()->AssignStreams(40);
320 dev0Mobility->SetPosition(Vector(0, 0, 0));
321 dev0->GetPhy()->SetMobility(dev0Mobility);
324 dev1Mobility->SetPosition(Vector(90, 0, 0));
325 dev1->GetPhy()->SetMobility(dev1Mobility);
328 dev2Mobility->SetPosition(Vector(170, 0, 0));
329 dev2->GetPhy()->SetMobility(dev2Mobility);
332 dev3Mobility->SetPosition(Vector(250, 0, 0));
333 dev3->GetPhy()->SetMobility(dev3Mobility);
336 dev4Mobility->SetPosition(Vector(90, 50, 0));
337 dev4->GetPhy()->SetMobility(dev4Mobility);
344 zstack0->GetNwk()->SetNlmeNetworkFormationConfirmCallback(
346 zstack0->GetNwk()->SetNlmeRouteDiscoveryConfirmCallback(
349 zstack1->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
351 zstack2->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
353 zstack3->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
355 zstack4->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
365 zstack0->GetAps()->SetApsdeDataIndicationCallback(
367 zstack1->GetAps()->SetApsdeDataIndicationCallback(
369 zstack2->GetAps()->SetApsdeDataIndicationCallback(
371 zstack3->GetAps()->SetApsdeDataIndicationCallback(
373 zstack4->GetAps()->SetApsdeDataIndicationCallback(
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.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
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.
Network layer to device interface.
void ApsdeDataRequest(ApsdeDataRequestParams params, Ptr< Packet > asdu)
Zigbee Specification r22.1.0, Section 2.2.4.1.1 APSDE-DATA.request Request the transmission of data t...
Helper class used to craft the transmission options bitmap used by the APSDE-DATA....
uint8_t GetTxOptions() const
Get the complete bitmap containing the Tx options.
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 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.
Iterator End() const
Get an iterator which indicates past the last ZigbeeStack in the container.
Iterator Begin() const
Get and iterator which refers to the first ZigbeeStack in the container.
Ptr< ZigbeeStack > Get(uint32_t i) const
Get a stack element from the container.
void Add(ZigbeeStackContainer other)
Append the contents of another ZigbeeStackContainer to the end of this 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.
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)
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.
Zigbee Specification r22.1.0, Section 2.2.4.1.3 APSDE-DATA.indications params.
Zigbee Specification r22.1.0, Section 2.2.4.1.1 APSDE-DATA.request params.
uint16_t m_profileId
The application profile ID.
uint16_t m_clusterId
The application cluster ID.
Mac16Address m_dstAddr16
The destination 16-bit address.
uint8_t m_txOptions
Transmission options.
uint8_t m_srcEndPoint
The source endpoint.
bool m_useAlias
Indicates if alias is used in this transmission.
ApsDstAddressMode m_dstAddrMode
Destination address mode.
uint8_t m_dstEndPoint
The destination endpoint.
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.
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 SendData(Ptr< ZigbeeStack > stackSrc, Ptr< ZigbeeStack > stackDst)
static void ApsDataIndication(Ptr< ZigbeeStack > stack, ApsdeDataIndicationParams params, Ptr< Packet > p)
static void TraceRoute(Mac16Address src, Mac16Address dst)
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)