xref: /freebsd/usr.sbin/ctld/nvmf.hh (revision 66b5296f1b29083634e2875ff08c32e7b6b866a8)
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause
3  *
4  * Copyright (c) 2025 Chelsio Communications, Inc.
5  * Written by: John Baldwin <jhb@FreeBSD.org>
6  */
7 
8 #ifndef __NVMF_HH__
9 #define	__NVMF_HH__
10 
11 struct nvmf_association_deleter {
operator ()nvmf_association_deleter12 	void operator()(struct nvmf_association *na) const
13 	{
14 		nvmf_free_association(na);
15 	}
16 };
17 
18 using nvmf_association_up = std::unique_ptr<nvmf_association,
19 					    nvmf_association_deleter>;
20 
21 struct nvmf_capsule_deleter {
operator ()nvmf_capsule_deleter22 	void operator()(struct nvmf_capsule *nc) const
23 	{
24 		nvmf_free_capsule(nc);
25 	}
26 };
27 
28 using nvmf_capsule_up = std::unique_ptr<nvmf_capsule, nvmf_capsule_deleter>;
29 
30 struct nvmf_qpair_deleter {
operator ()nvmf_qpair_deleter31 	void operator()(struct nvmf_qpair *qp) const
32 	{
33 		nvmf_free_qpair(qp);
34 	}
35 };
36 
37 using nvmf_qpair_up = std::unique_ptr<nvmf_qpair, nvmf_qpair_deleter>;
38 
39 struct nvmf_portal : public portal {
nvmf_portalnvmf_portal40 	nvmf_portal(struct portal_group *pg, const char *listen,
41 	    portal_protocol protocol, freebsd::addrinfo_up ai,
42 	    const struct nvmf_association_params &aparams,
43 	    nvmf_association_up na) :
44 		portal(pg, listen, protocol, std::move(ai)),
45 		p_aparams(aparams), p_association(std::move(na)) {}
46 	virtual ~nvmf_portal() override = default;
47 
aparamsnvmf_portal48 	const struct nvmf_association_params *aparams() const
49 	{ return &p_aparams; }
50 
51 protected:
associationnvmf_portal52 	struct nvmf_association *association() { return p_association.get(); }
53 
54 private:
55 	struct nvmf_association_params	p_aparams;
56 	nvmf_association_up		p_association;
57 };
58 
59 struct nvmf_discovery_portal final : public nvmf_portal {
nvmf_discovery_portalnvmf_discovery_portal60 	nvmf_discovery_portal(struct portal_group *pg, const char *listen,
61 	    portal_protocol protocol, freebsd::addrinfo_up ai,
62 	    const struct nvmf_association_params &aparams,
63 	    nvmf_association_up na) :
64 		nvmf_portal(pg, listen, protocol, std::move(ai), aparams,
65 		    std::move(na)) {}
66 
67 	void handle_connection(freebsd::fd_up fd, const char *host,
68 	    const struct sockaddr *client_sa) override;
69 };
70 
71 #endif /* !__NVMF_HH__ */
72