Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/uapi/rdma/ib_user_verbs.h
26292 views
1
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR Linux-OpenIB) */
2
/*
3
* Copyright (c) 2005 Topspin Communications. All rights reserved.
4
* Copyright (c) 2005, 2006 Cisco Systems. All rights reserved.
5
* Copyright (c) 2005 PathScale, Inc. All rights reserved.
6
* Copyright (c) 2006 Mellanox Technologies. All rights reserved.
7
*
8
* This software is available to you under a choice of one of two
9
* licenses. You may choose to be licensed under the terms of the GNU
10
* General Public License (GPL) Version 2, available from the file
11
* COPYING in the main directory of this source tree, or the
12
* OpenIB.org BSD license below:
13
*
14
* Redistribution and use in source and binary forms, with or
15
* without modification, are permitted provided that the following
16
* conditions are met:
17
*
18
* - Redistributions of source code must retain the above
19
* copyright notice, this list of conditions and the following
20
* disclaimer.
21
*
22
* - Redistributions in binary form must reproduce the above
23
* copyright notice, this list of conditions and the following
24
* disclaimer in the documentation and/or other materials
25
* provided with the distribution.
26
*
27
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
28
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
30
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
31
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
32
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
33
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
34
* SOFTWARE.
35
*/
36
37
#ifndef IB_USER_VERBS_H
38
#define IB_USER_VERBS_H
39
40
#include <linux/types.h>
41
42
/*
43
* Increment this value if any changes that break userspace ABI
44
* compatibility are made.
45
*/
46
#define IB_USER_VERBS_ABI_VERSION 6
47
#define IB_USER_VERBS_CMD_THRESHOLD 50
48
49
enum ib_uverbs_write_cmds {
50
IB_USER_VERBS_CMD_GET_CONTEXT,
51
IB_USER_VERBS_CMD_QUERY_DEVICE,
52
IB_USER_VERBS_CMD_QUERY_PORT,
53
IB_USER_VERBS_CMD_ALLOC_PD,
54
IB_USER_VERBS_CMD_DEALLOC_PD,
55
IB_USER_VERBS_CMD_CREATE_AH,
56
IB_USER_VERBS_CMD_MODIFY_AH,
57
IB_USER_VERBS_CMD_QUERY_AH,
58
IB_USER_VERBS_CMD_DESTROY_AH,
59
IB_USER_VERBS_CMD_REG_MR,
60
IB_USER_VERBS_CMD_REG_SMR,
61
IB_USER_VERBS_CMD_REREG_MR,
62
IB_USER_VERBS_CMD_QUERY_MR,
63
IB_USER_VERBS_CMD_DEREG_MR,
64
IB_USER_VERBS_CMD_ALLOC_MW,
65
IB_USER_VERBS_CMD_BIND_MW,
66
IB_USER_VERBS_CMD_DEALLOC_MW,
67
IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL,
68
IB_USER_VERBS_CMD_CREATE_CQ,
69
IB_USER_VERBS_CMD_RESIZE_CQ,
70
IB_USER_VERBS_CMD_DESTROY_CQ,
71
IB_USER_VERBS_CMD_POLL_CQ,
72
IB_USER_VERBS_CMD_PEEK_CQ,
73
IB_USER_VERBS_CMD_REQ_NOTIFY_CQ,
74
IB_USER_VERBS_CMD_CREATE_QP,
75
IB_USER_VERBS_CMD_QUERY_QP,
76
IB_USER_VERBS_CMD_MODIFY_QP,
77
IB_USER_VERBS_CMD_DESTROY_QP,
78
IB_USER_VERBS_CMD_POST_SEND,
79
IB_USER_VERBS_CMD_POST_RECV,
80
IB_USER_VERBS_CMD_ATTACH_MCAST,
81
IB_USER_VERBS_CMD_DETACH_MCAST,
82
IB_USER_VERBS_CMD_CREATE_SRQ,
83
IB_USER_VERBS_CMD_MODIFY_SRQ,
84
IB_USER_VERBS_CMD_QUERY_SRQ,
85
IB_USER_VERBS_CMD_DESTROY_SRQ,
86
IB_USER_VERBS_CMD_POST_SRQ_RECV,
87
IB_USER_VERBS_CMD_OPEN_XRCD,
88
IB_USER_VERBS_CMD_CLOSE_XRCD,
89
IB_USER_VERBS_CMD_CREATE_XSRQ,
90
IB_USER_VERBS_CMD_OPEN_QP,
91
};
92
93
enum {
94
IB_USER_VERBS_EX_CMD_QUERY_DEVICE = IB_USER_VERBS_CMD_QUERY_DEVICE,
95
IB_USER_VERBS_EX_CMD_CREATE_CQ = IB_USER_VERBS_CMD_CREATE_CQ,
96
IB_USER_VERBS_EX_CMD_CREATE_QP = IB_USER_VERBS_CMD_CREATE_QP,
97
IB_USER_VERBS_EX_CMD_MODIFY_QP = IB_USER_VERBS_CMD_MODIFY_QP,
98
IB_USER_VERBS_EX_CMD_CREATE_FLOW = IB_USER_VERBS_CMD_THRESHOLD,
99
IB_USER_VERBS_EX_CMD_DESTROY_FLOW,
100
IB_USER_VERBS_EX_CMD_CREATE_WQ,
101
IB_USER_VERBS_EX_CMD_MODIFY_WQ,
102
IB_USER_VERBS_EX_CMD_DESTROY_WQ,
103
IB_USER_VERBS_EX_CMD_CREATE_RWQ_IND_TBL,
104
IB_USER_VERBS_EX_CMD_DESTROY_RWQ_IND_TBL,
105
IB_USER_VERBS_EX_CMD_MODIFY_CQ
106
};
107
108
/* see IBA A19.4.1.1 Placement Types */
109
enum ib_placement_type {
110
IB_FLUSH_GLOBAL = 1U << 0,
111
IB_FLUSH_PERSISTENT = 1U << 1,
112
};
113
114
/* see IBA A19.4.1.2 Selectivity Level */
115
enum ib_selectivity_level {
116
IB_FLUSH_RANGE = 0,
117
IB_FLUSH_MR,
118
};
119
120
/*
121
* Make sure that all structs defined in this file remain laid out so
122
* that they pack the same way on 32-bit and 64-bit architectures (to
123
* avoid incompatibility between 32-bit userspace and 64-bit kernels).
124
* Specifically:
125
* - Do not use pointer types -- pass pointers in __u64 instead.
126
* - Make sure that any structure larger than 4 bytes is padded to a
127
* multiple of 8 bytes. Otherwise the structure size will be
128
* different between 32-bit and 64-bit architectures.
129
*/
130
131
struct ib_uverbs_async_event_desc {
132
__aligned_u64 element;
133
__u32 event_type; /* enum ib_event_type */
134
__u32 reserved;
135
};
136
137
struct ib_uverbs_comp_event_desc {
138
__aligned_u64 cq_handle;
139
};
140
141
struct ib_uverbs_cq_moderation_caps {
142
__u16 max_cq_moderation_count;
143
__u16 max_cq_moderation_period;
144
__u32 reserved;
145
};
146
147
/*
148
* All commands from userspace should start with a __u32 command field
149
* followed by __u16 in_words and out_words fields (which give the
150
* length of the command block and response buffer if any in 32-bit
151
* words). The kernel driver will read these fields first and read
152
* the rest of the command struct based on these value.
153
*/
154
155
#define IB_USER_VERBS_CMD_COMMAND_MASK 0xff
156
#define IB_USER_VERBS_CMD_FLAG_EXTENDED 0x80000000u
157
158
struct ib_uverbs_cmd_hdr {
159
__u32 command;
160
__u16 in_words;
161
__u16 out_words;
162
};
163
164
struct ib_uverbs_ex_cmd_hdr {
165
__aligned_u64 response;
166
__u16 provider_in_words;
167
__u16 provider_out_words;
168
__u32 cmd_hdr_reserved;
169
};
170
171
struct ib_uverbs_get_context {
172
__aligned_u64 response;
173
__aligned_u64 driver_data[];
174
};
175
176
struct ib_uverbs_get_context_resp {
177
__u32 async_fd;
178
__u32 num_comp_vectors;
179
__aligned_u64 driver_data[];
180
};
181
182
struct ib_uverbs_query_device {
183
__aligned_u64 response;
184
__aligned_u64 driver_data[];
185
};
186
187
struct ib_uverbs_query_device_resp {
188
__aligned_u64 fw_ver;
189
__be64 node_guid;
190
__be64 sys_image_guid;
191
__aligned_u64 max_mr_size;
192
__aligned_u64 page_size_cap;
193
__u32 vendor_id;
194
__u32 vendor_part_id;
195
__u32 hw_ver;
196
__u32 max_qp;
197
__u32 max_qp_wr;
198
__u32 device_cap_flags;
199
__u32 max_sge;
200
__u32 max_sge_rd;
201
__u32 max_cq;
202
__u32 max_cqe;
203
__u32 max_mr;
204
__u32 max_pd;
205
__u32 max_qp_rd_atom;
206
__u32 max_ee_rd_atom;
207
__u32 max_res_rd_atom;
208
__u32 max_qp_init_rd_atom;
209
__u32 max_ee_init_rd_atom;
210
__u32 atomic_cap;
211
__u32 max_ee;
212
__u32 max_rdd;
213
__u32 max_mw;
214
__u32 max_raw_ipv6_qp;
215
__u32 max_raw_ethy_qp;
216
__u32 max_mcast_grp;
217
__u32 max_mcast_qp_attach;
218
__u32 max_total_mcast_qp_attach;
219
__u32 max_ah;
220
__u32 max_fmr;
221
__u32 max_map_per_fmr;
222
__u32 max_srq;
223
__u32 max_srq_wr;
224
__u32 max_srq_sge;
225
__u16 max_pkeys;
226
__u8 local_ca_ack_delay;
227
__u8 phys_port_cnt;
228
__u8 reserved[4];
229
};
230
231
struct ib_uverbs_ex_query_device {
232
__u32 comp_mask;
233
__u32 reserved;
234
};
235
236
enum ib_uverbs_odp_general_cap_bits {
237
IB_UVERBS_ODP_SUPPORT = 1 << 0,
238
IB_UVERBS_ODP_SUPPORT_IMPLICIT = 1 << 1,
239
};
240
241
enum ib_uverbs_odp_transport_cap_bits {
242
IB_UVERBS_ODP_SUPPORT_SEND = 1 << 0,
243
IB_UVERBS_ODP_SUPPORT_RECV = 1 << 1,
244
IB_UVERBS_ODP_SUPPORT_WRITE = 1 << 2,
245
IB_UVERBS_ODP_SUPPORT_READ = 1 << 3,
246
IB_UVERBS_ODP_SUPPORT_ATOMIC = 1 << 4,
247
IB_UVERBS_ODP_SUPPORT_SRQ_RECV = 1 << 5,
248
IB_UVERBS_ODP_SUPPORT_FLUSH = 1 << 6,
249
IB_UVERBS_ODP_SUPPORT_ATOMIC_WRITE = 1 << 7,
250
};
251
252
struct ib_uverbs_odp_caps {
253
__aligned_u64 general_caps;
254
struct {
255
__u32 rc_odp_caps;
256
__u32 uc_odp_caps;
257
__u32 ud_odp_caps;
258
} per_transport_caps;
259
__u32 reserved;
260
};
261
262
struct ib_uverbs_rss_caps {
263
/* Corresponding bit will be set if qp type from
264
* 'enum ib_qp_type' is supported, e.g.
265
* supported_qpts |= 1 << IB_QPT_UD
266
*/
267
__u32 supported_qpts;
268
__u32 max_rwq_indirection_tables;
269
__u32 max_rwq_indirection_table_size;
270
__u32 reserved;
271
};
272
273
struct ib_uverbs_tm_caps {
274
/* Max size of rendezvous request message */
275
__u32 max_rndv_hdr_size;
276
/* Max number of entries in tag matching list */
277
__u32 max_num_tags;
278
/* TM flags */
279
__u32 flags;
280
/* Max number of outstanding list operations */
281
__u32 max_ops;
282
/* Max number of SGE in tag matching entry */
283
__u32 max_sge;
284
__u32 reserved;
285
};
286
287
struct ib_uverbs_ex_query_device_resp {
288
struct ib_uverbs_query_device_resp base;
289
__u32 comp_mask;
290
__u32 response_length;
291
struct ib_uverbs_odp_caps odp_caps;
292
__aligned_u64 timestamp_mask;
293
__aligned_u64 hca_core_clock; /* in KHZ */
294
__aligned_u64 device_cap_flags_ex;
295
struct ib_uverbs_rss_caps rss_caps;
296
__u32 max_wq_type_rq;
297
__u32 raw_packet_caps;
298
struct ib_uverbs_tm_caps tm_caps;
299
struct ib_uverbs_cq_moderation_caps cq_moderation_caps;
300
__aligned_u64 max_dm_size;
301
__u32 xrc_odp_caps;
302
__u32 reserved;
303
};
304
305
struct ib_uverbs_query_port {
306
__aligned_u64 response;
307
__u8 port_num;
308
__u8 reserved[7];
309
__aligned_u64 driver_data[];
310
};
311
312
struct ib_uverbs_query_port_resp {
313
__u32 port_cap_flags; /* see ib_uverbs_query_port_cap_flags */
314
__u32 max_msg_sz;
315
__u32 bad_pkey_cntr;
316
__u32 qkey_viol_cntr;
317
__u32 gid_tbl_len;
318
__u16 pkey_tbl_len;
319
__u16 lid;
320
__u16 sm_lid;
321
__u8 state;
322
__u8 max_mtu;
323
__u8 active_mtu;
324
__u8 lmc;
325
__u8 max_vl_num;
326
__u8 sm_sl;
327
__u8 subnet_timeout;
328
__u8 init_type_reply;
329
__u8 active_width;
330
__u8 active_speed;
331
__u8 phys_state;
332
__u8 link_layer;
333
__u8 flags; /* see ib_uverbs_query_port_flags */
334
__u8 reserved;
335
};
336
337
struct ib_uverbs_alloc_pd {
338
__aligned_u64 response;
339
__aligned_u64 driver_data[];
340
};
341
342
struct ib_uverbs_alloc_pd_resp {
343
__u32 pd_handle;
344
__u32 driver_data[];
345
};
346
347
struct ib_uverbs_dealloc_pd {
348
__u32 pd_handle;
349
};
350
351
struct ib_uverbs_open_xrcd {
352
__aligned_u64 response;
353
__u32 fd;
354
__u32 oflags;
355
__aligned_u64 driver_data[];
356
};
357
358
struct ib_uverbs_open_xrcd_resp {
359
__u32 xrcd_handle;
360
__u32 driver_data[];
361
};
362
363
struct ib_uverbs_close_xrcd {
364
__u32 xrcd_handle;
365
};
366
367
struct ib_uverbs_reg_mr {
368
__aligned_u64 response;
369
__aligned_u64 start;
370
__aligned_u64 length;
371
__aligned_u64 hca_va;
372
__u32 pd_handle;
373
__u32 access_flags;
374
__aligned_u64 driver_data[];
375
};
376
377
struct ib_uverbs_reg_mr_resp {
378
__u32 mr_handle;
379
__u32 lkey;
380
__u32 rkey;
381
__u32 driver_data[];
382
};
383
384
struct ib_uverbs_rereg_mr {
385
__aligned_u64 response;
386
__u32 mr_handle;
387
__u32 flags;
388
__aligned_u64 start;
389
__aligned_u64 length;
390
__aligned_u64 hca_va;
391
__u32 pd_handle;
392
__u32 access_flags;
393
__aligned_u64 driver_data[];
394
};
395
396
struct ib_uverbs_rereg_mr_resp {
397
__u32 lkey;
398
__u32 rkey;
399
__aligned_u64 driver_data[];
400
};
401
402
struct ib_uverbs_dereg_mr {
403
__u32 mr_handle;
404
};
405
406
struct ib_uverbs_alloc_mw {
407
__aligned_u64 response;
408
__u32 pd_handle;
409
__u8 mw_type;
410
__u8 reserved[3];
411
__aligned_u64 driver_data[];
412
};
413
414
struct ib_uverbs_alloc_mw_resp {
415
__u32 mw_handle;
416
__u32 rkey;
417
__aligned_u64 driver_data[];
418
};
419
420
struct ib_uverbs_dealloc_mw {
421
__u32 mw_handle;
422
};
423
424
struct ib_uverbs_create_comp_channel {
425
__aligned_u64 response;
426
};
427
428
struct ib_uverbs_create_comp_channel_resp {
429
__u32 fd;
430
};
431
432
struct ib_uverbs_create_cq {
433
__aligned_u64 response;
434
__aligned_u64 user_handle;
435
__u32 cqe;
436
__u32 comp_vector;
437
__s32 comp_channel;
438
__u32 reserved;
439
__aligned_u64 driver_data[];
440
};
441
442
enum ib_uverbs_ex_create_cq_flags {
443
IB_UVERBS_CQ_FLAGS_TIMESTAMP_COMPLETION = 1 << 0,
444
IB_UVERBS_CQ_FLAGS_IGNORE_OVERRUN = 1 << 1,
445
};
446
447
struct ib_uverbs_ex_create_cq {
448
__aligned_u64 user_handle;
449
__u32 cqe;
450
__u32 comp_vector;
451
__s32 comp_channel;
452
__u32 comp_mask;
453
__u32 flags; /* bitmask of ib_uverbs_ex_create_cq_flags */
454
__u32 reserved;
455
};
456
457
struct ib_uverbs_create_cq_resp {
458
__u32 cq_handle;
459
__u32 cqe;
460
__aligned_u64 driver_data[0];
461
};
462
463
struct ib_uverbs_ex_create_cq_resp {
464
struct ib_uverbs_create_cq_resp base;
465
__u32 comp_mask;
466
__u32 response_length;
467
};
468
469
struct ib_uverbs_resize_cq {
470
__aligned_u64 response;
471
__u32 cq_handle;
472
__u32 cqe;
473
__aligned_u64 driver_data[];
474
};
475
476
struct ib_uverbs_resize_cq_resp {
477
__u32 cqe;
478
__u32 reserved;
479
__aligned_u64 driver_data[];
480
};
481
482
struct ib_uverbs_poll_cq {
483
__aligned_u64 response;
484
__u32 cq_handle;
485
__u32 ne;
486
};
487
488
enum ib_uverbs_wc_opcode {
489
IB_UVERBS_WC_SEND = 0,
490
IB_UVERBS_WC_RDMA_WRITE = 1,
491
IB_UVERBS_WC_RDMA_READ = 2,
492
IB_UVERBS_WC_COMP_SWAP = 3,
493
IB_UVERBS_WC_FETCH_ADD = 4,
494
IB_UVERBS_WC_BIND_MW = 5,
495
IB_UVERBS_WC_LOCAL_INV = 6,
496
IB_UVERBS_WC_TSO = 7,
497
IB_UVERBS_WC_FLUSH = 8,
498
IB_UVERBS_WC_ATOMIC_WRITE = 9,
499
};
500
501
struct ib_uverbs_wc {
502
__aligned_u64 wr_id;
503
__u32 status;
504
__u32 opcode;
505
__u32 vendor_err;
506
__u32 byte_len;
507
union {
508
__be32 imm_data;
509
__u32 invalidate_rkey;
510
} ex;
511
__u32 qp_num;
512
__u32 src_qp;
513
__u32 wc_flags;
514
__u16 pkey_index;
515
__u16 slid;
516
__u8 sl;
517
__u8 dlid_path_bits;
518
__u8 port_num;
519
__u8 reserved;
520
};
521
522
struct ib_uverbs_poll_cq_resp {
523
__u32 count;
524
__u32 reserved;
525
struct ib_uverbs_wc wc[];
526
};
527
528
struct ib_uverbs_req_notify_cq {
529
__u32 cq_handle;
530
__u32 solicited_only;
531
};
532
533
struct ib_uverbs_destroy_cq {
534
__aligned_u64 response;
535
__u32 cq_handle;
536
__u32 reserved;
537
};
538
539
struct ib_uverbs_destroy_cq_resp {
540
__u32 comp_events_reported;
541
__u32 async_events_reported;
542
};
543
544
struct ib_uverbs_global_route {
545
__u8 dgid[16];
546
__u32 flow_label;
547
__u8 sgid_index;
548
__u8 hop_limit;
549
__u8 traffic_class;
550
__u8 reserved;
551
};
552
553
struct ib_uverbs_ah_attr {
554
struct ib_uverbs_global_route grh;
555
__u16 dlid;
556
__u8 sl;
557
__u8 src_path_bits;
558
__u8 static_rate;
559
__u8 is_global;
560
__u8 port_num;
561
__u8 reserved;
562
};
563
564
struct ib_uverbs_qp_attr {
565
__u32 qp_attr_mask;
566
__u32 qp_state;
567
__u32 cur_qp_state;
568
__u32 path_mtu;
569
__u32 path_mig_state;
570
__u32 qkey;
571
__u32 rq_psn;
572
__u32 sq_psn;
573
__u32 dest_qp_num;
574
__u32 qp_access_flags;
575
576
struct ib_uverbs_ah_attr ah_attr;
577
struct ib_uverbs_ah_attr alt_ah_attr;
578
579
/* ib_qp_cap */
580
__u32 max_send_wr;
581
__u32 max_recv_wr;
582
__u32 max_send_sge;
583
__u32 max_recv_sge;
584
__u32 max_inline_data;
585
586
__u16 pkey_index;
587
__u16 alt_pkey_index;
588
__u8 en_sqd_async_notify;
589
__u8 sq_draining;
590
__u8 max_rd_atomic;
591
__u8 max_dest_rd_atomic;
592
__u8 min_rnr_timer;
593
__u8 port_num;
594
__u8 timeout;
595
__u8 retry_cnt;
596
__u8 rnr_retry;
597
__u8 alt_port_num;
598
__u8 alt_timeout;
599
__u8 reserved[5];
600
};
601
602
struct ib_uverbs_create_qp {
603
__aligned_u64 response;
604
__aligned_u64 user_handle;
605
__u32 pd_handle;
606
__u32 send_cq_handle;
607
__u32 recv_cq_handle;
608
__u32 srq_handle;
609
__u32 max_send_wr;
610
__u32 max_recv_wr;
611
__u32 max_send_sge;
612
__u32 max_recv_sge;
613
__u32 max_inline_data;
614
__u8 sq_sig_all;
615
__u8 qp_type;
616
__u8 is_srq;
617
__u8 reserved;
618
__aligned_u64 driver_data[];
619
};
620
621
enum ib_uverbs_create_qp_mask {
622
IB_UVERBS_CREATE_QP_MASK_IND_TABLE = 1UL << 0,
623
};
624
625
enum {
626
IB_UVERBS_CREATE_QP_SUP_COMP_MASK = IB_UVERBS_CREATE_QP_MASK_IND_TABLE,
627
};
628
629
struct ib_uverbs_ex_create_qp {
630
__aligned_u64 user_handle;
631
__u32 pd_handle;
632
__u32 send_cq_handle;
633
__u32 recv_cq_handle;
634
__u32 srq_handle;
635
__u32 max_send_wr;
636
__u32 max_recv_wr;
637
__u32 max_send_sge;
638
__u32 max_recv_sge;
639
__u32 max_inline_data;
640
__u8 sq_sig_all;
641
__u8 qp_type;
642
__u8 is_srq;
643
__u8 reserved;
644
__u32 comp_mask;
645
__u32 create_flags;
646
__u32 rwq_ind_tbl_handle;
647
__u32 source_qpn;
648
};
649
650
struct ib_uverbs_open_qp {
651
__aligned_u64 response;
652
__aligned_u64 user_handle;
653
__u32 pd_handle;
654
__u32 qpn;
655
__u8 qp_type;
656
__u8 reserved[7];
657
__aligned_u64 driver_data[];
658
};
659
660
/* also used for open response */
661
struct ib_uverbs_create_qp_resp {
662
__u32 qp_handle;
663
__u32 qpn;
664
__u32 max_send_wr;
665
__u32 max_recv_wr;
666
__u32 max_send_sge;
667
__u32 max_recv_sge;
668
__u32 max_inline_data;
669
__u32 reserved;
670
__u32 driver_data[0];
671
};
672
673
struct ib_uverbs_ex_create_qp_resp {
674
struct ib_uverbs_create_qp_resp base;
675
__u32 comp_mask;
676
__u32 response_length;
677
};
678
679
/*
680
* This struct needs to remain a multiple of 8 bytes to keep the
681
* alignment of the modify QP parameters.
682
*/
683
struct ib_uverbs_qp_dest {
684
__u8 dgid[16];
685
__u32 flow_label;
686
__u16 dlid;
687
__u16 reserved;
688
__u8 sgid_index;
689
__u8 hop_limit;
690
__u8 traffic_class;
691
__u8 sl;
692
__u8 src_path_bits;
693
__u8 static_rate;
694
__u8 is_global;
695
__u8 port_num;
696
};
697
698
struct ib_uverbs_query_qp {
699
__aligned_u64 response;
700
__u32 qp_handle;
701
__u32 attr_mask;
702
__aligned_u64 driver_data[];
703
};
704
705
struct ib_uverbs_query_qp_resp {
706
struct ib_uverbs_qp_dest dest;
707
struct ib_uverbs_qp_dest alt_dest;
708
__u32 max_send_wr;
709
__u32 max_recv_wr;
710
__u32 max_send_sge;
711
__u32 max_recv_sge;
712
__u32 max_inline_data;
713
__u32 qkey;
714
__u32 rq_psn;
715
__u32 sq_psn;
716
__u32 dest_qp_num;
717
__u32 qp_access_flags;
718
__u16 pkey_index;
719
__u16 alt_pkey_index;
720
__u8 qp_state;
721
__u8 cur_qp_state;
722
__u8 path_mtu;
723
__u8 path_mig_state;
724
__u8 sq_draining;
725
__u8 max_rd_atomic;
726
__u8 max_dest_rd_atomic;
727
__u8 min_rnr_timer;
728
__u8 port_num;
729
__u8 timeout;
730
__u8 retry_cnt;
731
__u8 rnr_retry;
732
__u8 alt_port_num;
733
__u8 alt_timeout;
734
__u8 sq_sig_all;
735
__u8 reserved[5];
736
__aligned_u64 driver_data[];
737
};
738
739
struct ib_uverbs_modify_qp {
740
struct ib_uverbs_qp_dest dest;
741
struct ib_uverbs_qp_dest alt_dest;
742
__u32 qp_handle;
743
__u32 attr_mask;
744
__u32 qkey;
745
__u32 rq_psn;
746
__u32 sq_psn;
747
__u32 dest_qp_num;
748
__u32 qp_access_flags;
749
__u16 pkey_index;
750
__u16 alt_pkey_index;
751
__u8 qp_state;
752
__u8 cur_qp_state;
753
__u8 path_mtu;
754
__u8 path_mig_state;
755
__u8 en_sqd_async_notify;
756
__u8 max_rd_atomic;
757
__u8 max_dest_rd_atomic;
758
__u8 min_rnr_timer;
759
__u8 port_num;
760
__u8 timeout;
761
__u8 retry_cnt;
762
__u8 rnr_retry;
763
__u8 alt_port_num;
764
__u8 alt_timeout;
765
__u8 reserved[2];
766
__aligned_u64 driver_data[0];
767
};
768
769
struct ib_uverbs_ex_modify_qp {
770
struct ib_uverbs_modify_qp base;
771
__u32 rate_limit;
772
__u32 reserved;
773
};
774
775
struct ib_uverbs_ex_modify_qp_resp {
776
__u32 comp_mask;
777
__u32 response_length;
778
};
779
780
struct ib_uverbs_destroy_qp {
781
__aligned_u64 response;
782
__u32 qp_handle;
783
__u32 reserved;
784
};
785
786
struct ib_uverbs_destroy_qp_resp {
787
__u32 events_reported;
788
};
789
790
/*
791
* The ib_uverbs_sge structure isn't used anywhere, since we assume
792
* the ib_sge structure is packed the same way on 32-bit and 64-bit
793
* architectures in both kernel and user space. It's just here to
794
* document the ABI.
795
*/
796
struct ib_uverbs_sge {
797
__aligned_u64 addr;
798
__u32 length;
799
__u32 lkey;
800
};
801
802
enum ib_uverbs_wr_opcode {
803
IB_UVERBS_WR_RDMA_WRITE = 0,
804
IB_UVERBS_WR_RDMA_WRITE_WITH_IMM = 1,
805
IB_UVERBS_WR_SEND = 2,
806
IB_UVERBS_WR_SEND_WITH_IMM = 3,
807
IB_UVERBS_WR_RDMA_READ = 4,
808
IB_UVERBS_WR_ATOMIC_CMP_AND_SWP = 5,
809
IB_UVERBS_WR_ATOMIC_FETCH_AND_ADD = 6,
810
IB_UVERBS_WR_LOCAL_INV = 7,
811
IB_UVERBS_WR_BIND_MW = 8,
812
IB_UVERBS_WR_SEND_WITH_INV = 9,
813
IB_UVERBS_WR_TSO = 10,
814
IB_UVERBS_WR_RDMA_READ_WITH_INV = 11,
815
IB_UVERBS_WR_MASKED_ATOMIC_CMP_AND_SWP = 12,
816
IB_UVERBS_WR_MASKED_ATOMIC_FETCH_AND_ADD = 13,
817
IB_UVERBS_WR_FLUSH = 14,
818
IB_UVERBS_WR_ATOMIC_WRITE = 15,
819
/* Review enum ib_wr_opcode before modifying this */
820
};
821
822
struct ib_uverbs_send_wr {
823
__aligned_u64 wr_id;
824
__u32 num_sge;
825
__u32 opcode; /* see enum ib_uverbs_wr_opcode */
826
__u32 send_flags;
827
union {
828
__be32 imm_data;
829
__u32 invalidate_rkey;
830
} ex;
831
union {
832
struct {
833
__aligned_u64 remote_addr;
834
__u32 rkey;
835
__u32 reserved;
836
} rdma;
837
struct {
838
__aligned_u64 remote_addr;
839
__aligned_u64 compare_add;
840
__aligned_u64 swap;
841
__u32 rkey;
842
__u32 reserved;
843
} atomic;
844
struct {
845
__u32 ah;
846
__u32 remote_qpn;
847
__u32 remote_qkey;
848
__u32 reserved;
849
} ud;
850
} wr;
851
};
852
853
struct ib_uverbs_post_send {
854
__aligned_u64 response;
855
__u32 qp_handle;
856
__u32 wr_count;
857
__u32 sge_count;
858
__u32 wqe_size;
859
struct ib_uverbs_send_wr send_wr[];
860
};
861
862
struct ib_uverbs_post_send_resp {
863
__u32 bad_wr;
864
};
865
866
struct ib_uverbs_recv_wr {
867
__aligned_u64 wr_id;
868
__u32 num_sge;
869
__u32 reserved;
870
};
871
872
struct ib_uverbs_post_recv {
873
__aligned_u64 response;
874
__u32 qp_handle;
875
__u32 wr_count;
876
__u32 sge_count;
877
__u32 wqe_size;
878
struct ib_uverbs_recv_wr recv_wr[];
879
};
880
881
struct ib_uverbs_post_recv_resp {
882
__u32 bad_wr;
883
};
884
885
struct ib_uverbs_post_srq_recv {
886
__aligned_u64 response;
887
__u32 srq_handle;
888
__u32 wr_count;
889
__u32 sge_count;
890
__u32 wqe_size;
891
struct ib_uverbs_recv_wr recv[];
892
};
893
894
struct ib_uverbs_post_srq_recv_resp {
895
__u32 bad_wr;
896
};
897
898
struct ib_uverbs_create_ah {
899
__aligned_u64 response;
900
__aligned_u64 user_handle;
901
__u32 pd_handle;
902
__u32 reserved;
903
struct ib_uverbs_ah_attr attr;
904
__aligned_u64 driver_data[];
905
};
906
907
struct ib_uverbs_create_ah_resp {
908
__u32 ah_handle;
909
__u32 driver_data[];
910
};
911
912
struct ib_uverbs_destroy_ah {
913
__u32 ah_handle;
914
};
915
916
struct ib_uverbs_attach_mcast {
917
__u8 gid[16];
918
__u32 qp_handle;
919
__u16 mlid;
920
__u16 reserved;
921
__aligned_u64 driver_data[];
922
};
923
924
struct ib_uverbs_detach_mcast {
925
__u8 gid[16];
926
__u32 qp_handle;
927
__u16 mlid;
928
__u16 reserved;
929
__aligned_u64 driver_data[];
930
};
931
932
struct ib_uverbs_flow_spec_hdr {
933
__u32 type;
934
__u16 size;
935
__u16 reserved;
936
/* followed by flow_spec */
937
__aligned_u64 flow_spec_data[0];
938
};
939
940
struct ib_uverbs_flow_eth_filter {
941
__u8 dst_mac[6];
942
__u8 src_mac[6];
943
__be16 ether_type;
944
__be16 vlan_tag;
945
};
946
947
struct ib_uverbs_flow_spec_eth {
948
union {
949
struct ib_uverbs_flow_spec_hdr hdr;
950
struct {
951
__u32 type;
952
__u16 size;
953
__u16 reserved;
954
};
955
};
956
struct ib_uverbs_flow_eth_filter val;
957
struct ib_uverbs_flow_eth_filter mask;
958
};
959
960
struct ib_uverbs_flow_ipv4_filter {
961
__be32 src_ip;
962
__be32 dst_ip;
963
__u8 proto;
964
__u8 tos;
965
__u8 ttl;
966
__u8 flags;
967
};
968
969
struct ib_uverbs_flow_spec_ipv4 {
970
union {
971
struct ib_uverbs_flow_spec_hdr hdr;
972
struct {
973
__u32 type;
974
__u16 size;
975
__u16 reserved;
976
};
977
};
978
struct ib_uverbs_flow_ipv4_filter val;
979
struct ib_uverbs_flow_ipv4_filter mask;
980
};
981
982
struct ib_uverbs_flow_tcp_udp_filter {
983
__be16 dst_port;
984
__be16 src_port;
985
};
986
987
struct ib_uverbs_flow_spec_tcp_udp {
988
union {
989
struct ib_uverbs_flow_spec_hdr hdr;
990
struct {
991
__u32 type;
992
__u16 size;
993
__u16 reserved;
994
};
995
};
996
struct ib_uverbs_flow_tcp_udp_filter val;
997
struct ib_uverbs_flow_tcp_udp_filter mask;
998
};
999
1000
struct ib_uverbs_flow_ipv6_filter {
1001
__u8 src_ip[16];
1002
__u8 dst_ip[16];
1003
__be32 flow_label;
1004
__u8 next_hdr;
1005
__u8 traffic_class;
1006
__u8 hop_limit;
1007
__u8 reserved;
1008
};
1009
1010
struct ib_uverbs_flow_spec_ipv6 {
1011
union {
1012
struct ib_uverbs_flow_spec_hdr hdr;
1013
struct {
1014
__u32 type;
1015
__u16 size;
1016
__u16 reserved;
1017
};
1018
};
1019
struct ib_uverbs_flow_ipv6_filter val;
1020
struct ib_uverbs_flow_ipv6_filter mask;
1021
};
1022
1023
struct ib_uverbs_flow_spec_action_tag {
1024
union {
1025
struct ib_uverbs_flow_spec_hdr hdr;
1026
struct {
1027
__u32 type;
1028
__u16 size;
1029
__u16 reserved;
1030
};
1031
};
1032
__u32 tag_id;
1033
__u32 reserved1;
1034
};
1035
1036
struct ib_uverbs_flow_spec_action_drop {
1037
union {
1038
struct ib_uverbs_flow_spec_hdr hdr;
1039
struct {
1040
__u32 type;
1041
__u16 size;
1042
__u16 reserved;
1043
};
1044
};
1045
};
1046
1047
struct ib_uverbs_flow_spec_action_handle {
1048
union {
1049
struct ib_uverbs_flow_spec_hdr hdr;
1050
struct {
1051
__u32 type;
1052
__u16 size;
1053
__u16 reserved;
1054
};
1055
};
1056
__u32 handle;
1057
__u32 reserved1;
1058
};
1059
1060
struct ib_uverbs_flow_spec_action_count {
1061
union {
1062
struct ib_uverbs_flow_spec_hdr hdr;
1063
struct {
1064
__u32 type;
1065
__u16 size;
1066
__u16 reserved;
1067
};
1068
};
1069
__u32 handle;
1070
__u32 reserved1;
1071
};
1072
1073
struct ib_uverbs_flow_tunnel_filter {
1074
__be32 tunnel_id;
1075
};
1076
1077
struct ib_uverbs_flow_spec_tunnel {
1078
union {
1079
struct ib_uverbs_flow_spec_hdr hdr;
1080
struct {
1081
__u32 type;
1082
__u16 size;
1083
__u16 reserved;
1084
};
1085
};
1086
struct ib_uverbs_flow_tunnel_filter val;
1087
struct ib_uverbs_flow_tunnel_filter mask;
1088
};
1089
1090
struct ib_uverbs_flow_spec_esp_filter {
1091
__u32 spi;
1092
__u32 seq;
1093
};
1094
1095
struct ib_uverbs_flow_spec_esp {
1096
union {
1097
struct ib_uverbs_flow_spec_hdr hdr;
1098
struct {
1099
__u32 type;
1100
__u16 size;
1101
__u16 reserved;
1102
};
1103
};
1104
struct ib_uverbs_flow_spec_esp_filter val;
1105
struct ib_uverbs_flow_spec_esp_filter mask;
1106
};
1107
1108
struct ib_uverbs_flow_gre_filter {
1109
/* c_ks_res0_ver field is bits 0-15 in offset 0 of a standard GRE header:
1110
* bit 0 - C - checksum bit.
1111
* bit 1 - reserved. set to 0.
1112
* bit 2 - key bit.
1113
* bit 3 - sequence number bit.
1114
* bits 4:12 - reserved. set to 0.
1115
* bits 13:15 - GRE version.
1116
*/
1117
__be16 c_ks_res0_ver;
1118
__be16 protocol;
1119
__be32 key;
1120
};
1121
1122
struct ib_uverbs_flow_spec_gre {
1123
union {
1124
struct ib_uverbs_flow_spec_hdr hdr;
1125
struct {
1126
__u32 type;
1127
__u16 size;
1128
__u16 reserved;
1129
};
1130
};
1131
struct ib_uverbs_flow_gre_filter val;
1132
struct ib_uverbs_flow_gre_filter mask;
1133
};
1134
1135
struct ib_uverbs_flow_mpls_filter {
1136
/* The field includes the entire MPLS label:
1137
* bits 0:19 - label field.
1138
* bits 20:22 - traffic class field.
1139
* bits 23 - bottom of stack bit.
1140
* bits 24:31 - ttl field.
1141
*/
1142
__be32 label;
1143
};
1144
1145
struct ib_uverbs_flow_spec_mpls {
1146
union {
1147
struct ib_uverbs_flow_spec_hdr hdr;
1148
struct {
1149
__u32 type;
1150
__u16 size;
1151
__u16 reserved;
1152
};
1153
};
1154
struct ib_uverbs_flow_mpls_filter val;
1155
struct ib_uverbs_flow_mpls_filter mask;
1156
};
1157
1158
struct ib_uverbs_flow_attr {
1159
__u32 type;
1160
__u16 size;
1161
__u16 priority;
1162
__u8 num_of_specs;
1163
__u8 reserved[2];
1164
__u8 port;
1165
__u32 flags;
1166
/* Following are the optional layers according to user request
1167
* struct ib_flow_spec_xxx
1168
* struct ib_flow_spec_yyy
1169
*/
1170
struct ib_uverbs_flow_spec_hdr flow_specs[];
1171
};
1172
1173
struct ib_uverbs_create_flow {
1174
__u32 comp_mask;
1175
__u32 qp_handle;
1176
struct ib_uverbs_flow_attr flow_attr;
1177
};
1178
1179
struct ib_uverbs_create_flow_resp {
1180
__u32 comp_mask;
1181
__u32 flow_handle;
1182
};
1183
1184
struct ib_uverbs_destroy_flow {
1185
__u32 comp_mask;
1186
__u32 flow_handle;
1187
};
1188
1189
struct ib_uverbs_create_srq {
1190
__aligned_u64 response;
1191
__aligned_u64 user_handle;
1192
__u32 pd_handle;
1193
__u32 max_wr;
1194
__u32 max_sge;
1195
__u32 srq_limit;
1196
__aligned_u64 driver_data[];
1197
};
1198
1199
struct ib_uverbs_create_xsrq {
1200
__aligned_u64 response;
1201
__aligned_u64 user_handle;
1202
__u32 srq_type;
1203
__u32 pd_handle;
1204
__u32 max_wr;
1205
__u32 max_sge;
1206
__u32 srq_limit;
1207
__u32 max_num_tags;
1208
__u32 xrcd_handle;
1209
__u32 cq_handle;
1210
__aligned_u64 driver_data[];
1211
};
1212
1213
struct ib_uverbs_create_srq_resp {
1214
__u32 srq_handle;
1215
__u32 max_wr;
1216
__u32 max_sge;
1217
__u32 srqn;
1218
__u32 driver_data[];
1219
};
1220
1221
struct ib_uverbs_modify_srq {
1222
__u32 srq_handle;
1223
__u32 attr_mask;
1224
__u32 max_wr;
1225
__u32 srq_limit;
1226
__aligned_u64 driver_data[];
1227
};
1228
1229
struct ib_uverbs_query_srq {
1230
__aligned_u64 response;
1231
__u32 srq_handle;
1232
__u32 reserved;
1233
__aligned_u64 driver_data[];
1234
};
1235
1236
struct ib_uverbs_query_srq_resp {
1237
__u32 max_wr;
1238
__u32 max_sge;
1239
__u32 srq_limit;
1240
__u32 reserved;
1241
};
1242
1243
struct ib_uverbs_destroy_srq {
1244
__aligned_u64 response;
1245
__u32 srq_handle;
1246
__u32 reserved;
1247
};
1248
1249
struct ib_uverbs_destroy_srq_resp {
1250
__u32 events_reported;
1251
};
1252
1253
struct ib_uverbs_ex_create_wq {
1254
__u32 comp_mask;
1255
__u32 wq_type;
1256
__aligned_u64 user_handle;
1257
__u32 pd_handle;
1258
__u32 cq_handle;
1259
__u32 max_wr;
1260
__u32 max_sge;
1261
__u32 create_flags; /* Use enum ib_wq_flags */
1262
__u32 reserved;
1263
};
1264
1265
struct ib_uverbs_ex_create_wq_resp {
1266
__u32 comp_mask;
1267
__u32 response_length;
1268
__u32 wq_handle;
1269
__u32 max_wr;
1270
__u32 max_sge;
1271
__u32 wqn;
1272
};
1273
1274
struct ib_uverbs_ex_destroy_wq {
1275
__u32 comp_mask;
1276
__u32 wq_handle;
1277
};
1278
1279
struct ib_uverbs_ex_destroy_wq_resp {
1280
__u32 comp_mask;
1281
__u32 response_length;
1282
__u32 events_reported;
1283
__u32 reserved;
1284
};
1285
1286
struct ib_uverbs_ex_modify_wq {
1287
__u32 attr_mask;
1288
__u32 wq_handle;
1289
__u32 wq_state;
1290
__u32 curr_wq_state;
1291
__u32 flags; /* Use enum ib_wq_flags */
1292
__u32 flags_mask; /* Use enum ib_wq_flags */
1293
};
1294
1295
/* Prevent memory allocation rather than max expected size */
1296
#define IB_USER_VERBS_MAX_LOG_IND_TBL_SIZE 0x0d
1297
struct ib_uverbs_ex_create_rwq_ind_table {
1298
__u32 comp_mask;
1299
__u32 log_ind_tbl_size;
1300
/* Following are the wq handles according to log_ind_tbl_size
1301
* wq_handle1
1302
* wq_handle2
1303
*/
1304
__u32 wq_handles[];
1305
};
1306
1307
struct ib_uverbs_ex_create_rwq_ind_table_resp {
1308
__u32 comp_mask;
1309
__u32 response_length;
1310
__u32 ind_tbl_handle;
1311
__u32 ind_tbl_num;
1312
};
1313
1314
struct ib_uverbs_ex_destroy_rwq_ind_table {
1315
__u32 comp_mask;
1316
__u32 ind_tbl_handle;
1317
};
1318
1319
struct ib_uverbs_cq_moderation {
1320
__u16 cq_count;
1321
__u16 cq_period;
1322
};
1323
1324
struct ib_uverbs_ex_modify_cq {
1325
__u32 cq_handle;
1326
__u32 attr_mask;
1327
struct ib_uverbs_cq_moderation attr;
1328
__u32 reserved;
1329
};
1330
1331
#define IB_DEVICE_NAME_MAX 64
1332
1333
/*
1334
* bits 9, 15, 16, 19, 22, 27, 30, 31, 32, 33, 35 and 37 may be set by old
1335
* kernels and should not be used.
1336
*/
1337
enum ib_uverbs_device_cap_flags {
1338
IB_UVERBS_DEVICE_RESIZE_MAX_WR = 1 << 0,
1339
IB_UVERBS_DEVICE_BAD_PKEY_CNTR = 1 << 1,
1340
IB_UVERBS_DEVICE_BAD_QKEY_CNTR = 1 << 2,
1341
IB_UVERBS_DEVICE_RAW_MULTI = 1 << 3,
1342
IB_UVERBS_DEVICE_AUTO_PATH_MIG = 1 << 4,
1343
IB_UVERBS_DEVICE_CHANGE_PHY_PORT = 1 << 5,
1344
IB_UVERBS_DEVICE_UD_AV_PORT_ENFORCE = 1 << 6,
1345
IB_UVERBS_DEVICE_CURR_QP_STATE_MOD = 1 << 7,
1346
IB_UVERBS_DEVICE_SHUTDOWN_PORT = 1 << 8,
1347
/* IB_UVERBS_DEVICE_INIT_TYPE = 1 << 9, (not in use) */
1348
IB_UVERBS_DEVICE_PORT_ACTIVE_EVENT = 1 << 10,
1349
IB_UVERBS_DEVICE_SYS_IMAGE_GUID = 1 << 11,
1350
IB_UVERBS_DEVICE_RC_RNR_NAK_GEN = 1 << 12,
1351
IB_UVERBS_DEVICE_SRQ_RESIZE = 1 << 13,
1352
IB_UVERBS_DEVICE_N_NOTIFY_CQ = 1 << 14,
1353
IB_UVERBS_DEVICE_MEM_WINDOW = 1 << 17,
1354
IB_UVERBS_DEVICE_UD_IP_CSUM = 1 << 18,
1355
IB_UVERBS_DEVICE_XRC = 1 << 20,
1356
IB_UVERBS_DEVICE_MEM_MGT_EXTENSIONS = 1 << 21,
1357
IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2A = 1 << 23,
1358
IB_UVERBS_DEVICE_MEM_WINDOW_TYPE_2B = 1 << 24,
1359
IB_UVERBS_DEVICE_RC_IP_CSUM = 1 << 25,
1360
/* Deprecated. Please use IB_UVERBS_RAW_PACKET_CAP_IP_CSUM. */
1361
IB_UVERBS_DEVICE_RAW_IP_CSUM = 1 << 26,
1362
IB_UVERBS_DEVICE_MANAGED_FLOW_STEERING = 1 << 29,
1363
/* Deprecated. Please use IB_UVERBS_RAW_PACKET_CAP_SCATTER_FCS. */
1364
IB_UVERBS_DEVICE_RAW_SCATTER_FCS = 1ULL << 34,
1365
IB_UVERBS_DEVICE_PCI_WRITE_END_PADDING = 1ULL << 36,
1366
/* Flush placement types */
1367
IB_UVERBS_DEVICE_FLUSH_GLOBAL = 1ULL << 38,
1368
IB_UVERBS_DEVICE_FLUSH_PERSISTENT = 1ULL << 39,
1369
/* Atomic write attributes */
1370
IB_UVERBS_DEVICE_ATOMIC_WRITE = 1ULL << 40,
1371
};
1372
1373
enum ib_uverbs_raw_packet_caps {
1374
IB_UVERBS_RAW_PACKET_CAP_CVLAN_STRIPPING = 1 << 0,
1375
IB_UVERBS_RAW_PACKET_CAP_SCATTER_FCS = 1 << 1,
1376
IB_UVERBS_RAW_PACKET_CAP_IP_CSUM = 1 << 2,
1377
IB_UVERBS_RAW_PACKET_CAP_DELAY_DROP = 1 << 3,
1378
};
1379
1380
#endif /* IB_USER_VERBS_H */
1381
1382