return 0;
}
+/* Flag if the route's parent is a EVPN route. */
+static inline int is_route_parent_evpn(struct bgp_info *ri)
+{
+ struct bgp_info *parent_ri;
+ struct bgp_table *table;
+ struct bgp_node *rn;
+
+ /* If not imported (or doesn't have a parent), bail. */
+ if (ri->sub_type != BGP_ROUTE_IMPORTED ||
+ !ri->extra ||
+ !ri->extra->parent)
+ return 0;
+
+ /* See if the parent is of family L2VPN/EVPN */
+ parent_ri = (struct bgp_info *)ri->extra->parent;
+ rn = parent_ri->net;
+ if (!rn)
+ return 0;
+ table = bgp_node_table(rn);
+ if (table &&
+ table->afi == AFI_L2VPN &&
+ table->safi == SAFI_EVPN)
+ return 1;
+ return 0;
+}
+
extern void bgp_evpn_advertise_type5_route(struct bgp *bgp_vrf,
struct prefix *p,
struct attr *src_attr, afi_t afi,
}
if (!(exist->sub_type == BGP_ROUTE_NORMAL ||
- new->sub_type == BGP_ROUTE_IMPORTED)) {
+ exist->sub_type == BGP_ROUTE_IMPORTED)) {
if (debug)
zlog_debug(
"%s: %s loses to %s due to preferred BGP_ROUTE type",
if (info->sub_type == BGP_ROUTE_AGGREGATE)
zapi_route_set_blackhole(&api, BLACKHOLE_NULL);
- /* If it is an EVPN route mark as such.
- * Currently presence of rmac in attr denotes
- * this is an EVPN type-2 route
- */
- if (info->sub_type == BGP_ROUTE_IMPORTED)
+ /* If the route's source is EVPN, flag as such. */
+ if (is_route_parent_evpn(info))
SET_FLAG(api.flags, ZEBRA_FLAG_EVPN_ROUTE);
if (peer->sort == BGP_PEER_IBGP || peer->sort == BGP_PEER_CONFED
api.safi = safi;
api.prefix = *p;
- /* If it is an EVPN route mark as such.
- * Currently presence of rmac in attr denotes
- * this is an EVPN type-2 route
- */
- if (info->sub_type == BGP_ROUTE_IMPORTED)
+ /* If the route's source is EVPN, flag as such. */
+ if (is_route_parent_evpn(info))
SET_FLAG(api.flags, ZEBRA_FLAG_EVPN_ROUTE);
if (peer->sort == BGP_PEER_IBGP) {