On Thu, Oct 14, 2010 at 02:43:30PM -0700, Roland Dreier wrote:
> 
> void ib_ud_header_init(int                        payload_bytes,
>                      int                  lrh_present,
>                      int                  eth_present,
>                      int                  grh_present,
>                      int                  immediate_present,
>                      struct ib_ud_header *header)
> {
>       memset(header, 0, sizeof *header);
> 
>       if (lrh_present) {
>               u16 packet_length;
> 
>               header->lrh.link_version     = 0;
>               header->lrh.link_next_header =
>                       grh_present ? IB_LNH_IBA_GLOBAL : IB_LNH_IBA_LOCAL;
>               packet_length = (IB_LRH_BYTES   +
>                                IB_BTH_BYTES   +
>                                IB_DETH_BYTES  +
>                                grh_present ? IB_GRH_BYTES : 0 +
>                                payload_bytes  +
>                                4              + /* ICRC     */
>                                3) / 4;          /* round up */
>               header->lrh.packet_length = cpu_to_be16(packet_length);
>       }
> 
>       if (grh_present) {
>               header->grh.ip_version      = 6;
>               header->grh.payload_length  =
>                       cpu_to_be16((IB_BTH_BYTES     +
>                                    IB_DETH_BYTES    +
>                                    payload_bytes    +
>                                    4                + /* ICRC     */
>                                    3) & ~3);          /* round up */
>               header->grh.next_header     = 0x1b;
>       }
> 
>       if (header->immediate_present)
>               header->bth.opcode           = 
> IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE;
>       else
>               header->bth.opcode           = IB_OPCODE_UD_SEND_ONLY;
>       header->bth.pad_count                = (4 - payload_bytes) & 3;
>       header->bth.transport_header_version = 0;
> 
>       header->lrh_present = lrh_present;
>       header->eth_present = eth_present;
>       header->grh_present = grh_present;
>       header->immediate_present = immediate_present;
> }
> 
> which I think is reasonably clean for now.

Looks good.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to