wpa_supplicant: Allow UDP ctrl_iface configuration to set the UDP port
This allows the UDP port to be set for the per-interface and global control interfaces. The format is: udp:<port_no> For example: wpa_supplicant -Dnl80211 -ddt -g udp:9888 And in the configuration file: ctrl_interface=udp:9877 Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
This commit is contained in:
parent
35986959d9
commit
db7fb435f3
1 changed files with 27 additions and 2 deletions
|
@ -338,6 +338,7 @@ wpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s)
|
||||||
{
|
{
|
||||||
struct ctrl_iface_priv *priv;
|
struct ctrl_iface_priv *priv;
|
||||||
int port = WPA_CTRL_IFACE_PORT;
|
int port = WPA_CTRL_IFACE_PORT;
|
||||||
|
char *pos;
|
||||||
#ifdef CONFIG_CTRL_IFACE_UDP_IPV6
|
#ifdef CONFIG_CTRL_IFACE_UDP_IPV6
|
||||||
struct sockaddr_in6 addr;
|
struct sockaddr_in6 addr;
|
||||||
int domain = PF_INET6;
|
int domain = PF_INET6;
|
||||||
|
@ -356,6 +357,17 @@ wpa_supplicant_ctrl_iface_init(struct wpa_supplicant *wpa_s)
|
||||||
if (wpa_s->conf->ctrl_interface == NULL)
|
if (wpa_s->conf->ctrl_interface == NULL)
|
||||||
return priv;
|
return priv;
|
||||||
|
|
||||||
|
pos = os_strstr(wpa_s->conf->ctrl_interface, "udp:");
|
||||||
|
if (pos) {
|
||||||
|
pos += 4;
|
||||||
|
port = atoi(pos);
|
||||||
|
if (port <= 0) {
|
||||||
|
wpa_printf(MSG_ERROR, "Invalid ctrl_iface UDP port: %s",
|
||||||
|
wpa_s->conf->ctrl_interface);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
priv->sock = socket(domain, SOCK_DGRAM, 0);
|
priv->sock = socket(domain, SOCK_DGRAM, 0);
|
||||||
if (priv->sock < 0) {
|
if (priv->sock < 0) {
|
||||||
wpa_printf(MSG_ERROR, "socket(PF_INET): %s", strerror(errno));
|
wpa_printf(MSG_ERROR, "socket(PF_INET): %s", strerror(errno));
|
||||||
|
@ -386,7 +398,8 @@ try_again:
|
||||||
#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
|
#endif /* CONFIG_CTRL_IFACE_UDP_IPV6 */
|
||||||
if (bind(priv->sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
|
if (bind(priv->sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
|
||||||
port--;
|
port--;
|
||||||
if ((WPA_CTRL_IFACE_PORT - port) < WPA_CTRL_IFACE_PORT_LIMIT)
|
if ((WPA_CTRL_IFACE_PORT - port) < WPA_CTRL_IFACE_PORT_LIMIT &&
|
||||||
|
!pos)
|
||||||
goto try_again;
|
goto try_again;
|
||||||
wpa_printf(MSG_ERROR, "bind(AF_INET): %s", strerror(errno));
|
wpa_printf(MSG_ERROR, "bind(AF_INET): %s", strerror(errno));
|
||||||
goto fail;
|
goto fail;
|
||||||
|
@ -623,6 +636,7 @@ wpa_supplicant_global_ctrl_iface_init(struct wpa_global *global)
|
||||||
{
|
{
|
||||||
struct ctrl_iface_global_priv *priv;
|
struct ctrl_iface_global_priv *priv;
|
||||||
struct sockaddr_in addr;
|
struct sockaddr_in addr;
|
||||||
|
char *pos;
|
||||||
int port = WPA_GLOBAL_CTRL_IFACE_PORT;
|
int port = WPA_GLOBAL_CTRL_IFACE_PORT;
|
||||||
|
|
||||||
priv = os_zalloc(sizeof(*priv));
|
priv = os_zalloc(sizeof(*priv));
|
||||||
|
@ -637,6 +651,17 @@ wpa_supplicant_global_ctrl_iface_init(struct wpa_global *global)
|
||||||
wpa_printf(MSG_DEBUG, "Global control interface '%s'",
|
wpa_printf(MSG_DEBUG, "Global control interface '%s'",
|
||||||
global->params.ctrl_interface);
|
global->params.ctrl_interface);
|
||||||
|
|
||||||
|
pos = os_strstr(global->params.ctrl_interface, "udp:");
|
||||||
|
if (pos) {
|
||||||
|
pos += 4;
|
||||||
|
port = atoi(pos);
|
||||||
|
if (port <= 0) {
|
||||||
|
wpa_printf(MSG_ERROR, "Invalid global ctrl UDP port %s",
|
||||||
|
global->params.ctrl_interface);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
priv->sock = socket(PF_INET, SOCK_DGRAM, 0);
|
priv->sock = socket(PF_INET, SOCK_DGRAM, 0);
|
||||||
if (priv->sock < 0) {
|
if (priv->sock < 0) {
|
||||||
wpa_printf(MSG_ERROR, "socket(PF_INET): %s", strerror(errno));
|
wpa_printf(MSG_ERROR, "socket(PF_INET): %s", strerror(errno));
|
||||||
|
@ -655,7 +680,7 @@ try_again:
|
||||||
if (bind(priv->sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
|
if (bind(priv->sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
|
||||||
port++;
|
port++;
|
||||||
if ((port - WPA_GLOBAL_CTRL_IFACE_PORT) <
|
if ((port - WPA_GLOBAL_CTRL_IFACE_PORT) <
|
||||||
WPA_GLOBAL_CTRL_IFACE_PORT_LIMIT)
|
WPA_GLOBAL_CTRL_IFACE_PORT_LIMIT && !pos)
|
||||||
goto try_again;
|
goto try_again;
|
||||||
wpa_printf(MSG_ERROR, "bind(AF_INET): %s", strerror(errno));
|
wpa_printf(MSG_ERROR, "bind(AF_INET): %s", strerror(errno));
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
Loading…
Reference in a new issue