nvmf: move spdk_nvmf_transport_ops to public API
This will enable pluggable transports. Change-Id: Id6d3f55e9f5d5c07a97b9d848ec99df43ec05331 Signed-off-by: Seth Howell <seth.howell@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/477503 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com> Community-CI: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Alexey Marchuk <alexeymar@mellanox.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
5e3f93a75c
commit
d1a3e31f96
@ -114,6 +114,144 @@ struct spdk_nvmf_transport_poll_group_stat {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function to be called for each newly discovered qpair.
|
||||||
|
*
|
||||||
|
* \param qpair The newly discovered qpair.
|
||||||
|
* \param cb_arg A context argument passed to this function.
|
||||||
|
*/
|
||||||
|
typedef void (*new_qpair_fn)(struct spdk_nvmf_qpair *qpair, void *cb_arg);
|
||||||
|
|
||||||
|
struct spdk_nvmf_transport_ops {
|
||||||
|
/**
|
||||||
|
* Transport type
|
||||||
|
*/
|
||||||
|
enum spdk_nvme_transport_type type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize transport options to default value
|
||||||
|
*/
|
||||||
|
void (*opts_init)(struct spdk_nvmf_transport_opts *opts);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a transport for the given transport opts
|
||||||
|
*/
|
||||||
|
struct spdk_nvmf_transport *(*create)(struct spdk_nvmf_transport_opts *opts);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy the transport
|
||||||
|
*/
|
||||||
|
int (*destroy)(struct spdk_nvmf_transport *transport);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Instruct the transport to accept new connections at the address
|
||||||
|
* provided. This may be called multiple times.
|
||||||
|
*/
|
||||||
|
int (*listen)(struct spdk_nvmf_transport *transport,
|
||||||
|
const struct spdk_nvme_transport_id *trid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop accepting new connections at the given address.
|
||||||
|
*/
|
||||||
|
int (*stop_listen)(struct spdk_nvmf_transport *transport,
|
||||||
|
const struct spdk_nvme_transport_id *trid);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check for new connections on the transport.
|
||||||
|
*/
|
||||||
|
void (*accept)(struct spdk_nvmf_transport *transport, new_qpair_fn cb_fn, void *cb_arg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fill out a discovery log entry for a specific listen address.
|
||||||
|
*/
|
||||||
|
void (*listener_discover)(struct spdk_nvmf_transport *transport,
|
||||||
|
struct spdk_nvme_transport_id *trid,
|
||||||
|
struct spdk_nvmf_discovery_log_page_entry *entry);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new poll group
|
||||||
|
*/
|
||||||
|
struct spdk_nvmf_transport_poll_group *(*poll_group_create)(struct spdk_nvmf_transport *transport);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the polling group of the queue pair optimal for the specific transport
|
||||||
|
*/
|
||||||
|
struct spdk_nvmf_transport_poll_group *(*get_optimal_poll_group)(struct spdk_nvmf_qpair *qpair);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destroy a poll group
|
||||||
|
*/
|
||||||
|
void (*poll_group_destroy)(struct spdk_nvmf_transport_poll_group *group);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a qpair to a poll group
|
||||||
|
*/
|
||||||
|
int (*poll_group_add)(struct spdk_nvmf_transport_poll_group *group,
|
||||||
|
struct spdk_nvmf_qpair *qpair);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a qpair from a poll group
|
||||||
|
*/
|
||||||
|
int (*poll_group_remove)(struct spdk_nvmf_transport_poll_group *group,
|
||||||
|
struct spdk_nvmf_qpair *qpair);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Poll the group to process I/O
|
||||||
|
*/
|
||||||
|
int (*poll_group_poll)(struct spdk_nvmf_transport_poll_group *group);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free the request without sending a response
|
||||||
|
* to the originator. Release memory tied to this request.
|
||||||
|
*/
|
||||||
|
int (*req_free)(struct spdk_nvmf_request *req);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Signal request completion, which sends a response
|
||||||
|
* to the originator.
|
||||||
|
*/
|
||||||
|
int (*req_complete)(struct spdk_nvmf_request *req);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Deinitialize a connection.
|
||||||
|
*/
|
||||||
|
void (*qpair_fini)(struct spdk_nvmf_qpair *qpair);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the peer transport ID for the queue pair.
|
||||||
|
*/
|
||||||
|
int (*qpair_get_peer_trid)(struct spdk_nvmf_qpair *qpair,
|
||||||
|
struct spdk_nvme_transport_id *trid);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the local transport ID for the queue pair.
|
||||||
|
*/
|
||||||
|
int (*qpair_get_local_trid)(struct spdk_nvmf_qpair *qpair,
|
||||||
|
struct spdk_nvme_transport_id *trid);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the listener transport ID that accepted this qpair originally.
|
||||||
|
*/
|
||||||
|
int (*qpair_get_listen_trid)(struct spdk_nvmf_qpair *qpair,
|
||||||
|
struct spdk_nvme_transport_id *trid);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* set the submission queue size of the queue pair
|
||||||
|
*/
|
||||||
|
int (*qpair_set_sqsize)(struct spdk_nvmf_qpair *qpair);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get transport poll group statistics
|
||||||
|
*/
|
||||||
|
int (*poll_group_get_stat)(struct spdk_nvmf_tgt *tgt,
|
||||||
|
struct spdk_nvmf_transport_poll_group_stat **stat);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Free transport poll group statistics previously allocated with poll_group_get_stat()
|
||||||
|
*/
|
||||||
|
void (*poll_group_free_stat)(struct spdk_nvmf_transport_poll_group_stat *stat);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct an NVMe-oF target.
|
* Construct an NVMe-oF target.
|
||||||
*
|
*
|
||||||
@ -214,14 +352,6 @@ void spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
|
|||||||
spdk_nvmf_tgt_listen_done_fn cb_fn,
|
spdk_nvmf_tgt_listen_done_fn cb_fn,
|
||||||
void *cb_arg);
|
void *cb_arg);
|
||||||
|
|
||||||
/**
|
|
||||||
* Function to be called for each newly discovered qpair.
|
|
||||||
*
|
|
||||||
* \param qpair The newly discovered qpair.
|
|
||||||
* \param cb_arg A context argument passed to this function.
|
|
||||||
*/
|
|
||||||
typedef void (*new_qpair_fn)(struct spdk_nvmf_qpair *qpair, void *cb_arg);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Poll the target for incoming connections.
|
* Poll the target for incoming connections.
|
||||||
*
|
*
|
||||||
|
@ -50,136 +50,6 @@ struct spdk_nvmf_transport {
|
|||||||
TAILQ_ENTRY(spdk_nvmf_transport) link;
|
TAILQ_ENTRY(spdk_nvmf_transport) link;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct spdk_nvmf_transport_ops {
|
|
||||||
/**
|
|
||||||
* Transport type
|
|
||||||
*/
|
|
||||||
enum spdk_nvme_transport_type type;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialize transport options to default value
|
|
||||||
*/
|
|
||||||
void (*opts_init)(struct spdk_nvmf_transport_opts *opts);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a transport for the given transport opts
|
|
||||||
*/
|
|
||||||
struct spdk_nvmf_transport *(*create)(struct spdk_nvmf_transport_opts *opts);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy the transport
|
|
||||||
*/
|
|
||||||
int (*destroy)(struct spdk_nvmf_transport *transport);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instruct the transport to accept new connections at the address
|
|
||||||
* provided. This may be called multiple times.
|
|
||||||
*/
|
|
||||||
int (*listen)(struct spdk_nvmf_transport *transport,
|
|
||||||
const struct spdk_nvme_transport_id *trid);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stop accepting new connections at the given address.
|
|
||||||
*/
|
|
||||||
int (*stop_listen)(struct spdk_nvmf_transport *transport,
|
|
||||||
const struct spdk_nvme_transport_id *trid);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check for new connections on the transport.
|
|
||||||
*/
|
|
||||||
void (*accept)(struct spdk_nvmf_transport *transport, new_qpair_fn cb_fn, void *cb_arg);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fill out a discovery log entry for a specific listen address.
|
|
||||||
*/
|
|
||||||
void (*listener_discover)(struct spdk_nvmf_transport *transport,
|
|
||||||
struct spdk_nvme_transport_id *trid,
|
|
||||||
struct spdk_nvmf_discovery_log_page_entry *entry);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new poll group
|
|
||||||
*/
|
|
||||||
struct spdk_nvmf_transport_poll_group *(*poll_group_create)(struct spdk_nvmf_transport *transport);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the polling group of the queue pair optimal for the specific transport
|
|
||||||
*/
|
|
||||||
struct spdk_nvmf_transport_poll_group *(*get_optimal_poll_group)(struct spdk_nvmf_qpair *qpair);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy a poll group
|
|
||||||
*/
|
|
||||||
void (*poll_group_destroy)(struct spdk_nvmf_transport_poll_group *group);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a qpair to a poll group
|
|
||||||
*/
|
|
||||||
int (*poll_group_add)(struct spdk_nvmf_transport_poll_group *group,
|
|
||||||
struct spdk_nvmf_qpair *qpair);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove a qpair from a poll group
|
|
||||||
*/
|
|
||||||
int (*poll_group_remove)(struct spdk_nvmf_transport_poll_group *group,
|
|
||||||
struct spdk_nvmf_qpair *qpair);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Poll the group to process I/O
|
|
||||||
*/
|
|
||||||
int (*poll_group_poll)(struct spdk_nvmf_transport_poll_group *group);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Free the request without sending a response
|
|
||||||
* to the originator. Release memory tied to this request.
|
|
||||||
*/
|
|
||||||
int (*req_free)(struct spdk_nvmf_request *req);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Signal request completion, which sends a response
|
|
||||||
* to the originator.
|
|
||||||
*/
|
|
||||||
int (*req_complete)(struct spdk_nvmf_request *req);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Deinitialize a connection.
|
|
||||||
*/
|
|
||||||
void (*qpair_fini)(struct spdk_nvmf_qpair *qpair);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the peer transport ID for the queue pair.
|
|
||||||
*/
|
|
||||||
int (*qpair_get_peer_trid)(struct spdk_nvmf_qpair *qpair,
|
|
||||||
struct spdk_nvme_transport_id *trid);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the local transport ID for the queue pair.
|
|
||||||
*/
|
|
||||||
int (*qpair_get_local_trid)(struct spdk_nvmf_qpair *qpair,
|
|
||||||
struct spdk_nvme_transport_id *trid);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the listener transport ID that accepted this qpair originally.
|
|
||||||
*/
|
|
||||||
int (*qpair_get_listen_trid)(struct spdk_nvmf_qpair *qpair,
|
|
||||||
struct spdk_nvme_transport_id *trid);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* set the submission queue size of the queue pair
|
|
||||||
*/
|
|
||||||
int (*qpair_set_sqsize)(struct spdk_nvmf_qpair *qpair);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get transport poll group statistics
|
|
||||||
*/
|
|
||||||
int (*poll_group_get_stat)(struct spdk_nvmf_tgt *tgt,
|
|
||||||
struct spdk_nvmf_transport_poll_group_stat **stat);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Free transport poll group statistics previously allocated with poll_group_get_stat()
|
|
||||||
*/
|
|
||||||
void (*poll_group_free_stat)(struct spdk_nvmf_transport_poll_group_stat *stat);
|
|
||||||
};
|
|
||||||
|
|
||||||
int spdk_nvmf_transport_stop_listen(struct spdk_nvmf_transport *transport,
|
int spdk_nvmf_transport_stop_listen(struct spdk_nvmf_transport *transport,
|
||||||
const struct spdk_nvme_transport_id *trid);
|
const struct spdk_nvme_transport_id *trid);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user