diff --git a/src/cntlr_ubus_dbg.c b/src/cntlr_ubus_dbg.c
index 91a5ad8f0247321569ee89c1acc958c2dfcdea10..b691d0b1ad5aa7f0c31402ca27aac5e75db3b6c2 100644
--- a/src/cntlr_ubus_dbg.c
+++ b/src/cntlr_ubus_dbg.c
@@ -47,7 +47,8 @@
 #include "cntlr_ubus.h"
 #include "cntlr_tlv.h"
 #include "cntlr_cmdu.h"
-
+#include "backhaul_topology.h"
+#include "backhaul_topology_dbg.h"
 
 #define OBJECT_INVALID	((uint32_t)-1)
 
@@ -167,6 +168,68 @@ static int cntlr_dbg_clear_steer_summary(struct ubus_context *ctx, struct ubus_o
 	return UBUS_STATUS_OK;
 }
 
+static int cntrl_dbg_bh_topology_dump(struct ubus_context *ctx,
+				      struct ubus_object *obj,
+				      struct ubus_request_data *req,
+				      const char *method, struct blob_attr *msg)
+{
+	struct controller *c = container_of(obj, struct controller, obj_dbg);
+	struct node *node;
+	struct blob_buf bb = { 0 };
+	void *devs_arr;
+	char macaddrstr[18] = { 0 };
+
+	blob_buf_init(&bb, 0);
+	devs_arr = blobmsg_open_array(&bb, "bh_topology_devs");
+
+	if (is_bh_topology_valid()) {
+		list_for_each_entry(node, &c->nodelist, list) {
+			const struct bh_topology_dev *topo_dev =
+				find_bh_topology_device(node->alid);
+			if (topo_dev &&
+			    topo_dev->bh_info.level_in_tree != UNKNOWN_TREE_LEVEL) {
+				void *dev_table = blobmsg_open_table(&bb, "");
+				const struct backhaul_info *bh_info =
+					&topo_dev->bh_info;
+
+				blobmsg_add_string(&bb, "al_mac",
+					hwaddr_ntoa(topo_dev->al_macaddr, macaddrstr));
+				blobmsg_add_u16(&bb, "hops_from_root", bh_info->level_in_tree);
+				blobmsg_add_u16(&bb, "wifi_hops_from_root", bh_info->wifi_hops_from_root);
+
+				/* If device is not root device */
+				if (bh_info->parent_in_tree) {
+					void  *bh_table = blobmsg_open_table(&bb, "bh_info");
+
+					blobmsg_add_string(&bb, "parent_in_tree",
+						hwaddr_ntoa(bh_info->parent_in_tree->al_macaddr, macaddrstr));
+					blobmsg_add_string(&bb, "link_type",
+						i1905_media_type_to_str(bh_info->parent_iface->media_type));
+					blobmsg_add_string(&bb, "parent_iface",
+						hwaddr_ntoa(bh_info->parent_iface->macaddr, macaddrstr));
+
+					if (bh_info->own_iface) {
+						blobmsg_add_string(&bb, "own_iface",
+							hwaddr_ntoa(bh_info->own_iface->macaddr, macaddrstr));
+					}
+
+					blobmsg_close_table(&bb, bh_table);
+				}
+
+
+				blobmsg_close_table(&bb, dev_table);
+			}
+		}
+	}
+
+
+	blobmsg_close_array(&bb, devs_arr);
+	ubus_send_reply(ctx, req, bb.head);
+	blob_buf_free(&bb);
+
+	return UBUS_STATUS_OK;
+}
+
 #if (EASYMESH_VERSION > 2)
 static int cntlr_dbg_list_uris(struct ubus_context *ctx, struct ubus_object *obj,
 			struct ubus_request_data *req, const char *method,
@@ -244,6 +307,7 @@ int cntlr_publish_dbg_object(struct controller *c, const char *objname)
 		UBUS_METHOD_NOARG("list_macs", cntlr_dbg_list_macs),
 		UBUS_METHOD("clear_steer_summary", cntlr_dbg_clear_steer_summary,
 			clr_steer_summary_params),
+		UBUS_METHOD_NOARG("bh_topology_dump", cntrl_dbg_bh_topology_dump),
 #if (EASYMESH_VERSION > 2)
 		UBUS_METHOD_NOARG("list_uris", cntlr_dbg_list_uris),
 #endif