diff --git a/src/inet/networklayer/ipv6/Ipv6.cc b/src/inet/networklayer/ipv6/Ipv6.cc index a45f4fdd267..90b72a28737 100644 --- a/src/inet/networklayer/ipv6/Ipv6.cc +++ b/src/inet/networklayer/ipv6/Ipv6.cc @@ -403,7 +403,10 @@ void Ipv6::datagramLocalOut(Packet *packet, const NetworkInterface *destIE, Ipv6 const auto& ipv6Header = packet->peekAtFront(); // route packet if (destIE != nullptr) - fragmentPostRouting(packet, destIE, MacAddress::BROADCAST_ADDRESS, true); // FIXME what MAC address to use? + if(!ipv6Header->getDestAddress().isMulticast()) + fragmentPostRouting(packet, destIE, MacAddress::BROADCAST_ADDRESS, true); + else + fragmentPostRouting(packet, destIE, ipv6Header->getDestAddress().mapToMulticastMacAddress(), true); else if (!ipv6Header->getDestAddress().isMulticast()) routePacket(packet, destIE, nullptr, requestedNextHopAddress, true); else @@ -602,7 +605,7 @@ void Ipv6::routeMulticastPacket(Packet *packet, const NetworkInterface *destIE, for (int i = 0; i < ift->getNumInterfaces(); i++) { NetworkInterface *ie = ift->getInterface(i); if (fromIE != ie && !ie->isLoopback()) - fragmentPostRouting(packet->dup(), ie, MacAddress::BROADCAST_ADDRESS, fromHL); + fragmentPostRouting(packet->dup(), ie, ipv6Header->getDestAddress().mapToMulticastMacAddress(), fromHL); } delete packet;