So my question is, if it's available mesh networking and in the positive case, how it's possible to use it?
I was exploring a little how it was implemented the 6lowpan protocol in NuttX and I saw that it's a port of Contiki OS. So, I'm investigating it and I saw that that OS have support for mesh networking with multi hopping over IpV6.So maybe it's a good idea try to port it from Contiky.
Looking at the Contiki code. I think this is the key stuff
https://github.com/contiki-os/contiki/blob/master/core/net/rime/mesh.h
https://github.com/contiki-os/contiki/blob/master/core/net/rime/mesh.c
It also seems pretty intangled with a routing table:
https://github.com/contiki-os/contiki/blob/master/core/net/rime/route.c
https://github.com/contiki-os/contiki/blob/master/core/net/rime/route.h
This mesh implementation appears light when it comes to mesh maintenance. In a real world application with drones or robots, endpoints would be appearing and disappearing routes need to change dramatically. They will break and need to heal frequently. You also need to pick the best route and avoid loops when multiple routes are available. To do this right usually involves very creative, patent-able algorithms.
I have actually had reasonable success using Thread as a 15.4 routed mesh, but if you have things going on/offline a lot the rebuilding of route tables starts to take a tole
I have not used Thread with Nuttx, so I cannot comment on how that would all fit together, but it does not look like it would be too complicated to actually build this as an application library.I think everything is already done on the OS to support the radio interfaces:
Hi, Brennan,I have actually had reasonable success using Thread as a 15.4 routed mesh, but if you have things going on/offline a lot the rebuilding of route tables starts to take a tole
Interesting. There is a lot of information at that site, but difficult to get simple facts. You have to provide personal information even to read the license.
The is proprietary product, right? I do see reference to a RAND RF (Royalty Free) license which sounds like a proprietary agreement.
I have not used Thread with Nuttx, so I cannot comment on how that would all fit together, but it does not look like it would be too complicated to actually build this as an application library.I think everything is already done on the OS to support the radio interfaces:
The diagrams show the product as a part of the stack, replacing UDP, IP routing, and 6LoWPAN layers, built on top of the IEEE 802.15.4 MAC/PHY link layer.
In fact, the diagram would look the same as the NuttX stack if you were replace the name Thread with NuttX. Other more detailed diagrams show UDB + dTLS and a security component to the IP forwarding and possible some protocol extensions in the IP forwarding layer.
Although the list of APIs looks innocuous, the diagrams look more invasive. I would propose that an initial NuttX implementation would:
- Focus less on security, Defer security to the application level (although that sounds like "famous last words").
- Leave the NuttX UDP, IP forwarding, and 6LoWPAN generally intact
- Perhaps extend the routing table information. There is sufficient information the current routing table to support one hop and this is used in the currently supported Star configuration to get from one starpoint to another. I am not sure what else would need to be extended. It is sufficient to support the first hop in a multi hop forwarding process. The first hop destination would have to make the same determination for the next hop. I am not sure how we avoid loops in this case so I keep the door open for extended routing table information.
- Any extensions to routing table content might ripple to IP forwarding changes.
- I assume that some logic outside of the OS knows all about mesh routes and manages the single hop / first hop routing table appropriately.
- The custom discovery logic would use AF_IEEE802154 raw sockets to implement the custom protocol. This would result in changes to the appliation routing database and updates to the IP forwarding routing table.
That is far from a design but does represent a first though on functional partitioning, at least from my point of view. Since this is not an area where I have any expertise, I accept I might have misconceived several things. Certainly that is more wishful thinking that anything cast in stone.
Greg
Very thin shims to get some configuration data from 802.15.4 about rssi, and mac addressing. Then they just pass around IPv6 packets.
I must be missing something because that is exactly my understanding of how this is working. L2 is just implemented in userspace, that does not violate the POSIX boundary.
Well I think, that I will try to port it, but at the moment it's not totally necessary for the project that I'm doing so I will do with some calm.