diff --git a/src/i1905_ubus.c b/src/i1905_ubus.c
index f685ed8f389ca9d9750ab63a0c1d8be04796ad81..4da6c24adacbb2b049dc979f263dd7b4f0fef3ad 100644
--- a/src/i1905_ubus.c
+++ b/src/i1905_ubus.c
@@ -188,6 +188,7 @@ static int i1905_ubus_dump_info(struct i1905_private *priv, struct blob_buf *bb)
 	struct i1905_selfdevice *self = &priv->dm.self;
 	struct i1905_config *cfg = &priv->cfg;
 	//struct i1905_registrar_config *r;
+	struct i1905_master_interface *mif;
 	int num_immediate_neighbors = 0;
 	struct i1905_interface *iface;
 	struct i1905_vendor_info *ven;
@@ -207,6 +208,12 @@ static int i1905_ubus_dump_info(struct i1905_private *priv, struct blob_buf *bb)
 	blobmsg_add_string(bb, "ieee1905id", almacstr);
 	blobmsg_add_string(bb, "status", "enabled");
 
+	blobmsg_add_string(bb, "name", self->name);
+	blobmsg_add_string(bb, "manufacturer", self->manufacturer);
+	blobmsg_add_string(bb, "model", self->model);
+	blobmsg_add_string(bb, "url", self->url ? self->url : "");
+
+
 	if (cfg->registrar) {
 		blobmsg_add_u8(bb, "registrar", true);
 		a = blobmsg_open_array(bb, "registrar_band");
@@ -231,8 +238,12 @@ static int i1905_ubus_dump_info(struct i1905_private *priv, struct blob_buf *bb)
 		char ifmacstr[18] = {0};
 		struct i1905_vendor_info *v;
 		struct i1905_neighbor_interface *link;
+		struct i1905_non1905_neighbor *nnbr;
 		char ouistring[7] = {0};
 		char parent[16] = {0};
+		int iface_num_ipv4 = 0;
+		int iface_num_ipv6 = 0;
+		int j = 0;
 
 		if (iface->invalid)
 			continue;
@@ -251,6 +262,20 @@ static int i1905_ubus_dump_info(struct i1905_private *priv, struct blob_buf *bb)
 				   "up" : "down");
 
 		blobmsg_add_string(bb, "media", media_type2str(iface->media));
+		if (IS_MEDIA_WIFI(iface->media)) {
+			struct ieee80211_info *winfo;
+			char bssidstr[18] = {0};
+
+			winfo = (struct ieee80211_info *)iface->mediainfo;
+			if (winfo) {
+				hwaddr_ntoa(winfo->bssid, bssidstr);
+				blobmsg_add_string(bb, "bssid", bssidstr);
+				blobmsg_add_string(bb, "role", role_type2str(winfo->role));
+				blobmsg_add_u32(bb, "bandwidth", winfo->ap_bandwidth);
+				blobmsg_add_u32(bb, "freq_seg0_idx", winfo->ap_channel_seg0_idx);
+				blobmsg_add_u32(bb, "freq_seg1_idx", winfo->ap_channel_seg1_idx);
+			}
+		}
 
 		sprintf(ouistring, "%02x%02x%02x", iface->genphy.oui[0],
 			iface->genphy.oui[1], iface->genphy.oui[2]);
@@ -273,13 +298,70 @@ static int i1905_ubus_dump_info(struct i1905_private *priv, struct blob_buf *bb)
 		blobmsg_add_u32(bb, "num_vendor_properties", iface->num_vendor);
 		a = blobmsg_open_array(bb, "properties");
 		list_for_each_entry(v, &iface->vendorlist, list) {
+			void *t;
+
+			t = blobmsg_open_table(bb, "");
 			blobmsg_add_string(bb, "oui", "");
 			blobmsg_add_string(bb, "data", "");
+			blobmsg_close_table(bb, t);
 		}
 		blobmsg_close_array(bb, a);
 
-		blobmsg_add_u32(bb, "num_links", iface->num_links);
+		for (j = 0; j < iface->num_ipaddrs; j++) {
+			if (iface->ipaddrs[j].family == AF_INET)
+				iface_num_ipv4++;
+			else if (iface->ipaddrs[j].family == AF_INET6)
+				iface_num_ipv6++;
+		}
+
+		blobmsg_add_u32(bb, "num_ipv4", iface_num_ipv4);
+		a = blobmsg_open_array(bb, "ipv4_address");
+		for (j = 0; j < iface->num_ipaddrs; j++) {
+			char ipbuf[256] = {0};
+			void *t;
+
+			if (iface->ipaddrs[j].family != AF_INET)
+				continue;
+
+			t = blobmsg_open_table(bb, "");
+			inet_ntop(AF_INET, &iface->ipaddrs[j].addr.ip4, ipbuf, sizeof(ipbuf));
+			blobmsg_add_string(bb, "ip", ipbuf);
+			blobmsg_add_string(bb, "type", ipv4_type2str(IPV4_TYPE_UNKNOWN));
+			blobmsg_add_string(bb, "dhcpserver", "0.0.0.0");
+			blobmsg_close_table(bb, t);
+		}
+		blobmsg_close_array(bb, a);
+
+		blobmsg_add_u32(bb, "num_ipv6", iface_num_ipv6);
+		a = blobmsg_open_array(bb, "ipv6_address");
+		for (j = 0; j < iface->num_ipaddrs; j++) {
+			char ipbuf[256] = {0};
+			void *t;
+
+			if (iface->ipaddrs[j].family != AF_INET6)
+				continue;
 
+			t = blobmsg_open_table(bb, "");
+			inet_ntop(AF_INET6, &iface->ipaddrs[j].addr.ip6, ipbuf, sizeof(ipbuf));
+			blobmsg_add_string(bb, "ip", ipbuf);
+			blobmsg_add_string(bb, "type", ipv6_type2str(IPV6_TYPE_UNKNOWN));
+			blobmsg_add_string(bb, "dhcpserver", "::");
+			blobmsg_close_table(bb, t);
+		}
+		blobmsg_close_array(bb, a);
+
+		blobmsg_add_u32(bb, "num_neighbor_non1905", iface->num_neighbor_non1905);
+		a = blobmsg_open_array(bb, "non1905_neighbors");
+		list_for_each_entry(nnbr, &iface->non1905_nbrlist, list) {
+			char xnbr[18] = {0};
+
+			hwaddr_ntoa(nnbr->macaddr, xnbr);
+			blobmsg_add_string(bb, "", xnbr);
+		}
+		blobmsg_close_array(bb, a);
+
+
+		blobmsg_add_u32(bb, "num_links", iface->num_links);
 		a = blobmsg_open_array(bb, "links");
 		list_for_each_entry(link, &iface->nbriflist, list) {
 			char peer_macstr[18] = {0};
@@ -293,7 +375,6 @@ static int i1905_ubus_dump_info(struct i1905_private *priv, struct blob_buf *bb)
 			hwaddr_ntoa(link->aladdr, peer_almacstr);
 			blobmsg_add_string(bb, "ieee1905id", peer_almacstr);
 			blobmsg_add_u8(bb, "direct", link->direct ? true : false);
-
 			blobmsg_add_string(bb, "media", media_type2str(link->media));
 
 			rdev = i1905_dm_neighbor_lookup(iface, link->aladdr);
@@ -317,7 +398,6 @@ static int i1905_ubus_dump_info(struct i1905_private *priv, struct blob_buf *bb)
 			blobmsg_add_u32(bb, "rssi", link->metric.rssi);
 			blobmsg_close_table(bb, tt);
 
-
 			blobmsg_close_table(bb, t);
 		}
 		blobmsg_close_array(bb, a);
@@ -325,6 +405,36 @@ static int i1905_ubus_dump_info(struct i1905_private *priv, struct blob_buf *bb)
 	}
 	blobmsg_close_array(bb, aa);
 
+	/* show brtuples for selfdevice */
+	a = blobmsg_open_array(bb, "bridge_tuples");
+	list_for_each_entry(mif, &self->miflist, list) {
+		char brifs[32][16] = {0};
+		int n = 32;
+		int ret;
+		void *tt;
+		int i;
+
+		ret = br_get_iflist(mif->ifname, &n, brifs);
+		if (ret)
+			break;
+
+		if (n == 0)
+			continue;
+
+		tt = blobmsg_open_table(bb, "");
+		aaaa = blobmsg_open_array(bb, "tuple");
+		for (i = 0; i < n; i++) {
+			char macstr[18] = {0};
+			uint8_t macaddr[6] = {0};
+
+			if_gethwaddr(brifs[i], macaddr);
+			hwaddr_ntoa(macaddr, macstr);
+			blobmsg_add_string(bb, "", macstr);
+		}
+		blobmsg_close_array(bb, aaaa);
+		blobmsg_close_table(bb, tt);
+	}
+	blobmsg_close_array(bb, a);
 
 	a = blobmsg_open_table(bb, "topology");
 	blobmsg_add_u8(bb, "enabled", self->topology.enable ? true : false);