From 58281e91357d0d781b91039394307d3868cb59f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Joakim=20Nohlg=C3=A5rd?= <joakim.nohlgard@eistec.se>
Date: Sat, 30 Jun 2018 15:35:05 +0200
Subject: [PATCH] 6lo: Set more data flag on all but last frag

---
 .../sixlowpan/frag/gnrc_sixlowpan_frag.c         | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/sys/net/gnrc/network_layer/sixlowpan/frag/gnrc_sixlowpan_frag.c b/sys/net/gnrc/network_layer/sixlowpan/frag/gnrc_sixlowpan_frag.c
index f2197eb97d..e0061596ec 100644
--- a/sys/net/gnrc/network_layer/sixlowpan/frag/gnrc_sixlowpan_frag.c
+++ b/sys/net/gnrc/network_layer/sixlowpan/frag/gnrc_sixlowpan_frag.c
@@ -117,6 +117,10 @@ static uint16_t _send_1st_fragment(gnrc_netif_t *iface, gnrc_pktsnip_t *pkt,
     hdr->disp_size.u8[0] |= SIXLOWPAN_FRAG_1_DISP;
     hdr->tag = byteorder_htons(_tag);
 
+    /* Tell the link layer that we will send more fragments */
+    gnrc_netif_hdr_t *netif_hdr = frag->data;
+    netif_hdr->flags |= GNRC_NETIF_HDR_FLAGS_MORE_DATA;
+
     pkt = pkt->next;    /* don't copy netif header */
 
     while (pkt != NULL) {
@@ -182,6 +186,13 @@ static uint16_t _send_nth_fragment(gnrc_netif_t *iface, gnrc_pktsnip_t *pkt,
 
             memcpy(data, ((uint8_t *)pkt->data) + pkt_offset, clen);
             local_offset = clen;
+            if (local_offset == max_frag_size) {
+                if ((clen < (pkt->size - pkt_offset)) || (pkt->next != NULL)) {
+                    /* Tell the link layer that we will send more fragments */
+                    gnrc_netif_hdr_t *netif_hdr = frag->data;
+                    netif_hdr->flags |= GNRC_NETIF_HDR_FLAGS_MORE_DATA;
+                }
+            }
             pkt = pkt->next;
             break;
         }
@@ -197,6 +208,11 @@ static uint16_t _send_nth_fragment(gnrc_netif_t *iface, gnrc_pktsnip_t *pkt,
             local_offset += clen;
 
             if (local_offset == max_frag_size) {
+                if ((clen < pkt->size) || (pkt->next != NULL)) {
+                    /* Tell the link layer that we will send more fragments */
+                    gnrc_netif_hdr_t *netif_hdr = frag->data;
+                    netif_hdr->flags |= GNRC_NETIF_HDR_FLAGS_MORE_DATA;
+                }
                 break;
             }
 
-- 
GitLab