|  | /* | 
|  | * QEMU paravirtual RDMA - rdmacm-mux declarations | 
|  | * | 
|  | * Copyright (C) 2018 Oracle | 
|  | * Copyright (C) 2018 Red Hat Inc | 
|  | * | 
|  | * Authors: | 
|  | *     Yuval Shaia <yuval.shaia@oracle.com> | 
|  | *     Marcel Apfelbaum <marcel@redhat.com> | 
|  | * | 
|  | * This work is licensed under the terms of the GNU GPL, version 2 or later. | 
|  | * See the COPYING file in the top-level directory. | 
|  | * | 
|  | */ | 
|  |  | 
|  | #ifndef RDMACM_MUX_H | 
|  | #define RDMACM_MUX_H | 
|  |  | 
|  | #include "linux/if.h" | 
|  | #include <infiniband/verbs.h> | 
|  | #include <infiniband/umad.h> | 
|  | #include <rdma/rdma_user_cm.h> | 
|  |  | 
|  | typedef enum RdmaCmMuxMsgType { | 
|  | RDMACM_MUX_MSG_TYPE_REQ   = 0, | 
|  | RDMACM_MUX_MSG_TYPE_RESP  = 1, | 
|  | } RdmaCmMuxMsgType; | 
|  |  | 
|  | typedef enum RdmaCmMuxOpCode { | 
|  | RDMACM_MUX_OP_CODE_REG   = 0, | 
|  | RDMACM_MUX_OP_CODE_UNREG = 1, | 
|  | RDMACM_MUX_OP_CODE_MAD   = 2, | 
|  | } RdmaCmMuxOpCode; | 
|  |  | 
|  | typedef enum RdmaCmMuxErrCode { | 
|  | RDMACM_MUX_ERR_CODE_OK        = 0, | 
|  | RDMACM_MUX_ERR_CODE_EINVAL    = 1, | 
|  | RDMACM_MUX_ERR_CODE_EEXIST    = 2, | 
|  | RDMACM_MUX_ERR_CODE_EACCES    = 3, | 
|  | RDMACM_MUX_ERR_CODE_ENOTFOUND = 4, | 
|  | } RdmaCmMuxErrCode; | 
|  |  | 
|  | typedef struct RdmaCmMuxHdr { | 
|  | RdmaCmMuxMsgType msg_type; | 
|  | RdmaCmMuxOpCode op_code; | 
|  | union ibv_gid sgid; | 
|  | RdmaCmMuxErrCode err_code; | 
|  | } RdmaCmUHdr; | 
|  |  | 
|  | typedef struct RdmaCmUMad { | 
|  | struct ib_user_mad hdr; | 
|  | char mad[RDMA_MAX_PRIVATE_DATA]; | 
|  | } RdmaCmUMad; | 
|  |  | 
|  | typedef struct RdmaCmMuxMsg { | 
|  | RdmaCmUHdr hdr; | 
|  | int umad_len; | 
|  | RdmaCmUMad umad; | 
|  | } RdmaCmMuxMsg; | 
|  |  | 
|  | #endif |