aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorRolf Manderscheid <rvm@obsidianresearch.com>2007-12-10 15:38:41 -0500
committerRoland Dreier <rolandd@cisco.com>2008-01-25 17:15:37 -0500
commita9e527e3f9f4510e9f3450ca3bc51bc3ef2854fd (patch)
tree519458581cf3b8dd7c7a6d19c29572efb3405df1 /net
parent755807a296f77ca7c31dc000afdfe1e5172bbf72 (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 'net')
-rw-r--r--net/ipv4/arp.c2
-rw-r--r--net/ipv6/ndisc.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c
index 08174a2aa878..54a76b8b803a 100644
--- a/net/ipv4/arp.c
+++ b/net/ipv4/arp.c
@@ -211,7 +211,7 @@ int arp_mc_map(__be32 addr, u8 *haddr, struct net_device *dev, int dir)
211 ip_tr_mc_map(addr, haddr); 211 ip_tr_mc_map(addr, haddr);
212 return 0; 212 return 0;
213 case ARPHRD_INFINIBAND: 213 case ARPHRD_INFINIBAND:
214 ip_ib_mc_map(addr, haddr); 214 ip_ib_mc_map(addr, dev->broadcast, haddr);
215 return 0; 215 return 0;
216 default: 216 default:
217 if (dir) { 217 if (dir) {
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index 777ed733b2d7..85947eae5bf7 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -337,7 +337,7 @@ int ndisc_mc_map(struct in6_addr *addr, char *buf, struct net_device *dev, int d
337 ipv6_arcnet_mc_map(addr, buf); 337 ipv6_arcnet_mc_map(addr, buf);
338 return 0; 338 return 0;
339 case ARPHRD_INFINIBAND: 339 case ARPHRD_INFINIBAND:
340 ipv6_ib_mc_map(addr, buf); 340 ipv6_ib_mc_map(addr, dev->broadcast, buf);
341 return 0; 341 return 0;
342 default: 342 default:
343 if (dir) { 343 if (dir) {