static int
print_mem(SSL* ssl, struct worker* worker, struct daemon* daemon)
{
- int m;
size_t msg, rrset, val, iter, respip;
#ifdef CLIENT_SUBNET
size_t subnet = 0;
#endif /* USE_IPSECMOD */
msg = slabhash_get_mem(daemon->env->msg_cache);
rrset = slabhash_get_mem(&daemon->env->rrset_cache->table);
- val=0;
- iter=0;
- respip=0;
- m = modstack_find(&worker->env.mesh->mods, "validator");
- if(m != -1) {
- fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->
- mods.mod[m]->get_mem));
- val = (*worker->env.mesh->mods.mod[m]->get_mem)
- (&worker->env, m);
- }
- m = modstack_find(&worker->env.mesh->mods, "iterator");
- if(m != -1) {
- fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->
- mods.mod[m]->get_mem));
- iter = (*worker->env.mesh->mods.mod[m]->get_mem)
- (&worker->env, m);
- }
- m = modstack_find(&worker->env.mesh->mods, "respip");
- if(m != -1) {
- fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->
- mods.mod[m]->get_mem));
- respip = (*worker->env.mesh->mods.mod[m]->get_mem)
- (&worker->env, m);
- }
+ val = mod_get_mem(&worker->env, "validator");
+ iter = mod_get_mem(&worker->env, "iterator");
+ respip = mod_get_mem(&worker->env, "respip");
#ifdef CLIENT_SUBNET
- m = modstack_find(&worker->env.mesh->mods, "subnet");
- if(m != -1) {
- fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->
- mods.mod[m]->get_mem));
- subnet = (*worker->env.mesh->mods.mod[m]->get_mem)
- (&worker->env, m);
- }
+ subnet = mod_get_mem(&worker->env, "subnet");
#endif /* CLIENT_SUBNET */
#ifdef USE_IPSECMOD
- m = modstack_find(&worker->env.mesh->mods, "ipsecmod");
- if(m != -1) {
- fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->
- mods.mod[m]->get_mem));
- ipsecmod = (*worker->env.mesh->mods.mod[m]->get_mem)
- (&worker->env, m);
- }
+ ipsecmod = mod_get_mem(&worker->env, "ipsecmod");
#endif /* USE_IPSECMOD */
if(!print_longnum(ssl, "mem.cache.rrset"SQ, rrset))
- updated dependencies in the makefile.
- document trust-anchor-signaling in example config file.
- updated configure, dependencies and flex output.
+ - better module memory lookup, fix of unbound-control shm names for
+ module memory printout of statistics.
12 May 2017: Wouter
- Adjust servfail by iterator to not store in cache when serve-expired
long long iter;
long long subnet;
long long ipsecmod;
+ long long respip;
} mem;
};
}
return -1;
}
+
+size_t
+mod_get_mem(struct module_env* env, const char* name)
+{
+ int m = modstack_find(&env->mesh->mods, name);
+ if(m != -1) {
+ fptr_ok(fptr_whitelist_mod_get_mem(env->mesh->
+ mods.mod[m]->get_mem));
+ return (*env->mesh->mods.mod[m]->get_mem)(env, m);
+ }
+ return 0;
+}
*/
int modstack_find(struct module_stack* stack, const char* name);
+/** fetch memory for a module by name, returns 0 if module not there */
+size_t mod_get_mem(struct module_env* env, const char* name);
+
#endif /* SERVICES_MODSTACK_H */
{
PR_LL("mem.cache.rrset", shm_stat->mem.rrset);
PR_LL("mem.cache.message", shm_stat->mem.msg);
- PR_LL("mem.cache.iterator", shm_stat->mem.iter);
- PR_LL("mem.cache.validator", shm_stat->mem.val);
+ PR_LL("mem.mod.iterator", shm_stat->mem.iter);
+ PR_LL("mem.mod.validator", shm_stat->mem.val);
+ PR_LL("mem.mod.respip", shm_stat->mem.respip);
#ifdef CLIENT_SUBNET
- PR_LL("mem.cache.subnet", shm_stat->mem.subnet);
+ PR_LL("mem.mod.subnet", shm_stat->mem.subnet);
+#endif
+#ifdef USE_IPSECMOD
+ PR_LL("mem.mod.ipsecmod", shm_stat->mem.ipsecmod);
#endif
}
struct ub_shm_stat_info *shm_stat;
struct ub_stats_info *stat_total;
struct ub_stats_info *stat_info;
- int modstack;
int offset;
verbose(VERB_DETAIL, "SHM run - worker [%d] - daemon [%p] - timenow(%u) - timeboot(%u)",
shm_stat->mem.msg = (long long)slabhash_get_mem(worker->env.msg_cache);
shm_stat->mem.rrset = (long long)slabhash_get_mem(&worker->env.rrset_cache->table);
- shm_stat->mem.val = 0;
- shm_stat->mem.iter = 0;
-
- modstack = modstack_find(&worker->env.mesh->mods, "validator");
- if(modstack != -1) {
- fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->mods.mod[modstack]->get_mem));
- shm_stat->mem.val = (long long)(*worker->env.mesh->mods.mod[modstack]->get_mem)(&worker->env, modstack);
- }
- modstack = modstack_find(&worker->env.mesh->mods, "iterator");
- if(modstack != -1) {
- fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->mods.mod[modstack]->get_mem));
- shm_stat->mem.iter = (long long)(*worker->env.mesh->mods.mod[modstack]->get_mem)(&worker->env, modstack);
- }
+ shm_stat->mem.val = (long long)mod_get_mem(&worker->env,
+ "validator");
+ shm_stat->mem.iter = (long long)mod_get_mem(&worker->env,
+ "iterator");
+ shm_stat->mem.respip = (long long)mod_get_mem(&worker->env,
+ "respip");
+
/* subnet mem value is available in shm, also when not enabled,
* to make the struct easier to memmap by other applications,
* independent of the configuration of unbound */
shm_stat->mem.subnet = 0;
#ifdef CLIENT_SUBNET
- modstack = modstack_find(&worker->env.mesh->mods, "subnet");
- if(modstack != -1) {
- fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->mods.mod[modstack]->get_mem));
- shm_stat->mem.subnet = (long long)(*worker->env.mesh->mods.mod[modstack]->get_mem)(&worker->env, modstack);
- }
+ shm_stat->mem.subnet = (long long)mod_get_mem(&worker->env,
+ "subnet");
#endif
/* ipsecmod mem value is available in shm, also when not enabled,
* to make the struct easier to memmap by other applications,
* independent of the configuration of unbound */
shm_stat->mem.ipsecmod = 0;
#ifdef USE_IPSECMOD
- modstack = modstack_find(&worker->env.mesh->mods, "ipsecmod");
- if(modstack != -1) {
- fptr_ok(fptr_whitelist_mod_get_mem(worker->env.mesh->mods.mod[modstack]->get_mem));
- shm_stat->mem.ipsecmod = (*worker->env.mesh->mods.mod[modstack]->get_mem)(&worker->env, modstack);
- }
+ shm_stat->mem.ipsecmod = (long long)mod_get_mem(&worker->env,
+ "ipsecmod");
#endif
}