From: Hannes Reinecke Date: Thu, 20 Apr 2023 10:10:17 +0000 (+0200) Subject: libnvme: add 'application' setting to the subsystem X-Git-Tag: v1.5~21 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=21e099a21c7f75284cd5f35f7088f26e8f34070d;p=users%2Fsagi%2Flibnvme.git libnvme: add 'application' setting to the subsystem Add an 'application' string to the subsystem to indicate which application should manage this particular subsystem. Signed-off-by: Hannes Reinecke --- diff --git a/doc/config-schema.json.in b/doc/config-schema.json.in index bde3d91c..4bbc4cbf 100644 --- a/doc/config-schema.json.in +++ b/doc/config-schema.json.in @@ -59,6 +59,10 @@ "type": "array", "items": { "$ref": "#/$defs/port" } }, + "application": { + "description": "Program managing this subsystem", + "type": "string" + }, "required": [ "nqn" ] } }, diff --git a/libnvme/nvme.i b/libnvme/nvme.i index 8b461e6e..2d39a5d9 100644 --- a/libnvme/nvme.i +++ b/libnvme/nvme.i @@ -346,10 +346,12 @@ struct nvme_subsystem { %immutable model; %immutable serial; %immutable firmware; + %immutable application; char *subsysnqn; char *model; char *serial; char *firmware; + char *application; }; struct nvme_ctrl { diff --git a/src/libnvme.map b/src/libnvme.map index 5b118d49..47ac7105 100644 --- a/src/libnvme.map +++ b/src/libnvme.map @@ -2,9 +2,11 @@ LIBNVME_1_5 { global: - nvme_nbft_read; - nvme_nbft_free; nvme_ipaddrs_eq; + nvme_nbft_free; + nvme_nbft_read; + nvme_subsystem_get_application; + nvme_subsystem_set_application; }; LIBNVME_1_4 { diff --git a/src/nvme/json.c b/src/nvme/json.c index a74b5a4d..3e711a7c 100644 --- a/src/nvme/json.c +++ b/src/nvme/json.c @@ -127,7 +127,7 @@ static void json_parse_port(nvme_subsystem_t s, struct json_object *port_obj) static void json_parse_subsys(nvme_host_t h, struct json_object *subsys_obj) { - struct json_object *nqn_obj, *port_array; + struct json_object *nqn_obj, *app_obj, *port_array; nvme_subsystem_t s; const char *nqn; int p; @@ -137,6 +137,12 @@ static void json_parse_subsys(nvme_host_t h, struct json_object *subsys_obj) return; nqn = json_object_get_string(nqn_obj); s = nvme_lookup_subsystem(h, NULL, nqn); + if (!s) + return; + app_obj = json_object_object_get(subsys_obj, "application"); + if (app_obj) + nvme_subsystem_set_application(s, json_object_get_string(app_obj)); + port_array = json_object_object_get(subsys_obj, "ports"); if (!port_array) return; @@ -350,7 +356,7 @@ static void json_update_subsys(struct json_object *subsys_array, nvme_subsystem_t s) { nvme_ctrl_t c; - const char *subsysnqn = nvme_subsystem_get_nqn(s); + const char *subsysnqn = nvme_subsystem_get_nqn(s), *app; struct json_object *subsys_obj = json_object_new_object(); struct json_object *port_array; @@ -360,6 +366,10 @@ static void json_update_subsys(struct json_object *subsys_array, json_object_object_add(subsys_obj, "nqn", json_object_new_string(subsysnqn)); + app = nvme_subsystem_get_application(s); + if (app) + json_object_object_add(subsys_obj, "application", + json_object_new_string(app)); port_array = json_object_new_array(); nvme_subsystem_for_each_ctrl(s, c) { json_update_port(port_array, c); diff --git a/src/nvme/private.h b/src/nvme/private.h index 47ce7ca3..8fa9ccdc 100644 --- a/src/nvme/private.h +++ b/src/nvme/private.h @@ -104,6 +104,7 @@ struct nvme_subsystem { char *serial; char *firmware; char *subsystype; + char *application; }; struct nvme_host { diff --git a/src/nvme/tree.c b/src/nvme/tree.c index c7ade353..6f4e4bd1 100644 --- a/src/nvme/tree.c +++ b/src/nvme/tree.c @@ -316,6 +316,19 @@ const char *nvme_subsystem_get_type(nvme_subsystem_t s) return s->subsystype; } +const char *nvme_subsystem_get_application(nvme_subsystem_t s) +{ + return s->application; +} + +void nvme_subsystem_set_application(nvme_subsystem_t s, const char *a) +{ + if (s->application) + free(s->application); + if (a) + s->application = strdup(a); +} + nvme_ctrl_t nvme_subsystem_first_ctrl(nvme_subsystem_t s) { return list_top(&s->ctrls, struct nvme_ctrl, entry); diff --git a/src/nvme/tree.h b/src/nvme/tree.h index e4a5126c..57d2767e 100644 --- a/src/nvme/tree.h +++ b/src/nvme/tree.h @@ -1104,6 +1104,23 @@ const char *nvme_subsystem_get_name(nvme_subsystem_t s); */ const char *nvme_subsystem_get_type(nvme_subsystem_t s); +/** + * nvme_subsystem_get_application() - Return the application string + * @s: nvme_subsystem_t object + * + * Return: Managing application string or NULL if not set. + */ +const char *nvme_subsystem_get_application(nvme_subsystem_t s); + +/** + * nvme_subsystem_set_application() - Set the application string + * @s: nvme_subsystem_t object + * @a: application string + * + * Sets the managing application string for @s. + */ +void nvme_subsystem_set_application(nvme_subsystem_t s, const char *a); + /** * nvme_scan_topology() - Scan NVMe topology and apply filter * @r: nvme_root_t object