46#include "ns3/constant-position-mobility-model.h"
47#include "ns3/core-module.h"
49#include "ns3/lr-wpan-module.h"
50#include "ns3/packet.h"
51#include "ns3/propagation-delay-model.h"
52#include "ns3/propagation-loss-model.h"
53#include "ns3/simulator.h"
54#include "ns3/single-model-spectrum-channel.h"
55#include "ns3/zigbee-module.h"
73 std::cout <<
"UCST | ";
77 std::cout <<
"GROUPCAST | ";
81 std::cout <<
"Unknown | ";
83 std::cout <<
"ApsdeDataIndication: Received DATA packet with size " << p->GetSize()
84 <<
" for destination EndPoint " << params.m_dstEndPoint <<
"\n";
91 <<
"NlmeNetworkFormationConfirmStatus = " << params.m_status <<
"\n";
105 <<
" Network discovery confirm Received. Networks found ("
106 << params.m_netDescList.size() <<
")\n";
122 NS_ABORT_MSG(
"Unable to discover networks | status: " << params.m_status);
132 <<
" The device joined the network SUCCESSFULLY with short address " << std::hex
133 << params.m_networkAddress <<
" on the Extended PAN Id: 0x" << std::hex
134 << params.m_extendedPanId <<
"\n"
146 std::cout <<
" The device FAILED to join the network with status " << params.m_status
154 std::cout <<
"NlmeRouteDiscoveryConfirmStatus = " << params.m_status <<
"\n";
183 dataReqParams.
m_dstAddr16 = stackDst->GetNwk()->GetNetworkAddress();
214main(
int argc,
char* argv[])
239 dev0->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:CA:FE");
240 dev1->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:01");
241 dev2->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:02");
242 dev3->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:03");
243 dev4->GetMac()->SetExtendedAddress(
"00:00:00:00:00:00:00:04");
252 channel->AddPropagationLossModel(propModel);
253 channel->SetPropagationDelayModel(delayModel);
255 dev0->SetChannel(channel);
256 dev1->SetChannel(channel);
257 dev2->SetChannel(channel);
258 dev3->SetChannel(channel);
259 dev4->SetChannel(channel);
281 zstack0->GetNwk()->AssignStreams(0);
282 zstack1->GetNwk()->AssignStreams(10);
283 zstack2->GetNwk()->AssignStreams(20);
284 zstack3->GetNwk()->AssignStreams(30);
285 zstack4->GetNwk()->AssignStreams(40);
290 dev0Mobility->SetPosition(Vector(0, 0, 0));
291 dev0->GetPhy()->SetMobility(dev0Mobility);
294 dev1Mobility->SetPosition(Vector(90, 0, 0));
295 dev1->GetPhy()->SetMobility(dev1Mobility);
298 dev2Mobility->SetPosition(Vector(170, 0, 0));
299 dev2->GetPhy()->SetMobility(dev2Mobility);
302 dev3Mobility->SetPosition(Vector(250, 0, 0));
303 dev3->GetPhy()->SetMobility(dev3Mobility);
306 dev4Mobility->SetPosition(Vector(90, 50, 0));
307 dev4->GetPhy()->SetMobility(dev4Mobility);
314 zstack0->GetNwk()->SetNlmeNetworkFormationConfirmCallback(
316 zstack0->GetNwk()->SetNlmeRouteDiscoveryConfirmCallback(
319 zstack1->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
321 zstack2->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
323 zstack3->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
325 zstack4->GetNwk()->SetNlmeNetworkDiscoveryConfirmCallback(
335 zstack0->GetAps()->SetApsdeDataIndicationCallback(
337 zstack1->GetAps()->SetApsdeDataIndicationCallback(
339 zstack2->GetAps()->SetApsdeDataIndicationCallback(
341 zstack3->GetAps()->SetApsdeDataIndicationCallback(
343 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.
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 ApsmeAddGroupRequest(ApsmeGroupRequestParams params)
Zigbee Specification r22.1.0, Section 2.2.4.5.1 APSME-ADD-GROUP.request Request that group membership...
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 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 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.
@ GROUP_ADDR_DST_ENDPOINT_NOT_PRESENT
Group address or 16-bit destination address present but destination endpoint not present.
@ DST_ADDR16_DST_ENDPOINT_PRESENT
16-bit destination address and destination endpoint present.
@ ASSOCIATION
The device is requesting to join a network through association.
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.
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.
Zigbee Specification r22.1.0, Section 2.2.4.5.1 and 2.2.4.5.3 APSME-ADD-GROUP.request and APSME-REMOV...
uint8_t m_endPoint
The endpoint to which the group address is associated.
Mac16Address m_groupAddress
The group address to add.
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 SendDataUcst(Ptr< ZigbeeStack > stackSrc, Ptr< ZigbeeStack > stackDst)
static void NwkNetworkDiscoveryConfirm(Ptr< ZigbeeStack > stack, NlmeNetworkDiscoveryConfirmParams params)
static void SendDataGcst(Ptr< ZigbeeStack > stackSrc)
static void ApsDataIndication(Ptr< ZigbeeStack > stack, ApsdeDataIndicationParams params, Ptr< Packet > p)
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)