Make bgpctl less depend on bgpd internals. Track the size of memory used
by prefixes explicitly. This will allow to move the various pt_entry
structs out of rde.h.

-- 
:wq Claudio

Index: bgpctl/bgpctl.h
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.h,v
retrieving revision 1.19
diff -u -p -r1.19 bgpctl.h
--- bgpctl/bgpctl.h     24 Jan 2023 11:29:34 -0000      1.19
+++ bgpctl/bgpctl.h     28 Mar 2023 11:44:36 -0000
@@ -38,7 +38,6 @@ struct output {
 };
 
 extern const struct output show_output, json_output, ometric_output;
-extern const size_t pt_sizes[];
 
 #define EOL0(flag)     ((flag & F_CTL_SSV) ? ';' : '\n')
 
Index: bgpctl/output.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/output.c,v
retrieving revision 1.37
diff -u -p -r1.37 output.c
--- bgpctl/output.c     9 Mar 2023 13:13:14 -0000       1.37
+++ bgpctl/output.c     28 Mar 2023 11:44:36 -0000
@@ -33,8 +33,6 @@
 #include "bgpctl.h"
 #include "parser.h"
 
-const size_t  pt_sizes[AID_MAX] = AID_PTSIZE;
-
 static void
 show_head(struct parse_result *res)
 {
@@ -994,10 +992,10 @@ show_rib_mem(struct rde_memstats *stats)
        for (i = 0; i < AID_MAX; i++) {
                if (stats->pt_cnt[i] == 0)
                        continue;
-               pts += stats->pt_cnt[i] * pt_sizes[i];
+               pts += stats->pt_size[i];
                printf("%10lld %s network entries using %s of memory\n",
                    stats->pt_cnt[i], aid_vals[i].name,
-                   fmt_mem(stats->pt_cnt[i] * pt_sizes[i]));
+                   fmt_mem(stats->pt_size[i]));
        }
        printf("%10lld rib entries using %s of memory\n",
            stats->rib_cnt, fmt_mem(stats->rib_cnt *
Index: bgpctl/output_json.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/output_json.c,v
retrieving revision 1.30
diff -u -p -r1.30 output_json.c
--- bgpctl/output_json.c        9 Mar 2023 13:13:14 -0000       1.30
+++ bgpctl/output_json.c        28 Mar 2023 11:44:36 -0000
@@ -939,9 +939,9 @@ json_rib_mem(struct rde_memstats *stats)
        for (i = 0; i < AID_MAX; i++) {
                if (stats->pt_cnt[i] == 0)
                        continue;
-               pts += stats->pt_cnt[i] * pt_sizes[i];
+               pts += stats->pt_size[i];
                json_rib_mem_element(aid_vals[i].name, stats->pt_cnt[i],
-                   stats->pt_cnt[i] * pt_sizes[i], UINT64_MAX);
+                   stats->pt_size[i], UINT64_MAX);
        }
        json_rib_mem_element("rib", stats->rib_cnt,
            stats->rib_cnt * sizeof(struct rib_entry), UINT64_MAX);
Index: bgpctl/output_ometric.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/output_ometric.c,v
retrieving revision 1.10
diff -u -p -r1.10 output_ometric.c
--- bgpctl/output_ometric.c     12 Dec 2022 09:51:04 -0000      1.10
+++ bgpctl/output_ometric.c     28 Mar 2023 11:44:36 -0000
@@ -275,9 +275,9 @@ ometric_rib_mem(struct rde_memstats *sta
        for (i = 0; i < AID_MAX; i++) {
                if (stats->pt_cnt[i] == 0)
                        continue;
-               pts += stats->pt_cnt[i] * pt_sizes[i];
+               pts += stats->pt_size[i];
                ometric_rib_mem_element(aid_vals[i].name, stats->pt_cnt[i],
-                   stats->pt_cnt[i] * pt_sizes[i], UINT64_MAX);
+                   stats->pt_size[i], UINT64_MAX);
        }
        ometric_rib_mem_element("rib", stats->rib_cnt,
            stats->rib_cnt * sizeof(struct rib_entry), UINT64_MAX);
Index: bgpd/bgpd.h
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.h,v
retrieving revision 1.465
diff -u -p -r1.465 bgpd.h
--- bgpd/bgpd.h 13 Mar 2023 16:52:41 -0000      1.465
+++ bgpd/bgpd.h 28 Mar 2023 11:44:12 -0000
@@ -1246,6 +1246,7 @@ struct rde_memstats {
        long long       prefix_cnt;
        long long       rib_cnt;
        long long       pt_cnt[AID_MAX];
+       long long       pt_size[AID_MAX];
        long long       nexthop_cnt;
        long long       aspath_cnt;
        long long       aspath_size;
Index: bgpd/rde_prefix.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde_prefix.c,v
retrieving revision 1.42
diff -u -p -r1.42 rde_prefix.c
--- bgpd/rde_prefix.c   17 Aug 2022 15:15:26 -0000      1.42
+++ bgpd/rde_prefix.c   28 Mar 2023 11:44:12 -0000
@@ -310,6 +310,7 @@ pt_alloc(struct pt_entry *op)
        if (p == NULL)
                fatal("pt_alloc");
        rdemem.pt_cnt[op->aid]++;
+       rdemem.pt_size[op->aid] += pt_sizes[op->aid];
        memcpy(p, op, pt_sizes[op->aid]);
 
        return (p);
@@ -319,5 +320,6 @@ static void
 pt_free(struct pt_entry *pte)
 {
        rdemem.pt_cnt[pte->aid]--;
+       rdemem.pt_size[pte->aid] -= pt_sizes[pte->aid];
        free(pte);
 }

Reply via email to