Hi,
If you have done, like most ConfD examples do, a maapi_load_schemas() or confd_load_schemas() (see confd_lib_maapi(3) manual page), information for all namespaces loaded into ConfD is then made available.
In your get_elem() callback you can then for example do something like:
struct confd_cs_node *csp;
char *name;
csp = confd_find_cs_node(keypath, keypath->len);
name = confd_hash2str(csp->tag);
fprintf(stderr, "\nNode name: %s\n", name);
See confd_types(3) manual page, section USING SCHEMA INFORMATION for more.
If we put the above into the examples.confd/intro/5-c_stats example and do a show arpentries we get something like this in the libconfd trace mixed with the printf from the dataprovider application:
TRACE Connected (maapi) to ConfD
TRACE MAAPI_LOAD_ALL_NS
TRACE MAAPI_LOAD_HASH_DB
TRACE Connected (dp) to ConfD
TRACE Received daemon id 0
TRACE Connected (dp) to ConfD
TRACE Picked up old user session: 11 for user:system ctx:system
TRACE Picked up old user session: 10 for user:system ctx:system
TRACE Picked up old user session: 1 for user:system ctx:system
TRACE New user session: 12 for user:admin ctx:cli --> CONFD_OK
TRACE CALL trans init(thandle=7,mode="r",db=running) --> CONFD_OK
TRACE CALL data get_next(thandle=7, /arpentries/arpe, -1) --> CONFD_OK
TRACE CALL data get_next(thandle=7, /arpentries/arpe, -1) --> CONFD_OK
TRACE CALL data get_elem(thandle=7,/arpentries/arpe{192.168.1.1 en0}/hwaddr)
Node name: hwaddr
("a:36:dd:dd:66:f6") --> CONFD_OK
TRACE CALL data get_elem(thandle=7,/arpentries/arpe{192.168.1.1 en0}/permanent)
Node name: permanent
(true) --> CONFD_OK
TRACE CALL data get_elem(thandle=7,/arpentries/arpe{192.168.1.1 en0}/published)
Node name: published
(false) --> CONFD_OK
TRACE CALL data get_next(thandle=7, /arpentries/arpe, 140385450983952) --> CONFD_OK
TRACE CALL data get_elem(thandle=7,/arpentries/arpe{10.0.0.1 en0}/hwaddr)
Node name: hwaddr
("2:0:5d:aa:1:1") --> CONFD_OK
TRACE CALL data get_elem(thandle=7,/arpentries/arpe{10.0.0.1 en0}/permanent)
Node name: permanent
(true) --> CONFD_OK
TRACE CALL data get_elem(thandle=7,/arpentries/arpe{10.0.0.1 en0}/published)
Node name: published
(false) --> CONFD_OK
TRACE CALL data get_next(thandle=7, /arpentries/arpe, 140385450984016) --> CONFD_OK
TRACE CALL data get_elem(thandle=7,/arpentries/arpe{10.0.0.251 en0}/hwaddr)
Node name: hwaddr
("1:0:5e:1:1:fb") --> CONFD_OK
TRACE CALL data get_elem(thandle=7,/arpentries/arpe{10.0.0.251 en0}/permanent)
Node name: permanent
(true) --> CONFD_OK
TRACE CALL data get_elem(thandle=7,/arpentries/arpe{10.0.0.251 en0}/published)
Node name: published
(false) --> CONFD_OK
TRACE CALL data get_next(thandle=7, /arpentries/arpe, 0) --> CONFD_OK