CarstenHa
Anmeldungsdatum: 1. Mai 2020
Beiträge: 142
|
Hallo liebes Forum, ich würde gerne mit einem Dispacher-Skript quasi eine Weiche für eth0 einbauen.
Wenn Router erkannt wird, dann baue normale LAN-Verbindung auf. Wenn nicht, dann Link-local Verbindung.
Dazu habe ich folgendes Skript im Ordner | /etc/NetworkManager/dispatcher.d/pre-up.d/
|
erstellt: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #!/bin/bash
INTERFACE=$1
ACTION=$2
if [ "$INTERFACE" == "eth0" ] && [ "$ACTION" == "pre-up" ]; then
# Router-Ping
ping -c 1 192.168.178.1 &>/dev/null
if [ $? -eq 0 ]; then
nmcli con up mylan
else
# Link-Local-Verbindung
nmcli con up myadhoc
fi
fi
|
root-Rechte (755) sind gesetzt. WLAN-Verbindung (für den Ping) ist aktiv. Leider funktioniert das nicht. Seht ihr den Fehler? Viele Grüße Carsten
|
weholei
Anmeldungsdatum: 7. Februar 2019
Beiträge: 857
Wohnort: Mittelfranken
|
entschuldigung, falscher Beitrag, wollte lastmod "liken"
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13212
|
Ohne mich jetzt ins Detail zu vertiefen, wäre meine Vermutung dass Du ein logisches Problem hast: meines Wissens benötigt der ping ein vollständig konfiguriertes Interface, damit seine ICMP-Pakete geroutet werden können. Aber das Interface ist ja noch nicht oben. Vermutlich musst Du das Skript beim Event "up" laufen lassen. Übrigens: Die String-Vergleiche in Zeile 6 sollten nur ein Gleichheitszeichen haben. Man kann auch noch vereinfachen, indem man den ping direkt als Bedingung ausführt: 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | #!/bin/sh
INTERFACE=$1
ACTION=$2
if [ "$INTERFACE" = "eth0" -a "$ACTION" = "pre-up" ]; then
# Router-Ping
if ping -c 1 192.168.178.1 >/dev/null 2>&1; then
nmcli con up mylan
else
# Link-Local-Verbindung
nmcli con up myadhoc
fi
fi
|
|
CarstenHa
(Themenstarter)
Anmeldungsdatum: 1. Mai 2020
Beiträge: 142
|
weholei schrieb: entschuldigung, falscher Beitrag, wollte lastmod "liken"
👍 😀
|
CarstenHa
(Themenstarter)
Anmeldungsdatum: 1. Mai 2020
Beiträge: 142
|
rklm schrieb: Ohne mich jetzt ins Detail zu vertiefen, wäre meine Vermutung dass Du ein logisches Problem hast: meines Wissens benötigt der ping ein vollständig konfiguriertes Interface, damit seine ICMP-Pakete geroutet werden können. Aber das Interface ist ja noch nicht oben. Vermutlich musst Du das Skript beim Event "up" laufen lassen.
Ich dachte, das das Ping eventuell über die aktive WLAN-Schnittstelle geht, wenn eth0 noch nicht oben ist. Geht das Ping in dem Skript denn ausschließlich über eth0?
Übrigens: Die String-Vergleiche in Zeile 6 sollten nur ein Gleichheitszeichen haben.
Warum soll man denn dafür die Dash nutzen? Ich hatte darüber auch schon in dem Wiki-Artikel gelesen. Welche Gründe sprechen denn gegen die Bash? Gruß Carsten
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 9743
Wohnort: Münster
|
Siehe Artikel NetworkManager/Dispatcher: pre-up funktioniert nur unter unter Beachtung spezieller Bedingungen.
Selbst wenn Dein Skript wie beabsichtigt aufgerufen wird, wäre es eine Endlosschleife, denn ein Befehl wie
nmcli connection up mylan
ruft es ja erneut auf. Wie man einen wie von Dir gewünschten Schalter baut, zeigt das 4. Beispiel im Artikel, den Du natürlich anpassen musst. Beachte auch: Nach Aktivierung einer Ethernet-Schnittstelle zum Router wird die WLAN-Schnittstelle zum selben Route deaktiviert.
|
CarstenHa
(Themenstarter)
Anmeldungsdatum: 1. Mai 2020
Beiträge: 142
|
kB schrieb: Selbst wenn Dein Skript wie beabsichtigt aufgerufen wird, wäre es eine Endlosschleife, denn ein Befehl wie
nmcli connection up mylan
ruft es ja erneut auf.
Hmm, ich dachte, ich würde eine Dispacher-Lösung finden aber wahrscheinlich ist in meinem Fall eine entsprechende udev-Regel doch der bessere Weg. Ich werde mal ein bisschen rumprobieren ...
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13212
|
CarstenHa schrieb: rklm schrieb:
Übrigens: Die String-Vergleiche in Zeile 6 sollten nur ein Gleichheitszeichen haben.
Warum soll man denn dafür die Dash nutzen? Ich hatte darüber auch schon in dem Wiki-Artikel gelesen. Welche Gründe sprechen denn gegen die Bash?
Mehr Overhead. Und die sh implementiert den POSIX-Standard - Skripte sind also tendenziell leichter zu portieren. Übrigens ist mit einfachen eckigen Klammern auch in der bash ein einzelnes Gleichheitszeichen der richtige Operator (siehe die Ausgabe von help test in einer bash ). Die bash meckert einfach nur nicht, wenn man zwei verwendet.
|
CarstenHa
(Themenstarter)
Anmeldungsdatum: 1. Mai 2020
Beiträge: 142
|
Ich habe jetzt eine super Lösung gefunden. Hintergrund ist, das ich eine Fallback-Option haben will, wenn der Raspi mal nicht im Heimnetz angeschlossen ist.
Dann soll eth0 jetzt die Link-local-Funktion von eth1 "übernehmen". eth1 ist ein Netzwerkstick der nur im Heimnetz angeschlossen ist. In meine crontab habe ich eingetragen:
| @reboot ~/.local/bin/ethswitch
|
ethswitch:
| #!/bin/bash
while [ "$(nmcli networking connectivity)" != "full" ]; do
sleep 10
done
[ -z "$(nmcli d | grep '^eth1')" ] && sudo nmcli con up myadhoc_eth0
|
Jetzt prüft er einfach bei jedem Booten ob der Stick angeschlossen ist und wenn nicht, aktiviert er die link-local-Verbindung für eth0. Funktioniert prima. Vielen Dank an Alle 😀 Gruß Carsten
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13212
|
CarstenHa schrieb:
Jetzt prüft er einfach bei jedem Booten ob der Stick angeschlossen ist und wenn nicht, aktiviert er die link-local-Verbindung für eth0. Funktioniert prima.
Ein schönes Beispiel dafür, dass die Lösung ganz anders aussehen kann, als man am Anfang dachte.
|
CarstenHa
(Themenstarter)
Anmeldungsdatum: 1. Mai 2020
Beiträge: 142
|
rklm schrieb: Ein schönes Beispiel dafür, dass die Lösung ganz anders aussehen kann, als man am Anfang dachte.
In der Tat. Nachdem man so ziemlich alles an Möglichkeiten abgeklappert hat ... 🤣
Und dabei hatte ich das schon mal ausprobiert und dachte, ob ich nicht vielleicht noch eine andere Lösung finde (und dabei bin ich dann in der Schleife hängengeblieben).
Gut das es Euch gibt, die einen da wieder raus holen 👍
|