diff --git a/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua b/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua index 733e6d7c9e..e512bbe998 100644 --- a/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua +++ b/package/gluon-status-page-mesh-batman-adv/luasrc/lib/gluon/status-page/mesh.lua @@ -5,6 +5,6 @@ return { -- 2) human-readable key (not translatable yet) -- 3) value suffix (optional) attrs = { - {'tq', 'TQ', ' %'}, + {'tp', 'bit/s', ''}, }, } diff --git a/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c b/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c index ae930548d9..5cce891bea 100644 --- a/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c +++ b/package/gluon-status-page-mesh-batman-adv/src/neighbours-batadv.c @@ -14,27 +14,28 @@ struct neigh_netlink_opts { struct batadv_nlquery_opts query_opts; }; -static const enum batadv_nl_attrs parse_orig_list_mandatory[] = { - BATADV_ATTR_ORIG_ADDRESS, +static const enum batadv_nl_attrs parse_neigh_list_mandatory[] = { BATADV_ATTR_NEIGH_ADDRESS, - BATADV_ATTR_TQ, + BATADV_ATTR_THROUGHPUT, BATADV_ATTR_HARD_IFINDEX, BATADV_ATTR_LAST_SEEN_MSECS, }; -static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg) +static int parse_neigh_list_netlink_cb(struct nl_msg *msg, void *arg) { struct nlattr *attrs[BATADV_ATTR_MAX+1]; struct nlmsghdr *nlh = nlmsg_hdr(msg); struct batadv_nlquery_opts *query_opts = arg; struct genlmsghdr *ghdr; - uint8_t *orig; - uint8_t *dest; - uint8_t tq; + uint8_t *neigh; + uint32_t throughput; uint32_t hardif; char ifname_buf[IF_NAMESIZE], *ifname; struct neigh_netlink_opts *opts; char mac1[18]; + char tp_str[5]; + const char tp_units[] = { 'k', 'M', 'G', 'T', '?' }; + int tp_unit; opts = batadv_container_of(query_opts, struct neigh_netlink_opts, query_opts); @@ -43,41 +44,43 @@ static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg) ghdr = nlmsg_data(nlh); - if (ghdr->cmd != BATADV_CMD_GET_ORIGINATORS) + if (ghdr->cmd != BATADV_CMD_GET_NEIGHBORS) return NL_OK; if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0), genlmsg_len(ghdr), batadv_genl_policy)) return NL_OK; - if (batadv_genl_missing_attrs(attrs, parse_orig_list_mandatory, - BATADV_ARRAY_SIZE(parse_orig_list_mandatory))) + if (batadv_genl_missing_attrs(attrs, parse_neigh_list_mandatory, + BATADV_ARRAY_SIZE(parse_neigh_list_mandatory))) return NL_OK; - orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]); - dest = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]); - tq = nla_get_u8(attrs[BATADV_ATTR_TQ]); + neigh = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]); + throughput = nla_get_u32(attrs[BATADV_ATTR_THROUGHPUT]); hardif = nla_get_u32(attrs[BATADV_ATTR_HARD_IFINDEX]); - if (memcmp(orig, dest, 6) != 0) - return NL_OK; - ifname = if_indextoname(hardif, ifname_buf); if (!ifname) return NL_OK; sprintf(mac1, "%02x:%02x:%02x:%02x:%02x:%02x", - orig[0], orig[1], orig[2], orig[3], orig[4], orig[5]); + neigh[0], neigh[1], neigh[2], neigh[3], neigh[4], neigh[5]); - struct json_object *neigh = json_object_new_object(); - if (!neigh) + struct json_object *obj = json_object_new_object(); + if (!obj) return NL_OK; - json_object_object_add(neigh, "tq", json_object_new_int(tq * 100 / 255)); - json_object_object_add(neigh, "ifname", json_object_new_string(ifname)); - json_object_object_add(neigh, "best", json_object_new_boolean(attrs[BATADV_ATTR_FLAG_BEST])); + for (tp_unit = 0; tp_unit < 4; tp_unit++) { + if (throughput < 1000) break; + throughput /= 1000; + } + sprintf(tp_str, "%3u%c", throughput, tp_units[tp_unit]); + + json_object_object_add(obj, "tp", json_object_new_string(tp_str)); + json_object_object_add(obj, "ifname", json_object_new_string(ifname)); + json_object_object_add(obj, "best", json_object_new_boolean(attrs[BATADV_ATTR_FLAG_BEST])); - json_object_object_add(opts->obj, mac1, neigh); + json_object_object_add(opts->obj, mac1, obj); return NL_OK; } @@ -94,8 +97,8 @@ static json_object *neighbours(void) { if (!opts.obj) return NULL; - ret = batadv_genl_query("bat0", BATADV_CMD_GET_ORIGINATORS, - parse_orig_list_netlink_cb, NLM_F_DUMP, + ret = batadv_genl_query("bat0", BATADV_CMD_GET_NEIGHBORS, + parse_neigh_list_netlink_cb, NLM_F_DUMP, &opts.query_opts); if (ret < 0) { json_object_put(opts.obj);