mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-18 12:52:44 +01:00
gnrc_rpl: fix zeroing of RPL DIS fields
The code originally assumed that the location of DIS struct is directly after the ICMPv6 struct. This is not necessarily true when both structs are individually allocated by pktbuf. This commit fixes this issue by directly accessing the location of the DIS struct.
This commit is contained in:
parent
11f1955ad4
commit
0c790c6638
@ -314,7 +314,6 @@ void gnrc_rpl_send_DIS(gnrc_rpl_instance_t *inst, ipv6_addr_t *destination,
|
||||
gnrc_rpl_internal_opt_t **options, size_t num_opts)
|
||||
{
|
||||
gnrc_pktsnip_t *pkt = NULL, *tmp;
|
||||
icmpv6_hdr_t *icmp;
|
||||
gnrc_rpl_dis_t *dis;
|
||||
|
||||
/* No options provided to be attached to the DIS, so we PadN 2 bytes */
|
||||
@ -358,6 +357,9 @@ void gnrc_rpl_send_DIS(gnrc_rpl_instance_t *inst, ipv6_addr_t *destination,
|
||||
return;
|
||||
}
|
||||
pkt = tmp;
|
||||
dis = (gnrc_rpl_dis_t *)pkt->data;
|
||||
dis->flags = 0;
|
||||
dis->reserved = 0;
|
||||
|
||||
if ((tmp = gnrc_icmpv6_build(pkt, ICMPV6_RPL_CTRL, GNRC_RPL_ICMPV6_CODE_DIS,
|
||||
sizeof(icmpv6_hdr_t))) == NULL) {
|
||||
@ -366,12 +368,6 @@ void gnrc_rpl_send_DIS(gnrc_rpl_instance_t *inst, ipv6_addr_t *destination,
|
||||
return;
|
||||
}
|
||||
pkt = tmp;
|
||||
|
||||
icmp = (icmpv6_hdr_t *)pkt->data;
|
||||
dis = (gnrc_rpl_dis_t *)(icmp + 1);
|
||||
dis->flags = 0;
|
||||
dis->reserved = 0;
|
||||
|
||||
#ifdef MODULE_NETSTATS_RPL
|
||||
gnrc_rpl_netstats_tx_DIS(&gnrc_rpl_netstats, gnrc_pkt_len(pkt),
|
||||
(destination && !ipv6_addr_is_multicast(destination)));
|
||||
|
Loading…
Reference in New Issue
Block a user