Linux Audio

Check our new training course

Loading...
v3.1
 
  1/*
  2 * Copyright (c) 2004 Topspin Corporation.  All rights reserved.
  3 *
  4 * This software is available to you under a choice of one of two
  5 * licenses.  You may choose to be licensed under the terms of the GNU
  6 * General Public License (GPL) Version 2, available from the file
  7 * COPYING in the main directory of this source tree, or the
  8 * OpenIB.org BSD license below:
  9 *
 10 *     Redistribution and use in source and binary forms, with or
 11 *     without modification, are permitted provided that the following
 12 *     conditions are met:
 13 *
 14 *      - Redistributions of source code must retain the above
 15 *        copyright notice, this list of conditions and the following
 16 *        disclaimer.
 17 *
 18 *      - Redistributions in binary form must reproduce the above
 19 *        copyright notice, this list of conditions and the following
 20 *        disclaimer in the documentation and/or other materials
 21 *        provided with the distribution.
 22 *
 23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 30 * SOFTWARE.
 31 */
 32
 33#ifndef IB_PACK_H
 34#define IB_PACK_H
 35
 36#include <rdma/ib_verbs.h>
 
 37
 38enum {
 39	IB_LRH_BYTES  = 8,
 40	IB_ETH_BYTES  = 14,
 41	IB_VLAN_BYTES = 4,
 42	IB_GRH_BYTES  = 40,
 43	IB_BTH_BYTES  = 12,
 44	IB_DETH_BYTES = 8
 
 
 
 
 
 45};
 46
 47struct ib_field {
 48	size_t struct_offset_bytes;
 49	size_t struct_size_bytes;
 50	int    offset_words;
 51	int    offset_bits;
 52	int    size_bits;
 53	char  *field_name;
 54};
 55
 56#define RESERVED \
 57	.field_name          = "reserved"
 58
 59/*
 60 * This macro cleans up the definitions of constants for BTH opcodes.
 61 * It is used to define constants such as IB_OPCODE_UD_SEND_ONLY,
 62 * which becomes IB_OPCODE_UD + IB_OPCODE_SEND_ONLY, and this gives
 63 * the correct value.
 64 *
 65 * In short, user code should use the constants defined using the
 66 * macro rather than worrying about adding together other constants.
 67*/
 68#define IB_OPCODE(transport, op) \
 69	IB_OPCODE_ ## transport ## _ ## op = \
 70		IB_OPCODE_ ## transport + IB_OPCODE_ ## op
 71
 72enum {
 73	/* transport types -- just used to define real constants */
 74	IB_OPCODE_RC                                = 0x00,
 75	IB_OPCODE_UC                                = 0x20,
 76	IB_OPCODE_RD                                = 0x40,
 77	IB_OPCODE_UD                                = 0x60,
 
 
 
 
 78
 79	/* operations -- just used to define real constants */
 80	IB_OPCODE_SEND_FIRST                        = 0x00,
 81	IB_OPCODE_SEND_MIDDLE                       = 0x01,
 82	IB_OPCODE_SEND_LAST                         = 0x02,
 83	IB_OPCODE_SEND_LAST_WITH_IMMEDIATE          = 0x03,
 84	IB_OPCODE_SEND_ONLY                         = 0x04,
 85	IB_OPCODE_SEND_ONLY_WITH_IMMEDIATE          = 0x05,
 86	IB_OPCODE_RDMA_WRITE_FIRST                  = 0x06,
 87	IB_OPCODE_RDMA_WRITE_MIDDLE                 = 0x07,
 88	IB_OPCODE_RDMA_WRITE_LAST                   = 0x08,
 89	IB_OPCODE_RDMA_WRITE_LAST_WITH_IMMEDIATE    = 0x09,
 90	IB_OPCODE_RDMA_WRITE_ONLY                   = 0x0a,
 91	IB_OPCODE_RDMA_WRITE_ONLY_WITH_IMMEDIATE    = 0x0b,
 92	IB_OPCODE_RDMA_READ_REQUEST                 = 0x0c,
 93	IB_OPCODE_RDMA_READ_RESPONSE_FIRST          = 0x0d,
 94	IB_OPCODE_RDMA_READ_RESPONSE_MIDDLE         = 0x0e,
 95	IB_OPCODE_RDMA_READ_RESPONSE_LAST           = 0x0f,
 96	IB_OPCODE_RDMA_READ_RESPONSE_ONLY           = 0x10,
 97	IB_OPCODE_ACKNOWLEDGE                       = 0x11,
 98	IB_OPCODE_ATOMIC_ACKNOWLEDGE                = 0x12,
 99	IB_OPCODE_COMPARE_SWAP                      = 0x13,
100	IB_OPCODE_FETCH_ADD                         = 0x14,
 
 
 
 
 
101
102	/* real constants follow -- see comment about above IB_OPCODE()
103	   macro for more details */
104
105	/* RC */
106	IB_OPCODE(RC, SEND_FIRST),
107	IB_OPCODE(RC, SEND_MIDDLE),
108	IB_OPCODE(RC, SEND_LAST),
109	IB_OPCODE(RC, SEND_LAST_WITH_IMMEDIATE),
110	IB_OPCODE(RC, SEND_ONLY),
111	IB_OPCODE(RC, SEND_ONLY_WITH_IMMEDIATE),
112	IB_OPCODE(RC, RDMA_WRITE_FIRST),
113	IB_OPCODE(RC, RDMA_WRITE_MIDDLE),
114	IB_OPCODE(RC, RDMA_WRITE_LAST),
115	IB_OPCODE(RC, RDMA_WRITE_LAST_WITH_IMMEDIATE),
116	IB_OPCODE(RC, RDMA_WRITE_ONLY),
117	IB_OPCODE(RC, RDMA_WRITE_ONLY_WITH_IMMEDIATE),
118	IB_OPCODE(RC, RDMA_READ_REQUEST),
119	IB_OPCODE(RC, RDMA_READ_RESPONSE_FIRST),
120	IB_OPCODE(RC, RDMA_READ_RESPONSE_MIDDLE),
121	IB_OPCODE(RC, RDMA_READ_RESPONSE_LAST),
122	IB_OPCODE(RC, RDMA_READ_RESPONSE_ONLY),
123	IB_OPCODE(RC, ACKNOWLEDGE),
124	IB_OPCODE(RC, ATOMIC_ACKNOWLEDGE),
125	IB_OPCODE(RC, COMPARE_SWAP),
126	IB_OPCODE(RC, FETCH_ADD),
 
 
 
 
127
128	/* UC */
129	IB_OPCODE(UC, SEND_FIRST),
130	IB_OPCODE(UC, SEND_MIDDLE),
131	IB_OPCODE(UC, SEND_LAST),
132	IB_OPCODE(UC, SEND_LAST_WITH_IMMEDIATE),
133	IB_OPCODE(UC, SEND_ONLY),
134	IB_OPCODE(UC, SEND_ONLY_WITH_IMMEDIATE),
135	IB_OPCODE(UC, RDMA_WRITE_FIRST),
136	IB_OPCODE(UC, RDMA_WRITE_MIDDLE),
137	IB_OPCODE(UC, RDMA_WRITE_LAST),
138	IB_OPCODE(UC, RDMA_WRITE_LAST_WITH_IMMEDIATE),
139	IB_OPCODE(UC, RDMA_WRITE_ONLY),
140	IB_OPCODE(UC, RDMA_WRITE_ONLY_WITH_IMMEDIATE),
141
142	/* RD */
143	IB_OPCODE(RD, SEND_FIRST),
144	IB_OPCODE(RD, SEND_MIDDLE),
145	IB_OPCODE(RD, SEND_LAST),
146	IB_OPCODE(RD, SEND_LAST_WITH_IMMEDIATE),
147	IB_OPCODE(RD, SEND_ONLY),
148	IB_OPCODE(RD, SEND_ONLY_WITH_IMMEDIATE),
149	IB_OPCODE(RD, RDMA_WRITE_FIRST),
150	IB_OPCODE(RD, RDMA_WRITE_MIDDLE),
151	IB_OPCODE(RD, RDMA_WRITE_LAST),
152	IB_OPCODE(RD, RDMA_WRITE_LAST_WITH_IMMEDIATE),
153	IB_OPCODE(RD, RDMA_WRITE_ONLY),
154	IB_OPCODE(RD, RDMA_WRITE_ONLY_WITH_IMMEDIATE),
155	IB_OPCODE(RD, RDMA_READ_REQUEST),
156	IB_OPCODE(RD, RDMA_READ_RESPONSE_FIRST),
157	IB_OPCODE(RD, RDMA_READ_RESPONSE_MIDDLE),
158	IB_OPCODE(RD, RDMA_READ_RESPONSE_LAST),
159	IB_OPCODE(RD, RDMA_READ_RESPONSE_ONLY),
160	IB_OPCODE(RD, ACKNOWLEDGE),
161	IB_OPCODE(RD, ATOMIC_ACKNOWLEDGE),
162	IB_OPCODE(RD, COMPARE_SWAP),
163	IB_OPCODE(RD, FETCH_ADD),
 
164
165	/* UD */
166	IB_OPCODE(UD, SEND_ONLY),
167	IB_OPCODE(UD, SEND_ONLY_WITH_IMMEDIATE)
168};
169
170enum {
171	IB_LNH_RAW        = 0,
172	IB_LNH_IP         = 1,
173	IB_LNH_IBA_LOCAL  = 2,
174	IB_LNH_IBA_GLOBAL = 3
175};
176
177struct ib_unpacked_lrh {
178	u8        virtual_lane;
179	u8        link_version;
180	u8        service_level;
181	u8        link_next_header;
182	__be16    destination_lid;
183	__be16    packet_length;
184	__be16    source_lid;
185};
186
187struct ib_unpacked_grh {
188	u8    	     ip_version;
189	u8    	     traffic_class;
190	__be32 	     flow_label;
191	__be16       payload_length;
192	u8    	     next_header;
193	u8    	     hop_limit;
194	union ib_gid source_gid;
195	union ib_gid destination_gid;
196};
197
198struct ib_unpacked_bth {
199	u8           opcode;
200	u8           solicited_event;
201	u8           mig_req;
202	u8           pad_count;
203	u8           transport_header_version;
204	__be16       pkey;
205	__be32       destination_qpn;
206	u8           ack_req;
207	__be32       psn;
208};
209
210struct ib_unpacked_deth {
211	__be32       qkey;
212	__be32       source_qpn;
213};
214
215struct ib_unpacked_eth {
216	u8	dmac_h[4];
217	u8	dmac_l[2];
218	u8	smac_h[2];
219	u8	smac_l[4];
220	__be16	type;
221};
222
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
223struct ib_unpacked_vlan {
224	__be16  tag;
225	__be16  type;
226};
227
228struct ib_ud_header {
229	int                     lrh_present;
230	struct ib_unpacked_lrh  lrh;
231	int			eth_present;
232	struct ib_unpacked_eth	eth;
233	int                     vlan_present;
234	struct ib_unpacked_vlan vlan;
235	int			grh_present;
236	struct ib_unpacked_grh	grh;
 
 
 
 
237	struct ib_unpacked_bth	bth;
238	struct ib_unpacked_deth deth;
239	int			immediate_present;
240	__be32			immediate_data;
241};
242
243void ib_pack(const struct ib_field        *desc,
244	     int                           desc_len,
245	     void                         *structure,
246	     void                         *buf);
247
248void ib_unpack(const struct ib_field        *desc,
249	       int                           desc_len,
250	       void                         *buf,
251	       void                         *structure);
252
253void ib_ud_header_init(int		    payload_bytes,
254		       int		    lrh_present,
255		       int		    eth_present,
256		       int		    vlan_present,
257		       int		    grh_present,
258		       int		    immediate_present,
259		       struct ib_ud_header *header);
 
 
 
 
260
261int ib_ud_header_pack(struct ib_ud_header *header,
262		      void                *buf);
263
264int ib_ud_header_unpack(void                *buf,
265			struct ib_ud_header *header);
266
267#endif /* IB_PACK_H */
v6.8
  1/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
  2/*
  3 * Copyright (c) 2004 Topspin Corporation.  All rights reserved.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  4 */
  5
  6#ifndef IB_PACK_H
  7#define IB_PACK_H
  8
  9#include <rdma/ib_verbs.h>
 10#include <uapi/linux/if_ether.h>
 11
 12enum {
 13	IB_LRH_BYTES		= 8,
 14	IB_ETH_BYTES		= 14,
 15	IB_VLAN_BYTES		= 4,
 16	IB_GRH_BYTES		= 40,
 17	IB_IP4_BYTES		= 20,
 18	IB_UDP_BYTES		= 8,
 19	IB_BTH_BYTES		= 12,
 20	IB_DETH_BYTES		= 8,
 21	IB_EXT_ATOMICETH_BYTES	= 28,
 22	IB_EXT_XRC_BYTES	= 4,
 23	IB_ICRC_BYTES		= 4
 24};
 25
 26struct ib_field {
 27	size_t struct_offset_bytes;
 28	size_t struct_size_bytes;
 29	int    offset_words;
 30	int    offset_bits;
 31	int    size_bits;
 32	char  *field_name;
 33};
 34
 35#define RESERVED \
 36	.field_name          = "reserved"
 37
 38/*
 39 * This macro cleans up the definitions of constants for BTH opcodes.
 40 * It is used to define constants such as IB_OPCODE_UD_SEND_ONLY,
 41 * which becomes IB_OPCODE_UD + IB_OPCODE_SEND_ONLY, and this gives
 42 * the correct value.
 43 *
 44 * In short, user code should use the constants defined using the
 45 * macro rather than worrying about adding together other constants.
 46*/
 47#define IB_OPCODE(transport, op) \
 48	IB_OPCODE_ ## transport ## _ ## op = \
 49		IB_OPCODE_ ## transport + IB_OPCODE_ ## op
 50
 51enum {
 52	/* transport types -- just used to define real constants */
 53	IB_OPCODE_RC                                = 0x00,
 54	IB_OPCODE_UC                                = 0x20,
 55	IB_OPCODE_RD                                = 0x40,
 56	IB_OPCODE_UD                                = 0x60,
 57	/* per IBTA 1.3 vol 1 Table 38, A10.3.2 */
 58	IB_OPCODE_CNP                               = 0x80,
 59	/* Manufacturer specific */
 60	IB_OPCODE_MSP                               = 0xe0,
 61
 62	/* operations -- just used to define real constants */
 63	IB_OPCODE_SEND_FIRST                        = 0x00,
 64	IB_OPCODE_SEND_MIDDLE                       = 0x01,
 65	IB_OPCODE_SEND_LAST                         = 0x02,
 66	IB_OPCODE_SEND_LAST_WITH_IMMEDIATE          = 0x03,
 67	IB_OPCODE_SEND_ONLY                         = 0x04,
 68	IB_OPCODE_SEND_ONLY_WITH_IMMEDIATE          = 0x05,
 69	IB_OPCODE_RDMA_WRITE_FIRST                  = 0x06,
 70	IB_OPCODE_RDMA_WRITE_MIDDLE                 = 0x07,
 71	IB_OPCODE_RDMA_WRITE_LAST                   = 0x08,
 72	IB_OPCODE_RDMA_WRITE_LAST_WITH_IMMEDIATE    = 0x09,
 73	IB_OPCODE_RDMA_WRITE_ONLY                   = 0x0a,
 74	IB_OPCODE_RDMA_WRITE_ONLY_WITH_IMMEDIATE    = 0x0b,
 75	IB_OPCODE_RDMA_READ_REQUEST                 = 0x0c,
 76	IB_OPCODE_RDMA_READ_RESPONSE_FIRST          = 0x0d,
 77	IB_OPCODE_RDMA_READ_RESPONSE_MIDDLE         = 0x0e,
 78	IB_OPCODE_RDMA_READ_RESPONSE_LAST           = 0x0f,
 79	IB_OPCODE_RDMA_READ_RESPONSE_ONLY           = 0x10,
 80	IB_OPCODE_ACKNOWLEDGE                       = 0x11,
 81	IB_OPCODE_ATOMIC_ACKNOWLEDGE                = 0x12,
 82	IB_OPCODE_COMPARE_SWAP                      = 0x13,
 83	IB_OPCODE_FETCH_ADD                         = 0x14,
 84	/* opcode 0x15 is reserved */
 85	IB_OPCODE_SEND_LAST_WITH_INVALIDATE         = 0x16,
 86	IB_OPCODE_SEND_ONLY_WITH_INVALIDATE         = 0x17,
 87	IB_OPCODE_FLUSH                             = 0x1C,
 88	IB_OPCODE_ATOMIC_WRITE                      = 0x1D,
 89
 90	/* real constants follow -- see comment about above IB_OPCODE()
 91	   macro for more details */
 92
 93	/* RC */
 94	IB_OPCODE(RC, SEND_FIRST),
 95	IB_OPCODE(RC, SEND_MIDDLE),
 96	IB_OPCODE(RC, SEND_LAST),
 97	IB_OPCODE(RC, SEND_LAST_WITH_IMMEDIATE),
 98	IB_OPCODE(RC, SEND_ONLY),
 99	IB_OPCODE(RC, SEND_ONLY_WITH_IMMEDIATE),
100	IB_OPCODE(RC, RDMA_WRITE_FIRST),
101	IB_OPCODE(RC, RDMA_WRITE_MIDDLE),
102	IB_OPCODE(RC, RDMA_WRITE_LAST),
103	IB_OPCODE(RC, RDMA_WRITE_LAST_WITH_IMMEDIATE),
104	IB_OPCODE(RC, RDMA_WRITE_ONLY),
105	IB_OPCODE(RC, RDMA_WRITE_ONLY_WITH_IMMEDIATE),
106	IB_OPCODE(RC, RDMA_READ_REQUEST),
107	IB_OPCODE(RC, RDMA_READ_RESPONSE_FIRST),
108	IB_OPCODE(RC, RDMA_READ_RESPONSE_MIDDLE),
109	IB_OPCODE(RC, RDMA_READ_RESPONSE_LAST),
110	IB_OPCODE(RC, RDMA_READ_RESPONSE_ONLY),
111	IB_OPCODE(RC, ACKNOWLEDGE),
112	IB_OPCODE(RC, ATOMIC_ACKNOWLEDGE),
113	IB_OPCODE(RC, COMPARE_SWAP),
114	IB_OPCODE(RC, FETCH_ADD),
115	IB_OPCODE(RC, SEND_LAST_WITH_INVALIDATE),
116	IB_OPCODE(RC, SEND_ONLY_WITH_INVALIDATE),
117	IB_OPCODE(RC, FLUSH),
118	IB_OPCODE(RC, ATOMIC_WRITE),
119
120	/* UC */
121	IB_OPCODE(UC, SEND_FIRST),
122	IB_OPCODE(UC, SEND_MIDDLE),
123	IB_OPCODE(UC, SEND_LAST),
124	IB_OPCODE(UC, SEND_LAST_WITH_IMMEDIATE),
125	IB_OPCODE(UC, SEND_ONLY),
126	IB_OPCODE(UC, SEND_ONLY_WITH_IMMEDIATE),
127	IB_OPCODE(UC, RDMA_WRITE_FIRST),
128	IB_OPCODE(UC, RDMA_WRITE_MIDDLE),
129	IB_OPCODE(UC, RDMA_WRITE_LAST),
130	IB_OPCODE(UC, RDMA_WRITE_LAST_WITH_IMMEDIATE),
131	IB_OPCODE(UC, RDMA_WRITE_ONLY),
132	IB_OPCODE(UC, RDMA_WRITE_ONLY_WITH_IMMEDIATE),
133
134	/* RD */
135	IB_OPCODE(RD, SEND_FIRST),
136	IB_OPCODE(RD, SEND_MIDDLE),
137	IB_OPCODE(RD, SEND_LAST),
138	IB_OPCODE(RD, SEND_LAST_WITH_IMMEDIATE),
139	IB_OPCODE(RD, SEND_ONLY),
140	IB_OPCODE(RD, SEND_ONLY_WITH_IMMEDIATE),
141	IB_OPCODE(RD, RDMA_WRITE_FIRST),
142	IB_OPCODE(RD, RDMA_WRITE_MIDDLE),
143	IB_OPCODE(RD, RDMA_WRITE_LAST),
144	IB_OPCODE(RD, RDMA_WRITE_LAST_WITH_IMMEDIATE),
145	IB_OPCODE(RD, RDMA_WRITE_ONLY),
146	IB_OPCODE(RD, RDMA_WRITE_ONLY_WITH_IMMEDIATE),
147	IB_OPCODE(RD, RDMA_READ_REQUEST),
148	IB_OPCODE(RD, RDMA_READ_RESPONSE_FIRST),
149	IB_OPCODE(RD, RDMA_READ_RESPONSE_MIDDLE),
150	IB_OPCODE(RD, RDMA_READ_RESPONSE_LAST),
151	IB_OPCODE(RD, RDMA_READ_RESPONSE_ONLY),
152	IB_OPCODE(RD, ACKNOWLEDGE),
153	IB_OPCODE(RD, ATOMIC_ACKNOWLEDGE),
154	IB_OPCODE(RD, COMPARE_SWAP),
155	IB_OPCODE(RD, FETCH_ADD),
156	IB_OPCODE(RD, FLUSH),
157
158	/* UD */
159	IB_OPCODE(UD, SEND_ONLY),
160	IB_OPCODE(UD, SEND_ONLY_WITH_IMMEDIATE)
161};
162
163enum {
164	IB_LNH_RAW        = 0,
165	IB_LNH_IP         = 1,
166	IB_LNH_IBA_LOCAL  = 2,
167	IB_LNH_IBA_GLOBAL = 3
168};
169
170struct ib_unpacked_lrh {
171	u8        virtual_lane;
172	u8        link_version;
173	u8        service_level;
174	u8        link_next_header;
175	__be16    destination_lid;
176	__be16    packet_length;
177	__be16    source_lid;
178};
179
180struct ib_unpacked_grh {
181	u8    	     ip_version;
182	u8    	     traffic_class;
183	__be32 	     flow_label;
184	__be16       payload_length;
185	u8    	     next_header;
186	u8    	     hop_limit;
187	union ib_gid source_gid;
188	union ib_gid destination_gid;
189};
190
191struct ib_unpacked_bth {
192	u8           opcode;
193	u8           solicited_event;
194	u8           mig_req;
195	u8           pad_count;
196	u8           transport_header_version;
197	__be16       pkey;
198	__be32       destination_qpn;
199	u8           ack_req;
200	__be32       psn;
201};
202
203struct ib_unpacked_deth {
204	__be32       qkey;
205	__be32       source_qpn;
206};
207
208struct ib_unpacked_eth {
209	u8	dmac_h[4];
210	u8	dmac_l[2];
211	u8	smac_h[2];
212	u8	smac_l[4];
213	__be16	type;
214};
215
216struct ib_unpacked_ip4 {
217	u8	ver;
218	u8	hdr_len;
219	u8	tos;
220	__be16	tot_len;
221	__be16	id;
222	__be16	frag_off;
223	u8	ttl;
224	u8	protocol;
225	__sum16	check;
226	__be32	saddr;
227	__be32	daddr;
228};
229
230struct ib_unpacked_udp {
231	__be16	sport;
232	__be16	dport;
233	__be16	length;
234	__be16	csum;
235};
236
237struct ib_unpacked_vlan {
238	__be16  tag;
239	__be16  type;
240};
241
242struct ib_ud_header {
243	int                     lrh_present;
244	struct ib_unpacked_lrh  lrh;
245	int			eth_present;
246	struct ib_unpacked_eth	eth;
247	int                     vlan_present;
248	struct ib_unpacked_vlan vlan;
249	int			grh_present;
250	struct ib_unpacked_grh	grh;
251	int			ipv4_present;
252	struct ib_unpacked_ip4	ip4;
253	int			udp_present;
254	struct ib_unpacked_udp	udp;
255	struct ib_unpacked_bth	bth;
256	struct ib_unpacked_deth deth;
257	int			immediate_present;
258	__be32			immediate_data;
259};
260
261void ib_pack(const struct ib_field        *desc,
262	     int                           desc_len,
263	     void                         *structure,
264	     void                         *buf);
265
266void ib_unpack(const struct ib_field        *desc,
267	       int                           desc_len,
268	       void                         *buf,
269	       void                         *structure);
270
271__sum16 ib_ud_ip4_csum(struct ib_ud_header *header);
272
273int ib_ud_header_init(int		    payload_bytes,
274		      int		    lrh_present,
275		      int		    eth_present,
276		      int		    vlan_present,
277		      int		    grh_present,
278		      int		    ip_version,
279		      int		    udp_present,
280		      int		    immediate_present,
281		      struct ib_ud_header *header);
282
283int ib_ud_header_pack(struct ib_ud_header *header,
284		      void                *buf);
285
286int ib_ud_header_unpack(void                *buf,
287			struct ib_ud_header *header);
288
289#endif /* IB_PACK_H */