When IPoiB joins to a MC group as send only it doesn't send creation parameters
to the SM and if the group does not exis it won't be created. This is typical
when a gateway sperates ETH receivers from IPoIB senders.
This patch fixes bug #1153 in bugzilla.

Signed-off-by: Yossi Etigin <yos...@voltaire.com>
Reviewd-by:    Moni Shoua   <mo...@mellanox.com>

--

Index: b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c
===================================================================
--- a/drivers/infiniband/ulp/ipoib/ipoib_multicast.c    2008-11-26 
18:28:04.000000000 +0200
+++ b/drivers/infiniband/ulp/ipoib/ipoib_multicast.c    2008-11-26 
18:30:41.000000000 +0200
@@ -325,6 +325,7 @@ static int ipoib_mcast_sendonly_join(str
                .join_state = 1
 #endif
        };
+       ib_sa_comp_mask comp_mask;
        int ret = 0;
 
        if (!test_bit(IPOIB_FLAG_OPER_UP, &priv->flags)) {
@@ -341,12 +342,38 @@ static int ipoib_mcast_sendonly_join(str
        rec.port_gid = priv->local_gid;
        rec.pkey     = cpu_to_be16(priv->pkey);
 
+       comp_mask =
+               IB_SA_MCMEMBER_REC_MGID         |
+               IB_SA_MCMEMBER_REC_PORT_GID     |
+               IB_SA_MCMEMBER_REC_PKEY         |
+               IB_SA_MCMEMBER_REC_JOIN_STATE;
+
+       if (priv->broadcast) {
+               comp_mask |=
+                       IB_SA_MCMEMBER_REC_QKEY                 |
+                       IB_SA_MCMEMBER_REC_MTU_SELECTOR         |
+                       IB_SA_MCMEMBER_REC_MTU                  |
+                       IB_SA_MCMEMBER_REC_TRAFFIC_CLASS        |
+                       IB_SA_MCMEMBER_REC_RATE_SELECTOR        |
+                       IB_SA_MCMEMBER_REC_RATE                 |
+                       IB_SA_MCMEMBER_REC_SL                   |
+                       IB_SA_MCMEMBER_REC_FLOW_LABEL           |
+                       IB_SA_MCMEMBER_REC_HOP_LIMIT;
+
+               rec.qkey          = priv->broadcast->mcmember.qkey;
+               rec.mtu_selector  = IB_SA_EQ;
+               rec.mtu           = priv->broadcast->mcmember.mtu;
+               rec.traffic_class = priv->broadcast->mcmember.traffic_class;
+               rec.rate_selector = IB_SA_EQ;
+               rec.rate          = priv->broadcast->mcmember.rate;
+               rec.sl            = priv->broadcast->mcmember.sl;
+               rec.flow_label    = priv->broadcast->mcmember.flow_label;
+               rec.hop_limit     = priv->broadcast->mcmember.hop_limit;
+       }
+
        mcast->mc = ib_sa_join_multicast(&ipoib_sa_client, priv->ca,
                                         priv->port, &rec,
-                                        IB_SA_MCMEMBER_REC_MGID        |
-                                        IB_SA_MCMEMBER_REC_PORT_GID    |
-                                        IB_SA_MCMEMBER_REC_PKEY        |
-                                        IB_SA_MCMEMBER_REC_JOIN_STATE,
+                                        comp_mask,
                                         GFP_ATOMIC,
                                         ipoib_mcast_sendonly_join_complete,
                                         mcast);
_______________________________________________
ewg mailing list
ewg@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg

Reply via email to