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