0.01.00
topology.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016, The OpenThread Authors.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * 1. Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * 3. Neither the name of the copyright holder nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
34 #ifndef TOPOLOGY_HPP_
35 #define TOPOLOGY_HPP_
36 
37 #include "openthread-core-config.h"
38 
40 
41 #include "common/message.hpp"
42 #include "mac/mac_frame.hpp"
43 #include "net/ip6.hpp"
44 #include "thread/link_quality.hpp"
45 #include "thread/mle_tlvs.hpp"
46 
47 namespace ot {
48 
53 class Neighbor
54 {
55 public:
60  enum State
61  {
69  };
70 
77  State GetState(void) const { return static_cast<State>(mState); }
78 
85  void SetState(State aState) { mState = static_cast<uint8_t>(aState); }
86 
93  bool IsStateRestoring(void) const { return (mState == kStateRestored) || (mState == kStateChildUpdateRequest); }
94 
102  bool IsStateValidOrRestoring(void) const { return (mState == kStateValid) || IsStateRestoring(); }
103 
110  uint8_t GetDeviceMode(void) const { return mMode; }
111 
118  void SetDeviceMode(uint8_t aMode) { mMode = aMode; }
119 
126  bool IsRxOnWhenIdle(void) const { return (mMode & Mle::ModeTlv::kModeRxOnWhenIdle) != 0; }
127 
134  bool IsFullThreadDevice(void) const { return (mMode & Mle::ModeTlv::kModeFFD) != 0; }
135 
142  bool IsSecureDataRequest(void) const { return (mMode & Mle::ModeTlv::kModeSecureDataRequest) != 0; }
143 
150  bool IsFullNetworkData(void) const { return (mMode & Mle::ModeTlv::kModeFullNetworkData) != 0; }
151 
156  void ClearExtAddress(void) { memset(&mMacAddr, 0, sizeof(mMacAddr)); }
157 
164  Mac::ExtAddress &GetExtAddress(void) { return mMacAddr; }
165 
172  const Mac::ExtAddress &GetExtAddress(void) const { return mMacAddr; }
173 
180  void SetExtAddress(const Mac::ExtAddress &aAddress) { mMacAddr = aAddress; }
181 
188  uint32_t GetKeySequence(void) const { return mKeySequence; }
189 
196  void SetKeySequence(uint32_t aKeySequence) { mKeySequence = aKeySequence; }
197 
204  uint32_t GetLastHeard(void) const { return mLastHeard; }
205 
212  void SetLastHeard(uint32_t aLastHeard) { mLastHeard = aLastHeard; }
213 
220  uint32_t GetLinkFrameCounter(void) const { return mValidPending.mValid.mLinkFrameCounter; }
221 
228  void SetLinkFrameCounter(uint32_t aFrameCounter) { mValidPending.mValid.mLinkFrameCounter = aFrameCounter; }
229 
236  uint32_t GetMleFrameCounter(void) const { return mValidPending.mValid.mMleFrameCounter; }
237 
244  void SetMleFrameCounter(uint32_t aFrameCounter) { mValidPending.mValid.mMleFrameCounter = aFrameCounter; }
245 
252  uint16_t GetRloc16(void) const { return mValidPending.mValid.mRloc16; }
253 
260  void SetRloc16(uint16_t aRloc16) { mValidPending.mValid.mRloc16 = aRloc16; }
261 
268  bool IsDataRequestPending(void) const { return mDataRequest; }
269 
276  void SetDataRequestPending(bool aPending) { mDataRequest = aPending; }
277 
284  uint8_t GetLinkFailures(void) const { return mLinkFailures; }
285 
290  void IncrementLinkFailures(void) { mLinkFailures++; }
291 
296  void ResetLinkFailures(void) { mLinkFailures = 0; }
297 
304  LinkQualityInfo &GetLinkInfo(void) { return mLinkInfo; }
305 
310  void GenerateChallenge(void);
311 
318  const uint8_t *GetChallenge(void) const { return mValidPending.mPending.mChallenge; }
319 
326  uint8_t GetChallengeSize(void) const { return sizeof(mValidPending.mPending.mChallenge); }
327 
328 private:
329  Mac::ExtAddress mMacAddr;
330  uint32_t mLastHeard;
331  union
332  {
333  struct
334  {
335  uint32_t mLinkFrameCounter;
336  uint32_t mMleFrameCounter;
337  uint16_t mRloc16;
338  } mValid;
339  struct
340  {
343  } mPending;
344  } mValidPending;
345 
346  uint32_t mKeySequence;
347  uint8_t mState : 3;
348  uint8_t mMode : 4;
349  bool mDataRequest : 1;
350  uint8_t mLinkFailures;
351  LinkQualityInfo mLinkInfo;
352 };
353 
358 class Child : public Neighbor
359 {
360 public:
361  enum
362  {
363  kMaxIp6AddressPerChild = OPENTHREAD_CONFIG_IP_ADDRS_PER_CHILD,
364  kMaxRequestTlvs = 5,
365  };
366 
371  void ClearIp6Addresses(void) { memset(mIp6Address, 0, sizeof(mIp6Address)); }
372 
381  Ip6::Address &GetIp6Address(uint8_t aIndex) { return mIp6Address[aIndex]; }
382 
395  otError FindIp6Address(const Ip6::Address &aAddress, uint8_t *aIndex) const;
396 
403  void RemoveIp6Address(uint8_t aIndex);
404 
411  uint32_t GetTimeout(void) const { return mTimeout; }
412 
419  void SetTimeout(uint32_t aTimeout) { mTimeout = aTimeout; }
420 
427  uint8_t GetNetworkDataVersion(void) const { return mNetworkDataVersion; }
428 
435  void SetNetworkDataVersion(uint8_t aVersion) { mNetworkDataVersion = aVersion; }
436 
441  void GenerateChallenge(void);
442 
449  const uint8_t *GetChallenge(void) const { return mAttachChallenge; }
450 
457  uint8_t GetChallengeSize(void) const { return sizeof(mAttachChallenge); }
458 
465  uint32_t GetIndirectFrameCounter(void) const { return mIndirectFrameCounter; }
466 
473  void SetIndirectFrameCounter(uint32_t aFrameCounter) { mIndirectFrameCounter = aFrameCounter; }
474 
481  Message *GetIndirectMessage(void) { return mIndirectMessage; }
482 
489  void SetIndirectMessage(Message *aMessage) { mIndirectMessage = aMessage; }
490 
497  uint16_t GetIndirectFragmentOffset(void) const { return mIndirectFragmentOffset; }
498 
505  void SetIndirectFragmentOffset(uint16_t aFragmentOffset) { mIndirectFragmentOffset = aFragmentOffset; }
506 
513  uint8_t GetIndirectKeyId(void) const { return mIndirectKeyId; }
514 
521  void SetIndirectKeyId(uint8_t aKeyId) { mIndirectKeyId = aKeyId; }
522 
529  uint8_t GetIndirectTxAttempts(void) const { return mIndirectTxAttempts; }
530 
535  void ResetIndirectTxAttempts(void) { mIndirectTxAttempts = 0; }
536 
541  void IncrementIndirectTxAttempts(void) { mIndirectTxAttempts++; }
542 
549  uint8_t GetIndirectDataSequenceNumber(void) const { return mIndirectDsn; }
550 
557  void SetIndirectDataSequenceNumber(uint8_t aDsn) { mIndirectDsn = aDsn; }
558 
565  bool IsIndirectSourceMatchShort(void) const { return mUseShortAddress; }
566 
573  void SetIndirectSourceMatchShort(bool aShort) { mUseShortAddress = aShort; }
574 
581  bool IsIndirectSourceMatchPending(void) const { return mSourceMatchPending; }
582 
589  void SetIndirectSourceMatchPending(bool aPending) { mSourceMatchPending = aPending; }
590 
597  uint16_t GetIndirectMessageCount(void) const { return mQueuedMessageCount; }
598 
603  void IncrementIndirectMessageCount(void) { mQueuedMessageCount++; }
604 
609  void DecrementIndirectMessageCount(void) { mQueuedMessageCount--; }
610 
615  void ResetIndirectMessageCount(void) { mQueuedMessageCount = 0; }
616 
621  void ClearRequestTlvs(void) { memset(mRequestTlvs, Mle::Tlv::kInvalid, sizeof(mRequestTlvs)); }
622 
631  uint8_t GetRequestTlv(uint8_t aIndex) const { return mRequestTlvs[aIndex]; }
632 
640  void SetRequestTlv(uint8_t aIndex, uint8_t aType) { mRequestTlvs[aIndex] = aType; }
641 
650  const Mac::Address &GetMacAddress(Mac::Address &aMacAddress) const;
651 
652 #if OPENTHREAD_ENABLE_CHILD_SUPERVISION
653 
658  void IncrementSecondsSinceLastSupervision(void) { mSecondsSinceSupervision++; }
659 
666  uint16_t GetSecondsSinceLastSupervision(void) const { return mSecondsSinceSupervision; }
667 
672  void ResetSecondsSinceLastSupervision(void) { mSecondsSinceSupervision = 0; }
673 
674 #endif // #if OPENTHREAD_ENABLE_CHILD_SUPERVISION
675 
676 private:
677  Ip6::Address mIp6Address[kMaxIp6AddressPerChild];
678  uint32_t mTimeout;
679 
680  union
681  {
682  uint8_t mRequestTlvs[kMaxRequestTlvs];
683  uint8_t mAttachChallenge[Mle::ChallengeTlv::kMaxSize];
684  };
685 
686  uint32_t mIndirectFrameCounter;
687  Message *mIndirectMessage;
688  uint16_t mIndirectFragmentOffset;
689  uint8_t mIndirectKeyId;
690  uint8_t mIndirectTxAttempts;
691  uint8_t mIndirectDsn;
692  uint8_t mNetworkDataVersion;
693  uint16_t mQueuedMessageCount : 13;
694  bool mUseShortAddress : 1;
695  bool mSourceMatchPending : 1;
696 
697 #if OPENTHREAD_ENABLE_CHILD_SUPERVISION
698  uint16_t mSecondsSinceSupervision;
699 #endif // OPENTHREAD_ENABLE_CHILD_SUPERVISION
700 
701 };
702 
707 class Router : public Neighbor
708 {
709 public:
716  uint8_t GetNextHop(void) const { return mNextHop; }
717 
724  void SetNextHop(uint8_t aRouterId) { mNextHop = aRouterId; }
725 
732  uint8_t GetLinkQualityOut(void) const { return mLinkQualityOut; }
733 
740  void SetLinkQualityOut(uint8_t aLinkQuality) { mLinkQualityOut = aLinkQuality; }
741 
748  uint8_t GetCost(void) const { return mCost; }
749 
756  void SetCost(uint8_t aCost) { mCost = aCost; }
757 
764  bool IsAllocated(void) const { return mAllocated; }
765 
772  void SetAllocated(bool aAllocated) { mAllocated = aAllocated; }
773 
780  bool IsReclaimDelay(void) const { return mReclaimDelay; }
781 
788  void SetReclaimDelay(bool aReclaimDelay) { mReclaimDelay = aReclaimDelay; }
789 
790 private:
791  uint8_t mNextHop;
792  uint8_t mLinkQualityOut : 2;
793  uint8_t mCost : 4;
794  bool mAllocated : 1;
795  bool mReclaimDelay : 1;
796 };
797 
798 } // namespace ot
799 
800 #endif // TOPOLOGY_HPP_
void SetTimeout(uint32_t aTimeout)
This method sets the child timeout.
Definition: topology.hpp:419
const uint8_t * GetChallenge(void) const
This method returns the current challenge value for MLE Link Request/Response exchanges.
Definition: topology.hpp:318
bool IsFullNetworkData(void) const
This method indicates whether or not the device requests Full Network Data.
Definition: topology.hpp:150
Definition: cli.cpp:90
bool IsStateValidOrRestoring(void) const
Check if the neighbor/child is in valid state or if it is being restored.
Definition: topology.hpp:102
uint32_t GetKeySequence(void) const
This method gets the key sequence value.
Definition: topology.hpp:188
This structure represents an IEEE 802.15.4 Short or Extended Address.
Definition: mac_frame.hpp:147
void SetIndirectFragmentOffset(uint16_t aFragmentOffset)
This method sets the 6LoWPAN Fragment Offset to use for indirect transmissions.
Definition: topology.hpp:505
void SetIndirectKeyId(uint8_t aKeyId)
This method sets the IEEE 802.15.4 Key ID value to use for indirect retransmissions.
Definition: topology.hpp:521
uint8_t GetIndirectTxAttempts(void) const
This method gets the number of indirect transmission attempts for the current message.
Definition: topology.hpp:529
This class implements an IPv6 address object.
Definition: ip6_address.hpp:60
uint8_t GetIndirectDataSequenceNumber(void) const
This method gets the IEEE 802.15.4 Data Sequence Number to use during indirect retransmissions.
Definition: topology.hpp:549
bool IsFullThreadDevice(void) const
This method indicates whether or not the device is a Full Thread Device.
Definition: topology.hpp:134
Ip6::Address & GetIp6Address(uint8_t aIndex)
This method gets the IPv6 address at index aIndex.
Definition: topology.hpp:381
LinkQualityInfo & GetLinkInfo(void)
This method returns the LinkQualityInfo object.
Definition: topology.hpp:304
Received an MLE Child ID Request message.
Definition: topology.hpp:65
Sent an MLE Child Update Request message (trying to restore the child)
Definition: topology.hpp:67
void ClearRequestTlvs(void)
This method clears the requested TLV list.
Definition: topology.hpp:621
void ClearExtAddress(void)
This method sets all bytes of the Extended Address to zero.
Definition: topology.hpp:156
Message * GetIndirectMessage(void)
This method gets the message buffer to use for indirect transmissions.
Definition: topology.hpp:481
bool IsStateRestoring(void) const
Check if the neighbor/child is being restored.
Definition: topology.hpp:93
uint8_t GetNextHop(void) const
This method gets the router ID of the next hop to this router.
Definition: topology.hpp:716
void SetCost(uint8_t aCost)
This method sets the router cost to this router.
Definition: topology.hpp:756
void SetIndirectDataSequenceNumber(uint8_t aDsn)
This method sets the IEEE 802.15.4 Data Sequence Number to use during indirect retransmissions.
Definition: topology.hpp:557
void SetReclaimDelay(bool aReclaimDelay)
This method sets whether the reclaim delay is in effect for this router ID.
Definition: topology.hpp:788
Maximum size in bytes (Thread Specification).
Definition: mle_tlvs.hpp:311
uint32_t GetLastHeard(void) const
This method returns the last heard time.
Definition: topology.hpp:204
uint8_t GetChallengeSize(void) const
This method returns the size (bytes) of the challenge value for MLE Link Request/Response exchanges...
Definition: topology.hpp:326
void ResetIndirectTxAttempts(void)
This method resets the number of indirect transmission attempts to zero.
Definition: topology.hpp:535
const Mac::ExtAddress & GetExtAddress(void) const
This method returns the Extended Address.
Definition: topology.hpp:172
bool IsIndirectSourceMatchShort(void) const
This method indicates whether or not to source match on the short address.
Definition: topology.hpp:565
void SetRloc16(uint16_t aRloc16)
This method sets the RLOC16 value.
Definition: topology.hpp:260
uint16_t GetIndirectMessageCount(void) const
This method returns the number of queued message(s) for the child.
Definition: topology.hpp:597
void SetMleFrameCounter(uint32_t aFrameCounter)
This method sets the MLE frame counter value.
Definition: topology.hpp:244
uint8_t GetLinkFailures(void) const
This method gets the number of consecutive link failures.
Definition: topology.hpp:284
void SetIndirectSourceMatchShort(bool aShort)
This method sets whether or not to source match on the short address.
Definition: topology.hpp:573
This class represents a Thread neighbor.
Definition: topology.hpp:53
void SetState(State aState)
This method sets the current state.
Definition: topology.hpp:85
uint32_t GetLinkFrameCounter(void) const
This method gets the link frame counter value.
Definition: topology.hpp:220
void ResetIndirectMessageCount(void)
This method resets the indirect message count to zero.
Definition: topology.hpp:615
uint8_t mChallengeLength
The challenge length.
Definition: topology.hpp:342
uint32_t GetMleFrameCounter(void) const
This method gets the MLE frame counter value.
Definition: topology.hpp:236
void IncrementIndirectTxAttempts(void)
This method increments the number of indirect transmission attempts.
Definition: topology.hpp:541
bool IsIndirectSourceMatchPending(void) const
This method indicates whether or not the child needs to be added to the source match table...
Definition: topology.hpp:581
Neighbor is restored from non-volatile memory.
Definition: topology.hpp:63
bool IsReclaimDelay(void) const
This method indicates whether the reclaim delay is in effect for this router ID.
Definition: topology.hpp:780
uint16_t mRloc16
The RLOC16.
Definition: topology.hpp:337
uint8_t GetNetworkDataVersion(void) const
This method gets the network data version.
Definition: topology.hpp:427
This structure represents an IEEE 802.15.4 Extended Address.
Definition: mac_frame.hpp:84
This file includes definitions for generating and processing IEEE 802.15.4 MAC frames.
void SetIndirectFrameCounter(uint32_t aFrameCounter)
This method sets the IEEE 802.15.4 Frame Counter to use during indirect retransmissions.
Definition: topology.hpp:473
Sent an MLE Link Request message.
Definition: topology.hpp:66
void SetExtAddress(const Mac::ExtAddress &aAddress)
This method sets the Extended Address.
Definition: topology.hpp:180
This class represents a message.
Definition: message.hpp:195
uint8_t GetCost(void) const
This method get the route cost to this router.
Definition: topology.hpp:748
This file includes definitions for generating and processing MLE TLVs.
void SetDeviceMode(uint8_t aMode)
This method sets the device mode flags.
Definition: topology.hpp:118
uint8_t GetChallengeSize(void) const
This method gets the challenge size (bytes) used during attach.
Definition: topology.hpp:457
uint16_t GetIndirectFragmentOffset(void) const
This method gets the 6LoWPAN Fragment Offset to use for indirect transmissions.
Definition: topology.hpp:497
This file includes definitions for the message buffer pool and message buffers.
void SetRequestTlv(uint8_t aIndex, uint8_t aType)
This method sets the requested TLV at index aIndex.
Definition: topology.hpp:640
State GetState(void) const
This method returns the current state.
Definition: topology.hpp:77
uint16_t GetRloc16(void) const
This method gets the RLOC16 value.
Definition: topology.hpp:252
State
Neighbor link states.
Definition: topology.hpp:60
uint32_t mLinkFrameCounter
The Link Frame Counter.
Definition: topology.hpp:335
void IncrementIndirectMessageCount(void)
This method increments the indirect message count.
Definition: topology.hpp:603
uint8_t GetDeviceMode(void) const
This method gets the device mode flags.
Definition: topology.hpp:110
const uint8_t * GetChallenge(void) const
This method gets the current challenge value used during attach.
Definition: topology.hpp:449
Neighbor link is invalid.
Definition: topology.hpp:62
uint8_t GetRequestTlv(uint8_t aIndex) const
This method returns the requested TLV at index aIndex.
Definition: topology.hpp:631
This class represents a Thread Child.
Definition: topology.hpp:358
bool IsRxOnWhenIdle(void) const
This method indicates whether or not the device is rx-on-when-idle.
Definition: topology.hpp:126
bool IsSecureDataRequest(void) const
This method indicates whether or not the device uses secure IEEE 802.15.4 Data Request messages...
Definition: topology.hpp:142
This class represents a Thread Router.
Definition: topology.hpp:707
void SetDataRequestPending(bool aPending)
This method sets the indicator for whether an IEEE 802.15.4 Data Request message was received...
Definition: topology.hpp:276
Link is valid.
Definition: topology.hpp:68
bool IsDataRequestPending(void) const
This method indicates whether an IEEE 802.15.4 Data Request message was received. ...
Definition: topology.hpp:268
uint32_t GetTimeout(void) const
This method gets the child timeout.
Definition: topology.hpp:411
This file includes definitions for IPv6 packet processing.
void ResetLinkFailures(void)
This method resets the number of consecutive link failures to zero.
Definition: topology.hpp:296
uint32_t mMleFrameCounter
The MLE Frame Counter.
Definition: topology.hpp:336
void SetLastHeard(uint32_t aLastHeard)
This method sets the last heard time.
Definition: topology.hpp:212
#define OPENTHREAD_CONFIG_IP_ADDRS_PER_CHILD
The minimum number of supported IPv6 address registrations per child.
Definition: openthread-core-default-config.h:261
Mac::ExtAddress & GetExtAddress(void)
This method returns the Extended Address.
Definition: topology.hpp:164
void SetLinkFrameCounter(uint32_t aFrameCounter)
This method sets the link frame counter value.
Definition: topology.hpp:228
This file includes the platform abstraction for random number generation.
uint32_t GetIndirectFrameCounter(void) const
This method gets the IEEE 802.15.4 Frame Counter used during indirect retransmissions.
Definition: topology.hpp:465
uint8_t GetLinkQualityOut(void) const
This method gets the link quality out value for this router.
Definition: topology.hpp:732
void SetLinkQualityOut(uint8_t aLinkQuality)
This method sets the link quality out value for this router.
Definition: topology.hpp:740
void ClearIp6Addresses(void)
This method clears the IPv6 addresses for the child.
Definition: topology.hpp:371
void IncrementLinkFailures(void)
This method increments the number of consecutive link failures.
Definition: topology.hpp:290
void DecrementIndirectMessageCount(void)
This method decrements the indirect message count.
Definition: topology.hpp:609
uint8_t GetIndirectKeyId(void) const
This method gets the IEEE 802.15.4 Key ID to use for indirect retransmissions.
Definition: topology.hpp:513
void SetKeySequence(uint32_t aKeySequence)
This method sets the key sequence value.
Definition: topology.hpp:196
void SetIndirectMessage(Message *aMessage)
This method sets the message buffer to use for indirect transmissions.
Definition: topology.hpp:489
uint8_t mChallenge[Mle::ChallengeTlv::kMaxSize]
The challenge value.
Definition: topology.hpp:341
otError
This enumeration represents error codes used throughout OpenThread.
Definition: types.h:107
This file includes compile-time configuration constants for OpenThread.
void GenerateChallenge(void)
This method generates a new challenge value for MLE Link Request/Response exchanges.
Definition: topology.cpp:44
void SetIndirectSourceMatchPending(bool aPending)
This method sets whether or not the child needs to be added to the source match table.
Definition: topology.hpp:589
This class encapsulates/stores all relevant information about quality of a link, including average re...
Definition: link_quality.hpp:163
void SetAllocated(bool aAllocated)
This method sets whether or not this router ID has been allocated.
Definition: topology.hpp:772
void SetNextHop(uint8_t aRouterId)
This method sets the router ID of the next hop to this router.
Definition: topology.hpp:724
bool IsAllocated(void) const
This method indicates whether or not this router ID has been allocated.
Definition: topology.hpp:764
Received an MLE Parent Request message.
Definition: topology.hpp:64
void SetNetworkDataVersion(uint8_t aVersion)
This method sets the network data version.
Definition: topology.hpp:435