diff --git a/lib/event/subsystems/iscsi/iscsi.c b/lib/event/subsystems/iscsi/iscsi.c index 642622509e..72750398e7 100644 --- a/lib/event/subsystems/iscsi/iscsi.c +++ b/lib/event/subsystems/iscsi/iscsi.c @@ -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); diff --git a/lib/iscsi/iscsi.h b/lib/iscsi/iscsi.h index cbd162187b..d75e0389e4 100644 --- a/lib/iscsi/iscsi.h +++ b/lib/iscsi/iscsi.h @@ -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, diff --git a/lib/iscsi/iscsi_subsystem.c b/lib/iscsi/iscsi_subsystem.c index d614a77357..6cd1e3faf7 100644 --- a/lib/iscsi/iscsi_subsystem.c +++ b/lib/iscsi/iscsi_subsystem.c @@ -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) diff --git a/lib/iscsi/tgt_node.c b/lib/iscsi/tgt_node.c index d8623a1509..469e241de3 100644 --- a/lib/iscsi/tgt_node.c +++ b/lib/iscsi/tgt_node.c @@ -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);