xref: /freebsd/usr.sbin/ctld/ctld.h (revision 9e425a8a7ef075706c901b27091a79e2911b7595)
1009ea47eSEdward Tomasz Napierala /*-
24d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
31de7b4b8SPedro F. Giffuni  *
4009ea47eSEdward Tomasz Napierala  * Copyright (c) 2012 The FreeBSD Foundation
5009ea47eSEdward Tomasz Napierala  *
6009ea47eSEdward Tomasz Napierala  * This software was developed by Edward Tomasz Napierala under sponsorship
7009ea47eSEdward Tomasz Napierala  * from the FreeBSD Foundation.
8009ea47eSEdward Tomasz Napierala  *
9009ea47eSEdward Tomasz Napierala  * Redistribution and use in source and binary forms, with or without
10009ea47eSEdward Tomasz Napierala  * modification, are permitted provided that the following conditions
11009ea47eSEdward Tomasz Napierala  * are met:
12009ea47eSEdward Tomasz Napierala  * 1. Redistributions of source code must retain the above copyright
13009ea47eSEdward Tomasz Napierala  *    notice, this list of conditions and the following disclaimer.
14009ea47eSEdward Tomasz Napierala  * 2. Redistributions in binary form must reproduce the above copyright
15009ea47eSEdward Tomasz Napierala  *    notice, this list of conditions and the following disclaimer in the
16009ea47eSEdward Tomasz Napierala  *    documentation and/or other materials provided with the distribution.
17009ea47eSEdward Tomasz Napierala  *
18009ea47eSEdward Tomasz Napierala  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19009ea47eSEdward Tomasz Napierala  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20009ea47eSEdward Tomasz Napierala  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21009ea47eSEdward Tomasz Napierala  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22009ea47eSEdward Tomasz Napierala  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23009ea47eSEdward Tomasz Napierala  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24009ea47eSEdward Tomasz Napierala  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25009ea47eSEdward Tomasz Napierala  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26009ea47eSEdward Tomasz Napierala  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27009ea47eSEdward Tomasz Napierala  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28009ea47eSEdward Tomasz Napierala  * SUCH DAMAGE.
29009ea47eSEdward Tomasz Napierala  */
30009ea47eSEdward Tomasz Napierala 
31009ea47eSEdward Tomasz Napierala #ifndef CTLD_H
32009ea47eSEdward Tomasz Napierala #define	CTLD_H
33009ea47eSEdward Tomasz Napierala 
34703b03a8SJohn Baldwin #include <sys/_nv.h>
35009ea47eSEdward Tomasz Napierala #include <sys/queue.h>
368eab95d6SEdward Tomasz Napierala #ifdef ICL_KERNEL_PROXY
378eab95d6SEdward Tomasz Napierala #include <sys/types.h>
388eab95d6SEdward Tomasz Napierala #endif
39073edb1cSAlexander Motin #include <sys/socket.h>
40009ea47eSEdward Tomasz Napierala #include <stdbool.h>
4163783933SJohn Baldwin #include <libiscsiutil.h>
42009ea47eSEdward Tomasz Napierala #include <libutil.h>
43009ea47eSEdward Tomasz Napierala 
44009ea47eSEdward Tomasz Napierala #define	DEFAULT_CONFIG_PATH		"/etc/ctl.conf"
45009ea47eSEdward Tomasz Napierala #define	DEFAULT_PIDFILE			"/var/run/ctld.pid"
46009ea47eSEdward Tomasz Napierala #define	DEFAULT_BLOCKSIZE		512
476f2f92a5SAlexander Motin #define	DEFAULT_CD_BLOCKSIZE		2048
48009ea47eSEdward Tomasz Napierala 
49920c6cbaSAlexander Motin #define	MAX_LUNS			1024
508b94b583SAlexander Motin #define	SOCKBUF_SIZE			1048576
51009ea47eSEdward Tomasz Napierala 
52009ea47eSEdward Tomasz Napierala struct auth {
53009ea47eSEdward Tomasz Napierala 	TAILQ_ENTRY(auth)		a_next;
54009ea47eSEdward Tomasz Napierala 	struct auth_group		*a_auth_group;
55009ea47eSEdward Tomasz Napierala 	char				*a_user;
56009ea47eSEdward Tomasz Napierala 	char				*a_secret;
57009ea47eSEdward Tomasz Napierala 	char				*a_mutual_user;
58009ea47eSEdward Tomasz Napierala 	char				*a_mutual_secret;
59009ea47eSEdward Tomasz Napierala };
60009ea47eSEdward Tomasz Napierala 
618cb2e958SEdward Tomasz Napierala struct auth_name {
628cb2e958SEdward Tomasz Napierala 	TAILQ_ENTRY(auth_name)		an_next;
638cb2e958SEdward Tomasz Napierala 	struct auth_group		*an_auth_group;
64bdbc2a6fSAlexander Motin 	char				*an_initiator_name;
658cb2e958SEdward Tomasz Napierala };
668cb2e958SEdward Tomasz Napierala 
678cb2e958SEdward Tomasz Napierala struct auth_portal {
688cb2e958SEdward Tomasz Napierala 	TAILQ_ENTRY(auth_portal)	ap_next;
698cb2e958SEdward Tomasz Napierala 	struct auth_group		*ap_auth_group;
70a3434cdcSAlexander Motin 	char				*ap_initiator_portal;
71073edb1cSAlexander Motin 	struct sockaddr_storage		ap_sa;
72073edb1cSAlexander Motin 	int				ap_mask;
738cb2e958SEdward Tomasz Napierala };
748cb2e958SEdward Tomasz Napierala 
75009ea47eSEdward Tomasz Napierala #define	AG_TYPE_UNKNOWN			0
76e76ce448SEdward Tomasz Napierala #define	AG_TYPE_DENY			1
77e76ce448SEdward Tomasz Napierala #define	AG_TYPE_NO_AUTHENTICATION	2
78e76ce448SEdward Tomasz Napierala #define	AG_TYPE_CHAP			3
79e76ce448SEdward Tomasz Napierala #define	AG_TYPE_CHAP_MUTUAL		4
80009ea47eSEdward Tomasz Napierala 
81009ea47eSEdward Tomasz Napierala struct auth_group {
82009ea47eSEdward Tomasz Napierala 	TAILQ_ENTRY(auth_group)		ag_next;
83009ea47eSEdward Tomasz Napierala 	struct conf			*ag_conf;
84009ea47eSEdward Tomasz Napierala 	char				*ag_name;
85009ea47eSEdward Tomasz Napierala 	struct target			*ag_target;
86009ea47eSEdward Tomasz Napierala 	int				ag_type;
87009ea47eSEdward Tomasz Napierala 	TAILQ_HEAD(, auth)		ag_auths;
888cb2e958SEdward Tomasz Napierala 	TAILQ_HEAD(, auth_name)		ag_names;
898cb2e958SEdward Tomasz Napierala 	TAILQ_HEAD(, auth_portal)	ag_portals;
90009ea47eSEdward Tomasz Napierala };
91009ea47eSEdward Tomasz Napierala 
92009ea47eSEdward Tomasz Napierala struct portal {
93009ea47eSEdward Tomasz Napierala 	TAILQ_ENTRY(portal)		p_next;
94009ea47eSEdward Tomasz Napierala 	struct portal_group		*p_portal_group;
95009ea47eSEdward Tomasz Napierala 	bool				p_iser;
96009ea47eSEdward Tomasz Napierala 	char				*p_listen;
97009ea47eSEdward Tomasz Napierala 	struct addrinfo			*p_ai;
988cab2ed4SEdward Tomasz Napierala #ifdef ICL_KERNEL_PROXY
998cab2ed4SEdward Tomasz Napierala 	int				p_id;
1008cab2ed4SEdward Tomasz Napierala #endif
101009ea47eSEdward Tomasz Napierala 
102009ea47eSEdward Tomasz Napierala 	TAILQ_HEAD(, target)		p_targets;
103009ea47eSEdward Tomasz Napierala 	int				p_socket;
104009ea47eSEdward Tomasz Napierala };
105009ea47eSEdward Tomasz Napierala 
10605374883SEdward Tomasz Napierala #define	PG_FILTER_UNKNOWN		0
10705374883SEdward Tomasz Napierala #define	PG_FILTER_NONE			1
10805374883SEdward Tomasz Napierala #define	PG_FILTER_PORTAL		2
10905374883SEdward Tomasz Napierala #define	PG_FILTER_PORTAL_NAME		3
11005374883SEdward Tomasz Napierala #define	PG_FILTER_PORTAL_NAME_AUTH	4
11105374883SEdward Tomasz Napierala 
112009ea47eSEdward Tomasz Napierala struct portal_group {
113009ea47eSEdward Tomasz Napierala 	TAILQ_ENTRY(portal_group)	pg_next;
114009ea47eSEdward Tomasz Napierala 	struct conf			*pg_conf;
115703b03a8SJohn Baldwin 	nvlist_t			*pg_options;
116009ea47eSEdward Tomasz Napierala 	char				*pg_name;
117009ea47eSEdward Tomasz Napierala 	struct auth_group		*pg_discovery_auth_group;
11805374883SEdward Tomasz Napierala 	int				pg_discovery_filter;
119db7bf2baSAlexander Motin 	int				pg_foreign;
120009ea47eSEdward Tomasz Napierala 	bool				pg_unassigned;
121009ea47eSEdward Tomasz Napierala 	TAILQ_HEAD(, portal)		pg_portals;
12292847ee1SAlexander Motin 	TAILQ_HEAD(, port)		pg_ports;
123a9d78210SEdward Tomasz Napierala 	char				*pg_offload;
1246dbdbf82SEdward Tomasz Napierala 	char				*pg_redirection;
12564ffe6d4SRichard Scheffenegger 	int				pg_dscp;
126ea8f1280SRichard Scheffenegger 	int				pg_pcp;
127009ea47eSEdward Tomasz Napierala 
128009ea47eSEdward Tomasz Napierala 	uint16_t			pg_tag;
129009ea47eSEdward Tomasz Napierala };
130009ea47eSEdward Tomasz Napierala 
131969876fcSAlan Somers /* Ports created by the kernel.  Perhaps the "p" means "physical" ? */
132057abcb0SAlexander Motin struct pport {
133057abcb0SAlexander Motin 	TAILQ_ENTRY(pport)		pp_next;
134057abcb0SAlexander Motin 	TAILQ_HEAD(, port)		pp_ports;
135969876fcSAlan Somers 	struct kports			*pp_kports;
136057abcb0SAlexander Motin 	char				*pp_name;
137057abcb0SAlexander Motin 
138057abcb0SAlexander Motin 	uint32_t			pp_ctl_port;
139057abcb0SAlexander Motin };
140057abcb0SAlexander Motin 
14192847ee1SAlexander Motin struct port {
14292847ee1SAlexander Motin 	TAILQ_ENTRY(port)		p_next;
14392847ee1SAlexander Motin 	TAILQ_ENTRY(port)		p_pgs;
144057abcb0SAlexander Motin 	TAILQ_ENTRY(port)		p_pps;
14592847ee1SAlexander Motin 	TAILQ_ENTRY(port)		p_ts;
14692847ee1SAlexander Motin 	struct conf			*p_conf;
14792847ee1SAlexander Motin 	char				*p_name;
14892847ee1SAlexander Motin 	struct auth_group		*p_auth_group;
14992847ee1SAlexander Motin 	struct portal_group		*p_portal_group;
150057abcb0SAlexander Motin 	struct pport			*p_pport;
15192847ee1SAlexander Motin 	struct target			*p_target;
15292847ee1SAlexander Motin 
1538951f055SMarcelo Araujo 	int				p_ioctl_port;
1548951f055SMarcelo Araujo 	int				p_ioctl_pp;
1558951f055SMarcelo Araujo 	int				p_ioctl_vp;
15692847ee1SAlexander Motin 	uint32_t			p_ctl_port;
15792847ee1SAlexander Motin };
15892847ee1SAlexander Motin 
159009ea47eSEdward Tomasz Napierala struct lun {
160009ea47eSEdward Tomasz Napierala 	TAILQ_ENTRY(lun)		l_next;
161920c6cbaSAlexander Motin 	struct conf			*l_conf;
162703b03a8SJohn Baldwin 	nvlist_t			*l_options;
163920c6cbaSAlexander Motin 	char				*l_name;
164009ea47eSEdward Tomasz Napierala 	char				*l_backend;
16591be33dcSAlexander Motin 	uint8_t				l_device_type;
166009ea47eSEdward Tomasz Napierala 	int				l_blocksize;
167009ea47eSEdward Tomasz Napierala 	char				*l_device_id;
168009ea47eSEdward Tomasz Napierala 	char				*l_path;
169920c6cbaSAlexander Motin 	char				*l_scsiname;
170009ea47eSEdward Tomasz Napierala 	char				*l_serial;
171009ea47eSEdward Tomasz Napierala 	int64_t				l_size;
172009ea47eSEdward Tomasz Napierala 
173009ea47eSEdward Tomasz Napierala 	int				l_ctl_lun;
174009ea47eSEdward Tomasz Napierala };
175009ea47eSEdward Tomasz Napierala 
176009ea47eSEdward Tomasz Napierala struct target {
177009ea47eSEdward Tomasz Napierala 	TAILQ_ENTRY(target)		t_next;
178009ea47eSEdward Tomasz Napierala 	struct conf			*t_conf;
179920c6cbaSAlexander Motin 	struct lun			*t_luns[MAX_LUNS];
180009ea47eSEdward Tomasz Napierala 	struct auth_group		*t_auth_group;
18192847ee1SAlexander Motin 	TAILQ_HEAD(, port)		t_ports;
182f7ae5bf8SEdward Tomasz Napierala 	char				*t_name;
183009ea47eSEdward Tomasz Napierala 	char				*t_alias;
1846dbdbf82SEdward Tomasz Napierala 	char				*t_redirection;
185969876fcSAlan Somers 	/* Name of this target's physical port, if any, i.e. "isp0" */
186969876fcSAlan Somers 	char				*t_pport;
187009ea47eSEdward Tomasz Napierala };
188009ea47eSEdward Tomasz Napierala 
189829603e2SAlexander Motin struct isns {
190829603e2SAlexander Motin 	TAILQ_ENTRY(isns)		i_next;
191829603e2SAlexander Motin 	struct conf			*i_conf;
192829603e2SAlexander Motin 	char				*i_addr;
193829603e2SAlexander Motin 	struct addrinfo			*i_ai;
194829603e2SAlexander Motin };
195829603e2SAlexander Motin 
196009ea47eSEdward Tomasz Napierala struct conf {
197009ea47eSEdward Tomasz Napierala 	char				*conf_pidfile_path;
198920c6cbaSAlexander Motin 	TAILQ_HEAD(, lun)		conf_luns;
199009ea47eSEdward Tomasz Napierala 	TAILQ_HEAD(, target)		conf_targets;
200009ea47eSEdward Tomasz Napierala 	TAILQ_HEAD(, auth_group)	conf_auth_groups;
20192847ee1SAlexander Motin 	TAILQ_HEAD(, port)		conf_ports;
202009ea47eSEdward Tomasz Napierala 	TAILQ_HEAD(, portal_group)	conf_portal_groups;
203829603e2SAlexander Motin 	TAILQ_HEAD(, isns)		conf_isns;
204829603e2SAlexander Motin 	int				conf_isns_period;
205829603e2SAlexander Motin 	int				conf_isns_timeout;
206009ea47eSEdward Tomasz Napierala 	int				conf_debug;
207009ea47eSEdward Tomasz Napierala 	int				conf_timeout;
208009ea47eSEdward Tomasz Napierala 	int				conf_maxproc;
209009ea47eSEdward Tomasz Napierala 
2108cab2ed4SEdward Tomasz Napierala #ifdef ICL_KERNEL_PROXY
2118cab2ed4SEdward Tomasz Napierala 	int				conf_portal_id;
2128cab2ed4SEdward Tomasz Napierala #endif
213009ea47eSEdward Tomasz Napierala 	struct pidfh			*conf_pidfh;
214252d941cSEdward Tomasz Napierala 
215252d941cSEdward Tomasz Napierala 	bool				conf_default_pg_defined;
216252d941cSEdward Tomasz Napierala 	bool				conf_default_ag_defined;
217a113ac05SEdward Tomasz Napierala 	bool				conf_kernel_port_on;
218009ea47eSEdward Tomasz Napierala };
219009ea47eSEdward Tomasz Napierala 
220969876fcSAlan Somers /* Physical ports exposed by the kernel */
221969876fcSAlan Somers struct kports {
222969876fcSAlan Somers 	TAILQ_HEAD(, pport)		pports;
223969876fcSAlan Somers };
224969876fcSAlan Somers 
225009ea47eSEdward Tomasz Napierala #define	CONN_SESSION_TYPE_NONE		0
226009ea47eSEdward Tomasz Napierala #define	CONN_SESSION_TYPE_DISCOVERY	1
227009ea47eSEdward Tomasz Napierala #define	CONN_SESSION_TYPE_NORMAL	2
228009ea47eSEdward Tomasz Napierala 
22963783933SJohn Baldwin struct ctld_connection {
23063783933SJohn Baldwin 	struct connection	conn;
231009ea47eSEdward Tomasz Napierala 	struct portal		*conn_portal;
23292847ee1SAlexander Motin 	struct port		*conn_port;
233009ea47eSEdward Tomasz Napierala 	struct target		*conn_target;
234009ea47eSEdward Tomasz Napierala 	int			conn_session_type;
235009ea47eSEdward Tomasz Napierala 	char			*conn_initiator_name;
236009ea47eSEdward Tomasz Napierala 	char			*conn_initiator_addr;
237009ea47eSEdward Tomasz Napierala 	char			*conn_initiator_alias;
2386d81c129SAlexander Motin 	uint8_t			conn_initiator_isid[6];
239073edb1cSAlexander Motin 	struct sockaddr_storage	conn_initiator_sa;
24059c6e3a5SAlexander Motin 	int			conn_max_recv_data_segment_limit;
24159c6e3a5SAlexander Motin 	int			conn_max_send_data_segment_limit;
24259c6e3a5SAlexander Motin 	int			conn_max_burst_limit;
24359c6e3a5SAlexander Motin 	int			conn_first_burst_limit;
24405374883SEdward Tomasz Napierala 	const char		*conn_user;
24505374883SEdward Tomasz Napierala 	struct chap		*conn_chap;
246009ea47eSEdward Tomasz Napierala };
247009ea47eSEdward Tomasz Napierala 
248*9e425a8aSJohn Baldwin extern int ctl_fd;
249*9e425a8aSJohn Baldwin 
250969876fcSAlan Somers int			parse_conf(struct conf *newconf, const char *path);
2515c734b04SJakub Wojciech Klama int			uclparse_conf(struct conf *conf, const char *path);
2525c734b04SJakub Wojciech Klama 
253009ea47eSEdward Tomasz Napierala struct conf		*conf_new(void);
254969876fcSAlan Somers struct conf		*conf_new_from_kernel(struct kports *kports);
255009ea47eSEdward Tomasz Napierala void			conf_delete(struct conf *conf);
256009ea47eSEdward Tomasz Napierala int			conf_verify(struct conf *conf);
257009ea47eSEdward Tomasz Napierala 
258009ea47eSEdward Tomasz Napierala struct auth_group	*auth_group_new(struct conf *conf, const char *name);
259009ea47eSEdward Tomasz Napierala void			auth_group_delete(struct auth_group *ag);
260d6093026SEdward Tomasz Napierala struct auth_group	*auth_group_find(const struct conf *conf,
261d6093026SEdward Tomasz Napierala 			    const char *name);
262bd833b11SEdward Tomasz Napierala int			auth_group_set_type(struct auth_group *ag,
263df9900fbSEdward Tomasz Napierala 			    const char *type);
264009ea47eSEdward Tomasz Napierala 
265009ea47eSEdward Tomasz Napierala const struct auth	*auth_new_chap(struct auth_group *ag,
266009ea47eSEdward Tomasz Napierala 			    const char *user, const char *secret);
267009ea47eSEdward Tomasz Napierala const struct auth	*auth_new_chap_mutual(struct auth_group *ag,
268009ea47eSEdward Tomasz Napierala 			    const char *user, const char *secret,
269009ea47eSEdward Tomasz Napierala 			    const char *user2, const char *secret2);
270d6093026SEdward Tomasz Napierala const struct auth	*auth_find(const struct auth_group *ag,
271009ea47eSEdward Tomasz Napierala 			    const char *user);
272009ea47eSEdward Tomasz Napierala 
2738cb2e958SEdward Tomasz Napierala const struct auth_name	*auth_name_new(struct auth_group *ag,
2748cb2e958SEdward Tomasz Napierala 			    const char *initiator_name);
2758cb2e958SEdward Tomasz Napierala bool			auth_name_defined(const struct auth_group *ag);
2768cb2e958SEdward Tomasz Napierala const struct auth_name	*auth_name_find(const struct auth_group *ag,
2778cb2e958SEdward Tomasz Napierala 			    const char *initiator_name);
278e867e162SEdward Tomasz Napierala int			auth_name_check(const struct auth_group *ag,
279e867e162SEdward Tomasz Napierala 			    const char *initiator_name);
2808cb2e958SEdward Tomasz Napierala 
2818cb2e958SEdward Tomasz Napierala const struct auth_portal	*auth_portal_new(struct auth_group *ag,
2828cb2e958SEdward Tomasz Napierala 				    const char *initiator_portal);
2838cb2e958SEdward Tomasz Napierala bool			auth_portal_defined(const struct auth_group *ag);
2848cb2e958SEdward Tomasz Napierala const struct auth_portal	*auth_portal_find(const struct auth_group *ag,
285073edb1cSAlexander Motin 				    const struct sockaddr_storage *sa);
286e867e162SEdward Tomasz Napierala int				auth_portal_check(const struct auth_group *ag,
287e867e162SEdward Tomasz Napierala 				    const struct sockaddr_storage *sa);
2888cb2e958SEdward Tomasz Napierala 
289009ea47eSEdward Tomasz Napierala struct portal_group	*portal_group_new(struct conf *conf, const char *name);
290009ea47eSEdward Tomasz Napierala void			portal_group_delete(struct portal_group *pg);
291d6093026SEdward Tomasz Napierala struct portal_group	*portal_group_find(const struct conf *conf,
292d6093026SEdward Tomasz Napierala 			    const char *name);
293009ea47eSEdward Tomasz Napierala int			portal_group_add_listen(struct portal_group *pg,
294009ea47eSEdward Tomasz Napierala 			    const char *listen, bool iser);
295bd833b11SEdward Tomasz Napierala int			portal_group_set_filter(struct portal_group *pg,
29605374883SEdward Tomasz Napierala 			    const char *filter);
297a9d78210SEdward Tomasz Napierala int			portal_group_set_offload(struct portal_group *pg,
298a9d78210SEdward Tomasz Napierala 			    const char *offload);
2996dbdbf82SEdward Tomasz Napierala int			portal_group_set_redirection(struct portal_group *pg,
3006dbdbf82SEdward Tomasz Napierala 			    const char *addr);
301009ea47eSEdward Tomasz Napierala 
302829603e2SAlexander Motin int			isns_new(struct conf *conf, const char *addr);
303829603e2SAlexander Motin void			isns_delete(struct isns *is);
304829603e2SAlexander Motin void			isns_register(struct isns *isns, struct isns *oldisns);
305829603e2SAlexander Motin void			isns_check(struct isns *isns);
306829603e2SAlexander Motin void			isns_deregister(struct isns *isns);
307829603e2SAlexander Motin 
308969876fcSAlan Somers struct pport		*pport_new(struct kports *kports, const char *name,
309057abcb0SAlexander Motin 			    uint32_t ctl_port);
310969876fcSAlan Somers struct pport		*pport_find(const struct kports *kports,
311969876fcSAlan Somers 			    const char *name);
312969876fcSAlan Somers struct pport		*pport_copy(struct pport *pp, struct kports *kports);
313057abcb0SAlexander Motin void			pport_delete(struct pport *pport);
314057abcb0SAlexander Motin 
31592847ee1SAlexander Motin struct port		*port_new(struct conf *conf, struct target *target,
31692847ee1SAlexander Motin 			    struct portal_group *pg);
317969876fcSAlan Somers struct port		*port_new_ioctl(struct conf *conf,
318969876fcSAlan Somers 			    struct kports *kports, struct target *target,
3198951f055SMarcelo Araujo 			    int pp, int vp);
320057abcb0SAlexander Motin struct port		*port_new_pp(struct conf *conf, struct target *target,
321057abcb0SAlexander Motin 			    struct pport *pp);
32292847ee1SAlexander Motin struct port		*port_find(const struct conf *conf, const char *name);
32392847ee1SAlexander Motin struct port		*port_find_in_pg(const struct portal_group *pg,
32492847ee1SAlexander Motin 			    const char *target);
32592847ee1SAlexander Motin void			port_delete(struct port *port);
3269215e501SAlexander Motin int			port_is_dummy(struct port *port);
32792847ee1SAlexander Motin 
328f7ae5bf8SEdward Tomasz Napierala struct target		*target_new(struct conf *conf, const char *name);
329009ea47eSEdward Tomasz Napierala void			target_delete(struct target *target);
330009ea47eSEdward Tomasz Napierala struct target		*target_find(struct conf *conf,
331f7ae5bf8SEdward Tomasz Napierala 			    const char *name);
3326dbdbf82SEdward Tomasz Napierala int			target_set_redirection(struct target *target,
3336dbdbf82SEdward Tomasz Napierala 			    const char *addr);
334009ea47eSEdward Tomasz Napierala 
335920c6cbaSAlexander Motin struct lun		*lun_new(struct conf *conf, const char *name);
336009ea47eSEdward Tomasz Napierala void			lun_delete(struct lun *lun);
337920c6cbaSAlexander Motin struct lun		*lun_find(const struct conf *conf, const char *name);
338009ea47eSEdward Tomasz Napierala void			lun_set_backend(struct lun *lun, const char *value);
33991be33dcSAlexander Motin void			lun_set_device_type(struct lun *lun, uint8_t value);
340009ea47eSEdward Tomasz Napierala void			lun_set_blocksize(struct lun *lun, size_t value);
341009ea47eSEdward Tomasz Napierala void			lun_set_device_id(struct lun *lun, const char *value);
342009ea47eSEdward Tomasz Napierala void			lun_set_path(struct lun *lun, const char *value);
343920c6cbaSAlexander Motin void			lun_set_scsiname(struct lun *lun, const char *value);
344009ea47eSEdward Tomasz Napierala void			lun_set_serial(struct lun *lun, const char *value);
345f26fe2c6SAlan Somers void			lun_set_size(struct lun *lun, int64_t value);
346009ea47eSEdward Tomasz Napierala void			lun_set_ctl_lun(struct lun *lun, uint32_t value);
347009ea47eSEdward Tomasz Napierala 
348703b03a8SJohn Baldwin bool			option_new(nvlist_t *nvl,
349009ea47eSEdward Tomasz Napierala 			    const char *name, const char *value);
350009ea47eSEdward Tomasz Napierala 
351009ea47eSEdward Tomasz Napierala void			kernel_init(void);
352009ea47eSEdward Tomasz Napierala int			kernel_lun_add(struct lun *lun);
353a3977beaSAlexander Motin int			kernel_lun_modify(struct lun *lun);
354009ea47eSEdward Tomasz Napierala int			kernel_lun_remove(struct lun *lun);
35563783933SJohn Baldwin void			kernel_handoff(struct ctld_connection *conn);
35692847ee1SAlexander Motin int			kernel_port_add(struct port *port);
357828524c1SAlexander Motin int			kernel_port_update(struct port *port, struct port *old);
35892847ee1SAlexander Motin int			kernel_port_remove(struct port *port);
359009ea47eSEdward Tomasz Napierala void			kernel_capsicate(void);
360009ea47eSEdward Tomasz Napierala 
3618eab95d6SEdward Tomasz Napierala #ifdef ICL_KERNEL_PROXY
3628cab2ed4SEdward Tomasz Napierala void			kernel_listen(struct addrinfo *ai, bool iser,
3638cab2ed4SEdward Tomasz Napierala 			    int portal_id);
3648eab95d6SEdward Tomasz Napierala void			kernel_accept(int *connection_id, int *portal_id,
3658eab95d6SEdward Tomasz Napierala 			    struct sockaddr *client_sa,
3668eab95d6SEdward Tomasz Napierala 			    socklen_t *client_salen);
367009ea47eSEdward Tomasz Napierala void			kernel_send(struct pdu *pdu);
368009ea47eSEdward Tomasz Napierala void			kernel_receive(struct pdu *pdu);
3698eab95d6SEdward Tomasz Napierala #endif
370009ea47eSEdward Tomasz Napierala 
37163783933SJohn Baldwin void			login(struct ctld_connection *conn);
372009ea47eSEdward Tomasz Napierala 
37363783933SJohn Baldwin void			discovery(struct ctld_connection *conn);
374009ea47eSEdward Tomasz Napierala 
375829603e2SAlexander Motin void			set_timeout(int timeout, int fatal);
376009ea47eSEdward Tomasz Napierala 
377009ea47eSEdward Tomasz Napierala #endif /* !CTLD_H */
378