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: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/406493
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Shuhei Matsumoto 2018-05-08 08:33:15 +09:00 committed by Daniel Verkamp
parent 432e5f655e
commit abfed22981
4 changed files with 37 additions and 39 deletions

View File

@ -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);

View File

@ -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,

View File

@ -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)

View File

@ -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);