Commit 8d36eb01da5d371feffa280e501377b5c450f5a5
Committed by
Roland Dreier
1 parent
fedaf4ffc2
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
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 |
include/rdma/ib.h
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 */ |