Skip to content

[Discussion] IPv6 neighbor discovery with BLE #21580

@elenaf9

Description

@elenaf9

Description

While working on #21574, I noticed that the NIB neighbor cache is always empty when running IP-over-BLE.

The reason is that:
a) RPL control messages are mostly multicast (so just copied onto every unicast link)
b) L2 addresses for unicast are directly resolved from the IP address (reverse RFC 7668 Section 3.2.2)

After some testing & digging through the code, I observed that (at least with BLE) generally no neighbor discovery from RFC 4861/ RFC 6775 is happening:

  • The only sent messages are Router Soliciations (RS), which never get a reply because the Router Advertisements (RA) are only sent if authoritative border routers are present. Nodes apparently don't need to know if other nodes are routers or not, they just use RPL DIO info for routing.
  • Neighbor Solicitation messages are only sent when trying to resolve an address, which because of b) never happens. And only then a neighbor cache entry would be created and maintained.

Still, in the docs it is stated that IP-over-BLE does support 6LoWPAN neighbor discovery:

**NOTE 2:** Currently, Linux does not support 6LoWPAN neighbor discovery (which
RIOT uses per default with BLE), so RIOT needs to be compiled to use stateless

My questions are:

  • Is my understanding above correct?
  • Why is a RA only sent if there are authoritative routers present? From a high level it kinda makes sense, especially because it is redundant with the RPL DIS/DIO messages, but neither RFC 4861 nor RFC 6775 mention anything about it.
  • Does RPL implicitly obsolete neighbor discovery?
  • Should we maintain a neighbor cache even if a node's L2 address can be resolved directly from the IP address?
    On one hand it might be be redundant because BLE is a connection-oriented link-layer where we know which nodes are reachable and which aren't. And we can perform address resolution directly based on RFC 7668 Section 3.2.2.
    On the other hand is neighbor discovery specified in both IP-over-BLE RFCs (RFC 7668 and RFC 9159)

Sorry for the many questions, I am still new to IP-over-BLE and might be missing something fundamental 😄

// cc @miri64 as author of #7479.

Motivation

As part of #21574, I need to be able to get the IPv6 address of a connected BLE node. Intuitively, this information should be present in the neighbor cache.
This kind of pushed me down the rabbit hole of trying to understand IPv6 neighbor discovery and its interplay with route-over routing protocols like RPL.

Related Issues

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions