iscsi: Add JSON config/info dump for initiator group.
Support JSON config/info dump for initiator group. These are added to init_grp.c. Text config dump is moved to init_grp.c too. Add accesses to g_spdk_iscsi.ig_head are consolidated into init_grp.c to extract ig_head from g_spdk_iscsi. Change-Id: I88131d248ed13e42e4da56aed8ae0edc01a65715 Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-on: https://review.gerrithub.io/407849 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
7740b02e36
commit
8107d04bfb
@ -675,3 +675,112 @@ spdk_iscsi_init_grp_unregister(int tag)
|
||||
pthread_mutex_unlock(&g_spdk_iscsi.mutex);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const char *initiator_group_section = \
|
||||
"\n"
|
||||
"# Users must change the InitiatorGroup section(s) to match the IP\n"
|
||||
"# addresses and initiator configuration in their environment.\n"
|
||||
"# Netmask can be used to specify a single IP address or a range of IP addresses\n"
|
||||
"# Netmask 192.168.1.20 <== single IP address\n"
|
||||
"# Netmask 192.168.1.0/24 <== IP range 192.168.1.*\n";
|
||||
|
||||
#define INITIATOR_GROUP_TMPL \
|
||||
"[InitiatorGroup%d]\n" \
|
||||
" Comment \"Initiator Group%d\"\n"
|
||||
|
||||
#define INITIATOR_TMPL \
|
||||
" InitiatorName "
|
||||
|
||||
#define NETMASK_TMPL \
|
||||
" Netmask "
|
||||
|
||||
void
|
||||
spdk_iscsi_init_grps_config_text(FILE *fp)
|
||||
{
|
||||
struct spdk_iscsi_init_grp *ig;
|
||||
struct spdk_iscsi_initiator_name *iname;
|
||||
struct spdk_iscsi_initiator_netmask *imask;
|
||||
|
||||
/* Create initiator group section */
|
||||
fprintf(fp, "%s", initiator_group_section);
|
||||
|
||||
/* Dump initiator groups */
|
||||
TAILQ_FOREACH(ig, &g_spdk_iscsi.ig_head, tailq) {
|
||||
if (NULL == ig) { continue; }
|
||||
fprintf(fp, INITIATOR_GROUP_TMPL, ig->tag, ig->tag);
|
||||
|
||||
/* Dump initiators */
|
||||
fprintf(fp, INITIATOR_TMPL);
|
||||
TAILQ_FOREACH(iname, &ig->initiator_head, tailq) {
|
||||
fprintf(fp, "%s ", iname->name);
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
|
||||
/* Dump netmasks */
|
||||
fprintf(fp, NETMASK_TMPL);
|
||||
TAILQ_FOREACH(imask, &ig->netmask_head, tailq) {
|
||||
fprintf(fp, "%s ", imask->mask);
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
spdk_iscsi_init_grp_info_json(struct spdk_iscsi_init_grp *ig,
|
||||
struct spdk_json_write_ctx *w)
|
||||
{
|
||||
struct spdk_iscsi_initiator_name *iname;
|
||||
struct spdk_iscsi_initiator_netmask *imask;
|
||||
|
||||
spdk_json_write_object_begin(w);
|
||||
|
||||
spdk_json_write_named_int32(w, "tag", ig->tag);
|
||||
|
||||
spdk_json_write_named_array_begin(w, "initiators");
|
||||
TAILQ_FOREACH(iname, &ig->initiator_head, tailq) {
|
||||
spdk_json_write_string(w, iname->name);
|
||||
}
|
||||
spdk_json_write_array_end(w);
|
||||
|
||||
spdk_json_write_named_array_begin(w, "netmasks");
|
||||
TAILQ_FOREACH(imask, &ig->netmask_head, tailq) {
|
||||
spdk_json_write_string(w, imask->mask);
|
||||
}
|
||||
spdk_json_write_array_end(w);
|
||||
|
||||
spdk_json_write_object_end(w);
|
||||
}
|
||||
|
||||
static void
|
||||
spdk_iscsi_init_grp_config_json(struct spdk_iscsi_init_grp *ig,
|
||||
struct spdk_json_write_ctx *w)
|
||||
{
|
||||
spdk_json_write_object_begin(w);
|
||||
|
||||
spdk_json_write_named_string(w, "method", "add_initiator_group");
|
||||
|
||||
spdk_json_write_name(w, "params");
|
||||
spdk_iscsi_init_grp_info_json(ig, w);
|
||||
|
||||
spdk_json_write_object_end(w);
|
||||
}
|
||||
|
||||
void
|
||||
spdk_iscsi_init_grps_info_json(struct spdk_json_write_ctx *w)
|
||||
{
|
||||
struct spdk_iscsi_init_grp *ig;
|
||||
|
||||
TAILQ_FOREACH(ig, &g_spdk_iscsi.ig_head, tailq) {
|
||||
spdk_iscsi_init_grp_info_json(ig, w);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
spdk_iscsi_init_grps_config_json(struct spdk_json_write_ctx *w)
|
||||
{
|
||||
struct spdk_iscsi_init_grp *ig;
|
||||
|
||||
TAILQ_FOREACH(ig, &g_spdk_iscsi.ig_head, tailq) {
|
||||
spdk_iscsi_init_grp_config_json(ig, w);
|
||||
}
|
||||
}
|
||||
|
@ -73,5 +73,7 @@ struct spdk_iscsi_init_grp *spdk_iscsi_init_grp_find_by_tag(int tag);
|
||||
void spdk_iscsi_init_grp_destroy(struct spdk_iscsi_init_grp *ig);
|
||||
int spdk_iscsi_parse_init_grps(void);
|
||||
void spdk_iscsi_init_grps_destroy(void);
|
||||
|
||||
void spdk_iscsi_init_grps_config_text(FILE *fp);
|
||||
void spdk_iscsi_init_grps_info_json(struct spdk_json_write_ctx *w);
|
||||
void spdk_iscsi_init_grps_config_json(struct spdk_json_write_ctx *w);
|
||||
#endif // SPDK_INIT_GRP_H
|
||||
|
@ -44,40 +44,11 @@
|
||||
|
||||
#include "spdk_internal/log.h"
|
||||
|
||||
static void
|
||||
dump_initiator_group(struct spdk_json_write_ctx *w, struct spdk_iscsi_init_grp *ig)
|
||||
{
|
||||
struct spdk_iscsi_initiator_name *iname;
|
||||
struct spdk_iscsi_initiator_netmask *imask;
|
||||
|
||||
spdk_json_write_object_begin(w);
|
||||
|
||||
spdk_json_write_name(w, "initiators");
|
||||
spdk_json_write_array_begin(w);
|
||||
TAILQ_FOREACH(iname, &ig->initiator_head, tailq) {
|
||||
spdk_json_write_string(w, iname->name);
|
||||
}
|
||||
spdk_json_write_array_end(w);
|
||||
|
||||
spdk_json_write_name(w, "tag");
|
||||
spdk_json_write_int32(w, ig->tag);
|
||||
|
||||
spdk_json_write_name(w, "netmasks");
|
||||
spdk_json_write_array_begin(w);
|
||||
TAILQ_FOREACH(imask, &ig->netmask_head, tailq) {
|
||||
spdk_json_write_string(w, imask->mask);
|
||||
}
|
||||
spdk_json_write_array_end(w);
|
||||
|
||||
spdk_json_write_object_end(w);
|
||||
}
|
||||
|
||||
static void
|
||||
spdk_rpc_get_initiator_groups(struct spdk_jsonrpc_request *request,
|
||||
const struct spdk_json_val *params)
|
||||
{
|
||||
struct spdk_json_write_ctx *w;
|
||||
struct spdk_iscsi_init_grp *ig;
|
||||
|
||||
if (params != NULL) {
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
@ -91,11 +62,7 @@ spdk_rpc_get_initiator_groups(struct spdk_jsonrpc_request *request,
|
||||
}
|
||||
|
||||
spdk_json_write_array_begin(w);
|
||||
|
||||
TAILQ_FOREACH(ig, &g_spdk_iscsi.ig_head, tailq) {
|
||||
dump_initiator_group(w, ig);
|
||||
}
|
||||
|
||||
spdk_iscsi_init_grps_info_json(w);
|
||||
spdk_json_write_array_end(w);
|
||||
|
||||
spdk_jsonrpc_end_result(request, w);
|
||||
|
@ -163,56 +163,6 @@ spdk_iscsi_config_dump_portal_groups(FILE *fp)
|
||||
}
|
||||
}
|
||||
|
||||
/* Initiator Groups */
|
||||
static const char *initiator_group_section = \
|
||||
"\n"
|
||||
"# Users must change the InitiatorGroup section(s) to match the IP\n"
|
||||
"# addresses and initiator configuration in their environment.\n"
|
||||
"# Netmask can be used to specify a single IP address or a range of IP addresses\n"
|
||||
"# Netmask 192.168.1.20 <== single IP address\n"
|
||||
"# Netmask 192.168.1.0/24 <== IP range 192.168.1.*\n";
|
||||
|
||||
#define INITIATOR_GROUP_TMPL \
|
||||
"[InitiatorGroup%d]\n" \
|
||||
" Comment \"Initiator Group%d\"\n"
|
||||
|
||||
#define INITIATOR_TMPL \
|
||||
" InitiatorName "
|
||||
|
||||
#define NETMASK_TMPL \
|
||||
" Netmask "
|
||||
|
||||
static void
|
||||
spdk_iscsi_config_dump_initiator_groups(FILE *fp)
|
||||
{
|
||||
struct spdk_iscsi_init_grp *ig;
|
||||
struct spdk_iscsi_initiator_name *iname;
|
||||
struct spdk_iscsi_initiator_netmask *imask;
|
||||
|
||||
/* Create initiator group section */
|
||||
fprintf(fp, "%s", initiator_group_section);
|
||||
|
||||
/* Dump initiator groups */
|
||||
TAILQ_FOREACH(ig, &g_spdk_iscsi.ig_head, tailq) {
|
||||
if (NULL == ig) { continue; }
|
||||
fprintf(fp, INITIATOR_GROUP_TMPL, ig->tag, ig->tag);
|
||||
|
||||
/* Dump initiators */
|
||||
fprintf(fp, INITIATOR_TMPL);
|
||||
TAILQ_FOREACH(iname, &ig->initiator_head, tailq) {
|
||||
fprintf(fp, "%s ", iname->name);
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
|
||||
/* Dump netmasks */
|
||||
fprintf(fp, NETMASK_TMPL);
|
||||
TAILQ_FOREACH(imask, &ig->netmask_head, tailq) {
|
||||
fprintf(fp, "%s ", imask->mask);
|
||||
}
|
||||
fprintf(fp, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
spdk_mobj_ctor(struct spdk_mempool *mp, __attribute__((unused)) void *arg,
|
||||
void *_m, __attribute__((unused)) unsigned i)
|
||||
@ -1012,7 +962,7 @@ spdk_iscsi_config_text(FILE *fp)
|
||||
{
|
||||
spdk_iscsi_globals_config_text(fp);
|
||||
spdk_iscsi_config_dump_portal_groups(fp);
|
||||
spdk_iscsi_config_dump_initiator_groups(fp);
|
||||
spdk_iscsi_init_grps_config_text(fp);
|
||||
spdk_iscsi_tgt_nodes_config_text(fp);
|
||||
}
|
||||
|
||||
@ -1020,6 +970,7 @@ void
|
||||
spdk_iscsi_config_json(struct spdk_json_write_ctx *w)
|
||||
{
|
||||
spdk_json_write_array_begin(w);
|
||||
spdk_iscsi_init_grps_config_json(w);
|
||||
spdk_iscsi_tgt_nodes_config_json(w);
|
||||
spdk_json_write_array_end(w);
|
||||
}
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include "CUnit/Basic.h"
|
||||
|
||||
#include "iscsi/init_grp.c"
|
||||
#include "unit/lib/json_mock.c"
|
||||
|
||||
SPDK_LOG_REGISTER_COMPONENT("iscsi", SPDK_LOG_ISCSI)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user