summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor Ryzhov <iryzhov@nfware.com>2024-02-12 19:34:33 +0100
committerIgor Ryzhov <iryzhov@nfware.com>2024-02-12 19:55:34 +0100
commit745a2bd8b3bb586f9b643a186b79f24e515548e8 (patch)
tree73334d4270cbcb3cc284b8ad73085b610800e879
parentMerge pull request #15358 from LabNConsulting/chopps/doc-update (diff)
downloadfrr-745a2bd8b3bb586f9b643a186b79f24e515548e8.tar.xz
frr-745a2bd8b3bb586f9b643a186b79f24e515548e8.zip
mgmtd: fix be_is_client_interested
Backend "subscribe" API allows daemons to dynamically register xpaths they are interested in. Such xpaths are not stored in hardcoded config/oper xpath arrays so this function fails to understand that a backend daemon is interested in them. Fix by using dynamic xpath maps instead which store both hardcoded and dynamic xpaths. Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
-rw-r--r--mgmtd/mgmt_be_adapter.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/mgmtd/mgmt_be_adapter.c b/mgmtd/mgmt_be_adapter.c
index f4353defe..d85d87b4b 100644
--- a/mgmtd/mgmt_be_adapter.c
+++ b/mgmtd/mgmt_be_adapter.c
@@ -925,22 +925,17 @@ uint64_t mgmt_be_interested_clients(const char *xpath, bool config)
static bool be_is_client_interested(const char *xpath,
enum mgmt_be_client_id id, bool config)
{
- const char *const *xpaths;
+ uint64_t clients;
assert(id < MGMTD_BE_CLIENT_ID_MAX);
__dbg("Checking client: %s for xpath: '%s'", mgmt_be_client_id2name(id),
xpath);
- xpaths = config ? be_client_config_xpaths[id]
- : be_client_oper_xpaths[id];
- if (xpaths) {
- for (; *xpaths; xpaths++) {
- if (mgmt_be_xpath_prefix(*xpaths, xpath)) {
- __dbg("xpath: %s: matched: %s", *xpaths, xpath);
- return true;
- }
- }
+ clients = mgmt_be_interested_clients(xpath, config);
+ if (IS_IDBIT_SET(clients, id)) {
+ __dbg("client: %s: interested", mgmt_be_client_id2name(id));
+ return true;
}
__dbg("client: %s: not interested", mgmt_be_client_id2name(id));