2 * Copyright (c) 2004-2007 Voltaire Inc. All rights reserved.
\r
4 * This software is available to you under the OpenFabrics.org BSD license
\r
7 * Redistribution and use in source and binary forms, with or
\r
8 * without modification, are permitted provided that the following
\r
9 * conditions are met:
\r
11 * - Redistributions of source code must retain the above
\r
12 * copyright notice, this list of conditions and the following
\r
15 * - Redistributions in binary form must reproduce the above
\r
16 * copyright notice, this list of conditions and the following
\r
17 * disclaimer in the documentation and/or other materials
\r
18 * provided with the distribution.
\r
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
\r
21 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
\r
22 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AWV
\r
23 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
\r
24 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
\r
25 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
\r
26 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
\r
33 /* use complib for portability */
\r
34 #include <complib/cl_types.h>
\r
35 #include <complib/cl_byteswap.h>
\r
36 #include <complib/cl_debug.h>
\r
39 # define BEGIN_C_DECLS extern "C" {
\r
40 # define END_C_DECLS }
\r
41 #else /* !__cplusplus */
\r
42 # define BEGIN_C_DECLS
\r
43 # define END_C_DECLS
\r
44 #endif /* __cplusplus */
\r
48 #if defined(_WIN32) || defined(_WIN64)
\r
49 #define MAD_EXPORT __declspec(dllexport)
\r
51 #define MAD_EXPORT extern
\r
54 #define IB_SUBNET_PATH_HOPS_MAX 64
\r
55 #define IB_DEFAULT_SUBN_PREFIX 0xfe80000000000000ULL
\r
56 #define IB_DEFAULT_QP1_QKEY 0x80010000
\r
58 #define IB_MAD_SIZE 256
\r
60 #define IB_SMP_DATA_OFFS 64
\r
61 #define IB_SMP_DATA_SIZE 64
\r
63 #define IB_VENDOR_RANGE1_DATA_OFFS 24
\r
64 #define IB_VENDOR_RANGE1_DATA_SIZE (IB_MAD_SIZE - IB_VENDOR_RANGE1_DATA_OFFS)
\r
66 #define IB_VENDOR_RANGE2_DATA_OFFS 40
\r
67 #define IB_VENDOR_RANGE2_DATA_SIZE (IB_MAD_SIZE - IB_VENDOR_RANGE2_DATA_OFFS)
\r
69 #define IB_SA_DATA_SIZE 200
\r
70 #define IB_SA_DATA_OFFS 56
\r
72 #define IB_PC_DATA_OFFS 64
\r
73 #define IB_PC_DATA_SZ (IB_MAD_SIZE - IB_PC_DATA_OFFS)
\r
75 #define IB_SA_MCM_RECSZ 53
\r
76 #define IB_SA_PR_RECSZ 64
\r
80 IB_SMI_DIRECT_CLASS = 0x81,
\r
82 IB_PERFORMANCE_CLASS = 0x4,
\r
83 IB_BOARD_MGMT_CLASS = 0x5,
\r
84 IB_DEVICE_MGMT_CLASS = 0x6,
\r
86 IB_SNMP_CLASS = 0x8,
\r
87 IB_VENDOR_RANGE1_START_CLASS = 0x9,
\r
88 IB_VENDOR_RANGE1_END_CLASS = 0x0f,
\r
90 IB_VENDOR_RANGE2_START_CLASS = 0x30,
\r
91 IB_VENDOR_RANGE2_END_CLASS = 0x4f,
\r
95 IB_MAD_METHOD_GET = 0x1,
\r
96 IB_MAD_METHOD_SET = 0x2,
\r
97 IB_MAD_METHOD_GET_RESPONSE = 0x81,
\r
99 IB_MAD_METHOD_SEND = 0x3,
\r
100 IB_MAD_METHOD_TRAP = 0x5,
\r
101 IB_MAD_METHOD_TRAP_REPRESS = 0x7,
\r
103 IB_MAD_METHOD_REPORT = 0x6,
\r
104 IB_MAD_METHOD_REPORT_RESPONSE = 0x86,
\r
105 IB_MAD_METHOD_GET_TABLE = 0x12,
\r
106 IB_MAD_METHOD_GET_TABLE_RESPONSE = 0x92,
\r
107 IB_MAD_METHOD_GET_TRACE_TABLE = 0x13,
\r
108 IB_MAD_METHOD_GET_TRACE_TABLE_RESPONSE = 0x93,
\r
109 IB_MAD_METHOD_GETMULTI = 0x14,
\r
110 IB_MAD_METHOD_GETMULTI_RESPONSE = 0x94,
\r
111 IB_MAD_METHOD_DELETE = 0x15,
\r
112 IB_MAD_METHOD_DELETE_RESPONSE = 0x95,
\r
114 IB_MAD_RESPONSE = 0x80,
\r
118 CLASS_PORT_INFO = 0x1,
\r
124 IB_ATTR_NODE_DESC = 0x10,
\r
125 IB_ATTR_NODE_INFO = 0x11,
\r
126 IB_ATTR_SWITCH_INFO = 0x12,
\r
127 IB_ATTR_GUID_INFO = 0x14,
\r
128 IB_ATTR_PORT_INFO = 0x15,
\r
129 IB_ATTR_PKEY_TBL = 0x16,
\r
130 IB_ATTR_SLVL_TABLE = 0x17,
\r
131 IB_ATTR_VL_ARBITRATION = 0x18,
\r
132 IB_ATTR_LINEARFORWTBL = 0x19,
\r
133 IB_ATTR_MULTICASTFORWTBL = 0x1b,
\r
134 IB_ATTR_SMINFO = 0x20,
\r
140 IB_SA_ATTR_NOTICE = 0x02,
\r
141 IB_SA_ATTR_INFORMINFO = 0x03,
\r
142 IB_SA_ATTR_PORTINFORECORD = 0x12,
\r
143 IB_SA_ATTR_LINKRECORD = 0x20,
\r
144 IB_SA_ATTR_SERVICERECORD = 0x31,
\r
145 IB_SA_ATTR_PATHRECORD = 0x35,
\r
146 IB_SA_ATTR_MCRECORD = 0x38,
\r
147 IB_SA_ATTR_MULTIPATH = 0x3a,
\r
153 IB_GSI_PORT_SAMPLES_CONTROL = 0x10,
\r
154 IB_GSI_PORT_SAMPLES_RESULT = 0x11,
\r
155 IB_GSI_PORT_COUNTERS = 0x12,
\r
156 IB_GSI_PORT_COUNTERS_EXT = 0x1D,
\r
161 #define IB_VENDOR_OPENIB_PING_CLASS (IB_VENDOR_RANGE2_START_CLASS + 2)
\r
162 #define IB_VENDOR_OPENIB_SYSSTAT_CLASS (IB_VENDOR_RANGE2_START_CLASS + 3)
\r
163 #define IB_OPENIB_OUI (0x001405)
\r
165 typedef uint8_t ibmad_gid_t[16];
\r
166 #ifdef USE_DEPRECATED_IB_GID_T
\r
167 typedef ibmad_gid_t ib_gid_t __attribute__((deprecated));
\r
172 uint8_t p[IB_SUBNET_PATH_HOPS_MAX];
\r
186 uint32_t rstatus; /* return status */
\r
190 uint64_t trid; /* used for out mad if nonzero, return real val */
\r
191 uint64_t mask; /* for sa mads */
\r
192 unsigned recsz; /* for sa mads (attribute offset) */
\r
194 uint32_t oui; /* for vendor range 2 mads */
\r
197 typedef struct portid {
\r
198 int lid; /* lid or 0 if directed route */
\r
199 ib_dr_path_t drpath;
\r
200 int grh_present; /* flag */
\r
208 typedef void (ib_mad_dump_fn)(char *buf, int bufsz, void *val, int valsz);
\r
210 #define IB_FIELD_NAME_LEN 32
\r
212 typedef struct ib_field {
\r
215 char name[IB_FIELD_NAME_LEN];
\r
216 ib_mad_dump_fn *def_dump_fn;
\r
225 /* first MAD word (0-3 bytes) */
\r
229 IB_MAD_MGMTCLASS_F,
\r
232 /* second MAD word (4-7 bytes) */
\r
239 IB_DRSMP_DIRECTION_F,
\r
241 /* words 3,4,5,6 (8-23 bytes) */
\r
246 /* word 7,8 (24-31 bytes) */
\r
249 /* word 9 (32-37 bytes) */
\r
253 /* word 10,11 (36-43 bytes) */
\r
256 /* word 12 (44-47 bytes) */
\r
259 /* word 13,14 (48-55 bytes) */
\r
262 /* word 13,14 (56-255 bytes) */
\r
265 /* bytes 64 - 127 */
\r
268 /* bytes 64 - 256 */
\r
271 /* bytes 128 - 191 */
\r
274 /* bytes 192 - 255 */
\r
281 IB_PORT_MKEY_F = IB_PORT_FIRST_F,
\r
282 IB_PORT_GID_PREFIX_F,
\r
287 IB_PORT_MKEY_LEASE_F,
\r
288 IB_PORT_LOCAL_PORT_F,
\r
289 IB_PORT_LINK_WIDTH_ENABLED_F,
\r
290 IB_PORT_LINK_WIDTH_SUPPORTED_F,
\r
291 IB_PORT_LINK_WIDTH_ACTIVE_F,
\r
292 IB_PORT_LINK_SPEED_SUPPORTED_F,
\r
294 IB_PORT_PHYS_STATE_F,
\r
295 IB_PORT_LINK_DOWN_DEF_F,
\r
296 IB_PORT_MKEY_PROT_BITS_F,
\r
298 IB_PORT_LINK_SPEED_ACTIVE_F,
\r
299 IB_PORT_LINK_SPEED_ENABLED_F,
\r
300 IB_PORT_NEIGHBOR_MTU_F,
\r
303 IB_PORT_INIT_TYPE_F,
\r
304 IB_PORT_VL_HIGH_LIMIT_F,
\r
305 IB_PORT_VL_ARBITRATION_HIGH_CAP_F,
\r
306 IB_PORT_VL_ARBITRATION_LOW_CAP_F,
\r
307 IB_PORT_INIT_TYPE_REPLY_F,
\r
309 IB_PORT_VL_STALL_COUNT_F,
\r
310 IB_PORT_HOQ_LIFE_F,
\r
311 IB_PORT_OPER_VLS_F,
\r
312 IB_PORT_PART_EN_INB_F,
\r
313 IB_PORT_PART_EN_OUTB_F,
\r
314 IB_PORT_FILTER_RAW_INB_F,
\r
315 IB_PORT_FILTER_RAW_OUTB_F,
\r
316 IB_PORT_MKEY_VIOL_F,
\r
317 IB_PORT_PKEY_VIOL_F,
\r
318 IB_PORT_QKEY_VIOL_F,
\r
319 IB_PORT_GUID_CAP_F,
\r
320 IB_PORT_CLIENT_REREG_F,
\r
321 IB_PORT_SUBN_TIMEOUT_F,
\r
322 IB_PORT_RESP_TIME_VAL_F,
\r
323 IB_PORT_LOCAL_PHYS_ERR_F,
\r
324 IB_PORT_OVERRUN_ERR_F,
\r
325 IB_PORT_MAX_CREDIT_HINT_F,
\r
326 IB_PORT_LINK_ROUND_TRIP_F,
\r
333 IB_NODE_BASE_VERS_F = IB_NODE_FIRST_F,
\r
334 IB_NODE_CLASS_VERS_F,
\r
337 IB_NODE_SYSTEM_GUID_F,
\r
339 IB_NODE_PORT_GUID_F,
\r
340 IB_NODE_PARTITION_CAP_F,
\r
342 IB_NODE_REVISION_F,
\r
343 IB_NODE_LOCAL_PORT_F,
\r
344 IB_NODE_VENDORID_F,
\r
348 * SwitchInfo fields:
\r
351 IB_SW_LINEAR_FDB_CAP_F = IB_SW_FIRST_F,
\r
352 IB_SW_RANDOM_FDB_CAP_F,
\r
353 IB_SW_MCAST_FDB_CAP_F,
\r
354 IB_SW_LINEAR_FDB_TOP_F,
\r
356 IB_SW_DEF_MCAST_PRIM_F,
\r
357 IB_SW_DEF_MCAST_NOT_PRIM_F,
\r
359 IB_SW_STATE_CHANGE_F,
\r
360 IB_SW_LIDS_PER_PORT_F,
\r
361 IB_SW_PARTITION_ENFORCE_CAP_F,
\r
362 IB_SW_PARTITION_ENF_INB_F,
\r
363 IB_SW_PARTITION_ENF_OUTB_F,
\r
364 IB_SW_FILTER_RAW_INB_F,
\r
365 IB_SW_FILTER_RAW_OUTB_F,
\r
366 IB_SW_ENHANCED_PORT0_F,
\r
370 * SwitchLinearForwardingTable fields:
\r
372 IB_LINEAR_FORW_TBL_F,
\r
375 * SwitchMulticastForwardingTable fields:
\r
377 IB_MULTICAST_FORW_TBL_F,
\r
380 * NodeDescription fields:
\r
385 * Notice/Trap fields
\r
387 IB_NOTICE_IS_GENERIC_F,
\r
389 IB_NOTICE_PRODUCER_F,
\r
390 IB_NOTICE_TRAP_NUMBER_F,
\r
391 IB_NOTICE_ISSUER_LID_F,
\r
392 IB_NOTICE_TOGGLE_F,
\r
394 IB_NOTICE_DATA_DETAILS_F,
\r
395 IB_NOTICE_DATA_LID_F,
\r
396 IB_NOTICE_DATA_144_LID_F,
\r
397 IB_NOTICE_DATA_144_CAPMASK_F,
\r
403 IB_PC_PORT_SELECT_F = IB_PC_FIRST_F,
\r
404 IB_PC_COUNTER_SELECT_F,
\r
406 IB_PC_LINK_RECOVERS_F,
\r
407 IB_PC_LINK_DOWNED_F,
\r
409 IB_PC_ERR_PHYSRCV_F,
\r
410 IB_PC_ERR_SWITCH_REL_F,
\r
411 IB_PC_XMT_DISCARDS_F,
\r
412 IB_PC_ERR_XMTCONSTR_F,
\r
413 IB_PC_ERR_RCVCONSTR_F,
\r
414 IB_PC_ERR_LOCALINTEG_F,
\r
415 IB_PC_ERR_EXCESS_OVR_F,
\r
416 IB_PC_VL15_DROPPED_F,
\r
438 IB_SA_RMPP_FLAGS_F,
\r
439 IB_SA_RMPP_STATUS_F,
\r
443 IB_SA_RMPP_SEGNUM_F,
\r
446 IB_SA_RMPP_LEN_F, /* DATA: Payload len */
\r
447 IB_SA_RMPP_NEWWIN_F, /* ACK: new window last */
\r
450 * SA Multi Path rec
\r
470 IB_SA_MCM_PORTGID_F,
\r
476 IB_SA_MCM_TCLASS_F,
\r
478 IB_SA_MCM_FLOW_LABEL_F,
\r
479 IB_SA_MCM_JOIN_STATE_F,
\r
480 IB_SA_MCM_PROXY_JOIN_F,
\r
494 * ATS SM record - within SA_SR_DATA
\r
496 IB_ATS_SM_NODE_ADDR_F,
\r
497 IB_ATS_SM_MAGIC_KEY_F,
\r
498 IB_ATS_SM_NODE_TYPE_F,
\r
499 IB_ATS_SM_NODE_NAME_F,
\r
502 * SLTOVL MAPPING TABLE
\r
504 IB_SLTOVL_MAPPING_TABLE_F,
\r
507 * VL ARBITRATION TABLE
\r
509 IB_VL_ARBITRATION_TABLE_F,
\r
512 * IB vendor class range 2
\r
518 * PortCountersExtended
\r
521 IB_PC_EXT_PORT_SELECT_F = IB_PC_EXT_FIRST_F,
\r
522 IB_PC_EXT_COUNTER_SELECT_F,
\r
523 IB_PC_EXT_XMT_BYTES_F,
\r
524 IB_PC_EXT_RCV_BYTES_F,
\r
525 IB_PC_EXT_XMT_PKTS_F,
\r
526 IB_PC_EXT_RCV_PKTS_F,
\r
527 IB_PC_EXT_XMT_UPKTS_F,
\r
528 IB_PC_EXT_RCV_UPKTS_F,
\r
529 IB_PC_EXT_XMT_MPKTS_F,
\r
530 IB_PC_EXT_RCV_MPKTS_F,
\r
538 IB_FIELD_LAST_ /* must be last */
\r
544 enum RMPP_TYPE_ENUM {
\r
549 IB_RMPP_TYPE_ABORT,
\r
552 enum RMPP_FLAGS_ENUM {
\r
553 IB_RMPP_FLAG_ACTIVE = 1 << 0,
\r
554 IB_RMPP_FLAG_FIRST = 1 << 1,
\r
555 IB_RMPP_FLAG_LAST = 1 << 2,
\r
573 enum SA_SIZES_ENUM {
\r
577 typedef struct ib_sa_call {
\r
583 uint64_t trid; /* used for out mad if nonzero, return real val */
\r
584 unsigned recsz; /* return field */
\r
585 ib_rmpp_hdr_t rmpp;
\r
588 typedef struct ib_vendor_call {
\r
590 unsigned mgmt_class;
\r
595 ib_rmpp_hdr_t rmpp;
\r
596 } ib_vendor_call_t;
\r
598 #define IB_MIN_UCAST_LID 1
\r
599 #define IB_MAX_UCAST_LID (0xc000-1)
\r
600 #define IB_MIN_MCAST_LID 0xc000
\r
601 #define IB_MAX_MCAST_LID (0xffff-1)
\r
603 #define IB_LID_VALID(lid) ((lid) >= IB_MIN_UCAST_LID && lid <= IB_MAX_UCAST_LID)
\r
604 #define IB_MLID_VALID(lid) ((lid) >= IB_MIN_MCAST_LID && lid <= IB_MAX_MCAST_LID)
\r
606 #define MAD_DEF_RETRIES 3
\r
607 #define MAD_DEF_TIMEOUT_MS 1000
\r
622 IB_NODE_MAX = NODE_RNIC
\r
625 /******************************************************************************/
\r
628 MAD_EXPORT char * portid2str(ib_portid_t *portid);
\r
629 MAD_EXPORT int portid2portnum(ib_portid_t *portid);
\r
630 MAD_EXPORT int str2drpath(ib_dr_path_t *path, char *routepath, int drslid, int drdlid);
\r
631 MAD_EXPORT char * drpath2str(ib_dr_path_t *path, char *dstr, size_t dstr_size);
\r
634 ib_portid_set(ib_portid_t *portid, int lid, int qp, int qkey)
\r
638 portid->qkey = qkey;
\r
639 portid->grh_present = 0;
\r
645 extern ib_field_t ib_mad_f[];
\r
647 void _set_field(void *buf, int base_offs, ib_field_t *f, uint32_t val);
\r
648 uint32_t _get_field(void *buf, int base_offs, ib_field_t *f);
\r
649 void _set_array(void *buf, int base_offs, ib_field_t *f, void *val);
\r
650 void _get_array(void *buf, int base_offs, ib_field_t *f, void *val);
\r
651 void _set_field64(void *buf, int base_offs, ib_field_t *f, uint64_t val);
\r
652 uint64_t _get_field64(void *buf, int base_offs, ib_field_t *f);
\r
655 MAD_EXPORT uint32_t mad_get_field(void *buf, int base_offs, int field);
\r
656 MAD_EXPORT void mad_set_field(void *buf, int base_offs, int field, uint32_t val);
\r
657 /* field must be byte aligned */
\r
658 MAD_EXPORT uint64_t mad_get_field64(void *buf, int base_offs, int field);
\r
659 MAD_EXPORT void mad_set_field64(void *buf, int base_offs, int field, uint64_t val);
\r
660 MAD_EXPORT void mad_set_array(void *buf, int base_offs, int field, void *val);
\r
661 MAD_EXPORT void mad_get_array(void *buf, int base_offs, int field, void *val);
\r
662 MAD_EXPORT void mad_decode_field(uint8_t *buf, int field, void *val);
\r
663 MAD_EXPORT void mad_encode_field(uint8_t *buf, int field, void *val);
\r
664 MAD_EXPORT void *mad_encode(void *buf, ib_rpc_t *rpc, ib_dr_path_t *drpath, void *data);
\r
665 MAD_EXPORT uint64_t mad_trid(void);
\r
666 MAD_EXPORT int mad_build_pkt(void *umad, ib_rpc_t *rpc, ib_portid_t *dport,
\r
667 ib_rmpp_hdr_t *rmpp, void *data);
\r
670 MAD_EXPORT int mad_register_port_client(int port_id, int mgmt,
\r
671 uint8_t rmpp_version);
\r
672 MAD_EXPORT int mad_register_client(int mgmt, uint8_t rmpp_version);
\r
673 MAD_EXPORT int mad_register_server(int mgmt, uint8_t rmpp_version,
\r
674 long method_mask[16/sizeof(long)],
\r
675 uint32_t class_oui);
\r
676 MAD_EXPORT int mad_class_agent(int mgmt);
\r
677 MAD_EXPORT int mad_agent_class(int agent);
\r
680 MAD_EXPORT int mad_send(ib_rpc_t *rpc, ib_portid_t *dport,
\r
681 ib_rmpp_hdr_t *rmpp, void *data);
\r
682 MAD_EXPORT void * mad_receive(void *umad, int timeout);
\r
683 MAD_EXPORT int mad_respond(void *umad, ib_portid_t *portid, uint32_t rstatus);
\r
684 MAD_EXPORT void * mad_alloc(void);
\r
685 MAD_EXPORT void mad_free(void *umad);
\r
688 MAD_EXPORT uint8_t *ib_vendor_call(void *data, ib_portid_t *portid,
\r
689 ib_vendor_call_t *call);
\r
692 mad_is_vendor_range1(int mgmt)
\r
694 return mgmt >= 0x9 && mgmt <= 0xf;
\r
698 mad_is_vendor_range2(int mgmt)
\r
700 return mgmt >= 0x30 && mgmt <= 0x4f;
\r
704 MAD_EXPORT int madrpc_portid(void);
\r
705 MAD_EXPORT int madrpc_set_retries(int retries);
\r
706 MAD_EXPORT int madrpc_set_timeout(int timeout);
\r
707 MAD_EXPORT void madrpc_init(char *dev_name, int dev_port,
\r
708 int *mgmt_classes, int num_classes);
\r
709 MAD_EXPORT void madrpc_show_errors(int set);
\r
710 void * madrpc(ib_rpc_t *rpc, ib_portid_t *dport,
\r
711 void *payload, void *rcvdata);
\r
712 void * madrpc_rmpp(ib_rpc_t *rpc, ib_portid_t *dport,
\r
713 ib_rmpp_hdr_t *rmpp, void *data);
\r
715 void madrpc_save_mad(void *madbuf, int len);
\r
716 void madrpc_lock(void);
\r
717 void madrpc_unlock(void);
\r
718 void * mad_rpc_open_port(char *dev_name, int dev_port,
\r
719 int *mgmt_classes, int num_classes);
\r
720 void mad_rpc_close_port(void *ibmad_port);
\r
721 void * mad_rpc(const void *ibmad_port, ib_rpc_t *rpc,
\r
722 ib_portid_t *dport, void *payload,
\r
724 void * mad_rpc_rmpp(const void *ibmad_port, ib_rpc_t *rpc,
\r
725 ib_portid_t *dport, ib_rmpp_hdr_t *rmpp,
\r
729 MAD_EXPORT uint8_t * smp_query(void *buf, ib_portid_t *id, unsigned attrid,
\r
730 unsigned mod, unsigned timeout);
\r
731 MAD_EXPORT uint8_t * smp_set(void *buf, ib_portid_t *id, unsigned attrid,
\r
732 unsigned mod, unsigned timeout);
\r
733 uint8_t * smp_query_via(void *buf, ib_portid_t *id, unsigned attrid,
\r
734 unsigned mod, unsigned timeout, const void *srcport);
\r
735 uint8_t * smp_set_via(void *buf, ib_portid_t *id, unsigned attrid, unsigned mod,
\r
736 unsigned timeout, const void *srcport);
\r
738 inline static uint8_t *
\r
739 safe_smp_query(void *rcvbuf, ib_portid_t *portid, unsigned attrid, unsigned mod,
\r
745 p = smp_query(rcvbuf, portid, attrid, mod, timeout);
\r
751 inline static uint8_t *
\r
752 safe_smp_set(void *rcvbuf, ib_portid_t *portid, unsigned attrid, unsigned mod,
\r
758 p = smp_set(rcvbuf, portid, attrid, mod, timeout);
\r
765 uint8_t * sa_call(void *rcvbuf, ib_portid_t *portid, ib_sa_call_t *sa,
\r
767 uint8_t * sa_rpc_call(const void *ibmad_port, void *rcvbuf, ib_portid_t *portid,
\r
768 ib_sa_call_t *sa, unsigned timeout);
\r
769 MAD_EXPORT int ib_path_query(ibmad_gid_t srcgid, ibmad_gid_t destgid,
\r
770 ib_portid_t *sm_id, void *buf); /* returns lid */
\r
771 int ib_path_query_via(const void *srcport, ibmad_gid_t srcgid,
\r
772 ibmad_gid_t destgid, ib_portid_t *sm_id, void *buf);
\r
774 inline static uint8_t *
\r
775 safe_sa_call(void *rcvbuf, ib_portid_t *portid, ib_sa_call_t *sa,
\r
781 p = sa_call(rcvbuf, portid, sa, timeout);
\r
788 MAD_EXPORT int ib_resolve_smlid(ib_portid_t *sm_id, int timeout);
\r
789 MAD_EXPORT int ib_resolve_guid(ib_portid_t *portid, uint64_t *guid,
\r
790 ib_portid_t *sm_id, int timeout);
\r
791 MAD_EXPORT int ib_resolve_portid_str(ib_portid_t *portid, char *addr_str,
\r
792 int dest_type, ib_portid_t *sm_id);
\r
793 MAD_EXPORT int ib_resolve_self(ib_portid_t *portid, int *portnum,
\r
795 int ib_resolve_smlid_via(ib_portid_t *sm_id, int timeout,
\r
796 const void *srcport);
\r
797 int ib_resolve_guid_via(ib_portid_t *portid, uint64_t *guid,
\r
798 ib_portid_t *sm_id, int timeout,
\r
799 const void *srcport);
\r
800 int ib_resolve_portid_str_via(ib_portid_t *portid, char *addr_str,
\r
801 int dest_type, ib_portid_t *sm_id,
\r
802 const void *srcport);
\r
803 int ib_resolve_self_via(ib_portid_t *portid, int *portnum, ibmad_gid_t *gid,
\r
804 const void *srcport);
\r
807 MAD_EXPORT uint8_t *perf_classportinfo_query(void *rcvbuf, ib_portid_t *dest, int port,
\r
809 MAD_EXPORT uint8_t *port_performance_query(void *rcvbuf, ib_portid_t *dest, int port,
\r
811 MAD_EXPORT uint8_t *port_performance_reset(void *rcvbuf, ib_portid_t *dest, int port,
\r
812 unsigned mask, unsigned timeout);
\r
813 MAD_EXPORT uint8_t *port_performance_ext_query(void *rcvbuf, ib_portid_t *dest, int port,
\r
815 MAD_EXPORT uint8_t *port_performance_ext_reset(void *rcvbuf, ib_portid_t *dest, int port,
\r
816 unsigned mask, unsigned timeout);
\r
817 MAD_EXPORT uint8_t *port_samples_control_query(void *rcvbuf, ib_portid_t *dest, int port,
\r
819 MAD_EXPORT uint8_t *port_samples_result_query(void *rcvbuf, ib_portid_t *dest, int port,
\r
822 uint8_t *perf_classportinfo_query_via(void *rcvbuf, ib_portid_t *dest, int port,
\r
823 unsigned timeout, const void *srcport);
\r
824 uint8_t *port_performance_query_via(void *rcvbuf, ib_portid_t *dest, int port,
\r
825 unsigned timeout, const void *srcport);
\r
826 uint8_t *port_performance_reset_via(void *rcvbuf, ib_portid_t *dest, int port,
\r
827 unsigned mask, unsigned timeout, const void *srcport);
\r
828 uint8_t *port_performance_ext_query_via(void *rcvbuf, ib_portid_t *dest, int port,
\r
829 unsigned timeout, const void *srcport);
\r
830 uint8_t *port_performance_ext_reset_via(void *rcvbuf, ib_portid_t *dest, int port,
\r
831 unsigned mask, unsigned timeout, const void *srcport);
\r
832 uint8_t *port_samples_control_query_via(void *rcvbuf, ib_portid_t *dest, int port,
\r
833 unsigned timeout, const void *srcport);
\r
834 uint8_t *port_samples_result_query_via(void *rcvbuf, ib_portid_t *dest, int port,
\r
835 unsigned timeout, const void *srcport);
\r
838 MAD_EXPORT mad_dump_int, mad_dump_uint, mad_dump_hex, mad_dump_rhex,
\r
839 mad_dump_bitfield, mad_dump_array, mad_dump_string,
\r
840 mad_dump_linkwidth, mad_dump_linkwidthsup, mad_dump_linkwidthen,
\r
841 mad_dump_linkdowndefstate,
\r
842 mad_dump_linkspeed, mad_dump_linkspeedsup, mad_dump_linkspeeden,
\r
843 mad_dump_portstate, mad_dump_portstates,
\r
844 mad_dump_physportstate, mad_dump_portcapmask,
\r
845 mad_dump_mtu, mad_dump_vlcap, mad_dump_opervls,
\r
846 mad_dump_node_type,
\r
847 mad_dump_sltovl, mad_dump_vlarbitration,
\r
848 mad_dump_nodedesc, mad_dump_nodeinfo, mad_dump_portinfo, mad_dump_switchinfo,
\r
849 mad_dump_perfcounters, mad_dump_perfcounters_ext;
\r
851 int _mad_dump(ib_mad_dump_fn *fn, char *name, void *val, int valsz);
\r
852 char * _mad_dump_field(ib_field_t *f, char *name, char *buf, int bufsz,
\r
854 int _mad_print_field(ib_field_t *f, char *name, void *val, int valsz);
\r
855 char * _mad_dump_val(ib_field_t *f, char *buf, int bufsz, void *val);
\r
858 mad_print_field(int field, char *name, void *val)
\r
860 if (field <= IB_NO_FIELD || field >= IB_FIELD_LAST_)
\r
862 return _mad_print_field(ib_mad_f + field, name, val, 0);
\r
865 static inline char *
\r
866 mad_dump_field(int field, char *buf, int bufsz, void *val)
\r
868 if (field <= IB_NO_FIELD || field >= IB_FIELD_LAST_)
\r
870 return _mad_dump_field(ib_mad_f + field, 0, buf, bufsz, val);
\r
873 static inline char *
\r
874 mad_dump_val(int field, char *buf, int bufsz, void *val)
\r
876 if (field <= IB_NO_FIELD || field >= IB_FIELD_LAST_)
\r
878 return _mad_dump_val(ib_mad_f + field, buf, bufsz, val);
\r
881 extern int ibdebug;
\r
883 /* remove libibcommon dependencies, use complib */
\r
886 MAD_EXPORT void xdump(FILE *file, char *msg, void *p, int size);
\r
888 /** printf style debugging MACRO's, map to cl_msg_out */
\r
889 #if !defined(IBWARN)
\r
890 #define IBWARN(fmt, ...) cl_msg_out(fmt, ## __VA_ARGS__)
\r
892 #if !defined(IBPANIC)
\r
893 #define IBPANIC(fmt, ...) \
\r
895 cl_msg_out(fmt, ## __VA_ARGS__); \
\r
900 /** align value \a l to \a size (ceil) */
\r
901 #if !defined(ALIGN)
\r
902 #define ALIGN(l, size) (((l) + ((size) - 1)) / (size) * (size))
\r
905 /** align value \a l to \a sizeof 32 bit int (ceil) */
\r
906 #if !defined(ALIGN32)
\r
907 #define ALIGN32(l) (ALIGN((l), sizeof(uint32)))
\r
913 #endif /* _MAD_H_ */
\r