diff --git a/doc/jsonrpc.md b/doc/jsonrpc.md index 8c5180116..3815a77f3 100644 --- a/doc/jsonrpc.md +++ b/doc/jsonrpc.md @@ -4472,6 +4472,42 @@ Example response: } ~~~ +## iscsi_start_portal_group method {#rpc_iscsi_start_portal_group} + +Start listening on portals if the portal group is not started yet, or do nothing +if the portal group already started. Return a success response for both cases. + +### Parameters + +Name | Optional | Type | Description +--------------------------- | -------- | --------| ----------- +tag | Required | number | Existing portal group tag + +### Example + +Example request: + +~~~ +{ + "params": { + "tag": 1 + }, + "jsonrpc": "2.0", + "method": "iscsi_start_portal_group", + "id": 1 +} +~~~ + +Example response: + +~~~ +{ + "jsonrpc": "2.0", + "id": 1, + "result": true +} +~~~ + ## iscsi_delete_portal_group method {#rpc_iscsi_delete_portal_group} Delete an existing portal group. diff --git a/lib/iscsi/iscsi_rpc.c b/lib/iscsi/iscsi_rpc.c index cc991c109..04ef5b685 100644 --- a/lib/iscsi/iscsi_rpc.c +++ b/lib/iscsi/iscsi_rpc.c @@ -881,6 +881,28 @@ rpc_iscsi_delete_portal_group(struct spdk_jsonrpc_request *request, SPDK_RPC_REGISTER("iscsi_delete_portal_group", rpc_iscsi_delete_portal_group, SPDK_RPC_RUNTIME) SPDK_RPC_REGISTER_ALIAS_DEPRECATED(iscsi_delete_portal_group, delete_portal_group) +static int +_rpc_iscsi_start_portal_group(int pg_tag) +{ + struct spdk_iscsi_portal_grp *pg; + + pg = iscsi_portal_grp_find_by_tag(pg_tag); + if (!pg) { + return -ENODEV; + } + + iscsi_portal_grp_resume(pg); + return 0; +} + +static void +rpc_iscsi_start_portal_group(struct spdk_jsonrpc_request *request, + const struct spdk_json_val *params) +{ + _rpc_iscsi_change_portal_group(request, params, _rpc_iscsi_start_portal_group); +} +SPDK_RPC_REGISTER("iscsi_start_portal_group", rpc_iscsi_start_portal_group, SPDK_RPC_RUNTIME) + struct rpc_portal_group_auth { int32_t tag; bool disable_chap; diff --git a/scripts/rpc.py b/scripts/rpc.py index 50d042288..b9e50a94f 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -1197,6 +1197,15 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse portal must be from a private portal group.""", action='store_true') p.set_defaults(func=iscsi_create_portal_group) + def iscsi_start_portal_group(args): + rpc.iscsi.iscsi_start_portal_group(args.client, tag=args.tag) + + p = subparsers.add_parser('iscsi_start_portal_group', + help='Start listening on portals if it is not started yet.') + p.add_argument( + 'tag', help='Portal group tag (unique, integer > 0)', type=int) + p.set_defaults(func=iscsi_start_portal_group) + def iscsi_create_initiator_group(args): initiators = [] netmasks = [] diff --git a/scripts/rpc/iscsi.py b/scripts/rpc/iscsi.py index d6f29fdb6..c4631133e 100644 --- a/scripts/rpc/iscsi.py +++ b/scripts/rpc/iscsi.py @@ -442,6 +442,19 @@ def iscsi_create_portal_group(client, portals, tag, private): return client.call('iscsi_create_portal_group', params) +def iscsi_start_portal_group(client, tag): + """Start listening on portals if it is not started yet. + + Args: + tag: Portal group tag (unique, integer > 0) + + Returns: + True or False + """ + params = {'tag': tag} + return client.call('iscsi_start_portal_group', params) + + @deprecated_alias('add_initiator_group') def iscsi_create_initiator_group(client, tag, initiators, netmasks): """Add an initiator group.