diff options
Diffstat (limited to 'lib/memory_vty.c')
| -rw-r--r-- | lib/memory_vty.c | 231 |
1 files changed, 110 insertions, 121 deletions
diff --git a/lib/memory_vty.c b/lib/memory_vty.c index 6d63bc2d53..46dfa65739 100644 --- a/lib/memory_vty.c +++ b/lib/memory_vty.c @@ -38,43 +38,37 @@ #include "command.h" #ifdef HAVE_MALLINFO -static int -show_memory_mallinfo (struct vty *vty) +static int show_memory_mallinfo(struct vty *vty) { - struct mallinfo minfo = mallinfo(); - char buf[MTYPE_MEMSTR_LEN]; - - vty_out (vty, "System allocator statistics:%s", VTY_NEWLINE); - vty_out (vty, " Total heap allocated: %s%s", - mtype_memstr (buf, MTYPE_MEMSTR_LEN, minfo.arena), - VTY_NEWLINE); - vty_out (vty, " Holding block headers: %s%s", - mtype_memstr (buf, MTYPE_MEMSTR_LEN, minfo.hblkhd), - VTY_NEWLINE); - vty_out (vty, " Used small blocks: %s%s", - mtype_memstr (buf, MTYPE_MEMSTR_LEN, minfo.usmblks), - VTY_NEWLINE); - vty_out (vty, " Used ordinary blocks: %s%s", - mtype_memstr (buf, MTYPE_MEMSTR_LEN, minfo.uordblks), - VTY_NEWLINE); - vty_out (vty, " Free small blocks: %s%s", - mtype_memstr (buf, MTYPE_MEMSTR_LEN, minfo.fsmblks), - VTY_NEWLINE); - vty_out (vty, " Free ordinary blocks: %s%s", - mtype_memstr (buf, MTYPE_MEMSTR_LEN, minfo.fordblks), - VTY_NEWLINE); - vty_out (vty, " Ordinary blocks: %ld%s", - (unsigned long)minfo.ordblks, - VTY_NEWLINE); - vty_out (vty, " Small blocks: %ld%s", - (unsigned long)minfo.smblks, - VTY_NEWLINE); - vty_out (vty, " Holding blocks: %ld%s", - (unsigned long)minfo.hblks, - VTY_NEWLINE); - vty_out (vty, "(see system documentation for 'mallinfo' for meaning)%s", - VTY_NEWLINE); - return 1; + struct mallinfo minfo = mallinfo(); + char buf[MTYPE_MEMSTR_LEN]; + + vty_out(vty, "System allocator statistics:%s", VTY_NEWLINE); + vty_out(vty, " Total heap allocated: %s%s", + mtype_memstr(buf, MTYPE_MEMSTR_LEN, minfo.arena), VTY_NEWLINE); + vty_out(vty, " Holding block headers: %s%s", + mtype_memstr(buf, MTYPE_MEMSTR_LEN, minfo.hblkhd), VTY_NEWLINE); + vty_out(vty, " Used small blocks: %s%s", + mtype_memstr(buf, MTYPE_MEMSTR_LEN, minfo.usmblks), + VTY_NEWLINE); + vty_out(vty, " Used ordinary blocks: %s%s", + mtype_memstr(buf, MTYPE_MEMSTR_LEN, minfo.uordblks), + VTY_NEWLINE); + vty_out(vty, " Free small blocks: %s%s", + mtype_memstr(buf, MTYPE_MEMSTR_LEN, minfo.fsmblks), + VTY_NEWLINE); + vty_out(vty, " Free ordinary blocks: %s%s", + mtype_memstr(buf, MTYPE_MEMSTR_LEN, minfo.fordblks), + VTY_NEWLINE); + vty_out(vty, " Ordinary blocks: %ld%s", + (unsigned long)minfo.ordblks, VTY_NEWLINE); + vty_out(vty, " Small blocks: %ld%s", + (unsigned long)minfo.smblks, VTY_NEWLINE); + vty_out(vty, " Holding blocks: %ld%s", + (unsigned long)minfo.hblks, VTY_NEWLINE); + vty_out(vty, "(see system documentation for 'mallinfo' for meaning)%s", + VTY_NEWLINE); + return 1; } #endif /* HAVE_MALLINFO */ @@ -82,16 +76,18 @@ static int qmem_walker(void *arg, struct memgroup *mg, struct memtype *mt) { struct vty *vty = arg; if (!mt) - vty_out (vty, "--- qmem %s ---%s", mg->name, VTY_NEWLINE); + vty_out(vty, "--- qmem %s ---%s", mg->name, VTY_NEWLINE); else { if (mt->n_alloc != 0) { char size[32]; snprintf(size, sizeof(size), "%6zu", mt->size); - vty_out (vty, "%-30s: %10zu %s%s", - mt->name, mt->n_alloc, - mt->size == 0 ? "" : - mt->size == SIZE_VAR ? "(variably sized)" : - size, VTY_NEWLINE); + vty_out(vty, "%-30s: %10zu %s%s", mt->name, + mt->n_alloc, + mt->size == 0 ? "" + : mt->size == SIZE_VAR + ? "(variably sized)" + : size, + VTY_NEWLINE); } } return 0; @@ -105,11 +101,11 @@ DEFUN (show_memory, "Memory statistics\n") { #ifdef HAVE_MALLINFO - show_memory_mallinfo (vty); + show_memory_mallinfo(vty); #endif /* HAVE_MALLINFO */ - qmem_walk(qmem_walker, vty); - return CMD_SUCCESS; + qmem_walk(qmem_walker, vty); + return CMD_SUCCESS; } DEFUN (show_modules, @@ -118,49 +114,47 @@ DEFUN (show_modules, "Show running system information\n" "Loaded modules\n") { - struct frrmod_runtime *plug = frrmod_list; - - vty_out (vty, "%-12s %-25s %s%s%s", - "Module Name", "Version", "Description", - VTY_NEWLINE, VTY_NEWLINE); - while (plug) - { - const struct frrmod_info *i = plug->info; - - vty_out (vty, "%-12s %-25s %s%s", i->name, i->version, i->description, - VTY_NEWLINE); - if (plug->dl_handle) - { + struct frrmod_runtime *plug = frrmod_list; + + vty_out(vty, "%-12s %-25s %s%s%s", "Module Name", "Version", + "Description", VTY_NEWLINE, VTY_NEWLINE); + while (plug) { + const struct frrmod_info *i = plug->info; + + vty_out(vty, "%-12s %-25s %s%s", i->name, i->version, + i->description, VTY_NEWLINE); + if (plug->dl_handle) { #ifdef HAVE_DLINFO_ORIGIN - char origin[MAXPATHLEN] = ""; - dlinfo (plug->dl_handle, RTLD_DI_ORIGIN, &origin); -# ifdef HAVE_DLINFO_LINKMAP - const char *name; - struct link_map *lm = NULL; - dlinfo (plug->dl_handle, RTLD_DI_LINKMAP, &lm); - if (lm) - { - name = strrchr(lm->l_name, '/'); - name = name ? name + 1 : lm->l_name; - vty_out (vty, "\tfrom: %s/%s%s", origin, name, VTY_NEWLINE); - } -# else - vty_out (vty, "\tfrom: %s %s", origin, plug->load_name, VTY_NEWLINE); -# endif + char origin[MAXPATHLEN] = ""; + dlinfo(plug->dl_handle, RTLD_DI_ORIGIN, &origin); +#ifdef HAVE_DLINFO_LINKMAP + const char *name; + struct link_map *lm = NULL; + dlinfo(plug->dl_handle, RTLD_DI_LINKMAP, &lm); + if (lm) { + name = strrchr(lm->l_name, '/'); + name = name ? name + 1 : lm->l_name; + vty_out(vty, "\tfrom: %s/%s%s", origin, name, + VTY_NEWLINE); + } +#else + vty_out(vty, "\tfrom: %s %s", origin, plug->load_name, + VTY_NEWLINE); +#endif #else - vty_out (vty, "\tfrom: %s%s", plug->load_name, VTY_NEWLINE); + vty_out(vty, "\tfrom: %s%s", plug->load_name, + VTY_NEWLINE); #endif - } - plug = plug->next; - } - return CMD_SUCCESS; + } + plug = plug->next; + } + return CMD_SUCCESS; } -void -memory_init (void) +void memory_init(void) { - install_element (VIEW_NODE, &show_memory_cmd); - install_element (VIEW_NODE, &show_modules_cmd); + install_element(VIEW_NODE, &show_memory_cmd); + install_element(VIEW_NODE, &show_modules_cmd); } /* Stats querying from users */ @@ -171,44 +165,39 @@ memory_init (void) * The pointer returned may be NULL (indicating an error) * or point to the given buffer, or point to static storage. */ -const char * -mtype_memstr (char *buf, size_t len, unsigned long bytes) +const char *mtype_memstr(char *buf, size_t len, unsigned long bytes) { - unsigned int m, k; - - /* easy cases */ - if (!bytes) - return "0 bytes"; - if (bytes == 1) - return "1 byte"; - - /* - * When we pass the 2gb barrier mallinfo() can no longer report - * correct data so it just does something odd... - * Reporting like Terrabytes of data. Which makes users... - * edgy.. yes edgy that's the term for it. - * So let's just give up gracefully - */ - if (bytes > 0x7fffffff) - return "> 2GB"; - - m = bytes >> 20; - k = bytes >> 10; - - if (m > 10) - { - if (bytes & (1 << 19)) - m++; - snprintf (buf, len, "%d MiB", m); - } - else if (k > 10) - { - if (bytes & (1 << 9)) - k++; - snprintf (buf, len, "%d KiB", k); - } - else - snprintf (buf, len, "%ld bytes", bytes); - - return buf; + unsigned int m, k; + + /* easy cases */ + if (!bytes) + return "0 bytes"; + if (bytes == 1) + return "1 byte"; + + /* + * When we pass the 2gb barrier mallinfo() can no longer report + * correct data so it just does something odd... + * Reporting like Terrabytes of data. Which makes users... + * edgy.. yes edgy that's the term for it. + * So let's just give up gracefully + */ + if (bytes > 0x7fffffff) + return "> 2GB"; + + m = bytes >> 20; + k = bytes >> 10; + + if (m > 10) { + if (bytes & (1 << 19)) + m++; + snprintf(buf, len, "%d MiB", m); + } else if (k > 10) { + if (bytes & (1 << 9)) + k++; + snprintf(buf, len, "%d KiB", k); + } else + snprintf(buf, len, "%ld bytes", bytes); + + return buf; } |
