mirror of
https://dev.iopsys.eu/bbf/bbfdm.git
synced 2025-12-10 07:44:39 +01:00
tr181: wifi: fix invalid SSID stats
There is not always an "ifname" option in the wifi-iface section. This commit uses ubus to resolve the right interface for the SSID. Signed-off-by: Daniel Danzberger <daniel@dd-wrt.com>
This commit is contained in:
parent
b135d0b5ae
commit
cda2d2a61c
5 changed files with 50 additions and 1 deletions
|
|
@ -3244,8 +3244,8 @@ int browseWifiSsidInst(struct dmctx *dmctx, DMNODE *parent_node, void *prev_data
|
|||
|
||||
synchronize_specific_config_sections_with_dmmap("wireless", "wifi-iface", "dmmap_wireless", &dup_list);
|
||||
list_for_each_entry(p, &dup_list, list) {
|
||||
dmuci_get_value_by_section_string(p->config_section, "ifname", &ifname);
|
||||
dmuci_get_value_by_section_string(p->config_section, "device", &linker);
|
||||
ifname = get_device_from_wifi_iface(linker, section_name(p->config_section));
|
||||
init_wifi_ssid(&curr_wifi_ssid_args, p->config_section, ifname, linker);
|
||||
wnum = handle_update_instance(1, dmctx, &ssid_last, update_instance_alias, 3, p->dmmap_section, "ssidinstance", "ssidalias");
|
||||
if (DM_LINK_INST_OBJ(dmctx, parent_node, (void *)&curr_wifi_ssid_args, wnum) == DM_STOP)
|
||||
|
|
|
|||
|
|
@ -1418,6 +1418,40 @@ char *get_device(char *interface_name)
|
|||
return dmjson_get_value(res, 1, "device");
|
||||
}
|
||||
|
||||
char *get_device_from_wifi_iface(const char *wifi_iface, const char *wifi_section)
|
||||
{
|
||||
json_object *jobj;
|
||||
array_list *jarr;
|
||||
unsigned n = 0, i;
|
||||
const char *ifname = "";
|
||||
|
||||
if (wifi_iface[0] == 0 || wifi_section[0] == 0)
|
||||
return "";
|
||||
|
||||
dmubus_call("network.wireless", "status", UBUS_ARGS{{}}, 0, &jobj);
|
||||
if (jobj == NULL)
|
||||
return "";
|
||||
|
||||
json_object_object_get_ex(jobj, wifi_iface, &jobj);
|
||||
json_object_object_get_ex(jobj, "interfaces", &jobj);
|
||||
|
||||
jarr = json_object_get_array(jobj);
|
||||
if (jarr)
|
||||
n = array_list_length(jarr);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
json_object *j_e = jarr->array[i];
|
||||
const char *sect;
|
||||
|
||||
sect = __dmjson_get_string(j_e, "section");
|
||||
if (!strcmp(sect, wifi_section)) {
|
||||
ifname = __dmjson_get_string(j_e, "ifname");
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (char *)ifname;
|
||||
}
|
||||
|
||||
/*
|
||||
* Manage string lists
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -259,4 +259,5 @@ char * dmmap_file_path_get(const char *dmmap_package);
|
|||
int dm_read_sysfs_file(const char *file, char *dst, unsigned len);
|
||||
int get_net_iface_sysfs(const char *uci_iface, const char *name, char **value);
|
||||
int get_net_device_sysfs(const char *uci_iface, const char *name, char **value);
|
||||
char *get_device_from_wifi_iface(const char *wifi_iface, const char *wifi_section);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -136,6 +136,19 @@ json_object *dmjson_select_obj(json_object * jobj, char *argv[])
|
|||
return jobj;
|
||||
}
|
||||
|
||||
const char * __dmjson_get_string(json_object *jobj, const char *name)
|
||||
{
|
||||
const char *str = "";
|
||||
|
||||
json_object_object_get_ex(jobj, name, &jobj);
|
||||
if (jobj) {
|
||||
str = json_object_get_string(jobj);
|
||||
if (str == NULL)
|
||||
str = "";
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
json_object *____dmjson_select_obj_in_array_idx(json_object *mainjobj, json_object **arrobj, int index, char *argv[])
|
||||
{
|
||||
json_object *jobj = NULL;
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ char *____dmjson_get_value_in_obj(json_object *mainjobj, char *argv[]);
|
|||
char *__dmjson_get_value_in_obj(json_object *mainjobj, int argc, ...);
|
||||
char *__dmjson_get_value_in_array_idx(json_object *mainjobj, json_object **arrobj, char *defret, int index, int argc, ...);
|
||||
json_object *__dmjson_select_obj_in_array_idx(json_object *mainjobj, json_object **arrobj, int index, int argc, ...);
|
||||
const char * __dmjson_get_string(json_object *jobj, const char *name);
|
||||
|
||||
char *____dmjson_get_value_array_all(json_object *mainjobj, char *delim, char *argv[]);
|
||||
char *__dmjson_get_value_array_all(json_object *mainjobj, char *delim, int argc, ...);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue