When there are holes in the NIB (e.g. when entries were removed)
currently the NIB crashes the system due to a failed assertion
(`DEVELHELP` needs to be activated to test this behavior).
This fixes this behavior by making the assertion a check that is always
compiled in.
In the case that GNRC_IPV6_NIB_CONF_ARSM is set but
GNRC_IPV6_NIB_CONF_6LN is not, clang complains about
the function _get_l2addr_from_ipv6 never being used.
I couldn't easily figure out why this passes in Murdock,
but I'm guessing that clang is simply being smarter than
GCC. Can someone comment on whether there is a better fix
for this?
Relates to #6473
_is_reachable is only used when GNRC_IPV6_NIB_CONF_ARSM
is enabled, and as such it must be guarded so that clang
doesn't complain about a unused function in case
GNRC_IPV6_NIB_CONF_ARSM is not set
Similar to #7910
Relates to 6473
Since gcc-7 `Wimplicit-fallthrough` is activated by using `-Wextra`.
This leads to the following problem when compiling `gnrc_networking`:
```
RIOT/sys/net/gnrc/network_layer/ndp/internal/gnrc_ndp_internal.c: In function ‘gnrc_ndp_internal_set_state’:
RIOT/sys/net/gnrc/network_layer/ndp/internal/gnrc_ndp_internal.c:106:15: error: this statement may fall through [-Werror=implicit-fallthrough=]
t = ipv6_iface->reach_time;
~~^~~~~~~~~~~~~~~~~~~~~~~~
RIOT/sys/net/gnrc/network_layer/ndp/internal/gnrc_ndp_internal.c:109:9: note: here
case GNRC_IPV6_NC_STATE_DELAY:
^~~~
```
The fall-through in this code is intentional. There are several ways to
warn the comiler about such intentional fall-throughs, which include
e.g. attributed empty statements (`__attribute__ ((fallthrough));`).
I don't like tis approach however. The best way would probably be to
remove this fall-through from the code. However, to keep the diff
minimal, and since ndp will change in the future, I went for warning
the compiler using comments.
The compiler checks comments for several *fall through* regexs to
decide whether a fallthrough was intentional or not.
You can read more about this gcc option in [1]. A note about
fallthrough comment regexs is at the bottom of this article.
[1] https://developers.redhat.com/blog/2017/03/10/wimplicit-fallthrough-in-gcc-7/
Summary:
Even ehen COMP is cleared, the algorithm always elides part of the address when a matching
context is found.
This behviour occurs because in the line
if ((src_ctx != NULL) || ipv6_addr_is_link_local(&(ipv6_hdr->src)))
the COMP bit is not tested.
This patch fixes the problem by setting [src|dst]_ctx to NULL if the
context must not be used.