Commit dcb69d767a for frr

commit dcb69d767a7321cc69ae8f833b3059ab468bed46
Author: Donald Sharp <sharpd@nvidia.com>
Date:   Tue Oct 20 10:43:46 2026 -0400

    ospf6d: Standardize prefix output, %pFX, in debugs

    Currently there are two problems with using %pFX in ospf6d
    debugs:

    a) The vrf name, vrf id and table were not being output for
    every debug.  When a prefix is used in multiple vrf's it
    is difficult to know if the debug being looked at is for
    the instance of interest.

    b) The output was not standardized.  Some debugs had the vrf
    id after the prefix and most had nothing at all.  Solidify on
    "(%s:%u:%u)%pFX", vrf_name, vrf_id, table_id, prefix.  This
    allows very easy grepping.

    Add OSPF6_DEBUG_VRF() and OSPF6_DEBUG_VRF_ID() to generate the
    vrf name, vrf id and table id arguments.

    ospf6_external_aggregator_free() needs the ospf6 instance to
    output the vrf information so pass it in.

    Signed-off-by: Donald Sharp <sharpd@nvidia.com>

diff --git a/ospf6d/ospf6_abr.c b/ospf6d/ospf6_abr.c
index 57db539b65..80526e5a0e 100644
--- a/ospf6d/ospf6_abr.c
+++ b/ospf6d/ospf6_abr.c
@@ -246,9 +246,8 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route,
 					 &route->prefix)
 			       == FILTER_DENY) {
 			if (IS_OSPF6_DEBUG_ABR)
-				zlog_debug(
-					"%s: prefix %pFX was denied by export-list",
-					__func__, &route->prefix);
+				zlog_debug("%s: prefix (%s:%u:%u)%pFX was denied by export-list",
+					   __func__, OSPF6_DEBUG_VRF(area->ospf6), &route->prefix);
 			filter = true;
 		}

@@ -258,9 +257,8 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route,
 					 &route->prefix)
 			       != PREFIX_PERMIT) {
 			if (IS_OSPF6_DEBUG_ABR)
-				zlog_debug(
-					"%s: prefix %pFX was denied by prefix-list out",
-					__func__, &route->prefix);
+				zlog_debug("%s: prefix (%s:%u:%u)%pFX was denied by prefix-list out",
+					   __func__, OSPF6_DEBUG_VRF(area->ospf6), &route->prefix);
 			filter = true;
 		}

@@ -269,9 +267,8 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route,
 		    && access_list_apply(IMPORT_LIST(area), &route->prefix)
 			       == FILTER_DENY) {
 			if (IS_OSPF6_DEBUG_ABR)
-				zlog_debug(
-					"%s: prefix %pFX was denied by import-list",
-					__func__, &route->prefix);
+				zlog_debug("%s: prefix (%s:%u:%u)%pFX was denied by import-list",
+					   __func__, OSPF6_DEBUG_VRF(area->ospf6), &route->prefix);
 			filter = true;
 		}

@@ -280,9 +277,8 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route,
 		    && prefix_list_apply(PREFIX_LIST_IN(area), &route->prefix)
 			       != PREFIX_PERMIT) {
 			if (IS_OSPF6_DEBUG_ABR)
-				zlog_debug(
-					"%s: prefix %pFX was denied by prefix-list in",
-					__func__, &route->prefix);
+				zlog_debug("%s: prefix (%s:%u:%u)%pFX was denied by prefix-list in",
+					   __func__, OSPF6_DEBUG_VRF(area->ospf6), &route->prefix);
 			filter = true;
 		}

@@ -333,10 +329,9 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route,
 		    htons(OSPF6_LSTYPE_INTER_PREFIX)) {
 			if (!CHECK_FLAG(route->flag, OSPF6_ROUTE_BEST)) {
 				if (is_debug)
-					zlog_debug(
-						"%s: route %pFX with cost %u is not best, ignore.",
-						__func__, &route->prefix,
-						route->path.cost);
+					zlog_debug("%s: route (%s:%u:%u)%pFX with cost %u is not best, ignore.",
+						   __func__, OSPF6_DEBUG_VRF(area->ospf6),
+						   &route->prefix, route->path.cost);
 				return 0;
 			}
 		}
@@ -345,18 +340,17 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route,
 		    htons(OSPF6_LSTYPE_INTRA_PREFIX)) {
 			if (!CHECK_FLAG(route->flag, OSPF6_ROUTE_BEST)) {
 				if (is_debug)
-					zlog_debug(
-						"%s: intra-prefix route %pFX with cost %u is not best, ignore.",
-						__func__, &route->prefix,
-						route->path.cost);
+					zlog_debug("%s: intra-prefix route (%s:%u:%u)%pFX with cost %u is not best, ignore.",
+						   __func__, OSPF6_DEBUG_VRF(area->ospf6),
+						   &route->prefix, route->path.cost);
 				return 0;
 			}
 		}

 		if (is_debug)
-			zlog_debug(
-				"Originating summary in area %s for %pFX cost %u",
-				area->name, &route->prefix, route->path.cost);
+			zlog_debug("Originating summary in area %s for (%s:%u:%u)%pFX cost %u",
+				   area->name, OSPF6_DEBUG_VRF(area->ospf6), &route->prefix,
+				   route->path.cost);
 	}

 	/* if this route has just removed, remove corresponding LSA */
@@ -469,9 +463,9 @@ int ospf6_abr_originate_summary_to_area(struct ospf6_route *route,
 		    && (route->path.area_id != OSPF_AREA_BACKBONE
 			|| !IS_AREA_TRANSIT(area))) {
 			if (is_debug)
-				zlog_debug(
-					"Suppressed by range %pFX of area %s",
-					&range->prefix, route_area->name);
+				zlog_debug("Suppressed by range (%s:%u:%u)%pFX of area %s",
+					   OSPF6_DEBUG_VRF(area->ospf6), &range->prefix,
+					   route_area->name);
 			/* The existing summary route could be a range, don't
 			 * remove it in this case
 			 */
@@ -685,8 +679,8 @@ void ospf6_abr_range_update(struct ospf6_route *range, struct ospf6 *ospf6)
 	cost = ospf6_abr_range_compute_cost(range, ospf6);

 	if (IS_OSPF6_DEBUG_ABR)
-		zlog_debug("%s: range %pFX, cost %d", __func__, &range->prefix,
-			   cost);
+		zlog_debug("%s: range (%s:%u:%u)%pFX, cost %d", __func__, OSPF6_DEBUG_VRF(ospf6),
+			   &range->prefix, cost);

 	/* Non-zero cost is a proxy for active longer prefixes in this range.
 	 * If there are active routes covered by this range AND either the
@@ -706,7 +700,8 @@ void ospf6_abr_range_update(struct ospf6_route *range, struct ospf6 *ospf6)
 		return;

 	if (IS_OSPF6_DEBUG_ABR)
-		zlog_debug("%s: range %pFX update", __func__, &range->prefix);
+		zlog_debug("%s: range (%s:%u:%u)%pFX update", __func__, OSPF6_DEBUG_VRF(ospf6),
+			   &range->prefix);

 	if (CHECK_FLAG(range->flag, OSPF6_ROUTE_NSSA_RANGE)) {
 		if (CHECK_FLAG(range->flag, OSPF6_ROUTE_ACTIVE_SUMMARY)
@@ -905,8 +900,8 @@ void ospf6_abr_old_route_remove(struct ospf6_lsa *lsa, struct ospf6_route *old,
 				struct ospf6_route_table *table)
 {
 	if (IS_OSPF6_DEBUG_ABR)
-		zlog_debug("%s: route %pFX, paths %d", __func__, &old->prefix,
-			   listcount(old->paths));
+		zlog_debug("%s: route (%s:%u:%u)%pFX, paths %d", __func__,
+			   OSPF6_DEBUG_VRF(old->ospf6), &old->prefix, listcount(old->paths));

 	if (listcount(old->paths) > 1) {
 		struct listnode *anode, *anext, *nnode, *rnode, *rnext;
@@ -938,11 +933,9 @@ void ospf6_abr_old_route_remove(struct ospf6_lsa *lsa, struct ospf6_route *old,
 			if (listcount(old->paths)) {
 				if (IS_OSPF6_DEBUG_ABR
 				    || IS_OSPF6_DEBUG_EXAMIN(INTER_PREFIX))
-					zlog_debug("%s: old %pFX updated nh %u",
-						   __func__, &old->prefix,
-						   old->nh_list ? listcount(
-							   old->nh_list)
-								: 0);
+					zlog_debug("%s: old (%s:%u:%u)%pFX updated nh %u", __func__,
+						   OSPF6_DEBUG_VRF(old->ospf6), &old->prefix,
+						   old->nh_list ? listcount(old->nh_list) : 0);

 				if (table->hook_add)
 					(*table->hook_add)(old);
@@ -1039,8 +1032,8 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
 	if (route) {
 		ospf6_route_lock(route);
 		if (is_debug)
-			zlog_debug("%s: route %pFX, paths %d", __func__,
-				   &prefix, listcount(route->paths));
+			zlog_debug("%s: route (%s:%u:%u)%pFX, paths %d", __func__,
+				   OSPF6_DEBUG_VRF(oa->ospf6), &prefix, listcount(route->paths));
 	}
 	while (route && ospf6_route_is_prefix(&prefix, route)) {
 		if (route->path.area_id == oa->area_id
@@ -1167,9 +1160,8 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
 	    || CHECK_FLAG(abr_entry->flag, OSPF6_ROUTE_REMOVE)
 	    || !CHECK_FLAG(abr_entry->path.router_bits, OSPF6_ROUTER_BIT_B)) {
 		if (is_debug)
-			zlog_debug(
-				"%s: ABR router entry %pFX does not exist, ignore",
-				__func__, &abr_prefix);
+			zlog_debug("%s: ABR router entry (%s:%u:%u)%pFX does not exist, ignore",
+				   __func__, OSPF6_DEBUG_VRF(oa->ospf6), &abr_prefix);
 		if (old) {
 			if (old->type == OSPF6_DEST_TYPE_ROUTER &&
 			    oa->intra_brouter_calc) {
@@ -1218,8 +1210,8 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
 	old = ospf6_route_lookup(&prefix, table);
 	if (old) {
 		if (is_debug)
-			zlog_debug("%s: found old route %pFX, paths %d",
-				   __func__, &prefix, listcount(old->paths));
+			zlog_debug("%s: found old route (%s:%u:%u)%pFX, paths %d", __func__,
+				   OSPF6_DEBUG_VRF(oa->ospf6), &prefix, listcount(old->paths));
 	}
 	for (old_route = old; old_route; old_route = old_route->next) {

@@ -1236,10 +1228,9 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)

 		if ((ospf6_route_cmp(route, old_route) != 0)) {
 			if (is_debug)
-				zlog_debug(
-					"%s: old %p %pFX cost %u new route cost %u are not same",
-					__func__, (void *)old_route, &prefix,
-					old_route->path.cost, route->path.cost);
+				zlog_debug("%s: old %p (%s:%u:%u)%pFX cost %u new route cost %u are not same",
+					   __func__, (void *)old_route, OSPF6_DEBUG_VRF(oa->ospf6),
+					   &prefix, old_route->path.cost, route->path.cost);

 			/* Check new route's adv. router is same in one of
 			 * the paths with differed cost, if so remove the
@@ -1271,16 +1262,12 @@ void ospf6_abr_examin_summary(struct ospf6_lsa *lsa, struct ospf6_area *oa)
 			listnode_add_sort(old_route->paths, ecmp_path);

 			if (is_debug) {
-				zlog_debug(
-					"%s: route %pFX cost %u another path %pI4 added with nh %u, effective paths %u nh %u",
-					__func__, &route->prefix,
-					old_route->path.cost,
-					&ecmp_path->origin.adv_router,
-					listcount(ecmp_path->nh_list),
-					old_route->paths
-						? listcount(old_route->paths)
-						: 0,
-					listcount(old_route->nh_list));
+				zlog_debug("%s: route (%s:%u:%u)%pFX cost %u another path %pI4 added with nh %u, effective paths %u nh %u",
+					   __func__, OSPF6_DEBUG_VRF(oa->ospf6), &route->prefix,
+					   old_route->path.cost, &ecmp_path->origin.adv_router,
+					   listcount(ecmp_path->nh_list),
+					   old_route->paths ? listcount(old_route->paths) : 0,
+					   listcount(old_route->nh_list));
 			}
 		} else {
 			struct ospf6_route *tmp_route;
diff --git a/ospf6d/ospf6_asbr.c b/ospf6d/ospf6_asbr.c
index 3c8367f72e..549910ca89 100644
--- a/ospf6d/ospf6_asbr.c
+++ b/ospf6d/ospf6_asbr.c
@@ -97,7 +97,7 @@ struct ospf6_lsa *ospf6_as_external_lsa_originate(struct ospf6_route *route,
 	}

 	if (IS_OSPF6_DEBUG_ASBR || IS_OSPF6_DEBUG_ORIGINATE(AS_EXTERNAL))
-		zlog_debug("Originate AS-External-LSA for %pFX",
+		zlog_debug("Originate AS-External-LSA for (%s:%u:%u)%pFX", OSPF6_DEBUG_VRF(ospf6),
 			   &route->prefix);

 	/* prepare buffer */
@@ -278,10 +278,9 @@ void ospf6_asbr_update_route_ecmp_path(struct ospf6_route *old,
 				continue;

 			if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL)) {
-				zlog_debug(
-					"%s: route %pFX cost old %u new %u is not same, replace route",
-					__func__, &old_route->prefix, o_path->cost,
-					route->path.cost);
+				zlog_debug("%s: route (%s:%u:%u)%pFX cost old %u new %u is not same, replace route",
+					   __func__, OSPF6_DEBUG_VRF(ospf6), &old_route->prefix,
+					   o_path->cost, route->path.cost);
 			}

 			/* Remove selected current rout path's nh from
@@ -340,11 +339,10 @@ void ospf6_asbr_update_route_ecmp_path(struct ospf6_route *old,
 				}
 			} else {
 				if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL)) {
-					zlog_debug(
-						"%s: route %pFX old cost %u new cost %u, delete old entry.",
-						__func__, &old_route->prefix,
-						old_route->path.cost,
-						route->path.cost);
+					zlog_debug("%s: route (%s:%u:%u)%pFX old cost %u new cost %u, delete old entry.",
+						   __func__, OSPF6_DEBUG_VRF(ospf6),
+						   &old_route->prefix, old_route->path.cost,
+						   route->path.cost);
 				}
 				if (old == old_route)
 					old = next_route;
@@ -374,11 +372,9 @@ void ospf6_asbr_update_route_ecmp_path(struct ospf6_route *old,
 		    && (old_route->path.u.cost_e2 == route->path.u.cost_e2)) {

 			if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL)) {
-				zlog_debug(
-					"%s: old route %pFX path  cost %u e2 %u",
-					__func__, &old_route->prefix,
-					old_route->path.cost,
-					old_route->path.u.cost_e2);
+				zlog_debug("%s: old route (%s:%u:%u)%pFX path  cost %u e2 %u",
+					   __func__, OSPF6_DEBUG_VRF(ospf6), &old_route->prefix,
+					   old_route->path.cost, old_route->path.u.cost_e2);
 			}
 			route_found = true;
 			/* check if this path exists already in
@@ -407,14 +403,12 @@ void ospf6_asbr_update_route_ecmp_path(struct ospf6_route *old,
 				listnode_add_sort(old_route->paths, ecmp_path);

 				if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL)) {
-					zlog_debug(
-						"%s: route %pFX another path added with nh %u, effective paths %u nh %u",
-						__func__, &route->prefix,
-						listcount(ecmp_path->nh_list),
-						old_route->paths ? listcount(
-							old_route->paths)
-								 : 0,
-						listcount(old_route->nh_list));
+					zlog_debug("%s: route (%s:%u:%u)%pFX another path added with nh %u, effective paths %u nh %u",
+						   __func__, OSPF6_DEBUG_VRF(ospf6),
+						   &route->prefix, listcount(ecmp_path->nh_list),
+						   old_route->paths ? listcount(old_route->paths)
+								    : 0,
+						   listcount(old_route->nh_list));
 				}
 			} else {
 				list_delete_all_node(o_path->nh_list);
@@ -436,10 +430,9 @@ void ospf6_asbr_update_route_ecmp_path(struct ospf6_route *old,
 							ospf6->brouter_table);
 				if (asbr_entry == NULL) {
 					if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL))
-						zlog_debug(
-							"%s: ls_prfix %pFX asbr_entry not found.",
-							__func__,
-							&old_route->prefix);
+						zlog_debug("%s: ls_prfix (%s:%u:%u)%pFX asbr_entry not found.",
+							   __func__, OSPF6_DEBUG_VRF(ospf6),
+							   &old_route->prefix);
 					continue;
 				}
 				ospf6_route_merge_nexthops(old_route,
@@ -447,15 +440,10 @@ void ospf6_asbr_update_route_ecmp_path(struct ospf6_route *old,
 			}

 			if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL))
-				zlog_debug(
-					"%s: route %pFX with effective paths %u nh %u",
-					__func__, &route->prefix,
-					old_route->paths
-						? listcount(old_route->paths)
-						: 0,
-					old_route->nh_list
-						? listcount(old_route->nh_list)
-						: 0);
+				zlog_debug("%s: route (%s:%u:%u)%pFX with effective paths %u nh %u",
+					   __func__, OSPF6_DEBUG_VRF(ospf6), &route->prefix,
+					   old_route->paths ? listcount(old_route->paths) : 0,
+					   old_route->nh_list ? listcount(old_route->nh_list) : 0);

 			/* Update RIB/FIB */
 			if (ospf6->route_table->hook_add)
@@ -549,16 +537,16 @@ void ospf6_asbr_lsa_add(struct ospf6_lsa *lsa)
 	asbr_entry = ospf6_route_lookup(&asbr_id, ospf6->brouter_table);
 	if (asbr_entry == NULL) {
 		if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL))
-			zlog_debug("ASBR entry not found: %pFX", &asbr_id);
+			zlog_debug("ASBR entry not found: (%s:%u:%u)%pFX", OSPF6_DEBUG_VRF(ospf6),
+				   &asbr_id);
 		return;
 	} else {
 		/* The router advertising external LSA can be ASBR or ABR */
 		if (!CHECK_FLAG(asbr_entry->path.router_bits,
 				OSPF6_ROUTER_BIT_E)) {
 			if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL))
-				zlog_debug(
-					"External bit reset ASBR route entry : %pFX",
-					&asbr_id);
+				zlog_debug("External bit reset ASBR route entry : (%s:%u:%u)%pFX",
+					   OSPF6_DEBUG_VRF(ospf6), &asbr_id);
 			return;
 		}

@@ -572,9 +560,8 @@ void ospf6_asbr_lsa_add(struct ospf6_lsa *lsa)
 		    && (asbr_entry->path.area_id != oa->area_id
 			|| asbr_entry->path.type != OSPF6_PATH_TYPE_INTRA)) {
 			if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL))
-				zlog_debug(
-					"Intra-area route to NSSA ASBR not found: %pFX",
-					&asbr_id);
+				zlog_debug("Intra-area route to NSSA ASBR not found: (%s:%u:%u)%pFX",
+					   OSPF6_DEBUG_VRF(ospf6), &asbr_id);
 			return;
 		}
 	}
@@ -619,9 +606,8 @@ void ospf6_asbr_lsa_add(struct ospf6_lsa *lsa)
 			if (!ospf6_ase_forward_address_check(
 				    ospf6, &fwd_addr.u.prefix6)) {
 				if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL))
-					zlog_debug(
-						"Fwd address %pFX is local address",
-						&fwd_addr);
+					zlog_debug("Fwd address (%s:%u:%u)%pFX is local address",
+						   OSPF6_DEBUG_VRF(ospf6), &fwd_addr);
 				return;
 			}

@@ -630,9 +616,8 @@ void ospf6_asbr_lsa_add(struct ospf6_lsa *lsa)
 				&fwd_addr, ospf6->route_table);
 			if (asbr_entry == NULL) {
 				if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL))
-					zlog_debug(
-						"Fwd address not found: %pFX",
-						&fwd_addr);
+					zlog_debug("Fwd address not found: (%s:%u:%u)%pFX",
+						   OSPF6_DEBUG_VRF(ospf6), &fwd_addr);
 				return;
 			}
 		}
@@ -675,13 +660,11 @@ void ospf6_asbr_lsa_add(struct ospf6_lsa *lsa)


 	if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL))
-		zlog_debug(
-			"%s: %s %u route add %pFX cost %u(%u) nh %u", __func__,
-			(type == OSPF6_LSTYPE_AS_EXTERNAL) ? "AS-External"
-							   : "NSSA",
-			(route->path.type == OSPF6_PATH_TYPE_EXTERNAL1) ? 1 : 2,
-			&route->prefix, route->path.cost, route->path.u.cost_e2,
-			listcount(route->nh_list));
+		zlog_debug("%s: %s %u route add (%s:%u:%u)%pFX cost %u(%u) nh %u", __func__,
+			   (type == OSPF6_LSTYPE_AS_EXTERNAL) ? "AS-External" : "NSSA",
+			   (route->path.type == OSPF6_PATH_TYPE_EXTERNAL1) ? 1 : 2,
+			   OSPF6_DEBUG_VRF(ospf6), &route->prefix, route->path.cost,
+			   route->path.u.cost_e2, listcount(route->nh_list));

 	if (type == OSPF6_LSTYPE_AS_EXTERNAL)
 		old = ospf6_route_lookup(&route->prefix, ospf6->route_table);
@@ -704,10 +687,9 @@ void ospf6_asbr_lsa_add(struct ospf6_lsa *lsa)
 		 * list along with addition of ECMP path.
 		 */
 		if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL))
-			zlog_debug("%s : old route %pFX cost %u(%u) nh %u",
-				   __func__, &route->prefix, route->path.cost,
-				   route->path.u.cost_e2,
-				   listcount(route->nh_list));
+			zlog_debug("%s : old route (%s:%u:%u)%pFX cost %u(%u) nh %u", __func__,
+				   OSPF6_DEBUG_VRF(ospf6), &route->prefix, route->path.cost,
+				   route->path.u.cost_e2, listcount(route->nh_list));
 		ospf6_asbr_update_route_ecmp_path(old, route, ospf6);
 	}
 }
@@ -799,16 +781,17 @@ void ospf6_asbr_lsa_remove(struct ospf6_lsa *lsa,

 	if (route == NULL) {
 		if (debug)
-			zlog_debug("AS-External route %pFX not found", &prefix);
+			zlog_debug("AS-External route (%s:%u:%u)%pFX not found",
+				   OSPF6_DEBUG_VRF(ospf6), &prefix);
 		ospf6_route_delete(route_to_del);
 		return;
 	}

 	if (debug)
-		zlog_debug(
-			"%s: Current route %pFX cost %u e2 %u, route to del cost %u e2 %u",
-			__func__, &prefix, route->path.cost, route->path.u.cost_e2,
-			route_to_del->path.cost, route_to_del->path.u.cost_e2);
+		zlog_debug("%s: Current route (%s:%u:%u)%pFX cost %u e2 %u, route to del cost %u e2 %u",
+			   __func__, OSPF6_DEBUG_VRF(ospf6), &prefix, route->path.cost,
+			   route->path.u.cost_e2, route_to_del->path.cost,
+			   route_to_del->path.u.cost_e2);

 	for (ospf6_route_lock(route);
 	     route && ospf6_route_is_prefix(&prefix, route); route = nroute) {
@@ -850,21 +833,18 @@ void ospf6_asbr_lsa_remove(struct ospf6_lsa *lsa,
 							      .cost_e2)) {
 					if (IS_OSPF6_DEBUG_EXAMIN(
 						    AS_EXTERNAL)) {
-						zlog_debug(
-							"%s: route %pFX to delete is not same, cost %u del cost %u. skip",
-							__func__, &prefix,
-							route->path.cost,
-							route_to_del->path
-								.cost);
+						zlog_debug("%s: route (%s:%u:%u)%pFX to delete is not same, cost %u del cost %u. skip",
+							   __func__, OSPF6_DEBUG_VRF(ospf6),
+							   &prefix, route->path.cost,
+							   route_to_del->path.cost);
 					}
 					continue;
 				}

 				if (debug) {
-					zlog_debug(
-						"%s: route %pFX path found with cost %u nh %u to remove.",
-						__func__, &prefix, route->path.cost,
-						listcount(o_path->nh_list));
+					zlog_debug("%s: route (%s:%u:%u)%pFX path found with cost %u nh %u to remove.",
+						   __func__, OSPF6_DEBUG_VRF(ospf6), &prefix,
+						   route->path.cost, listcount(o_path->nh_list));
 				}

 				/* Remove found path's nh_list from
@@ -902,17 +882,14 @@ void ospf6_asbr_lsa_remove(struct ospf6_lsa *lsa,
 				}

 				if (debug) {
-					zlog_debug(
-						"%s: AS-External %u route %pFX update paths %u nh %u",
-						__func__,
-						(route->path.type
-						 == OSPF6_PATH_TYPE_EXTERNAL1)
-							? 1
-							: 2,
-						&route->prefix, listcount(route->paths),
-						route->nh_list ? listcount(
-							route->nh_list)
-							       : 0);
+					zlog_debug("%s: AS-External %u route (%s:%u:%u)%pFX update paths %u nh %u",
+						   __func__,
+						   (route->path.type == OSPF6_PATH_TYPE_EXTERNAL1)
+							   ? 1
+							   : 2,
+						   OSPF6_DEBUG_VRF(ospf6), &route->prefix,
+						   listcount(route->paths),
+						   route->nh_list ? listcount(route->nh_list) : 0);
 				}

 				if (listcount(route->paths)) {
@@ -966,10 +943,9 @@ void ospf6_asbr_lsa_remove(struct ospf6_lsa *lsa,
 				|| (route->path.u.cost_e2
 				    != route_to_del->path.u.cost_e2))) {
 				if (debug) {
-					zlog_debug(
-						"%s: route %pFX to delete is not same, cost %u del cost %u. skip",
-						__func__, &prefix, route->path.cost,
-						route_to_del->path.cost);
+					zlog_debug("%s: route (%s:%u:%u)%pFX to delete is not same, cost %u del cost %u. skip",
+						   __func__, OSPF6_DEBUG_VRF(ospf6), &prefix,
+						   route->path.cost, route_to_del->path.cost);
 				}
 				continue;
 			}
@@ -981,14 +957,10 @@ void ospf6_asbr_lsa_remove(struct ospf6_lsa *lsa,
 				continue;
 		}
 		if (debug) {
-			zlog_debug(
-				"%s: AS-External %u route remove %pFX cost %u(%u) nh %u",
-				__func__,
-				route->path.type == OSPF6_PATH_TYPE_EXTERNAL1
-					? 1
-					: 2,
-				&route->prefix, route->path.cost, route->path.u.cost_e2,
-				listcount(route->nh_list));
+			zlog_debug("%s: AS-External %u route remove (%s:%u:%u)%pFX cost %u(%u) nh %u",
+				   __func__, route->path.type == OSPF6_PATH_TYPE_EXTERNAL1 ? 1 : 2,
+				   OSPF6_DEBUG_VRF(ospf6), &route->prefix, route->path.cost,
+				   route->path.u.cost_e2, listcount(route->nh_list));
 		}
 		if (type == OSPF6_LSTYPE_TYPE_7)
 			ospf6_route_remove(route, oa->route_table);
@@ -1381,10 +1353,8 @@ ospf6_external_aggr_match(struct ospf6 *ospf6, struct prefix *p)

 	if (IS_OSPF6_DEBUG_AGGR) {
 		struct ospf6_external_aggr_rt *ag = node->info;
-		zlog_debug("%s: Matching aggregator found.prefix: %pFX Aggregator %pFX",
-			__func__,
-			p,
-			&ag->p);
+		zlog_debug("%s: Matching aggregator found.prefix: (%s:%u:%u)%pFX Aggregator (%s:%u:%u)%pFX",
+			   __func__, OSPF6_DEBUG_VRF(ospf6), p, OSPF6_DEBUG_VRF(ospf6), &ag->p);
 	}

 	route_unlock_node(node);
@@ -1466,10 +1436,9 @@ void ospf6_asbr_redistribute_add(int type, ifindex_t ifindex,
 	memset(&tinfo, 0, sizeof(tinfo));

 	if (IS_OSPF6_DEBUG_ASBR)
-		zlog_debug("Redistribute %pFX (%s)", prefix,
-			   type == DEFAULT_ROUTE
-				   ? "default-information-originate"
-				   : ZROUTE_NAME(type));
+		zlog_debug("Redistribute (%s:%u:%u)%pFX (%s)", OSPF6_DEBUG_VRF(ospf6), prefix,
+			   type == DEFAULT_ROUTE ? "default-information-originate"
+						 : ZROUTE_NAME(type));

 	/* if route-map was specified but not found, do not advertise */
 	if (ROUTEMAP_NAME(red)) {
@@ -1629,9 +1598,8 @@ ospf6_asbr_summary_remove_lsa_and_route(struct ospf6 *ospf6,
 		return;

 	if (IS_OSPF6_DEBUG_AGGR)
-		zlog_debug("%s: Flushing Aggregate route (%pFX)",
-				__func__,
-				&aggr->p);
+		zlog_debug("%s: Flushing Aggregate route ((%s:%u:%u)%pFX)", __func__,
+			   OSPF6_DEBUG_VRF(ospf6), &aggr->p);

 	ospf6_asbr_external_lsa_remove_by_id(ospf6, aggr->id);

@@ -1660,11 +1628,9 @@ ospf6_unlink_route_from_aggr(struct ospf6 *ospf6,
 			     struct ospf6_route *rt)
 {
 	if (IS_OSPF6_DEBUG_AGGR)
-		zlog_debug("%s: Unlinking external route(%pFX) from aggregator(%pFX), external route count:%ld",
-					__func__,
-					&rt->prefix,
-					&aggr->p,
-					OSPF6_EXTERNAL_RT_COUNT(aggr));
+		zlog_debug("%s: Unlinking external route((%s:%u:%u)%pFX) from aggregator((%s:%u:%u)%pFX), external route count:%ld",
+			   __func__, OSPF6_DEBUG_VRF(ospf6), &rt->prefix, OSPF6_DEBUG_VRF(ospf6),
+			   &aggr->p, OSPF6_EXTERNAL_RT_COUNT(aggr));

 	hash_release(aggr->match_extnl_hash, rt);
 	rt->aggr_route = NULL;
@@ -1685,7 +1651,8 @@ void ospf6_asbr_redistribute_remove(int type, ifindex_t ifindex,
 	match = ospf6_route_lookup(prefix, ospf6->external_table);
 	if (match == NULL) {
 		if (IS_OSPF6_DEBUG_ASBR)
-			zlog_debug("No such route %pFX to withdraw", prefix);
+			zlog_debug("No such route (%s:%u:%u)%pFX to withdraw",
+				   OSPF6_DEBUG_VRF(ospf6), prefix);
 		return;
 	}

@@ -1694,7 +1661,8 @@ void ospf6_asbr_redistribute_remove(int type, ifindex_t ifindex,

 	if (info->type != type) {
 		if (IS_OSPF6_DEBUG_ASBR)
-			zlog_debug("Original protocol mismatch: %pFX", prefix);
+			zlog_debug("Original protocol mismatch: (%s:%u:%u)%pFX",
+				   OSPF6_DEBUG_VRF(ospf6), prefix);
 		return;
 	}

@@ -1707,8 +1675,8 @@ void ospf6_asbr_redistribute_remove(int type, ifindex_t ifindex,
 		ospf6_unlink_route_from_aggr(ospf6, match->aggr_route, match);

 	if (IS_OSPF6_DEBUG_ASBR)
-		zlog_debug("Removing route from external table %pFX",
-			   prefix);
+		zlog_debug("Removing route from external table (%s:%u:%u)%pFX",
+			   OSPF6_DEBUG_VRF(ospf6), prefix);

 	ospf6_route_remove(match, ospf6->external_table);
 	XFREE(MTYPE_OSPF6_EXTERNAL_INFO, info);
@@ -2898,15 +2866,14 @@ static void ospf6_originate_new_aggr_lsa(struct ospf6 *ospf6,
 	struct ospf6_lsa *lsa = NULL;

 	if (IS_OSPF6_DEBUG_AGGR)
-		zlog_debug("%s: Originate new aggregate route(%pFX)", __func__,
-			   &aggr->p);
+		zlog_debug("%s: Originate new aggregate route((%s:%u:%u)%pFX)", __func__,
+			   OSPF6_DEBUG_VRF(ospf6), &aggr->p);

 	aggr->id = ospf6->external_id++;

 	if (IS_OSPF6_DEBUG_AGGR)
-		zlog_debug(
-			"Advertise AS-External Id:%pI4 prefix %pFX metric %u",
-			&prefix_id.u.prefix4, &aggr->p, aggr->metric);
+		zlog_debug("Advertise AS-External Id:%pI4 prefix (%s:%u:%u)%pFX metric %u",
+			   &prefix_id.u.prefix4, OSPF6_DEBUG_VRF(ospf6), &aggr->p, aggr->metric);

 	ospf6_summary_add_aggr_route_and_blackhole(ospf6, aggr);

@@ -2970,8 +2937,8 @@ ospf6_originate_summary_lsa(struct ospf6 *ospf6,
 	int mtype;

 	if (IS_OSPF6_DEBUG_AGGR)
-		zlog_debug("%s: Prepare to originate Summary route(%pFX)",
-			   __func__, &aggr->p);
+		zlog_debug("%s: Prepare to originate Summary route((%s:%u:%u)%pFX)", __func__,
+			   OSPF6_DEBUG_VRF(ospf6), &aggr->p);

 	/* This case to handle when the overlapping aggregator address
 	 * is available. Best match will be considered.So need to unlink
@@ -3038,10 +3005,8 @@ ospf6_originate_summary_lsa(struct ospf6 *ospf6,
 	 */
 	if (CHECK_FLAG(aggr->aggrflags, OSPF6_EXTERNAL_AGGRT_ORIGINATED)) {
 		if (!aggr_lsa) {
-			zlog_warn(
-				"%s: Could not refresh/originate %pFX",
-						__func__,
-						&aggr->p);
+			zlog_warn("%s: Could not refresh/originate (%s:%u:%u)%pFX", __func__,
+				  OSPF6_DEBUG_VRF(ospf6), &aggr->p);
 			/* Remove the assert later */
 			assert(aggr_lsa);
 			return;
@@ -3064,13 +3029,9 @@ ospf6_originate_summary_lsa(struct ospf6 *ospf6,
 		    || (mtype != aggr->mtype)) {

 			if (IS_OSPF6_DEBUG_AGGR)
-				zlog_debug(
-					"%s: Routetag(old:%d new:%d)/Metric(o:%u,n:%u)/mtype(o:%d n:%d) modified,So refresh the summary route.(%pFX)",
-					__func__, tag, aggr->tag,
-					metric,
-					aggr->metric,
-					mtype, aggr->mtype,
-					&aggr->p);
+				zlog_debug("%s: Routetag(old:%d new:%d)/Metric(o:%u,n:%u)/mtype(o:%d n:%d) modified,So refresh the summary route.((%s:%u:%u)%pFX)",
+					   __func__, tag, aggr->tag, metric, aggr->metric, mtype,
+					   aggr->mtype, OSPF6_DEBUG_VRF(ospf6), &aggr->p);

 			aggr_lsa = ospf6_originate_type5_type7_lsas(aggr->route,
 								    ospf6);
@@ -3088,9 +3049,8 @@ ospf6_originate_summary_lsa(struct ospf6 *ospf6,
 	 */
 	if (lsa && prefix_same(&aggr->p, &rt->prefix)) {
 		if (IS_OSPF6_DEBUG_AGGR)
-			zlog_debug(
-				"%s: Route prefix is same as aggr so no need to re-originate LSA(%pFX)",
-				__PRETTY_FUNCTION__, &aggr->p);
+			zlog_debug("%s: Route prefix is same as aggr so no need to re-originate LSA((%s:%u:%u)%pFX)",
+				   __PRETTY_FUNCTION__, OSPF6_DEBUG_VRF(ospf6), &aggr->p);

 		aggr->id = info->id;
 		info->id = 0;
@@ -3122,9 +3082,8 @@ static void ospf6_aggr_handle_external_info(void *data)
 	assert(ospf6);

 	if (IS_OSPF6_DEBUG_ASBR || IS_OSPF6_DEBUG_ORIGINATE(AS_EXTERNAL))
-		zlog_debug("%s: Handle external route for origination/refresh (%pFX)",
-					__func__,
-					&rt->prefix);
+		zlog_debug("%s: Handle external route for origination/refresh ((%s:%u:%u)%pFX)",
+			   __func__, OSPF6_DEBUG_VRF(ospf6), &rt->prefix);

 	aggr = ospf6_external_aggr_match(ospf6,
 					&rt->prefix);
@@ -3161,9 +3120,8 @@ void ospf6_asbr_summary_config_delete(struct ospf6 *ospf6,
 	struct ospf6_external_aggr_rt *aggr = rn->info;

 	if (IS_OSPF6_DEBUG_AGGR)
-		zlog_debug("%s: Deleting Aggregate route (%pFX)",
-						__func__,
-						&aggr->p);
+		zlog_debug("%s: Deleting Aggregate route ((%s:%u:%u)%pFX)", __func__,
+			   OSPF6_DEBUG_VRF(ospf6), &aggr->p);

 	ospf6_asbr_summary_remove_lsa_and_route(ospf6, aggr);

@@ -3187,10 +3145,8 @@ ospf6_handle_external_aggr_modify(struct ospf6 *ospf6,
 		htonl(aggr->id), ospf6->router_id,
 		ospf6->lsdb);
 	if (!lsa) {
-		zlog_warn(
-			"%s: Could not refresh/originate %pFX",
-			__func__,
-			&aggr->p);
+		zlog_warn("%s: Could not refresh/originate (%s:%u:%u)%pFX", __func__,
+			  OSPF6_DEBUG_VRF(ospf6), &aggr->p);

 		return OSPF6_FAILURE;
 	}
@@ -3214,14 +3170,10 @@ ospf6_handle_external_aggr_modify(struct ospf6 *ospf6,
 	    || (mtype
 		!= aggr->mtype)) {
 		if (IS_OSPF6_DEBUG_AGGR)
-			zlog_debug(
-			"%s: Changed tag(old:%d new:%d)/metric(o:%u n:%d)/mtype(o:%d n:%d),So refresh the summary route.(%pFX)",
-			__func__, tag,
-			aggr->tag,
-			metric,
-			(unsigned int)rt_aggr->path.cost,
-			mtype, aggr->mtype,
-			&aggr->p);
+			zlog_debug("%s: Changed tag(old:%d new:%d)/metric(o:%u n:%d)/mtype(o:%d n:%d),So refresh the summary route.((%s:%u:%u)%pFX)",
+				   __func__, tag, aggr->tag, metric,
+				   (unsigned int)rt_aggr->path.cost, mtype, aggr->mtype,
+				   OSPF6_DEBUG_VRF(ospf6), &aggr->p);

 		(void)ospf6_originate_type5_type7_lsas(
 					aggr->route,
@@ -3289,15 +3241,14 @@ static void ospf6_aggr_unlink_external_info(void *data)
 	rt->to_be_processed = true;
 }

-void ospf6_external_aggregator_free(struct ospf6_external_aggr_rt *aggr)
+void ospf6_external_aggregator_free(struct ospf6 *ospf6, struct ospf6_external_aggr_rt *aggr)
 {
 	hash_clean_and_free(&aggr->match_extnl_hash,
 			    ospf6_aggr_unlink_external_info);

 	if (IS_OSPF6_DEBUG_AGGR)
-		zlog_debug("%s: Release the aggregator Address(%pFX)",
-						__func__,
-						&aggr->p);
+		zlog_debug("%s: Release the aggregator Address((%s:%u:%u)%pFX)", __func__,
+			   OSPF6_DEBUG_VRF(ospf6), &aggr->p);

 	XFREE(MTYPE_OSPF6_EXTERNAL_RT_AGGR, aggr);
 }
@@ -3323,7 +3274,7 @@ ospf6_delete_all_marked_aggregators(struct ospf6 *ospf6)
 			continue;
 		}
 		ospf6_asbr_summary_config_delete(ospf6, rn);
-		ospf6_external_aggregator_free(aggr);
+		ospf6_external_aggregator_free(ospf6, aggr);
 	}
 }

@@ -3349,9 +3300,8 @@ static void ospf6_handle_exnl_rt_after_aggr_del(struct ospf6 *ospf6,
 				&lsa->refresh);
 	} else {
 		if (IS_OSPF6_DEBUG_AGGR)
-			zlog_debug("%s: Originate external route(%pFX)",
-				__func__,
-				&rt->prefix);
+			zlog_debug("%s: Originate external route((%s:%u:%u)%pFX)", __func__,
+				   OSPF6_DEBUG_VRF(ospf6), &rt->prefix);

 		(void)ospf6_originate_type5_type7_lsas(rt, ospf6);
 	}
@@ -3371,9 +3321,8 @@ static void ospf6_handle_aggregated_exnl_rt(struct ospf6 *ospf6,
 	 */
 	if (prefix_same(&aggr->p, &rt->prefix)) {
 		if (IS_OSPF6_DEBUG_AGGR)
-			zlog_debug("%s: External Route prefix same as Aggregator(%pFX), so don't flush.",
-				__func__,
-				&rt->prefix);
+			zlog_debug("%s: External Route prefix same as Aggregator((%s:%u:%u)%pFX), so don't flush.",
+				   __func__, OSPF6_DEBUG_VRF(ospf6), &rt->prefix);

 		return;
 	}
@@ -3582,9 +3531,8 @@ static void ospf6_external_aggr_add(struct ospf6 *ospf6,
 	struct route_node *rn;

 	if (IS_OSPF6_DEBUG_AGGR)
-		zlog_debug("%s: Adding Aggregate route to Aggr table (%pFX)",
-					__func__,
-					&aggr->p);
+		zlog_debug("%s: Adding Aggregate route to Aggr table ((%s:%u:%u)%pFX)", __func__,
+			   OSPF6_DEBUG_VRF(ospf6), &aggr->p);

 	rn = route_node_get(ospf6->rt_aggr_tbl, &aggr->p);
 	if (rn->info)
@@ -3701,7 +3649,7 @@ int ospf6_external_aggr_config_unset(struct ospf6 *ospf6,

 	if (!OSPF6_EXTERNAL_RT_COUNT(aggr)) {
 		ospf6_asbr_summary_config_delete(ospf6, rn);
-		ospf6_external_aggregator_free(aggr);
+		ospf6_external_aggregator_free(ospf6, aggr);
 		return OSPF6_SUCCESS;
 	}

@@ -3727,9 +3675,8 @@ void ospf6_handle_external_lsa_origination(struct ospf6 *ospf6,
 		if (aggr) {

 			if (IS_OSPF6_DEBUG_AGGR)
-				zlog_debug("%s: Send Aggregate LSA (%pFX)",
-				__func__,
-				&aggr->p);
+				zlog_debug("%s: Send Aggregate LSA ((%s:%u:%u)%pFX)", __func__,
+					   OSPF6_DEBUG_VRF(ospf6), &aggr->p);

 			ospf6_originate_summary_lsa(
 				ospf6, aggr, rt);
@@ -3763,8 +3710,8 @@ void ospf6_handle_external_lsa_origination(struct ospf6 *ospf6,
 	rt->path.origin.id = htonl(info->id);

 	if (IS_OSPF6_DEBUG_ASBR) {
-		zlog_debug("Advertise new AS-External Id:%pI4 prefix %pFX metric %u",
-			   &prefix_id.u.prefix4, p, rt->path.metric_type);
+		zlog_debug("Advertise new AS-External Id:%pI4 prefix (%s:%u:%u)%pFX metric %u",
+			   &prefix_id.u.prefix4, OSPF6_DEBUG_VRF(ospf6), p, rt->path.metric_type);
 	}

 	ospf6_originate_type5_type7_lsas(rt, ospf6);
diff --git a/ospf6d/ospf6_asbr.h b/ospf6d/ospf6_asbr.h
index 777e0ebf18..1f23fca975 100644
--- a/ospf6d/ospf6_asbr.h
+++ b/ospf6d/ospf6_asbr.h
@@ -156,7 +156,7 @@ int ospf6_external_aggr_config_unset(struct ospf6 *ospf6,
 void ospf6_handle_external_lsa_origination(struct ospf6 *ospf6,
 					       struct ospf6_route *rt,
 					       struct prefix *p);
-void ospf6_external_aggregator_free(struct ospf6_external_aggr_rt *aggr);
+void ospf6_external_aggregator_free(struct ospf6 *ospf6, struct ospf6_external_aggr_rt *aggr);
 void ospf6_unset_all_aggr_flag(struct ospf6 *ospf6);
 void ospf6_fill_aggr_route_details(struct ospf6 *ospf6,
 				   struct ospf6_external_aggr_rt *aggr);
diff --git a/ospf6d/ospf6_interface.c b/ospf6d/ospf6_interface.c
index 609629981b..e17f87da6c 100644
--- a/ospf6d/ospf6_interface.c
+++ b/ospf6d/ospf6_interface.c
@@ -483,10 +483,9 @@ void ospf6_interface_connected_route_update(struct interface *ifp)
 			ret = prefix_list_apply(plist, (void *)c->address);
 			if (ret == PREFIX_DENY) {
 				if (IS_OSPF6_DEBUG_INTERFACE)
-					zlog_debug("%pFX on %s filtered by prefix-list %s ",
-						   c->address,
-						   oi->interface->name,
-						   oi->plist_name);
+					zlog_debug("(%s:%u:%u)%pFX on %s filtered by prefix-list %s ",
+						   OSPF6_DEBUG_VRF(oi->area->ospf6), c->address,
+						   oi->interface->name, oi->plist_name);
 				continue;
 			}
 		}
diff --git a/ospf6d/ospf6_intra.c b/ospf6d/ospf6_intra.c
index c88da566d7..e09bdd71b1 100644
--- a/ospf6d/ospf6_intra.c
+++ b/ospf6d/ospf6_intra.c
@@ -980,7 +980,8 @@ void ospf6_intra_prefix_lsa_originate_stub(struct event *event)
 		for (route = ospf6_route_head(oi->route_connected); route;
 		     route = ospf6_route_best_next(route)) {
 			if (IS_OSPF6_DEBUG_ORIGINATE(INTRA_PREFIX))
-				zlog_debug("    include %pFX", &route->prefix);
+				zlog_debug("    include (%s:%u:%u)%pFX",
+					   OSPF6_DEBUG_VRF(oa->ospf6), &route->prefix);

 			/* same prefix on different interfaces */
 			alt_route = ospf6_route_lookup(&route->prefix, route_advertise);
@@ -1249,7 +1250,8 @@ void ospf6_intra_prefix_lsa_originate_transit(struct event *event)
 			route->path.type = OSPF6_PATH_TYPE_INTRA;

 			if (IS_OSPF6_DEBUG_ORIGINATE(INTRA_PREFIX))
-				zlog_debug("    include %pFX", &route->prefix);
+				zlog_debug("    include (%s:%u:%u)%pFX",
+					   OSPF6_DEBUG_VRF(oi->area->ospf6), &route->prefix);

 			ospf6_route_add(route, route_advertise);
 			prefix_num--;
@@ -1404,10 +1406,9 @@ void ospf6_intra_prefix_route_ecmp_path(struct ospf6_area *oa,
 				continue;

 			if (IS_OSPF6_DEBUG_EXAMIN(INTRA_PREFIX)) {
-				zlog_debug(
-					"%s: route %pFX cost old %u new %u is not same, replace route",
-					__func__, &old_route->prefix, o_path->cost,
-					route->path.cost);
+				zlog_debug("%s: route (%s:%u:%u)%pFX cost old %u new %u is not same, replace route",
+					   __func__, OSPF6_DEBUG_VRF(oa->ospf6),
+					   &old_route->prefix, o_path->cost, route->path.cost);
 			}

 			/* Remove selected current path's nh from
@@ -1460,11 +1461,10 @@ void ospf6_intra_prefix_route_ecmp_path(struct ospf6_area *oa,
 				}
 			} else {
 				if (IS_OSPF6_DEBUG_EXAMIN(INTRA_PREFIX)) {
-					zlog_debug(
-						"%s: route %pFX old cost %u new cost %u, delete old entry.",
-						__func__, &old_route->prefix,
-						old_route->path.cost,
-						route->path.cost);
+					zlog_debug("%s: route (%s:%u:%u)%pFX old cost %u new cost %u, delete old entry.",
+						   __func__, OSPF6_DEBUG_VRF(oa->ospf6),
+						   &old_route->prefix, old_route->path.cost,
+						   route->path.cost);
 				}
 				if (oa->route_table->hook_remove)
 					ospf6_route_remove(old_route,
@@ -1519,15 +1519,13 @@ void ospf6_intra_prefix_route_ecmp_path(struct ospf6_area *oa,
 				listnode_add_sort(old_route->paths, ecmp_path);

 				if (IS_OSPF6_DEBUG_EXAMIN(INTRA_PREFIX)) {
-					zlog_debug(
-						"%s: route %pFX %p another path added with nh %u, effective paths %u nh %u",
-						__func__, &route->prefix,
-						(void *)old_route,
-						listcount(ecmp_path->nh_list),
-						old_route->paths ? listcount(
-							old_route->paths)
-								 : 0,
-						listcount(old_route->nh_list));
+					zlog_debug("%s: route (%s:%u:%u)%pFX %p another path added with nh %u, effective paths %u nh %u",
+						   __func__, OSPF6_DEBUG_VRF(oa->ospf6),
+						   &route->prefix, (void *)old_route,
+						   listcount(ecmp_path->nh_list),
+						   old_route->paths ? listcount(old_route->paths)
+								    : 0,
+						   listcount(old_route->nh_list));
 				}
 			} else {
 				list_delete_all_node(o_path->nh_list);
@@ -1546,10 +1544,9 @@ void ospf6_intra_prefix_route_ecmp_path(struct ospf6_area *oa,
 							oa->spf_table);
 				if (ls_entry == NULL) {
 					if (IS_OSPF6_DEBUG_EXAMIN(INTRA_PREFIX))
-						zlog_debug(
-							"%s: ls_prfix %pFX ls_entry not found.",
-							__func__,
-							&o_path->ls_prefix);
+						zlog_debug("%s: ls_prfix (%s:%u:%u)%pFX ls_entry not found.",
+							   __func__, OSPF6_DEBUG_VRF(oa->ospf6),
+							   &o_path->ls_prefix);
 					continue;
 				}
 				lsa = ospf6_lsdb_lookup(o_path->origin.type,
@@ -1564,9 +1561,9 @@ void ospf6_intra_prefix_route_ecmp_path(struct ospf6_area *oa,
 						ospf6_linkstate_prefix(
 						o_path->origin.adv_router,
 						o_path->origin.id, &adv_prefix);
-						zlog_debug(
-							"%s: adv_router %pFX lsa not found",
-							__func__, &adv_prefix);
+						zlog_debug("%s: adv_router (%s:%u:%u)%pFX lsa not found",
+							   __func__, OSPF6_DEBUG_VRF(oa->ospf6),
+							   &adv_prefix);
 					}
 					continue;
 				}
@@ -1597,14 +1594,11 @@ void ospf6_intra_prefix_route_ecmp_path(struct ospf6_area *oa,
 			}

 			if (IS_OSPF6_DEBUG_EXAMIN(INTRA_PREFIX))
-				zlog_debug(
-					"%s: route %pFX %p with final effective paths %u nh %u",
-					__func__, &route->prefix,
-					(void *)old_route,
-					old_route->paths
-						? listcount(old_route->paths)
-						: 0,
-					listcount(old_route->nh_list));
+				zlog_debug("%s: route (%s:%u:%u)%pFX %p with final effective paths %u nh %u",
+					   __func__, OSPF6_DEBUG_VRF(oa->ospf6), &route->prefix,
+					   (void *)old_route,
+					   old_route->paths ? listcount(old_route->paths) : 0,
+					   listcount(old_route->nh_list));

 			/* used in intra_route_calculation() to add to
 			 * global ospf6 route table.
diff --git a/ospf6d/ospf6_lsdb.c b/ospf6d/ospf6_lsdb.c
index 0230146c18..4526d5152d 100644
--- a/ospf6d/ospf6_lsdb.c
+++ b/ospf6d/ospf6_lsdb.c
@@ -205,7 +205,8 @@ struct ospf6_lsa *ospf6_find_external_lsa(struct ospf6 *ospf6, struct prefix *p)
 	match = ospf6_route_lookup(p, ospf6->external_table);
 	if (match == NULL) {
 		if (IS_OSPF6_DEBUG_ASBR)
-			zlog_debug("No such route %pFX to withdraw", p);
+			zlog_debug("No such route (%s:%u:%u)%pFX to withdraw",
+				   OSPF6_DEBUG_VRF(ospf6), p);

 		return NULL;
 	}
diff --git a/ospf6d/ospf6_nssa.c b/ospf6d/ospf6_nssa.c
index be73cdc831..d3cfd16fe6 100644
--- a/ospf6d/ospf6_nssa.c
+++ b/ospf6d/ospf6_nssa.c
@@ -244,10 +244,9 @@ static struct ospf6_lsa *ospf6_lsa_translated_nssa_new(struct ospf6_area *area,
 	if (range && !prefix_same(&prefix, &range->prefix)
 	    && !CHECK_FLAG(range->flag, OSPF6_ROUTE_REMOVE)) {
 		if (IS_OSPF6_DEBUG_NSSA)
-			zlog_debug(
-				"%s: LSA %s suppressed by range %pFX of area %s",
-				__func__, type7->name, &range->prefix,
-				area->name);
+			zlog_debug("%s: LSA %s suppressed by range (%s:%u:%u)%pFX of area %s",
+				   __func__, type7->name, OSPF6_DEBUG_VRF(area->ospf6),
+				   &range->prefix, area->name);
 		return NULL;
 	}

@@ -469,10 +468,10 @@ static void ospf6_abr_translate_nssa(struct ospf6_area *area,
 		} else {
 			if (!CHECK_FLAG(match->flag, OSPF6_ROUTE_REMOVE)) {
 				if (IS_OSPF6_DEBUG_NSSA)
-					zlog_debug(
-						"%s: LSA Id %pI4 suppressed by range %pFX of area %s",
-						__func__, &lsa->header->id,
-						&match->prefix, area->name);
+					zlog_debug("%s: LSA Id %pI4 suppressed by range (%s:%u:%u)%pFX of area %s",
+						   __func__, &lsa->header->id,
+						   OSPF6_DEBUG_VRF(area->ospf6), &match->prefix,
+						   area->name);
 				/* LSA will be suppressed by area-range command,
 				 * no need to refresh
 				 */
@@ -989,7 +988,8 @@ void ospf6_nssa_lsa_originate(struct ospf6_route *route,
 	caddr_t p;

 	if (IS_OSPF6_DEBUG_ASBR || IS_OSPF6_DEBUG_ORIGINATE(AS_EXTERNAL))
-		zlog_debug("Originate NSSA-LSA for %pFX", &route->prefix);
+		zlog_debug("Originate NSSA-LSA for (%s:%u:%u)%pFX", OSPF6_DEBUG_VRF(area->ospf6),
+			   &route->prefix);

 	/* prepare buffer */
 	memset(buffer, 0, sizeof(buffer));
diff --git a/ospf6d/ospf6_spf.c b/ospf6d/ospf6_spf.c
index 8d6f080d04..75de07c695 100644
--- a/ospf6d/ospf6_spf.c
+++ b/ospf6d/ospf6_spf.c
@@ -327,9 +327,8 @@ static int ospf6_spf_install(struct ospf6_vertex *v,
 		return -1;
 	} else if (route && route->path.cost == v->cost) {
 		if (IS_OSPF6_DEBUG_SPF(PROCESS))
-			zlog_debug(
-				"  another path found to route %pFX lsa %s, merge",
-				&route->prefix, v->lsa->name);
+			zlog_debug("  another path found to route (%s:%u:%u)%pFX lsa %s, merge",
+				   OSPF6_DEBUG_VRF(v->area->ospf6), &route->prefix, v->lsa->name);

 		/* merging the parent's nexthop information to the child's
 		 * if the parent is not the root of the tree.
@@ -1152,8 +1151,8 @@ int ospf6_ase_calculate_route(struct ospf6 *ospf6, struct ospf6_lsa *lsa,
 		route = ospf6_route_lookup(&prefix, ospf6->route_table);
 		if (route == NULL) {
 			if (IS_OSPF6_DEBUG_SPF(PROCESS))
-				zlog_debug("%s: no external route %pFX",
-					   __func__, &prefix);
+				zlog_debug("%s: no external route (%s:%u:%u)%pFX", __func__,
+					   OSPF6_DEBUG_VRF(ospf6), &prefix);
 			return 0;
 		}

@@ -1169,9 +1168,8 @@ int ospf6_ase_calculate_route(struct ospf6 *ospf6, struct ospf6_lsa *lsa,
 			 || CHECK_FLAG(route->flag, OSPF6_ROUTE_CHANGE)) {
 			if (hook_add) {
 				if (IS_OSPF6_DEBUG_SPF(PROCESS))
-					zlog_debug(
-						"%s: add external route %pFX",
-						__func__, &prefix);
+					zlog_debug("%s: add external route (%s:%u:%u)%pFX",
+						   __func__, OSPF6_DEBUG_VRF(ospf6), &prefix);
 				(*hook_add)(route);
 			}
 		}
@@ -1190,8 +1188,8 @@ int ospf6_ase_calculate_route(struct ospf6 *ospf6, struct ospf6_lsa *lsa,
 		route = ospf6_route_lookup(&prefix, area->route_table);
 		if (route == NULL) {
 			if (IS_OSPF6_DEBUG_SPF(PROCESS))
-				zlog_debug("%s: no route %pFX, area %s",
-					   __func__, &prefix, area->name);
+				zlog_debug("%s: no route (%s:%u:%u)%pFX, area %s", __func__,
+					   OSPF6_DEBUG_VRF(ospf6), &prefix, area->name);
 			return 0;
 		}

@@ -1203,16 +1201,16 @@ int ospf6_ase_calculate_route(struct ospf6 *ospf6, struct ospf6_lsa *lsa,

 		if (CHECK_FLAG(route->flag, OSPF6_ROUTE_REMOVE)) {
 			if (IS_OSPF6_DEBUG_SPF(PROCESS))
-				zlog_debug("%s : remove route %pFX, area %s",
-					   __func__, &prefix, area->name);
+				zlog_debug("%s : remove route (%s:%u:%u)%pFX, area %s", __func__,
+					   OSPF6_DEBUG_VRF(ospf6), &prefix, area->name);
 			ospf6_route_remove(route, area->route_table);
 		} else if (CHECK_FLAG(route->flag, OSPF6_ROUTE_ADD)
 			   || CHECK_FLAG(route->flag, OSPF6_ROUTE_CHANGE)) {
 			if (hook_add) {
 				if (IS_OSPF6_DEBUG_SPF(PROCESS))
-					zlog_debug(
-						"%s: add nssa route %pFX, area %s",
-						__func__, &prefix, area->name);
+					zlog_debug("%s: add nssa route (%s:%u:%u)%pFX, area %s",
+						   __func__, OSPF6_DEBUG_VRF(ospf6), &prefix,
+						   area->name);
 				(*hook_add)(route);
 			}
 			ospf6_abr_check_translate_nssa(area, lsa);
diff --git a/ospf6d/ospf6_top.c b/ospf6d/ospf6_top.c
index d29ec20518..9f049afcbc 100644
--- a/ospf6d/ospf6_top.c
+++ b/ospf6d/ospf6_top.c
@@ -77,6 +77,13 @@ const char *ospf6_vrf_id_to_name(vrf_id_t vrf_id)
 	return vrf ? vrf->name : "NIL";
 }

+uint32_t ospf6_vrf_id_to_table_id(vrf_id_t vrf_id)
+{
+	struct vrf *vrf = vrf_lookup_by_id(vrf_id);
+
+	return vrf ? vrf->data.l.table_id : 0;
+}
+
 /* Link OSPF instance to VRF. */
 void ospf6_vrf_link(struct ospf6 *ospf6, struct vrf *vrf)
 {
@@ -340,9 +347,8 @@ static void ospf6_top_route_hook_add(struct ospf6_route *route)
 	} else {
 		if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL)
 		    || IS_OSPF6_DEBUG_BROUTER)
-			zlog_debug(
-				"%s: Route is not GLOBAL or scope is not of TYPE_AREA: %pFX",
-				__func__, &route->prefix);
+			zlog_debug("%s: Route is not GLOBAL or scope is not of TYPE_AREA: (%s:%u:%u)%pFX",
+				   __func__, OSPF6_DEBUG_VRF(route->ospf6), &route->prefix);
 		return;
 	}

@@ -368,9 +374,8 @@ static void ospf6_top_route_hook_remove(struct ospf6_route *route)
 	} else {
 		if (IS_OSPF6_DEBUG_EXAMIN(AS_EXTERNAL)
 		    || IS_OSPF6_DEBUG_BROUTER)
-			zlog_debug(
-				"%s: Route is not GLOBAL or scope is not of TYPE_AREA: %pFX",
-				__func__, &route->prefix);
+			zlog_debug("%s: Route is not GLOBAL or scope is not of TYPE_AREA: (%s:%u:%u)%pFX",
+				   __func__, OSPF6_DEBUG_VRF(route->ospf6), &route->prefix);
 		return;
 	}

@@ -606,7 +611,7 @@ void ospf6_delete(struct ospf6 **po)
 		if (rn->info) {
 			aggr = rn->info;
 			ospf6_asbr_summary_config_delete(o, rn);
-			ospf6_external_aggregator_free(aggr);
+			ospf6_external_aggregator_free(o, aggr);
 		}
 	route_table_finish(o->rt_aggr_tbl);

diff --git a/ospf6d/ospf6_top.h b/ospf6d/ospf6_top.h
index cb3653d51a..a13a7a29b5 100644
--- a/ospf6d/ospf6_top.h
+++ b/ospf6d/ospf6_top.h
@@ -254,6 +254,21 @@ struct ospf6 *ospf6_lookup_by_vrf_id(vrf_id_t vrf_id);
 struct ospf6 *ospf6_lookup_by_vrf_name(const char *name);
 void ospf6_reinstall_routes(struct ospf6 *ospf6);
 const char *ospf6_vrf_id_to_name(vrf_id_t vrf_id);
+uint32_t ospf6_vrf_id_to_table_id(vrf_id_t vrf_id);
+
+/*
+ * Arguments for the "(%s:%u:%u)" vrf name, vrf id, table id prefix
+ * used in front of a prefix in debugs.  For example:
+ *
+ *   zlog_debug("route (%s:%u:%u)%pFX", OSPF6_DEBUG_VRF(ospf6), p);
+ *
+ * Note that the argument is evaluated more than once.
+ */
+#define OSPF6_DEBUG_VRF(ospf6) OSPF6_DEBUG_VRF_ID((ospf6)->vrf_id)
+
+/* Same as above, but for when only the vrf id is available. */
+#define OSPF6_DEBUG_VRF_ID(vrf_id)                                                                \
+	ospf6_vrf_id_to_name(vrf_id), (vrf_id), ospf6_vrf_id_to_table_id(vrf_id)
 void ospf6_vrf_init(void);
 bool ospf6_is_valid_summary_addr(struct vty *vty, struct prefix *p);

diff --git a/ospf6d/ospf6_zebra.c b/ospf6d/ospf6_zebra.c
index 0d2985a4b8..62f61d2507 100644
--- a/ospf6d/ospf6_zebra.c
+++ b/ospf6d/ospf6_zebra.c
@@ -165,9 +165,8 @@ void ospf6_zebra_import_default_route(struct ospf6 *ospf6, bool unreg)
 		command = ZEBRA_NEXTHOP_REGISTER;

 	if (IS_OSPF6_DEBUG_ZEBRA(SEND))
-		zlog_debug("%s: sending cmd %s for %pFX (vrf %u)", __func__,
-			   zserv_command_string(command), &prefix,
-			   ospf6->vrf_id);
+		zlog_debug("%s: sending cmd %s for (%s:%u:%u)%pFX", __func__,
+			   zserv_command_string(command), OSPF6_DEBUG_VRF(ospf6), &prefix);

 	if (zclient_send_rnh(ospf6_zclient, command, &prefix, SAFI_UNICAST, false,
 			     true, ospf6->vrf_id)
@@ -204,9 +203,8 @@ static int ospf6_zebra_if_address_update_add(ZAPI_CALLBACK_ARGS)
 		return 0;

 	if (IS_OSPF6_DEBUG_ZEBRA(RECV))
-		zlog_debug("Zebra Interface address add: %s %5s %pFX",
-			   c->ifp->name, prefix_family_str(c->address),
-			   c->address);
+		zlog_debug("Zebra Interface address add: %s %5s (%s:%u:%u)%pFX", c->ifp->name,
+			   prefix_family_str(c->address), OSPF6_DEBUG_VRF_ID(vrf_id), c->address);

 	if (c->address->family == AF_INET6) {
 		ospf6_interface_state_update(c->ifp);
@@ -225,9 +223,8 @@ static int ospf6_zebra_if_address_update_delete(ZAPI_CALLBACK_ARGS)
 		return 0;

 	if (IS_OSPF6_DEBUG_ZEBRA(RECV))
-		zlog_debug("Zebra Interface address delete: %s %5s %pFX",
-			   c->ifp->name, prefix_family_str(c->address),
-			   c->address);
+		zlog_debug("Zebra Interface address delete: %s %5s (%s:%u:%u)%pFX", c->ifp->name,
+			   prefix_family_str(c->address), OSPF6_DEBUG_VRF_ID(vrf_id), c->address);

 	if (c->address->family == AF_INET6) {
 		ospf6_interface_connected_route_update(c->ifp);
@@ -306,12 +303,10 @@ static int ospf6_zebra_read_route(ZAPI_CALLBACK_ARGS)
 	}

 	if (IS_OSPF6_DEBUG_ZEBRA(RECV))
-		zlog_debug(
-			"Zebra Receive route %s: %s %pFX nexthop %pI6 ifindex %ld tag %" ROUTE_TAG_PRI,
-			(cmd == ZEBRA_REDISTRIBUTE_ROUTE_ADD ? "add"
-							     : "delete"),
-			zebra_route_string(api.type), &api.prefix, nexthop,
-			ifindex, api.tag);
+		zlog_debug("Zebra Receive route %s: %s (%s:%u:%u)%pFX nexthop %pI6 ifindex %ld tag %" ROUTE_TAG_PRI,
+			   (cmd == ZEBRA_REDISTRIBUTE_ROUTE_ADD ? "add" : "delete"),
+			   zebra_route_string(api.type), OSPF6_DEBUG_VRF_ID(vrf_id), &api.prefix,
+			   nexthop, ifindex, api.tag);

 	memcpy(&p, &api.prefix, sizeof(p));
 	if (is_default_prefix6(&p))
@@ -434,8 +429,8 @@ static void ospf6_zebra_route_update(int type, struct ospf6_route *request,
 		return;

 	if (IS_OSPF6_DEBUG_ZEBRA(SEND))
-		zlog_debug("Zebra Send %s route: %pFX",
-			   (type == REM ? "remove" : "add"), &request->prefix);
+		zlog_debug("Zebra Send %s route: (%s:%u:%u)%pFX", (type == REM ? "remove" : "add"),
+			   OSPF6_DEBUG_VRF(ospf6), &request->prefix);

 	if (ospf6_zclient->sock < 0) {
 		if (IS_OSPF6_DEBUG_ZEBRA(SEND))
@@ -543,9 +538,8 @@ void ospf6_zebra_route_update_add(struct ospf6_route *request,
 	if (ospf6->gr_info.restart_in_progress
 	    || ospf6->gr_info.prepare_in_progress) {
 		if (IS_DEBUG_OSPF6_GR)
-			zlog_debug(
-				"Zebra: Graceful Restart in progress -- not installing %pFX",
-				&request->prefix);
+			zlog_debug("Zebra: Graceful Restart in progress -- not installing (%s:%u:%u)%pFX",
+				   OSPF6_DEBUG_VRF(ospf6), &request->prefix);
 		return;
 	}

@@ -558,9 +552,8 @@ void ospf6_zebra_route_update_remove(struct ospf6_route *request,
 	if (ospf6->gr_info.restart_in_progress
 	    || ospf6->gr_info.prepare_in_progress) {
 		if (IS_DEBUG_OSPF6_GR)
-			zlog_debug(
-				"Zebra: Graceful Restart in progress -- not uninstalling %pFX",
-				&request->prefix);
+			zlog_debug("Zebra: Graceful Restart in progress -- not uninstalling (%s:%u:%u)%pFX",
+				   OSPF6_DEBUG_VRF(ospf6), &request->prefix);
 		return;
 	}

@@ -573,8 +566,8 @@ void ospf6_zebra_route_delete_prefix(struct ospf6_route *route, struct ospf6 *os
 	int ret;

 	if (IS_OSPF6_DEBUG_ZEBRA(SEND))
-		zlog_debug("Send delete for route: %pFX a connected in Zebra now wins",
-			   &route->prefix);
+		zlog_debug("Send delete for route: (%s:%u:%u)%pFX a connected in Zebra now wins",
+			   OSPF6_DEBUG_VRF(ospf6), &route->prefix);

 	zapi_route_init(&api);
 	api.vrf_id = ospf6->vrf_id;
@@ -584,8 +577,9 @@ void ospf6_zebra_route_delete_prefix(struct ospf6_route *route, struct ospf6 *os
 	ret = zclient_route_send(ZEBRA_ROUTE_DELETE, ospf6_zclient, &api);

 	if (ret == ZCLIENT_SEND_FAILURE)
-		flog_err(EC_LIB_ZAPI_SOCKET, "zclient_route_send() failed for prefix: %pFX",
-			 &route->prefix);
+		flog_err(EC_LIB_ZAPI_SOCKET,
+			 "zclient_route_send() failed for prefix: (%s:%u:%u)%pFX",
+			 OSPF6_DEBUG_VRF(ospf6), &route->prefix);
 }

 void ospf6_zebra_add_discard(struct ospf6_route *request, struct ospf6 *ospf6)
@@ -596,9 +590,8 @@ void ospf6_zebra_add_discard(struct ospf6_route *request, struct ospf6 *ospf6)
 	if (ospf6->gr_info.restart_in_progress
 	    || ospf6->gr_info.prepare_in_progress) {
 		if (IS_DEBUG_OSPF6_GR)
-			zlog_debug(
-				"Zebra: Graceful Restart in progress -- not installing %pFX",
-				&request->prefix);
+			zlog_debug("Zebra: Graceful Restart in progress -- not installing (%s:%u:%u)%pFX",
+				   OSPF6_DEBUG_VRF(ospf6), &request->prefix);
 		return;
 	}

@@ -613,14 +606,14 @@ void ospf6_zebra_add_discard(struct ospf6_route *request, struct ospf6 *ospf6)
 		zclient_route_send(ZEBRA_ROUTE_ADD, ospf6_zclient, &api);

 		if (IS_OSPF6_DEBUG_ZEBRA(SEND))
-			zlog_debug("Zebra: Route add discard %pFX", dest);
+			zlog_debug("Zebra: Route add discard (%s:%u:%u)%pFX",
+				   OSPF6_DEBUG_VRF(ospf6), dest);

 		SET_FLAG(request->flag, OSPF6_ROUTE_BLACKHOLE_ADDED);
 	} else {
 		if (IS_OSPF6_DEBUG_ZEBRA(SEND))
-			zlog_debug(
-				"Zebra: Blackhole route present already %pFX",
-				dest);
+			zlog_debug("Zebra: Blackhole route present already (%s:%u:%u)%pFX",
+				   OSPF6_DEBUG_VRF(ospf6), dest);
 	}
 }

@@ -633,9 +626,8 @@ void ospf6_zebra_delete_discard(struct ospf6_route *request,
 	if (ospf6->gr_info.restart_in_progress
 	    || ospf6->gr_info.prepare_in_progress) {
 		if (IS_DEBUG_OSPF6_GR)
-			zlog_debug(
-				"Zebra: Graceful Restart in progress -- not uninstalling %pFX",
-				&request->prefix);
+			zlog_debug("Zebra: Graceful Restart in progress -- not uninstalling (%s:%u:%u)%pFX",
+				   OSPF6_DEBUG_VRF(ospf6), &request->prefix);
 		return;
 	}

@@ -650,14 +642,14 @@ void ospf6_zebra_delete_discard(struct ospf6_route *request,
 		zclient_route_send(ZEBRA_ROUTE_DELETE, ospf6_zclient, &api);

 		if (IS_OSPF6_DEBUG_ZEBRA(SEND))
-			zlog_debug("Zebra: Route delete discard %pFX", dest);
+			zlog_debug("Zebra: Route delete discard (%s:%u:%u)%pFX",
+				   OSPF6_DEBUG_VRF(ospf6), dest);

 		UNSET_FLAG(request->flag, OSPF6_ROUTE_BLACKHOLE_ADDED);
 	} else {
 		if (IS_OSPF6_DEBUG_ZEBRA(SEND))
-			zlog_debug(
-				"Zebra: Blackhole route already deleted %pFX",
-				dest);
+			zlog_debug("Zebra: Blackhole route already deleted (%s:%u:%u)%pFX",
+				   OSPF6_DEBUG_VRF(ospf6), dest);
 	}
 }