RDMA/nes: Add loopback check to make_cm_node()
authorChien Tung <chien.tin.tung@intel.com>
Sat, 22 Nov 2008 02:51:04 +0000 (20:51 -0600)
committerRoland Dreier <rolandd@cisco.com>
Fri, 5 Dec 2008 19:00:29 +0000 (11:00 -0800)
Check for loopback connection in make_cm_node().

Signed-off-by: Chien Tung <chien.tin.tung@intel.com>
Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/infiniband/hw/nes/nes_cm.c

index 0997c7b8cd9b7e8618e974c48862089cb07f1a59..f241ca104d1610cca5d902d7aac23ab4d1704777 100644 (file)
@@ -1142,7 +1142,10 @@ static struct nes_cm_node *make_cm_node(struct nes_cm_core *cm_core,
 
        cm_node->loopbackpartner = NULL;
        /* get the mac addr for the remote node */
-       arpindex = nes_arp_table(nesdev, cm_node->rem_addr, NULL, NES_ARP_RESOLVE);
+       if (ipv4_is_loopback(htonl(cm_node->rem_addr)))
+               arpindex = nes_arp_table(nesdev, ntohl(nesvnic->local_ipaddr), NULL, NES_ARP_RESOLVE);
+       else
+               arpindex = nes_arp_table(nesdev, cm_node->rem_addr, NULL, NES_ARP_RESOLVE);
        if (arpindex < 0) {
                arpindex = nes_addr_resolve_neigh(nesvnic, cm_info->rem_addr);
                if (arpindex < 0) {