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

72 Commits

Author SHA1 Message Date
Martine S. Lenders
f6686e92f1 gnrc_sixlowpan_frag_vrb: add gnrc_sixlowpan_frag_vrb_from_route()
This adds a new VRB function that receives a header with forwarding
information and creates a VRB entry from it. Currently, only IPv6 is
supported.
2019-10-07 18:16:47 +02:00
Martine S. Lenders
900ca3ff9e gnrc_sixlowpan_frag_vrb: add missing header include 2019-10-07 17:54:59 +02:00
Martine Lenders
04f59d6609 gnrc_sixlowpan_frag_vrb: re-use now unused super::dst for out_dst 2019-09-30 12:46:15 +02:00
Martine Lenders
45f7966364 gnrc_sixlowpan_frag_vrb: fix for draft update
Due to some changes to the minimal forwarding draft and in preparation
for Selective Fragment Recovery some changes to the VRB API were
needed. Now the index of a VRB entry is only (L2 src, tag) not as
before (L2 src, L2 dst, length, tag).

I know that the current `rbuf_base` causes waste, as all the fields not
used by the new index are effectively not used by the VRB. I'd like to
fix that however in a later change, since that also requires some
modifications of the classic reassembly buffer, and thus would
complicate the review and testing of the change.

Sources for the index change:
- https://tools.ietf.org/html/draft-ietf-6lo-minimal-fragment-04#section-1
- https://mailarchive.ietf.org/arch/browse/6lo/?gbt=1&index=DLCTxC2X4bRNtYPHhtEkavMWlz4
2019-09-29 18:31:43 +02:00
Martine Lenders
698d46eabe gnrc_sixlowpan_frag_rb: make NOPs dependent on RB 2019-09-28 13:36:39 +02:00
Martine Lenders
e9ff46b2ea gnrc_sixlowpan_frag_rb: unify naming scheme 2019-09-28 12:11:54 +02:00
Martine Lenders
178f4af108 gnrc_sixlowpan_frag_rb: remove legacy defines 2019-09-28 12:07:24 +02:00
Martine Lenders
972e4938bc gnrc_sixlowpan_frag_rb: use existing name scheme for private functions 2019-09-28 11:51:18 +02:00
Martine S. Lenders
49bd8678ed gnrc_sixlowpan_frag_rb: remove public around former private functions 2019-09-28 11:51:18 +02:00
Martine S. Lenders
ec495528fe gnrc_sixlowpan_frag: move private RB functions to RB module 2019-09-28 11:51:18 +02:00
Martine S. Lenders
b5545fe334 gnrc_sixlowpan: include reassembly buffer only where needed 2019-09-27 21:11:36 +02:00
Martine S. Lenders
2d9ba56c2c gnrc_sixlowpan_frag: move reassembly buffer to its own header 2019-09-27 18:34:02 +02:00
Martine Lenders
dca3408167 gnrc_sixlowpan_frag_stats: initial import of frag statistics 2019-09-11 10:30:29 +02:00
Hauke Petersen
02df6ab13f
Merge pull request #11000 from miri64/gnrc_sixlowpan_frag/new/vrb
gnrc_sixlowpan_frag: initial import of the VRB
2019-08-07 17:33:01 +02:00
Martine Lenders
26a526eaee gnrc_sixlowpan_frag: initial import of the VRB
VRB = virtual reassembly buffer
2019-08-07 16:18:19 +02:00
Cenk Gündoğan
3f4259af07
Merge pull request #11061 from miri64/gnrc_sixlowpan_frag/new/hint
gnrc_sixlowpan_frag: Initial import of a fragment size hint feature
2019-05-28 23:09:15 +02:00
Martine Lenders
2534cfb3fa gnrc_sixlowpan_frag: Initial import of a fragment size hint feature
This allows for sending of fragments smaller than the restrictions set
by the link-layer PDU. E.g. to put some slack for IPHC into the first
fragment (see https://tools.ietf.org/html/draft-ietf-6lo-fragment-recovery-02#section-4.1).
2019-05-28 21:03:51 +02:00
Martine Lenders
a8c81debf8 gnrc_sixlowpan_frag: use rbuf base class whenever possible 2019-05-28 18:07:42 +02:00
Martine Lenders
5e7803d506 gnrc_sixlowpan_frag: add datagram size to base type 2019-05-28 18:07:42 +02:00
Martine Lenders
52e4247798 gnrc_sixlowpan_frag: introduce reassembly buffer base class 2019-05-28 18:07:42 +02:00
Martine Lenders
8cc5d94956 gnrc_sixlowpan_frag: add arrival time to public type
The arrival time is also needed for the VRB's garbage collection.
2019-05-28 18:07:42 +02:00
Martine Lenders
b84e496563 gnrc_sixlowpan_frag: add intervals to public type
The fragment intervals are also required by the VRB, so make them part
of the public representation of a reassembly buffer.
2019-05-28 18:07:42 +02:00
Martine Lenders
a3061ab2cc gnrc_sixlowpan_frag: expose fragment interval type
For the [VRB] I also need to track which the intervals of the fragments
already received (mostly for finding out when I am able to get rid of a
VRB entry, see [this conversation][VRB entry removal]), so to be able to
incorporate it into the common type for both reassembly buffer and VRB I
need to expose that type first.

[VRB]: https://tools.ietf.org/html/draft-ietf-lwig-6lowpan-virtual-reassembly-00
[VRB entry removal]: https://mailarchive.ietf.org/arch/msg/6lo/bTm2REo4PpVcMFH04mF_SlPvS_M
2019-05-28 18:07:41 +02:00
Martine Lenders
8fe12bc82c
Merge pull request #11021 from miri64/gnrc_sixlowpan_frag/enh/multiple-send
gnrc_sixlowpan_frag: allow send of multiple datagrams simultaneously
2019-05-27 11:54:26 +02:00
Martine Lenders
b6f19c0bcb gnrc_sixlowpan_frag: allow send of multiple datagrams simultaneously 2019-05-27 10:35:31 +02:00
Martine Lenders
7e26a22723 gnrc_sixlowpan_frag: fix timeout config macro name 2019-05-24 17:39:35 +02:00
Martine Lenders
1cac697a62 gnrc_sixlowpan_frag: make aggresive override configurable 2019-04-25 09:37:34 +02:00
Martine Lenders
a55320a10a gnrc_sixlowpan_frag: expose tag progression functionality
The VRB also needs to be able to generate new tags for forwarding. This
exposes the tag generation.
2019-04-18 16:40:12 +02:00
Martine Lenders
1550390adb gnrc_sixlowpan_frag: expose reassembly buffer configuration
Both values are not standardized so there is no sense keeping these
values not configurable
2019-04-18 14:19:53 +02:00
Martine Lenders
ba3c099f16 gnrc_sixlowpan_nd: remove unused config variable (and its header) 2019-04-17 21:47:48 +02:00
Martine Lenders
2091f168d1 gnrc_sixlowpan: expose configuration via config group 2019-04-17 21:47:48 +02:00
Martine Lenders
931b179d14 gnrc_sixlowpan_frag: encapsulate msg_send_to_self()
This makes it easier to access this functionality for test cases e.g.
from the `main` thread.
2019-03-08 19:32:46 +01:00
Martine Lenders
0954fabdc7 gnrc_sixlowpan_frag: make datagram size uint16_t for send
It can't get bigger, so it doesn't make sense to waste another 2 byte
on it.
2019-02-15 11:23:46 +01:00
Martine Lenders
b27f12bc1f gnrc_sixlowpan_frag: remove redundant PID member
The interface ID is actually also provided in `pkt` so providing it in
the `gnrc_sixlowpan_msg_frag_t` struct is redundant.
2019-02-15 11:23:18 +01:00
Cenk Gündoğan
f03e52d157
Merge pull request #9484 from miri64/gnrc_sixlowpan_iphc/enh/i8511-recv
gnrc_sixlowpan_iphc: refactor reception for #8511
2018-07-26 07:58:52 +02:00
Martine Lenders
69d9ecc0d9 gnrc_sixlowpan_iphc: refactor reception for #8511
This refactors reception/decoding part of `gnrc_sixlowpan_iphc` to the
more layered approach modeled in #8511. Since the reception part is
already complicated enough I decided to divide send and receive up into
separate changes.
2018-07-25 18:15:09 +02:00
Martine Lenders
9a88cc8004 gnrc_sixlowpan: remove assertion on multiple_by_size function
During the review of #9485 [we found out][1] that an assertion in this
function was invalid. However, the documentation on this assertion
wasn't removed on that. This fixes that.

[1] https://github.com/RIOT-OS/RIOT/pull/9485#issuecomment-407794280
2018-07-25 18:00:30 +02:00
Cenk Gündoğan
7fef5e030a
Merge pull request #9485 from miri64/gnrc_sixlowpan_iphc/enh/i8511-send
gnrc_sixlowpan_iphc: refactor sending for #8511
2018-07-25 17:57:59 +02:00
Martine Lenders
80322cbd7d gnrc_sixlowpan_iphc: refactor sending for #8511
This refactors sending/encoding part of `gnrc_sixlowpan_iphc` to the
more layered approach modeled in #8511. Since the reception part is
already was pretty complicated to refactor, I decided to divide send
and receive up into separate changes.
2018-07-25 17:35:59 +02:00
Martine Lenders
64fed621d2 gnrc_sixlowpan_frag: Expose functions to finish datagram
This will be used in the IPHC refactoring to control the reassembly
buffer as a context.

I also adapted the name of `gnrc_sixlowpan_frag_gc_rbuf()` to be in
line with the rest of the newer functions.
2018-07-25 11:26:02 +02:00
Cenk Gündoğan
16e1f972ab
Merge pull request #9424 from miri64/gnrc_sixlowpan_frag/enh/async-gc
gnrc_sixlowpan_frag: add asynchronous rbuf GC
2018-07-03 11:45:52 +02:00
Martine Lenders
254f16e81f gnrc_sixlowpan_frag: add asynchronous rbuf GC
While the current approach for garbage collection in the 6Lo reassembly
buffer is good for best-effort handling of
*fragmented* packets and nicely RAM saving, it has the problem that
incomplete, huge datagrams can basically DoS a node, if no further
fragmented datagram is received for a while (since the packet buffer is
full and GC is not triggered).

This change adds a asynchronous GC (utilizing the existing
functionality) to the reassembly buffer, so that even if there is no new
fragmented packet received, fragments older than `RBUF_TIMEOUT` will be
removed from the reassembly buffer, freeing up the otherwise wasted
packet buffer space.
2018-07-03 10:25:25 +02:00
Martine Lenders
68fe6682ff gnrc_sixlowpan_frag: add current_size to exposed struct
Since IPHC also manipulates the total number of bytes of a received
datagram (by decompressing it), this also needs to be exposed. I guess
I was too focused on introducing a *generic* packet buffer for a future
virtual reassembly buffer (where it isn't needed, but so isn't `pkt` to
be honest), that I totally forgot about it in #9352.
2018-06-28 12:28:51 +02:00
Martine Lenders
a2eb3c7f15 gnrc_sixlowpan_frag: adapt for #8511
This refactors the `gnrc_sixlowpan_frag` module for the API proposed
in #8511.

The `ctx` for `gnrc_sixlowpan_frag_send()` is required to be a
`gnrc_sixlowpan_msg_frag_t` object, so IPHC can later on use it to
provide the *original* datagram size (otherwise, we would need to adapt
the API just for that, which seems to me as convoluted as this
proposal).

I also provide an expose function with a future possibility to provide
more than just one `gnrc_sixlowpan_msg_frag_t` object later on (plus
having cleaner module separation in general).
2018-06-26 19:38:33 +02:00
Cenk Gündoğan
e08fd546cf
Merge pull request #9353 from miri64/gnrc_sixlowpan/opt/rm-pad
gnrc_sixlowpan: fix order of gnrc_sixlowpan_msg_frag_t
2018-06-18 10:59:27 +02:00
Martine Lenders
2c9ee62eb0 gnrc_sixlowpan: fix order of gnrc_sixlowpan_msg_frag_t
While working on #9352 I noticed that the order of members in the
`gnrc_sixlowpan_msg_frag_t` struct costs us 4 bytes in RAM due to byte
alignment. This PR fixes the order of members, so they are the most
packed.
2018-06-14 17:35:29 +02:00
Martine Lenders
86cbde2db5 gnrc_sixlowpan_frag: expose (parts of) reassembly buffer
This exposes the parts of the reassembly buffer to be usable as context
as proposed in #8511.

I only exposed *parts of* for two reasons:

1. I don't need to expose further types (like `rbuf_int_t`), that are
   not of interest outside of fragmentation.
2. This allows for an easy future extension for the virtual reassembly
   buffer as proposed in [[1]].

This makes this change a little bit more involved, because instead of
just renaming the type, I also need to add the usage of the `super`
member, but I think in the end this little preparation work will be
beneficial in the future.

[1]: https://tools.ietf.org/html/draft-watteyne-6lo-minimal-fragment-01#section-3
2018-06-14 17:22:58 +02:00
Cenk Gündoğan
18005666ac
Merge pull request #8512 from miri64/gnrc_sixlowpan/enh/gnrc-dispatch
gnrc_sixlowpan: Introduce 6Lo GNRC dispatch sub-layer
2018-03-01 15:03:03 +01:00
Martine Lenders
67d7aeab7e gnrc_sixlowpan: Introduce 6Lo GNRC dispatch sub-layer
This abstracts the sending and receiving of 6Lo packets to the new
6Lo sub-layer model introduced in #8511 and exemplifies it as well.
2018-03-01 14:15:07 +01:00
Martine Lenders
1156721eaf gnrc_sixlowpan_nd: add missing header
`gnrc_pktsnip_t` is used in `net/gnrc/sixlowpan/nd.h` but it is not
included. There were no compile errors yet, since this file is always
included with some other GNRC headers, but it might not in the future.
2018-02-16 12:16:56 +01:00