1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-26 23:11:19 +01:00

Merge pull request #10584 from miri64/gnrc_ipv6/enh/use-new-pktbuf-func

gnrc_ipv6: use gnrc_pktbuf_merge() to loopback packet
This commit is contained in:
Martine Lenders 2018-12-17 12:16:06 +01:00 committed by GitHub
commit 2e57ea246e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -504,36 +504,21 @@ static void _send_multicast(gnrc_pktsnip_t *pkt, bool prep_hdr,
static void _send_to_self(gnrc_pktsnip_t *pkt, bool prep_hdr,
gnrc_netif_t *netif)
{
uint8_t *rcv_data;
gnrc_pktsnip_t *ptr = pkt, *rcv_pkt;
if (!_safe_fill_ipv6_hdr(netif, pkt, prep_hdr)) {
return;
}
rcv_pkt = gnrc_pktbuf_add(NULL, NULL, gnrc_pkt_len(pkt), GNRC_NETTYPE_IPV6);
if (rcv_pkt == NULL) {
DEBUG("ipv6: error on generating loopback packet\n");
if (!_safe_fill_ipv6_hdr(netif, pkt, prep_hdr) ||
/* no netif header so we just merge the whole packet. */
(gnrc_pktbuf_merge(pkt) != 0)) {
DEBUG("ipv6: error looping packet to sender.\n");
gnrc_pktbuf_release(pkt);
return;
}
rcv_data = rcv_pkt->data;
/* "reverse" packet (by making it one snip as if received from NIC) */
while (ptr != NULL) {
memcpy(rcv_data, ptr->data, ptr->size);
rcv_data += ptr->size;
ptr = ptr->next;
}
gnrc_pktbuf_release(pkt);
DEBUG("ipv6: packet is addressed to myself => loopback\n");
if (gnrc_netapi_receive(gnrc_ipv6_pid, rcv_pkt) < 1) {
DEBUG("ipv6: unable to deliver packet\n");
gnrc_pktbuf_release(rcv_pkt);
if (gnrc_netapi_dispatch_receive(GNRC_NETTYPE_IPV6,
GNRC_NETREG_DEMUX_CTX_ALL,
pkt) == 0) {
DEBUG("ipv6: unable to deliver looped back packet\n");
gnrc_pktbuf_release(pkt);
}
}