1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright (C) 2008-2012 Daisuke Aoyama <aoyama@peach.ne.jp>. 3 * Copyright (C) 2016 Intel Corporation. 4 * All rights reserved. 5 */ 6 7 #ifndef SPDK_PORTAL_GRP_H 8 #define SPDK_PORTAL_GRP_H 9 10 #include "spdk/conf.h" 11 #include "spdk/cpuset.h" 12 #include "iscsi/iscsi.h" 13 14 struct spdk_json_write_ctx; 15 16 struct spdk_iscsi_portal { 17 struct spdk_iscsi_portal_grp *group; 18 char host[MAX_PORTAL_ADDR + 1]; 19 char port[MAX_PORTAL_PORT + 1]; 20 struct spdk_sock *sock; 21 struct spdk_poller *acceptor_poller; 22 TAILQ_ENTRY(spdk_iscsi_portal) per_pg_tailq; 23 TAILQ_ENTRY(spdk_iscsi_portal) g_tailq; 24 }; 25 26 struct spdk_iscsi_portal_grp { 27 int ref; 28 int tag; 29 30 /* For login redirection, there are two types of portal groups, public and 31 * private portal groups. Public portal groups have their portals returned 32 * by a discovery session. Private portal groups do not have their portals 33 * returned by a discovery session. A public portal group may optionally 34 * specify a redirect portal for non-discovery logins. This redirect portal 35 * must be from a private portal group. 36 */ 37 bool is_private; 38 39 bool disable_chap; 40 bool require_chap; 41 bool mutual_chap; 42 int32_t chap_group; 43 TAILQ_ENTRY(spdk_iscsi_portal_grp) tailq; 44 TAILQ_HEAD(, spdk_iscsi_portal) head; 45 }; 46 47 /* SPDK iSCSI Portal Group management API */ 48 49 struct spdk_iscsi_portal *iscsi_portal_create(const char *host, const char *port); 50 void iscsi_portal_destroy(struct spdk_iscsi_portal *p); 51 52 struct spdk_iscsi_portal_grp *iscsi_portal_grp_create(int tag, bool is_private); 53 void iscsi_portal_grp_add_portal(struct spdk_iscsi_portal_grp *pg, 54 struct spdk_iscsi_portal *p); 55 struct spdk_iscsi_portal *iscsi_portal_grp_find_portal_by_addr( 56 struct spdk_iscsi_portal_grp *pg, const char *host, const char *port); 57 58 void iscsi_portal_grp_destroy(struct spdk_iscsi_portal_grp *pg); 59 void iscsi_portal_grp_release(struct spdk_iscsi_portal_grp *pg); 60 int iscsi_parse_portal_grps(void); 61 void iscsi_portal_grps_destroy(void); 62 int iscsi_portal_grp_register(struct spdk_iscsi_portal_grp *pg); 63 struct spdk_iscsi_portal_grp *iscsi_portal_grp_unregister(int tag); 64 struct spdk_iscsi_portal_grp *iscsi_portal_grp_find_by_tag(int tag); 65 int iscsi_portal_grp_open(struct spdk_iscsi_portal_grp *pg, bool pause); 66 void iscsi_portal_grp_resume(struct spdk_iscsi_portal_grp *pg); 67 int iscsi_portal_grp_set_chap_params(struct spdk_iscsi_portal_grp *pg, 68 bool disable_chap, bool require_chap, 69 bool mutual_chap, int32_t chap_group); 70 71 void iscsi_portal_grp_close_all(void); 72 void iscsi_portal_grps_info_json(struct spdk_json_write_ctx *w); 73 void iscsi_portal_grps_config_json(struct spdk_json_write_ctx *w); 74 75 int iscsi_parse_redirect_addr(struct sockaddr_storage *sa, 76 const char *host, const char *port); 77 78 #endif /* SPDK_PORTAL_GRP_H */ 79