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

852 Commits

Author SHA1 Message Date
Jan Romann
4384795cb9
treewide: Remove excessive newlines 2021-08-13 19:50:38 +02:00
Martine Lenders
f2f6700865
Merge pull request #16228 from JKRhb/dhcp-ia-na
sys/net/dhcpv6: Add IA_NA support to the DHCPv6 client
2021-08-11 20:50:01 +02:00
Jan Romann
234a71870a
sys/net/dhcpv6: Add IA_NA implementation 2021-08-11 19:15:35 +02:00
Martine Lenders
de3e5f964a
Merge pull request #16671 from benpicco/gnrc/nib-_nib_onl_get-fix
gnrc/nib: gnrc_ipv6_nib_get_next_hop_l2addr(): only assume neighbor cache entries to always be on-link
2021-08-11 12:17:38 +02:00
Martine Lenders
c86bd7454c
Merge pull request #16557 from benpicco/gnrc_ipv6_nib-fib_on-link
gnrc_ipv6_nib: consider largest prefix match when deciding if host on-link
2021-08-09 18:53:40 +02:00
Benjamin Valentin
452500b3eb gnrc_ipv6_nib: consider largest prefix match when deciding if host on-link
If the fib contains a route to a subnet via another host, it can not
be on-link.

Consider fib entries when deciding whether an address is on-link.
If a route via another host is a stronger match than an on-link
prefix, the address must be off-link.
2021-08-09 16:57:14 +02:00
Martine Lenders
8492bd7b12
Merge pull request #16568 from benpicco/gnrc_ipv6_nib-rio
gnrc_ipv6_nib: handle route information option and add config to add to final RAs
2021-08-03 15:44:01 +02:00
Benjamin Valentin
71ae768e56 net/gnrc/ipv6/nib: add option to include RIO with final RA
Sending a RA with ltime = 0 does not get us added to the default router
list, but the options (and therefore the RIO) are still parsed.

This even appears to work with Linux as a receiver.
2021-08-02 21:44:55 +02:00
Benjamin Valentin
62308d200c gnrc_ipv6_nib: don't stop sending router solicitations on last RA
When the default router was removed or could not be added, `dr` will
be NULL.

In this case, don't cease sending router solicitations - we still don't
have a default router.
2021-07-26 23:56:53 +02:00
Benjamin Valentin
12a0d481dc gnrc_ipv6_nib: handle route information option 2021-07-22 15:54:46 +02:00
Benjamin Valentin
5ad58b152a gnrc_ipv6_nib: make use of _nib_onl_nc_get() 2021-07-22 13:37:12 +02:00
Benjamin Valentin
c189ed5d1b gnrc_ipv6_nib: add _nib_onl_nc_get() 2021-07-22 13:37:11 +02:00
Benjamin Valentin
11e9b7c08f gnrc_ipv6_nib: only consider NC in gnrc_ipv6_nib_get_next_hop_l2addr()
Consider the following: A node tries to forward a packet to another
host for which it does not know the route yet. It assumes it to be
on-link and starts a neighbor solicitation, putting the node address
in the destinatio cache.

Later the route is known (via a second hop) but the host is still in
the NIB.

The result is that gnrc_ipv6_nib_get_next_hop_l2addr() ends up in the
"nib: %s is in NC or on-link, start address resolution" case and does
not attempt to resolve the route.

This results in the host remaining unreachable even though now a route
is present.
2021-07-22 13:36:53 +02:00
Benjamin Valentin
ac0b36384f gnrc_ipv6_nib: improve debug output 2021-07-22 13:18:55 +02:00
Martine Lenders
c5a1012695
Merge pull request #16596 from JKRhb/aac-flags
sys/net/gnrc/netif: Make aac_mode a flag field
2021-06-30 13:29:44 +02:00
Jan Romann
672a86d58e
sys/net/gnrc/netif: Make aac_mode a flag field 2021-06-29 19:06:22 +02:00
Martine Lenders
23fef51cae
Merge pull request #16569 from benpicco/gnrc_ipv6_nib-all_ifs
gnrc_ipv6_nib: consider all local interfaces when looking for address
2021-06-22 16:01:52 +02:00
Benjamin Valentin
8871b929ab gnrc_ipv6_nib: consider all local interfaces when looking for address
If a node has two interfaces A with 2001:16b8:45b5:9af8:5884:3bff:fe4f:a903
and B with 2001:16b8:45b5:9afa:5884:3bff:fe4f:a902 and receives a neighbor
solicitation on A for an address configured on interface B, answer the neighbor
solicitation instead of bailing out with

> Target address 2001:16b8:45b5:9afa:5884:3bff:fe4f:a902 is not assigned
> to the local interface
2021-06-22 15:05:09 +02:00
Benjamin Valentin
68afd9d900 gnrc_ndp: add route information option 2021-06-18 00:13:08 +02:00
Benjamin Valentin
f5d5ff3794 gnrc/nib: honor CONFIG_GNRC_IPV6_NIB_ADV_ROUTER option
This option was unused before, honor it to make it possible to start
with router advertisements disabled and enable them at run time.

The defaults remain unchanged by that.
2021-06-17 18:45:38 +02:00
Benjamin Valentin
e74ba8f92d gnrc/nib: don't define _set_rtr_adv() twice
It's already defined in `_nib-router.h`, defining it to no-op
in `_nib-6lr.h` makes it impossible to run-time enable advertisements
on non 6lo nodes.
2021-06-17 18:45:38 +02:00
Benjamin Valentin
ae4165b374 gnrc_ipv6_nib: get node from proper interface
If we switch the interface in gnrc_ipv6_nib_get_next_hop_l2addr()
we must also re-get the nib entry from the 'proper' interface.
Otherwise we will always find the host unreachable on the 'wrong'
interface.
2021-06-14 16:56:15 +02:00
Benjamin Valentin
d2b6f79143 gnrc_ipv6_nib: consider all prefixes when deciding on-link next hop
Consider the following configuration:

    nib prefix
    2001:16b8:4569:88fc::/62 dev #7  expires 7081 sec deprecates 3481 sec
    2001:16b8:4569:88fe::/63 dev #6

If `_on_link()` stops at the first match, a packet received from #7 with a
destination in the downstream subnet in #6 would always be sent back via #7
if this happens to be the first entry in the list.

Instead, consider all prefixes and return the one that is the closest match.
2021-06-07 12:58:42 +02:00
Martine Lenders
4b4eaf3b76
gnrc_ipv6_nib: fix acquire race on gnrc_ipv6_nib_get_next_hop_l2addr()
When two threads use `gnrc_ipv6_nib_get_next_hop_l2addr()` to determine
a next hop (e.g. when there is both an IPv6 sender and a 6LoWPAN
fragment forwarder), a race condition may happen, where one thread
acquires the NIB and the other acquires the network interface resulting
in a deadlock. By releasing the NIB (if acquired) before trying to
acquire the network interface and re-acquiring the NIB after the network
interface is acquired, this is fixed.
2021-05-05 17:48:24 +02:00
Hauke Petersen
75dbf65256 net/gnrc/sixlowpan/ctx: use ztimer if available 2021-04-16 11:38:54 +02:00
Marian Buschsieweke
7cfedbfb8a
sys/net/gnrc: fix logic bug in gnrc_tx_sync implementation
In case of an error, the tx sync packet snip could previously have been
released twice. This moves re-attaching the tx sync snip down after the
last `goto error` to avoid this.
2021-02-24 21:22:25 +01:00
Marian Buschsieweke
89c69c5450
sys/net/gnrc/tx_sync: new module
The new `gnrc_tx_sync` module allows users of the GNRC network stack to
synchronize with the actual transmission of outgoing packets. This is directly
integrated into gnrc_sock. Hence, if `gnrc_tx_sync` is used, calls to e.g.
sock_udp_send() will block until the network stack has processed the message.

Use cases:
1. Prevent packet drop when sending at high rate
    - If the application is sending faster than the stack can handle, the
      message queues will overflow and outgoing packets are lost
2. Passing auxiliary data about the transmission back the stack
    - When e.g. the number of required retransmissions, the transmission time
      stamp, etc. should be made available to a user of an UDP sock, a
      synchronization mechanism is needed
3. Simpler error reporting without footguns
    - The current approach of using `core/msg` for passing up error messages is
      difficult to use if other message come in. Currently, gnrc_sock is
      busy-waiting and fetching messages from the message queue until the number
      of expected status reports is received. It will enqueue all
      non-status-report messages again at the end of the queue. This has
      multiple issues:
        - Busy waiting is especially in lower power scenarios with time slotted
          MAC protocols harmful, as the CPU will remain active and consume
          power even though the it could sleep until the TX slot is reached
        - The status reports from the network stack are send to the user thread
          blocking. If the message queue of the user thread is full, the network
          stack would block until the user stack can fetch the messages. If
          another higher priority thread would start sending a message, it
          would busy wait for its status reports to completely come in. Hence,
          the first thread doesn't get CPU time to fetch messages and unblock
          the network stack. As a result, the system would lock up completely.
    - Just adding the error/status code to the gnrc_tx_sync_t would preallocate
      and reserve memory for the error reporting. That way gnrc_sock does not
      need to search through the message queue for status reports and the
      network stack does not need to block for the user thread fetching it.
2021-02-03 15:16:42 +01:00
Martine S. Lenders
e980405cbc
gnrc_sixlowpan_frag_sfr: provide statistics sub-module 2020-12-14 13:00:37 +01:00
Martine S. Lenders
1cd1716280
gnrc_sixlowpan_frag: initial import of Selective Fragment Recovery 2020-12-14 13:00:36 +01:00
Martine S. Lenders
ec436e99d9
gnrc_sixlowpan_frag_rb: add handling for RFRAG packets 2020-12-14 10:17:57 +01:00
Martine S. Lenders
d393008b9f
gnrc_sixlowpan_frag_rb: externalize get_by_tag function 2020-12-14 09:30:04 +01:00
Martine S. Lenders
bd300a3cc0
gnrc_sixlowpan_frag_rb: add check function for empty interval pool 2020-12-14 09:30:04 +01:00
Martine S. Lenders
27f4939211
gnrc_sixlowpan_frag_vrb: add reverse look-up
To label switch ACKs for fragments back to the originator, a reverse
look-up in the VRB is required.
2020-12-14 09:00:25 +01:00
Benjamin Valentin
120b1485e0 gnrc_ipv6_nib: prevent NULL pointer dereference on nib exhaustion
If the NIB is full, `_nib_onl_get()` returns NULL.
`_reg_addr_upstream()` will then dereference the result without if
it is valid.
2020-12-08 20:41:06 +01:00
benpicco
b18cbd8c2a
Merge pull request #11068 from miri64/gnrc_sixlowpan_frag/new/minfwd
gnrc_sixlowpan_frag: initial import of minimal forwarding
2020-12-01 18:55:51 +01:00
Martine Lenders
27e123608f
gnrc_sixlowpan_iphc: forward received fragments 2020-12-01 16:25:30 +01:00
Martine Lenders
d9be79b266
gnrc_sixlowpan_iphc/minfwd: put only IPHC dispatch in first fragment
This is only the case when minfwd is compiled in.
2020-12-01 16:25:29 +01:00
Martine Lenders
7fe07e35a3
gnrc_sixlowpan_frag_rb: add VRB and use minfwd handling
When a VRB entry exists use minfwd to forward.

When a route exist for the first fragment received in reassembly create
a virtual reassembly buffer entry.
2020-12-01 16:25:29 +01:00
Martine Lenders
df1171a069
gnrc_sixlowpan_frag_rb: make rbuf pointer generic 2020-12-01 16:25:29 +01:00
Martine Lenders
4ce2d01cb9
gnrc_sixlowpan_frag: initial import of minimal forwarding
See https://tools.ietf.org/html/draft-ietf-6lo-minimal-fragment-04
2020-12-01 15:08:08 +01:00
Martine Lenders
3295c833ca
gnrc_ipv6_ext_frag: propagate error up the stack on _snd_buf_free() 2020-12-01 11:32:18 +01:00
Martine Lenders
6303d962a3
gnrc_ipv6_ext_frag: check return value of msg_try_send() 2020-11-30 15:31:59 +01:00
1d5e2e9cd9 all: remove traces of kernel_types.h
Automatically removed using:

    $ git grep -l kernel_types | xargs sed -i '/^#include .kernel_types/d'
2020-11-25 17:52:34 +01:00
0b801c4de0 all: adapt to moved sched defines 2020-11-23 16:56:34 +01:00
Bas Stottelaar
a76cb4ea2f sys/*: ENABLE_DEBUG not needed for inttypes.h 2020-11-02 21:49:39 +01:00
Bas Stottelaar
28ae0c97cd sys/*: use DEBUG_EXTRA_STACKSIZE for debug stacks 2020-11-02 21:49:39 +01:00
Bas Stottelaar
922e2ac1c9 sys/*: replace #if ENABLE_DEBUG with IS_ACTIVE 2020-11-02 21:49:39 +01:00
Bas Stottelaar
27a684aa60 sys/*: remove unneeded ENABLE_DEBUG 2020-11-02 21:34:12 +01:00
Martine Lenders
d135721ad9
gnrc_sixlowpan_rb: remove GNRC_SIXLOWPAN_FRAG_RBUF_AGGRESSIVE_OVERRIDE
Deprecated in c7b6dc587c.
2020-10-28 11:03:15 +01:00
Bas Stottelaar
a0979b10e7 sys/*: remove unneeded ENABLE_DEBUG 2020-10-23 11:29:57 +02:00