2447c8479f
Adapt to moving down to OPAL: find a PML-registered error callback, and use that when we don't have a module context and we need to abort. Failing that, just call exit(). This commit was SVN r32362.
121 строка
2.8 KiB
C
121 строка
2.8 KiB
C
/*
|
|
* Copyright (c) 2013-2014 Cisco Systems, Inc. All rights reserved.
|
|
* $COPYRIGHT$
|
|
*
|
|
* Additional copyrights may follow
|
|
*
|
|
* $HEADER$
|
|
*/
|
|
|
|
#ifndef BTL_USNIC_UTIL_H
|
|
#define BTL_USNIC_UTIL_H
|
|
|
|
#include "opal/datatype/opal_convertor.h"
|
|
|
|
#include "btl_usnic.h"
|
|
#include "btl_usnic_module.h"
|
|
|
|
#ifndef MIN
|
|
# define MIN(a,b) ((a) < (b) ? (a) : (b))
|
|
#endif
|
|
|
|
/* avoid "defined but not used" warnings */
|
|
static inline int __opal_attribute_always_inline__ usnic_fls(int x)
|
|
__opal_attribute_unused__;
|
|
|
|
static inline int __opal_attribute_always_inline__ usnic_fls(int x)
|
|
{
|
|
int r = 32;
|
|
|
|
if (!x) {
|
|
return 0;
|
|
}
|
|
if (!(x & 0xffff0000u)) {
|
|
x <<= 16;
|
|
r -= 16;
|
|
}
|
|
if (!(x & 0xff000000u)) {
|
|
x <<= 8;
|
|
r -= 8;
|
|
}
|
|
if (!(x & 0xf0000000u)) {
|
|
x <<= 4;
|
|
r -= 4;
|
|
}
|
|
if (!(x & 0xc0000000u)) {
|
|
x <<= 2;
|
|
r -= 2;
|
|
}
|
|
if (!(x & 0x80000000u)) {
|
|
r -= 1;
|
|
}
|
|
return r;
|
|
}
|
|
|
|
/* a helper function that just declutters convertor packing */
|
|
static inline void
|
|
usnic_convertor_pack_simple(
|
|
opal_convertor_t *convertor,
|
|
void *dest,
|
|
size_t max_bytes_to_pack,
|
|
size_t *bytes_packed)
|
|
{
|
|
int rc;
|
|
struct iovec iov;
|
|
uint32_t iov_count;
|
|
|
|
iov.iov_base = (IOVBASE_TYPE*)dest;
|
|
iov.iov_len = max_bytes_to_pack;
|
|
iov_count = 1;
|
|
*bytes_packed = max_bytes_to_pack;
|
|
rc = opal_convertor_pack(convertor, &iov, &iov_count, bytes_packed);
|
|
if (OPAL_UNLIKELY(rc < 0)) {
|
|
BTL_ERROR(("opal_convertor_pack error"));
|
|
abort(); /* XXX */
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Safely (but abnornmally) exit this process without abort()'ing (and
|
|
* leaving a corefile).
|
|
*/
|
|
void opal_btl_usnic_exit(opal_btl_usnic_module_t *module);
|
|
|
|
/*
|
|
* Long enough to hold "xxx.xxx.xxx.xxx/xx"
|
|
*/
|
|
#define IPV4STRADDRLEN 20
|
|
|
|
/*
|
|
* Long enough to hold "xx:xx:xx:xx:xx:xx"
|
|
*/
|
|
#define MACSTRLEN 18
|
|
|
|
/*
|
|
* If cidrmask==0, it is not included in the output string. addr is
|
|
* expected to be in network byte order.
|
|
*/
|
|
void opal_btl_usnic_snprintf_ipv4_addr(char *out, size_t maxlen,
|
|
uint32_t addr, uint32_t cidrmask);
|
|
|
|
void opal_btl_usnic_sprintf_mac(char *out, const uint8_t mac[6]);
|
|
|
|
void opal_btl_usnic_sprintf_gid_mac(char *out, union ibv_gid *gid);
|
|
|
|
void opal_btl_usnic_snprintf_bool_array(char *s, size_t slen, bool a[], size_t alen);
|
|
|
|
int opal_btl_usnic_find_ip(opal_btl_usnic_module_t *module, uint8_t mac[6]);
|
|
|
|
void opal_btl_usnic_gid_to_mac(union ibv_gid *gid, uint8_t mac[6]);
|
|
|
|
void opal_btl_usnic_dump_hex(uint8_t *addr, int len);
|
|
|
|
uint32_t opal_btl_usnic_get_ipv4_subnet(uint32_t addrn, uint32_t cidr_len);
|
|
|
|
void opal_btl_usnic_util_abort(const char *msg, const char *file, int line);
|
|
|
|
size_t opal_btl_usnic_convertor_pack_peek(const opal_convertor_t *conv,
|
|
size_t max_len);
|
|
|
|
#endif /* BTL_USNIC_UTIL_H */
|