diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c
index faafab850501..49f24ee7be44 100644
--- a/bgpd/bgp_evpn.c
+++ b/bgpd/bgp_evpn.c
@@ -311,6 +311,39 @@ static int is_vni_present_in_irt_vnis(struct list *vnis, struct bgpevpn *vpn)
 	return 0;
 }
 
+/* Flag if the route is injectable into EVPN.
+ * This would be following category:
+ * Non-imported route,
+ * Non-EVPN imported route,
+ * Non Aggregate suppressed route.
+ */
+bool is_route_injectable_into_evpn(struct bgp_path_info *pi)
+{
+	struct bgp_path_info *parent_pi;
+	struct bgp_table *table;
+	struct bgp_dest *dest;
+
+	/* do not import aggr suppressed routes */
+	if (bgp_path_suppressed(pi))
+		return false;
+
+	if (pi->sub_type != BGP_ROUTE_IMPORTED || !pi->extra ||
+	    !pi->extra->vrfleak || !pi->extra->vrfleak->parent)
+		return true;
+
+        parent_pi = (struct bgp_path_info *)pi->extra->vrfleak->parent;
+        dest = parent_pi->net;
+        if (!dest)
+		return true;
+        table = bgp_dest_table(dest);
+        if (table &&
+            table->afi == AFI_L2VPN &&
+            table->safi == SAFI_EVPN)
+                return false;
+
+        return true;
+}
+
 /*
  * Compare Route Targets.
  */
@@ -1638,6 +1671,9 @@ static int update_evpn_type5_route(struct bgp *bgp_vrf, struct prefix_evpn *evp,
 			vrf_id_to_name(bgp_vrf->vrf_id), evp, &attr.rmac,
 			&attr.nexthop);
 
+	frrtrace(4, frr_bgp, evpn_advertise_type5, bgp_vrf->vrf_id, evp,
+		 &attr.rmac, attr.nexthop);
+
 	attr.mp_nexthop_len = BGP_ATTR_NHLEN_IPV4;
 
 	if (src_afi == AFI_IP6 &&
@@ -2280,6 +2316,8 @@ static int delete_evpn_type5_route(struct bgp *bgp_vrf, struct prefix_evpn *evp)
 	if (!dest)
 		return 0;
 
+	frrtrace(2, frr_bgp, evpn_withdraw_type5, bgp_vrf->vrf_id, evp);
+
 	delete_evpn_route_entry(bgp_evpn, afi, safi, dest, &pi);
 	if (pi)
 		bgp_process(bgp_evpn, dest, afi, safi);
diff --git a/bgpd/bgp_evpn.h b/bgpd/bgp_evpn.h
index 55474464e593..840389758723 100644
--- a/bgpd/bgp_evpn.h
+++ b/bgpd/bgp_evpn.h
@@ -94,31 +94,6 @@ static inline bool is_pi_family_evpn(struct bgp_path_info *pi)
 	return is_pi_family_matching(pi, AFI_L2VPN, SAFI_EVPN);
 }
 
-/* Flag if the route is injectable into EVPN. This would be either a
- * non-imported route or a non-EVPN imported route.
- */
-static inline bool is_route_injectable_into_evpn(struct bgp_path_info *pi)
-{
-	struct bgp_path_info *parent_pi;
-	struct bgp_table *table;
-	struct bgp_dest *dest;
-
-	if (pi->sub_type != BGP_ROUTE_IMPORTED || !pi->extra ||
-	    !pi->extra->vrfleak || !pi->extra->vrfleak->parent)
-		return true;
-
-	parent_pi = (struct bgp_path_info *)pi->extra->vrfleak->parent;
-	dest = parent_pi->net;
-	if (!dest)
-		return true;
-	table = bgp_dest_table(dest);
-	if (table &&
-	    table->afi == AFI_L2VPN &&
-	    table->safi == SAFI_EVPN)
-		return false;
-	return true;
-}
-
 static inline bool evpn_resolve_overlay_index(void)
 {
 	struct bgp *bgp = NULL;
@@ -206,5 +181,6 @@ extern mpls_label_t *bgp_evpn_path_info_labels_get_l3vni(mpls_label_t *labels,
 extern vni_t bgp_evpn_path_info_get_l3vni(const struct bgp_path_info *pi);
 extern bool bgp_evpn_mpath_has_dvni(const struct bgp *bgp_vrf,
 				    struct bgp_path_info *mpinfo);
+extern bool is_route_injectable_into_evpn(struct bgp_path_info *pi);
 
 #endif /* _QUAGGA_BGP_EVPN_H */
diff --git a/bgpd/bgp_evpn_mh.c b/bgpd/bgp_evpn_mh.c
index ffb1b17ec7f7..a71231090509 100644
--- a/bgpd/bgp_evpn_mh.c
+++ b/bgpd/bgp_evpn_mh.c
@@ -441,6 +441,10 @@ int bgp_evpn_mh_route_update(struct bgp *bgp, struct bgp_evpn_es *es,
 					? "esr"
 					: (vpn ? "ead-evi" : "ead-es"),
 				&attr->mp_nexthop_global_in);
+
+		frrtrace(4, frr_bgp, evpn_mh_local_ead_es_evi_route_upd,
+			 &es->esi, (vpn ? vpn->vni : 0), evp->prefix.route_type,
+			 attr->mp_nexthop_global_in);
 	}
 
 	/* Return back the route entry. */
@@ -491,6 +495,8 @@ static int bgp_evpn_mh_route_delete(struct bgp *bgp, struct bgp_evpn_es *es,
 				: (vpn ? "ead-evi" : "ead-es"),
 			&es->originator_ip);
 
+	frrtrace(4, frr_bgp, evpn_mh_local_ead_es_evi_route_del, &es->esi,
+		 (vpn ? vpn->vni : 0), p->prefix.route_type, es->originator_ip);
 	/* Next, locate route node in the global EVPN routing table.
 	 * Note that this table is a 2-level tree (RD-level + Prefix-level)
 	 */
@@ -3460,6 +3466,10 @@ static void bgp_evpn_es_evi_vtep_add(struct bgp *bgp,
 			   evi_vtep->es_evi->vpn->vni, &evi_vtep->vtep_ip,
 			   ead_es ? "ead_es" : "ead_evi");
 
+	frrtrace(4, frr_bgp, evpn_mh_es_evi_vtep_add,
+		 &evi_vtep->es_evi->es->esi, evi_vtep->es_evi->vpn->vni,
+		 evi_vtep->vtep_ip, ead_es);
+
 	if (ead_es)
 		SET_FLAG(evi_vtep->flags, BGP_EVPN_EVI_VTEP_EAD_PER_ES);
 	else
@@ -3484,6 +3494,10 @@ static void bgp_evpn_es_evi_vtep_del(struct bgp *bgp,
 			   evi_vtep->es_evi->vpn->vni, &evi_vtep->vtep_ip,
 			   ead_es ? "ead_es" : "ead_evi");
 
+	frrtrace(4, frr_bgp, evpn_mh_es_evi_vtep_del,
+		 &evi_vtep->es_evi->es->esi, evi_vtep->es_evi->vpn->vni,
+		 evi_vtep->vtep_ip, ead_es);
+
 	if (ead_es)
 		UNSET_FLAG(evi_vtep->flags, BGP_EVPN_EVI_VTEP_EAD_PER_ES);
 	else
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 193d9fe4f918..9283055d9de0 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -120,7 +120,7 @@ DEFINE_HOOK(bgp_process,
 	    (bgp, afi, safi, bn, peer, withdraw));
 
 /** Test if path is suppressed. */
-static bool bgp_path_suppressed(struct bgp_path_info *pi)
+bool bgp_path_suppressed(struct bgp_path_info *pi)
 {
 	if (pi->extra == NULL || pi->extra->aggr_suppressors == NULL)
 		return false;
diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h
index 3057a4259abe..ad0cc9eabca3 100644
--- a/bgpd/bgp_route.h
+++ b/bgpd/bgp_route.h
@@ -914,6 +914,7 @@ extern void bgp_aggregate_toggle_suppressed(struct bgp_aggregate *aggregate,
 extern void subgroup_announce_reset_nhop(uint8_t family, struct attr *attr);
 const char *
 bgp_path_selection_reason2str(enum bgp_path_selection_reason reason);
+extern bool bgp_path_suppressed(struct bgp_path_info *pi);
 extern bool bgp_addpath_encode_rx(struct peer *peer, afi_t afi, safi_t safi);
 extern const struct prefix_rd *bgp_rd_from_dest(const struct bgp_dest *dest,
 						safi_t safi);
diff --git a/bgpd/bgp_trace.h b/bgpd/bgp_trace.h
index 8274802a7338..5a80a53f61c1 100644
--- a/bgpd/bgp_trace.h
+++ b/bgpd/bgp_trace.h
@@ -435,6 +435,64 @@ TRACEPOINT_EVENT(
 )
 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_es_evi_del_zrecv, TRACE_INFO)
 
+TRACEPOINT_EVENT(
+	frr_bgp,
+	evpn_mh_es_evi_vtep_add,
+	TP_ARGS(esi_t *, esi, vni_t, vni, struct in_addr, vtep,
+		uint8_t, ead_es),
+	TP_FIELDS(
+		ctf_array(unsigned char, esi, esi, sizeof(esi_t))
+		ctf_integer(vni_t, vni, vni)
+		ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
+		ctf_integer(uint8_t, ead_es, ead_es)
+	)
+)
+TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_es_evi_vtep_add, TRACE_INFO)
+
+TRACEPOINT_EVENT(
+	frr_bgp,
+	evpn_mh_es_evi_vtep_del,
+	TP_ARGS(esi_t *, esi, vni_t, vni, struct in_addr, vtep,
+		uint8_t, ead_es),
+	TP_FIELDS(
+		ctf_array(unsigned char, esi, esi, sizeof(esi_t))
+		ctf_integer(vni_t, vni, vni)
+		ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
+		ctf_integer(uint8_t, ead_es, ead_es)
+	)
+)
+TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_es_evi_vtep_del, TRACE_INFO)
+
+TRACEPOINT_EVENT(
+	frr_bgp,
+	evpn_mh_local_ead_es_evi_route_upd,
+	TP_ARGS(esi_t *, esi, vni_t, vni,
+		uint8_t, route_type,
+		struct in_addr, vtep),
+	TP_FIELDS(
+		ctf_array(unsigned char, esi, esi, sizeof(esi_t))
+		ctf_integer(vni_t, vni, vni)
+		ctf_integer(uint8_t, route_type, route_type)
+		ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
+	)
+)
+TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_ead_es_evi_route_upd, TRACE_INFO)
+
+TRACEPOINT_EVENT(
+	frr_bgp,
+	evpn_mh_local_ead_es_evi_route_del,
+	TP_ARGS(esi_t *, esi, vni_t, vni,
+		uint8_t, route_type,
+		struct in_addr, vtep),
+	TP_FIELDS(
+		ctf_array(unsigned char, esi, esi, sizeof(esi_t))
+		ctf_integer(vni_t, vni, vni)
+		ctf_integer(uint8_t, route_type, route_type)
+		ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
+	)
+)
+TRACEPOINT_LOGLEVEL(frr_bgp, evpn_mh_local_ead_es_evi_route_del, TRACE_INFO)
+
 TRACEPOINT_EVENT(
 	frr_bgp,
 	evpn_local_vni_add_zrecv,
@@ -495,6 +553,34 @@ TRACEPOINT_EVENT(
 )
 TRACEPOINT_LOGLEVEL(frr_bgp, evpn_local_macip_del_zrecv, TRACE_INFO)
 
+TRACEPOINT_EVENT(
+	frr_bgp,
+	evpn_advertise_type5,
+	TP_ARGS(vrf_id_t, vrf, const struct prefix_evpn *, pfx,
+		struct ethaddr *, rmac, struct in_addr, vtep),
+	TP_FIELDS(
+		ctf_integer(int, vrf_id, vrf)
+		ctf_array(unsigned char, ip, &pfx->prefix.prefix_addr.ip,
+			sizeof(struct ipaddr))
+		ctf_array(unsigned char, rmac, rmac,
+			sizeof(struct ethaddr))
+		ctf_integer_network_hex(unsigned int, vtep, vtep.s_addr)
+	)
+)
+TRACEPOINT_LOGLEVEL(frr_bgp, evpn_advertise_type5, TRACE_INFO)
+
+TRACEPOINT_EVENT(
+	frr_bgp,
+	evpn_withdraw_type5,
+	TP_ARGS(vrf_id_t, vrf, const struct prefix_evpn *, pfx),
+	TP_FIELDS(
+		ctf_integer(int, vrf_id, vrf)
+		ctf_array(unsigned char, ip, &pfx->prefix.prefix_addr.ip,
+			sizeof(struct ipaddr))
+	)
+)
+TRACEPOINT_LOGLEVEL(frr_bgp, evpn_withdraw_type5, TRACE_INFO)
+
 TRACEPOINT_EVENT(
 	frr_bgp,
 	evpn_local_l3vni_add_zrecv,
diff --git a/tools/frr_babeltrace.py b/tools/frr_babeltrace.py
index 4d974ad356f8..9832568b3736 100755
--- a/tools/frr_babeltrace.py
+++ b/tools/frr_babeltrace.py
@@ -157,6 +157,46 @@ def parse_frr_bgp_evpn_mh_local_es_evi_del_zrecv(event):
 
     parse_event(event, field_parsers)
 
+def parse_frr_bgp_evpn_mh_es_evi_vtep_add(event):
+    """
+    bgp evpn remote ead evi remote vtep add; raw format -
+    ctf_array(unsigned char, esi, esi, sizeof(esi_t))
+    """
+    field_parsers = {"esi": print_esi,
+                     "vtep": print_net_ipv4_addr}
+
+    parse_event(event, field_parsers)
+
+def parse_frr_bgp_evpn_mh_es_evi_vtep_del(event):
+    """
+    bgp evpn remote ead evi remote vtep del; raw format -
+    ctf_array(unsigned char, esi, esi, sizeof(esi_t))
+    """
+    field_parsers = {"esi": print_esi,
+                     "vtep": print_net_ipv4_addr}
+
+    parse_event(event, field_parsers)
+
+def parse_frr_bgp_evpn_mh_local_ead_es_evi_route_upd(event):
+    """
+    bgp evpn local ead evi vtep; raw format -
+    ctf_array(unsigned char, esi, esi, sizeof(esi_t))
+    """
+    field_parsers = {"esi": print_esi,
+                     "vtep": print_net_ipv4_addr}
+
+    parse_event(event, field_parsers)
+
+def parse_frr_bgp_evpn_mh_local_ead_es_evi_route_del(event):
+    """
+    bgp evpn local ead evi vtep del; raw format -
+    ctf_array(unsigned char, esi, esi, sizeof(esi_t))
+    """
+    field_parsers = {"esi": print_esi,
+                     "vtep": print_net_ipv4_addr}
+
+    parse_event(event, field_parsers)
+
 def parse_frr_bgp_evpn_local_vni_add_zrecv(event):
     """
     bgp evpn local-vni parser; raw format -
@@ -205,6 +245,24 @@ def parse_frr_bgp_evpn_local_macip_del_zrecv(event):
 
     parse_event(event, field_parsers)
 
+def parse_frr_bgp_evpn_advertise_type5(event):
+    """
+    local originated type-5 route
+    """
+    field_parsers = {"ip": print_ip_addr,
+                     "rmac": print_mac,
+                     "vtep": print_net_ipv4_addr}
+
+    parse_event(event, field_parsers)
+
+def parse_frr_bgp_evpn_withdraw_type5(event):
+    """
+    local originated type-5 route withdraw
+    """
+    field_parsers = {"ip": print_ip_addr}
+
+    parse_event(event, field_parsers)
+
 ############################ evpn parsers - end *#############################
 
 def main():
@@ -225,6 +283,14 @@ def main():
                      parse_frr_bgp_evpn_mh_local_es_evi_add_zrecv,
                      "frr_bgp:evpn_mh_local_es_evi_del_zrecv":
                      parse_frr_bgp_evpn_mh_local_es_evi_del_zrecv,
+                     "frr_bgp:evpn_mh_es_evi_vtep_add":
+                     parse_frr_bgp_evpn_mh_es_evi_vtep_add,
+                     "frr_bgp:evpn_mh_es_evi_vtep_del":
+                     parse_frr_bgp_evpn_mh_es_evi_vtep_del,
+                     "frr_bgp:evpn_mh_local_ead_es_evi_route_upd":
+                     parse_frr_bgp_evpn_mh_local_ead_es_evi_route_upd,
+                     "frr_bgp:evpn_mh_local_ead_es_evi_route_del":
+                     parse_frr_bgp_evpn_mh_local_ead_es_evi_route_del,
                      "frr_bgp:evpn_local_vni_add_zrecv":
                      parse_frr_bgp_evpn_local_vni_add_zrecv,
                      "frr_bgp:evpn_local_l3vni_add_zrecv":
@@ -233,6 +299,10 @@ def main():
                      parse_frr_bgp_evpn_local_macip_add_zrecv,
                      "frr_bgp:evpn_local_macip_del_zrecv":
                      parse_frr_bgp_evpn_local_macip_del_zrecv,
+                     "frr_bgp:evpn_advertise_type5":
+                     parse_frr_bgp_evpn_advertise_type5,
+                     "frr_bgp:evpn_withdraw_type5":
+                     parse_frr_bgp_evpn_withdraw_type5,
 }
 
     # get the trace path from the first command line argument