]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: add bgp_path_info_num_labels()
authorLouis Scalbert <louis.scalbert@6wind.com>
Mon, 26 Feb 2024 09:42:42 +0000 (10:42 +0100)
committerLouis Scalbert <louis.scalbert@6wind.com>
Wed, 5 Jun 2024 09:08:46 +0000 (11:08 +0200)
Add bgp_path_info_num_labels() to get the number of labels stored in
a path_info structure.

Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
15 files changed:
bgpd/bgp_evpn.c
bgpd/bgp_label.c
bgpd/bgp_mac.c
bgpd/bgp_mplsvpn.c
bgpd/bgp_nht.c
bgpd/bgp_route.c
bgpd/bgp_route.h
bgpd/bgp_routemap.c
bgpd/bgp_rpki.c
bgpd/bgp_updgrp_packet.c
bgpd/bgp_zebra.c
bgpd/rfapi/rfapi_import.c
bgpd/rfapi/rfapi_rib.c
bgpd/rfapi/rfapi_vty.c
bgpd/rfapi/vnc_import_bgp.c

index ce9666d6115a23380e696bc0d157f0b638291420..ae5d837cbd850d7e44456105b01071bd4b9c700e 100644 (file)
@@ -2986,7 +2986,7 @@ bgp_create_evpn_bgp_path_info(struct bgp_path_info *parent_pi,
        if (parent_pi->extra) {
                memcpy(&pi->extra->label, &parent_pi->extra->label,
                       sizeof(pi->extra->label));
-               pi->extra->num_labels = parent_pi->extra->num_labels;
+               pi->extra->num_labels = bgp_path_info_num_labels(parent_pi);
                pi->extra->igpmetric = parent_pi->extra->igpmetric;
        }
 
index d5732b5677214f33c134d9b578ed8bfcd340a888..f57663d7a1b35fedeeb9a72a1c8f3a3410a8036d 100644 (file)
@@ -89,9 +89,8 @@ mpls_label_t bgp_adv_label(struct bgp_dest *dest, struct bgp_path_info *pi,
        if (!dest || !pi || !to)
                return MPLS_INVALID_LABEL;
 
-       remote_label = (pi->extra && pi->extra->num_labels)
-                              ? pi->extra->label[0]
-                              : MPLS_INVALID_LABEL;
+       remote_label = bgp_path_info_num_labels(pi) ? pi->extra->label[0]
+                                                   : MPLS_INVALID_LABEL;
        from = pi->peer;
        reflect =
                ((from->sort == BGP_PEER_IBGP) && (to->sort == BGP_PEER_IBGP));
index e629732c78eecf8fd6af75f38e58b88df9585ed4..aa793e999d84197460560571d193ac1808fa0a20 100644 (file)
@@ -125,6 +125,8 @@ static void bgp_process_mac_rescan_table(struct bgp *bgp, struct peer *peer,
 {
        struct bgp_dest *pdest, *dest;
        struct bgp_path_info *pi;
+       uint32_t num_labels;
+       mpls_label_t *label_pnt;
 
        for (pdest = bgp_table_top(table); pdest;
             pdest = bgp_route_next(pdest)) {
@@ -140,8 +142,6 @@ static void bgp_process_mac_rescan_table(struct bgp *bgp, struct peer *peer,
                        const struct prefix *p = bgp_dest_get_prefix(dest);
                        struct prefix_evpn *pevpn = (struct prefix_evpn *)dest;
                        struct prefix_rd prd;
-                       uint32_t num_labels = 0;
-                       mpls_label_t *label_pnt = NULL;
                        struct bgp_route_evpn *evpn;
 
                        if (pevpn->family == AF_EVPN
@@ -169,10 +169,8 @@ static void bgp_process_mac_rescan_table(struct bgp *bgp, struct peer *peer,
                            && !dest_affected)
                                continue;
 
-                       if (pi->extra)
-                               num_labels = pi->extra->num_labels;
-                       if (num_labels)
-                               label_pnt = &pi->extra->label[0];
+                       num_labels = bgp_path_info_num_labels(pi);
+                       label_pnt = num_labels ? &pi->extra->label[0] : NULL;
 
                        prd.family = AF_UNSPEC;
                        prd.prefixlen = 64;
index fb1243d029391320fd74afc516693982295d62ff..6c56b05dff2e48c8400d9a49364f1a5427d333cf 100644 (file)
@@ -2088,7 +2088,7 @@ static void vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp,   /* to */
        safi_t safi = SAFI_UNICAST;
        const char *debugmsg;
        struct prefix nexthop_orig;
-       mpls_label_t *pLabels = NULL;
+       mpls_label_t *label_pnt = NULL;
        uint32_t num_labels = 0;
        int nexthop_self_flag = 1;
        struct bgp_path_info *bpi_ultimate = NULL;
@@ -2335,19 +2335,16 @@ static void vpn_leak_to_vrf_update_onevrf(struct bgp *to_bgp,   /* to */
                                origin_local = 1;
                }
 
-               /* copy labels */
-               if (!origin_local && path_vpn->extra
-                   && path_vpn->extra->num_labels) {
-                       num_labels = path_vpn->extra->num_labels;
-                       pLabels = path_vpn->extra->label;
-               }
+               num_labels = origin_local ? 0
+                                         : bgp_path_info_num_labels(path_vpn);
+               label_pnt = num_labels ? path_vpn->extra->label : NULL;
        }
 
        if (debug)
                zlog_debug("%s: pfx %pBD: num_labels %d", __func__,
                           path_vpn->net, num_labels);
 
-       if (!leak_update(to_bgp, bn, new_attr, afi, safi, path_vpn, pLabels,
+       if (!leak_update(to_bgp, bn, new_attr, afi, safi, path_vpn, label_pnt,
                         num_labels, src_vrf, &nexthop_orig, nexthop_self_flag,
                         debug))
                bgp_dest_unlock_node(bn);
@@ -4223,8 +4220,9 @@ void bgp_mplsvpn_nh_label_bind_register_local_label(struct bgp *bgp,
        struct bgp_mplsvpn_nh_label_bind_cache_head *tree;
        mpls_label_t label;
 
-       label = pi->extra->num_labels ? decode_label(&pi->extra->label[0])
-                                     : MPLS_INVALID_LABEL;
+       label = bgp_path_info_num_labels(pi)
+                       ? decode_label(&pi->extra->label[0])
+                       : MPLS_INVALID_LABEL;
 
        tree = &bgp->mplsvpn_nh_label_bind;
        bmnc = bgp_mplsvpn_nh_label_bind_find(tree, &pi->nexthop->prefix, label);
index 79f62ef60969a338359719aad27db01216c25396..8ce45558e96fd95a6ff5bb78c76792586fa52f16 100644 (file)
@@ -499,8 +499,8 @@ int bgp_find_or_add_nexthop(struct bgp *bgp_route, struct bgp *bgp_nexthop,
        if (bgp_route->inst_type == BGP_INSTANCE_TYPE_VIEW)
                return 1;
        else if (safi == SAFI_UNICAST && pi &&
-                pi->sub_type == BGP_ROUTE_IMPORTED && pi->extra &&
-                pi->extra->num_labels && !bnc->is_evpn_gwip_nexthop)
+                pi->sub_type == BGP_ROUTE_IMPORTED &&
+                bgp_path_info_num_labels(pi) && !bnc->is_evpn_gwip_nexthop)
                return bgp_isvalid_nexthop_for_l3vpn(bnc, pi);
        else if (safi == SAFI_MPLS_VPN && pi &&
                 pi->sub_type != BGP_ROUTE_IMPORTED)
@@ -1301,10 +1301,10 @@ void evaluate_paths(struct bgp_nexthop_cache *bnc)
                bool bnc_is_valid_nexthop = false;
                bool path_valid = false;
 
-               if (safi == SAFI_UNICAST && path->sub_type == BGP_ROUTE_IMPORTED
-                   && path->extra && path->extra->num_labels
-                   && (path->attr->evpn_overlay.type
-                       != OVERLAY_INDEX_GATEWAY_IP)) {
+               if (safi == SAFI_UNICAST &&
+                   path->sub_type == BGP_ROUTE_IMPORTED &&
+                   bgp_path_info_num_labels(path) &&
+                   (path->attr->evpn_overlay.type != OVERLAY_INDEX_GATEWAY_IP)) {
                        bnc_is_valid_nexthop =
                                bgp_isvalid_nexthop_for_l3vpn(bnc, path)
                                        ? true
index ebeaf9a474c491b110ebf1a89892b7b14e51ed7b..5e4c03ae365f6b17786b0f12e992312909b0d6e4 100644 (file)
@@ -324,9 +324,7 @@ struct bgp_path_info_extra *bgp_path_info_extra_get(struct bgp_path_info *pi)
 
 bool bgp_path_info_has_valid_label(const struct bgp_path_info *path)
 {
-       if (!path->extra)
-               return false;
-       if (!path->extra->num_labels)
+       if (!bgp_path_info_num_labels(path))
                return false;
 
        return bgp_is_valid_label(&path->extra->label[0]);
@@ -338,13 +336,24 @@ bool bgp_path_info_labels_same(const struct bgp_path_info *bpi,
        uint32_t bpi_num_labels;
        const mpls_label_t *bpi_label;
 
-       bpi_num_labels = bpi->extra ? bpi->extra->num_labels : 0;
+       bpi_num_labels = bgp_path_info_num_labels(bpi);
        bpi_label = bpi_num_labels ? bpi->extra->label : NULL;
 
        return bgp_labels_same(bpi_label, bpi_num_labels,
                               (const mpls_label_t *)label, n);
 }
 
+uint32_t bgp_path_info_num_labels(const struct bgp_path_info *pi)
+{
+       if (!pi)
+               return 0;
+
+       if (!pi->extra)
+               return 0;
+
+       return pi->extra->num_labels;
+}
+
 /* Free bgp route information. */
 void bgp_path_info_free_with_caller(const char *name,
                                    struct bgp_path_info *path)
@@ -2232,8 +2241,8 @@ bool subgroup_announce_check(struct bgp_dest *dest, struct bgp_path_info *pi,
         * off box as that the RT and RD created are localy
         * significant and globaly useless.
         */
-       if (safi == SAFI_MPLS_VPN && pi->extra && pi->extra->num_labels
-           && pi->extra->label[0] == BGP_PREVENT_VRF_2_VRF_LEAK)
+       if (safi == SAFI_MPLS_VPN && bgp_path_info_num_labels(pi) &&
+           pi->extra->label[0] == BGP_PREVENT_VRF_2_VRF_LEAK)
                return false;
 
        /* If it's labeled safi, make sure the route has a valid label. */
@@ -5659,18 +5668,16 @@ static void bgp_soft_reconfig_table_update(struct peer *peer,
                                           safi_t safi, struct prefix_rd *prd)
 {
        struct bgp_path_info *pi;
-       uint32_t num_labels = 0;
-       mpls_label_t *label_pnt = NULL;
+       uint32_t num_labels;
+       mpls_label_t *label_pnt;
        struct bgp_route_evpn evpn;
 
        for (pi = bgp_dest_get_bgp_path_info(dest); pi; pi = pi->next)
                if (pi->peer == peer)
                        break;
 
-       if (pi && pi->extra)
-               num_labels = pi->extra->num_labels;
-       if (num_labels)
-               label_pnt = &pi->extra->label[0];
+       num_labels = bgp_path_info_num_labels(pi);
+       label_pnt = num_labels ? &pi->extra->label[0] : NULL;
        if (pi)
                memcpy(&evpn, bgp_attr_get_evpn_overlay(pi->attr),
                       sizeof(evpn));
@@ -6835,7 +6842,7 @@ void bgp_static_update(struct bgp *bgp, const struct prefix *p,
                                                bgp, p, pi);
                                }
                        } else {
-                               if (pi->extra && pi->extra->num_labels)
+                               if (bgp_path_info_num_labels(pi))
                                        label = decode_label(
                                                &pi->extra->label[0]);
                        }
@@ -10506,7 +10513,7 @@ void route_vty_out_detail(struct vty *vty, struct bgp *bgp, struct bgp_dest *bn,
                json_nexthop_global = json_object_new_object();
        }
 
-       if (path->extra && path->extra->num_labels) {
+       if (bgp_path_info_num_labels(path)) {
                bgp_evpn_label2str(path->extra->label, path->extra->num_labels,
                                   vni_buf, sizeof(vni_buf));
        }
index 2aa721a3b65a026aac60c04c6547a3e42e21a00a..37c5dec758c6e40396a7be1580b35ffc75a95380 100644 (file)
@@ -754,6 +754,7 @@ extern void bgp_path_info_delete(struct bgp_dest *dest,
 extern struct bgp_path_info_extra *
 bgp_path_info_extra_get(struct bgp_path_info *path);
 extern bool bgp_path_info_has_valid_label(const struct bgp_path_info *path);
+extern uint32_t bgp_path_info_num_labels(const struct bgp_path_info *pi);
 extern void bgp_path_info_set_flag(struct bgp_dest *dest,
                                   struct bgp_path_info *path, uint32_t flag);
 extern void bgp_path_info_unset_flag(struct bgp_dest *dest,
index dc26a1f5dd82af45b5b5ab1ace1172d54bbf5549..8dbe705aa53cba80419ad19d647a76fef2a5e13e 100644 (file)
@@ -1056,7 +1056,7 @@ static enum route_map_cmd_result_t
 route_match_vni(void *rule, const struct prefix *prefix, void *object)
 {
        vni_t vni = 0;
-       unsigned int label_cnt = 0;
+       unsigned int label_cnt;
        struct bgp_path_info *path = NULL;
        struct prefix_evpn *evp = (struct prefix_evpn *) prefix;
 
@@ -1081,11 +1081,8 @@ route_match_vni(void *rule, const struct prefix *prefix, void *object)
                && evp->prefix.route_type != BGP_EVPN_IP_PREFIX_ROUTE))
                return RMAP_NOOP;
 
-       if (path->extra == NULL)
-               return RMAP_NOMATCH;
-
-       for (;
-            label_cnt < BGP_MAX_LABELS && label_cnt < path->extra->num_labels;
+       for (label_cnt = 0; label_cnt < BGP_MAX_LABELS &&
+                           label_cnt < bgp_path_info_num_labels(path);
             label_cnt++) {
                if (vni == label2vni(&path->extra->label[label_cnt]))
                        return RMAP_MATCH;
index f5508a0a73456b2d6dd73762bfd08bcbbf499f6a..63742fad4a9e5e45be0d7827671fdda0d308baa2 100644 (file)
@@ -656,17 +656,16 @@ static void revalidate_bgp_node(struct bgp_dest *bgp_dest, afi_t afi,
                                safi_t safi)
 {
        struct bgp_adj_in *ain;
+       mpls_label_t *label;
+       uint32_t num_labels;
 
        for (ain = bgp_dest->adj_in; ain; ain = ain->next) {
                struct bgp_path_info *path =
                        bgp_dest_get_bgp_path_info(bgp_dest);
-               mpls_label_t *label = NULL;
-               uint32_t num_labels = 0;
 
-               if (path && path->extra) {
-                       label = path->extra->label;
-                       num_labels = path->extra->num_labels;
-               }
+               num_labels = bgp_path_info_num_labels(path);
+               label = num_labels ? path->extra->label : NULL;
+
                (void)bgp_update(ain->peer, bgp_dest_get_prefix(bgp_dest),
                                 ain->addpath_rx_id, ain->attr, afi, safi,
                                 ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL, NULL, label,
index 1f691b6a9e19145444ac9e56e985a7ca8e193d70..def2afb6da517d5cb1619761b8e21b87ff8cd208 100644 (file)
@@ -814,9 +814,10 @@ struct bpacket *subgroup_update_packet(struct update_subgroup *subgrp)
                                        path);
                                label_pnt = &label;
                                num_labels = 1;
-                       } else if (path && path->extra) {
-                               label_pnt = &path->extra->label[0];
-                               num_labels = path->extra->num_labels;
+                       } else {
+                               num_labels = bgp_path_info_num_labels(path);
+                               label_pnt = num_labels ? &path->extra->label[0]
+                                                      : NULL;
                        }
 
                        if (stream_empty(snlri))
index 49b3ef371270511d9c1996ab0b59046ba0a53beb..623839d212859d8f3ed35a4b485d10326aea8c23 100644 (file)
@@ -1301,8 +1301,6 @@ static void bgp_zebra_announce_parse_nexthop(
        }
 
        for (; mpinfo; mpinfo = bgp_path_info_mpath_next(mpinfo)) {
-               labels = NULL;
-               num_labels = 0;
                uint64_t nh_weight;
                bool is_evpn;
                bool is_parent_evpn;
@@ -1341,7 +1339,7 @@ static void bgp_zebra_announce_parse_nexthop(
                api_nh->srte_color = bgp_attr_get_color(info->attr);
 
                if (bgp_debug_zebra(&api->prefix)) {
-                       if (mpinfo->extra && mpinfo->extra->num_labels) {
+                       if (bgp_path_info_num_labels(mpinfo)) {
                                zlog_debug("%s: p=%pFX, bgp_is_valid_label: %d",
                                           __func__, p,
                                           bgp_is_valid_label(
@@ -1413,13 +1411,10 @@ static void bgp_zebra_announce_parse_nexthop(
                     mpinfo->peer->sort == BGP_PEER_CONFED))
                        *allow_recursion = true;
 
-               if (mpinfo->extra) {
-                       labels = mpinfo->extra->label;
-                       num_labels = mpinfo->extra->num_labels;
-               }
+               num_labels = bgp_path_info_num_labels(mpinfo);
+               labels = num_labels ? mpinfo->extra->label : NULL;
 
-               if (labels && (num_labels > 0) &&
-                   (is_evpn || bgp_is_valid_label(&labels[0]))) {
+               if (num_labels && (is_evpn || bgp_is_valid_label(&labels[0]))) {
                        enum lsp_types_t nh_label_type = ZEBRA_LSP_NONE;
 
                        if (is_evpn) {
index 7fb7d5d7aac532f15b79a25a32c0c2559da0f9aa..7e19fb8c979b0140b0d27dc0d0939731711c5834 100644 (file)
@@ -1271,7 +1271,7 @@ rfapiRouteInfo2NextHopEntry(struct rfapi_ip_prefix *rprefix,
 
                /* label comes from MP_REACH_NLRI label */
                vo->v.l2addr.label =
-                       bpi->extra->num_labels
+                       bgp_path_info_num_labels(bpi)
                                ? decode_label(&bpi->extra->label[0])
                                : MPLS_INVALID_LABEL;
 
@@ -4166,7 +4166,7 @@ static void rfapiBgpTableFilteredImport(struct bgp *bgp,
                                                       BGP_PATH_REMOVED))
                                                continue;
 
-                                       if (bpi->extra && bpi->extra->num_labels)
+                                       if (bgp_path_info_num_labels(bpi))
                                                label = decode_label(
                                                        &bpi->extra->label[0]);
                                        (*rfapiBgpInfoFilteredImportFunction(
index 11dccbf1b5f524f617e2feda4bcb86cc4abc3644..5c635767205928a894f04f39780ded52049c3ed6 100644 (file)
@@ -692,7 +692,7 @@ static void rfapiRibBi2Ri(struct bgp_path_info *bpi, struct rfapi_info *ri,
 
                /* label comes from MP_REACH_NLRI label */
                vo->v.l2addr.label =
-                       bpi->extra->num_labels
+                       bgp_path_info_num_labels(bpi)
                                ? decode_label(&bpi->extra->label[0])
                                : MPLS_INVALID_LABEL;
 
index 2576a283f522564a88c3919064617ecde83a6a7d..ddf95b63fc71ee51a2a4938bb8c62b72d5e8cf9e 100644 (file)
@@ -413,7 +413,7 @@ void rfapi_vty_out_vncinfo(struct vty *vty, const struct prefix *p,
                XFREE(MTYPE_ECOMMUNITY_STR, s);
        }
 
-       if (bpi->extra != NULL && bpi->extra->num_labels) {
+       if (bgp_path_info_num_labels(bpi)) {
                if (bpi->extra->label[0] == BGP_PREVENT_VRF_2_VRF_LEAK)
                        vty_out(vty, " label=VRF2VRF");
                else
@@ -1052,7 +1052,7 @@ static int rfapiPrintRemoteRegBi(struct bgp *bgp, void *stream,
                snprintf(buf_un, sizeof(buf_un), "%s",
                         inet_ntop(pfx_vn.family, &pfx_vn.u.prefix, buf_ntop,
                                   sizeof(buf_ntop)));
-               if (bpi->extra && bpi->extra->num_labels) {
+               if (bgp_path_info_num_labels(bpi)) {
                        uint32_t l = decode_label(&bpi->extra->label[0]);
                        snprintf(buf_vn, sizeof(buf_vn), "Label: %d", l);
                } else /* should never happen */
@@ -1161,8 +1161,7 @@ static int rfapiPrintRemoteRegBi(struct bgp *bgp, void *stream,
                        }
                }
        }
-       if (tun_type != BGP_ENCAP_TYPE_MPLS && bpi->extra &&
-           bpi->extra->num_labels) {
+       if (tun_type != BGP_ENCAP_TYPE_MPLS && bgp_path_info_num_labels(bpi)) {
                uint32_t l = decode_label(&bpi->extra->label[0]);
 
                if (!MPLS_LABEL_IS_NULL(l)) {
index 09260dbca18a1c66d568aba308ba658d76ba31e3..fbc0256128dfa8986b0d4019acdf304f9d262da1 100644 (file)
@@ -470,7 +470,7 @@ static void vnc_import_bgp_add_route_mode_resolve_nve_one_bi(
        if (bgp_attr_get_ecommunity(bpi->attr))
                ecommunity_merge(new_ecom, bgp_attr_get_ecommunity(bpi->attr));
 
-       if (bpi->extra && bpi->extra->num_labels)
+       if (bgp_path_info_num_labels(bpi))
                label = decode_label(&bpi->extra->label[0]);
 
        add_vnc_route(&vncHDResolveNve, bgp, SAFI_MPLS_VPN,
@@ -1699,7 +1699,8 @@ static void vnc_import_bgp_exterior_add_route_it(
                                if (bpi_interior->extra) {
                                        prd = &bpi_interior->extra->vnc->vnc
                                                       .import.rd;
-                                       if (bpi_interior->extra->num_labels)
+                                       if (bgp_path_info_num_labels(
+                                                   bpi_interior))
                                                label = decode_label(
                                                        &bpi_interior->extra
                                                                 ->label[0]);
@@ -1870,7 +1871,8 @@ void vnc_import_bgp_exterior_del_route(
                                if (bpi_interior->extra) {
                                        prd = &bpi_interior->extra->vnc->vnc
                                                       .import.rd;
-                                       if (bpi_interior->extra->num_labels)
+                                       if (bgp_path_info_num_labels(
+                                                   bpi_interior))
                                                label = decode_label(
                                                        &bpi_interior->extra
                                                                 ->label[0]);
@@ -2019,7 +2021,7 @@ void vnc_import_bgp_exterior_add_route_interior(
 
                        if (bpi_interior->extra) {
                                prd = &bpi_interior->extra->vnc->vnc.import.rd;
-                               if (bpi_interior->extra->num_labels)
+                               if (bgp_path_info_num_labels(bpi_interior))
                                        label = decode_label(
                                                &bpi_interior->extra->label[0]);
                        } else
@@ -2134,7 +2136,7 @@ void vnc_import_bgp_exterior_add_route_interior(
                                        if (bpi->extra) {
                                                prd = &bpi->extra->vnc->vnc
                                                               .import.rd;
-                                               if (bpi->extra->num_labels)
+                                               if (bgp_path_info_num_labels(bpi))
                                                        label = decode_label(
                                                                &bpi->extra->label
                                                                         [0]);
@@ -2158,7 +2160,8 @@ void vnc_import_bgp_exterior_add_route_interior(
                                if (bpi_interior->extra) {
                                        prd = &bpi_interior->extra->vnc->vnc
                                                       .import.rd;
-                                       if (bpi_interior->extra->num_labels)
+                                       if (bgp_path_info_num_labels(
+                                                   bpi_interior))
                                                label = decode_label(
                                                        &bpi_interior->extra
                                                                 ->label[0]);
@@ -2278,7 +2281,7 @@ void vnc_import_bgp_exterior_add_route_interior(
                         */
                        if (bpi_interior->extra) {
                                prd = &bpi_interior->extra->vnc->vnc.import.rd;
-                               if (bpi_interior->extra->num_labels)
+                               if (bgp_path_info_num_labels(bpi_interior))
                                        label = decode_label(
                                                &bpi_interior->extra->label[0]);
                        } else
@@ -2387,7 +2390,7 @@ void vnc_import_bgp_exterior_del_route_interior(
 
                if (bpi_interior->extra) {
                        prd = &bpi_interior->extra->vnc->vnc.import.rd;
-                       if (bpi_interior->extra->num_labels)
+                       if (bgp_path_info_num_labels(bpi_interior))
                                label = decode_label(
                                        &bpi_interior->extra->label[0]);
                } else
@@ -2466,7 +2469,7 @@ void vnc_import_bgp_exterior_del_route_interior(
 
                                if (bpi->extra) {
                                        prd = &bpi->extra->vnc->vnc.import.rd;
-                                       if (bpi->extra->num_labels)
+                                       if (bgp_path_info_num_labels(bpi))
                                                label = decode_label(
                                                        &bpi->extra->label[0]);
                                } else