Skip to content

Feature hoodselector

Zu Commit 58234d27

Was tut der Code?

Wenn Koordinaten gegeben sind und eine Hood für diese Koordinaten existiert aber kein Batman advanced GW in Reichweite ist...

		local geo_hood = gethood_by_geo(jhood, geo)
		-- Prüfe hood auf fehler
		if geo_hood ~= nil then
			io.stderr:write('Hole hood bei position\n')
			if get_gw_range() then
				io.stderr:write('Batman GWs in reichweite\n')

...dann setze die zu den Koordinaten passende Hood nicht. Stattdessen schaue ob ein anderer Freifunk Router in der Nähe ist und setze die Hood dieses Routers. Wenn das nicht erfolgreich ist, dann setze doch noch die Hood passend zu den gegebenen Koordinaten.

Was ist Ziel des Tests?

Ziel des Tests ist, festzustellen ob ein bereits auf eine Hood konfigurierter Router mit fest eingetragenen Koordinaten physikalisch an eine andere Position in einer anderen Hood gebracht wurde und dadurch keinen Kontakt mehr zur vorher konfigurierten Hood hat. Dieser Test führt im Erfolgsfall zur Rekonfiguration des Routers auf die neue Hood trotz der fest gesetzten alten Position. Im Anschluss kann ein Router auch seine Position automatisch korrigieren da er dann wieder Verbindung zum Internet hat.

Für welche Router ist dieser Test gedacht?

Dieser Test ist für reine Mesh-Router gedacht. VPN Router können in dem oben skizzierten Szenario ihre Position per Internet updaten und triggern im Anschluss daran eine Rekonfiguration.

Was für Seiteneffekte können auftreten?

  • Es tritt eine beliebige Störung auf in deren Folge der Batman advanced Gateway für einen oder mehrere Router nicht mehr sichtbar ist (Ausfall des Internets, schlechte Verbindung, Ausfall des Gateways selbst)
  • Folge: Alle Router führen eine Rekonfiguration durch und konfigurieren sich auf die Hood mit der BSSID ihres Nachbarn sofern diese von BSSID der aktuell gesetzten Hood abweicht. Normalerweise ist das nicht der Fall und es passiert nichts. Betreibt aber jemand innerhalb einer Hood einen Router, der auf eine andere Hood konfiguriert ist (an einer Hoodgrenze, zu Testzwecken oder aus Spaß), führt dies zu einem Dominoeffekt bei dem sich alle umliegenden Router auf die Hood dieses Testrouters konfigurieren.
  • Relevantes Beispiel: bei einer Vernetzungsdichte wie in Wittmund kann das relevante Folgen haben

Lösungsvorschlag

Der Fall, dass ein bereits konfigurierter Router in eine andere Hood getragen wird und dort nur per Mesh angebunden wird ohne dabei die Koordinaten des Routers zu ändern ist ein Spezialfall der auch durch manuelles Setzen der korrekten Koordinaten abgedeckt werden kann. Da der Code nicht seiteneffektfrei ist und ein Knotenbetreiber die Koordinaten sowieso manuell ändern sollte, wenn er seinen Router durch die Gegend trägt, schlage ich vor den Code zu entfernen.

Allgemein kann dieses Problemen meines Wissens nach gar nicht seiteneffektfrei durch Prüfen einer Batman advanced Metrik gelöst werden. Das Prüfen dieser Batman advanced Metrik hat in jedem Fall Seiteneffekte.

Zu Commit 88ed5e7a

Allgemein ist schwer absehbar, was das Programm tut, wenn die Methoden zur Auswahl einer Hood als Fallback die default hood zurückliefern. Dies sollte eine separate Methode tun, die dann aufgerufen wird, wenn alle anderen Konfigurationsversuche fehlgeschlagen sind. Dadurch lässt sich der Programmablauf sauber in drei Schritte (Geoposition->Fallback auf Scanning->Fallback auf Default Hood) gliedern.

Merge request reports