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