summaryrefslogtreecommitdiffstats
path: root/lib/mgmt_msg_native.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mgmt_msg_native.c')
-rw-r--r--lib/mgmt_msg_native.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/mgmt_msg_native.c b/lib/mgmt_msg_native.c
index 39ce9aba..b85c7d1b 100644
--- a/lib/mgmt_msg_native.c
+++ b/lib/mgmt_msg_native.c
@@ -6,6 +6,7 @@
*
*/
#include <zebra.h>
+#include "darr.h"
#include "mgmt_msg_native.h"
DEFINE_MGROUP(MSG_NATIVE, "Native message allocations");
@@ -18,6 +19,33 @@ DEFINE_MTYPE(MSG_NATIVE, MSG_NATIVE_EDIT, "native edit msg");
DEFINE_MTYPE(MSG_NATIVE, MSG_NATIVE_EDIT_REPLY, "native edit reply msg");
DEFINE_MTYPE(MSG_NATIVE, MSG_NATIVE_RPC, "native RPC msg");
DEFINE_MTYPE(MSG_NATIVE, MSG_NATIVE_RPC_REPLY, "native RPC reply msg");
+DEFINE_MTYPE(MSG_NATIVE, MSG_NATIVE_SESSION_REQ, "native session-req msg");
+DEFINE_MTYPE(MSG_NATIVE, MSG_NATIVE_SESSION_REPLY, "native session-reply msg");
+
+
+size_t mgmt_msg_min_sizes[] = {
+ [MGMT_MSG_CODE_ERROR] = sizeof(struct mgmt_msg_error),
+ [MGMT_MSG_CODE_GET_TREE] = sizeof(struct mgmt_msg_get_tree),
+ [MGMT_MSG_CODE_TREE_DATA] = sizeof(struct mgmt_msg_tree_data),
+ [MGMT_MSG_CODE_GET_DATA] = sizeof(struct mgmt_msg_get_data),
+ [MGMT_MSG_CODE_NOTIFY] = sizeof(struct mgmt_msg_notify_data),
+ [MGMT_MSG_CODE_EDIT] = sizeof(struct mgmt_msg_edit),
+ [MGMT_MSG_CODE_EDIT_REPLY] = sizeof(struct mgmt_msg_edit_reply),
+ [MGMT_MSG_CODE_RPC] = sizeof(struct mgmt_msg_rpc),
+ [MGMT_MSG_CODE_RPC_REPLY] = sizeof(struct mgmt_msg_rpc_reply),
+ [MGMT_MSG_CODE_NOTIFY_SELECT] = sizeof(struct mgmt_msg_notify_select),
+ [MGMT_MSG_CODE_SESSION_REQ] = sizeof(struct mgmt_msg_session_req),
+ [MGMT_MSG_CODE_SESSION_REPLY] = sizeof(struct mgmt_msg_session_reply),
+};
+size_t nmgmt_msg_min_sizes = sizeof(mgmt_msg_min_sizes) /
+ sizeof(*mgmt_msg_min_sizes);
+
+size_t mgmt_msg_get_min_size(uint code)
+{
+ if (code >= nmgmt_msg_min_sizes)
+ return 0;
+ return mgmt_msg_min_sizes[code];
+}
int vmgmt_msg_native_send_error(struct msg_conn *conn, uint64_t sess_or_txn_id,
uint64_t req_id, bool short_circuit_ok,
@@ -50,3 +78,20 @@ int vmgmt_msg_native_send_error(struct msg_conn *conn, uint64_t sess_or_txn_id,
mgmt_msg_native_free_msg(msg);
return ret;
}
+
+const char **_mgmt_msg_native_strings_decode(const void *_sdata, int sdlen)
+{
+ const char *sdata = _sdata;
+ const char **strings = NULL;
+ int len;
+
+ if (sdata[sdlen - 1] != 0)
+ return NULL;
+
+ for (; sdlen; sdata += len, sdlen -= len) {
+ *darr_append(strings) = darr_strdup(sdata);
+ len = 1 + darr_strlen(strings[darr_lasti(strings)]);
+ }
+
+ return strings;
+}