mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-30 22:25:41 +00:00
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>
This commit is contained in:
parent
24ca4f408b
commit
745a2bd8b3
@ -925,22 +925,17 @@ uint64_t mgmt_be_interested_clients(const char *xpath, bool config)
|
|||||||
static bool be_is_client_interested(const char *xpath,
|
static bool be_is_client_interested(const char *xpath,
|
||||||
enum mgmt_be_client_id id, bool config)
|
enum mgmt_be_client_id id, bool config)
|
||||||
{
|
{
|
||||||
const char *const *xpaths;
|
uint64_t clients;
|
||||||
|
|
||||||
assert(id < MGMTD_BE_CLIENT_ID_MAX);
|
assert(id < MGMTD_BE_CLIENT_ID_MAX);
|
||||||
|
|
||||||
__dbg("Checking client: %s for xpath: '%s'", mgmt_be_client_id2name(id),
|
__dbg("Checking client: %s for xpath: '%s'", mgmt_be_client_id2name(id),
|
||||||
xpath);
|
xpath);
|
||||||
|
|
||||||
xpaths = config ? be_client_config_xpaths[id]
|
clients = mgmt_be_interested_clients(xpath, config);
|
||||||
: be_client_oper_xpaths[id];
|
if (IS_IDBIT_SET(clients, id)) {
|
||||||
if (xpaths) {
|
__dbg("client: %s: interested", mgmt_be_client_id2name(id));
|
||||||
for (; *xpaths; xpaths++) {
|
return true;
|
||||||
if (mgmt_be_xpath_prefix(*xpaths, xpath)) {
|
|
||||||
__dbg("xpath: %s: matched: %s", *xpaths, xpath);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__dbg("client: %s: not interested", mgmt_be_client_id2name(id));
|
__dbg("client: %s: not interested", mgmt_be_client_id2name(id));
|
||||||
|
Loading…
Reference in New Issue
Block a user