xref: /spdk/lib/iscsi/portal_grp.h (revision a6dbe3721eb3b5990707fc3e378c95e505dd8ab5)
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