]> 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>
Sat, 7 Jan 2012 00:49:52 +0000 (16:49 -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 e9cf51b1343ba520d8928367a1eca80f9f531657..37aa3b246f3a6997c5501cd0c3ae6d28f6e359b1 100644 (file)
@@ -45,6 +45,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");
@@ -70,6 +71,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);
@@ -372,12 +388,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 336a67d54049bf4c4bd2ed594915cf990ad9fd31..5979b4a1f0606d8567507821763278dbfc84785f 100644 (file)
@@ -1572,7 +1572,7 @@ static void cma_listen_on_dev(struct rdma_id_private *id_priv,
 
        dev_id_priv->state = RDMA_CM_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);
@@ -1973,7 +1973,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;
        }
 
@@ -2063,7 +2063,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
@@ -2372,7 +2372,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;
@@ -3143,7 +3143,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;
 
@@ -3188,7 +3188,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 99965395c5f3a5cebb645a67f76681985ce3da84..f3ac0f2c4c66f46cfbd36d16e6588ba121f90832 100644 (file)
@@ -102,11 +102,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)
 {