On 11/4/2011 9:08 AM, Hefty, Sean wrote:
+static struct idr *cma_select_ib_ps(struct rdma_id_private *id_priv)
+{
+ struct idr *ps = NULL;
+ struct sockaddr_ib *sib;
+ u64 sid_ps, mask, sid;
+
+ sib = (struct sockaddr_ib *)&id_priv->id.route.addr.src_addr;
+ mask = be64_to_cpu(sib->sib_sid_mask)& RDMA_IB_IP_PS_MASK;
+ sid = be64_to_cpu(sib->sib_sid)& mask;
+
+ if ((id_priv->id.ps == RDMA_PS_IB)&& (sid == (RDMA_IB_IP_PS_IB&
mask))) {
+ sid_ps = RDMA_IB_IP_PS_IB;
+ ps =&ib_ps;
+ } else if (((id_priv->id.ps == RDMA_PS_IB) || (id_priv->id.ps ==
RDMA_PS_TCP))&&
+ (sid == (RDMA_IB_IP_PS_TCP& mask))) {
+ sid_ps = RDMA_IB_IP_PS_TCP;
+ ps =&tcp_ps;
+ } else if (((id_priv->id.ps == RDMA_PS_IB) || (id_priv->id.ps ==
RDMA_PS_UDP))&&
+ (sid == (RDMA_IB_IP_PS_UDP& mask))) {
+ sid_ps = RDMA_IB_IP_PS_UDP;
+ ps =&udp_ps;
}
I see here some relation between PS_IB to PS_TCP and PS_UDP, isn't a
similar interaction is needed with PS_IPOIB?
--- a/include/rdma/rdma_cm.h
+++ b/include/rdma/rdma_cm.h
@@ -70,6 +70,11 @@ enum rdma_port_space {
RDMA_PS_UDP = 0x0111,
};
+#define RDMA_IB_IP_PS_MASK 0xFFFFFFFFFFFF0000ULL
+#define RDMA_IB_IP_PS_TCP 0x0000000001060000ULL
+#define RDMA_IB_IP_PS_UDP 0x0000000001110000ULL
+#define RDMA_IB_IP_PS_IB 0x00000000013F0000ULL
so 0x3f here in RDMA_IB_IP_PS_IB stand's for IANA's "any local network",
correct?
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html