Andrzej Szeszo
2013-06-04 453bf5a3004107204e1858532a38b3e703e32995
commit | author | age
c2319a 1 diff -r -u /tmp/libibmad-1.3.7/Makefile.in libibmad-1.3.7/Makefile.in
BC 2 --- /tmp/libibmad-1.3.7/Makefile.in    Wed Feb 16 02:25:43 2011
3 +++ libibmad-1.3.7/Makefile.in    Fri Feb 25 03:14:42 2011
4 @@ -357,8 +357,8 @@
5        else :; fi; \
6      done; \
7      test -z "$$list2" || { \
8 -      echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
9 -      $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
10 +      echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) -m 755 $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
11 +      $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) -m 755 $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
12      }
13  
14  uninstall-libLTLIBRARIES:
15 diff -r -u /tmp/libibmad-1.3.7/include/infiniband/mad.h libibmad-1.3.7/include/infiniband/mad.h
16 --- /tmp/libibmad-1.3.7/include/infiniband/mad.h    Wed Feb 16 02:12:53 2011
17 +++ libibmad-1.3.7/include/infiniband/mad.h    Thu Feb 24 11:27:11 2011
ad7f62 18 @@ -62,6 +62,7 @@
BC 19  #define IB_PC_DATA_SZ        (IB_MAD_SIZE - IB_PC_DATA_OFFS)
20  #define IB_SA_MCM_RECSZ        53
21  #define IB_SA_PR_RECSZ        64
22 +#define IB_SA_NR_RECSZ        108
23  #define IB_BM_DATA_OFFS        64
24  #define IB_BM_DATA_SZ        (IB_MAD_SIZE - IB_BM_DATA_OFFS)
25  #define IB_BM_BKEY_OFFS        24
26 @@ -579,7 +580,8 @@
27      /*
28       * GUIDInfo fields
29       */
30 -    IB_GUID_GUID0_F,
31 +    IB_GUID_GUID0_F, /* Obsolete, kept for compatibility
32 +                Use IB_GI_GUID0_F going forward */
33  
34      /*
35       * ClassPortInfo fields
36 @@ -610,7 +612,8 @@
37      /*
38       * PortXmitDataSL fields
39       */
40 -    IB_PC_XMT_DATA_SL_FIRST_F,
41 +    IB_PC_XMT_DATA_SL_FIRST_F, /* for PortSelect and CounterSelect, use IB_P
42 +C_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
43      IB_PC_XMT_DATA_SL0_F = IB_PC_XMT_DATA_SL_FIRST_F,
44      IB_PC_XMT_DATA_SL1_F,
45      IB_PC_XMT_DATA_SL2_F,
46 @@ -632,7 +635,8 @@
47      /*
48       * PortRcvDataSL fields
49       */
50 -    IB_PC_RCV_DATA_SL_FIRST_F,
51 +    IB_PC_RCV_DATA_SL_FIRST_F, /* for PortSelect and CounterSelect, use IB_P
52 +C_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
53      IB_PC_RCV_DATA_SL0_F = IB_PC_RCV_DATA_SL_FIRST_F,
54      IB_PC_RCV_DATA_SL1_F,
55      IB_PC_RCV_DATA_SL2_F,
56 @@ -654,6 +658,8 @@
57      /*
58       * PortXmitDiscardDetails fields
59       */
60 +    /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_C
61 +OUNTER_SELECT_F */
62      IB_PC_XMT_INACT_DISC_F,
63      IB_PC_XMT_NEIGH_MTU_DISC_F,
64      IB_PC_XMT_SW_LIFE_DISC_F,
65 @@ -663,6 +669,8 @@
66      /*
67       * PortRcvErrorDetails fields
68       */
69 +    /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_C
70 +OUNTER_SELECT_F */
71      IB_PC_RCV_LOCAL_PHY_ERR_F,
72      IB_PC_RCV_MALFORMED_PKT_ERR_F,
73      IB_PC_RCV_BUF_OVR_ERR_F,
74 @@ -706,6 +714,483 @@
75      IB_PSC_SAMPLES_ONLY_OPT_MASK_F,
76      IB_PSC_LAST_F,
77  
78 +
79 +    /*
80 +     * GUIDInfo fields
81 +     */
82 +    IB_GI_GUID0_F, /* a duplicate of IB_GUID_GUID0_F for backwards
83 +              compatibility */
84 +    IB_GI_GUID1_F,
85 +    IB_GI_GUID2_F,
86 +    IB_GI_GUID3_F,
87 +    IB_GI_GUID4_F,
88 +    IB_GI_GUID5_F,
89 +    IB_GI_GUID6_F,
90 +    IB_GI_GUID7_F,
91 +
92 +    /*
93 +     * GUID Info Record
94 +     */
95 +    IB_SA_GIR_LID_F,
96 +    IB_SA_GIR_BLOCKNUM_F,
97 +    IB_SA_GIR_GUID0_F,
98 +    IB_SA_GIR_GUID1_F,
99 +    IB_SA_GIR_GUID2_F,
100 +    IB_SA_GIR_GUID3_F,
101 +    IB_SA_GIR_GUID4_F,
102 +    IB_SA_GIR_GUID5_F,
103 +    IB_SA_GIR_GUID6_F,
104 +    IB_SA_GIR_GUID7_F,
105 +
106 +    /*
107 +     * More PortInfo fields
108 +     */
109 +    IB_PORT_CAPMASK2_F,
110 +    IB_PORT_LINK_SPEED_EXT_ACTIVE_F,
111 +    IB_PORT_LINK_SPEED_EXT_SUPPORTED_F,
112 +    IB_PORT_LINK_SPEED_EXT_ENABLED_F,
113 +    IB_PORT_LINK_SPEED_EXT_LAST_F,
114 +
115 +    /*
116 +     * PortExtendedSpeedsCounters fields
117 +     */
118 +    IB_PESC_PORT_SELECT_F,
119 +    IB_PESC_COUNTER_SELECT_F,
120 +    IB_PESC_SYNC_HDR_ERR_CTR_F,
121 +    IB_PESC_UNK_BLOCK_CTR_F,
122 +    IB_PESC_ERR_DET_CTR_LANE0_F,
123 +    IB_PESC_ERR_DET_CTR_LANE1_F,
124 +    IB_PESC_ERR_DET_CTR_LANE2_F,
125 +    IB_PESC_ERR_DET_CTR_LANE3_F,
126 +    IB_PESC_ERR_DET_CTR_LANE4_F,
127 +    IB_PESC_ERR_DET_CTR_LANE5_F,
128 +    IB_PESC_ERR_DET_CTR_LANE6_F,
129 +    IB_PESC_ERR_DET_CTR_LANE7_F,
130 +    IB_PESC_ERR_DET_CTR_LANE8_F,
131 +    IB_PESC_ERR_DET_CTR_LANE9_F,
132 +    IB_PESC_ERR_DET_CTR_LANE10_F,
133 +    IB_PESC_ERR_DET_CTR_LANE11_F,
134 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE0_F,
135 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE1_F,
136 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE2_F,
137 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE3_F,
138 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE4_F,
139 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE5_F,
140 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE6_F,
141 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE7_F,
142 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE8_F,
143 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE9_F,
144 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE10_F,
145 +    IB_PESC_FEC_CORR_BLOCK_CTR_LANE11_F,
146 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE0_F,
147 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE1_F,
148 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE2_F,
149 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE3_F,
150 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE4_F,
151 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE5_F,
152 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE6_F,
153 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE7_F,
154 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE8_F,
155 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE9_F,
156 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE10_F,
157 +    IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE11_F,
158 +    IB_PESC_LAST_F,
159 +
160 +    /*
161 +     * PortOpRcvCounters fields
162 +     */
163 +    IB_PC_PORT_OP_RCV_COUNTERS_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
164 +    IB_PC_PORT_OP_RCV_PKTS_F = IB_PC_PORT_OP_RCV_COUNTERS_FIRST_F,
165 +    IB_PC_PORT_OP_RCV_DATA_F,
166 +    IB_PC_PORT_OP_RCV_COUNTERS_LAST_F,
167 +
168 +    /*
169 +     * PortFlowCtlCounters fields
170 +     */
171 +    IB_PC_PORT_FLOW_CTL_COUNTERS_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
172 +    IB_PC_PORT_XMIT_FLOW_PKTS_F = IB_PC_PORT_FLOW_CTL_COUNTERS_FIRST_F,
173 +    IB_PC_PORT_RCV_FLOW_PKTS_F,
174 +    IB_PC_PORT_FLOW_CTL_COUNTERS_LAST_F,
175 +
176 +    /*
177 +     * PortVLOpPackets fields
178 +     */
179 +    IB_PC_PORT_VL_OP_PACKETS_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
180 +    IB_PC_PORT_VL_OP_PACKETS0_F = IB_PC_PORT_VL_OP_PACKETS_FIRST_F,
181 +    IB_PC_PORT_VL_OP_PACKETS1_F,
182 +    IB_PC_PORT_VL_OP_PACKETS2_F,
183 +    IB_PC_PORT_VL_OP_PACKETS3_F,
184 +    IB_PC_PORT_VL_OP_PACKETS4_F,
185 +    IB_PC_PORT_VL_OP_PACKETS5_F,
186 +    IB_PC_PORT_VL_OP_PACKETS6_F,
187 +    IB_PC_PORT_VL_OP_PACKETS7_F,
188 +    IB_PC_PORT_VL_OP_PACKETS8_F,
189 +    IB_PC_PORT_VL_OP_PACKETS9_F,
190 +    IB_PC_PORT_VL_OP_PACKETS10_F,
191 +    IB_PC_PORT_VL_OP_PACKETS11_F,
192 +    IB_PC_PORT_VL_OP_PACKETS12_F,
193 +    IB_PC_PORT_VL_OP_PACKETS13_F,
194 +    IB_PC_PORT_VL_OP_PACKETS14_F,
195 +    IB_PC_PORT_VL_OP_PACKETS15_F,
196 +    IB_PC_PORT_VL_OP_PACKETS_LAST_F,
197 +
198 +    /*
199 +     * PortVLOpData fields
200 +     */
201 +    IB_PC_PORT_VL_OP_DATA_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
202 +    IB_PC_PORT_VL_OP_DATA0_F = IB_PC_PORT_VL_OP_DATA_FIRST_F,
203 +    IB_PC_PORT_VL_OP_DATA1_F,
204 +    IB_PC_PORT_VL_OP_DATA2_F,
205 +    IB_PC_PORT_VL_OP_DATA3_F,
206 +    IB_PC_PORT_VL_OP_DATA4_F,
207 +    IB_PC_PORT_VL_OP_DATA5_F,
208 +    IB_PC_PORT_VL_OP_DATA6_F,
209 +    IB_PC_PORT_VL_OP_DATA7_F,
210 +    IB_PC_PORT_VL_OP_DATA8_F,
211 +    IB_PC_PORT_VL_OP_DATA9_F,
212 +    IB_PC_PORT_VL_OP_DATA10_F,
213 +    IB_PC_PORT_VL_OP_DATA11_F,
214 +    IB_PC_PORT_VL_OP_DATA12_F,
215 +    IB_PC_PORT_VL_OP_DATA13_F,
216 +    IB_PC_PORT_VL_OP_DATA14_F,
217 +    IB_PC_PORT_VL_OP_DATA15_F,
218 +    IB_PC_PORT_VL_OP_DATA_LAST_F,
219 +
220 +    /*
221 +     * PortVLXmitFlowCtlUpdateErrors fields
222 +     */
223 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
224 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS0_F = IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_FIRST_F,
225 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS1_F,
226 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS2_F,
227 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS3_F,
228 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS4_F,
229 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS5_F,
230 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS6_F,
231 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS7_F,
232 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS8_F,
233 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS9_F,
234 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS10_F,
235 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS11_F,
236 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS12_F,
237 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS13_F,
238 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS14_F,
239 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS15_F,
240 +    IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_LAST_F,
241 +
242 +    /*
243 +     * PortVLXmitWaitCounters fields
244 +     */
245 +    IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
246 +    IB_PC_PORT_VL_XMIT_WAIT0_F = IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_FIRST_F,
247 +    IB_PC_PORT_VL_XMIT_WAIT1_F,
248 +    IB_PC_PORT_VL_XMIT_WAIT2_F,
249 +    IB_PC_PORT_VL_XMIT_WAIT3_F,
250 +    IB_PC_PORT_VL_XMIT_WAIT4_F,
251 +    IB_PC_PORT_VL_XMIT_WAIT5_F,
252 +    IB_PC_PORT_VL_XMIT_WAIT6_F,
253 +    IB_PC_PORT_VL_XMIT_WAIT7_F,
254 +    IB_PC_PORT_VL_XMIT_WAIT8_F,
255 +    IB_PC_PORT_VL_XMIT_WAIT9_F,
256 +    IB_PC_PORT_VL_XMIT_WAIT10_F,
257 +    IB_PC_PORT_VL_XMIT_WAIT11_F,
258 +    IB_PC_PORT_VL_XMIT_WAIT12_F,
259 +    IB_PC_PORT_VL_XMIT_WAIT13_F,
260 +    IB_PC_PORT_VL_XMIT_WAIT14_F,
261 +    IB_PC_PORT_VL_XMIT_WAIT15_F,
262 +    IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_LAST_F,
263 +
264 +    /*
265 +     * SwPortVLCongestion fields
266 +     */
267 +    IB_PC_SW_PORT_VL_CONGESTION_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
268 +    IB_PC_SW_PORT_VL_CONGESTION0_F = IB_PC_SW_PORT_VL_CONGESTION_FIRST_F,
269 +    IB_PC_SW_PORT_VL_CONGESTION1_F,
270 +    IB_PC_SW_PORT_VL_CONGESTION2_F,
271 +    IB_PC_SW_PORT_VL_CONGESTION3_F,
272 +    IB_PC_SW_PORT_VL_CONGESTION4_F,
273 +    IB_PC_SW_PORT_VL_CONGESTION5_F,
274 +    IB_PC_SW_PORT_VL_CONGESTION6_F,
275 +    IB_PC_SW_PORT_VL_CONGESTION7_F,
276 +    IB_PC_SW_PORT_VL_CONGESTION8_F,
277 +    IB_PC_SW_PORT_VL_CONGESTION9_F,
278 +    IB_PC_SW_PORT_VL_CONGESTION10_F,
279 +    IB_PC_SW_PORT_VL_CONGESTION11_F,
280 +    IB_PC_SW_PORT_VL_CONGESTION12_F,
281 +    IB_PC_SW_PORT_VL_CONGESTION13_F,
282 +    IB_PC_SW_PORT_VL_CONGESTION14_F,
283 +    IB_PC_SW_PORT_VL_CONGESTION15_F,
284 +    IB_PC_SW_PORT_VL_CONGESTION_LAST_F,
285 +
286 +    /*
287 +     * PortRcvConCtrl fields
288 +     */
289 +    IB_PC_RCV_CON_CTRL_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
290 +    IB_PC_RCV_CON_CTRL_PKT_RCV_FECN_F = IB_PC_RCV_CON_CTRL_FIRST_F,
291 +    IB_PC_RCV_CON_CTRL_PKT_RCV_BECN_F,
292 +    IB_PC_RCV_CON_CTRL_LAST_F,
293 +
294 +    /*
295 +     * PortSLRcvFECN fields
296 +     */
297 +    IB_PC_SL_RCV_FECN_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
298 +    IB_PC_SL_RCV_FECN0_F = IB_PC_SL_RCV_FECN_FIRST_F,
299 +    IB_PC_SL_RCV_FECN1_F,
300 +    IB_PC_SL_RCV_FECN2_F,
301 +    IB_PC_SL_RCV_FECN3_F,
302 +    IB_PC_SL_RCV_FECN4_F,
303 +    IB_PC_SL_RCV_FECN5_F,
304 +    IB_PC_SL_RCV_FECN6_F,
305 +    IB_PC_SL_RCV_FECN7_F,
306 +    IB_PC_SL_RCV_FECN8_F,
307 +    IB_PC_SL_RCV_FECN9_F,
308 +    IB_PC_SL_RCV_FECN10_F,
309 +    IB_PC_SL_RCV_FECN11_F,
310 +    IB_PC_SL_RCV_FECN12_F,
311 +    IB_PC_SL_RCV_FECN13_F,
312 +    IB_PC_SL_RCV_FECN14_F,
313 +    IB_PC_SL_RCV_FECN15_F,
314 +    IB_PC_SL_RCV_FECN_LAST_F,
315 +
316 +    /*
317 +     * PortSLRcvBECN fields
318 +     */
319 +    IB_PC_SL_RCV_BECN_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
320 +    IB_PC_SL_RCV_BECN0_F = IB_PC_SL_RCV_BECN_FIRST_F,
321 +    IB_PC_SL_RCV_BECN1_F,
322 +    IB_PC_SL_RCV_BECN2_F,
323 +    IB_PC_SL_RCV_BECN3_F,
324 +    IB_PC_SL_RCV_BECN4_F,
325 +    IB_PC_SL_RCV_BECN5_F,
326 +    IB_PC_SL_RCV_BECN6_F,
327 +    IB_PC_SL_RCV_BECN7_F,
328 +    IB_PC_SL_RCV_BECN8_F,
329 +    IB_PC_SL_RCV_BECN9_F,
330 +    IB_PC_SL_RCV_BECN10_F,
331 +    IB_PC_SL_RCV_BECN11_F,
332 +    IB_PC_SL_RCV_BECN12_F,
333 +    IB_PC_SL_RCV_BECN13_F,
334 +    IB_PC_SL_RCV_BECN14_F,
335 +    IB_PC_SL_RCV_BECN15_F,
336 +    IB_PC_SL_RCV_BECN_LAST_F,
337 +
338 +    /*
339 +     * PortXmitConCtrl fields
340 +     */
341 +    IB_PC_XMIT_CON_CTRL_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
342 +    IB_PC_XMIT_CON_CTRL_TIME_CONG_F = IB_PC_XMIT_CON_CTRL_FIRST_F,
343 +    IB_PC_XMIT_CON_CTRL_LAST_F,
344 +
345 +    /*
346 +     * PortVLXmitTimeCong fields
347 +     */
348 +    IB_PC_VL_XMIT_TIME_CONG_FIRST_F, /* for PortSelect and CounterSelect, use IB_PC_PORT_SELECT_F and IB_PC_COUNTER_SELECT_F */
349 +    IB_PC_VL_XMIT_TIME_CONG0_F = IB_PC_VL_XMIT_TIME_CONG_FIRST_F,
350 +    IB_PC_VL_XMIT_TIME_CONG1_F,
351 +    IB_PC_VL_XMIT_TIME_CONG2_F,
352 +    IB_PC_VL_XMIT_TIME_CONG3_F,
353 +    IB_PC_VL_XMIT_TIME_CONG4_F,
354 +    IB_PC_VL_XMIT_TIME_CONG5_F,
355 +    IB_PC_VL_XMIT_TIME_CONG6_F,
356 +    IB_PC_VL_XMIT_TIME_CONG7_F,
357 +    IB_PC_VL_XMIT_TIME_CONG8_F,
358 +    IB_PC_VL_XMIT_TIME_CONG9_F,
359 +    IB_PC_VL_XMIT_TIME_CONG10_F,
360 +    IB_PC_VL_XMIT_TIME_CONG11_F,
361 +    IB_PC_VL_XMIT_TIME_CONG12_F,
362 +    IB_PC_VL_XMIT_TIME_CONG13_F,
363 +    IB_PC_VL_XMIT_TIME_CONG14_F,
364 +    IB_PC_VL_XMIT_TIME_CONG_LAST_F,
365 +
366 +    /*
367 +     * Mellanox ExtendedPortInfo fields
368 +     */
369 +    IB_MLNX_EXT_PORT_STATE_CHG_ENABLE_F,
370 +    IB_MLNX_EXT_PORT_LINK_SPEED_SUPPORTED_F,
371 +    IB_MLNX_EXT_PORT_LINK_SPEED_ENABLED_F,
372 +    IB_MLNX_EXT_PORT_LINK_SPEED_ACTIVE_F,
373 +    IB_MLNX_EXT_PORT_LAST_F,
374 +
375 +    /*
376 +     * Congestion Control Mad fields
377 +     * bytes 24-31 of congestion control mad
378 +     */
379 +    IB_CC_CCKEY_F,
380 +
381 +    /*
382 +     * CongestionInfo fields
383 +     */
384 +    IB_CC_CONGESTION_INFO_FIRST_F,
385 +    IB_CC_CONGESTION_INFO_F = IB_CC_CONGESTION_INFO_FIRST_F,
386 +    IB_CC_CONGESTION_INFO_CONTROL_TABLE_CAP_F,
387 +    IB_CC_CONGESTION_INFO_LAST_F,
388 +
389 +    /*
390 +     * CongestionKeyInfo fields
391 +     */
392 +    IB_CC_CONGESTION_KEY_INFO_FIRST_F,
393 +    IB_CC_CONGESTION_KEY_INFO_CC_KEY_F = IB_CC_CONGESTION_KEY_INFO_FIRST_F,
394 +    IB_CC_CONGESTION_KEY_INFO_CC_KEY_PROTECT_BIT_F,
395 +    IB_CC_CONGESTION_KEY_INFO_CC_KEY_LEASE_PERIOD_F,
396 +    IB_CC_CONGESTION_KEY_INFO_CC_KEY_VIOLATIONS_F,
397 +    IB_CC_CONGESTION_KEY_INFO_LAST_F,
398 +
399 +    /*
400 +     * CongestionLog (common) fields
401 +     */
402 +    IB_CC_CONGESTION_LOG_FIRST_F,
403 +    IB_CC_CONGESTION_LOG_LOGTYPE_F = IB_CC_CONGESTION_LOG_FIRST_F,
404 +    IB_CC_CONGESTION_LOG_CONGESTION_FLAGS_F,
405 +    IB_CC_CONGESTION_LOG_LAST_F,
406 +
407 +    /*
408 +     * CongestionLog (Switch) fields
409 +     */
410 +    IB_CC_CONGESTION_LOG_SWITCH_FIRST_F,
411 +    IB_CC_CONGESTION_LOG_SWITCH_LOG_EVENTS_COUNTER_F = IB_CC_CONGESTION_LOG_SWITCH_FIRST_F,
412 +    IB_CC_CONGESTION_LOG_SWITCH_CURRENT_TIME_STAMP_F,
413 +    IB_CC_CONGESTION_LOG_SWITCH_PORTMAP_F,
414 +    IB_CC_CONGESTION_LOG_SWITCH_LAST_F,
415 +
416 +    /*
417 +     * CongestionLogEvent (Switch) fields
418 +     */
419 +    IB_CC_CONGESTION_LOG_ENTRY_SWITCH_FIRST_F,
420 +    IB_CC_CONGESTION_LOG_ENTRY_SWITCH_SLID_F = IB_CC_CONGESTION_LOG_ENTRY_SWITCH_FIRST_F,
421 +    IB_CC_CONGESTION_LOG_ENTRY_SWITCH_DLID_F,
422 +    IB_CC_CONGESTION_LOG_ENTRY_SWITCH_SL_F,
423 +    IB_CC_CONGESTION_LOG_ENTRY_SWITCH_TIMESTAMP_F,
424 +    IB_CC_CONGESTION_LOG_ENTRY_SWITCH_LAST_F,
425 +
426 +    /*
427 +     * CongestionLog (CA) fields
428 +     */
429 +    IB_CC_CONGESTION_LOG_CA_FIRST_F,
430 +    IB_CC_CONGESTION_LOG_CA_THRESHOLD_EVENT_COUNTER_F = IB_CC_CONGESTION_LOG_CA_FIRST_F,
431 +    IB_CC_CONGESTION_LOG_CA_THRESHOLD_CONGESTION_EVENT_MAP_F,
432 +    IB_CC_CONGESTION_LOG_CA_CURRENT_TIMESTAMP_F,
433 +    IB_CC_CONGESTION_LOG_CA_LAST_F,
434 +
435 +    /*
436 +     * CongestionLogEvent (CA) fields
437 +     */
438 +    IB_CC_CONGESTION_LOG_ENTRY_CA_FIRST_F,
439 +    IB_CC_CONGESTION_LOG_ENTRY_CA_LOCAL_QP_CN_ENTRY_F = IB_CC_CONGESTION_LOG_ENTRY_CA_FIRST_F,
440 +    IB_CC_CONGESTION_LOG_ENTRY_CA_SL_CN_ENTRY_F,
441 +    IB_CC_CONGESTION_LOG_ENTRY_CA_SERVICE_TYPE_CN_ENTRY_F,
442 +    IB_CC_CONGESTION_LOG_ENTRY_CA_REMOTE_QP_NUMBER_CN_ENTRY_F,
443 +    IB_CC_CONGESTION_LOG_ENTRY_CA_LOCAL_LID_CN_F,
444 +    IB_CC_CONGESTION_LOG_ENTRY_CA_REMOTE_LID_CN_ENTRY_F,
445 +    IB_CC_CONGESTION_LOG_ENTRY_CA_TIMESTAMP_CN_ENTRY_F,
446 +    IB_CC_CONGESTION_LOG_ENTRY_CA_LAST_F,
447 +
448 +    /*
449 +     * SwitchCongestionSetting fields
450 +     */
451 +    IB_CC_SWITCH_CONGESTION_SETTING_FIRST_F,
452 +    IB_CC_SWITCH_CONGESTION_SETTING_CONTROL_MAP_F = IB_CC_SWITCH_CONGESTION_SETTING_FIRST_F,
453 +    IB_CC_SWITCH_CONGESTION_SETTING_VICTIM_MASK_F,
454 +    IB_CC_SWITCH_CONGESTION_SETTING_CREDIT_MASK_F,
455 +    IB_CC_SWITCH_CONGESTION_SETTING_THRESHOLD_F,
456 +    IB_CC_SWITCH_CONGESTION_SETTING_PACKET_SIZE_F,
457 +    IB_CC_SWITCH_CONGESTION_SETTING_CS_THRESHOLD_F,
458 +    IB_CC_SWITCH_CONGESTION_SETTING_CS_RETURN_DELAY_F,
459 +    IB_CC_SWITCH_CONGESTION_SETTING_MARKING_RATE_F,
460 +    IB_CC_SWITCH_CONGESTION_SETTING_LAST_F,
461 +
462 +    /*
463 +     * SwitchPortCongestionSettingElement fields
464 +     */
465 +    IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_FIRST_F,
466 +    IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_VALID_F = IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_FIRST_F,
467 +    IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_CONTROL_TYPE_F,
468 +    IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_THRESHOLD_F,
469 +    IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_PACKET_SIZE_F,
470 +    IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_CONG_PARM_MARKING_RATE_F,
471 +    IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_LAST_F,
472 +
473 +    /*
474 +     * CACongestionSetting fields
475 +     */
476 +    IB_CC_CA_CONGESTION_SETTING_FIRST_F,
477 +    IB_CC_CA_CONGESTION_SETTING_PORT_CONTROL_F = IB_CC_CA_CONGESTION_SETTING_FIRST_F,
478 +    IB_CC_CA_CONGESTION_SETTING_CONTROL_MAP_F,
479 +    IB_CC_CA_CONGESTION_SETTING_LAST_F,
480 +
481 +    /*
482 +     * CACongestionEntry fields
483 +     */
484 +    IB_CC_CA_CONGESTION_ENTRY_FIRST_F,
485 +    IB_CC_CA_CONGESTION_ENTRY_CCTI_TIMER_F = IB_CC_CA_CONGESTION_ENTRY_FIRST_F,
486 +    IB_CC_CA_CONGESTION_ENTRY_CCTI_INCREASE_F,
487 +    IB_CC_CA_CONGESTION_ENTRY_TRIGGER_THRESHOLD_F,
488 +    IB_CC_CA_CONGESTION_ENTRY_CCTI_MIN_F,
489 +    IB_CC_CA_CONGESTION_ENTRY_LAST_F,
490 +
491 +    /*
492 +     * CongestionControlTable fields
493 +     */
494 +    IB_CC_CONGESTION_CONTROL_TABLE_FIRST_F,
495 +    IB_CC_CONGESTION_CONTROL_TABLE_CCTI_LIMIT_F = IB_CC_CONGESTION_CONTROL_TABLE_FIRST_F,
496 +    IB_CC_CONGESTION_CONTROL_TABLE_LAST_F,
497 +
498 +    /*
499 +     * CongestionControlTableEntry fields
500 +     */
501 +    IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_FIRST_F,
502 +    IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_CCT_SHIFT_F = IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_FIRST_F,
503 +    IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_CCT_MULTIPLIER_F,
504 +    IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_LAST_F,
505 +
506 +    /*
507 +     * Timestamp fields
508 +     */
509 +    IB_CC_TIMESTAMP_FIRST_F,
510 +    IB_CC_TIMESTAMP_F = IB_CC_TIMESTAMP_FIRST_F,
511 +    IB_CC_TIMESTAMP_LAST_F,
512 +
513 +    /*
514 +     * Node Record
515 +     */
516 +    IB_SA_NR_FIRST_F,
517 +    IB_SA_NR_LID_F = IB_SA_NR_FIRST_F,
518 +    IB_SA_NR_BASEVER_F,
519 +    IB_SA_NR_CLASSVER_F,
520 +    IB_SA_NR_TYPE_F,
521 +    IB_SA_NR_NPORTS_F,
522 +    IB_SA_NR_SYSTEM_GUID_F,
523 +    IB_SA_NR_GUID_F,
524 +    IB_SA_NR_PORT_GUID_F,
525 +    IB_SA_NR_PARTITION_CAP_F,
526 +    IB_SA_NR_DEVID_F,
527 +    IB_SA_NR_REVISION_F,
528 +    IB_SA_NR_LOCAL_PORT_F,
529 +    IB_SA_NR_VENDORID_F,
530 +    IB_SA_NR_NODEDESC_F,
531 +    IB_SA_NR_LAST_F,
532 +
533 +    /*
534 +     * PortSamplesResult fields
535 +     */
536 +    IB_PSR_TAG_F,
537 +    IB_PSR_SAMPLE_STATUS_F,
538 +    IB_PSR_COUNTER0_F,
539 +    IB_PSR_COUNTER1_F,
540 +    IB_PSR_COUNTER2_F,
541 +    IB_PSR_COUNTER3_F,
542 +    IB_PSR_COUNTER4_F,
543 +    IB_PSR_COUNTER5_F,
544 +    IB_PSR_COUNTER6_F,
545 +    IB_PSR_COUNTER7_F,
546 +    IB_PSR_COUNTER8_F,
547 +    IB_PSR_COUNTER9_F,
548 +    IB_PSR_COUNTER10_F,
549 +    IB_PSR_COUNTER11_F,
550 +    IB_PSR_COUNTER12_F,
551 +    IB_PSR_COUNTER13_F,
552 +    IB_PSR_COUNTER14_F,
553 +    IB_PSR_LAST_F,
554 +
555      IB_FIELD_LAST_        /* must be last */
556  };
557  
558 @@ -974,6 +1459,9 @@
559                   ibmad_gid_t srcgid, ibmad_gid_t destgid,
560                   ib_portid_t * sm_id, void *buf);
561      /* returns lid */
562 +MAD_EXPORT int ib_node_query_via(const struct ibmad_port *srcport,
563 +                 uint64_t guid, ib_portid_t * sm_id,
564 +                 void *buf);
565  
566  /* resolve.c */
567  MAD_EXPORT int ib_resolve_smlid(ib_portid_t * sm_id, int timeout) DEPRECATED;
eece43 568 @@ -1021,6 +1509,7 @@
BC 569      mad_dump_linkwidth, mad_dump_linkwidthsup, mad_dump_linkwidthen,
570      mad_dump_linkdowndefstate,
571      mad_dump_linkspeed, mad_dump_linkspeedsup, mad_dump_linkspeeden,
572 +    mad_dump_linkspeedext, mad_dump_linkspeedextsup, mad_dump_linkspeedexten,
573      mad_dump_portstate, mad_dump_portstates,
574      mad_dump_physportstate, mad_dump_portcapmask,
575      mad_dump_mtu, mad_dump_vlcap, mad_dump_opervls,
576 @@ -1029,7 +1518,21 @@
577      mad_dump_switchinfo, mad_dump_perfcounters, mad_dump_perfcounters_ext,
578      mad_dump_perfcounters_xmt_sl, mad_dump_perfcounters_rcv_sl,
579      mad_dump_perfcounters_xmt_disc, mad_dump_perfcounters_rcv_err,
580 -    mad_dump_portsamples_control;
581 +    mad_dump_portsamples_control, mad_dump_port_ext_speeds_counters,
582 +    mad_dump_perfcounters_port_op_rcv_counters, mad_dump_perfcounters_port_flow_ctl_counters,
583 +    mad_dump_perfcounters_port_vl_op_packet, mad_dump_perfcounters_port_vl_op_data,
584 +    mad_dump_perfcounters_port_vl_xmit_flow_ctl_update_errors, mad_dump_perfcounters_port_vl_xmit_wait_counters,
585 +    mad_dump_perfcounters_sw_port_vl_congestion, mad_dump_perfcounters_rcv_con_ctrl,
586 +    mad_dump_perfcounters_sl_rcv_fecn, mad_dump_perfcounters_sl_rcv_becn,
587 +    mad_dump_perfcounters_xmit_con_ctrl, mad_dump_perfcounters_vl_xmit_time_cong,
588 +    mad_dump_mlnx_ext_port_info, mad_dump_cc_congestioninfo, mad_dump_cc_congestionkeyinfo,
589 +    mad_dump_cc_congestionlog, mad_dump_cc_congestionlogswitch,
590 +    mad_dump_cc_congestionlogentryswitch, mad_dump_cc_congestionlogca,
591 +    mad_dump_cc_congestionlogentryca, mad_dump_cc_switchcongestionsetting,
592 +    mad_dump_cc_switchportcongestionsettingelement, mad_dump_cc_cacongestionsetting,
593 +    mad_dump_cc_cacongestionentry, mad_dump_cc_congestioncontroltable,
594 +    mad_dump_cc_congestioncontroltableentry, mad_dump_cc_timestamp,
595 +    mad_dump_classportinfo, mad_dump_portsamples_result;
596  
597  MAD_EXPORT void mad_dump_fields(char *buf, int bufsz, void *val, int valsz,
598                  int start, int end);
599 @@ -1036,6 +1539,10 @@
c2319a 600  
BC 601  extern MAD_EXPORT int ibdebug;
602  
603 +#if !(defined(__SVR4) && defined(__sun))
604 +#include <endian.h>
605 +#include <byteswap.h>
606 +
607  #if __BYTE_ORDER == __LITTLE_ENDIAN
608  #ifndef ntohll
609  static inline uint64_t ntohll(uint64_t x)
eece43 610 @@ -1063,6 +1570,9 @@
c2319a 611  }
BC 612  #endif
613  #endif                /* __BYTE_ORDER == __BIG_ENDIAN */
614 +#else
615 +#include <infiniband/ofa_solaris.h>
616 +#endif
617  
618  /* Misc. macros: */
619  /** align value \a l to \a size (ceil) */
eece43 620 @@ -1069,14 +1579,14 @@
c2319a 621  #define ALIGN(l, size) (((l) + ((size) - 1)) / (size) * (size))
BC 622  
623  /** printf style warning MACRO, includes name of function and pid */
624 -#define IBWARN(fmt, ...) fprintf(stderr, "ibwarn: [%d] %s: " fmt "\n", getpid(), __func__, ## __VA_ARGS__)
625 +#define IBWARN(fmt, ...) fprintf(stderr, "ibwarn: [%d] %s: " fmt "\n", (int)getpid(), __func__, ## __VA_ARGS__)
626  
627 -#define IBDEBUG(fmt, ...) fprintf(stdout, "ibdebug: [%d] %s: " fmt "\n", getpid(), __func__, ## __VA_ARGS__)
628 +#define IBDEBUG(fmt, ...) fprintf(stdout, "ibdebug: [%d] %s: " fmt "\n", (int)getpid(), __func__, ## __VA_ARGS__)
629  
630 -#define IBVERBOSE(fmt, ...) fprintf(stdout, "[%d] %s: " fmt "\n", getpid(), __func__, ## __VA_ARGS__)
631 +#define IBVERBOSE(fmt, ...) fprintf(stdout, "[%d] %s: " fmt "\n", (int)getpid(), __func__, ## __VA_ARGS__)
632  
633  #define IBPANIC(fmt, ...) do { \
634 -    fprintf(stderr, "ibpanic: [%d] %s: " fmt ": %m\n", getpid(), __func__, ## __VA_ARGS__); \
635 +    fprintf(stderr, "ibpanic: [%d] %s: " fmt ": %m\n", (int)getpid(), __func__, ## __VA_ARGS__); \
636      exit(-1); \
637  } while(0)
638  
639 diff -r -u /tmp/libibmad-1.3.7/include/infiniband/mad_osd.h libibmad-1.3.7/include/infiniband/mad_osd.h
640 --- /tmp/libibmad-1.3.7/include/infiniband/mad_osd.h    Wed Feb 16 02:12:53 2011
641 +++ libibmad-1.3.7/include/infiniband/mad_osd.h    Thu Feb 24 11:27:11 2011
642 @@ -39,7 +39,9 @@
643  #include <stdio.h>
644  #include <sys/types.h>
645  #include <unistd.h>
646 +#if !(defined(__SVR4) && defined(__sun))
647  #include <byteswap.h>
648 +#endif
649  #include <inttypes.h>
650  #include <arpa/inet.h>
651  
652 diff -r -u /tmp/libibmad-1.3.7/src/fields.c libibmad-1.3.7/src/fields.c
653 --- /tmp/libibmad-1.3.7/src/fields.c    Wed Feb 16 02:12:53 2011
654 +++ libibmad-1.3.7/src/fields.c    Thu Feb 24 13:27:00 2011
eece43 655 @@ -452,21 +452,21 @@
BC 656      /*
657       * PortXmitDiscardDetails fields
658       */
659 -    {32, 16, "PortInactiveDiscards", mad_dump_uint},
660 -    {48, 16, "PortNeighborMTUDiscards", mad_dump_uint},
661 -    {64, 16, "PortSwLifetimeLimitDiscards", mad_dump_uint},
662 -    {80, 16, "PortSwHOQLifetimeLimitDiscards", mad_dump_uint},
663 +    {BITSOFFS(32, 16), "PortInactiveDiscards", mad_dump_uint},
664 +    {BITSOFFS(48, 16), "PortNeighborMTUDiscards", mad_dump_uint},
665 +    {BITSOFFS(64, 16), "PortSwLifetimeLimitDiscards", mad_dump_uint},
666 +    {BITSOFFS(80, 16), "PortSwHOQLifetimeLimitDiscards", mad_dump_uint},
667      {0, 0},            /* IB_PC_XMT_DISC_LAST_F */
668  
669      /*
670       * PortRcvErrorDetails fields
671       */
672 -    {32, 16, "PortLocalPhysicalErrors", mad_dump_uint},
673 -    {48, 16, "PortMalformedPktErrors", mad_dump_uint},
674 -    {64, 16, "PortBufferOverrunErrors", mad_dump_uint},
675 -    {80, 16, "PortDLIDMappingErrors", mad_dump_uint},
676 -    {96, 16, "PortVLMappingErrors", mad_dump_uint},
677 -    {112, 16, "PortLoopingErrors", mad_dump_uint},
678 +    {BITSOFFS(32, 16), "PortLocalPhysicalErrors", mad_dump_uint},
679 +    {BITSOFFS(48, 16), "PortMalformedPktErrors", mad_dump_uint},
680 +    {BITSOFFS(64, 16), "PortBufferOverrunErrors", mad_dump_uint},
681 +    {BITSOFFS(80, 16), "PortDLIDMappingErrors", mad_dump_uint},
682 +    {BITSOFFS(96, 16), "PortVLMappingErrors", mad_dump_uint},
683 +    {BITSOFFS(112, 16), "PortLoopingErrors", mad_dump_uint},
684      {0, 0},                 /* IB_PC_RCV_ERR_LAST_F */
685  
686      /*
687 @@ -485,25 +485,470 @@
688      {160, 64, "VendorMask", mad_dump_hex},
689      {224, 32, "SampleStart", mad_dump_uint},
690      {256, 32, "SampleInterval", mad_dump_uint},
691 -    {288, 16, "Tag", mad_dump_hex},
692 -    {304, 16, "CounterSelect0", mad_dump_hex},
693 -    {320, 16, "CounterSelect1", mad_dump_hex},
694 -    {336, 16, "CounterSelect2", mad_dump_hex},
695 -    {352, 16, "CounterSelect3", mad_dump_hex},
696 -    {368, 16, "CounterSelect4", mad_dump_hex},
697 -    {384, 16, "CounterSelect5", mad_dump_hex},
698 -    {400, 16, "CounterSelect6", mad_dump_hex},
699 -    {416, 16, "CounterSelect7", mad_dump_hex},
700 -    {432, 16, "CounterSelect8", mad_dump_hex},
701 -    {448, 16, "CounterSelect9", mad_dump_hex},
702 -    {464, 16, "CounterSelect10", mad_dump_hex},
703 -    {480, 16, "CounterSelect11", mad_dump_hex},
704 -    {496, 16, "CounterSelect12", mad_dump_hex},
705 -    {512, 16, "CounterSelect13", mad_dump_hex},
706 -    {528, 16, "CounterSelect14", mad_dump_hex},
707 +    {BITSOFFS(288, 16), "Tag", mad_dump_hex},
708 +    {BITSOFFS(304, 16), "CounterSelect0", mad_dump_hex},
709 +    {BITSOFFS(320, 16), "CounterSelect1", mad_dump_hex},
710 +    {BITSOFFS(336, 16), "CounterSelect2", mad_dump_hex},
711 +    {BITSOFFS(352, 16), "CounterSelect3", mad_dump_hex},
712 +    {BITSOFFS(368, 16), "CounterSelect4", mad_dump_hex},
713 +    {BITSOFFS(384, 16), "CounterSelect5", mad_dump_hex},
714 +    {BITSOFFS(400, 16), "CounterSelect6", mad_dump_hex},
715 +    {BITSOFFS(416, 16), "CounterSelect7", mad_dump_hex},
716 +    {BITSOFFS(432, 16), "CounterSelect8", mad_dump_hex},
717 +    {BITSOFFS(448, 16), "CounterSelect9", mad_dump_hex},
718 +    {BITSOFFS(464, 16), "CounterSelect10", mad_dump_hex},
719 +    {BITSOFFS(480, 16), "CounterSelect11", mad_dump_hex},
720 +    {BITSOFFS(496, 16), "CounterSelect12", mad_dump_hex},
721 +    {BITSOFFS(512, 16), "CounterSelect13", mad_dump_hex},
722 +    {BITSOFFS(528, 16), "CounterSelect14", mad_dump_hex},
723      {576, 64, "SamplesOnlyOptionMask", mad_dump_hex},
724      {0, 0},            /* IB_PSC_LAST_F */
725  
726 +    /* GUIDInfo fields */
727 +    {0, 64, "GUID0", mad_dump_hex},
728 +    {64, 64, "GUID1", mad_dump_hex},
729 +    {128, 64, "GUID2", mad_dump_hex},
730 +    {192, 64, "GUID3", mad_dump_hex},
731 +    {256, 64, "GUID4", mad_dump_hex},
732 +    {320, 64, "GUID5", mad_dump_hex},
733 +    {384, 64, "GUID6", mad_dump_hex},
734 +    {448, 64, "GUID7", mad_dump_hex},
735 +
736 +    /* GUID Info Record */
737 +    {BITSOFFS(0, 16), "Lid", mad_dump_uint},
738 +    {BITSOFFS(16, 8), "BlockNum", mad_dump_uint},
739 +    {64, 64, "Guid0", mad_dump_hex},
740 +    {128, 64, "Guid1", mad_dump_hex},
741 +    {192, 64, "Guid2", mad_dump_hex},
742 +    {256, 64, "Guid3", mad_dump_hex},
743 +    {320, 64, "Guid4", mad_dump_hex},
744 +    {384, 64, "Guid5", mad_dump_hex},
745 +    {448, 64, "Guid6", mad_dump_hex},
746 +    {512, 64, "Guid7", mad_dump_hex},
747 +
748 +    /*
749 +     * More PortInfo fields
750 +     */
751 +    {BITSOFFS(480, 16), "CapabilityMask2", mad_dump_hex},
752 +    {BITSOFFS(496, 4), "LinkSpeedExtActive", mad_dump_linkspeedext},
753 +    {BITSOFFS(500, 4), "LinkSpeedExtSupported", mad_dump_linkspeedextsup},
754 +    {BITSOFFS(507, 5), "LinkSpeedExtEnabled", mad_dump_linkspeedexten},
755 +    {0, 0},            /* IB_PORT_LINK_SPEED_EXT_LAST_F */
756 +
757 +    /*
758 +     * PortExtendedSpeedsCounters fields
759 +     */
760 +    {BITSOFFS(8, 8), "PortSelect", mad_dump_uint},
761 +    {64, 64, "CounterSelect", mad_dump_hex},
762 +    {BITSOFFS(128, 16), "SyncHeaderErrorCounter", mad_dump_uint},
763 +    {BITSOFFS(144, 16), "UnknownBlockCounter", mad_dump_uint},
764 +    {BITSOFFS(160, 16), "ErrorDetectionCounterLane0", mad_dump_uint},
765 +    {BITSOFFS(176, 16), "ErrorDetectionCounterLane1", mad_dump_uint},
766 +    {BITSOFFS(192, 16), "ErrorDetectionCounterLane2", mad_dump_uint},
767 +    {BITSOFFS(208, 16), "ErrorDetectionCounterLane3", mad_dump_uint},
768 +    {BITSOFFS(224, 16), "ErrorDetectionCounterLane4", mad_dump_uint},
769 +    {BITSOFFS(240, 16), "ErrorDetectionCounterLane5", mad_dump_uint},
770 +    {BITSOFFS(256, 16), "ErrorDetectionCounterLane6", mad_dump_uint},
771 +    {BITSOFFS(272, 16), "ErrorDetectionCounterLane7", mad_dump_uint},
772 +    {BITSOFFS(288, 16), "ErrorDetectionCounterLane8", mad_dump_uint},
773 +    {BITSOFFS(304, 16), "ErrorDetectionCounterLane9", mad_dump_uint},
774 +    {BITSOFFS(320, 16), "ErrorDetectionCounterLane10", mad_dump_uint},
775 +    {BITSOFFS(336, 16), "ErrorDetectionCounterLane11", mad_dump_uint},
776 +    {352, 32, "FECCorrectableBlockCtrLane0", mad_dump_uint},
777 +    {384, 32, "FECCorrectableBlockCtrLane1", mad_dump_uint},
778 +    {416, 32, "FECCorrectableBlockCtrLane2", mad_dump_uint},
779 +    {448, 32, "FECCorrectableBlockCtrLane3", mad_dump_uint},
780 +    {480, 32, "FECCorrectableBlockCtrLane4", mad_dump_uint},
781 +    {512, 32, "FECCorrectableBlockCtrLane5", mad_dump_uint},
782 +    {544, 32, "FECCorrectableBlockCtrLane6", mad_dump_uint},
783 +    {576, 32, "FECCorrectableBlockCtrLane7", mad_dump_uint},
784 +    {608, 32, "FECCorrectableBlockCtrLane8", mad_dump_uint},
785 +    {640, 32, "FECCorrectableBlockCtrLane9", mad_dump_uint},
786 +    {672, 32, "FECCorrectableBlockCtrLane10", mad_dump_uint},
787 +    {704, 32, "FECCorrectableBlockCtrLane11", mad_dump_uint},
788 +    {736, 32, "FECUncorrectableBlockCtrLane0", mad_dump_uint},
789 +    {768, 32, "FECUncorrectableBlockCtrLane1", mad_dump_uint},
790 +    {800, 32, "FECUncorrectableBlockCtrLane2", mad_dump_uint},
791 +    {832, 32, "FECUncorrectableBlockCtrLane3", mad_dump_uint},
792 +    {864, 32, "FECUncorrectableBlockCtrLane4", mad_dump_uint},
793 +    {896, 32, "FECUncorrectableBlockCtrLane5", mad_dump_uint},
794 +    {928, 32, "FECUncorrectableBlockCtrLane6", mad_dump_uint},
795 +    {960, 32, "FECUncorrectableBlockCtrLane7", mad_dump_uint},
796 +    {992, 32, "FECUncorrectableBlockCtrLane8", mad_dump_uint},
797 +    {1024, 32, "FECUncorrectableBlockCtrLane9", mad_dump_uint},
798 +    {1056, 32, "FECUncorrectableBlockCtrLane10", mad_dump_uint},
799 +    {1088, 32, "FECUncorrectableBlockCtrLane11", mad_dump_uint},
800 +    {0, 0},            /* IB_PESC_LAST_F */
801 +
802 +    /*
803 +     * PortOpRcvCounters fields
804 +     */
805 +    {32, 32, "PortOpRcvPkts", mad_dump_uint},
806 +    {64, 32, "PortOpRcvData", mad_dump_uint},
807 +    {0, 0},            /* IB_PC_PORT_OP_RCV_COUNTERS_LAST_F */
808 +
809 +    /*
810 +     * PortFlowCtlCounters fields
811 +     */
812 +    {32, 32, "PortXmitFlowPkts", mad_dump_uint},
813 +    {64, 32, "PortRcvFlowPkts", mad_dump_uint},
814 +    {0, 0},            /* IB_PC_PORT_FLOW_CTL_COUNTERS_LAST_F */
815 +
816 +    /*
817 +     * PortVLOpPackets fields
818 +     */
819 +    {BITSOFFS(32, 16), "PortVLOpPackets0", mad_dump_uint},
820 +    {BITSOFFS(48, 16), "PortVLOpPackets1", mad_dump_uint},
821 +    {BITSOFFS(64, 16), "PortVLOpPackets2", mad_dump_uint},
822 +    {BITSOFFS(80, 16), "PortVLOpPackets3", mad_dump_uint},
823 +    {BITSOFFS(96, 16), "PortVLOpPackets4", mad_dump_uint},
824 +    {BITSOFFS(112, 16), "PortVLOpPackets5", mad_dump_uint},
825 +    {BITSOFFS(128, 16), "PortVLOpPackets6", mad_dump_uint},
826 +    {BITSOFFS(144, 16), "PortVLOpPackets7", mad_dump_uint},
827 +    {BITSOFFS(160, 16), "PortVLOpPackets8", mad_dump_uint},
828 +    {BITSOFFS(176, 16), "PortVLOpPackets9", mad_dump_uint},
829 +    {BITSOFFS(192, 16), "PortVLOpPackets10", mad_dump_uint},
830 +    {BITSOFFS(208, 16), "PortVLOpPackets11", mad_dump_uint},
831 +    {BITSOFFS(224, 16), "PortVLOpPackets12", mad_dump_uint},
832 +    {BITSOFFS(240, 16), "PortVLOpPackets13", mad_dump_uint},
833 +    {BITSOFFS(256, 16), "PortVLOpPackets14", mad_dump_uint},
834 +    {BITSOFFS(272, 16), "PortVLOpPackets15", mad_dump_uint},
835 +    {0, 0},            /* IB_PC_PORT_VL_OP_PACKETS_LAST_F */
836 +
837 +    /*
838 +     * PortVLOpData fields
839 +     */
840 +    {32, 32, "PortVLOpData0", mad_dump_uint},
841 +    {64, 32, "PortVLOpData1", mad_dump_uint},
842 +    {96, 32, "PortVLOpData2", mad_dump_uint},
843 +    {128, 32, "PortVLOpData3", mad_dump_uint},
844 +    {160, 32, "PortVLOpData4", mad_dump_uint},
845 +    {192, 32, "PortVLOpData5", mad_dump_uint},
846 +    {224, 32, "PortVLOpData6", mad_dump_uint},
847 +    {256, 32, "PortVLOpData7", mad_dump_uint},
848 +    {288, 32, "PortVLOpData8", mad_dump_uint},
849 +    {320, 32, "PortVLOpData9", mad_dump_uint},
850 +    {352, 32, "PortVLOpData10", mad_dump_uint},
851 +    {384, 32, "PortVLOpData11", mad_dump_uint},
852 +    {416, 32, "PortVLOpData12", mad_dump_uint},
853 +    {448, 32, "PortVLOpData13", mad_dump_uint},
854 +    {480, 32, "PortVLOpData14", mad_dump_uint},
855 +    {512, 32, "PortVLOpData15", mad_dump_uint},
856 +    {0, 0},            /* IB_PC_PORT_VL_OP_DATA_LAST_F */
857 +
858 +    /*
859 +     * PortVLXmitFlowCtlUpdateErrors fields
860 +     */
861 +    {BITSOFFS(32, 2), "PortVLXmitFlowCtlUpdateErrors0", mad_dump_uint},
862 +    {BITSOFFS(34, 2), "PortVLXmitFlowCtlUpdateErrors1", mad_dump_uint},
863 +    {BITSOFFS(36, 2), "PortVLXmitFlowCtlUpdateErrors2", mad_dump_uint},
864 +    {BITSOFFS(38, 2), "PortVLXmitFlowCtlUpdateErrors3", mad_dump_uint},
865 +    {BITSOFFS(40, 2), "PortVLXmitFlowCtlUpdateErrors4", mad_dump_uint},
866 +    {BITSOFFS(42, 2), "PortVLXmitFlowCtlUpdateErrors5", mad_dump_uint},
867 +    {BITSOFFS(44, 2), "PortVLXmitFlowCtlUpdateErrors6", mad_dump_uint},
868 +    {BITSOFFS(46, 2), "PortVLXmitFlowCtlUpdateErrors7", mad_dump_uint},
869 +    {BITSOFFS(48, 2), "PortVLXmitFlowCtlUpdateErrors8", mad_dump_uint},
870 +    {BITSOFFS(50, 2), "PortVLXmitFlowCtlUpdateErrors9", mad_dump_uint},
871 +    {BITSOFFS(52, 2), "PortVLXmitFlowCtlUpdateErrors10", mad_dump_uint},
872 +    {BITSOFFS(54, 2), "PortVLXmitFlowCtlUpdateErrors11", mad_dump_uint},
873 +    {BITSOFFS(56, 2), "PortVLXmitFlowCtlUpdateErrors12", mad_dump_uint},
874 +    {BITSOFFS(58, 2), "PortVLXmitFlowCtlUpdateErrors13", mad_dump_uint},
875 +    {BITSOFFS(60, 2), "PortVLXmitFlowCtlUpdateErrors14", mad_dump_uint},
876 +    {BITSOFFS(62, 2), "PortVLXmitFlowCtlUpdateErrors15", mad_dump_uint},
877 +    {0, 0},            /* IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_LAST_F */
878 +
879 +    /*
880 +     * PortVLXmitWaitCounters fields
881 +     */
882 +    {BITSOFFS(32, 16), "PortVLXmitWait0", mad_dump_uint},
883 +    {BITSOFFS(48, 16), "PortVLXmitWait1", mad_dump_uint},
884 +    {BITSOFFS(64, 16), "PortVLXmitWait2", mad_dump_uint},
885 +    {BITSOFFS(80, 16), "PortVLXmitWait3", mad_dump_uint},
886 +    {BITSOFFS(96, 16), "PortVLXmitWait4", mad_dump_uint},
887 +    {BITSOFFS(112, 16), "PortVLXmitWait5", mad_dump_uint},
888 +    {BITSOFFS(128, 16), "PortVLXmitWait6", mad_dump_uint},
889 +    {BITSOFFS(144, 16), "PortVLXmitWait7", mad_dump_uint},
890 +    {BITSOFFS(160, 16), "PortVLXmitWait8", mad_dump_uint},
891 +    {BITSOFFS(176, 16), "PortVLXmitWait9", mad_dump_uint},
892 +    {BITSOFFS(192, 16), "PortVLXmitWait10", mad_dump_uint},
893 +    {BITSOFFS(208, 16), "PortVLXmitWait11", mad_dump_uint},
894 +    {BITSOFFS(224, 16), "PortVLXmitWait12", mad_dump_uint},
895 +    {BITSOFFS(240, 16), "PortVLXmitWait13", mad_dump_uint},
896 +    {BITSOFFS(256, 16), "PortVLXmitWait14", mad_dump_uint},
897 +    {BITSOFFS(272, 16), "PortVLXmitWait15", mad_dump_uint},
898 +    {0, 0},            /* IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_LAST_F */
899 +
900 +    /*
901 +     * SwPortVLCongestion fields
902 +     */
903 +    {BITSOFFS(32, 16), "SWPortVLCongestion0", mad_dump_uint},
904 +    {BITSOFFS(48, 16), "SWPortVLCongestion1", mad_dump_uint},
905 +    {BITSOFFS(64, 16), "SWPortVLCongestion2", mad_dump_uint},
906 +    {BITSOFFS(80, 16), "SWPortVLCongestion3", mad_dump_uint},
907 +    {BITSOFFS(96, 16), "SWPortVLCongestion4", mad_dump_uint},
908 +    {BITSOFFS(112, 16), "SWPortVLCongestion5", mad_dump_uint},
909 +    {BITSOFFS(128, 16), "SWPortVLCongestion6", mad_dump_uint},
910 +    {BITSOFFS(144, 16), "SWPortVLCongestion7", mad_dump_uint},
911 +    {BITSOFFS(160, 16), "SWPortVLCongestion8", mad_dump_uint},
912 +    {BITSOFFS(176, 16), "SWPortVLCongestion9", mad_dump_uint},
913 +    {BITSOFFS(192, 16), "SWPortVLCongestion10", mad_dump_uint},
914 +    {BITSOFFS(208, 16), "SWPortVLCongestion11", mad_dump_uint},
915 +    {BITSOFFS(224, 16), "SWPortVLCongestion12", mad_dump_uint},
916 +    {BITSOFFS(240, 16), "SWPortVLCongestion13", mad_dump_uint},
917 +    {BITSOFFS(256, 16), "SWPortVLCongestion14", mad_dump_uint},
918 +    {BITSOFFS(272, 16), "SWPortVLCongestion15", mad_dump_uint},
919 +    {0, 0},            /* IB_PC_SW_PORT_VL_CONGESTION_LAST_F */
920 +
921 +    /*
922 +     * PortRcvConCtrl fields
923 +     */
924 +    {32, 32, "PortPktRcvFECN", mad_dump_uint},
925 +    {64, 32, "PortPktRcvBECN", mad_dump_uint},
926 +    {0, 0},            /* IB_PC_RCV_CON_CTRL_LAST_F */
927 +
928 +    /*
929 +     * PortSLRcvFECN fields
930 +     */
931 +    {32, 32, "PortSLRcvFECN0", mad_dump_uint},
932 +    {64, 32, "PortSLRcvFECN1", mad_dump_uint},
933 +    {96, 32, "PortSLRcvFECN2", mad_dump_uint},
934 +    {128, 32, "PortSLRcvFECN3", mad_dump_uint},
935 +    {160, 32, "PortSLRcvFECN4", mad_dump_uint},
936 +    {192, 32, "PortSLRcvFECN5", mad_dump_uint},
937 +    {224, 32, "PortSLRcvFECN6", mad_dump_uint},
938 +    {256, 32, "PortSLRcvFECN7", mad_dump_uint},
939 +    {288, 32, "PortSLRcvFECN8", mad_dump_uint},
940 +    {320, 32, "PortSLRcvFECN9", mad_dump_uint},
941 +    {352, 32, "PortSLRcvFECN10", mad_dump_uint},
942 +    {384, 32, "PortSLRcvFECN11", mad_dump_uint},
943 +    {416, 32, "PortSLRcvFECN12", mad_dump_uint},
944 +    {448, 32, "PortSLRcvFECN13", mad_dump_uint},
945 +    {480, 32, "PortSLRcvFECN14", mad_dump_uint},
946 +    {512, 32, "PortSLRcvFECN15", mad_dump_uint},
947 +    {0, 0},            /* IB_PC_SL_RCV_FECN_LAST_F */
948 +
949 +    /*
950 +     * PortSLRcvBECN fields
951 +     */
952 +    {32, 32, "PortSLRcvBECN0", mad_dump_uint},
953 +    {64, 32, "PortSLRcvBECN1", mad_dump_uint},
954 +    {96, 32, "PortSLRcvBECN2", mad_dump_uint},
955 +    {128, 32, "PortSLRcvBECN3", mad_dump_uint},
956 +    {160, 32, "PortSLRcvBECN4", mad_dump_uint},
957 +    {192, 32, "PortSLRcvBECN5", mad_dump_uint},
958 +    {224, 32, "PortSLRcvBECN6", mad_dump_uint},
959 +    {256, 32, "PortSLRcvBECN7", mad_dump_uint},
960 +    {288, 32, "PortSLRcvBECN8", mad_dump_uint},
961 +    {320, 32, "PortSLRcvBECN9", mad_dump_uint},
962 +    {352, 32, "PortSLRcvBECN10", mad_dump_uint},
963 +    {384, 32, "PortSLRcvBECN11", mad_dump_uint},
964 +    {416, 32, "PortSLRcvBECN12", mad_dump_uint},
965 +    {448, 32, "PortSLRcvBECN13", mad_dump_uint},
966 +    {480, 32, "PortSLRcvBECN14", mad_dump_uint},
967 +    {512, 32, "PortSLRcvBECN15", mad_dump_uint},
968 +    {0, 0},            /* IB_PC_SL_RCV_BECN_LAST_F */
969 +
970 +    /*
971 +     * PortXmitConCtrl fields
972 +     */
973 +    {32, 32, "PortXmitTimeCong", mad_dump_uint},
974 +    {0, 0},            /* IB_PC_XMIT_CON_CTRL_LAST_F */
975 +
976 +    /*
977 +     * PortVLXmitTimeCong fields
978 +     */
979 +    {32, 32, "PortVLXmitTimeCong0", mad_dump_uint},
980 +    {64, 32, "PortVLXmitTimeCong1", mad_dump_uint},
981 +    {96, 32, "PortVLXmitTimeCong2", mad_dump_uint},
982 +    {128, 32, "PortVLXmitTimeCong3", mad_dump_uint},
983 +    {160, 32, "PortVLXmitTimeCong4", mad_dump_uint},
984 +    {192, 32, "PortVLXmitTimeCong5", mad_dump_uint},
985 +    {224, 32, "PortVLXmitTimeCong6", mad_dump_uint},
986 +    {256, 32, "PortVLXmitTimeCong7", mad_dump_uint},
987 +    {288, 32, "PortVLXmitTimeCong8", mad_dump_uint},
988 +    {320, 32, "PortVLXmitTimeCong9", mad_dump_uint},
989 +    {352, 32, "PortVLXmitTimeCong10", mad_dump_uint},
990 +    {384, 32, "PortVLXmitTimeCong11", mad_dump_uint},
991 +    {416, 32, "PortVLXmitTimeCong12", mad_dump_uint},
992 +    {448, 32, "PortVLXmitTimeCong13", mad_dump_uint},
993 +    {480, 32, "PortVLXmitTimeCong14", mad_dump_uint},
994 +    {0, 0},            /* IB_PC_VL_XMIT_TIME_CONG_LAST_F */
995 +
996 +    /*
997 +     * Mellanox ExtendedPortInfo fields
998 +     */
999 +    {BITSOFFS(24, 8), "StateChangeEnable", mad_dump_hex},
1000 +    {BITSOFFS(56, 8), "LinkSpeedSupported", mad_dump_hex},
1001 +    {BITSOFFS(88, 8), "LinkSpeedEnabled", mad_dump_hex},
1002 +    {BITSOFFS(120, 8), "LinkSpeedActive", mad_dump_hex},
1003 +    {0, 0},            /* IB_MLNX_EXT_PORT_LAST_F */
1004 +
1005 +    /*
1006 +     * Congestion Control Mad fields
1007 +     * bytes 24-31 of congestion control mad
1008 +     */
1009 +    {192, 64, "CC_Key", mad_dump_hex},    /* IB_CC_CCKEY_F */
1010 +
1011 +    /*
1012 +     * CongestionInfo fields
1013 +     */
1014 +    {BITSOFFS(0, 16), "CongestionInfo", mad_dump_hex},
1015 +    {BITSOFFS(16, 8), "ControlTableCap", mad_dump_uint},
1016 +    {0, 0},            /* IB_CC_CONGESTION_INFO_LAST_F */
1017 +
1018 +    /*
1019 +     * CongestionKeyInfo fields
1020 +     */
1021 +    {0, 64, "CC_Key", mad_dump_hex},
1022 +    {BITSOFFS(64, 1), "CC_KeyProtectBit", mad_dump_uint},
1023 +    {BITSOFFS(80, 16), "CC_KeyLeasePeriod", mad_dump_uint},
1024 +    {BITSOFFS(96, 16), "CC_KeyViolations", mad_dump_uint},
1025 +    {0, 0},            /* IB_CC_CONGESTION_KEY_INFO_LAST_F */
1026 +
1027 +    /*
1028 +     * CongestionLog (common) fields
1029 +     */
1030 +    {BITSOFFS(0, 8), "LogType", mad_dump_uint},
1031 +    {BITSOFFS(8, 8), "CongestionFlags", mad_dump_hex},
1032 +    {0, 0},            /* IB_CC_CONGESTION_LOG_LAST_F */
1033 +
1034 +    /*
1035 +     * CongestionLog (Switch) fields
1036 +     */
1037 +    {BITSOFFS(16, 16), "LogEventsCounter", mad_dump_uint},
1038 +    {32, 32, "CurrentTimeStamp", mad_dump_uint},
1039 +    {64, 256, "PortMap", mad_dump_array},
1040 +    {0, 0},            /* IB_CC_CONGESTION_LOG_SWITCH_LAST_F */
1041 +
1042 +    /*
1043 +     * CongestionLogEvent (Switch) fields
1044 +     */
1045 +    {BITSOFFS(0, 16), "SLID", mad_dump_uint},
1046 +    {BITSOFFS(16, 16), "DLID", mad_dump_uint},
1047 +    {BITSOFFS(32, 4), "SL", mad_dump_uint},
1048 +    {64, 32, "Timestamp", mad_dump_uint},
1049 +    {0, 0},            /* IB_CC_CONGESTION_LOG_ENTRY_SWITCH_LAST_F */
1050 +
1051 +    /*
1052 +     * CongestionLog (CA) fields
1053 +     */
1054 +    {BITSOFFS(16, 16), "ThresholdEventCounter", mad_dump_uint},
1055 +    {BITSOFFS(32, 16), "ThresholdCongestionEventMap", mad_dump_hex},
1056 +    /* XXX: Q3/2010 errata lists offset 48, but that means field is not
1057 +     * world aligned.  Assume will be aligned to offset 64 later.
1058 +     */
1059 +    {BITSOFFS(64, 32), "CurrentTimeStamp", mad_dump_uint},
1060 +    {0, 0},            /* IB_CC_CONGESTION_LOG_CA_LAST_F */
1061 +
1062 +    /*
1063 +     * CongestionLogEvent (CA) fields
1064 +     */
1065 +    {BITSOFFS(0, 24), "Local_QP_CN_Entry", mad_dump_uint},
1066 +    {BITSOFFS(24, 4), "SL_CN_Entry", mad_dump_uint},
1067 +    {BITSOFFS(28, 4), "Service_Type_CN_Entry", mad_dump_hex},
1068 +    {BITSOFFS(32, 24), "Remote_QP_Number_CN_Entry", mad_dump_uint},
1069 +    {BITSOFFS(64, 16), "Local_LID_CN", mad_dump_uint},
1070 +    {BITSOFFS(80, 16), "Remote_LID_CN_Entry", mad_dump_uint},
1071 +    {BITSOFFS(96, 32), "Timestamp_CN_Entry", mad_dump_uint},
1072 +    {0, 0},            /* IB_CC_CONGESTION_LOG_ENTRY_CA_LAST_F */
1073 +
1074 +    /*
1075 +     * SwitchCongestionSetting fields
1076 +     */
1077 +    {0, 32, "Control_Map", mad_dump_hex},
1078 +    {32, 256, "Victim_Mask", mad_dump_array},
1079 +    {288, 256, "Credit_Mask", mad_dump_array},
1080 +    {BITSOFFS(544, 4), "Threshold", mad_dump_uint},
1081 +    {BITSOFFS(552, 8), "Packet_Size", mad_dump_uint},
1082 +    {BITSOFFS(560, 4), "CS_Threshold", mad_dump_uint},
1083 +    {BITSOFFS(576, 16), "CS_ReturnDelay", mad_dump_hex}, /* TODO: CCT dump */
1084 +    {BITSOFFS(592, 16), "Marking_Rate", mad_dump_uint},
1085 +    {0, 0},            /* IB_CC_SWITCH_CONGESTION_SETTING_LAST_F */
1086 +
1087 +    /*
1088 +     * SwitchPortCongestionSettingElement fields
1089 +     */
1090 +    {BITSOFFS(0, 1), "Valid", mad_dump_uint},
1091 +    {BITSOFFS(1, 1), "Control_Type", mad_dump_uint},
1092 +    {BITSOFFS(4, 4), "Threshold", mad_dump_hex},
1093 +    {BITSOFFS(8, 8), "Packet_Size", mad_dump_uint},
1094 +    {BITSOFFS(16, 16), "Cong_Parm_Marking_Rate", mad_dump_uint},
1095 +    {0, 0},            /* IB_CC_SWITCH_PORT_CONGESTION_SETTING_ELEMENT_LAST_F */
1096 +
1097 +    /*
1098 +     * CACongestionSetting fields
1099 +     */
1100 +    {BITSOFFS(0, 16), "Port_Control", mad_dump_hex},
1101 +    {BITSOFFS(16, 16), "Control_Map", mad_dump_hex},
1102 +    {0, 0},            /* IB_CC_CA_CONGESTION_SETTING_LAST_F */
1103 +
1104 +    /*
1105 +     * CACongestionEntry fields
1106 +     */
1107 +    {BITSOFFS(0, 16), "CCTI_Timer", mad_dump_uint},
1108 +    {BITSOFFS(16, 8), "CCTI_Increase", mad_dump_uint},
1109 +    {BITSOFFS(24, 8), "Trigger_Threshold", mad_dump_uint},
1110 +    {BITSOFFS(32, 8), "CCTI_Min", mad_dump_uint},
1111 +    {0, 0},            /* IB_CC_CA_CONGESTION_SETTING_ENTRY_LAST_F */
1112 +
1113 +    /*
1114 +     * CongestionControlTable fields
1115 +     */
1116 +    {BITSOFFS(0, 16), "CCTI_Limit", mad_dump_uint},
1117 +    {0, 0},            /* IB_CC_CONGESTION_CONTROL_TABLE_LAST_F */
1118 +
1119 +    /*
1120 +     * CongestionControlTableEntry fields
1121 +     */
1122 +    {BITSOFFS(0, 2), "CCT_Shift", mad_dump_uint},
1123 +    {BITSOFFS(2, 14), "CCT_Multiplier", mad_dump_uint},
1124 +    {0, 0},            /* IB_CC_CONGESTION_CONTROL_TABLE_ENTRY_LAST_F */
1125 +
1126 +    /*
1127 +     * Timestamp fields
1128 +     */
1129 +    {0, 32, "Timestamp", mad_dump_uint},
1130 +    {0, 0}, /* IB_CC_TIMESTAMP_LAST_F */
1131 +
1132 +    /* Node Record */
1133 +    {BITSOFFS(0, 16), "Lid", mad_dump_uint},
1134 +    {BITSOFFS(32, 8), "BaseVers", mad_dump_uint},
1135 +    {BITSOFFS(40, 8), "ClassVers", mad_dump_uint},
1136 +    {BITSOFFS(48, 8), "NodeType", mad_dump_node_type},
1137 +    {BITSOFFS(56, 8), "NumPorts", mad_dump_uint},
1138 +    {64, 64, "SystemGuid", mad_dump_hex},
1139 +    {128, 64, "Guid", mad_dump_hex},
1140 +    {192, 64, "PortGuid", mad_dump_hex},
1141 +    {BITSOFFS(256, 16), "PartCap", mad_dump_uint},
1142 +    {BITSOFFS(272, 16), "DevId", mad_dump_hex},
1143 +    {288, 32, "Revision", mad_dump_hex},
1144 +    {BITSOFFS(320, 8), "LocalPort", mad_dump_uint},
1145 +    {BITSOFFS(328, 24), "VendorId", mad_dump_hex},
1146 +    {352, 64 * 8, "NodeDesc", mad_dump_string},
1147 +    {0, 0}, /* IB_SA_NR_LAST_F */
1148 +
1149 +    /*
1150 +     * PortSamplesResult fields
1151 +     */
1152 +    {BITSOFFS(0, 16), "Tag", mad_dump_hex},
1153 +    {BITSOFFS(30, 2), "SampleStatus", mad_dump_hex},
1154 +    {32, 32, "Counter0", mad_dump_uint},
1155 +    {64, 32, "Counter1", mad_dump_uint},
1156 +    {96, 32, "Counter2", mad_dump_uint},
1157 +    {128, 32, "Counter3", mad_dump_uint},
1158 +    {160, 32, "Counter4", mad_dump_uint},
1159 +    {192, 32, "Counter5", mad_dump_uint},
1160 +    {224, 32, "Counter6", mad_dump_uint},
1161 +    {256, 32, "Counter7", mad_dump_uint},
1162 +    {288, 32, "Counter8", mad_dump_uint},
1163 +    {320, 32, "Counter9", mad_dump_uint},
1164 +    {352, 32, "Counter10", mad_dump_uint},
1165 +    {384, 32, "Counter11", mad_dump_uint},
1166 +    {416, 32, "Counter12", mad_dump_uint},
1167 +    {448, 32, "Counter13", mad_dump_uint},
1168 +    {480, 32, "Counter14", mad_dump_uint},
1169 +    {0, 0},            /* IB_PSR_LAST_F */
1170 +
1171      {0, 0}            /* IB_FIELD_LAST_ */
1172  
1173  };
1174 @@ -514,7 +959,7 @@
c2319a 1175      uint64_t nval;
BC 1176  
1177      nval = htonll(val);
1178 -    memcpy((char *)buf + base_offs + f->bitoffs / 8, &nval,
1179 +    memcpy( (void*)((char *)buf + base_offs + f->bitoffs / 8), (void *)&nval,
1180             sizeof(uint64_t));
1181  }
1182  
eece43 1183 @@ -521,7 +966,7 @@
c2319a 1184  static uint64_t _get_field64(void *buf, int base_offs, const ib_field_t * f)
BC 1185  {
1186      uint64_t val;
1187 -    memcpy(&val, ((char *)buf + base_offs + f->bitoffs / 8),
1188 +    memcpy( (void *)&val, (void *)((char *)buf + base_offs + f->bitoffs / 8),
1189             sizeof(uint64_t));
1190      return ntohll(val);
1191  }
529884 1192 diff -r -u /tmp/libibmad-1.3.7/src/mad.c libibmad-1.3.7/src/mad.c
AC 1193 --- /tmp/libibmad-1.3.7/src/mad.c    Wed Feb 16 02:12:53 2011
1194 +++ libibmad-1.3.7/src/mad.c    Thu Sep 13 09:31:03 2012
1195 @@ -61,6 +61,7 @@
1196          trid = random();
1197      }
1198      next = ++trid | (base << 32);
1199 +    next &= 0x00ffffffffffffff;
1200      return next;
1201  }
1202  
a4bf84 1203 diff -r -u /tmp/libibmad-1.3.7/src/resolve.c libibmad-1.3.7/src/resolve.c
SMS 1204 --- /tmp/libibmad-1.3.7/src/resolve.c    Wed Feb 16 02:12:53 2011
1205 +++ libibmad-1.3.7/src/resolve.c    Mon Oct  1 01:32:21 2012
1206 @@ -40,6 +40,7 @@
1207  #include <stdlib.h>
1208  #include <string.h>
1209  #include <arpa/inet.h>
1210 +#include <errno.h>
1211  
1212  #include <infiniband/umad.h>
1213  #include <infiniband/mad.h>
60108b 1214 @@ -57,10 +58,18 @@
a4bf84 1215  
60108b 1216      memset(sm_id, 0, sizeof(*sm_id));
AC 1217  
1218 -    if (!smp_query_via(portinfo, &self, IB_ATTR_PORT_INFO, 0, 0, srcport))
1219 +    if (!smp_query_via(portinfo, &self, IB_ATTR_PORT_INFO, 0, 0, srcport)) {
1220 +        if (!errno)
1221 +            errno = EIO;
1222          return -1;
1223 +    }
1224  
1225      mad_decode_field(portinfo, IB_PORT_SMLID_F, &lid);
1226 +    if (lid == 0) {
1227 +        if (!errno)
1228 +            errno = EIO;
1229 +        return -1;
1230 +    }
1231      mad_decode_field(portinfo, IB_PORT_SMSL_F, &sm_id->sl);
1232  
1233      return ib_portid_set(sm_id, lid, 0, 0);
1234 @@ -95,7 +104,7 @@
1235              ib_portid_t * sm_id, int timeout,
1236              const struct ibmad_port *srcport)
1237  {
1238 -    ib_portid_t sm_portid;
1239 +    ib_portid_t sm_portid = { 0 };
1240      uint8_t buf[IB_SA_DATA_SIZE] = { 0 };
1241      ib_portid_t self = { 0 };
1242      uint64_t selfguid, prefix;
1243 @@ -102,14 +111,19 @@
1244      ibmad_gid_t selfgid;
1245      uint8_t nodeinfo[64];
1246  
1247 -    if (!sm_id) {
1248 +    if (!sm_id)
a4bf84 1249          sm_id = &sm_portid;
60108b 1250 +
AC 1251 +    if (!sm_id->lid) {
1252          if (ib_resolve_smlid_via(sm_id, timeout, srcport) < 0)
a4bf84 1253              return -1;
SMS 1254      }
1255  
1256 -    if (!smp_query_via(nodeinfo, &self, IB_ATTR_NODE_INFO, 0, 0, srcport))
1257 +    if (!smp_query_via(nodeinfo, &self, IB_ATTR_NODE_INFO, 0, 0, srcport)) {
1258 +        if (!errno)
1259 +            errno = EIO;
1260          return -1;
1261 +    }
1262      mad_decode_field(nodeinfo, IB_NODE_PORT_GUID_F, &selfguid);
1263      mad_set_field64(selfgid, 0, IB_GID_PREFIX_F, IB_DEFAULT_SUBN_PREFIX);
1264      mad_set_field64(selfgid, 0, IB_GID_GUID_F, selfguid);
c2319a 1265 diff -r -u /tmp/libibmad-1.3.7/src/dump.c libibmad-1.3.7/src/dump.c
BC 1266 --- /tmp/libibmad-1.3.7/src/dump.c    Wed Feb 16 02:12:53 2011
eece43 1267 +++ libibmad-1.3.7/src/dump.c    Mon May 27 17:23:19 2013
c2319a 1268 @@ -46,12 +46,24 @@
BC 1269  
1270  void mad_dump_int(char *buf, int bufsz, void *val, int valsz)
1271  {
1272 +    /*
1273 +     * the val pointer passed to the dump routines are always 32 bit
1274 +     * integers for valsz <= 4 and 64 bit integer for the rest. It is never
1275 +     * uint8_t or uint16_t. This is because mad_decode_field always returns
1276 +     * the values as 32 bit integer even if they are 8 bit or 16 bit fields.
1277 +     */
1278      switch (valsz) {
1279      case 1:
1280 -        snprintf(buf, bufsz, "%d", *(uint32_t *) val & 0xff);
1281 +#if defined(_BIG_ENDIAN)
1282 +        val = ((uint8_t *)val) + 3;
1283 +#endif /* _BIG_ENDIAN */
1284 +        snprintf(buf, bufsz, "%d", *(uint8_t *) val & 0xff);
1285          break;
1286      case 2:
1287 -        snprintf(buf, bufsz, "%d", *(uint32_t *) val & 0xffff);
1288 +#if defined(_BIG_ENDIAN)
1289 +        val = ((uint16_t *)val) + 1;
1290 +#endif /* _BIG_ENDIAN */
1291 +        snprintf(buf, bufsz, "%d", *(uint16_t *) val & 0xffff);
1292          break;
1293      case 3:
1294      case 4:
1295 @@ -71,12 +83,24 @@
1296  
1297  void mad_dump_uint(char *buf, int bufsz, void *val, int valsz)
1298  {
1299 +    /*
1300 +     * the val pointer passed to the dump routines are always 32 bit
1301 +     * integers for valsz <= 4 and 64 bit integer for the rest. It is never
1302 +     * uint8_t or uint16_t. This is because mad_decode_field always returns
1303 +     * the values as 32 bit integer even if they are 8 bit or 16 bit fields.
1304 +     */
1305      switch (valsz) {
1306      case 1:
1307 -        snprintf(buf, bufsz, "%u", *(uint32_t *) val & 0xff);
1308 +#if defined(_BIG_ENDIAN)
1309 +        val = ((uint8_t *)val) + 3;
1310 +#endif /* _BIG_ENDIAN */
1311 +        snprintf(buf, bufsz, "%u", *(uint8_t *) val & 0xff);
1312          break;
1313      case 2:
1314 -        snprintf(buf, bufsz, "%u", *(uint32_t *) val & 0xffff);
1315 +#if defined(_BIG_ENDIAN)
1316 +        val = ((uint16_t *)val) + 1;
1317 +#endif /* _BIG_ENDIAN */
1318 +        snprintf(buf, bufsz, "%u", *(uint16_t *) val & 0xffff);
1319          break;
1320      case 3:
1321      case 4:
1322 @@ -96,15 +120,28 @@
1323  
1324  void mad_dump_hex(char *buf, int bufsz, void *val, int valsz)
1325  {
1326 +    /*
1327 +     * the val pointer passed to the dump routines are always 32 bit
1328 +     * integers for valsz <= 4 and 64 bit integer for the rest. It is never
1329 +     * uint8_t or uint16_t. This is because mad_decode_field always returns
1330 +     * the values as 32 bit integer even if they are 8 bit or 16 bit fields.
1331 +     */
1332      switch (valsz) {
1333      case 1:
1334 -        snprintf(buf, bufsz, "0x%02x", *(uint32_t *) val & 0xff);
1335 +#if defined(_BIG_ENDIAN)
1336 +        val = ((uint8_t *)val) + 3;
1337 +#endif /* _BIG_ENDIAN */
1338 +        snprintf(buf, bufsz, "0x%02x", *(uint8_t *) val & 0xff);
1339          break;
1340      case 2:
1341 -        snprintf(buf, bufsz, "0x%04x", *(uint32_t *) val & 0xffff);
1342 +#if defined(_BIG_ENDIAN)
1343 +        val = ((uint16_t *)val) + 1;
1344 +#endif /* _BIG_ENDIAN */
1345 +        snprintf(buf, bufsz, "0x%04x", *(uint16_t *) val & 0xffff);
1346          break;
1347      case 3:
1348 -        snprintf(buf, bufsz, "0x%06x", *(uint32_t *) val & 0xffffff);
1349 +        //snprintf(buf, bufsz, "0x%06x", *(uint32_t *) val & 0xffffff);
1350 +        snprintf(buf, bufsz, "0x%x", *(uint32_t *)val & 0xffffff);
1351          break;
1352      case 4:
1353          snprintf(buf, bufsz, "0x%08x", *(uint32_t *) val);
1354 @@ -132,12 +169,24 @@
1355  
1356  void mad_dump_rhex(char *buf, int bufsz, void *val, int valsz)
1357  {
1358 +    /*
1359 +     * the val pointer passed to the dump routines are always 32 bit
1360 +     * integers for valsz <= 4 and 64 bit integer for the rest. It is never
1361 +     * uint8_t or uint16_t. This is because mad_decode_field always returns
1362 +     * the values as 32 bit integer even if they are 8 bit or 16 bit fields.
1363 +     */
1364      switch (valsz) {
1365      case 1:
1366 -        snprintf(buf, bufsz, "%02x", *(uint32_t *) val & 0xff);
1367 +#if defined(_BIG_ENDIAN)
1368 +        val = ((uint8_t *)val) + 3;
1369 +#endif /* _BIG_ENDIAN */
1370 +        snprintf(buf, bufsz, "%02x", *(uint8_t *) val & 0xff);
1371          break;
1372      case 2:
1373 -        snprintf(buf, bufsz, "%04x", *(uint32_t *) val & 0xffff);
1374 +#if defined(_BIG_ENDIAN)
1375 +        val = ((uint16_t *)val) + 1;
1376 +#endif /* _BIG_ENDIAN */
1377 +        snprintf(buf, bufsz, "%04x", *(uint16_t *) val & 0xffff);
1378          break;
1379      case 3:
1380          snprintf(buf, bufsz, "%06x", *(uint32_t *) val & 0xffffff);
eece43 1381 @@ -308,6 +357,21 @@
BC 1382      dump_linkspeed(buf, bufsz, speed);
1383  }
1384  
1385 +void mad_dump_linkspeedext(char *buf, int bufsz, void *val, int valsz)
1386 +{
1387 +    return;
1388 +}
1389 +
1390 +void mad_dump_linkspeedextsup(char *buf, int bufsz, void *val, int valsz)
1391 +{
1392 +    return;
1393 +}
1394 +
1395 +void mad_dump_linkspeedexten(char *buf, int bufsz, void *val, int valsz)
1396 +{
1397 +    return;
1398 +}
1399 +
1400  void mad_dump_portstate(char *buf, int bufsz, void *val, int valsz)
1401  {
1402      int state = *(int *)val;
1403 @@ -760,6 +824,158 @@
1404      _dump_fields(buf, bufsz, val, IB_PSC_OPCODE_F, IB_PSC_LAST_F);
1405  }
1406  
1407 +void mad_dump_portsamples_result(char *buf, int bufsz, void *val, int valsz)
1408 +{
1409 +
1410 +    return;
1411 +}
1412 +
1413 +void mad_dump_port_ext_speeds_counters(char *buf, int bufsz, void *val, int valsz)
1414 +{
1415 +    return;
1416 +}
1417 +
1418 +void mad_dump_perfcounters_port_op_rcv_counters(char *buf, int bufsz, void *val, int valsz)
1419 +{
1420 +    return;
1421 +}
1422 +
1423 +void mad_dump_perfcounters_port_flow_ctl_counters(char *buf, int bufsz, void *val, int valsz)
1424 +{
1425 +    return;
1426 +}
1427 +
1428 +void mad_dump_perfcounters_port_vl_op_packet(char *buf, int bufsz, void *val, int valsz)
1429 +{
1430 +    return;
1431 +}
1432 +
1433 +void mad_dump_perfcounters_port_vl_op_data(char *buf, int bufsz, void *val, int valsz)
1434 +{
1435 +    return;
1436 +}
1437 +
1438 +void mad_dump_perfcounters_port_vl_xmit_flow_ctl_update_errors(char *buf, int bufsz, void *val, int valsz)
1439 +{
1440 +    return;
1441 +}
1442 +
1443 +void mad_dump_perfcounters_port_vl_xmit_wait_counters(char *buf, int bufsz, void *val, int valsz)
1444 +{
1445 +    return;
1446 +}
1447 +
1448 +void mad_dump_perfcounters_sw_port_vl_congestion(char *buf, int bufsz, void *val, int valsz)
1449 +{
1450 +    return;
1451 +}
1452 +
1453 +
1454 +void mad_dump_perfcounters_rcv_con_ctrl(char *buf, int bufsz, void *val, int valsz)
1455 +{
1456 +    return;
1457 +}
1458 +
1459 +void mad_dump_perfcounters_sl_rcv_fecn(char *buf, int bufsz, void *val, int valsz)
1460 +{
1461 +    return;
1462 +}
1463 +
1464 +void mad_dump_perfcounters_sl_rcv_becn(char *buf, int bufsz, void *val, int valsz)
1465 +{
1466 +    return;
1467 +}
1468 +
1469 +void mad_dump_perfcounters_xmit_con_ctrl(char *buf, int bufsz, void *val, int valsz)
1470 +{
1471 +    return;
1472 +}
1473 +
1474 +void mad_dump_perfcounters_vl_xmit_time_cong(char *buf, int bufsz, void *val, int valsz)
1475 +{
1476 +    return;
1477 +}
1478 +
1479 +void mad_dump_mlnx_ext_port_info(char *buf, int bufsz, void *val, int valsz)
1480 +{
1481 +    return;
1482 +}
1483 +
1484 +void mad_dump_cc_congestioninfo(char *buf, int bufsz, void *val, int valsz)
1485 +{
1486 +    return;
1487 +}
1488 +
1489 +void mad_dump_cc_congestionkeyinfo(char *buf, int bufsz, void *val, int valsz)
1490 +{
1491 +    return;
1492 +}
1493 +
1494 +void mad_dump_cc_congestionlog(char *buf, int bufsz, void *val, int valsz)
1495 +{
1496 +    return;
1497 +}
1498 +
1499 +void mad_dump_cc_congestionlogswitch(char *buf, int bufsz, void *val, int valsz)
1500 +{
1501 +    return;
1502 +}
1503 +
1504 +void mad_dump_cc_congestionlogentryswitch(char *buf, int bufsz, void *val, int valsz)
1505 +{
1506 +    return;
1507 +}
1508 +
1509 +void mad_dump_cc_congestionlogca(char *buf, int bufsz, void *val, int valsz)
1510 +{
1511 +    return;
1512 +}
1513 +
1514 +void mad_dump_cc_congestionlogentryca(char *buf, int bufsz, void *val, int valsz)
1515 +{
1516 +    return;
1517 +}
1518 +
1519 +void mad_dump_cc_switchcongestionsetting(char *buf, int bufsz, void *val, int valsz)
1520 +{
1521 +    return;
1522 +}
1523 +
1524 +void mad_dump_cc_switchportcongestionsettingelement(char *buf, int bufsz, void *val, int valsz)
1525 +{
1526 +    return;
1527 +}
1528 +
1529 +void mad_dump_cc_cacongestionsetting(char *buf, int bufsz, void *val, int valsz)
1530 +{
1531 +    return;
1532 +}
1533 +
1534 +void mad_dump_cc_cacongestionentry(char *buf, int bufsz, void *val, int valsz)
1535 +{
1536 +    return;
1537 +}
1538 +
1539 +void mad_dump_cc_congestioncontroltable(char *buf, int bufsz, void *val, int valsz)
1540 +{
1541 +    return;
1542 +}
1543 +
1544 +void mad_dump_cc_congestioncontroltableentry(char *buf, int bufsz, void *val, int valsz)
1545 +{
1546 +    return;
1547 +}
1548 +
1549 +void mad_dump_cc_timestamp(char *buf, int bufsz, void *val, int valsz)
1550 +{
1551 +    return;
1552 +}
1553 +
1554 +void mad_dump_classportinfo(char *buf, int bufsz, void *val, int valsz)
1555 +{
1556 +    return;
1557 +}
1558 +
1559  void xdump(FILE * file, char *msg, void *p, int size)
1560  {
1561  #define HEX(x)  ((x) < 10 ? '0' + (x) : 'a' + ((x) -10))
a4bf84 1562 diff -r -u /tmp/libibmad-1.3.7/src/sa.c libibmad-1.3.7/src/sa.c
SMS 1563 --- /tmp/libibmad-1.3.7/src/sa.c    Wed Feb 16 02:12:53 2011
1564 +++ libibmad-1.3.7/src/sa.c    Mon Oct  1 01:32:21 2012
1565 @@ -38,6 +38,7 @@
1566  #include <stdio.h>
1567  #include <stdlib.h>
1568  #include <string.h>
1569 +#include <errno.h>
1570  
1571  #include <infiniband/mad.h>
1572  #include "mad_internal.h"
1573 @@ -56,6 +57,7 @@
1574  
1575      if (portid->lid <= 0) {
1576          IBWARN("only lid routes are supported");
1577 +        errno = EIO;
1578          return NULL;
1579      }
1580  
ad7f62 1581 @@ -144,4 +146,48 @@
BC 1582            void *buf)
1583  {
1584      return ib_path_query_via(ibmp, srcgid, destgid, sm_id, buf);
1585 +}
1586 +
1587 +/* NodeRecord */
1588 +#define IB_NR_COMPMASK_LID                (1ull<<0)
1589 +#define IB_NR_COMPMASK_RESERVED1            (1ull<<1)
1590 +#define IB_NR_COMPMASK_BASEVERSION            (1ull<<2)
1591 +#define IB_NR_COMPMASK_CLASSVERSION            (1ull<<3)
1592 +#define IB_NR_COMPMASK_NODETYPE                (1ull<<4)
1593 +#define IB_NR_COMPMASK_NUMPORTS                (1ull<<5)
1594 +#define IB_NR_COMPMASK_SYSIMAGEGUID            (1ull<<6)
1595 +#define IB_NR_COMPMASK_NODEGUID                (1ull<<7)
1596 +#define IB_NR_COMPMASK_PORTGUID                (1ull<<8)
1597 +#define IB_NR_COMPMASK_PARTCAP                (1ull<<9)
1598 +#define IB_NR_COMPMASK_DEVID                (1ull<<10)
1599 +#define IB_NR_COMPMASK_REV                (1ull<<11)
1600 +#define IB_NR_COMPMASK_PORTNUM                (1ull<<12)
1601 +#define IB_NR_COMPMASK_VENDID                (1ull<<13)
1602 +#define IB_NR_COMPMASK_NODEDESC                (1ull<<14)
1603 +
1604 +#define IB_NR_DEF_MASK IB_NR_COMPMASK_PORTGUID
1605 +
1606 +int ib_node_query_via(const struct ibmad_port *srcport, uint64_t guid,
1607 +              ib_portid_t * sm_id, void *buf)
1608 +{
1609 +    ib_sa_call_t sa = { 0 };
1610 +    uint8_t *p;
1611 +
1612 +    memset(&sa, 0, sizeof sa);
1613 +    sa.method = IB_MAD_METHOD_GET;
1614 +    sa.attrid = IB_SA_ATTR_NODERECORD;
1615 +    sa.mask = IB_NR_DEF_MASK;
1616 +    sa.trid = mad_trid();
1617 +
1618 +    memset(buf, 0, IB_SA_NR_RECSZ);
1619 +
1620 +    mad_encode_field(buf, IB_SA_NR_PORT_GUID_F, &guid);
1621 +
1622 +    p = sa_rpc_call(srcport, buf, sm_id, &sa, 0);
1623 +    if (!p) {
1624 +        IBWARN("sa call node_query failed");
1625 +        return -1;
1626 +    }
1627 +
1628 +    return 0;
1629  }
1630 diff -r -u /tmp/libibmad-1.3.7/src/libibmad.map libibmad-1.3.7/src/libibmad.map
1631 --- /tmp/libibmad-1.3.7/src/libibmad.map    Wed Feb 16 02:12:53 2011
eece43 1632 +++ libibmad-1.3.7/src/libibmad.map    Thu Apr  4 12:02:51 2013
ad7f62 1633 @@ -102,6 +102,7 @@
BC 1634          ib_vendor_call_via;
1635          smp_query_via;
1636          smp_set_via;
1637 +        ib_node_query_via;
1638          ib_path_query_via;
1639          ib_resolve_smlid_via;
1640          ib_resolve_guid_via;
c2319a 1641 diff -r -u /tmp/libibmad-1.3.7/src/rpc.c libibmad-1.3.7/src/rpc.c
BC 1642 --- /tmp/libibmad-1.3.7/src/rpc.c    Wed Feb 16 02:12:53 2011
1643 +++ libibmad-1.3.7/src/rpc.c    Thu Feb 24 11:27:14 2011
1644 @@ -152,7 +152,7 @@
1645  
1646          length = len;
1647          if (umad_send(port_id, agentid, sndbuf, length, timeout, 0) < 0) {
1648 -            IBWARN("send failed; %m");
1649 +            IBWARN("send failed; %s", strerror(errno));
1650              return -1;
1651          }
1652  
1653 @@ -161,7 +161,7 @@
1654          do {
1655              length = len;
1656              if (umad_recv(port_id, rcvbuf, &length, timeout) < 0) {
1657 -                IBWARN("recv failed: %m");
1658 +                IBWARN("recv failed: %s", strerror(errno));
1659                  return -1;
1660              }
1661  
66e620 1662 @@ -175,6 +175,7 @@
BC 1663                       IB_MAD_TRID_F) != trid);
1664  
1665          status = umad_status(rcvbuf);
1666 +        errno = status;
1667          if (!status)
1668              return length;    /* done */
1669          if (status == ENOMEM)
1670 @@ -337,7 +338,7 @@
c2319a 1671          IBPANIC("can't init UMAD library");
BC 1672  
1673      if ((fd = umad_open_port(dev_name, dev_port)) < 0)
1674 -        IBPANIC("can't open UMAD port (%s:%d)", dev_name, dev_port);
1675 +        IBPANIC("can't open UMAD port (%s:%d)", dev_name?dev_name:"(nil)", dev_port);
1676  
1677      if (num_classes >= MAX_CLASS)
1678          IBPANIC("too many classes %d requested", num_classes);
1679 diff -r -u /tmp/libibmad-1.3.7/src/serv.c libibmad-1.3.7/src/serv.c
1680 --- /tmp/libibmad-1.3.7/src/serv.c    Wed Feb 16 02:12:53 2011
eece43 1681 +++ libibmad-1.3.7/src/serv.c    Tue Mar  5 13:18:51 2013
c2319a 1682 @@ -38,6 +38,7 @@
BC 1683  #include <stdio.h>
1684  #include <stdlib.h>
1685  #include <string.h>
1686 +#include <errno.h>
1687  
1688  #include <infiniband/umad.h>
1689  #include <infiniband/mad.h>
1690 @@ -75,7 +76,7 @@
1691      if (umad_send(srcport->port_id, srcport->class_agents[rpc->mgtclass],
1692                umad, IB_MAD_SIZE, mad_get_timeout(srcport, rpc->timeout),
1693                0) < 0) {
1694 -        IBWARN("send failed; %m");
1695 +        IBWARN("send failed; %s", strerror(errno));
1696          return -1;
1697      }
1698  
1699 @@ -157,7 +158,7 @@
1700      if (umad_send
1701          (srcport->port_id, srcport->class_agents[rpc.mgtclass], umad,
1702           IB_MAD_SIZE, mad_get_timeout(srcport, rpc.timeout), 0) < 0) {
1703 -        DEBUG("send failed; %m");
1704 +        DEBUG("send failed; %s", strerror(errno));
1705          return -1;
1706      }
1707  
1708 @@ -179,7 +180,7 @@
1709                     mad_get_timeout(srcport, timeout))) < 0) {
1710          if (!umad)
1711              umad_free(mad);
1712 -        DEBUG("recv failed: %m");
1713 +        DEBUG("recv failed: %s", strerror(errno));
1714          return 0;
1715      }
1716