-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gnrc_netif: introduce distinction if an interface supports 6Lo or if it performs ND according to RFC 6775 #10499
Conversation
6ecd8de
to
998663b
Compare
Rebased to current master. |
9188065
to
7e63565
Compare
Rebased and adapted to current master. |
With the changes, address assignments neither work for boarder routers nor for other nodes (routers and nodes). If I'm right, non-6Lo-ND nodes should use classic DAD instead of 6Lo-ND. That is, they are sending an NS with their own address instead of the router address. It also doesn't work with The problem seems to be that RIOT/sys/net/gnrc/netif/gnrc_netif.c Lines 630 to 639 in 7e63565
RIOT/sys/net/gnrc/network_layer/ipv6/nib/nib.c Lines 114 to 117 in 7e63565
ieee802154[cc110x, cc2420, ...], nrfmin, esp_now ) is compiled with module gnrc_sixlowpan_default and uses module gnrc_ipv6_nib_6ln due to the dependencies.
|
I'll have a look if this is true for IEEE 802.15.4 also. |
Ah sorry, I overlooked your last paragraph. |
@gschorcht Thanks for the analysis. d8ced2e should fix that. |
I will try. |
/* intentionally falls through */ | ||
} | ||
case NETDEV_TYPE_BLE: | ||
case NETDEV_TYPE_NRFMIN: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gschorcht note that I intentionally left out NETDEV_TYPE_ESP_NOW
here for now. After reading your comments in #10524: should I add it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ping? Hope this didn't get lost.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(though I moved the function now)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm still rolling through the changes and discussions. I'm a bit slower than you 😉
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm still rolling through the changes and discussions. I'm a bit slower than you
In some cases this could be better (see all my "oops"s and "argh"s ;-D)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok for the moment. Once #10723 is solved, there should be be no reason why ESP-NOW nodes shouldn't talk 6Lo-ND. It worked in the tests with the workaround as expected.
There might be another reason why ESP-NOW nodes are different, the RSSI. It is not possible to extract the RSSI for a single message. RSSI is only measured during the scan-for-peers phase every 10 s. On the other hand, I did not find any place in the source code, where RSSI or LQI are used for routing or something like that.;
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There might be another reason why ESP-NOW nodes are different, the RSSI. It is not possible to extract the RSSI for a single message. RSSI is only measured during the scan-for-peers phase every 10 s. On the other hand, I did not find any place in the source code, where RSSI or LQI are used for routing or something like that.;
Yupp, neither RSSI nor LQI are of interest for neighbor discovery, just for routing protocols (but AFAIK we don't use it as a metric for RPL at the moment).
@miri64 I changed it locally and have already tested it. Address assignment with global routing prefix from RAs works now, at least for nodes that are able to receive the RAs from the border router. Following remarks:
Maybe it would be possible to define a pseudomodule for multihop prefix or 6Lo-ND and to tune the dependencies a bit that the following setting are done automatically if the nodes are non 6Lo-ND nodes.
|
If they are a 6LN (so a 6Lo node according to RFC 6775 -- the RFC defining 6Lo-ND) they must use 6Lo-ND of course. This is what this PR is for to distinct: 6LNs (i.e. nodes that use 6Lo-ND) vs 6Lo-operating nodes (i.e. nodes that use the 6Lo adaptation layer). |
If you are a non-6Lo-ND node why would you pull in 6Lo-ND dependencies anyway? Or are you referring to |
(I moved the new 6LN-flag initialization to |
That's clear. I was just wondering whether it is possible to propagate a prefix over the whole mesh, if the nodes are only 6LO (6Lo-operation nodes 😉). More precisely, do 6LO router nodes react on a RS with a RA event though their |
Not in classic NDP. But I would suggest to use RPL for prefix dissemination then. |
If it does the same, then everything is fine. |
Yep, it also disseminated prefixes (but in addition provides routes as it is a routing protocol). |
5f53e73
to
c93b302
Compare
Rebased and added the |
Ok, just retested if my claim in #12512 is true
sadly this isn't the case, as the Ethernet interface's link-local address still never becomes valid. Will make a mental note about that to investigate ASAP. |
Ah... it's because SLAAC is not compiled as I didn't compile it as a border router and thus this config path is chosen :-/ RIOT/sys/include/net/gnrc/ipv6/nib/conf.h Lines 41 to 48 in d9c240a
However, it's pretty mean that the address is assigned but never set to valid, without any DAD being run. I'll make a separate PR to fix that. |
See #12513 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The code looks reasonable.
I only did basic testing with two 802.15.4 nodes where everything behaved as before, but I trust your and @gschorcht's testing for the rest of the cases.
Mhhhh in both cases the testing was done almost a year ago (I'm not even sure what of the listed tests above I was able to do myself)... Let me repeat at least some of them before we merge. |
Sorry that I'm jumping in so late. The winter term started last week and there were a lot of other open action items and discussions. How could I help with testing? I reviewed the code some time ago #10499 (review). It has been a long time since we discussed this distinction and I do not remember all the details. ESP's As I remember, even if |
As far as I remember that is what it was, yes. The easiest way to test this case if without |
For the regression testing I transformed the list in the Testing Procedures into a tick-list. |
(the compile tests were done by Murdock already ;-)) |
Re-tested all the regression tests: no regression found. |
Contribution description
This splits the semantic of
gnrc_netif_is_6ln()
into two check functions:It also fixes some logical inconclusions (check if interface is 6Lo when 6Lo is not compiled in wtf?) for the compile-time optimizations of those functions.
Testing procedure
It should be checked:
examples/gcoap
on native)examples/gnrc_networking
on native)examples/gcoap
onsamr21-xpro
)examples/gcoap
onsamr21-xpro
)::
should be sent, when a packet is sent a NS for address resolution should be sentIssues/PRs references
None