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:
Seth Howell 2019-12-10 13:21:26 -07:00 committed by Tomasz Zawadzki
parent 5e3f93a75c
commit d1a3e31f96
2 changed files with 138 additions and 138 deletions

View File

@ -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.
*
@ -214,14 +352,6 @@ void spdk_nvmf_tgt_listen(struct spdk_nvmf_tgt *tgt,
spdk_nvmf_tgt_listen_done_fn cb_fn,
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.
*

View File

@ -50,136 +50,6 @@ struct spdk_nvmf_transport {
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,
const struct spdk_nvme_transport_id *trid);