|
@@ -508,17 +508,19 @@ static void ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast)
|
|
|
rec.hop_limit = priv->broadcast->mcmember.hop_limit;
|
|
|
|
|
|
/*
|
|
|
- * Historically Linux IPoIB has never properly supported SEND
|
|
|
- * ONLY join. It emulated it by not providing all the required
|
|
|
- * attributes, which is enough to prevent group creation and
|
|
|
- * detect if there are full members or not. A major problem
|
|
|
- * with supporting SEND ONLY is detecting when the group is
|
|
|
- * auto-destroyed as IPoIB will cache the MLID..
|
|
|
+ * Send-only IB Multicast joins do not work at the core
|
|
|
+ * IB layer yet, so we can't use them here. However,
|
|
|
+ * we are emulating an Ethernet multicast send, which
|
|
|
+ * does not require a multicast subscription and will
|
|
|
+ * still send properly. The most appropriate thing to
|
|
|
+ * do is to create the group if it doesn't exist as that
|
|
|
+ * most closely emulates the behavior, from a user space
|
|
|
+ * application perspecitive, of Ethernet multicast
|
|
|
+ * operation. For now, we do a full join, maybe later
|
|
|
+ * when the core IB layers support send only joins we
|
|
|
+ * will use them.
|
|
|
*/
|
|
|
-#if 1
|
|
|
- if (test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags))
|
|
|
- comp_mask &= ~IB_SA_MCMEMBER_REC_TRAFFIC_CLASS;
|
|
|
-#else
|
|
|
+#if 0
|
|
|
if (test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags))
|
|
|
rec.join_state = 4;
|
|
|
#endif
|