diff options
author | Rolf Manderscheid <rvm@obsidianresearch.com> | 2007-12-10 15:38:41 -0500 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2008-01-25 17:15:37 -0500 |
commit | a9e527e3f9f4510e9f3450ca3bc51bc3ef2854fd (patch) | |
tree | 519458581cf3b8dd7c7a6d19c29572efb3405df1 /drivers/infiniband/core | |
parent | 755807a296f77ca7c31dc000afdfe1e5172bbf72 (diff) |
IPoIB: improve IPv4/IPv6 to IB mcast mapping functions
An IPoIB subnet on an IB fabric that spans multiple IB subnets can't
use link-local scope in multicast GIDs. The existing routines that
map IP/IPv6 multicast addresses into IB link-level addresses hard-code
the scope to link-local, and they also leave the partition key field
uninitialised. This patch adds a parameter (the link-level broadcast
address) to the mapping routines, allowing them to initialise both the
scope and the P_Key appropriately, and fixes up the call sites.
The next step will be to add a way to configure the scope for an IPoIB
interface.
Signed-off-by: Rolf Manderscheid <rvm@obsidianresearch.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/core')
-rw-r--r-- | drivers/infiniband/core/cma.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/infiniband/core/cma.c b/drivers/infiniband/core/cma.c index 312ec74f3d18..982836e69f55 100644 --- a/drivers/infiniband/core/cma.c +++ b/drivers/infiniband/core/cma.c | |||
@@ -2610,11 +2610,9 @@ static void cma_set_mgid(struct rdma_id_private *id_priv, | |||
2610 | /* IPv6 address is an SA assigned MGID. */ | 2610 | /* IPv6 address is an SA assigned MGID. */ |
2611 | memcpy(mgid, &sin6->sin6_addr, sizeof *mgid); | 2611 | memcpy(mgid, &sin6->sin6_addr, sizeof *mgid); |
2612 | } else { | 2612 | } else { |
2613 | ip_ib_mc_map(sin->sin_addr.s_addr, mc_map); | 2613 | ip_ib_mc_map(sin->sin_addr.s_addr, dev_addr->broadcast, mc_map); |
2614 | if (id_priv->id.ps == RDMA_PS_UDP) | 2614 | if (id_priv->id.ps == RDMA_PS_UDP) |
2615 | mc_map[7] = 0x01; /* Use RDMA CM signature */ | 2615 | mc_map[7] = 0x01; /* Use RDMA CM signature */ |
2616 | mc_map[8] = ib_addr_get_pkey(dev_addr) >> 8; | ||
2617 | mc_map[9] = (unsigned char) ib_addr_get_pkey(dev_addr); | ||
2618 | *mgid = *(union ib_gid *) (mc_map + 4); | 2616 | *mgid = *(union ib_gid *) (mc_map + 4); |
2619 | } | 2617 | } |
2620 | } | 2618 | } |