1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
Commit Graph

232 Commits

Author SHA1 Message Date
Martine Lenders
6d1a3caa26 gnrc_ipv6_nib: fix NULL pointer dereference 2018-11-09 15:39:41 +01:00
60a6e66f77
Merge pull request #10246 from miri64/gnrc_ipv6/fix/encaps-ipv6-recursion
gnrc_ipv6: don't recurse into receive for encapsulated IPv6
2018-11-08 12:34:40 +01:00
Martine Lenders
d54ac38f84 gnrc_ipv6: don't dispatch encapsulated IPv6 headers in central function
Otherwise, an encapsulated IPv6 packet is handled twice. Once in the
central function, once in the specialized decapsulation.
2018-11-08 11:54:05 +01:00
Martine Lenders
160ccbcf7e gnrc_ipv6: don't recurse into receive for encapsulated IPv6
`_decapsulate()` is called by callees of `_receive()` so the call to
the latter function within the first creates a recursion we don't want.
Using `gnrc_netapi` instead removes that and provides the added benefit
that other subscribers to IPv6 are also informed.
2018-11-08 11:54:05 +01:00
152a9dc325
Merge pull request #10247 from miri64/ipv6_ext_rh/cleanup/central-types
ipv6_ext_rh: define type numbers at central place
2018-11-06 20:31:27 +01:00
Martine Lenders
a5c9f959b5 gnrc_ipv6: use gnrc_pktbuf_reverse_snips() 2018-10-25 23:11:33 +02:00
Martine Lenders
274371c174 ipv6_ext_rh: switch over to generic RH type define 2018-10-25 19:21:20 +02:00
Martine Lenders
6a9adf2b59 gnrc_ipv6_ext: remove unnecessary return-value indirection
Those return values are internal anyway, and they have the same intent
as the one provided by `gnrc_ipv6_ext_rh`.
2018-10-25 11:12:14 +02:00
Martine Lenders
84a62da102 gnrc_ipv6_ext_rh: rename GNRC_IPV6_EXT_RH_OK for clarity 2018-10-25 11:11:50 +02:00
Martine Lenders
c54ba49e82 gnrc_ipv6_ext: move ipv6_ext_rh (partly) to GNRC 2018-10-25 11:10:25 +02:00
Kevin "Bear Puncher" Weiss
7187bbf8cf
Merge pull request #9426 from gschorcht/esp32
ESP32 port
2018-10-16 15:24:25 +02:00
Schorcht
3ac99877ac cpu: add esp32 2018-10-08 12:20:49 +02:00
chrysn
f07308b07d gnrc: Extend gnrc_ipv6_get_header checks, use in sock recv
gnrc_sock_recv used to duplicate functionality of gnrc_ipv6_get_header,
but additionally checked whether the IPv6 snip is large enough.

All checks are now included in gnrc_ipv6_get_header, but as most of them
stem from programming / user errors, they were moved into asserts; this
constitutes an API change.
2018-09-28 19:40:59 +02:00
05b6af466c sys: add missig <string.h> includes 2018-09-20 23:47:40 +02:00
Martine Lenders
235661668d gnrc_ipv6_nib: always configure 802.15.4 long address
Our `gnrc_minimal` example configures the link-local address from the
IEEE 802.15.4 short address since it does not include 6Lo-ND.
This causes the application to be incompatible with our other GNRC
application that do include 6Lo-ND, since it [assumes][1] the link-local
address to be based on the EUI-64 for address resolution.

This enforces long addresses (aka EUI-64) for all IEEE 802.15.4 devices
when IPv6 is compiled in so `gnrc_minimal` is compatible again to the
rest.

Fixes #9910

[1]: https://tools.ietf.org/html/rfc6775#section-5.2
2018-09-10 17:08:04 +02:00
Martine Lenders
4f87883ab8 gnrc_ipv6_nib: fallback to SLAAC if ARO is ignored by upstream
Linux doesn't have ARO support at the moment so this is a workaround to
try to speak 6Lo-ND while still being able to do DAD with a border
router that doesn't.
2018-08-09 10:56:36 +02:00
Martine Lenders
9720cd857d gnrc_ipv6_nib: include SLAAC debug addr_str into #ifdef 2018-08-06 14:51:34 +02:00
Martine Lenders
bdb1e80e0a gnrc_ipv6_nib: make RS emission configurable 2018-08-06 14:51:18 +02:00
Martine Lenders
f946314837 gnrc_ipv6: refactor to remove superfluous temporary variable
Since no release in this function is required anyways, we can just use
`payload` to check the return value directly.
2018-08-02 15:20:59 +02:00
Martine Lenders
cb4f6a96a8 gnrc_ipv6: correctly reset from temporary variable
While `tmp` in the loop for write-protection for the check-sum
calculation is used to check the return value of
`gnrc_pktbuf_start_write()`, it was never overwriting `payload` causing
the original snip to be used in the following iteration `prev` when
duplicated, and destroying the sanity of `ipv6`.
2018-08-02 15:17:40 +02:00
Martine Lenders
72e9b1f623 gnrc_ipv6: remove superfluous release
The packet handed to `_fill_ipv6_hdr()` is already released in the
caller (in the current version this is only `_save_fill_ipv6_hdr()`).
2018-08-02 15:16:08 +02:00
Martine Lenders
d8081453f2 gnrc_ipv6: clean-up and simplify send handling
This change is a gnrc_ipv6_nib/gnrc_netif(2)-based rework of #7210.

Packet duplication
==================

Its main optimization is that it restructures `gnrc_ipv6` handling of
sent packets so that duplication for write-protection happens at the
latest possible step:

* potential `gnrc_netif` headers added by upper layers are
  write-protected before their removal
* This unifies the duplication of the IPv6 header directly after
  that
* Extension headers in-between the IPv6 header and the payload header
  are duplicated just before the check sum is duplicated

Especially the last point allows for only handing a single packet snip
to all lower functions instead of an already searched IPv6 header
(which now is always the first until it is handed to the interface) +
payload header.

Further clean-ups
=================
* Next-hop link-layer address determination was moved to the
  `_send_unicast` function, greatly simplifying the unicast case in the
  `_send` function
* Code for loopback case was added to a new function `_send_to_self`
* Removed some code duplication
2018-07-16 15:08:56 +02:00
Martine Lenders
1916c45dc0 gnrc_ipv6_nib_router: add support to send RDNSSO 2018-07-05 11:09:34 +02:00
Martine Lenders
6d1f012c9d gnrc_ipv6_nib: add support to handle RDNSSO 2018-07-05 11:09:34 +02:00
Martine Lenders
579d9d78d4
Merge pull request #8823 from miri64/gnrc_ipv6_nib/feat/slaac
gnrc_ipv6_nib: add full RFC4862 DAD support
2018-06-21 14:10:36 +02:00
Martine Lenders
b6ab9eb343 gnrc_ipv6_nib: use router instead of netif for router timeout context
`GNRC_IPV6_NIB_RTR_TIMEOUT` [expects a default router entry][doc] as
context, so using the `netif` here is clearly wrong. This causes the
hardfault described in #9297.

[doc]: http://doc.riot-os.org/group__net__gnrc__ipv6__nib.html#ga1c7e892ef6533f699c4e64737c2847c2
2018-06-06 11:37:51 +02:00
Martine Lenders
55adbee488 gnrc_ipv6_nib: add full RFC4862 DAD support
Parts of [RFC4862] were already implemented when NDP via the NIB was
first implemented. This change just includes the DAD portion of
[RFC4862]. This should be enough to make RIOT fully RFC4862 compliant.

[RFC4862]: https://tools.ietf.org/html/rfc4862
2018-05-31 17:11:25 +02:00
Sebastian Meiling
4f97fc76fd
Merge pull request #8894 from beduino-project/fix-gnrc_ipv6_blacklist-build
gnrc: fix build of gnrc_ipv6_blacklist when ENABLE_DEBUG is disabled
2018-04-23 14:26:53 +02:00
Martine Lenders
3be4b51209
Merge pull request #8867 from miri64/gnrc_ipv6/fix/possible-null-ptr-deref
gnrc_ipv6: fix possible NULL pointer dereference
2018-04-12 14:26:22 +02:00
d2db1ba2c3
Merge pull request #8568 from miri64/gnrc_ipv6_nib/fix/abro-ignore-only-on-6lr
gnrc_ipv6_nib: only discard RAs without ABROs on 6LR
2018-04-11 22:32:33 +02:00
Sören Tempel
93f65043ce gnrc: fix build of gnrc_ipv6_blacklist when ENABLE_DEBUG is disabled
Without this commit it doesn't build because addr_str isn't defined when
ENABLE_DEBUG is not set.

This issue was introduced in: c001e14f9d
2018-04-06 14:48:32 +02:00
Robin Nehls
ad5617fb83 gnrc_ipv6: discard non-NONXT packets with 0 payload length
If the payload length is zero and the next header field is not set to
NONXT, GNRC will interpret the current header as the payload because the
first snip is always interpreted as the payload. This can lead to loops
and or crashes.
2018-04-03 18:34:48 +02:00
Robin Nehls
326be16b90 gnrc_ipv6: fix possible NULL pointer dereference
When the payload length of an encapsulated IPv6 packet is 0, the
`_receive` function of IPv6 can be given a NULL pointer, causing the
IPv6 header checker to crash because of a NULL pointer dereference.
2018-04-03 14:46:12 +02:00
Martine Lenders
e11550042c gnrc_ipv6_nib_6ln: only register addresses not VALID yet
With the previous fix, we only have to register addresses that are not
VALID yet on reception of router advertisements. This removes the need
for the hacky `GNRC_NETIF_FLAGS_6LO_ADDRS_REG` flag that was only
introduced to prevent unnecessary re-registration.
2018-02-19 14:39:29 +01:00
Martine Lenders
8c8b6f9494 gnrc_ipv6_nib_6ln: do not mark non-link-local directly VALID
The whole address registration looses its point if all addresses are
marked valid from the get-go. With this fix non-link-local addresses
are first marked TENTATIVE and only after successful registration
marked as VALID. Link-local addresses are assumed to always be VALID.
2018-02-19 14:38:27 +01:00
Martine Lenders
3a8695bd0c gnrc_ipv6_nib: only discard RAs without ABROs on 6LR
[RFC6775] only talks of *routers* processing router advertisements,
with regards of discarding them if they do not contain an ABRO.

Additionally, this change makes configuration of tests setups a lot
easier, where one note is a router distributing a prefix and the other
is a host to be configured with the RA. Just do the following on the
router:

```
> ifconfig <if> add <GUA>
> ifconfig <if> rtr_adv
```

e voilà! In current master both nodes would have needed to be compiled
with `GNRC_IPV6_NIB_CONF_MULTIHOP_P6C=0`.

[RFC6775]: https://tools.ietf.org/html/rfc6775#section-8.1.3
2018-02-15 14:40:33 +01:00
smlng
c2b403f4ad gnrc/netreg: remove usages of gnrc_netreg_num 2018-02-06 21:39:58 +01:00
Martine Lenders
c40a05b6a8 gnrc: fix link-layer/IPv6 address conversion for XBee 2018-01-31 10:54:28 +01:00
Martine Lenders
8e80a372cb gnrc_ipv6_nib: ignore corner case when adding to PL
In #8135 the handling of corner cases for the conversion of
milliseconds to seconds, but the internal handling was not adapted.
2018-01-30 12:28:50 +01:00
Martine Lenders
763b887017 gnrc_ipv6_nib: release packages for forwarding error cases 2018-01-26 17:35:57 +01:00
Martine Lenders
70c1fb7b4e gnrc_ipv6_nib: fix final RA behavior
This fix

* assures that the periodicity of the final router advertisements is
  kept (so that no administrative change e.g. adding prefixes to the
  prefix list causes additional RAs outside the rate limitation)
* removes all administrative options (PIO, ABRO, 6CO) from final router
  advertisements (with router lifetime == 0)
2018-01-26 13:57:19 +01:00
Martine Lenders
6cabac3600 gnrc_ipv6_nib: add reverse-translation for NRFmin 2018-01-22 16:15:30 +01:00
d27fa8efa5
Merge pull request #8214 from miri64/gnrc_ipv6/enh/simplify-netif-access
gnrc_ipv6: gnrc_icmpv6: simplify access to network interfaces
2018-01-17 17:02:55 +01:00
Martine Lenders
7c0bb427fa gnrc_ipv6: gnrc_icmpv6: simplify access to network interfaces 2018-01-17 16:48:58 +01:00
12d4254ae1 gnrc: nib: DEBUG fix 2018-01-15 14:37:05 +01:00
4dba9ee6ba sys: net: adapt to compile-checked debug messages 2018-01-15 14:37:04 +01:00
Martine Lenders
4013adcf65
Merge pull request #8277 from miri64/doc/fix/must-not-may-not-wording
doc: Fix 'must not'/'may not' wording
2018-01-10 20:34:17 +01:00
Martine Lenders
cee9a9c173 gnrc_ipv6_nib: fix nrfmin module check
The module is called `nrfmin` not `netdev_nrfmin`. As such this compile
path was never included, even if the `nrfmin` module was present.
2018-01-05 10:40:25 +01:00
17ac0fa3a7
Merge pull request #8101 from miri64/gnrc_netif2/opt/flag-checkers
gnrc_netif: assume flag settings on compile time
2017-12-19 12:10:25 +01:00
Martine Lenders
7b5a42ba58
gnrc_netif: assume flag settings on compile time 2017-12-19 12:04:36 +01:00