This source file includes following definitions.
- usnic_fls
- usnic_convertor_pack_simple
- usnic_netmask_to_cidrlen
- usnic_cidrlen_to_netmask
1
2
3
4
5
6
7
8
9
10 #ifndef BTL_USNIC_UTIL_H
11 #define BTL_USNIC_UTIL_H
12
13 #include "opal/datatype/opal_convertor.h"
14
15 #include "btl_usnic.h"
16
17 #ifndef MIN
18 # define MIN(a,b) ((a) < (b) ? (a) : (b))
19 #endif
20
21
22
23
24
25 struct opal_btl_usnic_module_t;
26 void opal_btl_usnic_exit(struct opal_btl_usnic_module_t *module);
27
28
29
30
31 void opal_btl_usnic_util_abort(const char *msg, const char *file, int line);
32
33
34
35
36 #define IPV4STRADDRLEN 20
37
38
39
40
41
42 void opal_btl_usnic_snprintf_ipv4_addr(char *out, size_t maxlen,
43 uint32_t addr_be, uint32_t netmask_be);
44
45 void opal_btl_usnic_snprintf_bool_array(char *s, size_t slen, bool a[], size_t alen);
46
47 void opal_btl_usnic_dump_hex(int verbose_level, int output_id,
48 void *vaddr, int len);
49
50 size_t opal_btl_usnic_convertor_pack_peek(const opal_convertor_t *conv,
51 size_t max_len);
52
53
54 static inline int __opal_attribute_always_inline__ usnic_fls(int x)
55 __opal_attribute_unused__;
56
57 static inline int __opal_attribute_always_inline__ usnic_fls(int x)
58 {
59 int r = 32;
60
61 if (!x) {
62 return 0;
63 }
64 if (!(x & 0xffff0000u)) {
65 x <<= 16;
66 r -= 16;
67 }
68 if (!(x & 0xff000000u)) {
69 x <<= 8;
70 r -= 8;
71 }
72 if (!(x & 0xf0000000u)) {
73 x <<= 4;
74 r -= 4;
75 }
76 if (!(x & 0xc0000000u)) {
77 x <<= 2;
78 r -= 2;
79 }
80 if (!(x & 0x80000000u)) {
81 r -= 1;
82 }
83 return r;
84 }
85
86
87 static inline void
88 usnic_convertor_pack_simple(
89 opal_convertor_t *convertor,
90 void *dest,
91 size_t max_bytes_to_pack,
92 size_t *bytes_packed)
93 {
94 int rc;
95 struct iovec iov;
96 uint32_t iov_count;
97
98 iov.iov_base = (IOVBASE_TYPE*)dest;
99 iov.iov_len = max_bytes_to_pack;
100 iov_count = 1;
101 *bytes_packed = max_bytes_to_pack;
102 rc = opal_convertor_pack(convertor, &iov, &iov_count, bytes_packed);
103 if (OPAL_UNLIKELY(rc < 0)) {
104 opal_btl_usnic_util_abort("opal_convertor_pack error", __FILE__, __LINE__);
105 }
106 }
107
108 static inline int
109 usnic_netmask_to_cidrlen(
110 uint32_t netmask_be)
111 {
112 return 33 - ffs(ntohl(netmask_be));
113 }
114
115 static inline uint32_t
116 usnic_cidrlen_to_netmask(
117 int cidrlen)
118 {
119 uint32_t mask;
120
121 mask = ~0 << (32 - cidrlen);
122 return htonl(mask);
123 }
124
125 #endif