-
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_ipv6_nib: fix config for mixed 6lo/classic setup #20167
Conversation
Which optimizations are you referring to exactly? |
[1] those are still disabled for the 6lo interface, but previously when |
a85c5c3
to
fa1f60f
Compare
@@ -172,6 +172,14 @@ ifneq (,$(filter gnrc_netif_bus,$(USEMODULE))) | |||
USEMODULE += core_msg_bus | |||
endif | |||
|
|||
ifneq (,$(filter netdev_eth slipdev, $(USEMODULE))) |
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.
Would that cover esp32 or is the esp32 using its own IP implementation anyway?
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.
Both esp_wifi
and esp_eth
select netdev_eth
.
esp_now
is a 6lo interface.
And ESP32 does use our GNRC stack or LWIP, just like everyone else.
When building for a 6lo-only board (e.g., nrf52840) ideally nothing should change, right? However, I get 12 additional bytes in ROM compared to the state before this PR. I haven't really figured out where. Edit: Maybe that's just an issue with the size command. cosy isn't showing any differences. |
Contribution description
When mixing 6lo interfaces with 'classic' IPv6 interfaces we would always see strange behavior in RIOT. E.g. if we enable
gnrc_ipv6_default
together with an Ethernet interface and a IEEE 802.15.4 interface, the node would get a global address on the Ethernet interface but seemingly can't be reached via that address. (After manually enablingCONFIG_GNRC_IPV6_NIB_SLAAC
andCONFIG_GNRC_IPV6_NIB_ARSM
)This is because the 6lo optimizations would always get turned on globally when the
gnrc_ipv6_nib_6ln
module is in use, disregarding what other interfaces might be present.In this case the
CONFIG_GNRC_IPV6_NIB_NUMOF
would get set to 1, leading to no space being left for any neighbor's address, other than the default router, so address resolution would always fail.Fix this by introducing a pseudo-module
gnrc_ipv6_classic
that gets selected by non-6lo interfaces. Now we can only enable the 6lo optimizations when there are no 'classic' interfaces present.Testing procedure
In
examples/gnrc_networking
replacegnrc_ipv6_router_default
withgnrc_ipv6_default
(or don't, it's just most apparent with that), then addUSEMODULE += netdev_tap
and build and run withUSE_ZEP=1
.master
let's manually enable SLAAC and ARSM…
But still no success:
this PR
Issues/PRs references