1 /*
2  * QEMU paravirtual RDMA - rdmacm-mux declarations
3  *
4  * Copyright (C) 2018 Oracle
5  * Copyright (C) 2018 Red Hat Inc
6  *
7  * Authors:
8  *     Yuval Shaia <yuval.shaia@oracle.com>
9  *     Marcel Apfelbaum <marcel@redhat.com>
10  *
11  * This work is licensed under the terms of the GNU GPL, version 2 or later.
12  * See the COPYING file in the top-level directory.
13  *
14  */
15 
16 #ifndef RDMACM_MUX_H
17 #define RDMACM_MUX_H
18 
19 #include "linux/if.h"
20 #include "infiniband/verbs.h"
21 #include "infiniband/umad.h"
22 #include "rdma/rdma_user_cm.h"
23 
24 typedef enum RdmaCmMuxMsgType {
25     RDMACM_MUX_MSG_TYPE_REQ   = 0,
26     RDMACM_MUX_MSG_TYPE_RESP  = 1,
27 } RdmaCmMuxMsgType;
28 
29 typedef enum RdmaCmMuxOpCode {
30     RDMACM_MUX_OP_CODE_REG   = 0,
31     RDMACM_MUX_OP_CODE_UNREG = 1,
32     RDMACM_MUX_OP_CODE_MAD   = 2,
33 } RdmaCmMuxOpCode;
34 
35 typedef enum RdmaCmMuxErrCode {
36     RDMACM_MUX_ERR_CODE_OK        = 0,
37     RDMACM_MUX_ERR_CODE_EINVAL    = 1,
38     RDMACM_MUX_ERR_CODE_EEXIST    = 2,
39     RDMACM_MUX_ERR_CODE_EACCES    = 3,
40     RDMACM_MUX_ERR_CODE_ENOTFOUND = 4,
41 } RdmaCmMuxErrCode;
42 
43 typedef struct RdmaCmMuxHdr {
44     RdmaCmMuxMsgType msg_type;
45     RdmaCmMuxOpCode op_code;
46     union ibv_gid sgid;
47     RdmaCmMuxErrCode err_code;
48 } RdmaCmUHdr;
49 
50 typedef struct RdmaCmUMad {
51     struct ib_user_mad hdr;
52     char mad[RDMA_MAX_PRIVATE_DATA];
53 } RdmaCmUMad;
54 
55 typedef struct RdmaCmMuxMsg {
56     RdmaCmUHdr hdr;
57     int umad_len;
58     RdmaCmUMad umad;
59 } RdmaCmMuxMsg;
60 
61 #endif
62