Merge pull request #9471 from gebart/pr/netif-6lo-more-data
gnrc/6lo: Set more data flag on all but last fragment
This commit is contained in:
commit
914f320dfe
@ -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->disp_size.u8[0] |= SIXLOWPAN_FRAG_1_DISP;
|
||||||
hdr->tag = byteorder_htons(_tag);
|
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 */
|
pkt = pkt->next; /* don't copy netif header */
|
||||||
|
|
||||||
while (pkt != NULL) {
|
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);
|
memcpy(data, ((uint8_t *)pkt->data) + pkt_offset, clen);
|
||||||
local_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;
|
pkt = pkt->next;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -197,6 +208,11 @@ static uint16_t _send_nth_fragment(gnrc_netif_t *iface, gnrc_pktsnip_t *pkt,
|
|||||||
local_offset += clen;
|
local_offset += clen;
|
||||||
|
|
||||||
if (local_offset == max_frag_size) {
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -243,7 +259,7 @@ void gnrc_sixlowpan_frag_send(gnrc_pktsnip_t *pkt, void *ctx, unsigned page)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Check weater to send the first or an Nth fragment */
|
/* Check whether to send the first or an Nth fragment */
|
||||||
if (fragment_msg->offset == 0) {
|
if (fragment_msg->offset == 0) {
|
||||||
/* increment tag for successive, fragmented datagrams */
|
/* increment tag for successive, fragmented datagrams */
|
||||||
_tag++;
|
_tag++;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user