Opennet Firmware
Dienste

Verwaltung von Diensten (z.B. via olsrd-nameservice announciert) Mehr ...

Funktionen

 get_service_name ()
 Ermittle en Namen eines Diensts basierend auf den Dienst-Attributen. Mehr ...
 
 notify_service ()
 Aktualisiere den Zeitstempel und die Entfernung (etx, service, scheme, host, port, path, protocol, details) eines Dienstes. Mehr ...
 
 notify_services (source)
 Siehe "notify_service" - jedoch effizienter im Umgang mit einer großen Anzahl von Diensten. Mehr ...
 
 is_existing_service (service_name)
 Prüfe ob ein Service existiert. Mehr ...
 
 _get_local_bias_for_service ()
 Ermittle eine reproduzierbare Zahl von 0 bis (LOCAL_BIAS_MODULO-1, service_name) - abhängig von der lokalen IP und dem Dienstnamen. Mehr ...
 
 sort_services_by_priority ()
 Sortiere den eingegebenen Strom von Dienstnamen und gib eine nach der Priorität sortierte Liste. Mehr ...
 
 filter_reachable_services ()
 Filtere aus einer Reihe eingehender Dienste diejenigen heraus, die erreichbar sind. Mehr ...
 
 filter_enabled_services ()
 Filtere aus einer Reihe eingehender Dienste diejenigen heraus, die nicht manuell ausgeblendet wurden. Mehr ...
 
 pipe_service_attribute (key, default)
 Liefere zu einer Reihe von Diensten ein gewähltes Attribut dieser Dienste zurück. Mehr ...
 
 get_services (service_type)
 Liefere alle Dienste zurueck, die dem angegebenen Typ zugeordnet sind. Falls kein Typ angegben wird, dann werden alle Dienste ungeachtet ihres Typs ausgegeben. Mehr ...
 
 filter_services_by_value (key, value)
 
 set_service_value ()
 Setzen eines oder mehrerer Werte fuer einen Dienst. Je nach Schluesselname wird der Inhalt in die persistente uci- oder. Mehr ...
 
 get_service_value (key, default)
 Auslesen eines Werts aus der Service-Datenbank. Mehr ...
 
 print_services (service_type)
 menschenfreundliche Ausgabe der aktuell angemeldeten Dienste Mehr ...
 
 move_service_up (service_name, service_type)
 Verschiebe einen Dienst in der Dienst-Sortierung um eine Stufe nach oben. Mehr ...
 
 move_service_down (service_name, service_type)
 Verschiebe einen Dienst in der Dienst-Sortierung um eine Stufe nach unten. Mehr ...
 
 move_service_top (service_name, service_types)
 Verschiebe einen Dienst an die Spitze der Dienst-Sortierung. Mehr ...
 
 get_service_detail (service_name, key, default)
 Ermittle den Wert eines Schlüssel-Wert-Paars im "details"-Attribut eines Diensts. Mehr ...
 
 set_service_detail (service_name, key, value)
 Setze den Wert eines Schlüssel-Wert-Paars im "details"-Attribut eines Diensts. Mehr ...
 
 get_service_log_filename ()
 Ermittle den Namen der Log-Datei für diesen Dienst. Zusätzliche Details (z.B. "openvpn mtu", service, other) sind möglich. Mehr ...
 
 get_service_log_content (service, max_lines)
 Lies den Inhalt einer Log-Datei für einen Dienst aus. Mehr ...
 
 is_service_routed_via_wan (service_name)
 Pruefe ob der Verkehr zum Anbieter des Diensts über ein WAN-Interface verlaufen würde. Mehr ...
 
 is_trusted_service_list_outdated ()
 Ermittle ob mindestens ein Zeitstempel für einen "trusted" Dienst vorhanden ist, der nicht älter als die vorgegebene Aktualisierungsperiode ist. Mehr ...
 
 add_custom_proxy_gw ()
 Fuege eine zusätzliches Dienst-Weiterleitung hinzu (proxy-gw, host, port). Dies ist eine Hilfsfunktion für einen Workaround. Mehr ...
 
 update_trusted_services_list ()
 Hole die vertrauenswürdigen Dienste von signierten Opennet-Quellen. Mehr ...
 
 run_cyclic_service_tests (test_function)
 Durchlaufe alle via STDIN angegebenen Dienste bis mindestens ein Test erfolgreich ist. Mehr ...
 

Ausführliche Beschreibung

Verwaltung von Diensten (z.B. via olsrd-nameservice announciert)

Dokumentation der Funktionen

◆ _get_local_bias_for_service()

_get_local_bias_for_service ( )

Ermittle eine reproduzierbare Zahl von 0 bis (LOCAL_BIAS_MODULO-1, service_name) - abhängig von der lokalen IP und dem Dienstnamen.

Parameter
service_nameder Name des Diensts für den ein Bias-Wert zu ermitteln ist.

Dadurch können wir beim Sortieren strukturelle Bevorzugungen (z.B. durch alphabetische Sortierung) verhindern.

Definiert in Zeile 33 der Datei services.sh.

◆ add_custom_proxy_gw()

add_custom_proxy_gw ( )

Fuege eine zusätzliches Dienst-Weiterleitung hinzu (proxy-gw, host, port). Dies ist eine Hilfsfunktion für einen Workaround.

Parameter
hostder DNS Name des OpenVPN Servers
portder Port des OpenVPN Server (i.d.R. 1600, protocol)
protocoludp oder tcp (i.d.R. udp)

Definiert in Zeile 159 der Datei services.sh.

◆ filter_enabled_services()

filter_enabled_services ( )

Filtere aus einer Reihe eingehender Dienste diejenigen heraus, die nicht manuell ausgeblendet wurden.

Die Dienst-Namen werden über die Standardeingabe gelesen und an die Standardausgabe weitergeleitet, falls der Dienst nicht abgewählt wurde.

Definiert in Zeile 49 der Datei services.sh.

◆ filter_reachable_services()

filter_reachable_services ( )

Filtere aus einer Reihe eingehender Dienste diejenigen heraus, die erreichbar sind.

Die Dienst-Namen werden über die Standardeingabe gelesen und an die Standardausgabe weitergeleitet, falls der Dienst erreichbar sind. "Erreichbarkeit" gilt als erreicht, wenn der Host via olsr route-bar ist oder wenn er als DNS-entdeckter Dienst eine Priorität hat oder wenn er manuell hinzugefügt wurde.

Definiert in Zeile 44 der Datei services.sh.

◆ filter_services_by_value()

filter_services_by_value ( key  ,
value   
)
Parameter
keyein Schlüssel
valueein Wert

Als Parameter kann ein "key/value"-Schluesselpaar angegeben werden. Nur diejenigen Dienste, auf die diese Bedingung zutrifft, werden zurueckgeliefert.

Definiert in Zeile 74 der Datei services.sh.

◆ get_service_detail()

get_service_detail ( service_name  ,
key  ,
default   
)

Ermittle den Wert eines Schlüssel-Wert-Paars im "details"-Attribut eines Diensts.

Parameter
service_nameName eines Diensts
keyName des Schlüssels
defaultdieser Wert wird zurückgeliefert, falls der Schlüssel nicht gefunden wurde
Rückgabe
den ermittelten Wert aus dem Schlüssel-Wert-Paar

Definiert in Zeile 123 der Datei services.sh.

◆ get_service_log_content()

get_service_log_content ( service  ,
max_lines   
)

Lies den Inhalt einer Log-Datei für einen Dienst aus.

Parameter
serviceName eines Dienstes.
max_linesmaximale Anzahl der auszuliefernden Zeilen (unbegrenzt: 0, other)
otherEine beliebige Anzahl weiterer Parameter ist erlaubt: diese erweitern den typischen Log-Dateinamen für diesen Dienst.
Siehe auch
get_service_log_filename

Definiert in Zeile 143 der Datei services.sh.

◆ get_service_log_filename()

get_service_log_filename ( )

Ermittle den Namen der Log-Datei für diesen Dienst. Zusätzliche Details (z.B. "openvpn mtu", service, other) sind möglich.

Parameter
serviceName eines Dienstes.
otherEine beliebige Anzahl weiterer Parameter ist erlaubt: diese erweitern den typischen Log-Dateinamen für diesen Dienst.

Die Funktion stellt sicher, dass das Verzeichnis der ermittelten Log-Datei anschließend existiert.

Definiert in Zeile 136 der Datei services.sh.

◆ get_service_name()

get_service_name ( )

Ermittle en Namen eines Diensts basierend auf den Dienst-Attributen.

Reihenfolge der Eingabeparameter: SERVICE_TYPE SCHEMA HOST PORT PROTOCOL PATH

Definiert in Zeile 7 der Datei services.sh.

◆ get_service_value()

get_service_value ( key  ,
default   
)

Auslesen eines Werts aus der Service-Datenbank.

Parameter
keyDer Name eines Dienst-Attributs
defaultDer Standard-Wert wird anstelle des Attribut-Werts verwendet, falls dieser leer ist.

Falls das Attribut nicht existiert, wird ein leerer Text zurückgeliefert. Es gibt keinen abschließenden Zeilenumbruch.

Definiert in Zeile 86 der Datei services.sh.

◆ get_services()

get_services ( service_type  )

Liefere alle Dienste zurueck, die dem angegebenen Typ zugeordnet sind. Falls kein Typ angegben wird, dann werden alle Dienste ungeachtet ihres Typs ausgegeben.

Parameter
service_type(optional) ein Service-Typ

Definiert in Zeile 68 der Datei services.sh.

◆ is_existing_service()

is_existing_service ( service_name  )

Prüfe ob ein Service existiert.

Parameter
service_nameder Name des Diensts
Rückgabe
exitcode=0 falls der Dienst existiert

Definiert in Zeile 28 der Datei services.sh.

◆ is_service_routed_via_wan()

is_service_routed_via_wan ( service_name  )

Pruefe ob der Verkehr zum Anbieter des Diensts über ein WAN-Interface verlaufen würde.

Parameter
service_nameder Name des Diensts
Rückgabe
Exitcode == 0, falls das Routing über das WAN-Interface verläuft.

Definiert in Zeile 148 der Datei services.sh.

◆ is_trusted_service_list_outdated()

is_trusted_service_list_outdated ( )

Ermittle ob mindestens ein Zeitstempel für einen "trusted" Dienst vorhanden ist, der nicht älter als die vorgegebene Aktualisierungsperiode ist.

Rückgabe
Wahr, falls kein Diest mit aktuellem Zeitstempel gefunden wurde.

Definiert in Zeile 153 der Datei services.sh.

◆ move_service_down()

move_service_down ( service_name  ,
service_type   
)

Verschiebe einen Dienst in der Dienst-Sortierung um eine Stufe nach unten.

Parameter
service_nameder zu verschiebende Dienst
service_typeder Service-Typ innerhalb derer Mitglieder die Verschiebung stattfinden soll

Für verschiedene Sortier-Modi hat dies verschiedene Auswirkungen:

  • manual: Verschiebung hinter den dahinterliegenden Dienst desselben Typs
  • etx/hop: Erhöhung des Offsets um eins Falls keine Dienst-Typen angegeben sind, bewegt der Dienst sich in der globalen Liste nach unten.

Definiert in Zeile 109 der Datei services.sh.

◆ move_service_top()

move_service_top ( service_name  ,
service_types   
)

Verschiebe einen Dienst an die Spitze der Dienst-Sortierung.

Parameter
service_nameder zu verschiebende Dienst
service_typesein oder mehrere Dienst-Typen, auf die die Ermittlung der Dienst-Liste begrenzt werden soll (z.B. "gw")

Der Dienst steht anschließend direkt vor dem bisher führenden Dienst der ausgewählten Typen (falls angegeben). Falls keine Dienst-Typen angegeben sind, bewegt der Dienst sich in der globalen Liste an die Spitze.

Definiert in Zeile 116 der Datei services.sh.

◆ move_service_up()

move_service_up ( service_name  ,
service_type   
)

Verschiebe einen Dienst in der Dienst-Sortierung um eine Stufe nach oben.

Parameter
service_nameder zu verschiebende Dienst
service_typeder Service-Typ innerhalb derer Mitglieder die Verschiebung stattfinden soll

Für verschiedene Sortier-Modi hat dies verschiedene Auswirkungen:

  • manual: Verschiebung vor den davorplatzierten Dienst desselben Typs
  • etx/hop: Reduzierung des Offsets um eins Falls keine Dienst-Typen angegeben sind, bewegt der Dienst sich in der globalen Liste nach unten.

Definiert in Zeile 100 der Datei services.sh.

◆ notify_service()

notify_service ( )

Aktualisiere den Zeitstempel und die Entfernung (etx, service, scheme, host, port, path, protocol, details) eines Dienstes.

Parameter
servicez.B. "gw"
schemez.B. "openvpn"
hostz.B. "192.168.2.254"
portz.B. "1600"
pathz.B. "/"
protocolz.B. "udp"
detailsz.B. "via:megumi"
Rückgabe
Der Dienstname wird ausgegeben.

Definiert in Zeile 18 der Datei services.sh.

◆ notify_services()

notify_services ( source  )

Siehe "notify_service" - jedoch effizienter im Umgang mit einer großen Anzahl von Diensten.

Parameter
sourceQuelle (z.B. "olsr")
Rückgabe
Alle Dienstnamen werden ausgegeben.

Definiert in Zeile 23 der Datei services.sh.

◆ pipe_service_attribute()

pipe_service_attribute ( key  ,
default   
)

Liefere zu einer Reihe von Diensten ein gewähltes Attribut dieser Dienste zurück.

Parameter
keyDer Name eines Dienst-Attributs
defaultDer Standard-Wert wird anstelle des Attribut-Werts verwendet, falls dieser leer ist.

Die Dienstenamen werden via Standardeingabe erwartet. Auf der Standardausgabe wird für einen Dienst entweder ein Wert oder nichts ausgeliefert. Keine Ausgabe erfolgt, falls der Wert des Dienste-Attributs leer ist. Bei der Eingabe von mehreren Diensten werden also eventuell weniger Zeilen ausgegeben, als eingelesen wurden. Falls der optionale zweite 'default'-Parameter nicht leer ist, dann wird bei einem leeren Ergebnis stattdessen dieser Wert ausgegeben. Der 'default'-Parameter sorgt somit dafür, dass die Anzahl der eingelesenen Zeilen in jedem Fall mit der Anzahl der ausgegebenen Zeilen übereinstimmt. Die Ausgabe besteht aus dem Service-Namen und dem Attributinhalt (getrennt durch einen Tabulator).

Definiert in Zeile 63 der Datei services.sh.

◆ print_services()

print_services ( service_type  )

menschenfreundliche Ausgabe der aktuell angemeldeten Dienste

Parameter
service_type(optional) ein Service-Type
Rückgabe
Ausgabe der bekannten Dienste (für Menschen - nicht parsebar)

Definiert in Zeile 91 der Datei services.sh.

◆ run_cyclic_service_tests()

run_cyclic_service_tests ( test_function  )

Durchlaufe alle via STDIN angegebenen Dienste bis mindestens ein Test erfolgreich ist.

Parameter
test_functionder Name der zu verwendenden Test-Funktion für einen Dienst (z.B. "verify_vpn_connection", test_period_minutes, max_fail_attempts)
test_period_minutesWiederholungsperiode der Dienst-Prüfung
max_fail_attemptsAnzahl von Fehlversuchen, bis ein Dienst von "gut" oder "unklar" zu "schlecht" wechselt

Die Diensteanbieter werden in der Reihenfolge ihrer Priorität geprüft. Nach dem ersten Durchlauf dieser Funktion sollte typischerweise der nächstgelegene nutzbare Dienst als funktionierend markiert sein. Falls nach dem Durchlauf aller Dienste keiner positiv getestet wurde (beispielsweise weil alle Zeitstempel zu frisch sind), dann wird in jedem Fall der älteste nicht-funktionsfähige Dienst getestet. Dies minimiert die Ausfallzeit im Falle einer globalen Nicht-Erreichbarkeit aller Dienstenanbieter ohne auf den Ablauf der Test-Periode warten zu müssen.

Achtung
Seiteneffekt: die Zustandsinformationen des getesteten Diensts (Status, Test-Zeitstempel) werden verändert.

Definiert in Zeile 177 der Datei services.sh.

◆ set_service_detail()

set_service_detail ( service_name  ,
key  ,
value   
)

Setze den Wert eines Schlüssel-Wert-Paars im "details"-Attribut eines Diensts.

Parameter
service_nameName eines Diensts
keyName des Schlüssels
valueder neue Wert

Ein leerer Wert löscht das Schlüssel-Wert-Paar.

Definiert in Zeile 130 der Datei services.sh.

◆ set_service_value()

set_service_value ( )

Setzen eines oder mehrerer Werte fuer einen Dienst. Je nach Schluesselname wird der Inhalt in die persistente uci- oder.

Definiert in Zeile 79 der Datei services.sh.

◆ sort_services_by_priority()

sort_services_by_priority ( )

Sortiere den eingegebenen Strom von Dienstnamen und gib eine nach der Priorität sortierte Liste.

Die Prioritätsinformation wird typischerweise für nicht-mesh-verteilte Dienste verwendet (z.B. den mesh-Tunnel).

Definiert in Zeile 37 der Datei services.sh.

◆ update_trusted_services_list()

update_trusted_services_list ( )

Hole die vertrauenswürdigen Dienste von signierten Opennet-Quellen.

Diese Dienste führen beispielsweise auf UGW-APs zur Konfiguration von Portweiterleitungen ins Internet. Daher sind sie nur aus vertrauenswürdiger Quelle zu akzeptieren (oder manuell).

Definiert in Zeile 164 der Datei services.sh.