[PATCH 2/2] Allow initial configuration from Ethernet

mail at adrianschmutzler.de mail at adrianschmutzler.de
So Jun 10 13:40:27 CEST 2018


Nachtrag:

Die von mir vorgeschlagene Lösung hat dann den Nachteil, dass die Konfiguration immer doppelt stattfindet, da ja am Anfang des Konfigurationsblocks hoodfile und hoodfilecopy verglichen werden. Dann wird quasi nochmal alles gelöscht und konfiguriert.

Wenn man hingegen einfach gar nichts ändert hat man dennoch eine relativ geringe Wahrscheinlichkeit, dass zwei Router so eine blöde Zeitverschiebung haben, dass das Herunterladen eines alten Hoodfiles ermöglicht wird. Ich tendiere dazu, diesen Spezialfall eines Spezialfalles für ein erstes Release zu ignorieren.

Grüße

Adrian

> -----Original Message-----
> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On Behalf
> Of mail at adrianschmutzler.de
> Sent: Sonntag, 10. Juni 2018 13:08
> To: 'Christian Dresel' <fff at chrisi01.de>; franken-dev at freifunk.net
> Subject: RE: [PATCH 2/2] Allow initial configuration from Ethernet
> 
> Okay.
> 
> Es wäre wohl am einfachsten, dann tatsächlich den cp hoodfile hoodfilecopy
> in ein if gatewayavailable einzupacken, dann brauchen wir die Variable von
> Tim gar nicht, oder?
> 
> Ich würde nur noch überlegen, ob man gatewayavailable am anfang einmal
> auswertet und in eine variable schreibt oder das an mehreren stellen hat mit
> dem risiko, dass sich die situation während des skriptes ändert.
> 
> Grüße
> 
> Adrian
> 
> > -----Original Message-----
> > From: Christian Dresel [mailto:fff at chrisi01.de]
> > Sent: Sonntag, 10. Juni 2018 12:58
> > To: mail at adrianschmutzler.de; franken-dev at freifunk.net
> > Subject: Re: [PATCH 2/2] Allow initial configuration from Ethernet
> >
> >
> >
> > On 10.06.2018 12:55, mail at adrianschmutzler.de wrote:
> > > Hallo Christian,
> > >
> > > normal wird zuerst cp hoodfile hoodfilecopy gemacht und danach (im
> > nächsten Durchlauf der configurehood) der w2config aktiviert.
> >
> > es geht um einme Ethernetverbindung, die Router 1 und Router 2 sind in
> > meinen Beispiel per Kabel verbunden und hängen nur per WLAN an Router
> > 0 (Hassfurt Situation)
> >
> > mfg
> >
> > Christian
> >
> > >
> > > Bei letzterem IST ein vorhandenes Gateway eine Bedingung.
> > >
> > > Ein Problem gibt es also nur, wenn die Gateway-Verbindung verloren
> geht.
> > Dann wird auch das Hoodfilecopy wieder gelöscht.
> > >
> > > Sollte das das Problem nicht lösen?
> > >
> > > Grüße
> > >
> > > Adrian
> > >
> > >> -----Original Message-----
> > >> From: Christian Dresel [mailto:fff at chrisi01.de]
> > >> Sent: Sonntag, 10. Juni 2018 12:42
> > >> To: mail at adrianschmutzler.de; franken-dev at freifunk.net
> > >> Subject: Re: [PATCH 2/2] Allow initial configuration from Ethernet
> > >>
> > >> hi
> > >>
> > >> On 10.06.2018 12:38, mail at adrianschmutzler.de wrote:
> > >>> Deshalb hatte ich den sleep 30 da mal reingeworfen.
> > >>>
> > >>> Wenn kein Gateway verfügbar ist, wird auch auch die hoodfilecopy
> > >> gelöscht und dann passiert 30 sec. nichts.
> > >>>
> > >>> Danach wird erst versucht, über das Netzwerk ein Hoodfile zu
> > >>> bekommen
> > >> und dann haben alle anderen ohne Gateway ihres bereits gelöscht.
> > >>>
> > >>> Ist zwar eine unerotische Lösung mit sleep, sollte aber bei 30
> > >>> Sekunden
> > >> zumindest funktionieren, oder?
> > >>
> > >> theoretisch ja...
> > >>
> > >> Wenn aber z.b. ein Router in der Kette neu gestartet wird erreicht
> > >> er keinen NTP Server, hat eine falsche Uhrzeit und läuft dann
> > >> zeitlich "dran vorbei" an deine 30sek. Sich auf eine unsichere
> > >> Uhrzeit zu verlassen halte ich zumindest für etwas gefährlich.
> > >>
> > >> Wie ich bereits angemerkt habe, wäre die Lösung ganz einfach:
> > >> Das Hoodfile darf nur ins www-root kopiert werden wenn auch ein
> > >> Gateway da ist. Wenn es dann veraltet ist, ist es kein Problem weil
> > >> im nächsten durchlauf wird es ganz sicher vom Gateway geholt wo
> > >> immer das aktuelle legen muss. Es muss nur sichergestellt werden,
> > >> das eben dieses Gateway auch erreichbar ist und nicht ein Hoodfile
> > >> im Kreis wandert das KEIN Gateway erreichen kann.
> > >>
> > >> Daher ein if isGatewayAvailable ; then um das cp "$hoodfile"
> > >> "$hoodfilecopy" und schon sollte es sich lösen (glaub ich).
> > >>
> > >> mfg
> > >>
> > >> Christian
> > >>
> > >>>
> > >>> Grüße
> > >>>
> > >>> Adrian
> > >>>
> > >>>> -----Original Message-----
> > >>>> From: franken-dev [mailto:franken-dev-bounces at freifunk.net] On
> > >> Behalf
> > >>>> Of Christian Dresel
> > >>>> Sent: Sonntag, 10. Juni 2018 11:52
> > >>>> To: Fabian Bläse <fabian at blaese.de>; franken-dev at freifunk.net
> > >>>> Subject: Re: [PATCH 2/2] Allow initial configuration from
> > >>>> Ethernet
> > >>>>
> > >>>> Hi
> > >>>>
> > >>>> mir ist noch ein Problem aufgefallen das auftreten kann:
> > >>>>
> > >>>> Konstellation:
> > >>>> Router 0 UPLINK
> > >>>> Router 1 per WiFiMesh an Router 0 Router 2 per Ethernet an Router
> > >>>> 1
> > >>>>
> > >>>> Ablauf:
> > >>>>
> > >>>> Hoodfile wird geändert mit neue MeshParameter
> > >>>>
> > >>>> Router 0 ändert Meshparameter, damit von Router 1 nicht mehr
> > >>>> erreichbar
> > >>>>
> > >>>> Router 1
> > >>>> bietet Hoodfile mit alten Meshparameter an
> > >>>>
> > >>>> Router 2 (per Ethernet angebunden an Router 1) (Kein Gateway da
> > >>>> Router 0 Meshparameter geändert) startet Script löscht Zeile 15
> > >>>> Hoodfile Zeile 81 kein Internet Zeile 88 holt Zeile 104 von
> > >>>> Ethernet alte Hoodfile von Router 1 bietet diese Hoodfile an
> > >>>> beendet Script
> > >>>>
> > >>>> Router 1
> > >>>> startet Script
> > >>>> löscht Zeile 15 Hoodfile
> > >>>> Zeile 81 kein Internet
> > >>>> Zeile 88
> > >>>> holt Zeile 104 von Ethernet alte Hoodfile von Router 2 bietet
> > >>>> diese Hoodfile an beendet Script
> > >>>>
> > >>>> Router 2 (per Ethernet angebunden an Router 1) Kein Gateway
> > >>>> startet Script löscht Zeile 15 Hoodfile Zeile 81 kein Internet
> > >>>> Zeile 88 holt Zeile 104 von Ethernet kaputte Hoodfile von Router
> > >>>> 1 bietet diese Hoodfile an beendet Script
> > >>>>
> > >>>> [..........]
> > >>>>
> > >>>> wir hätten wieder nahzeu das selbe Problem wie in Hassfurt.
> > >>>>
> > >>>> In meinen Augen wäre die einfachste Lösung um die Zeile:
> > >>>>
> > >>>> cp "$hoodfile" "$hoodfilecopy"
> > >>>> (müsste mit allen Patches dann Zeile 218 sein)
> > >>>>
> > >>>> ein if isGatewayAvailable ; then
> > >>>>
> > >>>> fi
> > >>>>
> > >>>> herumlegen.
> > >>>>
> > >>>> Ich glaube das wurde gestern auch schon mal genannt, da aber
> > >>>> gestern nicht alle anwesend waren die aktuell mitdiskutieren und
> > >>>> ich heute morgen auch drüber gestolpert bin, will ich das hier
> > >>>> nochmal
> > erwähnen.
> > >>>>
> > >>>> mfg
> > >>>>
> > >>>> Christian
> > >>>>
> > >>>>
> > >>>>
> > >>>> On 10.06.2018 09:07, Christian Dresel wrote:
> > >>>>> hi
> > >>>>>
> > >>>>> Ok ich glaub ich habs jetzt verstanden (man muss da echt 3x im
> > >>>>> Dreieck
> > >>>>> denken...):
> > >>>>>
> > >>>>> Der Fehler von der Alpha war, das Ethernet auch vor Gateway
> > >>>>> bevorzugt
> > >>>> wurde.
> > >>>>>
> > >>>>>
> > >>>>
> > >>
> > https://github.com/FreifunkFranken/firmware/blob/master/src/packages/
> > >>>> f
> > >>>>> ff/fff-hoods/files/usr/sbin/configurehood
> > >>>>> Ab Zeile 143 (speziell 165 beschreibt das Problem dann
> > >>>>> wunderbar) wo er ja nur rein geht, wenn eh schon ein Gateway da
> > >>>>> ist. Deshalb konnten alte Hoodfiles sich im Kreis drehen da
> > >>>>> Ethernet das Gateway
> > >>>> "überschrieben" hat.
> > >>>>>
> > >>>>> Dein Patch holt die Hoodfile nur dann per Ethernet, wenn kein
> > >>>>> Gateway mehr da ist. Selbst wenn diese veraltet sein sollte,
> > >>>>> wird im nächsten durchlauf, wo das Gateway dann erreichbar ist,
> > >>>>> die Hoodfile vom Gateway geholt und dann auch richtig aktualisiert.
> > >>>>>
> > >>>>> Somit sieht die Logik für mich schlüssig aus
> > >>>>>
> > >>>>> Reviewed-by: Christian Dresel <fff at chrisi01.de>
> > >>>>>
> > >>>>> Expliziet anmerken möchte ich noch, das ich das ganze nicht
> > >>>>> getestet habe sondern nur im Kopf durchgespielt. Weitere
> > >>>>> Reviewes (auf alles was ich heute reviewed habe) wären mir daher
> sehr recht.
> > >>>>>
> > >>>>> mfg
> > >>>>>
> > >>>>> Christian
> > >>>>>
> > >>>>> On 09.06.2018 16:51, Fabian Bläse wrote:
> > >>>>>> Signed-off-by: Fabian Bläse <fabian at blaese.de>
> > >>>>>> ---
> > >>>>>>  .../fff-hoods/files/usr/lib/functions/fff/hoodfile  | 21
> > >>>> +++++++++++++++++++++
> > >>>>>>  .../fff/fff-hoods/files/usr/sbin/configurehood      |  2 +-
> > >>>>>>  2 files changed, 22 insertions(+), 1 deletion(-)
> > >>>>>>
> > >>>>>> diff --git
> > >>>>>> a/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfi
> > >>>>>> le
> > >>>>>> b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfi
> > >>>>>> le
> > >>>>>> index 62487f9..6c50737 100644
> > >>>>>> ---
> > >>>>>> a/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/hoodfi
> > >>>>>> le
> > >>>>>> +++ b/src/packages/fff/fff-hoods/files/usr/lib/functions/fff/ho
> > >>>>>> +++ od
> > >>>>>> +++ fi
> > >>>>>> +++ le
> > >>>>>> @@ -56,6 +56,27 @@ getWirelessHoodfile() {
> > >>>>>>      fi
> > >>>>>>  }
> > >>>>>>
> > >>>>>> +getEthernetHoodfile() {
> > >>>>>> +    if [ $# != 1 ]
> > >>>>>> +       then
> > >>>>>> +               echo "Usage: getEthernetHoodfile <download-location>"
> > >>>>>> +               return 1
> > >>>>>> +       fi
> > >>>>>> +    file=$1
> > >>>>>> +
> > >>>>>> +    echo "Trying to get hoodfile from ethernet neighbor..."
> > >>>>>> +
> > >>>>>> +    ethmesh_dev=$(uci -q get network.ethmesh.ifname)
> > >>>>>> +    neighbor_addrs=$(ping6 -c2 ff02::1%${ethmesh_dev} | grep
> > >>>>>> + seq
> > >>>>>> + | cut -d " " -f4 | sed s/.$//g | sort | uniq)
> > >>>>>> +
> > >>>>>> +    for addr in $neighbor_addrs; do
> > >>>>>> +        wget -T2 -t1 -qO "$file"
> > >>>> "http://[${addr}%${ethmesh_dev}]:2342/keyxchangev2data" &&
> > return 0
> > >>>>>> +    done
> > >>>>>> +
> > >>>>>> +    # got no hoodfile
> > >>>>>> +    return 1
> > >>>>>> +}
> > >>>>>> +
> > >>>>>>  getGatewayHoodfile() {
> > >>>>>>      if [ $# != 1 ]
> > >>>>>>  	then
> > >>>>>> diff --git
> > >>>>>> a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> > >>>>>> b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> > >>>>>> index aee20e5..282e21b 100755
> > >>>>>> --- a/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> > >>>>>> +++ b/src/packages/fff/fff-hoods/files/usr/sbin/configurehood
> > >>>>>> @@ -101,7 +101,7 @@ else
> > >>>>>>
> > >>>>>>  			sleep 30 # Wait for the config AP, which may
> > be
> > >>>> created at the
> > >>>>>> same time as this script has started
> > >>>>>>
> > >>>>>> -			getWirelessHoodfile "$hoodfile"
> > >>>>>> +			getEthernetHoodfile "$hoodfile" ||
> > >>>> getWirelessHoodfile "$hoodfile"
> > >>>>>>
> > >>>>>>  			#UPLINK: Set up uplink data on first contact:
> > >>>>>>  			if [ -s /tmp/keyxchangev2data ]; then
> > >>>>>>
> > >>>>>
> > >>>
> > >>>
> > >
> > >
> 




Mehr Informationen über die Mailingliste franken-dev