@@ -47,21 +47,26 @@
#endif /* __cplusplus */
BEGIN_C_DECLS
+
+typedef uint16_t be16_t;
+typedef uint32_t be32_t;
+typedef uint64_t be64_t;
+
#define UMAD_MAX_DEVICES 32
#define UMAD_ANY_PORT 0
typedef struct ib_mad_addr {
- uint32_t qpn;
- uint32_t qkey;
- uint16_t lid;
+ be32_t qpn;
+ be32_t qkey;
+ be16_t lid;
uint8_t sl;
uint8_t path_bits;
uint8_t grh_present;
uint8_t gid_index;
uint8_t hop_limit;
uint8_t traffic_class;
- uint8_t gid[16];
- uint32_t flow_label;
- uint16_t pkey_index;
+ uint8_t gid[16]; /* network-byte order */
+ be32_t flow_label;
+ be16_t pkey_index;
uint8_t reserved[6];
} ib_mad_addr_t;
@@ -87,14 +87,17 @@ enum {
UMAD_LEN_SA_DATA = 200
};
+/*
+ * sm_key is not aligned on an 8-byte boundary, so is defined as a byte array
+ */
struct umad_sa_packet {
struct umad_hdr mad_hdr;
struct umad_rmpp_hdr rmpp_hdr;
- uint8_t sm_key[8];
- uint16_t attr_offset;
- uint16_t reserved;
- uint64_t comp_mask;
- uint8_t data[UMAD_LEN_SA_DATA];
+ uint8_t sm_key[8]; /* network-byte order */
+ be16_t attr_offset;
+ be16_t reserved;
+ be64_t comp_mask;
+ uint8_t data[UMAD_LEN_SA_DATA]; /* network-byte order */
};
END_C_DECLS
@@ -82,16 +82,16 @@ struct umad_smp {
uint8_t mgmt_class;
uint8_t class_version;
uint8_t method;
- uint16_t status;
+ be16_t status;
uint8_t hop_ptr;
uint8_t hop_cnt;
- uint64_t tid;
- uint16_t attr_id;
- uint16_t resv;
- uint32_t attr_mod;
- uint64_t mkey;
- uint16_t dr_slid;
- uint16_t dr_dlid;
+ be64_t tid;
+ be16_t attr_id;
+ be16_t resv;
+ be32_t attr_mod;
+ be64_t mkey;
+ be16_t dr_slid;
+ be16_t dr_dlid;
uint8_t reserved[28];
uint8_t data[UMAD_LEN_SMP_DATA];
uint8_t initial_path[UMAD_SMP_MAX_HOPS];
@@ -38,6 +38,7 @@
#define _UMAD_TYPES_H
#include <stdint.h>
+#include <infiniband/umad.h>
#ifdef __cplusplus
# define BEGIN_C_DECLS extern "C" {
@@ -149,11 +150,11 @@ struct umad_hdr {
uint8_t class_version;
uint8_t method;
uint16_t status;
- uint16_t class_specific;
- uint64_t tid;
- uint16_t attr_id;
- uint16_t resv;
- uint32_t attr_mod;
+ be16_t class_specific;
+ be64_t tid;
+ be16_t attr_id;
+ be16_t resv;
+ be32_t attr_mod;
};
struct umad_rmpp_hdr {
@@ -161,27 +162,27 @@ struct umad_rmpp_hdr {
uint8_t rmpp_type;
uint8_t rmpp_rtime_flags;
uint8_t rmpp_status;
- uint32_t seg_num;
- uint32_t paylen_newwin;
+ be32_t seg_num;
+ be32_t paylen_newwin;
};
struct umad_packet {
struct umad_hdr mad_hdr;
- uint8_t data[UMAD_LEN_DATA];
+ uint8_t data[UMAD_LEN_DATA]; /* network-byte order */
};
struct umad_rmpp_packet {
struct umad_hdr mad_hdr;
struct umad_rmpp_hdr rmpp_hdr;
- uint8_t data[UMAD_LEN_RMPP_DATA];
+ uint8_t data[UMAD_LEN_RMPP_DATA]; /* network-byte order */
};
struct umad_vendor_packet {
struct umad_hdr mad_hdr;
struct umad_rmpp_hdr rmpp_hdr;
uint8_t reserved;
- uint8_t oui[3];
- uint8_t data[UMAD_LEN_VENDOR_DATA];
+ uint8_t oui[3]; /* network-byte order */
+ uint8_t data[UMAD_LEN_VENDOR_DATA]; /* network-byte order */
};
enum {
The ib management interfaces require that the user specify certain values in network-byte order. To clarify which values should be in big endian format, introduce a new data type at the libibumad level. Signed-off-by: Sean Hefty <sean.hefty@intel.com> --- include/infiniband/umad.h | 17 +++++++++++------ include/infiniband/umad_sa.h | 13 ++++++++----- include/infiniband/umad_sm.h | 16 ++++++++-------- include/infiniband/umad_types.h | 23 ++++++++++++----------- 4 files changed, 39 insertions(+), 30 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html