Index: sys/net/if_infiniband.c =================================================================== --- sys/net/if_infiniband.c +++ sys/net/if_infiniband.c @@ -252,12 +252,13 @@ goto bad; } else if (lle != NULL && (lle->la_flags & LLE_VALID)) { memcpy(edst, lle->ll_addr, sizeof(edst)); + } else if (ip6->ip6_nxt == IPPROTO_ICMPV6) { + /* XXX try to parse ND_OPT_SOURCE_LINKADDR to avoid broadcasting all traffic */ + memcpy(edst, ifp->if_broadcastaddr, INFINIBAND_ADDR_LEN); } else if (m->m_flags & M_MCAST) { infiniband_ipv6_multicast_map( &((const struct sockaddr_in6 *)dst)->sin6_addr, ifp->if_broadcastaddr, edst); - } else if (ip6->ip6_nxt == IPPROTO_ICMPV6) { - memcpy(edst, ifp->if_broadcastaddr, INFINIBAND_ADDR_LEN); } else { error = nd6_resolve(ifp, is_gw, m, dst, edst, NULL, NULL); if (error) {