mirror of https://gitee.com/openkylin/linux.git
IPoIB: Create MCGs with all attributes required by RFC
RFC 4391 ("Transmission of IP over InfiniBand (IPoIB)") says: If the IB multicast group does not already exist, one must be created first with the IPoIB link MTU. The MGID MUST use the same P_Key, Q_Key, SL, MTU, and HopLimit as those used in the broadcast-GID. The rest of attributes SHOULD follow the values used in the broadcast-GID as well. However, the current IPoIB driver is only setting the attributes required by the InfiniBand spec to create a multicast group, so in particular the MTU and HopLimit are not being set. Add these attributes when creating MCGs, and also set the Rate attribute, since IPoIB pays attention to that attribute as well. Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
aec79fcc3e
commit
d0df6d6d45
|
@ -472,15 +472,25 @@ static void ipoib_mcast_join(struct net_device *dev, struct ipoib_mcast *mcast,
|
|||
|
||||
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_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.traffic_class = priv->broadcast->mcmember.traffic_class;
|
||||
rec.hop_limit = priv->broadcast->mcmember.hop_limit;
|
||||
}
|
||||
|
||||
init_completion(&mcast->done);
|
||||
|
|
Loading…
Reference in New Issue