Hallo,
in meinem Notebook sind 2 NW-Karten (WLAN und Ethernet). Das Teil wird oft in unterschiedlichen Netzen betrieben. Im Büro hängt es mit dem Ethernet-Adapter am Netz und zu Hause via WLAN. In beiden Netzen wird die Konfiguration über DHCP bezogen.
Es werden beide Devices beim Starten mit DHCP konfiguriert und von einem von beiden wird dann auch die NW-Konfiguration empfangen. Leider werden beide Devices nacheinander abgefragt. Erst eth0 - das Ethernet-Device - wenn dort ein Timeout kommt, dann wird erst das WLAN-Device befragt, von dem dann die Konfiguration kommt.
Das Lästige ist das Warten auf den Timeout. Der liegt momentan bei etwa 1,5 min, in denen erstmal nichts passiert.
Ich hätte diese beiden Abfragen gern entweder parallelisiert oder wengistens das Timeout auf max. 15 sec runtergesetzt, so dass die Wartezeit nicht so lang ist.
Leider hab ich null Peilung, wo ich das einstellen kann und ob das überhaupt möglich ist.
Einen Vorschlag hab ich bekommen, entweder in /etc/network/options zu schauen oder die ifup-Scripte anzupassen. Bei beiden Varianten schaue ich wie die Sau ins Uhrwerk.
Wäre nett, wenn mir da jemand auf die Sprünge helfen könnte.
Grüße, Marco
Mehrere DHCP-Server abfragen
Vielleicht ein Workaround:
I1) n der interfaces.conf die devices nicht auf auto stellen, damit das booten schnell geht.
2) falls die DHCP Server verschiedene IP Adressen haben, ein eigenes Script schreiben welches einen ping (dort kann man glaube ich eine timeout option mitgeben) an einen Server absetzt und in einem if $? then .. else Konstrukt entsprechen dem Status ein ifup ethx macht.
3) das Script beim start ausführen
Gruss christian
I1) n der interfaces.conf die devices nicht auf auto stellen, damit das booten schnell geht.
2) falls die DHCP Server verschiedene IP Adressen haben, ein eigenes Script schreiben welches einen ping (dort kann man glaube ich eine timeout option mitgeben) an einen Server absetzt und in einem if $? then .. else Konstrukt entsprechen dem Status ein ifup ethx macht.
3) das Script beim start ausführen
Gruss christian
christian
- emge
- Beiträge: 1525
- Registriert: 20.10.2003 22:05:46
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: 50° 45' 0" N 12° 10' 0" E
Ich bin verwirrt. Ich dachte, bei DHCP geht es darum, dass man nicht wissen muss, wo denn der DHCP-Server genau läuft, sondern dass ein Broadcast ins Netzwerk geschickt wird, auf den dann irgendein DHCP-Server antwortet und mir die gewünschten Informationen übermittelt.ckihm.deb hat geschrieben:Vielleicht ein Workaround:
I1) n der interfaces.conf die devices nicht auf auto stellen, damit das booten schnell geht.
2) falls die DHCP Server verschiedene IP Adressen haben, ein eigenes Script schreiben welches einen ping (dort kann man glaube ich eine timeout option mitgeben) an einen Server absetzt und in einem if $? then .. else Konstrukt entsprechen dem Status ein ifup ethx macht.
3) das Script beim start ausführen
Wenn ich ein Ping versenden will, muss ich ja das passende Device schonmal konfiguriert haben, was aber (zumindest bei mir auf Arbeit) der Massgabe wiederspricht, dass keine festen IPs verwendet werden dürfen.
Grüße, Marco
- emge
- Beiträge: 1525
- Registriert: 20.10.2003 22:05:46
- Lizenz eigener Beiträge: Artistic Lizenz
- Wohnort: 50° 45' 0" N 12° 10' 0" E
*steinvomherzfall* Ich dachte schon, ich hab die ganze Zeit einer Fata Morgana nachgejagt und hätte alles wesentlich einfacher haben könneckihm.deb hat geschrieben:Du hast recht, ich habe bei meiner Antwort nicht richtig überlegt. Tut mir leid. Ich habe DNS Server im Kopf gehabt.
Die Variante mit einem Script hatte ich bisher auch im Einsatz. Einem (händisch zu startenden) Skript hab ich bisher den aktuellen Ort mitgegeben und das hat dann die Interfaces gestartet, die Routen gesetzt, DNS eingetragen, Konfigfiles für apt und den Konqueror gesetzt,... Das ganze ist mir jetzt auf den Senkel gegangen, zumal in unserer Firma eine große IP-Adressumstellung anstand, und ich bin auf DHCP umgestiegen.
Grüße, Marco
- Voyager_MP
- Beiträge: 628
- Registriert: 22.06.2004 10:04:07
- Wohnort: Aachen
ich hab mir ein script geschrieben, das das alles automatisch macht, es merkt ob ein kabel am ethernet steckt oder nicht, desweitern erkennt es um welches netzt es sich handelt wlan eth, home, office und connected auch direkt.
ich habs bei mir in rc3 gehängt, dann probt mein laptop während des booten und connectet dann direkt, entsprechend.
du wirst ein paar kleine änderungen vornehmen müssen, sollte aber eigentlich klar sein.
Code: Alles auswählen
#!/bin/bash
#===================================================================================
#
# FILE: NETWORK1.sh
#
# USAGE: ./1.sh
#
# SYNOPSIS:
#
# DESCRIPTION:
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Michel Pelzer (), michel@pelzernet.de
# COMPANY: ATecoM GmbH
# VERSION: 1.0
# CREATED: 21.08.2004 11:26:20 CEST
# REVISION: ---
#===================================================================================
#DEVICES
DRIVER="ndiswrapper"
NICKNAME="Michel"
#COLOURS
CS="\\033[1;32m"
CF="\\033[1;31m"
CN="\\033[0;39m"
ifup lo
# LAN
####################################################################################
lantest () {
DEVICE=`ifconfig | grep eth0 | gawk 'NR == 1 {print $1}'`
if [ -z $DEVICE ]; then
#echo "setze test lan auf"
ifconfig eth0 1.1.1.1 netmask 0.0.0.0 up
sleep 4
fi
LINKSTATUS=`ethtool eth0 |grep Link | gawk '{print $3}' | sed -e 's,[:],,g'`
if [ $LINKSTATUS == "yes" ]; then
echo -e $CS"found"$CN
else
ifconfig eth0 down
echo -e $CF"not found"$CN
fi
}
echo -en "Network: Checking for Cabel: "
lantest
echo -e "Network: Negotiating with Network: Please wait ..."
case $LINKSTATUS in
yes)
WLAN=`cat /proc/net/wireless | grep wlan* | gawk '{print $1}' | sed -e 's,[:],,g'`
ifconfig $WLAN down >/dev/null 2>&1
dhclient eth0 >/dev/null 2>&1
RESULT=`ifconfig | grep -n2 eth0 | gawk 'NR == 2 {print $2}'`
if [ $RESULT = "inet" ]; then
GATEWAY=`route -n | grep eth0 | grep -v 255.* | gawk '{print $2}'`
ping -c 1 $GATEWAY >/dev/null 2>&1
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo -en "Network: Connection Established with " $CS
case $GATEWAY in
10.2.4.1)
echo "atecom"
;;
192.168.120.1)
echo "pelzernet"
;;
*)
echo "unknown"
;;
esac
fi
fi
echo -e $CN
;;
no)
# Wlan
####################################################################################
wlanscan () {
WLAN=`cat /proc/net/wireless | grep wlan* | gawk '{print $1}' | sed -e 's,[:],,g'`
if [ -z $WLAN ]; then
#echo "lade treiber"
modprobe $DRIVER
WLAN="wlan0"
#echo "treiber geladen"
fi
ESSID=`iwlist $WLAN scan | gawk 'NR == 3 {print $1}' | sed -e 's,["],,g' -e 's,[ESSID:],,g'`
}
wlanscan
gateway () {
GATEWAY=`route -n | grep $WLAN | grep -v 255.* | gawk '{print $2}'`
}
connect () {
iwconfig $WLAN essid $ESSID nickname $NICKNAME $KEY
dhclient $WLAN >/dev/null 2>&1
RESULT=`ifconfig $WLAN | gawk 'NR == 2 {print $1}'`
if [ $RESULT = "inet" ]; then
gateway
ping -c 1 $GATEWAY >/dev/null 2>&1
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo -e "Network: Connection established with" $CS\"$ESSID\"$CN
else
echo -e "Network: Failed to connect to" $CS\"$ESSID\"$CN
fi
fi
}
case $ESSID in
home)
KEY="key HIER WEP KEY"
connect
;;
office)
KEY="key HIER WEP KEY"
connect
;;
fiends)
KEY="key HIER WEP KEY"
connect
;;
*)
NICKAME="Voyager_MP"
;;
esac
esac
du wirst ein paar kleine änderungen vornehmen müssen, sollte aber eigentlich klar sein.
Gruß Michel