]> git.proxmox.com Git - mirror_frr.git/blobdiff - bgpd/rfapi/rfapi_rib.c
bgpd: Convert `struct bgp_info` to `struct bgp_path_info`
[mirror_frr.git] / bgpd / rfapi / rfapi_rib.c
index bd79518bfd75c7caa2d4d19d39508faf8ddaed49..b0f71fde5cbf6d496d78ec8d81e849f74af51029 100644 (file)
  * Purpose:    maintain per-nve ribs and generate change lists
  */
 
-#include <errno.h>
-
 #include "lib/zebra.h"
 #include "lib/prefix.h"
-#include "lib/table.h"
+#include "lib/agg_table.h"
 #include "lib/vty.h"
 #include "lib/memory.h"
 #include "lib/log.h"
@@ -150,10 +148,10 @@ void rfapiRibCheckCounts(
 
                for (afi = AFI_IP; afi < AFI_MAX; ++afi) {
 
-                       struct route_node *rn;
+                       struct agg_node *rn;
 
-                       for (rn = route_top(rfd->rib[afi]); rn;
-                            rn = route_next(rn)) {
+                       for (rn = agg_route_top(rfd->rib[afi]); rn;
+                            rn = agg_route_next(rn)) {
 
                                struct skiplist *sl = rn->info;
                                struct skiplist *dsl = rn->aggregate;
@@ -175,8 +173,8 @@ void rfapiRibCheckCounts(
                                        ++t_pfx_deleted;
                                }
                        }
-                       for (rn = route_top(rfd->rib_pending[afi]); rn;
-                            rn = route_next(rn)) {
+                       for (rn = agg_route_top(rfd->rib_pending[afi]); rn;
+                            rn = agg_route_next(rn)) {
 
                                struct list *l = rn->info; /* sorted by cost */
                                struct skiplist *sl = rn->aggregate;
@@ -286,7 +284,7 @@ struct rfapi_rib_tcb {
        struct rfapi_descriptor *rfd;
        struct skiplist *sl;
        struct rfapi_info *ri;
-       struct route_node *rn;
+       struct agg_node *rn;
        int flags;
 #define RFAPI_RIB_TCB_FLAG_DELETED     0x00000001
 };
@@ -325,7 +323,7 @@ static int rfapiRibExpireTimer(struct thread *t)
                        RFAPI_RIB_PREFIX_COUNT_DECR(tcb->rfd, bgp->rfapi);
                }
                skiplist_free(tcb->sl);
-               route_unlock_node(tcb->rn);
+               agg_unlock_node(tcb->rn);
        }
 
        XFREE(MTYPE_RFAPI_RECENT_DELETE, tcb);
@@ -335,10 +333,10 @@ static int rfapiRibExpireTimer(struct thread *t)
        return 0;
 }
 
-static void
-rfapiRibStartTimer(struct rfapi_descriptor *rfd, struct rfapi_info *ri,
-                  struct route_node *rn, /* route node attached to */
-                  int deleted)
+static void rfapiRibStartTimer(struct rfapi_descriptor *rfd,
+                              struct rfapi_info *ri,
+                              struct agg_node *rn, /* route node attached to */
+                              int deleted)
 {
        struct thread *t = ri->timer;
        struct rfapi_rib_tcb *tcb = NULL;
@@ -486,12 +484,12 @@ void rfapiRibClear(struct rfapi_descriptor *rfd)
 #endif
 
        for (afi = AFI_IP; afi < AFI_MAX; ++afi) {
-               struct route_node *pn;
-               struct route_node *rn;
+               struct agg_node *pn;
+               struct agg_node *rn;
 
                if (rfd->rib_pending[afi]) {
-                       for (pn = route_top(rfd->rib_pending[afi]); pn;
-                            pn = route_next(pn)) {
+                       for (pn = agg_route_top(rfd->rib_pending[afi]); pn;
+                            pn = agg_route_next(pn)) {
                                if (pn->aggregate) {
                                        /*
                                         * free references into the rfapi_info
@@ -502,7 +500,7 @@ void rfapiRibClear(struct rfapi_descriptor *rfd)
                                                (struct skiplist
                                                         *)(pn->aggregate));
                                        pn->aggregate = NULL;
-                                       route_unlock_node(
+                                       agg_unlock_node(
                                                pn); /* skiplist deleted */
                                }
                                /*
@@ -510,18 +508,19 @@ void rfapiRibClear(struct rfapi_descriptor *rfd)
                                 */
                                if (pn->info) {
                                        if (pn->info != (void *)1) {
-                                               list_delete_and_null(
-                                                       (struct list **)(&pn->info));
+                                               list_delete(
+                                                       (struct list *
+                                                                *)(&pn->info));
                                        }
                                        pn->info = NULL;
                                        /* linklist or 1 deleted */
-                                       route_unlock_node(pn);
+                                       agg_unlock_node(pn);
                                }
                        }
                }
                if (rfd->rib[afi]) {
-                       for (rn = route_top(rfd->rib[afi]); rn;
-                            rn = route_next(rn)) {
+                       for (rn = agg_route_top(rfd->rib[afi]); rn;
+                            rn = agg_route_next(rn)) {
                                if (rn->info) {
 
                                        struct rfapi_info *ri;
@@ -540,7 +539,7 @@ void rfapiRibClear(struct rfapi_descriptor *rfd)
                                        skiplist_free(
                                                (struct skiplist *)rn->info);
                                        rn->info = NULL;
-                                       route_unlock_node(rn);
+                                       agg_unlock_node(rn);
                                        RFAPI_RIB_PREFIX_COUNT_DECR(rfd,
                                                                    bgp->rfapi);
                                }
@@ -565,15 +564,13 @@ void rfapiRibClear(struct rfapi_descriptor *rfd)
                                                         *)(rn->aggregate));
 
                                        rn->aggregate = NULL;
-                                       route_unlock_node(rn);
+                                       agg_unlock_node(rn);
                                }
                        }
                }
        }
-       if (rfd->updated_responses_queue) {
-               work_queue_free(rfd->updated_responses_queue);
-               rfd->updated_responses_queue = NULL;
-       }
+       if (rfd->updated_responses_queue)
+               work_queue_free_and_null(&rfd->updated_responses_queue);
 }
 
 /*
@@ -602,23 +599,26 @@ void rfapiRibFree(struct rfapi_descriptor *rfd)
         * Free radix trees
         */
        for (afi = AFI_IP; afi < AFI_MAX; ++afi) {
-               route_table_finish(rfd->rib_pending[afi]);
+               if (rfd->rib_pending[afi])
+                       agg_table_finish(rfd->rib_pending[afi]);
                rfd->rib_pending[afi] = NULL;
 
-               route_table_finish(rfd->rib[afi]);
+               if (rfd->rib[afi])
+                       agg_table_finish(rfd->rib[afi]);
                rfd->rib[afi] = NULL;
 
-               /* NB route_table_finish frees only prefix nodes, not chained
+               /* NB agg_table_finish frees only prefix nodes, not chained
                 * info */
-               route_table_finish(rfd->rsp_times[afi]);
+               if (rfd->rsp_times[afi])
+                       agg_table_finish(rfd->rsp_times[afi]);
                rfd->rib[afi] = NULL;
        }
 }
 
 /*
- * Copies struct bgp_info to struct rfapi_info, except for rk fields and un
+ * Copies struct bgp_path_info to struct rfapi_info, except for rk fields and un
  */
-static void rfapiRibBi2Ri(struct bgp_info *bi, struct rfapi_info *ri,
+static void rfapiRibBi2Ri(struct bgp_path_info *bi, struct rfapi_info *ri,
                          uint32_t lifetime)
 {
        struct bgp_attr_encap_subtlv *pEncap;
@@ -697,7 +697,7 @@ static void rfapiRibBi2Ri(struct bgp_info *bi, struct rfapi_info *ri,
                vo->v.l2addr.local_nve_id = bi->extra->vnc.import.rd.val[1];
 
                /* label comes from MP_REACH_NLRI label */
-               vo->v.l2addr.label = decode_label(&bi->extra->label);
+               vo->v.l2addr.label = decode_label(&bi->extra->label[0]);
 
                rfapi_vn_options_free(
                        ri->vn_options); /* maybe free old version */
@@ -731,15 +731,15 @@ static void rfapiRibBi2Ri(struct bgp_info *bi, struct rfapi_info *ri,
  *     !0      do not include route in response
  */
 int rfapiRibPreloadBi(
-       struct route_node *rfd_rib_node, /* NULL = don't preload or filter */
+       struct agg_node *rfd_rib_node, /* NULL = don't preload or filter */
        struct prefix *pfx_vn, struct prefix *pfx_un, uint32_t lifetime,
-       struct bgp_info *bi)
+       struct bgp_path_info *bi)
 {
        struct rfapi_descriptor *rfd;
        struct skiplist *slRibPt = NULL;
        struct rfapi_info *ori = NULL;
        struct rfapi_rib_key rk;
-       struct route_node *trn;
+       struct agg_node *trn;
        afi_t afi;
 
        if (!rfd_rib_node)
@@ -747,7 +747,7 @@ int rfapiRibPreloadBi(
 
        afi = family2afi(rfd_rib_node->p.family);
 
-       rfd = (struct rfapi_descriptor *)(rfd_rib_node->table->info);
+       rfd = agg_get_table_info(agg_get_table(rfd_rib_node));
 
        memset((void *)&rk, 0, sizeof(rk));
        rk.vn = *pfx_vn;
@@ -785,7 +785,7 @@ int rfapiRibPreloadBi(
                if (!slRibPt) {
                        slRibPt = skiplist_new(0, rfapi_rib_key_cmp, NULL);
                        rfd_rib_node->info = slRibPt;
-                       route_lock_node(rfd_rib_node);
+                       agg_lock_node(rfd_rib_node);
                        RFAPI_RIB_PREFIX_COUNT_INCR(rfd, rfd->bgp->rfapi);
                }
                skiplist_insert(slRibPt, &ori->rk, ori);
@@ -803,11 +803,11 @@ int rfapiRibPreloadBi(
        /*
         * Update last sent time for prefix
         */
-       trn = route_node_get(rfd->rsp_times[afi],
-                            &rfd_rib_node->p); /* locks trn */
+       trn = agg_node_get(rfd->rsp_times[afi],
+                          &rfd_rib_node->p); /* locks trn */
        trn->info = (void *)(uintptr_t)bgp_clock();
        if (trn->lock > 1)
-               route_unlock_node(trn);
+               agg_unlock_node(trn);
 
        return 0;
 }
@@ -838,7 +838,7 @@ int rfapiRibPreloadBi(
  */
 static void process_pending_node(struct bgp *bgp, struct rfapi_descriptor *rfd,
                                 afi_t afi,
-                                struct route_node *pn, /* pending node */
+                                struct agg_node *pn, /* pending node */
                                 struct rfapi_next_hop_entry **head,
                                 struct rfapi_next_hop_entry **tail)
 {
@@ -846,7 +846,7 @@ static void process_pending_node(struct bgp *bgp, struct rfapi_descriptor *rfd,
        struct listnode *nnode = NULL;
        struct rfapi_info *ri = NULL;    /* happy valgrind */
        struct rfapi_ip_prefix hp = {0}; /* pfx to put in NHE */
-       struct route_node *rn = NULL;
+       struct agg_node *rn = NULL;
        struct skiplist *slRibPt = NULL; /* rib list */
        struct skiplist *slPendPt = NULL;
        struct list *lPendCost = NULL;
@@ -876,7 +876,7 @@ static void process_pending_node(struct bgp *bgp, struct rfapi_descriptor *rfd,
        /*
         * Find corresponding RIB node
         */
-       rn = route_node_get(rfd->rib[afi], &pn->p); /* locks rn */
+       rn = agg_node_get(rfd->rib[afi], &pn->p); /* locks rn */
 
        /*
         * RIB skiplist has key=rfapi_addr={vn,un}, val = rfapi_info,
@@ -946,30 +946,30 @@ static void process_pending_node(struct bgp *bgp, struct rfapi_descriptor *rfd,
 
                        skiplist_free(slRibPt);
                        rn->info = slRibPt = NULL;
-                       route_unlock_node(rn);
+                       agg_unlock_node(rn);
 
                        lPendCost = pn->info = NULL;
-                       route_unlock_node(pn);
+                       agg_unlock_node(pn);
 
                        goto callback;
                }
                if (slRibPt) {
                        skiplist_free(slRibPt);
                        rn->info = NULL;
-                       route_unlock_node(rn);
+                       agg_unlock_node(rn);
                }
 
                assert(!slPendPt);
                if (slPendPt) { /* TBD I think we can toss this block */
                        skiplist_free(slPendPt);
                        pn->aggregate = NULL;
-                       route_unlock_node(pn);
+                       agg_unlock_node(pn);
                }
 
                pn->info = NULL;
-               route_unlock_node(pn);
+               agg_unlock_node(pn);
 
-               route_unlock_node(rn); /* route_node_get() */
+               agg_unlock_node(rn); /* agg_node_get() */
 
                if (rib_node_started_nonempty) {
                        RFAPI_RIB_PREFIX_COUNT_DECR(rfd, bgp->rfapi);
@@ -1077,7 +1077,7 @@ static void process_pending_node(struct bgp *bgp, struct rfapi_descriptor *rfd,
                        if (skiplist_empty(slRibPt)) {
                                skiplist_free(slRibPt);
                                slRibPt = rn->info = NULL;
-                               route_unlock_node(rn);
+                               agg_unlock_node(rn);
                        }
                }
        }
@@ -1143,7 +1143,7 @@ static void process_pending_node(struct bgp *bgp, struct rfapi_descriptor *rfd,
                                        slRibPt = skiplist_new(
                                                0, rfapi_rib_key_cmp, NULL);
                                        rn->info = slRibPt;
-                                       route_lock_node(rn);
+                                       agg_lock_node(rn);
                                }
                                skiplist_insert(slRibPt, &ori->rk, ori);
 
@@ -1193,7 +1193,7 @@ callback:
                for (ALL_LIST_ELEMENTS(lPendCost, node, nnode, ri)) {
 
                        struct rfapi_next_hop_entry *new;
-                       struct route_node *trn;
+                       struct agg_node *trn;
 
                        new = XCALLOC(MTYPE_RFAPI_NEXTHOP,
                                      sizeof(struct rfapi_next_hop_entry));
@@ -1245,11 +1245,11 @@ callback:
                        /*
                         * update this NVE's timestamp for this prefix
                         */
-                       trn = route_node_get(rfd->rsp_times[afi],
-                                            &pn->p); /* locks trn */
+                       trn = agg_node_get(rfd->rsp_times[afi],
+                                          &pn->p); /* locks trn */
                        trn->info = (void *)(uintptr_t)bgp_clock();
                        if (trn->lock > 1)
-                               route_unlock_node(trn);
+                               agg_unlock_node(trn);
 
                        rfapiRfapiIpAddr2Str(&new->vn_address, buf, BUFSIZ);
                        rfapiRfapiIpAddr2Str(&new->un_address, buf2, BUFSIZ);
@@ -1348,7 +1348,7 @@ callback:
                                                0, rfapi_rib_key_cmp,
                                                (void (*)(void *))
                                                        rfapi_info_free);
-                                       route_lock_node(rn);
+                                       agg_lock_node(rn);
                                }
                                RFAPI_RIB_CHECK_COUNTS(0, delete_list->count);
 
@@ -1407,9 +1407,10 @@ callback:
                                                vnc_zlog_debug_verbose(
                                                        "%s: move route to recently deleted list, rd=%s",
                                                        __func__,
-                                                       prefix_rd2str(&ri->rk.rd,
-                                                                     buf_rd,
-                                                                     sizeof(buf_rd)));
+                                                       prefix_rd2str(
+                                                               &ri->rk.rd,
+                                                               buf_rd,
+                                                               sizeof(buf_rd)));
                                        }
 #endif
 
@@ -1432,24 +1433,24 @@ callback:
                }
 
                delete_list->del = (void (*)(void *))rfapi_info_free;
-               list_delete_and_null(&delete_list);
+               list_delete(&delete_list);
        }
 
        RFAPI_RIB_CHECK_COUNTS(0, 0);
 
        /*
-        * Reset pending lists. The final route_unlock_node() will probably
+        * Reset pending lists. The final agg_unlock_node() will probably
         * cause the pending node to be released.
         */
        if (slPendPt) {
                skiplist_free(slPendPt);
                pn->aggregate = NULL;
-               route_unlock_node(pn);
+               agg_unlock_node(pn);
        }
        if (lPendCost) {
-               list_delete_and_null(&lPendCost);
+               list_delete(&lPendCost);
                pn->info = NULL;
-               route_unlock_node(pn);
+               agg_unlock_node(pn);
        }
        RFAPI_RIB_CHECK_COUNTS(0, 0);
 
@@ -1466,7 +1467,7 @@ callback:
        if (sendingsomeroutes)
                rfapiMonitorTimersRestart(rfd, &pn->p);
 
-       route_unlock_node(rn); /* route_node_get() */
+       agg_unlock_node(rn); /* agg_node_get() */
 
        RFAPI_RIB_CHECK_COUNTS(1, 0);
 }
@@ -1484,7 +1485,7 @@ static void rib_do_callback_onepass(struct rfapi_descriptor *rfd, afi_t afi)
        struct bgp *bgp = bgp_get_default();
        struct rfapi_next_hop_entry *head = NULL;
        struct rfapi_next_hop_entry *tail = NULL;
-       struct route_node *rn;
+       struct agg_node *rn;
 
 #if DEBUG_L2_EXTRA
        vnc_zlog_debug_verbose("%s: rfd=%p, afi=%d", __func__, rfd, afi);
@@ -1495,7 +1496,8 @@ static void rib_do_callback_onepass(struct rfapi_descriptor *rfd, afi_t afi)
 
        assert(bgp->rfapi);
 
-       for (rn = route_top(rfd->rib_pending[afi]); rn; rn = route_next(rn)) {
+       for (rn = agg_route_top(rfd->rib_pending[afi]); rn;
+            rn = agg_route_next(rn)) {
                process_pending_node(bgp, rfd, afi, rn, &head, &tail);
        }
 
@@ -1585,11 +1587,11 @@ static void updated_responses_queue_init(struct rfapi_descriptor *rfd)
 void rfapiRibUpdatePendingNode(
        struct bgp *bgp, struct rfapi_descriptor *rfd,
        struct rfapi_import_table *it, /* needed for L2 */
-       struct route_node *it_node, uint32_t lifetime)
+       struct agg_node *it_node, uint32_t lifetime)
 {
        struct prefix *prefix;
-       struct bgp_info *bi;
-       struct route_node *pn;
+       struct bgp_path_info *bi;
+       struct agg_node *pn;
        afi_t afi;
        uint32_t queued_flag;
        int count = 0;
@@ -1609,7 +1611,7 @@ void rfapiRibUpdatePendingNode(
        prefix2str(prefix, buf, sizeof(buf));
        vnc_zlog_debug_verbose("%s: prefix=%s", __func__, buf);
 
-       pn = route_node_get(rfd->rib_pending[afi], prefix);
+       pn = agg_node_get(rfd->rib_pending[afi], prefix);
        assert(pn);
 
        vnc_zlog_debug_verbose("%s: pn->info=%p, pn->aggregate=%p", __func__,
@@ -1622,7 +1624,7 @@ void rfapiRibUpdatePendingNode(
                 */
                skiplist_free((struct skiplist *)(pn->aggregate));
                pn->aggregate = NULL;
-               route_unlock_node(pn); /* skiplist deleted */
+               agg_unlock_node(pn); /* skiplist deleted */
        }
 
 
@@ -1631,10 +1633,10 @@ void rfapiRibUpdatePendingNode(
         */
        if (pn->info) {
                if (pn->info != (void *)1) {
-                       list_delete_and_null((struct list **)(&pn->info));
+                       list_delete((struct list **)(&pn->info));
                }
                pn->info = NULL;
-               route_unlock_node(pn); /* linklist or 1 deleted */
+               agg_unlock_node(pn); /* linklist or 1 deleted */
        }
 
        /*
@@ -1689,7 +1691,7 @@ void rfapiRibUpdatePendingNode(
                if (!pn->aggregate) {
                        pn->aggregate =
                                skiplist_new(0, rfapi_rib_key_cmp, NULL);
-                       route_lock_node(pn);
+                       agg_lock_node(pn);
                }
 
                /*
@@ -1715,7 +1717,7 @@ void rfapiRibUpdatePendingNode(
                        pn->info = list_new();
                        ((struct list *)(pn->info))->del =
                                (void (*)(void *))rfapi_info_free;
-                       route_lock_node(pn);
+                       agg_lock_node(pn);
                }
 
                listnode_add((struct list *)(pn->info), ri);
@@ -1730,10 +1732,10 @@ void rfapiRibUpdatePendingNode(
                assert(!pn->aggregate);
                pn->info = (void *)1; /* magic value means this node has no
                                         routes */
-               route_lock_node(pn);
+               agg_lock_node(pn);
        }
 
-       route_unlock_node(pn); /* route_node_get */
+       agg_unlock_node(pn); /* agg_node_get */
 
        queued_flag = RFAPI_QUEUED_FLAG(afi);
 
@@ -1757,25 +1759,30 @@ void rfapiRibUpdatePendingNode(
 
 void rfapiRibUpdatePendingNodeSubtree(
        struct bgp *bgp, struct rfapi_descriptor *rfd,
-       struct rfapi_import_table *it, struct route_node *it_node,
-       struct route_node *omit_subtree, /* may be NULL */
+       struct rfapi_import_table *it, struct agg_node *it_node,
+       struct agg_node *omit_subtree, /* may be NULL */
        uint32_t lifetime)
 {
        /* FIXME: need to find a better way here to work without sticking our
         * hands in node->link */
-       if (it_node->l_left && (it_node->l_left != omit_subtree)) {
-               if (it_node->l_left->info)
-                       rfapiRibUpdatePendingNode(bgp, rfd, it, it_node->l_left,
-                                                 lifetime);
-               rfapiRibUpdatePendingNodeSubtree(bgp, rfd, it, it_node->l_left,
+       if (agg_node_left(it_node)
+           && (agg_node_left(it_node) != omit_subtree)) {
+               if (agg_node_left(it_node)->info)
+                       rfapiRibUpdatePendingNode(
+                               bgp, rfd, it, agg_node_left(it_node), lifetime);
+               rfapiRibUpdatePendingNodeSubtree(bgp, rfd, it,
+                                                agg_node_left(it_node),
                                                 omit_subtree, lifetime);
        }
 
-       if (it_node->l_right && (it_node->l_right != omit_subtree)) {
-               if (it_node->l_right->info)
+       if (agg_node_right(it_node)
+           && (agg_node_right(it_node) != omit_subtree)) {
+               if (agg_node_right(it_node)->info)
                        rfapiRibUpdatePendingNode(bgp, rfd, it,
-                                                 it_node->l_right, lifetime);
-               rfapiRibUpdatePendingNodeSubtree(bgp, rfd, it, it_node->l_right,
+                                                 agg_node_right(it_node),
+                                                 lifetime);
+               rfapiRibUpdatePendingNodeSubtree(bgp, rfd, it,
+                                                agg_node_right(it_node),
                                                 omit_subtree, lifetime);
        }
 }
@@ -1788,13 +1795,13 @@ void rfapiRibUpdatePendingNodeSubtree(
  */
 int rfapiRibFTDFilterRecentPrefix(
        struct rfapi_descriptor *rfd,
-       struct route_node *it_rn,          /* import table node */
+       struct agg_node *it_rn,             /* import table node */
        struct prefix *pfx_target_original) /* query target */
 {
        struct bgp *bgp = rfd->bgp;
        afi_t afi = family2afi(it_rn->p.family);
        time_t prefix_time;
-       struct route_node *trn;
+       struct agg_node *trn;
 
        /*
         * Not in FTD mode, so allow prefix
@@ -1833,10 +1840,10 @@ int rfapiRibFTDFilterRecentPrefix(
        /*
         * check this NVE's timestamp for this prefix
         */
-       trn = route_node_get(rfd->rsp_times[afi], &it_rn->p); /* locks trn */
+       trn = agg_node_get(rfd->rsp_times[afi], &it_rn->p); /* locks trn */
        prefix_time = (time_t)trn->info;
        if (trn->lock > 1)
-               route_unlock_node(trn);
+               agg_unlock_node(trn);
 
 #if DEBUG_FTD_FILTER_RECENT
        vnc_zlog_debug_verbose("%s: last sent time %lu, last allowed time %lu",
@@ -1883,9 +1890,9 @@ rfapiRibPreload(struct bgp *bgp, struct rfapi_descriptor *rfd,
                afi_t afi;
                struct rfapi_info *ri;
                int need_insert;
-               struct route_node *rn;
+               struct agg_node *rn;
                int rib_node_started_nonempty = 0;
-               struct route_node *trn;
+               struct agg_node *trn;
                int allowed = 0;
 
                /* save in case we delete nhp */
@@ -1947,13 +1954,13 @@ rfapiRibPreload(struct bgp *bgp, struct rfapi_descriptor *rfd,
                /*
                 * Look up prefix in RIB
                 */
-               rn = route_node_get(rfd->rib[afi], &pfx); /* locks rn */
+               rn = agg_node_get(rfd->rib[afi], &pfx); /* locks rn */
 
                if (rn->info) {
                        rib_node_started_nonempty = 1;
                } else {
                        rn->info = skiplist_new(0, rfapi_rib_key_cmp, NULL);
-                       route_lock_node(rn);
+                       agg_lock_node(rn);
                }
 
                /*
@@ -2063,15 +2070,15 @@ rfapiRibPreload(struct bgp *bgp, struct rfapi_descriptor *rfd,
                rfapiRibStartTimer(rfd, ri, rn, 0);
                RFAPI_RIB_CHECK_COUNTS(0, 0);
 
-               route_unlock_node(rn);
+               agg_unlock_node(rn);
 
                /*
                 * update this NVE's timestamp for this prefix
                 */
-               trn = route_node_get(rfd->rsp_times[afi], &pfx); /* locks trn */
+               trn = agg_node_get(rfd->rsp_times[afi], &pfx); /* locks trn */
                trn->info = (void *)(uintptr_t)bgp_clock();
                if (trn->lock > 1)
-                       route_unlock_node(trn);
+                       agg_unlock_node(trn);
 
                {
                        char str_pfx[PREFIX_STRLEN];
@@ -2099,7 +2106,6 @@ rfapiRibPreload(struct bgp *bgp, struct rfapi_descriptor *rfd,
                        nhp->vn_options = NULL;
 
                        XFREE(MTYPE_RFAPI_NEXTHOP, nhp);
-                       nhp = NULL;
                }
        }
 
@@ -2109,7 +2115,7 @@ rfapiRibPreload(struct bgp *bgp, struct rfapi_descriptor *rfd,
 }
 
 void rfapiRibPendingDeleteRoute(struct bgp *bgp, struct rfapi_import_table *it,
-                               afi_t afi, struct route_node *it_node)
+                               afi_t afi, struct agg_node *it_node)
 {
        struct rfapi_descriptor *rfd;
        struct listnode *node;
@@ -2125,7 +2131,7 @@ void rfapiRibPendingDeleteRoute(struct bgp *bgp, struct rfapi_import_table *it,
                 * identifies the rfd that owns it.
                 */
                struct rfapi_monitor_eth *m;
-               struct route_node *rn;
+               struct agg_node *rn;
                struct skiplist *sl;
                void *cursor;
                int rc;
@@ -2155,12 +2161,12 @@ void rfapiRibPendingDeleteRoute(struct bgp *bgp, struct rfapi_import_table *it,
                                 * NVE, it's OK to send an update with the
                                 * delete
                                 */
-                               if ((rn = route_node_lookup(m->rfd->rib[afi],
-                                                           &it_node->p))) {
+                               if ((rn = agg_node_lookup(m->rfd->rib[afi],
+                                                         &it_node->p))) {
                                        rfapiRibUpdatePendingNode(
                                                bgp, m->rfd, it, it_node,
                                                m->rfd->response_lifetime);
-                                       route_unlock_node(rn);
+                                       agg_unlock_node(rn);
                                }
                        }
                }
@@ -2178,8 +2184,8 @@ void rfapiRibPendingDeleteRoute(struct bgp *bgp, struct rfapi_import_table *it,
                         * this
                         * NVE, it's OK to send an update with the delete
                         */
-                       if ((rn = route_node_lookup(m->rfd->rib[afi],
-                                                   &it_node->p))) {
+                       if ((rn = agg_node_lookup(m->rfd->rib[afi],
+                                                 &it_node->p))) {
                                rfapiRibUpdatePendingNode(
                                        bgp, m->rfd, it, it_node,
                                        m->rfd->response_lifetime);
@@ -2193,7 +2199,7 @@ void rfapiRibPendingDeleteRoute(struct bgp *bgp, struct rfapi_import_table *it,
                for (ALL_LIST_ELEMENTS_RO(&bgp->rfapi->descriptors, node,
                                          rfd)) {
 
-                       struct route_node *rn;
+                       struct agg_node *rn;
 
                        vnc_zlog_debug_verbose(
                                "%s: comparing rfd(%p)->import_table=%p to it=%p",
@@ -2210,12 +2216,12 @@ void rfapiRibPendingDeleteRoute(struct bgp *bgp, struct rfapi_import_table *it,
                         * prefix
                         * previously, we should send an updated response.
                         */
-                       if ((rn = route_node_lookup(rfd->rib[afi],
-                                                   &it_node->p))) {
+                       if ((rn = agg_node_lookup(rfd->rib[afi],
+                                                 &it_node->p))) {
                                rfapiRibUpdatePendingNode(
                                        bgp, rfd, it, it_node,
                                        rfd->response_lifetime);
-                               route_unlock_node(rn);
+                               agg_unlock_node(rn);
                        }
                }
        }
@@ -2407,13 +2413,13 @@ void rfapiRibShowResponses(void *stream, struct prefix *pfx_match,
 
                for (afi = AFI_IP; afi < AFI_MAX; ++afi) {
 
-                       struct route_node *rn;
+                       struct agg_node *rn;
 
                        if (!rfd->rib[afi])
                                continue;
 
-                       for (rn = route_top(rfd->rib[afi]); rn;
-                            rn = route_next(rn)) {
+                       for (rn = agg_route_top(rfd->rib[afi]); rn;
+                            rn = agg_route_next(rn)) {
 
                                struct skiplist *sl;
                                char str_pfx[PREFIX_STRLEN];