From edc2dc1276dc87992f04fb589d86d35b7ad6ba6c Mon Sep 17 00:00:00 2001 From: Jaeyun Jung Date: Thu, 7 Sep 2023 15:58:41 +0900 Subject: [PATCH] [Cmd] version info in buffer Add version info while sending and receiving buffer between edge connection. TODO: Now max memories in edge-data is 16. Check the limit when updating this definition. Signed-off-by: Jaeyun Jung --- src/libnnstreamer-edge/nnstreamer-edge-data.c | 17 ++++++++++++++++ .../nnstreamer-edge-internal.c | 20 +++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/libnnstreamer-edge/nnstreamer-edge-data.c b/src/libnnstreamer-edge/nnstreamer-edge-data.c index 39a6476..6abbe20 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-data.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-data.c @@ -22,6 +22,7 @@ typedef struct { uint32_t key; + uint64_t version; uint32_t num_mem; nns_size_t data_len[NNS_EDGE_DATA_LIMIT]; nns_size_t meta_len; @@ -543,6 +544,7 @@ nns_edge_data_serialize (nns_edge_data_h data_h, void **data, nns_size_t * len) data_len = 0; edata_header.key = NNS_EDGE_DATA_KEY; + edata_header.version = nns_edge_generate_version_key (); edata_header.num_mem = ed->num; for (n = 0; n < ed->num; n++) { edata_header.data_len[n] = ed->data[n].data_len; @@ -653,6 +655,21 @@ nns_edge_data_is_serialized (const void *data, const nns_size_t data_len) return NNS_EDGE_ERROR_INVALID_PARAMETER; } + if (!nns_edge_parse_version_key (header->version, NULL, NULL, NULL)) { + nns_edge_loge ("Invalid param, given data has invalid version."); + return NNS_EDGE_ERROR_INVALID_PARAMETER; + } + + /** + * @todo The number of memories in data. + * Total number of memories in edge-data should be less than NNS_EDGE_DATA_LIMIT. + * Fetch nns-edge version info and check allowed memories if NNS_EDGE_DATA_LIMIT is updated. + */ + if (header->num_mem > NNS_EDGE_DATA_LIMIT) { + nns_edge_loge ("Invalid param, given data has invalid memories."); + return NNS_EDGE_ERROR_INVALID_PARAMETER; + } + /* Check mem size */ total = sizeof (nns_edge_data_header_s) + header->meta_len; for (n = 0; n < header->num_mem; n++) diff --git a/src/libnnstreamer-edge/nnstreamer-edge-internal.c b/src/libnnstreamer-edge/nnstreamer-edge-internal.c index 5e602dd..c83b84e 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-internal.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-internal.c @@ -92,6 +92,7 @@ typedef struct { uint32_t magic; uint32_t cmd; /**< enum for query commands, see nns_edge_cmd_e. */ + uint64_t version; int64_t client_id; /* memory info */ @@ -284,6 +285,7 @@ _nns_edge_cmd_init (nns_edge_cmd_s * cmd, nns_edge_cmd_e c, int64_t cid) memset (cmd, 0, sizeof (nns_edge_cmd_s)); nns_edge_handle_set_magic (&cmd->info, NNS_EDGE_MAGIC); cmd->info.cmd = c; + cmd->info.version = nns_edge_generate_version_key (); cmd->info.client_id = cid; cmd->info.num = 0; cmd->info.meta_size = 0; @@ -309,8 +311,11 @@ _nns_edge_cmd_clear (nns_edge_cmd_s * cmd) SAFE_FREE (cmd->meta); - cmd->info.num = 0U; - cmd->info.meta_size = 0U; + cmd->info.cmd = _NNS_EDGE_CMD_ERROR; + cmd->info.version = 0; + cmd->info.client_id = 0; + cmd->info.num = 0; + cmd->info.meta_size = 0; } /** @@ -331,6 +336,17 @@ _nns_edge_cmd_is_valid (nns_edge_cmd_s * cmd) return false; } + if (!nns_edge_parse_version_key (cmd->info.version, NULL, NULL, NULL)) + return false; + + /** + * @todo The number of memories in data. + * Total number of memories in edge-data should be less than NNS_EDGE_DATA_LIMIT. + * Fetch nns-edge version info and check allowed memories if NNS_EDGE_DATA_LIMIT is updated. + */ + if (cmd->info.num > NNS_EDGE_DATA_LIMIT) + return false; + return true; } -- 2.34.1