afi_t afi, safi_t safi, struct bgp *bgp)
{
struct bgp_dest *dest;
- struct prefix q;
+ struct prefix q = {0};
struct peer *peer;
struct bgp_distance *bdistance;
struct access_list *alist;
if (pinfo->attr->distance)
return pinfo->attr->distance;
- /* Check source address. */
- if (!sockunion2hostprefix(&peer->su, &q))
+ /* Check source address.
+ * Note: for aggregate route, peer can have unspec af type.
+ */
+ if (pinfo->sub_type != BGP_ROUTE_AGGREGATE
+ && !sockunion2hostprefix(&peer->su, &q))
return 0;
dest = bgp_node_match(bgp_distance_table[afi][safi], &q);
inet_ntop(api.prefix.family, &nexthop, buf,
sizeof(buf));
zlog_debug(
- "Rx route ADD VRF %u %s[%d] %pFX nexthop %s (type %d if %u) metric %u tag %" ROUTE_TAG_PRI,
+ "Rx route ADD VRF %u %s[%d] %pFX nexthop %s (type %d if %u) metric %u distance %u tag %" ROUTE_TAG_PRI,
vrf_id, zebra_route_string(api.type),
api.instance, &api.prefix, buf, nhtype, ifindex,
- api.metric, api.tag);
+ api.metric, api.distance, api.tag);
} else {
zlog_debug("Rx route DEL VRF %u %s[%d] %pFX", vrf_id,
zebra_route_string(api.type), api.instance,