Commit 8d36eb01da5d371feffa280e501377b5c450f5a5

Authored by Sean Hefty
Committed by Roland Dreier
1 parent fedaf4ffc2

RDMA/cma: Define native IB address

Define AF_IB and sockaddr_ib to allow the rdma_cm to use native IB
addressing.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>

Showing 2 changed files with 91 additions and 0 deletions Side-by-side Diff

include/linux/socket.h
... ... @@ -167,6 +167,7 @@
167 167 #define AF_PPPOX 24 /* PPPoX sockets */
168 168 #define AF_WANPIPE 25 /* Wanpipe API Sockets */
169 169 #define AF_LLC 26 /* Linux LLC */
  170 +#define AF_IB 27 /* Native InfiniBand address */
170 171 #define AF_CAN 29 /* Controller Area Network */
171 172 #define AF_TIPC 30 /* TIPC sockets */
172 173 #define AF_BLUETOOTH 31 /* Bluetooth sockets */
... ... @@ -211,6 +212,7 @@
211 212 #define PF_PPPOX AF_PPPOX
212 213 #define PF_WANPIPE AF_WANPIPE
213 214 #define PF_LLC AF_LLC
  215 +#define PF_IB AF_IB
214 216 #define PF_CAN AF_CAN
215 217 #define PF_TIPC AF_TIPC
216 218 #define PF_BLUETOOTH AF_BLUETOOTH
  1 +/*
  2 + * Copyright (c) 2010 Intel Corporation. All rights reserved.
  3 + *
  4 + * This software is available to you under a choice of one of two
  5 + * licenses. You may choose to be licensed under the terms of the GNU
  6 + * General Public License (GPL) Version 2, available from the file
  7 + * COPYING in the main directory of this source tree, or the
  8 + * OpenIB.org BSD license below:
  9 + *
  10 + * Redistribution and use in source and binary forms, with or
  11 + * without modification, are permitted provided that the following
  12 + * conditions are met:
  13 + *
  14 + * - Redistributions of source code must retain the above
  15 + * copyright notice, this list of conditions and the following
  16 + * disclaimer.
  17 + *
  18 + * - Redistributions in binary form must reproduce the above
  19 + * copyright notice, this list of conditions and the following
  20 + * disclaimer in the documentation and/or other materials
  21 + * provided with the distribution.
  22 + *
  23 + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24 + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25 + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26 + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27 + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28 + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29 + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30 + * SOFTWARE.
  31 + */
  32 +
  33 +#if !defined(_RDMA_IB_H)
  34 +#define _RDMA_IB_H
  35 +
  36 +#include <linux/types.h>
  37 +
  38 +struct ib_addr {
  39 + union {
  40 + __u8 uib_addr8[16];
  41 + __be16 uib_addr16[8];
  42 + __be32 uib_addr32[4];
  43 + __be64 uib_addr64[2];
  44 + } ib_u;
  45 +#define sib_addr8 ib_u.uib_addr8
  46 +#define sib_addr16 ib_u.uib_addr16
  47 +#define sib_addr32 ib_u.uib_addr32
  48 +#define sib_addr64 ib_u.uib_addr64
  49 +#define sib_raw ib_u.uib_addr8
  50 +#define sib_subnet_prefix ib_u.uib_addr64[0]
  51 +#define sib_interface_id ib_u.uib_addr64[1]
  52 +};
  53 +
  54 +static inline int ib_addr_any(const struct ib_addr *a)
  55 +{
  56 + return ((a->sib_addr64[0] | a->sib_addr64[1]) == 0);
  57 +}
  58 +
  59 +static inline int ib_addr_loopback(const struct ib_addr *a)
  60 +{
  61 + return ((a->sib_addr32[0] | a->sib_addr32[1] |
  62 + a->sib_addr32[2] | (a->sib_addr32[3] ^ htonl(1))) == 0);
  63 +}
  64 +
  65 +static inline void ib_addr_set(struct ib_addr *addr,
  66 + __be32 w1, __be32 w2, __be32 w3, __be32 w4)
  67 +{
  68 + addr->sib_addr32[0] = w1;
  69 + addr->sib_addr32[1] = w2;
  70 + addr->sib_addr32[2] = w3;
  71 + addr->sib_addr32[3] = w4;
  72 +}
  73 +
  74 +static inline int ib_addr_cmp(const struct ib_addr *a1, const struct ib_addr *a2)
  75 +{
  76 + return memcmp(a1, a2, sizeof(struct ib_addr));
  77 +}
  78 +
  79 +struct sockaddr_ib {
  80 + unsigned short int sib_family; /* AF_IB */
  81 + __be16 sib_pkey;
  82 + __be32 sib_flowinfo;
  83 + struct ib_addr sib_addr;
  84 + __be64 sib_sid;
  85 + __be64 sib_sid_mask;
  86 + __u64 sib_scope_id;
  87 +};
  88 +
  89 +#endif /* _RDMA_IB_H */