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.

Byte arrays which are in big endian format are simply marked
with a comment.

The new data types do not contain the 'umad' prefix in order to
allow the definition to move to another library (such as libibverbs)
and be used by other packages. 

Signed-off-by: Sean Hefty <[email protected]>
---
 libibumad/include/infiniband/umad.h       |   21 +++++++++++++--------
 libibumad/include/infiniband/umad_sa.h    |   13 ++++++++-----
 libibumad/include/infiniband/umad_sm.h    |   16 ++++++++--------
 libibumad/include/infiniband/umad_types.h |   23 ++++++++++++-----------
 4 files changed, 41 insertions(+), 32 deletions(-)

diff --git a/libibumad/include/infiniband/umad.h 
b/libibumad/include/infiniband/umad.h
index a798cf8..99f5bc9 100755
--- a/libibumad/include/infiniband/umad.h
+++ b/libibumad/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;
 
@@ -154,9 +159,9 @@ typedef struct umad_ca {
 typedef struct umad_filter {
        uint8_t  mgmt_class;
        uint8_t  mgmt_version;
-       uint16_t attr_id;
+       be16_t   attr_id;
        uint8_t  errors;
-       uint8_t  oui[3];
+       uint8_t  oui[3]; /* network-byte order */
 } umad_filter_t;
 
 int umad_init(void);
diff --git a/libibumad/include/infiniband/umad_sa.h 
b/libibumad/include/infiniband/umad_sa.h
index f3e161e..92248de 100755
--- a/libibumad/include/infiniband/umad_sa.h
+++ b/libibumad/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/libibumad/include/infiniband/umad_sm.h 
b/libibumad/include/infiniband/umad_sm.h
index 62c75da..10348d4 100755
--- a/libibumad/include/infiniband/umad_sm.h
+++ b/libibumad/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/libibumad/include/infiniband/umad_types.h 
b/libibumad/include/infiniband/umad_types.h
index 54b7e72..bf93add 100755
--- a/libibumad/include/infiniband/umad_types.h
+++ b/libibumad/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