[openib-general] Fwd: IPoIB Multicast

Michael S. Tsirkin mst at mellanox.co.il
Mon Sep 18 20:15:34 PDT 2006


Quoting r. Roland Dreier <rdreier at cisco.com>:
Subject: Re: Fwd: IPoIB Multicast

Here's a patch that tries to fix this.  I only tried it with the Cisco
embedded SM, so someone should probably check that this doesn't break
under OpenSM.

Look OK?

 - R.


We've been testing the following which looks exactly equivalent.
I'll look at the regression results in the morning and will let you know.

Please note this fixes an actual issue for us: on a mixed
1x/4x or SDP/DDR network, if a group is created with the wrong
parameters, some nodes are unable to join.

-----------------------------------------------------------

IB/ipoib: make multicast group creation spec compliant

IPoIB spec says:
The MGID MUST use the same P_Key, Q_Key, SL, MTU and HopLimit as
those used in the broadcast-GID. For the rest of attributes too,
the values used in the broadcast-GID SHOULD be used.

IPoIB currently violates this rule, which breaks multicast
on heterogenious networks.

Signed-off-by: Eli Cohen <eli at mellanox.co.il>
Signed-off-by: Michael S. Tsirkin <mst at mellanox.co.il>

---

Index: openib-1.1/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
===================================================================
--- openib-1.1.orig/drivers/infiniband/ulp/ipoib/ipoib_multicast.c	2006-09-17 12:23:25.000000000 +0300
+++ openib-1.1/drivers/infiniband/ulp/ipoib/ipoib_multicast.c	2006-09-17 16:31:08.000000000 +0300
@@ -472,15 +472,25 @@ static void ipoib_mcast_join(struct net_
 
 	if (create) {
 		comp_mask |=
-			IB_SA_MCMEMBER_REC_QKEY		|
-			IB_SA_MCMEMBER_REC_SL		|
-			IB_SA_MCMEMBER_REC_FLOW_LABEL	|
-			IB_SA_MCMEMBER_REC_TRAFFIC_CLASS;
+			IB_SA_MCMEMBER_REC_QKEY          |
+			IB_SA_MCMEMBER_REC_SL		 |
+			IB_SA_MCMEMBER_REC_FLOW_LABEL	 |
+			IB_SA_MCMEMBER_REC_TRAFFIC_CLASS |
+			IB_SA_MCMEMBER_REC_RATE_SELECTOR |
+			IB_SA_MCMEMBER_REC_RATE          |
+			IB_SA_MCMEMBER_REC_HOP_LIMIT     |
+			IB_SA_MCMEMBER_REC_MTU_SELECTOR  |
+			IB_SA_MCMEMBER_REC_MTU;
 
 		rec.qkey	  = priv->broadcast->mcmember.qkey;
 		rec.sl		  = priv->broadcast->mcmember.sl;
 		rec.flow_label	  = priv->broadcast->mcmember.flow_label;
 		rec.traffic_class = priv->broadcast->mcmember.traffic_class;
+		rec.rate_selector = IB_SA_EQ;
+		rec.rate          = priv->broadcast->mcmember.rate;
+		rec.hop_limit     = priv->broadcast->mcmember.hop_limit;
+		rec.mtu_selector  = IB_SA_EQ;
+		rec.mtu           = priv->broadcast->mcmember.mtu;
 	}
 
 	init_completion(&mcast->done);

-- 
MST




More information about the general mailing list