Commit | Line | Data |
---|---|---|
6bf9d8f6 | 1 | /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ |
8d36eb01 SH |
2 | /* |
3 | * Copyright (c) 2010 Intel Corporation. All rights reserved. | |
8d36eb01 SH |
4 | */ |
5 | ||
6bf9d8f6 | 6 | #ifndef _RDMA_IB_H |
8d36eb01 SH |
7 | #define _RDMA_IB_H |
8 | ||
9 | #include <linux/types.h> | |
e6bd18f5 | 10 | #include <linux/sched.h> |
5b825c3a | 11 | #include <linux/cred.h> |
39289bfc JG |
12 | #include <linux/uaccess.h> |
13 | #include <linux/fs.h> | |
8d36eb01 SH |
14 | |
15 | struct ib_addr { | |
16 | union { | |
17 | __u8 uib_addr8[16]; | |
18 | __be16 uib_addr16[8]; | |
19 | __be32 uib_addr32[4]; | |
20 | __be64 uib_addr64[2]; | |
21 | } ib_u; | |
22 | #define sib_addr8 ib_u.uib_addr8 | |
23 | #define sib_addr16 ib_u.uib_addr16 | |
24 | #define sib_addr32 ib_u.uib_addr32 | |
25 | #define sib_addr64 ib_u.uib_addr64 | |
26 | #define sib_raw ib_u.uib_addr8 | |
27 | #define sib_subnet_prefix ib_u.uib_addr64[0] | |
28 | #define sib_interface_id ib_u.uib_addr64[1] | |
29 | }; | |
30 | ||
ca3a8ace | 31 | static inline bool ib_addr_any(const struct ib_addr *a) |
8d36eb01 SH |
32 | { |
33 | return ((a->sib_addr64[0] | a->sib_addr64[1]) == 0); | |
34 | } | |
35 | ||
ca3a8ace | 36 | static inline bool ib_addr_loopback(const struct ib_addr *a) |
8d36eb01 SH |
37 | { |
38 | return ((a->sib_addr32[0] | a->sib_addr32[1] | | |
39 | a->sib_addr32[2] | (a->sib_addr32[3] ^ htonl(1))) == 0); | |
40 | } | |
41 | ||
42 | static inline void ib_addr_set(struct ib_addr *addr, | |
43 | __be32 w1, __be32 w2, __be32 w3, __be32 w4) | |
44 | { | |
45 | addr->sib_addr32[0] = w1; | |
46 | addr->sib_addr32[1] = w2; | |
47 | addr->sib_addr32[2] = w3; | |
48 | addr->sib_addr32[3] = w4; | |
49 | } | |
50 | ||
51 | static inline int ib_addr_cmp(const struct ib_addr *a1, const struct ib_addr *a2) | |
52 | { | |
53 | return memcmp(a1, a2, sizeof(struct ib_addr)); | |
54 | } | |
55 | ||
56 | struct sockaddr_ib { | |
57 | unsigned short int sib_family; /* AF_IB */ | |
58 | __be16 sib_pkey; | |
59 | __be32 sib_flowinfo; | |
60 | struct ib_addr sib_addr; | |
61 | __be64 sib_sid; | |
62 | __be64 sib_sid_mask; | |
63 | __u64 sib_scope_id; | |
64 | }; | |
65 | ||
e6bd18f5 JG |
66 | /* |
67 | * The IB interfaces that use write() as bi-directional ioctl() are | |
68 | * fundamentally unsafe, since there are lots of ways to trigger "write()" | |
69 | * calls from various contexts with elevated privileges. That includes the | |
70 | * traditional suid executable error message writes, but also various kernel | |
71 | * interfaces that can write to file descriptors. | |
72 | * | |
73 | * This function provides protection for the legacy API by restricting the | |
74 | * calling context. | |
75 | */ | |
76 | static inline bool ib_safe_file_access(struct file *filp) | |
77 | { | |
967747bb | 78 | return filp->f_cred == current_cred(); |
e6bd18f5 JG |
79 | } |
80 | ||
8d36eb01 | 81 | #endif /* _RDMA_IB_H */ |