Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/rdma/ib.h
26278 views
1
/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2
/*
3
* Copyright (c) 2010 Intel Corporation. All rights reserved.
4
*/
5
6
#ifndef _RDMA_IB_H
7
#define _RDMA_IB_H
8
9
#include <linux/types.h>
10
#include <linux/sched.h>
11
#include <linux/cred.h>
12
#include <linux/uaccess.h>
13
#include <linux/fs.h>
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
31
static inline bool ib_addr_any(const struct ib_addr *a)
32
{
33
return ((a->sib_addr64[0] | a->sib_addr64[1]) == 0);
34
}
35
36
static inline bool ib_addr_loopback(const struct ib_addr *a)
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
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
{
78
return filp->f_cred == current_cred();
79
}
80
81
#endif /* _RDMA_IB_H */
82
83