(safi == SAFI_MPLS_VPN))
prd = (struct prefix_rd *)bgp_dest_get_prefix(bmp->syncrdpos);
- bpi_num_labels = bgp_path_info_num_labels(bpi);
+ bpi_num_labels = BGP_PATH_INFO_NUM_LABELS(bpi);
if (bpi && CHECK_FLAG(bpi->flags, BGP_PATH_SELECTED) &&
CHECK_FLAG(bmp->targets->afimon[afi][safi], BMP_MON_LOC_RIB)) {
break;
}
- bpi_num_labels = bgp_path_info_num_labels(bpi);
+ bpi_num_labels = BGP_PATH_INFO_NUM_LABELS(bpi);
bmp_monitor(bmp, peer, 0, BMP_PEER_TYPE_LOC_RIB_INSTANCE, &bqe->p, prd,
bpi ? bpi->attr : NULL, afi, safi,
break;
}
- bpi_num_labels = bgp_path_info_num_labels(bpi);
+ bpi_num_labels = BGP_PATH_INFO_NUM_LABELS(bpi);
bmp_monitor(bmp, peer, BMP_PEER_FLAG_L,
BMP_PEER_TYPE_GLOBAL_INSTANCE, &bqe->p, prd,
if (parent_pi->extra)
pi->extra->igpmetric = parent_pi->extra->igpmetric;
- if (bgp_path_info_num_labels(parent_pi))
+ if (BGP_PATH_INFO_NUM_LABELS(parent_pi))
pi->extra->labels = bgp_labels_intern(parent_pi->extra->labels);
bgp_path_info_add(dest, pi);
if (!dest || !pi || !to)
return MPLS_INVALID_LABEL;
- remote_label = bgp_path_info_num_labels(pi)
+ remote_label = BGP_PATH_INFO_NUM_LABELS(pi)
? pi->extra->labels->label[0]
: MPLS_INVALID_LABEL;
from = pi->peer;
&& !dest_affected)
continue;
- num_labels = bgp_path_info_num_labels(pi);
+ num_labels = BGP_PATH_INFO_NUM_LABELS(pi);
label_pnt = num_labels ? &pi->extra->labels->label[0]
: NULL;
}
num_labels = origin_local ? 0
- : bgp_path_info_num_labels(path_vpn);
+ : BGP_PATH_INFO_NUM_LABELS(path_vpn);
label_pnt = num_labels ? path_vpn->extra->labels->label : NULL;
}
struct bgp_mplsvpn_nh_label_bind_cache_head *tree;
mpls_label_t label;
- label = bgp_path_info_num_labels(pi)
+ label = BGP_PATH_INFO_NUM_LABELS(pi)
? decode_label(&pi->extra->labels->label[0])
: MPLS_INVALID_LABEL;
return 1;
else if (safi == SAFI_UNICAST && pi &&
pi->sub_type == BGP_ROUTE_IMPORTED &&
- bgp_path_info_num_labels(pi) && !bnc->is_evpn_gwip_nexthop)
+ 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)
if (safi == SAFI_UNICAST &&
path->sub_type == BGP_ROUTE_IMPORTED &&
- bgp_path_info_num_labels(path) &&
+ BGP_PATH_INFO_NUM_LABELS(path) &&
!(bre && bre->type == OVERLAY_INDEX_GATEWAY_IP)) {
bnc_is_valid_nexthop =
bgp_isvalid_nexthop_for_l3vpn(bnc, path)
bool bgp_path_info_has_valid_label(const struct bgp_path_info *path)
{
- if (!bgp_path_info_num_labels(path))
+ if (!BGP_PATH_INFO_NUM_LABELS(path))
return false;
return bgp_is_valid_label(&path->extra->labels->label[0]);
uint8_t bpi_num_labels;
const mpls_label_t *bpi_label;
- bpi_num_labels = bgp_path_info_num_labels(bpi);
+ bpi_num_labels = BGP_PATH_INFO_NUM_LABELS(bpi);
bpi_label = bpi_num_labels ? bpi->extra->labels->label : NULL;
return bgp_labels_same(bpi_label, bpi_num_labels,
(const mpls_label_t *)label, n);
}
-uint8_t bgp_path_info_num_labels(const struct bgp_path_info *pi)
-{
- if (!pi)
- return 0;
-
- if (!pi->extra)
- return 0;
-
- if (!pi->extra->labels)
- return 0;
-
- return pi->extra->labels->num_labels;
-}
-
/* Free bgp route information. */
void bgp_path_info_free_with_caller(const char *name,
struct bgp_path_info *path)
* off box as that the RT and RD created are localy
* significant and globaly useless.
*/
- if (safi == SAFI_MPLS_VPN && bgp_path_info_num_labels(pi) &&
+ if (safi == SAFI_MPLS_VPN && BGP_PATH_INFO_NUM_LABELS(pi) &&
pi->extra->labels->label[0] == BGP_PREVENT_VRF_2_VRF_LEAK)
return false;
bgp, p, pi);
}
} else {
- if (bgp_path_info_num_labels(pi))
+ if (BGP_PATH_INFO_NUM_LABELS(pi))
label = decode_label(
&pi->extra->labels->label[0]);
}
json_nexthop_global = json_object_new_object();
}
- if (bgp_path_info_num_labels(path)) {
+ if (BGP_PATH_INFO_NUM_LABELS(path)) {
bgp_evpn_label2str(path->extra->labels->label,
path->extra->labels->num_labels, vni_buf,
sizeof(vni_buf));
/* path PREFIX (addpath rxid NUMBER) */
#define PATH_ADDPATH_STR_BUFFER PREFIX2STR_BUFFER + 32
+#define BGP_PATH_INFO_NUM_LABELS(pi) \
+ ((pi) && (pi)->extra && (pi)->extra->labels \
+ ? (pi)->extra->labels->num_labels \
+ : 0)
+
enum bgp_path_type {
BGP_PATH_SHOW_ALL,
BGP_PATH_SHOW_BESTPATH,
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 uint8_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,
return RMAP_NOOP;
for (label_cnt = 0; label_cnt < BGP_MAX_LABELS &&
- label_cnt < bgp_path_info_num_labels(path);
+ label_cnt < BGP_PATH_INFO_NUM_LABELS(path);
label_cnt++) {
if (vni == label2vni(&path->extra->labels->label[label_cnt]))
return RMAP_MATCH;
struct bgp_path_info *path =
bgp_dest_get_bgp_path_info(bgp_dest);
- num_labels = bgp_path_info_num_labels(path);
+ num_labels = BGP_PATH_INFO_NUM_LABELS(path);
label = num_labels ? path->extra->labels->label : NULL;
(void)bgp_update(ain->peer, bgp_dest_get_prefix(bgp_dest),
label_pnt = &label;
num_labels = 1;
} else {
- num_labels = bgp_path_info_num_labels(path);
+ num_labels = BGP_PATH_INFO_NUM_LABELS(path);
label_pnt =
num_labels
? &path->extra->labels->label[0]
api_nh->srte_color = bgp_attr_get_color(info->attr);
if (bgp_debug_zebra(&api->prefix)) {
- if (bgp_path_info_num_labels(mpinfo)) {
+ if (BGP_PATH_INFO_NUM_LABELS(mpinfo)) {
zlog_debug("%s: p=%pFX, bgp_is_valid_label: %d",
__func__, p,
bgp_is_valid_label(
mpinfo->peer->sort == BGP_PEER_CONFED))
*allow_recursion = true;
- num_labels = bgp_path_info_num_labels(mpinfo);
+ num_labels = BGP_PATH_INFO_NUM_LABELS(mpinfo);
labels = num_labels ? mpinfo->extra->labels->label : NULL;
if (num_labels && (is_evpn || bgp_is_valid_label(&labels[0]))) {
/* label comes from MP_REACH_NLRI label */
vo->v.l2addr.label =
- bgp_path_info_num_labels(bpi)
+ BGP_PATH_INFO_NUM_LABELS(bpi)
? decode_label(&bpi->extra->labels->label[0])
: MPLS_INVALID_LABEL;
BGP_PATH_REMOVED))
continue;
- if (bgp_path_info_num_labels(bpi))
+ if (BGP_PATH_INFO_NUM_LABELS(bpi))
label = decode_label(
&bpi->extra->labels
->label[0]);
/* label comes from MP_REACH_NLRI label */
vo->v.l2addr.label =
- bgp_path_info_num_labels(bpi)
+ BGP_PATH_INFO_NUM_LABELS(bpi)
? decode_label(&bpi->extra->labels->label[0])
: MPLS_INVALID_LABEL;
XFREE(MTYPE_ECOMMUNITY_STR, s);
}
- if (bgp_path_info_num_labels(bpi)) {
+ if (BGP_PATH_INFO_NUM_LABELS(bpi)) {
if (bpi->extra->labels->label[0] == BGP_PREVENT_VRF_2_VRF_LEAK)
vty_out(vty, " label=VRF2VRF");
else
snprintf(buf_un, sizeof(buf_un), "%s",
inet_ntop(pfx_vn.family, &pfx_vn.u.prefix, buf_ntop,
sizeof(buf_ntop)));
- if (bgp_path_info_num_labels(bpi)) {
+ if (BGP_PATH_INFO_NUM_LABELS(bpi)) {
uint32_t l = decode_label(&bpi->extra->labels->label[0]);
snprintf(buf_vn, sizeof(buf_vn), "Label: %d", l);
} else /* should never happen */
}
}
}
- if (tun_type != BGP_ENCAP_TYPE_MPLS && bgp_path_info_num_labels(bpi)) {
+ if (tun_type != BGP_ENCAP_TYPE_MPLS && BGP_PATH_INFO_NUM_LABELS(bpi)) {
uint32_t l = decode_label(&bpi->extra->labels->label[0]);
if (!MPLS_LABEL_IS_NULL(l)) {
if (bgp_attr_get_ecommunity(bpi->attr))
ecommunity_merge(new_ecom, bgp_attr_get_ecommunity(bpi->attr));
- if (bgp_path_info_num_labels(bpi))
+ if (BGP_PATH_INFO_NUM_LABELS(bpi))
label = decode_label(&bpi->extra->labels->label[0]);
else
label = MPLS_INVALID_LABEL;
else
prd = NULL;
- if (bgp_path_info_num_labels(bpi_interior))
+ if (BGP_PATH_INFO_NUM_LABELS(bpi_interior))
label = decode_label(
&bpi_interior->extra->labels
->label[0]);
else
prd = NULL;
- if (bgp_path_info_num_labels(bpi_interior))
+ if (BGP_PATH_INFO_NUM_LABELS(bpi_interior))
label = decode_label(
&bpi_interior->extra->labels
->label[0]);
else
prd = NULL;
- if (bgp_path_info_num_labels(bpi_interior))
+ if (BGP_PATH_INFO_NUM_LABELS(bpi_interior))
label = decode_label(
&bpi_interior->extra->labels->label[0]);
else
else
prd = NULL;
- if (bgp_path_info_num_labels(bpi))
+ if (BGP_PATH_INFO_NUM_LABELS(bpi))
label = decode_label(
&bpi->extra->labels
->label[0]);
else
prd = NULL;
- if (bgp_path_info_num_labels(bpi_interior))
+ if (BGP_PATH_INFO_NUM_LABELS(bpi_interior))
label = decode_label(
&bpi_interior->extra->labels
->label[0]);
else
prd = NULL;
- if (bgp_path_info_num_labels(bpi_interior))
+ if (BGP_PATH_INFO_NUM_LABELS(bpi_interior))
label = decode_label(
&bpi_interior->extra->labels->label[0]);
else
else
prd = NULL;
- if (bgp_path_info_num_labels(bpi_interior))
+ if (BGP_PATH_INFO_NUM_LABELS(bpi_interior))
label = decode_label(
&bpi_interior->extra->labels->label[0]);
else
else
prd = NULL;
- if (bgp_path_info_num_labels(bpi))
+ if (BGP_PATH_INFO_NUM_LABELS(bpi))
label = decode_label(
&bpi->extra->labels->label[0]);
else