@@ -124,6 +124,41 @@ int requested_lid_flag = 0;
uint64_t requested_guid = 0;
int requested_guid_flag = 0;
+#define SA_ERR_UNKNOWN IB_SA_MAD_STATUS_PRIO_SUGGESTED
+
+const char *ib_sa_error_str[] = {
+ "SA_NO_ERROR",
+ "SA_ERR_NO_RESOURCES",
+ "SA_ERR_REQ_INVALID",
+ "SA_ERR_NO_RECORDS",
+ "SA_ERR_TOO_MANY_RECORDS",
+ "SA_ERR_REQ_INVALID_GID",
+ "SA_ERR_REQ_INSUFFICIENT_COMPONENTS",
+ "SA_ERR_REQ_DENIED",
+ "SA_ERR_STATUS_PRIO_SUGGESTED",
+ "SA_ERR_UNKNOWN"
+};
+
+static inline const char *ib_sa_err_str(IN uint8_t status)
+{
+ if (status > SA_ERR_UNKNOWN)
+ status = SA_ERR_UNKNOWN;
+ return (ib_sa_error_str[status]);
+}
+
+static inline void report_err(int status)
+{
+ int st = status & 0xff;
+
+ if (st)
+ fprintf(stderr, "ERROR: Query result returned: %s (0x%x)\n",
+ ib_get_err_str(st), status);
+ st = status >> 8;
+ if (st)
+ fprintf(stderr, "ERROR: Query result returned: %s (0x%x)\n",
+ ib_sa_err_str(st), status);
+}
+
static int sa_query(struct bind_handle *h, uint8_t method,
uint16_t attr, uint32_t mod, uint64_t comp_mask,
uint64_t sm_key, void *data)
@@ -794,8 +829,7 @@ static int get_any_records(bind_handle_t h,
}
if (result.status != IB_SUCCESS) {
- fprintf(stderr, "Query result returned: %s\n",
- ib_get_err_str(result.status));
+ report_err(result.status);
return result.status;
}
@@ -1009,8 +1043,7 @@ static int get_print_class_port_info(bind_handle_t h)
return ret;
}
if (result.status != IB_SUCCESS) {
- fprintf(stderr, "ERROR: Query result returned: %s\n",
- ib_get_err_str(result.status));
+ report_err(result.status);
return (result.status);
}
dump_results(&result, dump_class_port_info);