Allow driver and ctrl_interface parameters to be overridden
New wpa_supplicant command line options -o<driver> and -O<ctrl> can now be used to override the parameters received in add interface command from dbus or global ctrl_interface. This can be used, e.g., to enable control interface when using NetworkManager (add -O/var/run/wpa_supplicant into the Exec parameter in /usr/share/dbus-1/system-services/fi.epitest.hostap.WPASupplicant.service). Similarly, this can be used to use another driver wrapper with NetworkManager (e.g., -onl80211 to replace WEXT with nl80211).
This commit is contained in:
parent
0ae7b08691
commit
d27df100b5
3 changed files with 53 additions and 2 deletions
|
@ -34,6 +34,7 @@ static void usage(void)
|
||||||
" -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] "
|
" -i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] "
|
||||||
"[-p<driver_param>] \\\n"
|
"[-p<driver_param>] \\\n"
|
||||||
" [-b<br_ifname>] [-f<debug file>] \\\n"
|
" [-b<br_ifname>] [-f<debug file>] \\\n"
|
||||||
|
" [-o<override driver>] [-O<override ctrl>] \\\n"
|
||||||
" [-N -i<ifname> -c<conf> [-C<ctrl>] "
|
" [-N -i<ifname> -c<conf> [-C<ctrl>] "
|
||||||
"[-D<driver>] \\\n"
|
"[-D<driver>] \\\n"
|
||||||
" [-p<driver_param>] [-b<br_ifname>] ...]\n"
|
" [-p<driver_param>] [-b<br_ifname>] ...]\n"
|
||||||
|
@ -67,6 +68,8 @@ static void usage(void)
|
||||||
printf(" -t = include timestamp in debug messages\n"
|
printf(" -t = include timestamp in debug messages\n"
|
||||||
" -h = show this help text\n"
|
" -h = show this help text\n"
|
||||||
" -L = show license (GPL and BSD)\n"
|
" -L = show license (GPL and BSD)\n"
|
||||||
|
" -o = override driver parameter for new interfaces\n"
|
||||||
|
" -O = override ctrl_interface parameter for new interfaces\n"
|
||||||
" -p = driver parameters\n"
|
" -p = driver parameters\n"
|
||||||
" -P = PID file\n"
|
" -P = PID file\n"
|
||||||
" -q = decrease debugging verbosity (-qq even less)\n");
|
" -q = decrease debugging verbosity (-qq even less)\n");
|
||||||
|
@ -140,7 +143,7 @@ int main(int argc, char *argv[])
|
||||||
wpa_supplicant_fd_workaround();
|
wpa_supplicant_fd_workaround();
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
c = getopt(argc, argv, "b:Bc:C:D:df:g:hi:KLNp:P:qstuvW");
|
c = getopt(argc, argv, "b:Bc:C:D:df:g:hi:KLNo:O:p:P:qstuvW");
|
||||||
if (c < 0)
|
if (c < 0)
|
||||||
break;
|
break;
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
@ -191,6 +194,12 @@ int main(int argc, char *argv[])
|
||||||
license();
|
license();
|
||||||
exitcode = 0;
|
exitcode = 0;
|
||||||
goto out;
|
goto out;
|
||||||
|
case 'o':
|
||||||
|
params.override_driver = optarg;
|
||||||
|
break;
|
||||||
|
case 'O':
|
||||||
|
params.override_ctrl_interface = optarg;
|
||||||
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
iface->driver_param = optarg;
|
iface->driver_param = optarg;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -2246,6 +2246,7 @@ struct wpa_supplicant * wpa_supplicant_add_iface(struct wpa_global *global,
|
||||||
struct wpa_interface *iface)
|
struct wpa_interface *iface)
|
||||||
{
|
{
|
||||||
struct wpa_supplicant *wpa_s;
|
struct wpa_supplicant *wpa_s;
|
||||||
|
struct wpa_interface t_iface;
|
||||||
|
|
||||||
if (global == NULL || iface == NULL)
|
if (global == NULL || iface == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -2254,7 +2255,22 @@ struct wpa_supplicant * wpa_supplicant_add_iface(struct wpa_global *global,
|
||||||
if (wpa_s == NULL)
|
if (wpa_s == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (wpa_supplicant_init_iface(wpa_s, iface)) {
|
t_iface = *iface;
|
||||||
|
if (global->params.override_driver) {
|
||||||
|
wpa_printf(MSG_DEBUG, "Override interface parameter: driver "
|
||||||
|
"('%s' -> '%s')",
|
||||||
|
iface->driver, global->params.override_driver);
|
||||||
|
t_iface.driver = global->params.override_driver;
|
||||||
|
}
|
||||||
|
if (global->params.override_ctrl_interface) {
|
||||||
|
wpa_printf(MSG_DEBUG, "Override interface parameter: "
|
||||||
|
"ctrl_interface ('%s' -> '%s')",
|
||||||
|
iface->ctrl_interface,
|
||||||
|
global->params.override_ctrl_interface);
|
||||||
|
t_iface.ctrl_interface =
|
||||||
|
global->params.override_ctrl_interface;
|
||||||
|
}
|
||||||
|
if (wpa_supplicant_init_iface(wpa_s, &t_iface)) {
|
||||||
wpa_printf(MSG_DEBUG, "Failed to add interface %s",
|
wpa_printf(MSG_DEBUG, "Failed to add interface %s",
|
||||||
iface->ifname);
|
iface->ifname);
|
||||||
wpa_supplicant_deinit_iface(wpa_s);
|
wpa_supplicant_deinit_iface(wpa_s);
|
||||||
|
@ -2388,6 +2404,12 @@ struct wpa_global * wpa_supplicant_init(struct wpa_params *params)
|
||||||
if (params->ctrl_interface)
|
if (params->ctrl_interface)
|
||||||
global->params.ctrl_interface =
|
global->params.ctrl_interface =
|
||||||
os_strdup(params->ctrl_interface);
|
os_strdup(params->ctrl_interface);
|
||||||
|
if (params->override_driver)
|
||||||
|
global->params.override_driver =
|
||||||
|
os_strdup(params->override_driver);
|
||||||
|
if (params->override_ctrl_interface)
|
||||||
|
global->params.override_ctrl_interface =
|
||||||
|
os_strdup(params->override_ctrl_interface);
|
||||||
wpa_debug_level = global->params.wpa_debug_level =
|
wpa_debug_level = global->params.wpa_debug_level =
|
||||||
params->wpa_debug_level;
|
params->wpa_debug_level;
|
||||||
wpa_debug_show_keys = global->params.wpa_debug_show_keys =
|
wpa_debug_show_keys = global->params.wpa_debug_show_keys =
|
||||||
|
@ -2514,6 +2536,8 @@ void wpa_supplicant_deinit(struct wpa_global *global)
|
||||||
os_free(global->params.pid_file);
|
os_free(global->params.pid_file);
|
||||||
}
|
}
|
||||||
os_free(global->params.ctrl_interface);
|
os_free(global->params.ctrl_interface);
|
||||||
|
os_free(global->params.override_driver);
|
||||||
|
os_free(global->params.override_ctrl_interface);
|
||||||
|
|
||||||
os_free(global);
|
os_free(global);
|
||||||
wpa_debug_close_syslog();
|
wpa_debug_close_syslog();
|
||||||
|
|
|
@ -160,6 +160,24 @@ struct wpa_params {
|
||||||
* wpa_debug_syslog - Enable log output through syslog
|
* wpa_debug_syslog - Enable log output through syslog
|
||||||
*/
|
*/
|
||||||
int wpa_debug_syslog;
|
int wpa_debug_syslog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* override_driver - Optional driver parameter override
|
||||||
|
*
|
||||||
|
* This parameter can be used to override the driver parameter in
|
||||||
|
* dynamic interface addition to force a specific driver wrapper to be
|
||||||
|
* used instead.
|
||||||
|
*/
|
||||||
|
char *override_driver;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* override_ctrl_interface - Optional ctrl_interface override
|
||||||
|
*
|
||||||
|
* This parameter can be used to override the ctrl_interface parameter
|
||||||
|
* in dynamic interface addition to force a control interface to be
|
||||||
|
* created.
|
||||||
|
*/
|
||||||
|
char *override_ctrl_interface;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue