xref: /spdk/test/unit/lib/iscsi/tgt_node.c/tgt_node_ut.c (revision eac7470961f7559387e59b6b7a16c81d222d426a)
1488570ebSJim Harris /*   SPDX-License-Identifier: BSD-3-Clause
2a6dbe372Spaul luse  *   Copyright (C) 2016 Intel Corporation.
3144ba3a1SDaniel Verkamp  *   All rights reserved.
4144ba3a1SDaniel Verkamp  */
5144ba3a1SDaniel Verkamp 
6144ba3a1SDaniel Verkamp #include "spdk/stdinc.h"
7144ba3a1SDaniel Verkamp 
8144ba3a1SDaniel Verkamp #include "spdk/scsi.h"
9144ba3a1SDaniel Verkamp 
10144ba3a1SDaniel Verkamp #include "CUnit/Basic.h"
11c2009e9eSDaniel Verkamp #include "spdk_internal/mock.h"
12144ba3a1SDaniel Verkamp 
13144ba3a1SDaniel Verkamp #include "../common.c"
14144ba3a1SDaniel Verkamp #include "iscsi/tgt_node.c"
15144ba3a1SDaniel Verkamp #include "scsi/scsi_internal.h"
169114e3a2SShuhei Matsumoto #include "unit/lib/json_mock.c"
17a5478cefSShuhei Matsumoto #include "common/lib/test_env.c"
18144ba3a1SDaniel Verkamp 
19be1489b9SShuhei Matsumoto struct spdk_iscsi_globals g_iscsi;
20144ba3a1SDaniel Verkamp 
21c2009e9eSDaniel Verkamp DEFINE_STUB(spdk_scsi_dev_get_id,
22c2009e9eSDaniel Verkamp 	    int,
23c2009e9eSDaniel Verkamp 	    (const struct spdk_scsi_dev *dev),
24c2009e9eSDaniel Verkamp 	    0);
25c2009e9eSDaniel Verkamp 
26583e9699SShuhei Matsumoto DEFINE_STUB(spdk_scsi_lun_get_bdev_name,
27c2009e9eSDaniel Verkamp 	    const char *,
28c2009e9eSDaniel Verkamp 	    (const struct spdk_scsi_lun *lun),
29c2009e9eSDaniel Verkamp 	    NULL);
30c2009e9eSDaniel Verkamp 
31c2009e9eSDaniel Verkamp DEFINE_STUB(spdk_scsi_lun_get_id,
32c2009e9eSDaniel Verkamp 	    int,
33c2009e9eSDaniel Verkamp 	    (const struct spdk_scsi_lun *lun),
34c2009e9eSDaniel Verkamp 	    0);
35c2009e9eSDaniel Verkamp 
3669bef7f7SShuhei Matsumoto DEFINE_STUB(spdk_sock_is_ipv6, bool, (struct spdk_sock *sock), false);
37144ba3a1SDaniel Verkamp 
3869bef7f7SShuhei Matsumoto DEFINE_STUB(spdk_sock_is_ipv4, bool, (struct spdk_sock *sock), false);
39144ba3a1SDaniel Verkamp 
40a587a107SShuhei Matsumoto DEFINE_STUB(iscsi_portal_grp_find_by_tag,
4169bef7f7SShuhei Matsumoto 	    struct spdk_iscsi_portal_grp *, (int tag), NULL);
42144ba3a1SDaniel Verkamp 
43df53885bSShuhei Matsumoto DEFINE_STUB(iscsi_init_grp_find_by_tag, struct spdk_iscsi_init_grp *,
4469bef7f7SShuhei Matsumoto 	    (int tag), NULL);
45a07416d8SShuhei Matsumoto 
46c70d03f3SNick Connolly DEFINE_STUB_V(iscsi_op_abort_task_set,
47c70d03f3SNick Connolly 	      (struct spdk_iscsi_task *task, uint8_t function));
48c70d03f3SNick Connolly 
49c70d03f3SNick Connolly DEFINE_STUB(iscsi_parse_redirect_addr,
50c70d03f3SNick Connolly 	    int,
51c70d03f3SNick Connolly 	    (struct sockaddr_storage *sa, const char *host, const char *port),
52c70d03f3SNick Connolly 	    0);
53c70d03f3SNick Connolly 
54c70d03f3SNick Connolly DEFINE_STUB(iscsi_portal_grp_find_portal_by_addr,
55c70d03f3SNick Connolly 	    struct spdk_iscsi_portal *,
56c70d03f3SNick Connolly 	    (struct spdk_iscsi_portal_grp *pg, const char *host, const char *port),
57c70d03f3SNick Connolly 	    NULL);
58c70d03f3SNick Connolly 
59144ba3a1SDaniel Verkamp struct spdk_scsi_lun *
spdk_scsi_dev_get_lun(struct spdk_scsi_dev * dev,int lun_id)60144ba3a1SDaniel Verkamp spdk_scsi_dev_get_lun(struct spdk_scsi_dev *dev, int lun_id)
61144ba3a1SDaniel Verkamp {
624265fc50SShuhei Matsumoto 	struct spdk_scsi_lun *lun;
634265fc50SShuhei Matsumoto 
644265fc50SShuhei Matsumoto 	TAILQ_FOREACH(lun, &dev->luns, tailq) {
654265fc50SShuhei Matsumoto 		if (lun->id == lun_id) {
664265fc50SShuhei Matsumoto 			break;
674265fc50SShuhei Matsumoto 		}
68144ba3a1SDaniel Verkamp 	}
69144ba3a1SDaniel Verkamp 
704265fc50SShuhei Matsumoto 	return lun;
71144ba3a1SDaniel Verkamp }
72144ba3a1SDaniel Verkamp 
733b3c6002SShuhei Matsumoto int
spdk_scsi_dev_add_lun(struct spdk_scsi_dev * dev,const char * bdev_name,int lun_id,void (* hotremove_cb)(const struct spdk_scsi_lun *,void *),void * hotremove_ctx)743b3c6002SShuhei Matsumoto spdk_scsi_dev_add_lun(struct spdk_scsi_dev *dev, const char *bdev_name, int lun_id,
753b3c6002SShuhei Matsumoto 		      void (*hotremove_cb)(const struct spdk_scsi_lun *, void *),
763b3c6002SShuhei Matsumoto 		      void *hotremove_ctx)
773b3c6002SShuhei Matsumoto {
783b3c6002SShuhei Matsumoto 	if (bdev_name == NULL) {
793b3c6002SShuhei Matsumoto 		return -1;
803b3c6002SShuhei Matsumoto 	} else {
813b3c6002SShuhei Matsumoto 		return 0;
823b3c6002SShuhei Matsumoto 	}
833b3c6002SShuhei Matsumoto }
843b3c6002SShuhei Matsumoto 
85594f46d7SShuhei Matsumoto DEFINE_STUB(spdk_scsi_dev_get_first_lun,
86594f46d7SShuhei Matsumoto 	    struct spdk_scsi_lun *,
87594f46d7SShuhei Matsumoto 	    (struct spdk_scsi_dev *dev),
88594f46d7SShuhei Matsumoto 	    NULL);
89594f46d7SShuhei Matsumoto 
90594f46d7SShuhei Matsumoto DEFINE_STUB(spdk_scsi_dev_get_next_lun,
91594f46d7SShuhei Matsumoto 	    struct spdk_scsi_lun *,
92594f46d7SShuhei Matsumoto 	    (struct spdk_scsi_lun *prev_lun),
93594f46d7SShuhei Matsumoto 	    NULL);
94594f46d7SShuhei Matsumoto 
953b3c6002SShuhei Matsumoto static void
add_lun_test_cases(void)963b3c6002SShuhei Matsumoto add_lun_test_cases(void)
973b3c6002SShuhei Matsumoto {
98d4914deeSShuhei Matsumoto 	struct spdk_iscsi_tgt_node tgtnode = {};
993b3c6002SShuhei Matsumoto 	int lun_id = 0;
1003b3c6002SShuhei Matsumoto 	char *bdev_name = NULL;
101d4914deeSShuhei Matsumoto 	struct spdk_scsi_dev scsi_dev = {};
1023b3c6002SShuhei Matsumoto 	int rc;
1033b3c6002SShuhei Matsumoto 
1043b3c6002SShuhei Matsumoto 	/* case 1 */
1053b3c6002SShuhei Matsumoto 	tgtnode.num_active_conns = 1;
1063b3c6002SShuhei Matsumoto 
1076a313725SShuhei Matsumoto 	rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
1083b3c6002SShuhei Matsumoto 	CU_ASSERT(rc != 0);
1093b3c6002SShuhei Matsumoto 
1103b3c6002SShuhei Matsumoto 	/* case 2 */
1113b3c6002SShuhei Matsumoto 	tgtnode.num_active_conns = 0;
1123b3c6002SShuhei Matsumoto 	lun_id = -2;
1133b3c6002SShuhei Matsumoto 
1146a313725SShuhei Matsumoto 	rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
1153b3c6002SShuhei Matsumoto 	CU_ASSERT(rc != 0);
1163b3c6002SShuhei Matsumoto 
1173b3c6002SShuhei Matsumoto 	/* case 3 */
1183b3c6002SShuhei Matsumoto 	lun_id = SPDK_SCSI_DEV_MAX_LUN;
1193b3c6002SShuhei Matsumoto 
1206a313725SShuhei Matsumoto 	rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
1213b3c6002SShuhei Matsumoto 	CU_ASSERT(rc != 0);
1223b3c6002SShuhei Matsumoto 
1233b3c6002SShuhei Matsumoto 	/* case 4 */
1243b3c6002SShuhei Matsumoto 	lun_id = -1;
1253b3c6002SShuhei Matsumoto 	tgtnode.dev = NULL;
1263b3c6002SShuhei Matsumoto 
1276a313725SShuhei Matsumoto 	rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
1283b3c6002SShuhei Matsumoto 	CU_ASSERT(rc != 0);
1293b3c6002SShuhei Matsumoto 
1303b3c6002SShuhei Matsumoto 	/* case 5 */
1313b3c6002SShuhei Matsumoto 	tgtnode.dev = &scsi_dev;
1323b3c6002SShuhei Matsumoto 
1336a313725SShuhei Matsumoto 	rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
1343b3c6002SShuhei Matsumoto 	CU_ASSERT(rc != 0);
1353b3c6002SShuhei Matsumoto 
1363b3c6002SShuhei Matsumoto 	/* case 6 */
1373b3c6002SShuhei Matsumoto 	bdev_name = "LUN0";
1383b3c6002SShuhei Matsumoto 
1396a313725SShuhei Matsumoto 	rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
1403b3c6002SShuhei Matsumoto 	CU_ASSERT(rc == 0);
1413b3c6002SShuhei Matsumoto }
1423b3c6002SShuhei Matsumoto 
143144ba3a1SDaniel Verkamp static void
allow_any_allowed(void)144f53462b4SShuhei Matsumoto allow_any_allowed(void)
145f53462b4SShuhei Matsumoto {
146f53462b4SShuhei Matsumoto 	bool result;
147f53462b4SShuhei Matsumoto 	char *netmask;
148f53462b4SShuhei Matsumoto 	char *addr1, *addr2;
149f53462b4SShuhei Matsumoto 
150f53462b4SShuhei Matsumoto 	netmask = "ANY";
151f53462b4SShuhei Matsumoto 	addr1 = "2001:ad6:1234:5678:9abc::";
152f53462b4SShuhei Matsumoto 	addr2 = "192.168.2.1";
153f53462b4SShuhei Matsumoto 
154893e02a5SShuhei Matsumoto 	result = iscsi_netmask_allow_addr(netmask, addr1);
155f53462b4SShuhei Matsumoto 	CU_ASSERT(result == true);
156f53462b4SShuhei Matsumoto 
157893e02a5SShuhei Matsumoto 	result = iscsi_netmask_allow_addr(netmask, addr2);
158f53462b4SShuhei Matsumoto 	CU_ASSERT(result == true);
159f53462b4SShuhei Matsumoto }
160f53462b4SShuhei Matsumoto 
161f53462b4SShuhei Matsumoto static void
allow_ipv6_allowed(void)162fed26671SShuhei Matsumoto allow_ipv6_allowed(void)
163fed26671SShuhei Matsumoto {
164f9bf9cddSShuhei Matsumoto 	bool result;
165fed26671SShuhei Matsumoto 	char *netmask;
166fed26671SShuhei Matsumoto 	char *addr;
167fed26671SShuhei Matsumoto 
168fed26671SShuhei Matsumoto 	netmask = "[2001:ad6:1234::]/48";
169fed26671SShuhei Matsumoto 	addr = "2001:ad6:1234:5678:9abc::";
170fed26671SShuhei Matsumoto 
171893e02a5SShuhei Matsumoto 	result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
172f9bf9cddSShuhei Matsumoto 	CU_ASSERT(result == true);
173fed26671SShuhei Matsumoto 
174893e02a5SShuhei Matsumoto 	result = iscsi_netmask_allow_addr(netmask, addr);
175f9bf9cddSShuhei Matsumoto 	CU_ASSERT(result == true);
17661c14937SDaniel Verkamp 
17761c14937SDaniel Verkamp 	/* Netmask prefix bits == 128 (all bits must match) */
17861c14937SDaniel Verkamp 	netmask = "[2001:ad6:1234:5678:9abc::1]/128";
17961c14937SDaniel Verkamp 	addr = "2001:ad6:1234:5678:9abc::1";
180893e02a5SShuhei Matsumoto 	result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
18161c14937SDaniel Verkamp 	CU_ASSERT(result == true);
182fed26671SShuhei Matsumoto }
183fed26671SShuhei Matsumoto 
184fed26671SShuhei Matsumoto static void
allow_ipv6_denied(void)185fed26671SShuhei Matsumoto allow_ipv6_denied(void)
186fed26671SShuhei Matsumoto {
187f9bf9cddSShuhei Matsumoto 	bool result;
188fed26671SShuhei Matsumoto 	char *netmask;
189fed26671SShuhei Matsumoto 	char *addr;
190fed26671SShuhei Matsumoto 
191fed26671SShuhei Matsumoto 	netmask = "[2001:ad6:1234::]/56";
192fed26671SShuhei Matsumoto 	addr = "2001:ad6:1234:5678:9abc::";
193fed26671SShuhei Matsumoto 
194893e02a5SShuhei Matsumoto 	result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
195f9bf9cddSShuhei Matsumoto 	CU_ASSERT(result == false);
196fed26671SShuhei Matsumoto 
197893e02a5SShuhei Matsumoto 	result = iscsi_netmask_allow_addr(netmask, addr);
198f9bf9cddSShuhei Matsumoto 	CU_ASSERT(result == false);
19961c14937SDaniel Verkamp 
20061c14937SDaniel Verkamp 	/* Netmask prefix bits == 128 (all bits must match) */
20161c14937SDaniel Verkamp 	netmask = "[2001:ad6:1234:5678:9abc::1]/128";
20261c14937SDaniel Verkamp 	addr = "2001:ad6:1234:5678:9abc::2";
203893e02a5SShuhei Matsumoto 	result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
20461c14937SDaniel Verkamp 	CU_ASSERT(result == false);
20561c14937SDaniel Verkamp }
20661c14937SDaniel Verkamp 
20761c14937SDaniel Verkamp static void
allow_ipv6_invalid(void)20861c14937SDaniel Verkamp allow_ipv6_invalid(void)
20961c14937SDaniel Verkamp {
21061c14937SDaniel Verkamp 	bool result;
21161c14937SDaniel Verkamp 	char *netmask;
21261c14937SDaniel Verkamp 	char *addr;
21361c14937SDaniel Verkamp 
21461c14937SDaniel Verkamp 	/* Netmask prefix bits > 128 */
21561c14937SDaniel Verkamp 	netmask = "[2001:ad6:1234::]/129";
21661c14937SDaniel Verkamp 	addr = "2001:ad6:1234:5678:9abc::";
217893e02a5SShuhei Matsumoto 	result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
21861c14937SDaniel Verkamp 	CU_ASSERT(result == false);
21961c14937SDaniel Verkamp 
22061c14937SDaniel Verkamp 	/* Netmask prefix bits == 0 */
22161c14937SDaniel Verkamp 	netmask = "[2001:ad6:1234::]/0";
22261c14937SDaniel Verkamp 	addr = "2001:ad6:1234:5678:9abc::";
223893e02a5SShuhei Matsumoto 	result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
22461c14937SDaniel Verkamp 	CU_ASSERT(result == false);
22561c14937SDaniel Verkamp 
22661c14937SDaniel Verkamp 	/* Netmask prefix bits < 0 */
22761c14937SDaniel Verkamp 	netmask = "[2001:ad6:1234::]/-1";
22861c14937SDaniel Verkamp 	addr = "2001:ad6:1234:5678:9abc::";
229893e02a5SShuhei Matsumoto 	result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
23061c14937SDaniel Verkamp 	CU_ASSERT(result == false);
231fed26671SShuhei Matsumoto }
232fed26671SShuhei Matsumoto 
233fed26671SShuhei Matsumoto static void
allow_ipv4_allowed(void)234fed26671SShuhei Matsumoto allow_ipv4_allowed(void)
235fed26671SShuhei Matsumoto {
236f9bf9cddSShuhei Matsumoto 	bool result;
237fed26671SShuhei Matsumoto 	char *netmask;
238fed26671SShuhei Matsumoto 	char *addr;
239fed26671SShuhei Matsumoto 
240fed26671SShuhei Matsumoto 	netmask = "192.168.2.0/24";
241fed26671SShuhei Matsumoto 	addr = "192.168.2.1";
242fed26671SShuhei Matsumoto 
243893e02a5SShuhei Matsumoto 	result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
244f9bf9cddSShuhei Matsumoto 	CU_ASSERT(result == true);
245fed26671SShuhei Matsumoto 
246893e02a5SShuhei Matsumoto 	result = iscsi_netmask_allow_addr(netmask, addr);
247f9bf9cddSShuhei Matsumoto 	CU_ASSERT(result == true);
24861c14937SDaniel Verkamp 
24961c14937SDaniel Verkamp 	/* Netmask prefix == 32 (all bits must match) */
25061c14937SDaniel Verkamp 	netmask = "192.168.2.1/32";
25161c14937SDaniel Verkamp 	addr = "192.168.2.1";
252893e02a5SShuhei Matsumoto 	result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
25361c14937SDaniel Verkamp 	CU_ASSERT(result == true);
254fed26671SShuhei Matsumoto }
255fed26671SShuhei Matsumoto 
256fed26671SShuhei Matsumoto static void
allow_ipv4_denied(void)257fed26671SShuhei Matsumoto allow_ipv4_denied(void)
258fed26671SShuhei Matsumoto {
259f9bf9cddSShuhei Matsumoto 	bool result;
260fed26671SShuhei Matsumoto 	char *netmask;
261fed26671SShuhei Matsumoto 	char *addr;
262fed26671SShuhei Matsumoto 
263fed26671SShuhei Matsumoto 	netmask = "192.168.2.0";
264fed26671SShuhei Matsumoto 	addr  = "192.168.2.1";
265fed26671SShuhei Matsumoto 
266893e02a5SShuhei Matsumoto 	result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
267f9bf9cddSShuhei Matsumoto 	CU_ASSERT(result == false);
268fed26671SShuhei Matsumoto 
269893e02a5SShuhei Matsumoto 	result = iscsi_netmask_allow_addr(netmask, addr);
270f9bf9cddSShuhei Matsumoto 	CU_ASSERT(result == false);
27161c14937SDaniel Verkamp 
27261c14937SDaniel Verkamp 	/* Netmask prefix == 32 (all bits must match) */
27361c14937SDaniel Verkamp 	netmask = "192.168.2.1/32";
27461c14937SDaniel Verkamp 	addr = "192.168.2.2";
275893e02a5SShuhei Matsumoto 	result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
27661c14937SDaniel Verkamp 	CU_ASSERT(result == false);
27761c14937SDaniel Verkamp }
27861c14937SDaniel Verkamp 
27961c14937SDaniel Verkamp static void
allow_ipv4_invalid(void)28061c14937SDaniel Verkamp allow_ipv4_invalid(void)
28161c14937SDaniel Verkamp {
28261c14937SDaniel Verkamp 	bool result;
28361c14937SDaniel Verkamp 	char *netmask;
28461c14937SDaniel Verkamp 	char *addr;
28561c14937SDaniel Verkamp 
28661c14937SDaniel Verkamp 	/* Netmask prefix bits > 32 */
28761c14937SDaniel Verkamp 	netmask = "192.168.2.0/33";
28861c14937SDaniel Verkamp 	addr = "192.168.2.1";
289893e02a5SShuhei Matsumoto 	result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
29061c14937SDaniel Verkamp 	CU_ASSERT(result == false);
29161c14937SDaniel Verkamp 
29261c14937SDaniel Verkamp 	/* Netmask prefix bits == 0 */
29361c14937SDaniel Verkamp 	netmask = "192.168.2.0/0";
29461c14937SDaniel Verkamp 	addr = "192.168.2.1";
295893e02a5SShuhei Matsumoto 	result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
29661c14937SDaniel Verkamp 	CU_ASSERT(result == false);
29761c14937SDaniel Verkamp 
29861c14937SDaniel Verkamp 	/* Netmask prefix bits < 0 */
29961c14937SDaniel Verkamp 	netmask = "192.168.2.0/-1";
30061c14937SDaniel Verkamp 	addr = "192.168.2.1";
301893e02a5SShuhei Matsumoto 	result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
30261c14937SDaniel Verkamp 	CU_ASSERT(result == false);
303fed26671SShuhei Matsumoto }
304fed26671SShuhei Matsumoto 
305fed26671SShuhei Matsumoto static void
node_access_allowed(void)306fed26671SShuhei Matsumoto node_access_allowed(void)
307fed26671SShuhei Matsumoto {
308d4914deeSShuhei Matsumoto 	struct spdk_iscsi_tgt_node tgtnode = {};
309d4914deeSShuhei Matsumoto 	struct spdk_iscsi_portal_grp pg = {};
310d4914deeSShuhei Matsumoto 	struct spdk_iscsi_init_grp ig = {};
311d4914deeSShuhei Matsumoto 	struct spdk_iscsi_conn conn = {};
312d4914deeSShuhei Matsumoto 	struct spdk_iscsi_portal portal = {};
313d4914deeSShuhei Matsumoto 	struct spdk_iscsi_initiator_name iname = {};
314d4914deeSShuhei Matsumoto 	struct spdk_iscsi_initiator_netmask imask = {};
315d4914deeSShuhei Matsumoto 	struct spdk_scsi_dev scsi_dev = {};
316c5e5047dSShuhei Matsumoto 	struct spdk_iscsi_pg_map *pg_map;
317fed26671SShuhei Matsumoto 	char *iqn, *addr;
318f9bf9cddSShuhei Matsumoto 	bool result;
319fed26671SShuhei Matsumoto 
320fed26671SShuhei Matsumoto 	/* portal group initialization */
321fed26671SShuhei Matsumoto 	pg.tag = 1;
322fed26671SShuhei Matsumoto 
323fed26671SShuhei Matsumoto 	/* initiator group initialization */
324fed26671SShuhei Matsumoto 	ig.tag = 1;
325fed26671SShuhei Matsumoto 
326fed26671SShuhei Matsumoto 	ig.ninitiators = 1;
3274a3ad837SShuhei Matsumoto 	snprintf(iname.name, sizeof(iname.name), "iqn.2017-10.spdk.io:0001");
328b8705bf4SShuhei Matsumoto 	TAILQ_INIT(&ig.initiator_head);
329b8705bf4SShuhei Matsumoto 	TAILQ_INSERT_TAIL(&ig.initiator_head, &iname, tailq);
330fed26671SShuhei Matsumoto 
331fed26671SShuhei Matsumoto 	ig.nnetmasks = 1;
332975e48aeSShuhei Matsumoto 	snprintf(imask.mask, sizeof(imask.mask), "192.168.2.0/24");
333b8705bf4SShuhei Matsumoto 	TAILQ_INIT(&ig.netmask_head);
334b8705bf4SShuhei Matsumoto 	TAILQ_INSERT_TAIL(&ig.netmask_head, &imask, tailq);
335fed26671SShuhei Matsumoto 
336fed26671SShuhei Matsumoto 	/* target initialization */
337d1961b5eSShuhei Matsumoto 	snprintf(tgtnode.name, sizeof(tgtnode.name), "iqn.2017-10.spdk.io:0001");
338c5e5047dSShuhei Matsumoto 	TAILQ_INIT(&tgtnode.pg_map_head);
33950ec7389SShuhei Matsumoto 
340931b7d1fSBen Walker 	snprintf(scsi_dev.name, sizeof(scsi_dev.name), "iqn.2017-10.spdk.io:0001");
34150ec7389SShuhei Matsumoto 	tgtnode.dev = &scsi_dev;
34250ec7389SShuhei Matsumoto 
343893e02a5SShuhei Matsumoto 	pg_map = iscsi_tgt_node_add_pg_map(&tgtnode, &pg);
344893e02a5SShuhei Matsumoto 	iscsi_pg_map_add_ig_map(pg_map, &ig);
345fed26671SShuhei Matsumoto 
346fed26671SShuhei Matsumoto 	/* portal initialization */
347fed26671SShuhei Matsumoto 	portal.group = &pg;
3488f64724eSShuhei Matsumoto 	snprintf(portal.host, sizeof(portal.host), "192.168.2.0");
349f341e69aSShuhei Matsumoto 	snprintf(portal.port, sizeof(portal.port), "3260");
350fed26671SShuhei Matsumoto 
351fed26671SShuhei Matsumoto 	/* input for UT */
352fed26671SShuhei Matsumoto 	conn.portal = &portal;
353fed26671SShuhei Matsumoto 
354fed26671SShuhei Matsumoto 	iqn = "iqn.2017-10.spdk.io:0001";
355fed26671SShuhei Matsumoto 	addr = "192.168.2.1";
356fed26671SShuhei Matsumoto 
3576a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
358f9bf9cddSShuhei Matsumoto 	CU_ASSERT(result == true);
359c5e5047dSShuhei Matsumoto 
360893e02a5SShuhei Matsumoto 	iscsi_pg_map_delete_ig_map(pg_map, &ig);
361893e02a5SShuhei Matsumoto 	iscsi_tgt_node_delete_pg_map(&tgtnode, &pg);
362fed26671SShuhei Matsumoto }
363fed26671SShuhei Matsumoto 
364fed26671SShuhei Matsumoto static void
node_access_denied_by_empty_netmask(void)365fed26671SShuhei Matsumoto node_access_denied_by_empty_netmask(void)
366fed26671SShuhei Matsumoto {
367d4914deeSShuhei Matsumoto 	struct spdk_iscsi_tgt_node tgtnode = {};
368d4914deeSShuhei Matsumoto 	struct spdk_iscsi_portal_grp pg = {};
369d4914deeSShuhei Matsumoto 	struct spdk_iscsi_init_grp ig = {};
370d4914deeSShuhei Matsumoto 	struct spdk_iscsi_conn conn = {};
371d4914deeSShuhei Matsumoto 	struct spdk_iscsi_portal portal = {};
372d4914deeSShuhei Matsumoto 	struct spdk_iscsi_initiator_name iname = {};
373d4914deeSShuhei Matsumoto 	struct spdk_scsi_dev scsi_dev = {};
374c5e5047dSShuhei Matsumoto 	struct spdk_iscsi_pg_map *pg_map;
375fed26671SShuhei Matsumoto 	char *iqn, *addr;
376f9bf9cddSShuhei Matsumoto 	bool result;
377fed26671SShuhei Matsumoto 
378fed26671SShuhei Matsumoto 	/* portal group initialization */
379fed26671SShuhei Matsumoto 	pg.tag = 1;
380fed26671SShuhei Matsumoto 
381fed26671SShuhei Matsumoto 	/* initiator group initialization */
382fed26671SShuhei Matsumoto 	ig.tag = 1;
383fed26671SShuhei Matsumoto 
384fed26671SShuhei Matsumoto 	ig.ninitiators = 1;
3854a3ad837SShuhei Matsumoto 	snprintf(iname.name, sizeof(iname.name), "iqn.2017-10.spdk.io:0001");
386b8705bf4SShuhei Matsumoto 	TAILQ_INIT(&ig.initiator_head);
387b8705bf4SShuhei Matsumoto 	TAILQ_INSERT_TAIL(&ig.initiator_head, &iname, tailq);
388fed26671SShuhei Matsumoto 
389fed26671SShuhei Matsumoto 	ig.nnetmasks = 0;
390b8705bf4SShuhei Matsumoto 	TAILQ_INIT(&ig.netmask_head);
391fed26671SShuhei Matsumoto 
392fed26671SShuhei Matsumoto 	/* target initialization */
393d1961b5eSShuhei Matsumoto 	snprintf(tgtnode.name, sizeof(tgtnode.name), "iqn.2017-10.spdk.io:0001");
394c5e5047dSShuhei Matsumoto 	TAILQ_INIT(&tgtnode.pg_map_head);
39550ec7389SShuhei Matsumoto 
396931b7d1fSBen Walker 	snprintf(scsi_dev.name, sizeof(scsi_dev.name), "iqn.2017-10.spdk.io:0001");
39750ec7389SShuhei Matsumoto 	tgtnode.dev = &scsi_dev;
39850ec7389SShuhei Matsumoto 
399893e02a5SShuhei Matsumoto 	pg_map = iscsi_tgt_node_add_pg_map(&tgtnode, &pg);
400893e02a5SShuhei Matsumoto 	iscsi_pg_map_add_ig_map(pg_map, &ig);
401fed26671SShuhei Matsumoto 
402fed26671SShuhei Matsumoto 	/* portal initialization */
403fed26671SShuhei Matsumoto 	portal.group = &pg;
4048f64724eSShuhei Matsumoto 	snprintf(portal.host, sizeof(portal.host), "192.168.2.0");
405f341e69aSShuhei Matsumoto 	snprintf(portal.port, sizeof(portal.port), "3260");
406fed26671SShuhei Matsumoto 
407fed26671SShuhei Matsumoto 	/* input for UT */
408fed26671SShuhei Matsumoto 	conn.portal = &portal;
409fed26671SShuhei Matsumoto 
410fed26671SShuhei Matsumoto 	iqn = "iqn.2017-10.spdk.io:0001";
411fed26671SShuhei Matsumoto 	addr = "192.168.3.1";
412fed26671SShuhei Matsumoto 
4136a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
414f9bf9cddSShuhei Matsumoto 	CU_ASSERT(result == false);
415fed26671SShuhei Matsumoto 
416893e02a5SShuhei Matsumoto 	iscsi_pg_map_delete_ig_map(pg_map, &ig);
417893e02a5SShuhei Matsumoto 	iscsi_tgt_node_delete_pg_map(&tgtnode, &pg);
418fed26671SShuhei Matsumoto }
419fed26671SShuhei Matsumoto 
420c2f38258SShuhei Matsumoto #define IQN1	"iqn.2017-11.spdk.io:0001"
421c2f38258SShuhei Matsumoto #define NO_IQN1	"!iqn.2017-11.spdk.io:0001"
422c2f38258SShuhei Matsumoto #define IQN2	"iqn.2017-11.spdk.io:0002"
423c2f38258SShuhei Matsumoto #define IP1	"192.168.2.0"
424c2f38258SShuhei Matsumoto #define	IP2	"192.168.2.1"
425c2f38258SShuhei Matsumoto 
426c2f38258SShuhei Matsumoto static void
node_access_multi_initiator_groups_cases(void)427c2f38258SShuhei Matsumoto node_access_multi_initiator_groups_cases(void)
428c2f38258SShuhei Matsumoto {
429d4914deeSShuhei Matsumoto 	struct spdk_iscsi_tgt_node tgtnode = {};
430d4914deeSShuhei Matsumoto 	struct spdk_iscsi_conn conn = {};
431d4914deeSShuhei Matsumoto 	struct spdk_iscsi_portal_grp pg = {};
432d4914deeSShuhei Matsumoto 	struct spdk_iscsi_portal portal = {};
433d4914deeSShuhei Matsumoto 	struct spdk_iscsi_init_grp ig1 = {}, ig2 = {};
4344a3ad837SShuhei Matsumoto 	struct spdk_iscsi_initiator_name iname1 = {}, iname2 = {};
435975e48aeSShuhei Matsumoto 	struct spdk_iscsi_initiator_netmask imask1 = {}, imask2 = {};
436d4914deeSShuhei Matsumoto 	struct spdk_scsi_dev scsi_dev = {};
437c5e5047dSShuhei Matsumoto 	struct spdk_iscsi_pg_map *pg_map;
438c2f38258SShuhei Matsumoto 	char *iqn, *addr;
439c2f38258SShuhei Matsumoto 	bool result;
440c2f38258SShuhei Matsumoto 
441c2f38258SShuhei Matsumoto 	/* target initialization */
442d1961b5eSShuhei Matsumoto 	snprintf(tgtnode.name, sizeof(tgtnode.name), IQN1);
443c5e5047dSShuhei Matsumoto 	TAILQ_INIT(&tgtnode.pg_map_head);
44450ec7389SShuhei Matsumoto 
445931b7d1fSBen Walker 	snprintf(scsi_dev.name, sizeof(scsi_dev.name), IQN1);
44650ec7389SShuhei Matsumoto 	tgtnode.dev = &scsi_dev;
44750ec7389SShuhei Matsumoto 
448c2f38258SShuhei Matsumoto 	/* initiator group initialization */
449c2f38258SShuhei Matsumoto 	ig1.tag = 1;
450c2f38258SShuhei Matsumoto 	TAILQ_INIT(&ig1.initiator_head);
451c2f38258SShuhei Matsumoto 	TAILQ_INIT(&ig1.netmask_head);
452c2f38258SShuhei Matsumoto 
453c2f38258SShuhei Matsumoto 	ig1.ninitiators = 1;
454c2f38258SShuhei Matsumoto 	TAILQ_INSERT_TAIL(&ig1.initiator_head, &iname1, tailq);
455c2f38258SShuhei Matsumoto 
456c2f38258SShuhei Matsumoto 	ig1.nnetmasks = 1;
457c2f38258SShuhei Matsumoto 	TAILQ_INSERT_TAIL(&ig1.netmask_head, &imask1, tailq);
458c2f38258SShuhei Matsumoto 
459c2f38258SShuhei Matsumoto 	ig2.tag = 2;
460c2f38258SShuhei Matsumoto 	TAILQ_INIT(&ig2.initiator_head);
461c2f38258SShuhei Matsumoto 	TAILQ_INIT(&ig2.netmask_head);
462c2f38258SShuhei Matsumoto 
463c2f38258SShuhei Matsumoto 	ig2.ninitiators = 1;
464c2f38258SShuhei Matsumoto 	TAILQ_INSERT_TAIL(&ig2.initiator_head, &iname2, tailq);
465c2f38258SShuhei Matsumoto 
466c2f38258SShuhei Matsumoto 	ig2.nnetmasks = 1;
467c2f38258SShuhei Matsumoto 	TAILQ_INSERT_TAIL(&ig2.netmask_head, &imask2, tailq);
468c2f38258SShuhei Matsumoto 
469a652471cSShuhei Matsumoto 	/* portal group initialization */
470a652471cSShuhei Matsumoto 	pg.tag = 1;
471a652471cSShuhei Matsumoto 
472893e02a5SShuhei Matsumoto 	pg_map = iscsi_tgt_node_add_pg_map(&tgtnode, &pg);
473893e02a5SShuhei Matsumoto 	iscsi_pg_map_add_ig_map(pg_map, &ig1);
474893e02a5SShuhei Matsumoto 	iscsi_pg_map_add_ig_map(pg_map, &ig2);
475a652471cSShuhei Matsumoto 
476a652471cSShuhei Matsumoto 	/* portal initialization */
477a652471cSShuhei Matsumoto 	portal.group = &pg;
4788f64724eSShuhei Matsumoto 	snprintf(portal.host, sizeof(portal.host), IP1);
479f341e69aSShuhei Matsumoto 	snprintf(portal.port, sizeof(portal.port), "3260");
480a652471cSShuhei Matsumoto 
481a652471cSShuhei Matsumoto 	/* connection initialization */
482a652471cSShuhei Matsumoto 	conn.portal = &portal;
483a652471cSShuhei Matsumoto 
484c2f38258SShuhei Matsumoto 	iqn = IQN1;
485c2f38258SShuhei Matsumoto 	addr = IP1;
486c2f38258SShuhei Matsumoto 
487c2f38258SShuhei Matsumoto 	/*
488c2f38258SShuhei Matsumoto 	 * case 1:
489c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
490c2f38258SShuhei Matsumoto 	 * | IG1                 | IG2                 |         |
491c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+         |
492c2f38258SShuhei Matsumoto 	 * | name      | addr    | name      | addr    | result  |
493c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
494c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
495c2f38258SShuhei Matsumoto 	 * | denied    | -       | -         | -       | denied  |
496c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
497c2f38258SShuhei Matsumoto 	 */
4984a3ad837SShuhei Matsumoto 	snprintf(iname1.name, sizeof(iname1.name), NO_IQN1);
499c2f38258SShuhei Matsumoto 
5006a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
501c2f38258SShuhei Matsumoto 	CU_ASSERT(result == false);
502c2f38258SShuhei Matsumoto 
503c2f38258SShuhei Matsumoto 	/*
504c2f38258SShuhei Matsumoto 	 * case 2:
505c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
506c2f38258SShuhei Matsumoto 	 * | IG1                 | IG2                 |         |
507c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+         |
508c2f38258SShuhei Matsumoto 	 * | name      | addr    | name      | addr    | result  |
509c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
510c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
511c2f38258SShuhei Matsumoto 	 * | allowed   | allowed | -         | -       | allowed |
512c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
513c2f38258SShuhei Matsumoto 	 */
5144a3ad837SShuhei Matsumoto 	snprintf(iname1.name, sizeof(iname1.name), IQN1);
515975e48aeSShuhei Matsumoto 	snprintf(imask1.mask, sizeof(imask1.mask), IP1);
516c2f38258SShuhei Matsumoto 
5176a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
518c2f38258SShuhei Matsumoto 	CU_ASSERT(result == true);
519c2f38258SShuhei Matsumoto 
520c2f38258SShuhei Matsumoto 	/*
521c2f38258SShuhei Matsumoto 	 * case 3:
522c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
523c2f38258SShuhei Matsumoto 	 * | IG1                 | IG2                 |         |
524c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+         |
525c2f38258SShuhei Matsumoto 	 * | name      | addr    | name     | addr     | result  |
526c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
527c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
528c2f38258SShuhei Matsumoto 	 * | allowed   | denied  | denied   | -        | denied  |
529c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
530c2f38258SShuhei Matsumoto 	 */
5314a3ad837SShuhei Matsumoto 	snprintf(iname1.name, sizeof(iname1.name), IQN1);
532975e48aeSShuhei Matsumoto 	snprintf(imask1.mask, sizeof(imask1.mask), IP2);
5334a3ad837SShuhei Matsumoto 	snprintf(iname2.name, sizeof(iname2.name), NO_IQN1);
534c2f38258SShuhei Matsumoto 
5356a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
536c2f38258SShuhei Matsumoto 	CU_ASSERT(result == false);
537c2f38258SShuhei Matsumoto 
538c2f38258SShuhei Matsumoto 	/*
539c2f38258SShuhei Matsumoto 	 * case 4:
540c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
541c2f38258SShuhei Matsumoto 	 * | IG1                 | IG2                 |         |
542c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+         |
543c2f38258SShuhei Matsumoto 	 * | name      | addr    | name      | addr    | result  |
544c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
545c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
546c2f38258SShuhei Matsumoto 	 * | allowed   | denied  | allowed   | allowed | allowed |
547c2f38258SShuhei Matsumoto 	 * +-------------------------------------------+---------+
548c2f38258SShuhei Matsumoto 	 */
5494a3ad837SShuhei Matsumoto 	snprintf(iname1.name, sizeof(iname1.name), IQN1);
550975e48aeSShuhei Matsumoto 	snprintf(imask1.mask, sizeof(imask1.mask), IP2);
5514a3ad837SShuhei Matsumoto 	snprintf(iname2.name, sizeof(iname2.name), IQN1);
552975e48aeSShuhei Matsumoto 	snprintf(imask2.mask, sizeof(imask2.mask), IP1);
553c2f38258SShuhei Matsumoto 
5546a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
555c2f38258SShuhei Matsumoto 	CU_ASSERT(result == true);
556c2f38258SShuhei Matsumoto 
557c2f38258SShuhei Matsumoto 	/*
558c2f38258SShuhei Matsumoto 	 * case 5:
559c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
560c2f38258SShuhei Matsumoto 	 * | IG1                 | IG2                   |         |
561c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+         |
562c2f38258SShuhei Matsumoto 	 * | name      | addr    | name        | addr    | result  |
563c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
564c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
565c2f38258SShuhei Matsumoto 	 * | allowed   | denied  | allowed     | denied  | denied  |
566c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
567c2f38258SShuhei Matsumoto 	 */
5684a3ad837SShuhei Matsumoto 	snprintf(iname1.name, sizeof(iname1.name), IQN1);
569975e48aeSShuhei Matsumoto 	snprintf(imask1.mask, sizeof(imask1.mask), IP2);
5704a3ad837SShuhei Matsumoto 	snprintf(iname2.name, sizeof(iname2.name), IQN1);
571975e48aeSShuhei Matsumoto 	snprintf(imask2.mask, sizeof(imask2.mask), IP2);
572c2f38258SShuhei Matsumoto 
5736a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
574c2f38258SShuhei Matsumoto 	CU_ASSERT(result == false);
575c2f38258SShuhei Matsumoto 
576c2f38258SShuhei Matsumoto 	/*
577c2f38258SShuhei Matsumoto 	 * case 6:
578c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
579c2f38258SShuhei Matsumoto 	 * | IG1                 | IG2                   |         |
580c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+         |
581c2f38258SShuhei Matsumoto 	 * | name      | addr    | name        | addr    | result  |
582c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
583c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
584c2f38258SShuhei Matsumoto 	 * | allowed   | denied  | not found   | -       | denied  |
585c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
586c2f38258SShuhei Matsumoto 	 */
5874a3ad837SShuhei Matsumoto 	snprintf(iname1.name, sizeof(iname1.name), IQN1);
588975e48aeSShuhei Matsumoto 	snprintf(imask1.mask, sizeof(imask1.mask), IP2);
5894a3ad837SShuhei Matsumoto 	snprintf(iname2.name, sizeof(iname2.name), IQN2);
590c2f38258SShuhei Matsumoto 
5916a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
592c2f38258SShuhei Matsumoto 	CU_ASSERT(result == false);
593c2f38258SShuhei Matsumoto 
594c2f38258SShuhei Matsumoto 	/*
595c2f38258SShuhei Matsumoto 	 * case 7:
596c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
597c2f38258SShuhei Matsumoto 	 * | IG1                   | IG2                 |         |
598c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+         |
599c2f38258SShuhei Matsumoto 	 * | name        | addr    | name      | addr    | result  |
600c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
601c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
602c2f38258SShuhei Matsumoto 	 * | not found   | -       | denied    | -       | denied  |
603c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
604c2f38258SShuhei Matsumoto 	 */
6054a3ad837SShuhei Matsumoto 	snprintf(iname1.name, sizeof(iname1.name), IQN2);
6064a3ad837SShuhei Matsumoto 	snprintf(iname2.name, sizeof(iname2.name), NO_IQN1);
607c2f38258SShuhei Matsumoto 
6086a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
609c2f38258SShuhei Matsumoto 	CU_ASSERT(result == false);
610c2f38258SShuhei Matsumoto 
611c2f38258SShuhei Matsumoto 	/*
612c2f38258SShuhei Matsumoto 	 * case 8:
613c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
614c2f38258SShuhei Matsumoto 	 * | IG1                   | IG2                 |         |
615c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+         |
616c2f38258SShuhei Matsumoto 	 * | name        | addr    | name      | addr    | result  |
617c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
618c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
619c2f38258SShuhei Matsumoto 	 * | not found   | -       | allowed   | allowed | allowed |
620c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
621c2f38258SShuhei Matsumoto 	 */
6224a3ad837SShuhei Matsumoto 	snprintf(iname1.name, sizeof(iname1.name), IQN2);
6234a3ad837SShuhei Matsumoto 	snprintf(iname2.name, sizeof(iname2.name), IQN1);
624975e48aeSShuhei Matsumoto 	snprintf(imask2.mask, sizeof(imask2.mask), IP1);
625c2f38258SShuhei Matsumoto 
6266a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
627c2f38258SShuhei Matsumoto 	CU_ASSERT(result == true);
628c2f38258SShuhei Matsumoto 
629c2f38258SShuhei Matsumoto 	/*
630c2f38258SShuhei Matsumoto 	 * case 9:
631c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
632c2f38258SShuhei Matsumoto 	 * | IG1                   | IG2                 |         |
633c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+         |
634c2f38258SShuhei Matsumoto 	 * | name        | addr    | name      | addr    | result  |
635c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
636c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
637c2f38258SShuhei Matsumoto 	 * | not found   | -       | allowed   | denied  | denied  |
638c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
639c2f38258SShuhei Matsumoto 	 */
6404a3ad837SShuhei Matsumoto 	snprintf(iname1.name, sizeof(iname1.name), IQN2);
6414a3ad837SShuhei Matsumoto 	snprintf(iname2.name, sizeof(iname2.name), IQN1);
642975e48aeSShuhei Matsumoto 	snprintf(imask2.mask, sizeof(imask2.mask), IP2);
643c2f38258SShuhei Matsumoto 
6446a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
645c2f38258SShuhei Matsumoto 	CU_ASSERT(result == false);
646c2f38258SShuhei Matsumoto 
647c2f38258SShuhei Matsumoto 	/*
648c2f38258SShuhei Matsumoto 	 * case 10:
649c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
650c2f38258SShuhei Matsumoto 	 * | IG1                   | IG2                 |         |
651c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+         |
652c2f38258SShuhei Matsumoto 	 * | name        | addr    | name      | addr    | result  |
653c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
654c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
655c2f38258SShuhei Matsumoto 	 * | not found   | -       | not found | -       | denied  |
656c2f38258SShuhei Matsumoto 	 * +---------------------------------------------+---------+
657c2f38258SShuhei Matsumoto 	 */
6584a3ad837SShuhei Matsumoto 	snprintf(iname1.name, sizeof(iname1.name), IQN2);
6594a3ad837SShuhei Matsumoto 	snprintf(iname2.name, sizeof(iname2.name), IQN2);
660c2f38258SShuhei Matsumoto 
6616a313725SShuhei Matsumoto 	result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
662c2f38258SShuhei Matsumoto 	CU_ASSERT(result == false);
663c5e5047dSShuhei Matsumoto 
664893e02a5SShuhei Matsumoto 	iscsi_pg_map_delete_ig_map(pg_map, &ig1);
665893e02a5SShuhei Matsumoto 	iscsi_pg_map_delete_ig_map(pg_map, &ig2);
666893e02a5SShuhei Matsumoto 	iscsi_tgt_node_delete_pg_map(&tgtnode, &pg);
667c2f38258SShuhei Matsumoto }
668c2f38258SShuhei Matsumoto 
669c2f38258SShuhei Matsumoto static void
allow_iscsi_name_multi_maps_case(void)670c2f38258SShuhei Matsumoto allow_iscsi_name_multi_maps_case(void)
671c2f38258SShuhei Matsumoto {
672d4914deeSShuhei Matsumoto 	struct spdk_iscsi_tgt_node tgtnode = {};
673d4914deeSShuhei Matsumoto 	struct spdk_iscsi_portal_grp pg1 = {}, pg2 = {};
674d4914deeSShuhei Matsumoto 	struct spdk_iscsi_init_grp ig = {};
6754a3ad837SShuhei Matsumoto 	struct spdk_iscsi_initiator_name iname = {};
676c5e5047dSShuhei Matsumoto 	struct spdk_iscsi_pg_map *pg_map1, *pg_map2;
677d4914deeSShuhei Matsumoto 	struct spdk_scsi_dev scsi_dev = {};
678c2f38258SShuhei Matsumoto 	char *iqn;
679c2f38258SShuhei Matsumoto 	bool result;
680c2f38258SShuhei Matsumoto 
681c2f38258SShuhei Matsumoto 	/* target initialization */
682c5e5047dSShuhei Matsumoto 	TAILQ_INIT(&tgtnode.pg_map_head);
68350ec7389SShuhei Matsumoto 
684931b7d1fSBen Walker 	snprintf(scsi_dev.name, sizeof(scsi_dev.name), IQN1);
68550ec7389SShuhei Matsumoto 	tgtnode.dev = &scsi_dev;
68650ec7389SShuhei Matsumoto 
687a652471cSShuhei Matsumoto 	/* initiator group initialization */
688a652471cSShuhei Matsumoto 	TAILQ_INIT(&ig.initiator_head);
689a652471cSShuhei Matsumoto 
690a652471cSShuhei Matsumoto 	ig.ninitiators = 1;
691a652471cSShuhei Matsumoto 	TAILQ_INSERT_TAIL(&ig.initiator_head, &iname, tailq);
692a652471cSShuhei Matsumoto 
693759e5934SJim Harris 	/* portal group initialization */
694759e5934SJim Harris 	pg1.tag = 1;
695759e5934SJim Harris 	pg2.tag = 1;
696759e5934SJim Harris 
697893e02a5SShuhei Matsumoto 	pg_map1 = iscsi_tgt_node_add_pg_map(&tgtnode, &pg1);
698893e02a5SShuhei Matsumoto 	pg_map2 = iscsi_tgt_node_add_pg_map(&tgtnode, &pg2);
699893e02a5SShuhei Matsumoto 	iscsi_pg_map_add_ig_map(pg_map1, &ig);
700893e02a5SShuhei Matsumoto 	iscsi_pg_map_add_ig_map(pg_map2, &ig);
701c2f38258SShuhei Matsumoto 
702c2f38258SShuhei Matsumoto 	/* test for IG1 <-> PG1, PG2 case */
703c2f38258SShuhei Matsumoto 	iqn = IQN1;
704c2f38258SShuhei Matsumoto 
7054a3ad837SShuhei Matsumoto 	snprintf(iname.name, sizeof(iname.name), IQN1);
706c2f38258SShuhei Matsumoto 
707893e02a5SShuhei Matsumoto 	result = iscsi_tgt_node_allow_iscsi_name(&tgtnode, iqn);
708c2f38258SShuhei Matsumoto 	CU_ASSERT(result == true);
709c2f38258SShuhei Matsumoto 
7104a3ad837SShuhei Matsumoto 	snprintf(iname.name, sizeof(iname.name), IQN2);
711c2f38258SShuhei Matsumoto 
712893e02a5SShuhei Matsumoto 	result = iscsi_tgt_node_allow_iscsi_name(&tgtnode, iqn);
713c2f38258SShuhei Matsumoto 	CU_ASSERT(result == false);
714c2f38258SShuhei Matsumoto 
715893e02a5SShuhei Matsumoto 	iscsi_pg_map_delete_ig_map(pg_map1, &ig);
716893e02a5SShuhei Matsumoto 	iscsi_pg_map_delete_ig_map(pg_map2, &ig);
717893e02a5SShuhei Matsumoto 	iscsi_tgt_node_delete_pg_map(&tgtnode, &pg1);
718893e02a5SShuhei Matsumoto 	iscsi_tgt_node_delete_pg_map(&tgtnode, &pg2);
719c5e5047dSShuhei Matsumoto }
720c2f38258SShuhei Matsumoto 
721de70d712SShuhei Matsumoto /*
722de70d712SShuhei Matsumoto  * static bool
7236a313725SShuhei Matsumoto  * iscsi_check_chap_params(bool disable_chap, bool require_chap,
724afe51a15SShuhei Matsumoto  *                              bool mutual_chap, int chap_group);
725de70d712SShuhei Matsumoto  */
726de70d712SShuhei Matsumoto static void
chap_param_test_cases(void)727de70d712SShuhei Matsumoto chap_param_test_cases(void)
728de70d712SShuhei Matsumoto {
729de70d712SShuhei Matsumoto 	/* Auto */
7306a313725SShuhei Matsumoto 	CU_ASSERT(iscsi_check_chap_params(false, false, false, 0) == true);
731de70d712SShuhei Matsumoto 
732de70d712SShuhei Matsumoto 	/* None */
7336a313725SShuhei Matsumoto 	CU_ASSERT(iscsi_check_chap_params(true, false, false, 0) == true);
734de70d712SShuhei Matsumoto 
735de70d712SShuhei Matsumoto 	/* CHAP */
7366a313725SShuhei Matsumoto 	CU_ASSERT(iscsi_check_chap_params(false, true, false, 0) == true);
737de70d712SShuhei Matsumoto 
738de70d712SShuhei Matsumoto 	/* CHAP Mutual */
7396a313725SShuhei Matsumoto 	CU_ASSERT(iscsi_check_chap_params(false, true, true, 0) == true);
740de70d712SShuhei Matsumoto 
741de70d712SShuhei Matsumoto 	/* Check mutual exclusiveness of disabled and required */
7426a313725SShuhei Matsumoto 	CU_ASSERT(iscsi_check_chap_params(true, true, false, 0) == false);
743de70d712SShuhei Matsumoto 
744de70d712SShuhei Matsumoto 	/* Mutual requires Required */
7456a313725SShuhei Matsumoto 	CU_ASSERT(iscsi_check_chap_params(false, false, true, 0) == false);
746de70d712SShuhei Matsumoto 
747de70d712SShuhei Matsumoto 	/* Remaining combinations */
7486a313725SShuhei Matsumoto 	CU_ASSERT(iscsi_check_chap_params(true, false, true, 0) == false);
7496a313725SShuhei Matsumoto 	CU_ASSERT(iscsi_check_chap_params(true, true, true, 0) == false);
750de70d712SShuhei Matsumoto 
751de70d712SShuhei Matsumoto 	/* Valid auth group ID */
7526a313725SShuhei Matsumoto 	CU_ASSERT(iscsi_check_chap_params(false, false, false, 1) == true);
753de70d712SShuhei Matsumoto 
754de70d712SShuhei Matsumoto 	/* Invalid auth group ID */
7556a313725SShuhei Matsumoto 	CU_ASSERT(iscsi_check_chap_params(false, false, false, -1) == false);
756de70d712SShuhei Matsumoto }
757de70d712SShuhei Matsumoto 
758144ba3a1SDaniel Verkamp int
main(int argc,char ** argv)759144ba3a1SDaniel Verkamp main(int argc, char **argv)
760144ba3a1SDaniel Verkamp {
761144ba3a1SDaniel Verkamp 	CU_pSuite	suite = NULL;
762144ba3a1SDaniel Verkamp 	unsigned int	num_failures;
763144ba3a1SDaniel Verkamp 
76478b696bcSVitaliy Mysak 	CU_initialize_registry();
765144ba3a1SDaniel Verkamp 
766144ba3a1SDaniel Verkamp 	suite = CU_add_suite("iscsi_target_node_suite", NULL, NULL);
767144ba3a1SDaniel Verkamp 
768dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, add_lun_test_cases);
769dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, allow_any_allowed);
770dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, allow_ipv6_allowed);
771dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, allow_ipv6_denied);
772dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, allow_ipv6_invalid);
773dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, allow_ipv4_allowed);
774dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, allow_ipv4_denied);
775dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, allow_ipv4_invalid);
776dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, node_access_allowed);
777dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, node_access_denied_by_empty_netmask);
778dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, node_access_multi_initiator_groups_cases);
779dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, allow_iscsi_name_multi_maps_case);
780dcf0ca15SVitaliy Mysak 	CU_ADD_TEST(suite, chap_param_test_cases);
781144ba3a1SDaniel Verkamp 
782*ea941caeSKonrad Sztyber 	num_failures = spdk_ut_run_tests(argc, argv, NULL);
783144ba3a1SDaniel Verkamp 	CU_cleanup_registry();
784144ba3a1SDaniel Verkamp 	return num_failures;
785144ba3a1SDaniel Verkamp }
786