diff options
author | Benoît Ganne <bganne@cisco.com> | 2019-03-25 11:41:34 +0100 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2019-03-28 19:31:59 +0000 |
commit | fe750c248be58b76479836639fbd0c4617210aa5 (patch) | |
tree | 471a48243fb13e3eb84c95cf0be0b270607ae286 /src/plugins/rdma/rdma.h | |
parent | 6bc6fd0aebd7feb523604973bcf593bfe14bbd30 (diff) |
Add RDMA ibverb driver plugin
RDMA ibverb is a userspace API to efficiently rx/tx packets. This is an
initial, unoptimized driver targeting Mellanox cards.
Next steps should include batching, multiqueue and additional cards.
Change-Id: I0309c7a543f75f2f9317eaf63ca502ac7a093ef9
Signed-off-by: Benoît Ganne <bganne@cisco.com>
Diffstat (limited to 'src/plugins/rdma/rdma.h')
-rw-r--r-- | src/plugins/rdma/rdma.h | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/src/plugins/rdma/rdma.h b/src/plugins/rdma/rdma.h new file mode 100644 index 00000000000..860ddaba2b1 --- /dev/null +++ b/src/plugins/rdma/rdma.h @@ -0,0 +1,141 @@ +/* + *------------------------------------------------------------------ + * Copyright (c) 2018 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *------------------------------------------------------------------ + */ + +#ifndef _RDMA_H_ +#define _RDMA_H_ + +#include <infiniband/verbs.h> +#include <vlib/log.h> + +#define foreach_rdma_device_flags \ + _(0, INITIALIZED, "initialized") \ + _(1, ERROR, "error") \ + _(2, ADMIN_UP, "admin-up") \ + _(3, VA_DMA, "vaddr-dma") \ + _(4, LINK_UP, "link-up") \ + _(5, SHARED_TXQ_LOCK, "shared-txq-lock") \ + _(6, ELOG, "elog") \ + +enum +{ +#define _(a, b, c) RDMA_DEVICE_F_##b = (1 << a), + foreach_rdma_device_flags +#undef _ +}; + +typedef struct +{ + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); + u32 size; + u32 n_enq; + struct ibv_cq *cq; + struct ibv_qp *qp; +} rdma_rxq_t; + +typedef struct +{ + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); + u32 size; + u32 n_enq; + struct ibv_cq *cq; + struct ibv_qp *qp; + clib_spinlock_t lock; +} rdma_txq_t; + +typedef struct +{ + CLIB_CACHE_LINE_ALIGN_MARK (cacheline0); + u32 flags; + u32 per_interface_next_index; + + u32 dev_instance; + u32 sw_if_index; + u32 hw_if_index; + + u32 async_event_clib_file_index; + + rdma_rxq_t *rxqs; + rdma_txq_t *txqs; + + u8 hwaddr[6]; + vlib_pci_addr_t pci_addr; + + struct ibv_context *ctx; + struct ibv_pd *pd; + struct ibv_mr *mr; + struct ibv_flow *flow_ucast; + struct ibv_flow *flow_mcast; + + /* error */ + clib_error_t *error; +} rdma_device_t; + +typedef struct +{ + rdma_device_t *devices; + vlib_log_class_t log_class; +} rdma_main_t; + +extern rdma_main_t rdma_main; + +typedef struct +{ + u8 *ifname; + + /* return */ + int rv; + u32 sw_if_index; + clib_error_t *error; +} rdma_create_if_args_t; + +void rdma_create_if (vlib_main_t * vm, rdma_create_if_args_t * args); +void rdma_delete_if (vlib_main_t * vm, rdma_device_t * rd); + +extern vlib_node_registration_t rdma_input_node; +extern vnet_device_class_t rdma_device_class; + +/* format.c */ +format_function_t format_rdma_device; +format_function_t format_rdma_device_name; +format_function_t format_rdma_input_trace; + +typedef struct +{ + u32 next_index; + u32 hw_if_index; +} rdma_input_trace_t; + +#define foreach_rdma_tx_func_error \ +_(NO_FREE_SLOTS, "no free tx slots") + +typedef enum +{ +#define _(f,s) RDMA_TX_ERROR_##f, + foreach_rdma_tx_func_error +#undef _ + RDMA_TX_N_ERROR, +} rdma_tx_func_error_t; + +#endif /* AVF_H */ + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ |