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