prefix_add() is only called by path_update() and path_update already
knows if the prefix exists or not (by calling prefix_get()). So doing
the same check again in prefix_add() is silly and actually rather
expensive with lots of peers. Just alloc and link the prefix instead.

OK?
-- 
:wq Claudio

Index: rde_rib.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde_rib.c,v
retrieving revision 1.193
diff -u -p -r1.193 rde_rib.c
--- rde_rib.c   20 Jun 2019 13:38:21 -0000      1.193
+++ rde_rib.c   20 Jun 2019 16:45:34 -0000
@@ -922,24 +922,9 @@ prefix_add(struct bgpd_addr *prefix, int
        if (re == NULL)
                re = rib_add(rib, prefix, prefixlen);
 
-       p = prefix_bypeer(re, peer);
-       if (p == NULL) {
-               p = prefix_alloc();
-               prefix_link(p, re, peer, asp, comm, nexthop, nhflags, vstate);
-               return (1);
-       } else {
-               if (prefix_aspath(p) != asp ||
-                   prefix_communities(p) != comm ||
-                   prefix_nexthop(p) != nexthop ||
-                   prefix_nhflags(p) != nhflags) {
-                       /* prefix metadata changed therefor move */
-                       return (prefix_move(p, peer, asp, comm, nexthop,
-                           nhflags, vstate));
-               }
-               p->lastchange = time(NULL);
-               p->validation_state = vstate;
-               return (0);
-       }
+       p = prefix_alloc();
+       prefix_link(p, re, peer, asp, comm, nexthop, nhflags, vstate);
+       return (1);
 }
 
 /*

Reply via email to