diff options
author | Steve Wise <swise@opengridcomputing.com> | 2007-09-12 06:00:25 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2007-10-09 22:59:13 -0400 |
commit | 935ef2d7a2910ca810fce57511f4d06a0cf00b5e (patch) | |
tree | b0b3c6d6dd646e31100ca1d11fa5f18bc9014c38 | |
parent | 3a31c41901b6bd3937ec36e0e4a930849e270df6 (diff) |
RDMA/cma: Use neigh_event_send() to start neighbour discovery
Calling arp_send() to initiate neighbour discovery (ND) doesn't do the
full ND protocol. Namely, it doesn't handle retransmitting the arp
request if it is dropped. The function neigh_event_send() does all
this. Without doing full ND, RDMA address resolution fails in the
presence of dropped ARP broadcast packets.
Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Acked-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r-- | drivers/infiniband/core/addr.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c index c5c33d35f87d..5381c80de10a 100644 --- a/drivers/infiniband/core/addr.c +++ b/drivers/infiniband/core/addr.c | |||
@@ -161,8 +161,7 @@ static void addr_send_arp(struct sockaddr_in *dst_in) | |||
161 | if (ip_route_output_key(&rt, &fl)) | 161 | if (ip_route_output_key(&rt, &fl)) |
162 | return; | 162 | return; |
163 | 163 | ||
164 | arp_send(ARPOP_REQUEST, ETH_P_ARP, rt->rt_gateway, rt->idev->dev, | 164 | neigh_event_send(rt->u.dst.neighbour, NULL); |
165 | rt->rt_src, NULL, rt->idev->dev->dev_addr, NULL); | ||
166 | ip_rt_put(rt); | 165 | ip_rt_put(rt); |
167 | } | 166 | } |
168 | 167 | ||