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 <[email protected]>
---
 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(-)

diff --git a/include/infiniband/umad.h b/include/infiniband/umad.h
index 6c337c0..b1046e4 100644
--- a/include/infiniband/umad.h
+++ b/include/infiniband/umad.h
@@ -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;
 
diff --git a/include/infiniband/umad_sa.h b/include/infiniband/umad_sa.h
index f3e161e..92248de 100755
--- a/include/infiniband/umad_sa.h
+++ b/include/infiniband/umad_sa.h
@@ -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
diff --git a/include/infiniband/umad_sm.h b/include/infiniband/umad_sm.h
index 62c75da..10348d4 100755
--- a/include/infiniband/umad_sm.h
+++ b/include/infiniband/umad_sm.h
@@ -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];
diff --git a/include/infiniband/umad_types.h b/include/infiniband/umad_types.h
index 54b7e72..bf93add 100755
--- a/include/infiniband/umad_types.h
+++ b/include/infiniband/umad_types.h
@@ -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 {


--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to