
Hintergrund:
Ich verwende Debian Lenny und habe zwei WiFi-Schnittstellen. Ich verwende eine generische Konfiguration auf/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
Es hat also kein Zeichen über das wpa_supplicant
.
Ich verwende wpa_supplicant (v2.0) manuell, um sie über /etc/wpa_supplicant.conf
(für wlan0) und /etc/wpa_supplicant2.conf
(für wlan1) mit einem WLAN zu verbinden.
Problem:
Während die WiFi-Schnittstellen mit WLANs verbunden sind,
ip link set wlan0 down
ip link set wlan1 up
rm /var/run/wpa_supplicant/wlan0
rm /var/run/wpa_supplicant/wlan1
Dann mache ich das ip link set wlan0 (and 1) up
. In diesem Fall zeigt die iwconfig an, dass die WLAN-Schnittstellen mit keinem Netzwerk verbunden sind.
Danach führe ich aus /etc/init.d/networking restart
. Wenn der Vorgang abgeschlossen ist, zeigt iwconfig an, dass die WLAN-Schnittstellen mit den WLANs verbunden sind, mit denen sie zuvor verbunden waren.
Frage:
Wie kommt /etc/init.d/networking restart
es, dass wpa_supplicant unter Verwendung der .config-Datei für die zuvor verwendete Schnittstelle ausgeführt wird (wpa_supplicant.conf für wlan0 und wpa_supplicant2.conf für wlan1)? Ich habe diesen Vorgang viele Male wiederholt und jedes Mal waren die WLAN-Schnittstellen mit demselben Netzwerk verbunden, das in den .config-Dateien definiert ist.
Was habe ich getan:
1)Ich vermutete, dass das /etc/init.d/networking
Skript irgendwie wpa_supplicant verwendet. Daher habe ich mir das Skript einmal angeschaut:
#!/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
ist ein Skript, das den wpa_supplicant beendet, bevor ifdown ausgeführt wird (wie das Skript erklärt). Ich kenne mich mit Shell- oder Bash-Programmierung nicht aus, aber so wie ich es verstanden habe, führt ein Neustart nur ifdown und ifup der Schnittstellen aus.
2)Lesen Sie die ifup'smanpagewas sagt:
Die Befehle ifup und ifdown können zum Konfigurieren (bzw. Dekonfigurieren) von Netzwerkschnittstellen basierend auf Schnittstellendefinitionen in der Datei /etc/network/interfaces verwendet werden.
meins /etc/network/interfaces
enthält keine Konfiguration über den wpa_supplicant.