diff --git a/sys/net/gnrc/netif/ethernet/gnrc_netif_ethernet.c b/sys/net/gnrc/netif/ethernet/gnrc_netif_ethernet.c index 432acc2b9e..2a629852ea 100644 --- a/sys/net/gnrc/netif/ethernet/gnrc_netif_ethernet.c +++ b/sys/net/gnrc/netif/ethernet/gnrc_netif_ethernet.c @@ -62,19 +62,19 @@ static inline void _addr_set_broadcast(uint8_t *dst) memset(dst, 0xff, ETHERNET_ADDR_LEN); } -static inline void _addr_set_multicast(uint8_t *dst, gnrc_pktsnip_t *payload) +static inline void _addr_set_multicast(gnrc_netif_t *netif, uint8_t *dst, + gnrc_pktsnip_t *payload) { switch (payload->type) { #ifdef MODULE_GNRC_IPV6 - case GNRC_NETTYPE_IPV6: - /* https://tools.ietf.org/html/rfc2464#section-7 */ - dst[0] = 0x33; - dst[1] = 0x33; + case GNRC_NETTYPE_IPV6: { ipv6_hdr_t *ipv6 = payload->data; - memcpy(dst + 2, ipv6->dst.u8 + 12, 4); + gnrc_netif_ipv6_group_to_l2_group(netif, &ipv6->dst, dst); break; + } #endif default: + (void)netif; _addr_set_broadcast(dst); break; } @@ -128,7 +128,7 @@ static int _send(gnrc_netif_t *netif, gnrc_pktsnip_t *pkt) "are not yet supported\n"); return -ENOTSUP; } - _addr_set_multicast(hdr.dst, payload); + _addr_set_multicast(netif, hdr.dst, payload); } else if (netif_hdr->dst_l2addr_len == ETHERNET_ADDR_LEN) { memcpy(hdr.dst, gnrc_netif_hdr_get_dst_addr(netif_hdr),