Histórico:
Eu uso o Debian Lenny e tenho duas interfaces WiFi. Eu uso uma configuração genérica em /etc/network/interfaces
iface wlan0 inet static
address 10.0.0.1
network 10.0.0.0
netmask 255.255.255.0
broadcast 10.0.0.255
auto wlan1
iface wlan1 inet static
address 192.168.5.1
network 192.168.5.1
netmask 255.255.255.0
broadcast 192.168.0.25
Portanto, não há sinal sobre o wpa_supplicant
.
Eu uso wpa_supplicant (v2.0) manualmente para conectá-los a uma WLAN via /etc/wpa_supplicant.conf
(para wlan0) e /etc/wpa_supplicant2.conf
(para wlan1).
Problema:
Enquanto as interfaces wifi estão conectadas a WLANs, eu faço
ip link set wlan0 down
ip link set wlan1 up
rm /var/run/wpa_supplicant/wlan0
rm /var/run/wpa_supplicant/wlan1
Então eu faço ip link set wlan0 (and 1) up
. Nesse caso, o iwconfig mostra que as interfaces wi-fi não estão conectadas a nenhuma rede.
Depois disso, corro /etc/init.d/networking restart
. Quando o processo é concluído, o iwconfig mostra que as interfaces wi-fi estão conectadas às WLANs que estavam conectadas anteriormente.
Pergunta:
Como o /etc/init.d/networking restart
faz com que o wpa_supplicant seja executado usando o arquivo .config para a interface usada anteriormente (wpa_suppliant.conf para wlan0 e wpa_supplicant2.conf para wlan1)? Repeti esse procedimento várias vezes e cada vez que as interfaces wifi estão conectadas à mesma rede que estão definidas nos arquivos .config.
O que eu fiz:
1) Eu suspeitava que o script /etc/init.d/networking
usasse o wpa_supplicant de alguma forma. Por isso, dei uma olhada no script:
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: networking
# Required-Start: mountkernfs ifupdown $local_fs
# Required-Stop: ifupdown $local_fs
# Default-Start: S
# Default-Stop: 0 6
# Short-Description: Raise network interfaces.
### END INIT INFO
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
[ -x /sbin/ifup ] || exit 0
. /lib/lsb/init-functions
process_options() {
[ -e /etc/network/options ] || return 0
log_warning_msg "/etc/network/options still exists and it will be IGNORED! R
ead README.Debian of netbase."
}
check_network_file_systems() {
[ -e /proc/mounts ] || return 0
exec 9<&0 < /proc/mounts
while read DEV MTPT FSTYPE REST; do
case $DEV in
/dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)
log_warning_msg "not deconfiguring network interfaces: network devic
es still mounted."
exit 0
;;
esac
case $FSTYPE in
nfs|nfs4|smbfs|ncp|ncpfs|cifs|coda|ocfs2|gfs|pvfs|pvfs2|fuse.httpfs|fuse
.curlftpfs)
log_warning_msg "not deconfiguring network interfaces: network file
systems still mounted."
exit 0
;;
esac
done
exec 0<&9 9<&-
}
case "$1" in
start)
process_options
log_action_begin_msg "Configuring network interfaces"
if ifup -a; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;
stop)
check_network_file_systems
log_action_begin_msg "Deconfiguring network interfaces"
if ifdown -a --exclude=lo; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;
force-reload|restart)
process_options
log_action_begin_msg "Reconfiguring network interfaces"
ifdown -a --exclude=lo || true
if ifup -a --exclude=lo; then
log_action_end_msg $?
else
log_action_end_msg $?
fi
;;
*)
echo "Usage: /etc/init.d/networking {start|stop|restart|force-reload}"
exit 1
;;
esac
exit 0
ifupdown
é um script que mata o wpa_supplicant antes que ifdown seja executado (como o script explica). Eu não sei programação shell ou bash, mas como eu entendi, reiniciar só faz ifdown e ifup as interfaces.
2) Leia os man page que diz:
The ifup and ifdown commands may be used to configure (or,respectively, deconfigure) network interfaces based on interface definitions in the file /etc/network/interfaces.
my /etc/network/interfaces
não inclui nenhuma configuração sobre o wpa_supplicant.