This source file includes following definitions.
- mca_pml_ob1_common_hdr_prepare
- mca_pml_ob1_match_hdr_prepare
- mca_pml_ob1_rendezvous_hdr_prepare
- mca_pml_ob1_rget_hdr_prepare
- mca_pml_ob1_frag_hdr_prepare
- mca_pml_ob1_ack_hdr_prepare
- mca_pml_ob1_rdma_hdr_prepare
- mca_pml_ob1_fin_hdr_prepare
- ob1_hdr_ntoh
- ob1_hdr_hton_intr
- ob1_hdr_copy
   1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 #ifndef MCA_PML_OB1_HEADER_H
  26 #define MCA_PML_OB1_HEADER_H
  27 
  28 #include "ompi_config.h"
  29 #ifdef HAVE_SYS_TYPES_H
  30 #include <sys/types.h>
  31 #endif
  32 #ifdef HAVE_NETINET_IN_H
  33 #include <netinet/in.h>
  34 #endif
  35 
  36 #include "opal/types.h"
  37 #include "opal/util/arch.h"
  38 #include "opal/mca/btl/btl.h"
  39 #include "ompi/proc/proc.h"
  40 
  41 #define MCA_PML_OB1_HDR_TYPE_MATCH     (MCA_BTL_TAG_PML + 1)
  42 #define MCA_PML_OB1_HDR_TYPE_RNDV      (MCA_BTL_TAG_PML + 2)
  43 #define MCA_PML_OB1_HDR_TYPE_RGET      (MCA_BTL_TAG_PML + 3)
  44 #define MCA_PML_OB1_HDR_TYPE_ACK       (MCA_BTL_TAG_PML + 4)
  45 #define MCA_PML_OB1_HDR_TYPE_NACK      (MCA_BTL_TAG_PML + 5)
  46 #define MCA_PML_OB1_HDR_TYPE_FRAG      (MCA_BTL_TAG_PML + 6)
  47 #define MCA_PML_OB1_HDR_TYPE_GET       (MCA_BTL_TAG_PML + 7)
  48 #define MCA_PML_OB1_HDR_TYPE_PUT       (MCA_BTL_TAG_PML + 8)
  49 #define MCA_PML_OB1_HDR_TYPE_FIN       (MCA_BTL_TAG_PML + 9)
  50 
  51 #define MCA_PML_OB1_HDR_FLAGS_ACK     1  
  52 #define MCA_PML_OB1_HDR_FLAGS_NBO     2  
  53 #define MCA_PML_OB1_HDR_FLAGS_PIN     4  
  54 #define MCA_PML_OB1_HDR_FLAGS_CONTIG  8  
  55 #define MCA_PML_OB1_HDR_FLAGS_NORDMA  16 
  56 #define MCA_PML_OB1_HDR_FLAGS_SIGNAL  32 
  57 
  58 
  59 
  60 
  61 struct mca_pml_ob1_common_hdr_t {
  62     uint8_t hdr_type;  
  63     uint8_t hdr_flags; 
  64 };
  65 typedef struct mca_pml_ob1_common_hdr_t mca_pml_ob1_common_hdr_t;
  66 
  67 static inline void mca_pml_ob1_common_hdr_prepare (mca_pml_ob1_common_hdr_t *hdr, uint8_t hdr_type,
  68                                                    uint8_t hdr_flags)
  69 {
  70     hdr->hdr_type = hdr_type;
  71     hdr->hdr_flags = hdr_flags;
  72 }
  73 
  74 #define MCA_PML_OB1_COMMON_HDR_NTOH(h)
  75 #define MCA_PML_OB1_COMMON_HDR_HTON(h)
  76 
  77 
  78 
  79 
  80 
  81 struct mca_pml_ob1_match_hdr_t {
  82     mca_pml_ob1_common_hdr_t hdr_common;   
  83     uint16_t hdr_ctx;                      
  84     int32_t  hdr_src;                      
  85     int32_t  hdr_tag;                      
  86     uint16_t hdr_seq;                      
  87 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
  88     uint8_t  hdr_padding[2];               
  89 #endif
  90 };
  91 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
  92 #define OMPI_PML_OB1_MATCH_HDR_LEN  16
  93 #else
  94 #define OMPI_PML_OB1_MATCH_HDR_LEN  14
  95 #endif
  96 
  97 typedef struct mca_pml_ob1_match_hdr_t mca_pml_ob1_match_hdr_t;
  98 
  99 static inline void mca_pml_ob1_match_hdr_prepare (mca_pml_ob1_match_hdr_t *hdr, uint8_t hdr_type, uint8_t hdr_flags,
 100                                                   uint16_t hdr_ctx, int32_t hdr_src, int32_t hdr_tag, uint16_t hdr_seq)
 101 {
 102     mca_pml_ob1_common_hdr_prepare (&hdr->hdr_common, hdr_type, hdr_flags);
 103     hdr->hdr_ctx = hdr_ctx;
 104     hdr->hdr_src = hdr_src;
 105     hdr->hdr_tag = hdr_tag;
 106     hdr->hdr_seq = hdr_seq;
 107 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
 108     hdr->hdr_padding[0] = 0;
 109     hdr->hdr_padding[1] = 0;
 110 #endif
 111 }
 112 
 113 #define MCA_PML_OB1_MATCH_HDR_NTOH(h) \
 114 do { \
 115     MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common); \
 116     (h).hdr_ctx = ntohs((h).hdr_ctx); \
 117     (h).hdr_src = ntohl((h).hdr_src); \
 118     (h).hdr_tag = ntohl((h).hdr_tag); \
 119     (h).hdr_seq = ntohs((h).hdr_seq); \
 120 } while (0)
 121 
 122 #define MCA_PML_OB1_MATCH_HDR_HTON(h) \
 123 do { \
 124     MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \
 125     (h).hdr_ctx = htons((h).hdr_ctx); \
 126     (h).hdr_src = htonl((h).hdr_src); \
 127     (h).hdr_tag = htonl((h).hdr_tag); \
 128     (h).hdr_seq = htons((h).hdr_seq); \
 129 } while (0)
 130 
 131 
 132 
 133 
 134 
 135 
 136 struct mca_pml_ob1_rendezvous_hdr_t {
 137     mca_pml_ob1_match_hdr_t hdr_match;
 138     uint64_t hdr_msg_length;            
 139     opal_ptr_t hdr_src_req;             
 140 };
 141 typedef struct mca_pml_ob1_rendezvous_hdr_t mca_pml_ob1_rendezvous_hdr_t;
 142 
 143 static inline void mca_pml_ob1_rendezvous_hdr_prepare (mca_pml_ob1_rendezvous_hdr_t *hdr, uint8_t hdr_type, uint8_t hdr_flags,
 144                                                        uint16_t hdr_ctx, int32_t hdr_src, int32_t hdr_tag, uint16_t hdr_seq,
 145                                                        uint64_t hdr_msg_length, void *hdr_src_req)
 146 {
 147     mca_pml_ob1_match_hdr_prepare (&hdr->hdr_match, hdr_type, hdr_flags, hdr_ctx, hdr_src, hdr_tag, hdr_seq);
 148     hdr->hdr_msg_length = hdr_msg_length;
 149     hdr->hdr_src_req.pval = hdr_src_req;
 150 }
 151 
 152 
 153 
 154 
 155 #define MCA_PML_OB1_RNDV_HDR_NTOH(h) \
 156     do { \
 157         MCA_PML_OB1_MATCH_HDR_NTOH((h).hdr_match); \
 158         (h).hdr_msg_length = ntoh64((h).hdr_msg_length); \
 159     } while (0)
 160 
 161 #define MCA_PML_OB1_RNDV_HDR_HTON(h) \
 162     do { \
 163         MCA_PML_OB1_MATCH_HDR_HTON((h).hdr_match); \
 164         (h).hdr_msg_length = hton64((h).hdr_msg_length); \
 165     } while (0)
 166 
 167 
 168 
 169 
 170 struct mca_pml_ob1_rget_hdr_t {
 171     mca_pml_ob1_rendezvous_hdr_t hdr_rndv;
 172 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
 173     uint8_t hdr_padding[4];
 174 #endif
 175     opal_ptr_t hdr_frag;                      
 176     uint64_t   hdr_src_ptr;                   
 177     
 178 };
 179 typedef struct mca_pml_ob1_rget_hdr_t mca_pml_ob1_rget_hdr_t;
 180 
 181 static inline void mca_pml_ob1_rget_hdr_prepare (mca_pml_ob1_rget_hdr_t *hdr, uint8_t hdr_flags,
 182                                                  uint16_t hdr_ctx, int32_t hdr_src, int32_t hdr_tag, uint16_t hdr_seq,
 183                                                  uint64_t hdr_msg_length, void *hdr_src_req, void *hdr_frag,
 184                                                  void *hdr_src_ptr, void *local_handle, size_t local_handle_size)
 185 {
 186     mca_pml_ob1_rendezvous_hdr_prepare (&hdr->hdr_rndv, MCA_PML_OB1_HDR_TYPE_RGET, hdr_flags,
 187                                         hdr_ctx, hdr_src, hdr_tag, hdr_seq, hdr_msg_length, hdr_src_req);
 188 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
 189     hdr->hdr_padding[0] = 0;
 190     hdr->hdr_padding[1] = 0;
 191     hdr->hdr_padding[2] = 0;
 192     hdr->hdr_padding[3] = 0;
 193 #endif
 194     hdr->hdr_frag.pval = hdr_frag;
 195     hdr->hdr_src_ptr = (uint64_t)(intptr_t) hdr_src_ptr;
 196 
 197     
 198     memcpy (hdr + 1, local_handle, local_handle_size);
 199 }
 200 
 201 #define MCA_PML_OB1_RGET_HDR_NTOH(h)                    \
 202     do {                                                \
 203         MCA_PML_OB1_RNDV_HDR_NTOH((h).hdr_rndv);        \
 204         (h).hdr_src_ptr = ntoh64((h).hdr_src_ptr);      \
 205     } while (0)
 206 
 207 #define MCA_PML_OB1_RGET_HDR_HTON(h)                    \
 208     do {                                                \
 209         MCA_PML_OB1_RNDV_HDR_HTON((h).hdr_rndv);        \
 210         (h).hdr_src_ptr = hton64((h).hdr_src_ptr);      \
 211     } while (0)
 212 
 213 
 214 
 215 
 216 struct mca_pml_ob1_frag_hdr_t {
 217     mca_pml_ob1_common_hdr_t hdr_common;     
 218 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
 219     uint8_t hdr_padding[6];
 220 #endif
 221     uint64_t hdr_frag_offset;                
 222     opal_ptr_t hdr_src_req;                  
 223     opal_ptr_t hdr_dst_req;                  
 224 };
 225 typedef struct mca_pml_ob1_frag_hdr_t mca_pml_ob1_frag_hdr_t;
 226 
 227 static inline void mca_pml_ob1_frag_hdr_prepare (mca_pml_ob1_frag_hdr_t *hdr, uint8_t hdr_flags,
 228                                                  uint64_t hdr_frag_offset, void *hdr_src_req,
 229                                                  uint64_t hdr_dst_req)
 230 {
 231     mca_pml_ob1_common_hdr_prepare (&hdr->hdr_common, MCA_PML_OB1_HDR_TYPE_FRAG, hdr_flags);
 232 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
 233     hdr->hdr_padding[0] = 0;
 234     hdr->hdr_padding[1] = 0;
 235     hdr->hdr_padding[2] = 0;
 236     hdr->hdr_padding[3] = 0;
 237     hdr->hdr_padding[4] = 0;
 238     hdr->hdr_padding[5] = 0;
 239 #endif
 240     hdr->hdr_frag_offset = hdr_frag_offset;
 241     hdr->hdr_src_req.pval = hdr_src_req;
 242     hdr->hdr_dst_req.lval = hdr_dst_req;
 243 }
 244 
 245 #define MCA_PML_OB1_FRAG_HDR_NTOH(h) \
 246     do { \
 247         MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common); \
 248         (h).hdr_frag_offset = ntoh64((h).hdr_frag_offset); \
 249     } while (0)
 250 
 251 #define MCA_PML_OB1_FRAG_HDR_HTON(h) \
 252     do { \
 253         MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \
 254         (h).hdr_frag_offset = hton64((h).hdr_frag_offset); \
 255     } while (0)
 256 
 257 
 258 
 259 
 260 
 261 struct mca_pml_ob1_ack_hdr_t {
 262     mca_pml_ob1_common_hdr_t hdr_common;      
 263 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
 264     uint8_t hdr_padding[6];
 265 #endif
 266     opal_ptr_t hdr_src_req;                   
 267     opal_ptr_t hdr_dst_req;                   
 268     uint64_t hdr_send_offset;                 
 269     uint64_t hdr_send_size;                   
 270 };
 271 typedef struct mca_pml_ob1_ack_hdr_t mca_pml_ob1_ack_hdr_t;
 272 
 273 static inline void mca_pml_ob1_ack_hdr_prepare (mca_pml_ob1_ack_hdr_t *hdr, uint8_t hdr_flags,
 274                                                 uint64_t hdr_src_req, void *hdr_dst_req,
 275                                                 uint64_t hdr_send_offset, uint64_t hdr_send_size)
 276 {
 277     mca_pml_ob1_common_hdr_prepare (&hdr->hdr_common, MCA_PML_OB1_HDR_TYPE_ACK, hdr_flags);
 278 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
 279     hdr->hdr_padding[0] = 0;
 280     hdr->hdr_padding[1] = 0;
 281     hdr->hdr_padding[2] = 0;
 282     hdr->hdr_padding[3] = 0;
 283     hdr->hdr_padding[4] = 0;
 284     hdr->hdr_padding[5] = 0;
 285 #endif
 286     hdr->hdr_src_req.lval = hdr_src_req;
 287     hdr->hdr_dst_req.pval = hdr_dst_req;
 288     hdr->hdr_send_offset = hdr_send_offset;
 289     hdr->hdr_send_size = hdr_send_size;
 290 }
 291 
 292 
 293 
 294 
 295 
 296 #define MCA_PML_OB1_ACK_HDR_NTOH(h)                        \
 297     do {                                                   \
 298         MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common);       \
 299         (h).hdr_send_offset = ntoh64((h).hdr_send_offset); \
 300         (h).hdr_send_size = ntoh64((h).hdr_send_size);     \
 301     } while (0)
 302 
 303 #define MCA_PML_OB1_ACK_HDR_HTON(h)                        \
 304     do {                                                   \
 305         MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common);       \
 306         (h).hdr_send_offset = hton64((h).hdr_send_offset); \
 307         (h).hdr_send_size = hton64((h).hdr_send_size);     \
 308     } while (0)
 309 
 310 
 311 
 312 
 313 
 314 struct mca_pml_ob1_rdma_hdr_t {
 315     mca_pml_ob1_common_hdr_t hdr_common;      
 316 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
 317     uint8_t hdr_padding[2];                   
 318 #endif
 319     
 320     opal_ptr_t hdr_req;                       
 321     opal_ptr_t hdr_frag;                      
 322     opal_ptr_t hdr_recv_req;                  
 323     uint64_t hdr_rdma_offset;                 
 324     uint64_t hdr_dst_ptr;                     
 325     uint64_t hdr_dst_size;                    
 326     
 327 };
 328 typedef struct mca_pml_ob1_rdma_hdr_t mca_pml_ob1_rdma_hdr_t;
 329 
 330 static inline void mca_pml_ob1_rdma_hdr_prepare (mca_pml_ob1_rdma_hdr_t *hdr, uint8_t hdr_flags,
 331                                                  uint64_t hdr_req, void *hdr_frag, void *hdr_recv_req,
 332                                                  uint64_t hdr_rdma_offset, void *hdr_dst_ptr,
 333                                                  uint64_t hdr_dst_size, void *local_handle,
 334                                                  size_t local_handle_size)
 335 {
 336     mca_pml_ob1_common_hdr_prepare (&hdr->hdr_common, MCA_PML_OB1_HDR_TYPE_PUT, hdr_flags);
 337 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
 338     hdr->hdr_padding[0] = 0;
 339     hdr->hdr_padding[1] = 0;
 340 #endif
 341     hdr->hdr_req.lval = hdr_req;
 342     hdr->hdr_frag.pval = hdr_frag;
 343     hdr->hdr_recv_req.pval = hdr_recv_req;
 344     hdr->hdr_rdma_offset = hdr_rdma_offset;
 345     hdr->hdr_dst_ptr = (uint64_t)(intptr_t) hdr_dst_ptr;
 346     hdr->hdr_dst_size = hdr_dst_size;
 347 
 348     
 349     memcpy (hdr + 1, local_handle, local_handle_size);
 350 }
 351 
 352 #define MCA_PML_OB1_RDMA_HDR_NTOH(h)                       \
 353     do {                                                   \
 354         MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common);       \
 355         (h).hdr_rdma_offset = ntoh64((h).hdr_rdma_offset); \
 356         (h).hdr_dst_ptr = ntoh64((h).hdr_dst_ptr);         \
 357         (h).hdr_dst_size = ntoh64((h).hdr_dst_size);       \
 358     } while (0)
 359 
 360 #define MCA_PML_OB1_RDMA_HDR_HTON(h)                       \
 361     do {                                                   \
 362         MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common);       \
 363         (h).hdr_rdma_offset = hton64((h).hdr_rdma_offset); \
 364         (h).hdr_dst_ptr = hton64((h).hdr_dst_ptr);         \
 365         (h).hdr_dst_size = hton64((h).hdr_dst_size);       \
 366     } while (0)
 367 
 368 
 369 
 370 
 371 
 372 struct mca_pml_ob1_fin_hdr_t {
 373     mca_pml_ob1_common_hdr_t hdr_common;      
 374 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
 375     uint8_t hdr_padding[2];
 376 #endif
 377     int64_t hdr_size;                         
 378     opal_ptr_t hdr_frag;                      
 379 };
 380 typedef struct mca_pml_ob1_fin_hdr_t mca_pml_ob1_fin_hdr_t;
 381 
 382 static inline void mca_pml_ob1_fin_hdr_prepare (mca_pml_ob1_fin_hdr_t *hdr, uint8_t hdr_flags,
 383                                                 uint64_t hdr_frag, int64_t hdr_size)
 384 {
 385     mca_pml_ob1_common_hdr_prepare (&hdr->hdr_common, MCA_PML_OB1_HDR_TYPE_FIN, hdr_flags);
 386 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT && OPAL_ENABLE_DEBUG
 387     hdr->hdr_padding[0] = 0;
 388     hdr->hdr_padding[1] = 0;
 389 #endif
 390     hdr->hdr_frag.lval = hdr_frag;
 391     hdr->hdr_size      = hdr_size;
 392 }
 393 
 394 #define MCA_PML_OB1_FIN_HDR_NTOH(h)                  \
 395     do {                                             \
 396         MCA_PML_OB1_COMMON_HDR_NTOH((h).hdr_common); \
 397         (h).hdr_size = ntoh64((h).hdr_size);         \
 398     } while (0)
 399 
 400 #define MCA_PML_OB1_FIN_HDR_HTON(h)                  \
 401     do {                                             \
 402         MCA_PML_OB1_COMMON_HDR_HTON((h).hdr_common); \
 403         (h).hdr_size = hton64((h).hdr_size);         \
 404     } while (0)
 405 
 406 
 407 
 408 
 409 union mca_pml_ob1_hdr_t {
 410     mca_pml_ob1_common_hdr_t hdr_common;
 411     mca_pml_ob1_match_hdr_t hdr_match;
 412     mca_pml_ob1_rendezvous_hdr_t hdr_rndv;
 413     mca_pml_ob1_rget_hdr_t hdr_rget;
 414     mca_pml_ob1_frag_hdr_t hdr_frag;
 415     mca_pml_ob1_ack_hdr_t hdr_ack;
 416     mca_pml_ob1_rdma_hdr_t hdr_rdma;
 417     mca_pml_ob1_fin_hdr_t hdr_fin;
 418 };
 419 typedef union mca_pml_ob1_hdr_t mca_pml_ob1_hdr_t;
 420 
 421 #if !defined(WORDS_BIGENDIAN) && OPAL_ENABLE_HETEROGENEOUS_SUPPORT
 422 static inline __opal_attribute_always_inline__ void
 423 ob1_hdr_ntoh(mca_pml_ob1_hdr_t *hdr, const uint8_t hdr_type)
 424 {
 425     if(!(hdr->hdr_common.hdr_flags & MCA_PML_OB1_HDR_FLAGS_NBO))
 426         return;
 427 
 428     switch(hdr_type) {
 429         case MCA_PML_OB1_HDR_TYPE_MATCH:
 430             MCA_PML_OB1_MATCH_HDR_NTOH(hdr->hdr_match);
 431             break;
 432         case MCA_PML_OB1_HDR_TYPE_RNDV:
 433             MCA_PML_OB1_RNDV_HDR_NTOH(hdr->hdr_rndv);
 434             break;
 435         case MCA_PML_OB1_HDR_TYPE_RGET:
 436             MCA_PML_OB1_RGET_HDR_NTOH(hdr->hdr_rget);
 437             break;
 438         case MCA_PML_OB1_HDR_TYPE_ACK:
 439             MCA_PML_OB1_ACK_HDR_NTOH(hdr->hdr_ack);
 440             break;
 441         case MCA_PML_OB1_HDR_TYPE_FRAG:
 442             MCA_PML_OB1_FRAG_HDR_NTOH(hdr->hdr_frag);
 443             break;
 444         case MCA_PML_OB1_HDR_TYPE_PUT:
 445             MCA_PML_OB1_RDMA_HDR_NTOH(hdr->hdr_rdma);
 446             break;
 447         case MCA_PML_OB1_HDR_TYPE_FIN:
 448             MCA_PML_OB1_FIN_HDR_NTOH(hdr->hdr_fin);
 449             break;
 450         default:
 451             assert(0);
 452             break;
 453     }
 454 }
 455 #else
 456 #define ob1_hdr_ntoh(h, t) do{}while(0)
 457 #endif
 458 
 459 #if OPAL_ENABLE_HETEROGENEOUS_SUPPORT
 460 #define ob1_hdr_hton(h, t, p) \
 461     ob1_hdr_hton_intr((mca_pml_ob1_hdr_t*)h, t, p)
 462 static inline __opal_attribute_always_inline__ void
 463 ob1_hdr_hton_intr(mca_pml_ob1_hdr_t *hdr, const uint8_t hdr_type,
 464         const ompi_proc_t *proc)
 465 {
 466 #ifdef WORDS_BIGENDIAN
 467     hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
 468 #else
 469 
 470     if(!(proc->super.proc_arch & OPAL_ARCH_ISBIGENDIAN))
 471         return;
 472 
 473     hdr->hdr_common.hdr_flags |= MCA_PML_OB1_HDR_FLAGS_NBO;
 474     switch(hdr_type) {
 475         case MCA_PML_OB1_HDR_TYPE_MATCH:
 476             MCA_PML_OB1_MATCH_HDR_HTON(hdr->hdr_match);
 477             break;
 478         case MCA_PML_OB1_HDR_TYPE_RNDV:
 479             MCA_PML_OB1_RNDV_HDR_HTON(hdr->hdr_rndv);
 480             break;
 481         case MCA_PML_OB1_HDR_TYPE_RGET:
 482             MCA_PML_OB1_RGET_HDR_HTON(hdr->hdr_rget);
 483             break;
 484         case MCA_PML_OB1_HDR_TYPE_ACK:
 485             MCA_PML_OB1_ACK_HDR_HTON(hdr->hdr_ack);
 486             break;
 487         case MCA_PML_OB1_HDR_TYPE_FRAG:
 488             MCA_PML_OB1_FRAG_HDR_HTON(hdr->hdr_frag);
 489             break;
 490         case MCA_PML_OB1_HDR_TYPE_PUT:
 491             MCA_PML_OB1_RDMA_HDR_HTON(hdr->hdr_rdma);
 492             break;
 493         case MCA_PML_OB1_HDR_TYPE_FIN:
 494             MCA_PML_OB1_FIN_HDR_HTON(hdr->hdr_fin);
 495             break;
 496         default:
 497             assert(0);
 498             break;
 499     }
 500 #endif
 501 }
 502 #else
 503 #define ob1_hdr_hton(h, t, p) do{}while(0)
 504 #endif
 505 
 506 static inline __opal_attribute_always_inline__ void
 507 ob1_hdr_copy(mca_pml_ob1_hdr_t *src, mca_pml_ob1_hdr_t *dst)
 508 {
 509     switch(src->hdr_common.hdr_type) {
 510         case MCA_PML_OB1_HDR_TYPE_MATCH:
 511             memcpy( &(dst->hdr_match), &(src->hdr_match), sizeof(mca_pml_ob1_match_hdr_t) );
 512             break;
 513         case MCA_PML_OB1_HDR_TYPE_RNDV:
 514             memcpy( &(dst->hdr_rndv), &(src->hdr_rndv), sizeof(mca_pml_ob1_rendezvous_hdr_t) );
 515             break;
 516         case MCA_PML_OB1_HDR_TYPE_RGET:
 517             memcpy( &(dst->hdr_rget), &(src->hdr_rget), sizeof(mca_pml_ob1_rget_hdr_t) );
 518             break;
 519         case MCA_PML_OB1_HDR_TYPE_ACK:
 520             memcpy( &(dst->hdr_ack), &(src->hdr_ack), sizeof(mca_pml_ob1_ack_hdr_t) );
 521             break;
 522         case MCA_PML_OB1_HDR_TYPE_FRAG:
 523             memcpy( &(dst->hdr_frag), &(src->hdr_frag), sizeof(mca_pml_ob1_frag_hdr_t) );
 524             break;
 525         case MCA_PML_OB1_HDR_TYPE_PUT:
 526             memcpy( &(dst->hdr_rdma), &(src->hdr_rdma), sizeof(mca_pml_ob1_rdma_hdr_t) );
 527             break;
 528         case MCA_PML_OB1_HDR_TYPE_FIN:
 529             memcpy( &(dst->hdr_fin), &(src->hdr_fin), sizeof(mca_pml_ob1_fin_hdr_t) );
 530             break;
 531         default:
 532             memcpy( &(dst->hdr_common), &(src->hdr_common), sizeof(mca_pml_ob1_common_hdr_t) );
 533             break;
 534     }
 535 }
 536 
 537 #endif  
 538