]> git.openfabrics.org - ~shefty/rdma-dev.git/commitdiff
ib/addr: add AF_IB support to ip_addr_size
authorSean Hefty <sean.hefty@intel.com>
Wed, 17 Mar 2010 18:10:23 +0000 (10:10 -0800)
committerSean Hefty <sean.hefty@intel.com>
Wed, 17 Mar 2010 18:10:23 +0000 (10:10 -0800)
Add support for AF_IB to ip_addr_size, and rename the function
to account for the change.  Give the compiler more control over
whether the call should be inline or not by moving the definition
into the .c file, removing the static inline, and exporting it.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
drivers/infiniband/core/addr.c
drivers/infiniband/core/cma.c
include/rdma/ib_addr.h

index abbb06996f9e008c0a5c5957a18b46d10ef032d7..f73c5deb360ef7816816aadc081c687357f42ba2 100644 (file)
@@ -43,6 +43,7 @@
 #include <net/addrconf.h>
 #include <net/ip6_route.h>
 #include <rdma/ib_addr.h>
+#include <rdma/ib.h>
 
 MODULE_AUTHOR("Sean Hefty");
 MODULE_DESCRIPTION("IB Address Translation");
@@ -68,6 +69,21 @@ static LIST_HEAD(req_list);
 static DECLARE_DELAYED_WORK(work, process_req);
 static struct workqueue_struct *addr_wq;
 
+int rdma_addr_size(struct sockaddr *addr)
+{
+       switch (addr->sa_family) {
+       case AF_INET:
+               return sizeof(struct sockaddr_in);
+       case AF_INET6:
+               return sizeof(struct sockaddr_in6);
+       case AF_IB:
+               return sizeof(struct sockaddr_ib);
+       default:
+               return 0;
+       }
+}
+EXPORT_SYMBOL(rdma_addr_size);
+
 void rdma_addr_register_client(struct rdma_addr_client *client)
 {
        atomic_set(&client->refcount, 1);
@@ -366,12 +382,12 @@ int rdma_resolve_ip(struct rdma_addr_client *client,
                        goto err;
                }
 
-               memcpy(src_in, src_addr, ip_addr_size(src_addr));
+               memcpy(src_in, src_addr, rdma_addr_size(src_addr));
        } else {
                src_in->sa_family = dst_addr->sa_family;
        }
 
-       memcpy(dst_in, dst_addr, ip_addr_size(dst_addr));
+       memcpy(dst_in, dst_addr, rdma_addr_size(dst_addr));
        req->addr = addr;
        req->callback = callback;
        req->context = context;
index 6460fbf6ad70e8aefb057ad9afe0d8ddf10cfd47..ac5715567a68161b8a0a2f27c72f5a722fea979e 100644 (file)
@@ -1468,7 +1468,7 @@ static void cma_listen_on_dev(struct rdma_id_private *id_priv,
 
        dev_id_priv->state = CMA_ADDR_BOUND;
        memcpy(&id->route.addr.src_addr, &id_priv->id.route.addr.src_addr,
-              ip_addr_size((struct sockaddr *) &id_priv->id.route.addr.src_addr));
+              rdma_addr_size((struct sockaddr *) &id_priv->id.route.addr.src_addr));
 
        cma_attach_to_dev(dev_id_priv, cma_dev);
        list_add_tail(&dev_id_priv->listen_list, &id_priv->listen_list);
@@ -1834,7 +1834,7 @@ static void addr_handler(int status, struct sockaddr *src_addr,
                event.status = status;
        } else {
                memcpy(&id_priv->id.route.addr.src_addr, src_addr,
-                      ip_addr_size(src_addr));
+                      rdma_addr_size(src_addr));
                event.event = RDMA_CM_EVENT_ADDR_RESOLVED;
        }
 
@@ -1924,7 +1924,7 @@ int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
                return -EINVAL;
 
        atomic_inc(&id_priv->refcount);
-       memcpy(&id->route.addr.dst_addr, dst_addr, ip_addr_size(dst_addr));
+       memcpy(&id->route.addr.dst_addr, dst_addr, rdma_addr_size(dst_addr));
        if (cma_any_addr(dst_addr))
                ret = cma_resolve_loopback(id_priv);
        else
@@ -2147,7 +2147,7 @@ int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr)
                        goto err1;
        }
 
-       memcpy(&id->route.addr.src_addr, addr, ip_addr_size(addr));
+       memcpy(&id->route.addr.src_addr, addr, rdma_addr_size(addr));
        ret = cma_get_port(id_priv);
        if (ret)
                goto err2;
@@ -2807,7 +2807,7 @@ int rdma_join_multicast(struct rdma_cm_id *id, struct sockaddr *addr,
        if (!mc)
                return -ENOMEM;
 
-       memcpy(&mc->addr, addr, ip_addr_size(addr));
+       memcpy(&mc->addr, addr, rdma_addr_size(addr));
        mc->context = context;
        mc->id_priv = id_priv;
 
@@ -2842,7 +2842,7 @@ void rdma_leave_multicast(struct rdma_cm_id *id, struct sockaddr *addr)
        id_priv = container_of(id, struct rdma_id_private, id);
        spin_lock_irq(&id_priv->lock);
        list_for_each_entry(mc, &id_priv->mc_list, list) {
-               if (!memcmp(&mc->addr, addr, ip_addr_size(addr))) {
+               if (!memcmp(&mc->addr, addr, rdma_addr_size(addr))) {
                        list_del(&mc->list);
                        spin_unlock_irq(&id_priv->lock);
 
index fa0d52b8e622cd55c0cc1f8f58e0e9e53231c969..9e0676989b6bc4554fbbd1a53c9c0b27e9d177fa 100644 (file)
@@ -99,11 +99,7 @@ void rdma_addr_cancel(struct rdma_dev_addr *addr);
 int rdma_copy_addr(struct rdma_dev_addr *dev_addr, struct net_device *dev,
              const unsigned char *dst_dev_addr);
 
-static inline int ip_addr_size(struct sockaddr *addr)
-{
-       return addr->sa_family == AF_INET6 ?
-              sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in);
-}
+int rdma_addr_size(struct sockaddr *addr);
 
 static inline u16 ib_addr_get_pkey(struct rdma_dev_addr *dev_addr)
 {