2022-06-03 19:15:11 +00:00
|
|
|
/* SPDX-License-Identifier: BSD-3-Clause
|
2022-11-01 20:26:26 +00:00
|
|
|
* Copyright (C) 2016 Intel Corporation.
|
2016-08-16 22:23:35 +00:00
|
|
|
* All rights reserved.
|
|
|
|
*/
|
|
|
|
|
2017-05-02 18:18:25 +00:00
|
|
|
#include "spdk/stdinc.h"
|
2016-08-16 22:23:35 +00:00
|
|
|
|
|
|
|
#include "spdk/scsi.h"
|
|
|
|
|
|
|
|
#include "CUnit/Basic.h"
|
2017-12-11 23:22:26 +00:00
|
|
|
#include "spdk_internal/mock.h"
|
2016-08-16 22:23:35 +00:00
|
|
|
|
|
|
|
#include "../common.c"
|
|
|
|
#include "iscsi/tgt_node.c"
|
2017-05-02 17:56:08 +00:00
|
|
|
#include "scsi/scsi_internal.h"
|
2018-05-04 07:20:02 +00:00
|
|
|
#include "unit/lib/json_mock.c"
|
2019-04-12 04:38:42 +00:00
|
|
|
#include "common/lib/test_env.c"
|
2016-08-16 22:23:35 +00:00
|
|
|
|
2020-04-13 21:05:20 +00:00
|
|
|
struct spdk_iscsi_globals g_iscsi;
|
2017-01-19 17:16:31 +00:00
|
|
|
|
2017-12-11 23:22:26 +00:00
|
|
|
DEFINE_STUB(spdk_scsi_dev_get_id,
|
|
|
|
int,
|
|
|
|
(const struct spdk_scsi_dev *dev),
|
|
|
|
0);
|
|
|
|
|
2018-01-10 05:55:53 +00:00
|
|
|
DEFINE_STUB(spdk_scsi_lun_get_bdev_name,
|
2017-12-11 23:22:26 +00:00
|
|
|
const char *,
|
|
|
|
(const struct spdk_scsi_lun *lun),
|
|
|
|
NULL);
|
|
|
|
|
|
|
|
DEFINE_STUB(spdk_scsi_lun_get_id,
|
|
|
|
int,
|
|
|
|
(const struct spdk_scsi_lun *lun),
|
|
|
|
0);
|
|
|
|
|
2018-12-09 23:19:26 +00:00
|
|
|
DEFINE_STUB_V(spdk_iscsi_op_abort_task_set,
|
|
|
|
(struct spdk_iscsi_task *task,
|
|
|
|
uint8_t function));
|
|
|
|
|
2018-12-10 00:58:26 +00:00
|
|
|
DEFINE_STUB(spdk_sock_is_ipv6, bool, (struct spdk_sock *sock), false);
|
2016-08-16 22:23:35 +00:00
|
|
|
|
2018-12-10 00:58:26 +00:00
|
|
|
DEFINE_STUB(spdk_sock_is_ipv4, bool, (struct spdk_sock *sock), false);
|
2016-08-16 22:23:35 +00:00
|
|
|
|
2020-04-15 21:54:21 +00:00
|
|
|
DEFINE_STUB(iscsi_portal_grp_find_by_tag,
|
2018-12-10 00:58:26 +00:00
|
|
|
struct spdk_iscsi_portal_grp *, (int tag), NULL);
|
2016-08-16 22:23:35 +00:00
|
|
|
|
2020-04-15 21:39:41 +00:00
|
|
|
DEFINE_STUB(iscsi_init_grp_find_by_tag, struct spdk_iscsi_init_grp *,
|
2018-12-10 00:58:26 +00:00
|
|
|
(int tag), NULL);
|
2017-10-10 01:08:42 +00:00
|
|
|
|
2020-11-11 14:26:58 +00:00
|
|
|
DEFINE_STUB_V(iscsi_op_abort_task_set,
|
|
|
|
(struct spdk_iscsi_task *task, uint8_t function));
|
|
|
|
|
|
|
|
DEFINE_STUB(iscsi_parse_redirect_addr,
|
|
|
|
int,
|
|
|
|
(struct sockaddr_storage *sa, const char *host, const char *port),
|
|
|
|
0);
|
|
|
|
|
|
|
|
DEFINE_STUB(iscsi_portal_grp_find_portal_by_addr,
|
|
|
|
struct spdk_iscsi_portal *,
|
|
|
|
(struct spdk_iscsi_portal_grp *pg, const char *host, const char *port),
|
|
|
|
NULL);
|
|
|
|
|
2017-05-02 17:56:08 +00:00
|
|
|
struct spdk_scsi_lun *
|
|
|
|
spdk_scsi_dev_get_lun(struct spdk_scsi_dev *dev, int lun_id)
|
|
|
|
{
|
2021-09-25 03:52:02 +00:00
|
|
|
struct spdk_scsi_lun *lun;
|
|
|
|
|
|
|
|
TAILQ_FOREACH(lun, &dev->luns, tailq) {
|
|
|
|
if (lun->id == lun_id) {
|
|
|
|
break;
|
|
|
|
}
|
2017-05-02 17:56:08 +00:00
|
|
|
}
|
|
|
|
|
2021-09-25 03:52:02 +00:00
|
|
|
return lun;
|
2017-05-02 17:56:08 +00:00
|
|
|
}
|
|
|
|
|
2018-01-12 00:42:02 +00:00
|
|
|
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)
|
|
|
|
{
|
|
|
|
if (bdev_name == NULL) {
|
|
|
|
return -1;
|
|
|
|
} else {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-20 22:12:08 +00:00
|
|
|
DEFINE_STUB(spdk_scsi_dev_get_first_lun,
|
|
|
|
struct spdk_scsi_lun *,
|
|
|
|
(struct spdk_scsi_dev *dev),
|
|
|
|
NULL);
|
|
|
|
|
|
|
|
DEFINE_STUB(spdk_scsi_dev_get_next_lun,
|
|
|
|
struct spdk_scsi_lun *,
|
|
|
|
(struct spdk_scsi_lun *prev_lun),
|
|
|
|
NULL);
|
|
|
|
|
2018-01-12 00:42:02 +00:00
|
|
|
static void
|
|
|
|
add_lun_test_cases(void)
|
|
|
|
{
|
2019-12-09 05:48:43 +00:00
|
|
|
struct spdk_iscsi_tgt_node tgtnode = {};
|
2018-01-12 00:42:02 +00:00
|
|
|
int lun_id = 0;
|
|
|
|
char *bdev_name = NULL;
|
2019-12-09 05:48:43 +00:00
|
|
|
struct spdk_scsi_dev scsi_dev = {};
|
2018-01-12 00:42:02 +00:00
|
|
|
int rc;
|
|
|
|
|
|
|
|
/* case 1 */
|
|
|
|
tgtnode.num_active_conns = 1;
|
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
|
2018-01-12 00:42:02 +00:00
|
|
|
CU_ASSERT(rc != 0);
|
|
|
|
|
|
|
|
/* case 2 */
|
|
|
|
tgtnode.num_active_conns = 0;
|
|
|
|
lun_id = -2;
|
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
|
2018-01-12 00:42:02 +00:00
|
|
|
CU_ASSERT(rc != 0);
|
|
|
|
|
|
|
|
/* case 3 */
|
|
|
|
lun_id = SPDK_SCSI_DEV_MAX_LUN;
|
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
|
2018-01-12 00:42:02 +00:00
|
|
|
CU_ASSERT(rc != 0);
|
|
|
|
|
|
|
|
/* case 4 */
|
|
|
|
lun_id = -1;
|
|
|
|
tgtnode.dev = NULL;
|
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
|
2018-01-12 00:42:02 +00:00
|
|
|
CU_ASSERT(rc != 0);
|
|
|
|
|
|
|
|
/* case 5 */
|
|
|
|
tgtnode.dev = &scsi_dev;
|
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
|
2018-01-12 00:42:02 +00:00
|
|
|
CU_ASSERT(rc != 0);
|
|
|
|
|
|
|
|
/* case 6 */
|
|
|
|
bdev_name = "LUN0";
|
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
rc = iscsi_tgt_node_add_lun(&tgtnode, bdev_name, lun_id);
|
2018-01-12 00:42:02 +00:00
|
|
|
CU_ASSERT(rc == 0);
|
|
|
|
}
|
|
|
|
|
2017-12-25 09:31:50 +00:00
|
|
|
static void
|
|
|
|
allow_any_allowed(void)
|
|
|
|
{
|
|
|
|
bool result;
|
|
|
|
char *netmask;
|
|
|
|
char *addr1, *addr2;
|
|
|
|
|
|
|
|
netmask = "ANY";
|
|
|
|
addr1 = "2001:ad6:1234:5678:9abc::";
|
|
|
|
addr2 = "192.168.2.1";
|
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_netmask_allow_addr(netmask, addr1);
|
2017-12-25 09:31:50 +00:00
|
|
|
CU_ASSERT(result == true);
|
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_netmask_allow_addr(netmask, addr2);
|
2017-12-25 09:31:50 +00:00
|
|
|
CU_ASSERT(result == true);
|
|
|
|
}
|
|
|
|
|
2017-10-24 01:20:09 +00:00
|
|
|
static void
|
|
|
|
allow_ipv6_allowed(void)
|
|
|
|
{
|
2017-11-13 02:14:02 +00:00
|
|
|
bool result;
|
2017-10-24 01:20:09 +00:00
|
|
|
char *netmask;
|
|
|
|
char *addr;
|
|
|
|
|
|
|
|
netmask = "[2001:ad6:1234::]/48";
|
|
|
|
addr = "2001:ad6:1234:5678:9abc::";
|
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
|
2017-11-13 02:14:02 +00:00
|
|
|
CU_ASSERT(result == true);
|
2017-10-24 01:20:09 +00:00
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_netmask_allow_addr(netmask, addr);
|
2017-11-13 02:14:02 +00:00
|
|
|
CU_ASSERT(result == true);
|
2017-12-26 16:39:17 +00:00
|
|
|
|
|
|
|
/* Netmask prefix bits == 128 (all bits must match) */
|
|
|
|
netmask = "[2001:ad6:1234:5678:9abc::1]/128";
|
|
|
|
addr = "2001:ad6:1234:5678:9abc::1";
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
|
2017-12-26 16:39:17 +00:00
|
|
|
CU_ASSERT(result == true);
|
2017-10-24 01:20:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
allow_ipv6_denied(void)
|
|
|
|
{
|
2017-11-13 02:14:02 +00:00
|
|
|
bool result;
|
2017-10-24 01:20:09 +00:00
|
|
|
char *netmask;
|
|
|
|
char *addr;
|
|
|
|
|
|
|
|
netmask = "[2001:ad6:1234::]/56";
|
|
|
|
addr = "2001:ad6:1234:5678:9abc::";
|
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
|
2017-11-13 02:14:02 +00:00
|
|
|
CU_ASSERT(result == false);
|
2017-10-24 01:20:09 +00:00
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_netmask_allow_addr(netmask, addr);
|
2017-11-13 02:14:02 +00:00
|
|
|
CU_ASSERT(result == false);
|
2017-12-26 16:39:17 +00:00
|
|
|
|
|
|
|
/* Netmask prefix bits == 128 (all bits must match) */
|
|
|
|
netmask = "[2001:ad6:1234:5678:9abc::1]/128";
|
|
|
|
addr = "2001:ad6:1234:5678:9abc::2";
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
|
2017-12-26 16:39:17 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
allow_ipv6_invalid(void)
|
|
|
|
{
|
|
|
|
bool result;
|
|
|
|
char *netmask;
|
|
|
|
char *addr;
|
|
|
|
|
|
|
|
/* Netmask prefix bits > 128 */
|
|
|
|
netmask = "[2001:ad6:1234::]/129";
|
|
|
|
addr = "2001:ad6:1234:5678:9abc::";
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
|
2017-12-26 16:39:17 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
|
|
|
|
/* Netmask prefix bits == 0 */
|
|
|
|
netmask = "[2001:ad6:1234::]/0";
|
|
|
|
addr = "2001:ad6:1234:5678:9abc::";
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
|
2017-12-26 16:39:17 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
|
|
|
|
/* Netmask prefix bits < 0 */
|
|
|
|
netmask = "[2001:ad6:1234::]/-1";
|
|
|
|
addr = "2001:ad6:1234:5678:9abc::";
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv6_netmask_allow_addr(netmask, addr);
|
2017-12-26 16:39:17 +00:00
|
|
|
CU_ASSERT(result == false);
|
2017-10-24 01:20:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
allow_ipv4_allowed(void)
|
|
|
|
{
|
2017-11-13 02:14:02 +00:00
|
|
|
bool result;
|
2017-10-24 01:20:09 +00:00
|
|
|
char *netmask;
|
|
|
|
char *addr;
|
|
|
|
|
|
|
|
netmask = "192.168.2.0/24";
|
|
|
|
addr = "192.168.2.1";
|
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
|
2017-11-13 02:14:02 +00:00
|
|
|
CU_ASSERT(result == true);
|
2017-10-24 01:20:09 +00:00
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_netmask_allow_addr(netmask, addr);
|
2017-11-13 02:14:02 +00:00
|
|
|
CU_ASSERT(result == true);
|
2017-12-26 16:39:17 +00:00
|
|
|
|
|
|
|
/* Netmask prefix == 32 (all bits must match) */
|
|
|
|
netmask = "192.168.2.1/32";
|
|
|
|
addr = "192.168.2.1";
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
|
2017-12-26 16:39:17 +00:00
|
|
|
CU_ASSERT(result == true);
|
2017-10-24 01:20:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
allow_ipv4_denied(void)
|
|
|
|
{
|
2017-11-13 02:14:02 +00:00
|
|
|
bool result;
|
2017-10-24 01:20:09 +00:00
|
|
|
char *netmask;
|
|
|
|
char *addr;
|
|
|
|
|
|
|
|
netmask = "192.168.2.0";
|
|
|
|
addr = "192.168.2.1";
|
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
|
2017-11-13 02:14:02 +00:00
|
|
|
CU_ASSERT(result == false);
|
2017-10-24 01:20:09 +00:00
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_netmask_allow_addr(netmask, addr);
|
2017-11-13 02:14:02 +00:00
|
|
|
CU_ASSERT(result == false);
|
2017-12-26 16:39:17 +00:00
|
|
|
|
|
|
|
/* Netmask prefix == 32 (all bits must match) */
|
|
|
|
netmask = "192.168.2.1/32";
|
|
|
|
addr = "192.168.2.2";
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
|
2017-12-26 16:39:17 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
allow_ipv4_invalid(void)
|
|
|
|
{
|
|
|
|
bool result;
|
|
|
|
char *netmask;
|
|
|
|
char *addr;
|
|
|
|
|
|
|
|
/* Netmask prefix bits > 32 */
|
|
|
|
netmask = "192.168.2.0/33";
|
|
|
|
addr = "192.168.2.1";
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
|
2017-12-26 16:39:17 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
|
|
|
|
/* Netmask prefix bits == 0 */
|
|
|
|
netmask = "192.168.2.0/0";
|
|
|
|
addr = "192.168.2.1";
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
|
2017-12-26 16:39:17 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
|
|
|
|
/* Netmask prefix bits < 0 */
|
|
|
|
netmask = "192.168.2.0/-1";
|
|
|
|
addr = "192.168.2.1";
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_ipv4_netmask_allow_addr(netmask, addr);
|
2017-12-26 16:39:17 +00:00
|
|
|
CU_ASSERT(result == false);
|
2017-10-24 01:20:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
node_access_allowed(void)
|
|
|
|
{
|
2019-12-09 05:48:43 +00:00
|
|
|
struct spdk_iscsi_tgt_node tgtnode = {};
|
|
|
|
struct spdk_iscsi_portal_grp pg = {};
|
|
|
|
struct spdk_iscsi_init_grp ig = {};
|
|
|
|
struct spdk_iscsi_conn conn = {};
|
|
|
|
struct spdk_iscsi_portal portal = {};
|
|
|
|
struct spdk_iscsi_initiator_name iname = {};
|
|
|
|
struct spdk_iscsi_initiator_netmask imask = {};
|
|
|
|
struct spdk_scsi_dev scsi_dev = {};
|
2017-11-30 01:43:01 +00:00
|
|
|
struct spdk_iscsi_pg_map *pg_map;
|
2017-10-24 01:20:09 +00:00
|
|
|
char *iqn, *addr;
|
2017-11-13 02:14:02 +00:00
|
|
|
bool result;
|
2017-10-24 01:20:09 +00:00
|
|
|
|
|
|
|
/* portal group initialization */
|
|
|
|
pg.tag = 1;
|
|
|
|
|
|
|
|
/* initiator group initialization */
|
|
|
|
ig.tag = 1;
|
|
|
|
|
|
|
|
ig.ninitiators = 1;
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname.name, sizeof(iname.name), "iqn.2017-10.spdk.io:0001");
|
2017-11-15 00:14:27 +00:00
|
|
|
TAILQ_INIT(&ig.initiator_head);
|
|
|
|
TAILQ_INSERT_TAIL(&ig.initiator_head, &iname, tailq);
|
2017-10-24 01:20:09 +00:00
|
|
|
|
|
|
|
ig.nnetmasks = 1;
|
2019-06-28 00:24:49 +00:00
|
|
|
snprintf(imask.mask, sizeof(imask.mask), "192.168.2.0/24");
|
2017-11-15 00:14:27 +00:00
|
|
|
TAILQ_INIT(&ig.netmask_head);
|
|
|
|
TAILQ_INSERT_TAIL(&ig.netmask_head, &imask, tailq);
|
2017-10-24 01:20:09 +00:00
|
|
|
|
|
|
|
/* target initialization */
|
2019-06-28 01:18:07 +00:00
|
|
|
snprintf(tgtnode.name, sizeof(tgtnode.name), "iqn.2017-10.spdk.io:0001");
|
2017-11-30 01:43:01 +00:00
|
|
|
TAILQ_INIT(&tgtnode.pg_map_head);
|
2017-12-05 06:42:37 +00:00
|
|
|
|
2018-04-09 23:10:21 +00:00
|
|
|
snprintf(scsi_dev.name, sizeof(scsi_dev.name), "iqn.2017-10.spdk.io:0001");
|
2017-12-05 06:42:37 +00:00
|
|
|
tgtnode.dev = &scsi_dev;
|
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
pg_map = iscsi_tgt_node_add_pg_map(&tgtnode, &pg);
|
|
|
|
iscsi_pg_map_add_ig_map(pg_map, &ig);
|
2017-10-24 01:20:09 +00:00
|
|
|
|
|
|
|
/* portal initialization */
|
|
|
|
portal.group = &pg;
|
2019-06-28 01:36:31 +00:00
|
|
|
snprintf(portal.host, sizeof(portal.host), "192.168.2.0");
|
2019-06-28 01:47:10 +00:00
|
|
|
snprintf(portal.port, sizeof(portal.port), "3260");
|
2017-10-24 01:20:09 +00:00
|
|
|
|
|
|
|
/* input for UT */
|
|
|
|
conn.portal = &portal;
|
|
|
|
|
|
|
|
iqn = "iqn.2017-10.spdk.io:0001";
|
|
|
|
addr = "192.168.2.1";
|
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-13 02:14:02 +00:00
|
|
|
CU_ASSERT(result == true);
|
2017-11-30 01:43:01 +00:00
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
iscsi_pg_map_delete_ig_map(pg_map, &ig);
|
|
|
|
iscsi_tgt_node_delete_pg_map(&tgtnode, &pg);
|
2017-10-24 01:20:09 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
node_access_denied_by_empty_netmask(void)
|
|
|
|
{
|
2019-12-09 05:48:43 +00:00
|
|
|
struct spdk_iscsi_tgt_node tgtnode = {};
|
|
|
|
struct spdk_iscsi_portal_grp pg = {};
|
|
|
|
struct spdk_iscsi_init_grp ig = {};
|
|
|
|
struct spdk_iscsi_conn conn = {};
|
|
|
|
struct spdk_iscsi_portal portal = {};
|
|
|
|
struct spdk_iscsi_initiator_name iname = {};
|
|
|
|
struct spdk_scsi_dev scsi_dev = {};
|
2017-11-30 01:43:01 +00:00
|
|
|
struct spdk_iscsi_pg_map *pg_map;
|
2017-10-24 01:20:09 +00:00
|
|
|
char *iqn, *addr;
|
2017-11-13 02:14:02 +00:00
|
|
|
bool result;
|
2017-10-24 01:20:09 +00:00
|
|
|
|
|
|
|
/* portal group initialization */
|
|
|
|
pg.tag = 1;
|
|
|
|
|
|
|
|
/* initiator group initialization */
|
|
|
|
ig.tag = 1;
|
|
|
|
|
|
|
|
ig.ninitiators = 1;
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname.name, sizeof(iname.name), "iqn.2017-10.spdk.io:0001");
|
2017-11-15 00:14:27 +00:00
|
|
|
TAILQ_INIT(&ig.initiator_head);
|
|
|
|
TAILQ_INSERT_TAIL(&ig.initiator_head, &iname, tailq);
|
2017-10-24 01:20:09 +00:00
|
|
|
|
|
|
|
ig.nnetmasks = 0;
|
2017-11-15 00:14:27 +00:00
|
|
|
TAILQ_INIT(&ig.netmask_head);
|
2017-10-24 01:20:09 +00:00
|
|
|
|
|
|
|
/* target initialization */
|
2019-06-28 01:18:07 +00:00
|
|
|
snprintf(tgtnode.name, sizeof(tgtnode.name), "iqn.2017-10.spdk.io:0001");
|
2017-11-30 01:43:01 +00:00
|
|
|
TAILQ_INIT(&tgtnode.pg_map_head);
|
2017-12-05 06:42:37 +00:00
|
|
|
|
2018-04-09 23:10:21 +00:00
|
|
|
snprintf(scsi_dev.name, sizeof(scsi_dev.name), "iqn.2017-10.spdk.io:0001");
|
2017-12-05 06:42:37 +00:00
|
|
|
tgtnode.dev = &scsi_dev;
|
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
pg_map = iscsi_tgt_node_add_pg_map(&tgtnode, &pg);
|
|
|
|
iscsi_pg_map_add_ig_map(pg_map, &ig);
|
2017-10-24 01:20:09 +00:00
|
|
|
|
|
|
|
/* portal initialization */
|
|
|
|
portal.group = &pg;
|
2019-06-28 01:36:31 +00:00
|
|
|
snprintf(portal.host, sizeof(portal.host), "192.168.2.0");
|
2019-06-28 01:47:10 +00:00
|
|
|
snprintf(portal.port, sizeof(portal.port), "3260");
|
2017-10-24 01:20:09 +00:00
|
|
|
|
|
|
|
/* input for UT */
|
|
|
|
conn.portal = &portal;
|
|
|
|
|
|
|
|
iqn = "iqn.2017-10.spdk.io:0001";
|
|
|
|
addr = "192.168.3.1";
|
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-13 02:14:02 +00:00
|
|
|
CU_ASSERT(result == false);
|
2017-10-24 01:20:09 +00:00
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
iscsi_pg_map_delete_ig_map(pg_map, &ig);
|
|
|
|
iscsi_tgt_node_delete_pg_map(&tgtnode, &pg);
|
2017-10-24 01:20:09 +00:00
|
|
|
}
|
|
|
|
|
2017-11-29 06:11:11 +00:00
|
|
|
#define IQN1 "iqn.2017-11.spdk.io:0001"
|
|
|
|
#define NO_IQN1 "!iqn.2017-11.spdk.io:0001"
|
|
|
|
#define IQN2 "iqn.2017-11.spdk.io:0002"
|
|
|
|
#define IP1 "192.168.2.0"
|
|
|
|
#define IP2 "192.168.2.1"
|
|
|
|
|
|
|
|
static void
|
|
|
|
node_access_multi_initiator_groups_cases(void)
|
|
|
|
{
|
2019-12-09 05:48:43 +00:00
|
|
|
struct spdk_iscsi_tgt_node tgtnode = {};
|
|
|
|
struct spdk_iscsi_conn conn = {};
|
|
|
|
struct spdk_iscsi_portal_grp pg = {};
|
|
|
|
struct spdk_iscsi_portal portal = {};
|
|
|
|
struct spdk_iscsi_init_grp ig1 = {}, ig2 = {};
|
2019-06-27 23:49:28 +00:00
|
|
|
struct spdk_iscsi_initiator_name iname1 = {}, iname2 = {};
|
2019-06-28 00:24:49 +00:00
|
|
|
struct spdk_iscsi_initiator_netmask imask1 = {}, imask2 = {};
|
2019-12-09 05:48:43 +00:00
|
|
|
struct spdk_scsi_dev scsi_dev = {};
|
2017-11-30 01:43:01 +00:00
|
|
|
struct spdk_iscsi_pg_map *pg_map;
|
2017-11-29 06:11:11 +00:00
|
|
|
char *iqn, *addr;
|
|
|
|
bool result;
|
|
|
|
|
|
|
|
/* target initialization */
|
2019-06-28 01:18:07 +00:00
|
|
|
snprintf(tgtnode.name, sizeof(tgtnode.name), IQN1);
|
2017-11-30 01:43:01 +00:00
|
|
|
TAILQ_INIT(&tgtnode.pg_map_head);
|
2017-12-05 06:42:37 +00:00
|
|
|
|
2018-04-09 23:10:21 +00:00
|
|
|
snprintf(scsi_dev.name, sizeof(scsi_dev.name), IQN1);
|
2017-12-05 06:42:37 +00:00
|
|
|
tgtnode.dev = &scsi_dev;
|
|
|
|
|
2017-11-29 06:11:11 +00:00
|
|
|
/* initiator group initialization */
|
|
|
|
ig1.tag = 1;
|
|
|
|
TAILQ_INIT(&ig1.initiator_head);
|
|
|
|
TAILQ_INIT(&ig1.netmask_head);
|
|
|
|
|
|
|
|
ig1.ninitiators = 1;
|
|
|
|
TAILQ_INSERT_TAIL(&ig1.initiator_head, &iname1, tailq);
|
|
|
|
|
|
|
|
ig1.nnetmasks = 1;
|
|
|
|
TAILQ_INSERT_TAIL(&ig1.netmask_head, &imask1, tailq);
|
|
|
|
|
|
|
|
ig2.tag = 2;
|
|
|
|
TAILQ_INIT(&ig2.initiator_head);
|
|
|
|
TAILQ_INIT(&ig2.netmask_head);
|
|
|
|
|
|
|
|
ig2.ninitiators = 1;
|
|
|
|
TAILQ_INSERT_TAIL(&ig2.initiator_head, &iname2, tailq);
|
|
|
|
|
|
|
|
ig2.nnetmasks = 1;
|
|
|
|
TAILQ_INSERT_TAIL(&ig2.netmask_head, &imask2, tailq);
|
|
|
|
|
2017-12-18 04:23:21 +00:00
|
|
|
/* portal group initialization */
|
|
|
|
pg.tag = 1;
|
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
pg_map = iscsi_tgt_node_add_pg_map(&tgtnode, &pg);
|
|
|
|
iscsi_pg_map_add_ig_map(pg_map, &ig1);
|
|
|
|
iscsi_pg_map_add_ig_map(pg_map, &ig2);
|
2017-12-18 04:23:21 +00:00
|
|
|
|
|
|
|
/* portal initialization */
|
|
|
|
portal.group = &pg;
|
2019-06-28 01:36:31 +00:00
|
|
|
snprintf(portal.host, sizeof(portal.host), IP1);
|
2019-06-28 01:47:10 +00:00
|
|
|
snprintf(portal.port, sizeof(portal.port), "3260");
|
2017-12-18 04:23:21 +00:00
|
|
|
|
|
|
|
/* connection initialization */
|
|
|
|
conn.portal = &portal;
|
|
|
|
|
2017-11-29 06:11:11 +00:00
|
|
|
iqn = IQN1;
|
|
|
|
addr = IP1;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* case 1:
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* | IG1 | IG2 | |
|
|
|
|
* +-------------------------------------------+ |
|
|
|
|
* | name | addr | name | addr | result |
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* | denied | - | - | - | denied |
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
*/
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname1.name, sizeof(iname1.name), NO_IQN1);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* case 2:
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* | IG1 | IG2 | |
|
|
|
|
* +-------------------------------------------+ |
|
|
|
|
* | name | addr | name | addr | result |
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* | allowed | allowed | - | - | allowed |
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
*/
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname1.name, sizeof(iname1.name), IQN1);
|
2019-06-28 00:24:49 +00:00
|
|
|
snprintf(imask1.mask, sizeof(imask1.mask), IP1);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == true);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* case 3:
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* | IG1 | IG2 | |
|
|
|
|
* +-------------------------------------------+ |
|
|
|
|
* | name | addr | name | addr | result |
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* | allowed | denied | denied | - | denied |
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
*/
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname1.name, sizeof(iname1.name), IQN1);
|
2019-06-28 00:24:49 +00:00
|
|
|
snprintf(imask1.mask, sizeof(imask1.mask), IP2);
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname2.name, sizeof(iname2.name), NO_IQN1);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* case 4:
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* | IG1 | IG2 | |
|
|
|
|
* +-------------------------------------------+ |
|
|
|
|
* | name | addr | name | addr | result |
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
* | allowed | denied | allowed | allowed | allowed |
|
|
|
|
* +-------------------------------------------+---------+
|
|
|
|
*/
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname1.name, sizeof(iname1.name), IQN1);
|
2019-06-28 00:24:49 +00:00
|
|
|
snprintf(imask1.mask, sizeof(imask1.mask), IP2);
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname2.name, sizeof(iname2.name), IQN1);
|
2019-06-28 00:24:49 +00:00
|
|
|
snprintf(imask2.mask, sizeof(imask2.mask), IP1);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == true);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* case 5:
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | IG1 | IG2 | |
|
|
|
|
* +---------------------------------------------+ |
|
|
|
|
* | name | addr | name | addr | result |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | allowed | denied | allowed | denied | denied |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
*/
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname1.name, sizeof(iname1.name), IQN1);
|
2019-06-28 00:24:49 +00:00
|
|
|
snprintf(imask1.mask, sizeof(imask1.mask), IP2);
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname2.name, sizeof(iname2.name), IQN1);
|
2019-06-28 00:24:49 +00:00
|
|
|
snprintf(imask2.mask, sizeof(imask2.mask), IP2);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* case 6:
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | IG1 | IG2 | |
|
|
|
|
* +---------------------------------------------+ |
|
|
|
|
* | name | addr | name | addr | result |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | allowed | denied | not found | - | denied |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
*/
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname1.name, sizeof(iname1.name), IQN1);
|
2019-06-28 00:24:49 +00:00
|
|
|
snprintf(imask1.mask, sizeof(imask1.mask), IP2);
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname2.name, sizeof(iname2.name), IQN2);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* case 7:
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | IG1 | IG2 | |
|
|
|
|
* +---------------------------------------------+ |
|
|
|
|
* | name | addr | name | addr | result |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | not found | - | denied | - | denied |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
*/
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname1.name, sizeof(iname1.name), IQN2);
|
|
|
|
snprintf(iname2.name, sizeof(iname2.name), NO_IQN1);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* case 8:
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | IG1 | IG2 | |
|
|
|
|
* +---------------------------------------------+ |
|
|
|
|
* | name | addr | name | addr | result |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | not found | - | allowed | allowed | allowed |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
*/
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname1.name, sizeof(iname1.name), IQN2);
|
|
|
|
snprintf(iname2.name, sizeof(iname2.name), IQN1);
|
2019-06-28 00:24:49 +00:00
|
|
|
snprintf(imask2.mask, sizeof(imask2.mask), IP1);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == true);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* case 9:
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | IG1 | IG2 | |
|
|
|
|
* +---------------------------------------------+ |
|
|
|
|
* | name | addr | name | addr | result |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | not found | - | allowed | denied | denied |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
*/
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname1.name, sizeof(iname1.name), IQN2);
|
|
|
|
snprintf(iname2.name, sizeof(iname2.name), IQN1);
|
2019-06-28 00:24:49 +00:00
|
|
|
snprintf(imask2.mask, sizeof(imask2.mask), IP2);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* case 10:
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | IG1 | IG2 | |
|
|
|
|
* +---------------------------------------------+ |
|
|
|
|
* | name | addr | name | addr | result |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
* | not found | - | not found | - | denied |
|
|
|
|
* +---------------------------------------------+---------+
|
|
|
|
*/
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname1.name, sizeof(iname1.name), IQN2);
|
|
|
|
snprintf(iname2.name, sizeof(iname2.name), IQN2);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2020-04-15 21:04:36 +00:00
|
|
|
result = iscsi_tgt_node_access(&conn, &tgtnode, iqn, addr);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == false);
|
2017-11-30 01:43:01 +00:00
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
iscsi_pg_map_delete_ig_map(pg_map, &ig1);
|
|
|
|
iscsi_pg_map_delete_ig_map(pg_map, &ig2);
|
|
|
|
iscsi_tgt_node_delete_pg_map(&tgtnode, &pg);
|
2017-11-29 06:11:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
allow_iscsi_name_multi_maps_case(void)
|
|
|
|
{
|
2019-12-09 05:48:43 +00:00
|
|
|
struct spdk_iscsi_tgt_node tgtnode = {};
|
|
|
|
struct spdk_iscsi_portal_grp pg1 = {}, pg2 = {};
|
|
|
|
struct spdk_iscsi_init_grp ig = {};
|
2019-06-27 23:49:28 +00:00
|
|
|
struct spdk_iscsi_initiator_name iname = {};
|
2017-11-30 01:43:01 +00:00
|
|
|
struct spdk_iscsi_pg_map *pg_map1, *pg_map2;
|
2019-12-09 05:48:43 +00:00
|
|
|
struct spdk_scsi_dev scsi_dev = {};
|
2017-11-29 06:11:11 +00:00
|
|
|
char *iqn;
|
|
|
|
bool result;
|
|
|
|
|
|
|
|
/* target initialization */
|
2017-11-30 01:43:01 +00:00
|
|
|
TAILQ_INIT(&tgtnode.pg_map_head);
|
2017-12-05 06:42:37 +00:00
|
|
|
|
2018-04-09 23:10:21 +00:00
|
|
|
snprintf(scsi_dev.name, sizeof(scsi_dev.name), IQN1);
|
2017-12-05 06:42:37 +00:00
|
|
|
tgtnode.dev = &scsi_dev;
|
|
|
|
|
2017-12-18 04:23:21 +00:00
|
|
|
/* initiator group initialization */
|
|
|
|
TAILQ_INIT(&ig.initiator_head);
|
|
|
|
|
|
|
|
ig.ninitiators = 1;
|
|
|
|
TAILQ_INSERT_TAIL(&ig.initiator_head, &iname, tailq);
|
|
|
|
|
2017-12-07 22:49:19 +00:00
|
|
|
/* portal group initialization */
|
|
|
|
pg1.tag = 1;
|
|
|
|
pg2.tag = 1;
|
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
pg_map1 = iscsi_tgt_node_add_pg_map(&tgtnode, &pg1);
|
|
|
|
pg_map2 = iscsi_tgt_node_add_pg_map(&tgtnode, &pg2);
|
|
|
|
iscsi_pg_map_add_ig_map(pg_map1, &ig);
|
|
|
|
iscsi_pg_map_add_ig_map(pg_map2, &ig);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
|
|
|
/* test for IG1 <-> PG1, PG2 case */
|
|
|
|
iqn = IQN1;
|
|
|
|
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname.name, sizeof(iname.name), IQN1);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_tgt_node_allow_iscsi_name(&tgtnode, iqn);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == true);
|
|
|
|
|
2019-06-27 23:49:28 +00:00
|
|
|
snprintf(iname.name, sizeof(iname.name), IQN2);
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
result = iscsi_tgt_node_allow_iscsi_name(&tgtnode, iqn);
|
2017-11-29 06:11:11 +00:00
|
|
|
CU_ASSERT(result == false);
|
|
|
|
|
2019-03-27 21:53:37 +00:00
|
|
|
iscsi_pg_map_delete_ig_map(pg_map1, &ig);
|
|
|
|
iscsi_pg_map_delete_ig_map(pg_map2, &ig);
|
|
|
|
iscsi_tgt_node_delete_pg_map(&tgtnode, &pg1);
|
|
|
|
iscsi_tgt_node_delete_pg_map(&tgtnode, &pg2);
|
2017-11-30 01:43:01 +00:00
|
|
|
}
|
2017-11-29 06:11:11 +00:00
|
|
|
|
2018-01-12 02:02:53 +00:00
|
|
|
/*
|
|
|
|
* static bool
|
2020-04-15 21:04:36 +00:00
|
|
|
* iscsi_check_chap_params(bool disable_chap, bool require_chap,
|
2018-02-22 23:01:42 +00:00
|
|
|
* bool mutual_chap, int chap_group);
|
2018-01-12 02:02:53 +00:00
|
|
|
*/
|
|
|
|
static void
|
|
|
|
chap_param_test_cases(void)
|
|
|
|
{
|
|
|
|
/* Auto */
|
2020-04-15 21:04:36 +00:00
|
|
|
CU_ASSERT(iscsi_check_chap_params(false, false, false, 0) == true);
|
2018-01-12 02:02:53 +00:00
|
|
|
|
|
|
|
/* None */
|
2020-04-15 21:04:36 +00:00
|
|
|
CU_ASSERT(iscsi_check_chap_params(true, false, false, 0) == true);
|
2018-01-12 02:02:53 +00:00
|
|
|
|
|
|
|
/* CHAP */
|
2020-04-15 21:04:36 +00:00
|
|
|
CU_ASSERT(iscsi_check_chap_params(false, true, false, 0) == true);
|
2018-01-12 02:02:53 +00:00
|
|
|
|
|
|
|
/* CHAP Mutual */
|
2020-04-15 21:04:36 +00:00
|
|
|
CU_ASSERT(iscsi_check_chap_params(false, true, true, 0) == true);
|
2018-01-12 02:02:53 +00:00
|
|
|
|
|
|
|
/* Check mutual exclusiveness of disabled and required */
|
2020-04-15 21:04:36 +00:00
|
|
|
CU_ASSERT(iscsi_check_chap_params(true, true, false, 0) == false);
|
2018-01-12 02:02:53 +00:00
|
|
|
|
|
|
|
/* Mutual requires Required */
|
2020-04-15 21:04:36 +00:00
|
|
|
CU_ASSERT(iscsi_check_chap_params(false, false, true, 0) == false);
|
2018-01-12 02:02:53 +00:00
|
|
|
|
|
|
|
/* Remaining combinations */
|
2020-04-15 21:04:36 +00:00
|
|
|
CU_ASSERT(iscsi_check_chap_params(true, false, true, 0) == false);
|
|
|
|
CU_ASSERT(iscsi_check_chap_params(true, true, true, 0) == false);
|
2018-01-12 02:02:53 +00:00
|
|
|
|
|
|
|
/* Valid auth group ID */
|
2020-04-15 21:04:36 +00:00
|
|
|
CU_ASSERT(iscsi_check_chap_params(false, false, false, 1) == true);
|
2018-01-12 02:02:53 +00:00
|
|
|
|
|
|
|
/* Invalid auth group ID */
|
2020-04-15 21:04:36 +00:00
|
|
|
CU_ASSERT(iscsi_check_chap_params(false, false, false, -1) == false);
|
2018-01-12 02:02:53 +00:00
|
|
|
}
|
|
|
|
|
2016-08-16 22:23:35 +00:00
|
|
|
int
|
|
|
|
main(int argc, char **argv)
|
|
|
|
{
|
|
|
|
CU_pSuite suite = NULL;
|
|
|
|
unsigned int num_failures;
|
|
|
|
|
2020-03-11 17:59:24 +00:00
|
|
|
CU_set_error_action(CUEA_ABORT);
|
|
|
|
CU_initialize_registry();
|
2016-08-16 22:23:35 +00:00
|
|
|
|
|
|
|
suite = CU_add_suite("iscsi_target_node_suite", NULL, NULL);
|
|
|
|
|
2020-03-11 19:15:39 +00:00
|
|
|
CU_ADD_TEST(suite, add_lun_test_cases);
|
|
|
|
CU_ADD_TEST(suite, allow_any_allowed);
|
|
|
|
CU_ADD_TEST(suite, allow_ipv6_allowed);
|
|
|
|
CU_ADD_TEST(suite, allow_ipv6_denied);
|
|
|
|
CU_ADD_TEST(suite, allow_ipv6_invalid);
|
|
|
|
CU_ADD_TEST(suite, allow_ipv4_allowed);
|
|
|
|
CU_ADD_TEST(suite, allow_ipv4_denied);
|
|
|
|
CU_ADD_TEST(suite, allow_ipv4_invalid);
|
|
|
|
CU_ADD_TEST(suite, node_access_allowed);
|
|
|
|
CU_ADD_TEST(suite, node_access_denied_by_empty_netmask);
|
|
|
|
CU_ADD_TEST(suite, node_access_multi_initiator_groups_cases);
|
|
|
|
CU_ADD_TEST(suite, allow_iscsi_name_multi_maps_case);
|
|
|
|
CU_ADD_TEST(suite, chap_param_test_cases);
|
2016-08-16 22:23:35 +00:00
|
|
|
|
|
|
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
|
|
|
CU_basic_run_tests();
|
|
|
|
num_failures = CU_get_number_of_failures();
|
|
|
|
CU_cleanup_registry();
|
|
|
|
return num_failures;
|
|
|
|
}
|