]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Optimize prefix-list lookup for debug messages
authorDonatas Abraitis <donatas@opensourcerouting.org>
Mon, 20 Nov 2023 10:14:43 +0000 (12:14 +0200)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Wed, 22 Nov 2023 06:06:33 +0000 (08:06 +0200)
Pass prefix-list pointers at configuration time.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
bgpd/bgp_debug.c
bgpd/bgp_debug.h

index 059f921ed10abcca691b4f66685de02091afa5f4..138ffedb2956050628e1ed9c3bdc8ccd3058bbbd 100644 (file)
@@ -305,15 +305,26 @@ static void bgp_debug_list_add_entry(struct list *list, const char *host,
 
        if (host) {
                filter->host = XSTRDUP(MTYPE_BGP_DEBUG_STR, host);
+               filter->plist_name = NULL;
+               filter->plist_v4 = NULL;
+               filter->plist_v6 = NULL;
                filter->p = NULL;
        } else if (p) {
                filter->host = NULL;
+               filter->plist_name = NULL;
+               filter->plist_v4 = NULL;
+               filter->plist_v6 = NULL;
                filter->p = prefix_new();
                prefix_copy(filter->p, p);
        }
 
-       if (plist_name)
+       if (plist_name) {
                filter->plist_name = XSTRDUP(MTYPE_BGP_DEBUG_STR, plist_name);
+               filter->plist_v4 = prefix_list_lookup(AFI_IP,
+                                                     filter->plist_name);
+               filter->plist_v6 = prefix_list_lookup(AFI_IP6,
+                                                     filter->plist_name);
+       }
 
        listnode_add(list, filter);
 }
@@ -2560,8 +2571,8 @@ static bool bgp_debug_per_peer(char *host, const struct prefix *p,
                                struct prefix_list *plist;
                                afi_t afi = family2afi(p->family);
 
-                               plist = prefix_list_lookup(afi,
-                                                          filter->plist_name);
+                               plist = (afi == AFI_IP) ? filter->plist_v4
+                                                       : filter->plist_v6;
 
                                if (!plist)
                                        continue;
index 4e930c244ce44617b7b821af3cd64bb22d5ce8ce..1fc2a87e2ce1101097cc500ba0bc995cb56a468a 100644 (file)
@@ -97,6 +97,8 @@ extern struct list *bgp_debug_zebra_prefixes;
 struct bgp_debug_filter {
        char *host;
        char *plist_name;
+       struct prefix_list *plist_v4;
+       struct prefix_list *plist_v6;
        struct prefix *p;
 };