Commit abfed229 authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Daniel Verkamp
Browse files

iscsi: Add JSON config dump for iSCSI subsystem



Add base of JSON config fump for iSCSI subsystem in this patch.
JSON config dump for target node is already merged and it is added
to the JSON config dump for iSCSI subsystem first.

Besides, spdk_json_write_named_* APIs are applied to JSON config/info
dump for target node to reduce and clean the code in this patch.

Config dump for global parameters will be handled in different patches.

Change-Id: Iee786fbda3683c75a47c55b16d6db0235ac60896
Signed-off-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/406493


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarPawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 432e5f65
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -61,11 +61,20 @@ spdk_iscsi_subsystem_fini(void)
	spdk_iscsi_fini(spdk_iscsi_subsystem_fini_done, NULL);
}

static void
spdk_iscsi_subsystem_config_json(struct spdk_json_write_ctx *w,
				 struct spdk_event *done_ev)
{
	spdk_iscsi_config_json(w);
	spdk_event_call(done_ev);
}

static struct spdk_subsystem g_spdk_subsystem_iscsi = {
	.name = "iscsi",
	.init = spdk_iscsi_subsystem_init,
	.fini = spdk_iscsi_subsystem_fini,
	.config = spdk_iscsi_config_text,
	.write_config_json = spdk_iscsi_subsystem_config_json,
};

SPDK_SUBSYSTEM_REGISTER(g_spdk_subsystem_iscsi);
+2 −0
Original line number Diff line number Diff line
@@ -348,6 +348,7 @@ enum spdk_error_codes {
extern struct spdk_iscsi_globals g_spdk_iscsi;

struct spdk_iscsi_task;
struct spdk_json_write_ctx;

typedef void (*spdk_iscsi_init_cb)(void *cb_arg, int rc);

@@ -356,6 +357,7 @@ typedef void (*spdk_iscsi_fini_cb)(void *arg);
void spdk_iscsi_fini(spdk_iscsi_fini_cb cb_fn, void *cb_arg);
void spdk_shutdown_iscsi_conns_done(void);
void spdk_iscsi_config_text(FILE *fp);
void spdk_iscsi_config_json(struct spdk_json_write_ctx *w);

void spdk_iscsi_send_nopin(struct spdk_iscsi_conn *conn);
void spdk_iscsi_task_response(struct spdk_iscsi_conn *conn,
+10 −3
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ static void *g_fini_cb_arg;
"\n"

static void
spdk_iscsi_config_dump_section(FILE *fp)
spdk_iscsi_globals_config_text(FILE *fp)
{
	const char *authmethod = "None";
	char authgroup[32] = "None";
@@ -116,7 +116,6 @@ spdk_iscsi_config_dump_section(FILE *fp)
		g_spdk_iscsi.ErrorRecoveryLevel);
}


/* Portal groups */
static const char *portal_group_section = \
		"\n"
@@ -1011,10 +1010,18 @@ spdk_shutdown_iscsi_conns_done(void)
void
spdk_iscsi_config_text(FILE *fp)
{
	spdk_iscsi_config_dump_section(fp);
	spdk_iscsi_globals_config_text(fp);
	spdk_iscsi_config_dump_portal_groups(fp);
	spdk_iscsi_config_dump_initiator_groups(fp);
	spdk_iscsi_tgt_nodes_config_text(fp);
}

void
spdk_iscsi_config_json(struct spdk_json_write_ctx *w)
{
	spdk_json_write_array_begin(w);
	spdk_iscsi_tgt_nodes_config_json(w);
	spdk_json_write_array_end(w);
}

SPDK_LOG_REGISTER_COMPONENT("iscsi", SPDK_LOG_ISCSI)
+16 −36
Original line number Diff line number Diff line
@@ -1440,64 +1440,45 @@ spdk_iscsi_tgt_node_info_json(struct spdk_iscsi_tgt_node *target,

	spdk_json_write_object_begin(w);

	spdk_json_write_name(w, "name");
	spdk_json_write_string(w, target->name);
	spdk_json_write_named_string(w, "name", target->name);

	if (target->alias) {
		spdk_json_write_name(w, "alias_name");
		spdk_json_write_string(w, target->alias);
		spdk_json_write_named_string(w, "alias_name", target->alias);
	}

	spdk_json_write_name(w, "pg_ig_maps");
	spdk_json_write_array_begin(w);
	spdk_json_write_named_array_begin(w, "pg_ig_maps");
	TAILQ_FOREACH(pg_map, &target->pg_map_head, tailq) {
		TAILQ_FOREACH(ig_map, &pg_map->ig_map_head, tailq) {
			spdk_json_write_object_begin(w);
			spdk_json_write_name(w, "pg_tag");
			spdk_json_write_int32(w, pg_map->pg->tag);
			spdk_json_write_name(w, "ig_tag");
			spdk_json_write_int32(w, ig_map->ig->tag);
			spdk_json_write_named_int32(w, "pg_tag", pg_map->pg->tag);
			spdk_json_write_named_int32(w, "ig_tag", ig_map->ig->tag);
			spdk_json_write_object_end(w);
		}
	}
	spdk_json_write_array_end(w);

	spdk_json_write_name(w, "luns");
	spdk_json_write_array_begin(w);
	spdk_json_write_named_array_begin(w, "luns");
	for (i = 0; i < SPDK_SCSI_DEV_MAX_LUN; i++) {
		struct spdk_scsi_lun *lun = spdk_scsi_dev_get_lun(target->dev, i);

		if (lun) {
			spdk_json_write_object_begin(w);
			spdk_json_write_name(w, "bdev_name");
			spdk_json_write_string(w, spdk_scsi_lun_get_bdev_name(lun));
			spdk_json_write_name(w, "id");
			spdk_json_write_int32(w, spdk_scsi_lun_get_id(lun));
			spdk_json_write_named_string(w, "bdev_name", spdk_scsi_lun_get_bdev_name(lun));
			spdk_json_write_named_int32(w, "id", spdk_scsi_lun_get_id(lun));
			spdk_json_write_object_end(w);
		}
	}
	spdk_json_write_array_end(w);

	spdk_json_write_name(w, "queue_depth");
	spdk_json_write_int32(w, target->queue_depth);
	spdk_json_write_named_int32(w, "queue_depth", target->queue_depth);

	spdk_json_write_name(w, "disable_chap");
	spdk_json_write_bool(w, target->disable_chap);
	spdk_json_write_named_bool(w, "disable_chap", target->disable_chap);
	spdk_json_write_named_bool(w, "require_chap", target->require_chap);
	spdk_json_write_named_bool(w, "mutual_chap", target->mutual_chap);
	spdk_json_write_named_int32(w, "chap_group", target->chap_group);

	spdk_json_write_name(w, "require_chap");
	spdk_json_write_bool(w, target->require_chap);

	spdk_json_write_name(w, "mutual_chap");
	spdk_json_write_bool(w, target->mutual_chap);

	spdk_json_write_name(w, "chap_group");
	spdk_json_write_int32(w, target->chap_group);

	spdk_json_write_name(w, "header_digest");
	spdk_json_write_bool(w, target->header_digest);

	spdk_json_write_name(w, "data_digest");
	spdk_json_write_bool(w, target->data_digest);
	spdk_json_write_named_bool(w, "header_digest", target->header_digest);
	spdk_json_write_named_bool(w, "data_digest", target->data_digest);

	spdk_json_write_object_end(w);
}
@@ -1508,8 +1489,7 @@ spdk_iscsi_tgt_node_config_json(struct spdk_iscsi_tgt_node *target,
{
	spdk_json_write_object_begin(w);

	spdk_json_write_name(w, "method");
	spdk_json_write_string(w, "construct_target_node");
	spdk_json_write_named_string(w, "method", "construct_target_node");

	spdk_json_write_name(w, "params");
	spdk_iscsi_tgt_node_info_json(target, w);