===================================================================
@@ -281,8 +281,11 @@ static void ipoib_ib_handle_rx_wc(struct
dev->stats.rx_bytes += skb->len;
skb->dev = dev;
- /* XXX get correct PACKET_ type here */
- skb->pkt_type = PACKET_HOST;
+ if (IN6_IS_ADDR_MULTICAST(skb->head + 24))
+
+ skb->pkt_type = PACKET_MULTICAST;
+ else
+ skb->pkt_type = PACKET_HOST;
if (test_bit(IPOIB_FLAG_CSUM, &priv->flags) && likely(wc->csum_ok))
skb->ip_summed = CHECKSUM_UNNECESSARY;
===================================================================
@@ -53,6 +53,9 @@ extern const struct in6_addr in6addr_lin
extern const struct in6_addr in6addr_linklocal_allrouters;
#define IN6ADDR_LINKLOCAL_ALLROUTERS_INIT \
{ { { 0xff,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2 } } }
+
+#define IN6_IS_ADDR_MULTICAST(a) (((const __u8 *) (a))[0] == 0xff)
+
#endif
struct sockaddr_in6 {