hostapd: Add INTERFACES ctrl_iface command
Return a list of the available interfaces (the main BSS) and optionally with ctrl_iface when the optional "ctrl" parameter is included. This is useful when using UDP ctrl_iface and add interfaces using the ADD command. After that we need to know which UDP port was assigned for the control interface for the added interface. Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
This commit is contained in:
parent
180e5b96c3
commit
618f5d01b0
1 changed files with 48 additions and 0 deletions
|
@ -2920,6 +2920,51 @@ error_return:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
hostapd_global_ctrl_iface_interfaces(struct hapd_interfaces *interfaces,
|
||||||
|
const char *input,
|
||||||
|
char *reply, int reply_size)
|
||||||
|
{
|
||||||
|
size_t i, j;
|
||||||
|
int res;
|
||||||
|
char *pos, *end;
|
||||||
|
struct hostapd_iface *iface;
|
||||||
|
int show_ctrl = 0;
|
||||||
|
|
||||||
|
if (input)
|
||||||
|
show_ctrl = !!os_strstr(input, "ctrl");
|
||||||
|
|
||||||
|
pos = reply;
|
||||||
|
end = reply + reply_size;
|
||||||
|
|
||||||
|
for (i = 0; i < interfaces->count; i++) {
|
||||||
|
iface = interfaces->iface[i];
|
||||||
|
|
||||||
|
for (j = 0; j < iface->num_bss; j++) {
|
||||||
|
struct hostapd_bss_config *conf;
|
||||||
|
|
||||||
|
conf = iface->conf->bss[j];
|
||||||
|
if (show_ctrl)
|
||||||
|
res = os_snprintf(pos, end - pos,
|
||||||
|
"%s ctrl_iface=%s\n",
|
||||||
|
conf->iface,
|
||||||
|
conf->ctrl_interface ?
|
||||||
|
conf->ctrl_interface : "N/A");
|
||||||
|
else
|
||||||
|
res = os_snprintf(pos, end - pos, "%s\n",
|
||||||
|
conf->iface);
|
||||||
|
if (os_snprintf_error(end - pos, res)) {
|
||||||
|
*pos = '\0';
|
||||||
|
return pos - reply;
|
||||||
|
}
|
||||||
|
pos += res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return pos - reply;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
hostapd_global_ctrl_iface_dup_network(struct hapd_interfaces *interfaces,
|
hostapd_global_ctrl_iface_dup_network(struct hapd_interfaces *interfaces,
|
||||||
char *cmd)
|
char *cmd)
|
||||||
|
@ -3116,6 +3161,9 @@ static void hostapd_global_ctrl_iface_receive(int sock, void *eloop_ctx,
|
||||||
reply_len = os_snprintf(reply, reply_size, "OK\n");
|
reply_len = os_snprintf(reply, reply_size, "OK\n");
|
||||||
else
|
else
|
||||||
reply_len = -1;
|
reply_len = -1;
|
||||||
|
} else if (os_strncmp(buf, "INTERFACES", 10) == 0) {
|
||||||
|
reply_len = hostapd_global_ctrl_iface_interfaces(
|
||||||
|
interfaces, buf + 10, reply, sizeof(buffer));
|
||||||
} else {
|
} else {
|
||||||
wpa_printf(MSG_DEBUG, "Unrecognized global ctrl_iface command "
|
wpa_printf(MSG_DEBUG, "Unrecognized global ctrl_iface command "
|
||||||
"ignored");
|
"ignored");
|
||||||
|
|
Loading…
Reference in a new issue