Index: bpf.c =================================================================== RCS file: /home/ncvs/src/sys/net/bpf.c,v retrieving revision 1.180 diff -u -p -r1.180 bpf.c --- bpf.c 6 Aug 2007 14:26:00 -0000 1.180 +++ bpf.c 28 Aug 2007 01:34:27 -0000 @@ -599,6 +599,7 @@ bpfwrite(struct cdev *dev, struct uio *u struct ifnet *ifp; struct mbuf *m, *mc; struct sockaddr dst; + struct ether_header *eh; int error, hlen; if (d->bd_bif == NULL) @@ -620,6 +621,20 @@ bpfwrite(struct cdev *dev, struct uio *u if (error) return (error); + /* Check for multicast destination */ + switch (d->bd_bif->bif_dlt) { + case DLT_EN10MB: + eh = mtod(m, struct ether_header *); + if (ETHER_IS_MULTICAST(eh->ether_dhost)) { + if (bcmp(ifp->if_broadcastaddr, eh->ether_dhost, + ETHER_ADDR_LEN) == 0) + m->m_flags |= M_BCAST; + else + m->m_flags |= M_MCAST; + } + break; + } + if (d->bd_hdrcmplt) dst.sa_family = pseudo_AF_HDRCMPLT;