I have used the EM35x kit with Border Router for thread for a while. Even thought the applications examples have been successfully run, including server/client scenario and border router/sensor scenario, some questions came up to me and I could not find any relative documentation which is limited.
In the sever/client scenario
1) When the client application was executed, it seemed that some networks existed on differents channels responding the beacon requests from client . Why such networks appear even though no application forms any network? Are they just for the purpose of showing how is the discovery process of joiner by simulating the situation with certain networks?
Does the client application creat the networks? But I could not find such process in the client-implementation.c.
2)I recognized that EUI64 address of Client after having joined to the Thread network is different from the original EUI64 address. As it is mentioned in UG10311, that is for the security concern. As a consequence, the IID of ULA and EUI64 of client are randomized. But why the EUI64 address of Client has been changed for 2 times? Just after the DTLS handshake between Server and Client, the decryption failure occurred.
Is that a normal issue during the joining process of client? Or that is the moment when it is designed to change EUI64 address?
3) What does the XPANID represent for in the CoAP Ack message responding the CoAP POST a/as message just after the MLE child id request and response?
I found that the 16 bit short address of Client has been changed into 0400 while the original one is 0001 after CoAP ack message with XPANID.
4) What are the purposes of CoAP POST /a/as, /a/aq, /a/an messages? Are they used for the network configuration of Client such as ULA prefix? Is that the ULA prefix distributed by Server sending CoAP /a/an message?
In border router/sensor scenario
Why the border router has 3 different link local addresses and 2 global addresses? what are they used for? Is the GUA or GUA prefix of sensor distributed by border router? And the ULA and LLA of client are created by itself?
I have been searching for the response for a while. Your help will be very helpful!
Thank you very much in advance!
1. The client will send out Beacon Requests on a set number of channels. I guess you are seeing responses from some other networks or some other type of noise that is similar to a beacon response. The client application does not create networks.
2. The error is not due to the EUI64 change but due to our decoder not having the proper decryption key. Network Analyzer will collect the key during the joining process and after that it should be fine. I would not worry about this unless you are unable to decrypt any packets.
3. Extended PAN ID (XPANID) is a random value used to identify 802.15.4 beacons. It is used to steer out-of-band commissioned nodes to the correct network. To answer your second part, the node that has just joined, first gets a Child ID, which is always in the lower set of bits (ie 0x0001). It then requests to get a Router ID from the Leader which is in the upper bits (ie 0x0400).
4. As found in the Thread 1.0 Spec.
/a/as is for Address Solicit Request. It deals with node IDs.
/a/aq is for Address Query Request. This request is used for EID-to-RLOC (Endpoint ID to Routing Locator) mapping.
/a/an is for Address Notification Message. This is in response to the Address Query Request
5. Global Addresses are unique addresses that can be reached externally to the Thread Network. The Silicon Labs Border Router has one for talking off-mesh to a web server, and one talking to nodes on-mesh. The node should also have 2 Mesh Local Addresses (an RLOC as mentioned before and a Mesh-local EID) and a Link Local Address (for nodes within one hop).
Thanks for your reply. I have not noticed it before. But some question still confuse me.
3- I think we are not talking about the same XPANID. The one you mentioned that we can get by entering “info” command in the console of Network Analyzer may be different from the XPANID field of CoAP POST /a/as message. Because the XPANID in /a/as message seems not a random number which will be the Router ID of Joiner. In this case, is that XPANID maybe the Router ID allocated to Joiner by Leader?
So that’s to say, for the short ID allocation, the first step is that Joiner is allocated a temporary short address as a child of the Parent router acting a joiner router; after the link establishment between the joiner and joiner router, then the second step is to determine if the joiner participates in the network as a router or sleepy end device according Receiver On When Idle value of Mode field of MLE Parent Request from Joiner. If Joiner is a router, then it will request to get a Router ID. That is what I have understood. Am I right or there is some mistake?
5- I still have some questions about the address allocation and the usage.
There are 5 addresses of Thread interface of Border Router:
The Border Router has six IPv6 addresses of the Thread interface
I can ping from nodes to the addresses of 1) 4) 5) of Border Router. But what do the 2) 3) and 6) use for? Is the web server you have talked about launched in the RPi?
For the address allocation, I have noticed that the GUA prefix is set to aaaa in the app of Border Router and Sensor. But how are the GUA created? Are the GUA of Sensor are allocated by SLAAC server of Border Router? What about the GUA of Border Router?
Also in the Server/Client scenario, how are the Server’s and Client’s local addresses of beginning with fd01 and fe80 created?
By the way, I have succeeded in pinging from PC externally to nodes of the Thread network. But we do have to manually configure the networking parameters to make it work. According to Thread technology, does the network establish itself that we can directly communicate with nodes outside thread network via IPv6?
I hope that somebody can help me with these questions:
1- If a node joins a Thread network as a Router, it will send CoAP /a/as message to Leader for a RLOC; if it is a sleepy end device, it just keeps the short address allocated by Parent Route. Am I right about what I understood?
2- In the Server/Client scenario, when I try to add another client or the sleep client in the network, they will choose the server or client as their Parent Router to send the DTLS handshake request. My question how do they choose their Parent Router. What does it depend on?
3- In the Border Router/Sensor scenario, the Border Router has six IPv6 addresses of the Thread interface:
I can ping from nodes to the addresses of 1) 4) 5) of Border Router. But what do the 2) 3) and 6) use for?
For the address allocation, how are the addresses of Border Router created? Is the border router application request SLAAC or other methods?
4- In the Border Router/Sensor scenario, when Border Router joins in the network, it sends a CoAP /c/lp, /c/la and /n/sd message to Leader, what are their usage?
Thank you so much!