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 portal(pg, listen, protocol, std::move(ai)) {} 43 virtual ~nvmf_portal() override = default; 44 45 virtual bool prepare() override; 46 aparamsnvmf_portal47 const struct nvmf_association_params *aparams() const 48 { return &p_aparams; } 49 50 protected: associationnvmf_portal51 struct nvmf_association *association() { return p_association.get(); } 52 53 private: 54 struct nvmf_association_params p_aparams; 55 nvmf_association_up p_association; 56 }; 57 58 struct nvmf_discovery_portal final : public nvmf_portal { nvmf_discovery_portalnvmf_discovery_portal59 nvmf_discovery_portal(struct portal_group *pg, const char *listen, 60 portal_protocol protocol, freebsd::addrinfo_up ai) : 61 nvmf_portal(pg, listen, protocol, std::move(ai)) {} 62 63 void handle_connection(freebsd::fd_up fd, const char *host, 64 const struct sockaddr *client_sa) override; 65 }; 66 67 #endif /* !__NVMF_HH__ */ 68