ds-unlinkd
Change to English Version
Dieses Perl-Script trennt eine Verbindung des DStar-Gateways zu einem anderen
Gateway oder Reflektor auf der Basis unterschiedlicher Kriterien.
Kriterien fuer eine Trennung koennen sein:
-
Timeout nach lokalem Betrieb, wobei eine einzelne Station, die Baken aussendet
den Timer nicht triggert
-
ein lokaler Benutzer arbeitet mit Direktadressierung (nicht CQCQCQ wie es ueber
vernetzte Repeater sein sollte)
-
ein lokaler Benutzer arbeitet mit Area-Adressierung
Das Script kann ausserdem einen vordefinierten Default-Link aufbauen.
Der Aufbau wird nach einer konfigurierbaren Zeit nach letzter Aktivitaet aufgebaut.
Der Timer wird nicht durch eine einzelne Station getriggert, die Baken aussendet.
Area-Adressierung kann ignoriert werden wenn es lokal notwendig ist.
Das Script basiert auf den Ausgaben von DPlus in dessen Logfile.
Es wurde mit dem Logformat der DPlus Versionen 2.2c - 2.2f getestet.
Das Script laeuft als Daemon-Prozess.
Das Rufzeichen und die ID des Repeater-Mmoduls muessen in der Konfigurationsdatei
eingetragen werden.
Bei Einsatz von mehreren Repeater-Modulen koennen mehrere Instanzen des Scripts mit
unterschiedlichen Konfigurationsdateien gestartet werden.
Ein Beispielaufruf mit Rufzeichen und Modul-ID:
./ds-unlinkd /etc/ds-unlinkd-b.conf
&
Dieser Befehl startet ds-unlinkd mit der Konfigurationsdatei /etc/unlinkd-b.conf.
./ds-unlinkd -d
/etc/ds-unlinkd-b.conf
Dieser Befehl macht dasselbe gibt dabei aber Debug-Informationen auf den Bildschirm
und in ein Debug-Logfile im Verzeichnis /var/log aus.
Ein Beispielaufruf mit dem Standard-Konfigurationsfile /etc/ds-unlinkd.conf:
./ds-unlinkd &
Wenn der erste Parameter ein -d ist, wird der Debugmode eingeschaltet,
das Script gibt dann einige Informationen zu den verschiedenen Timern aus.
Der Kommandozeilenparameter -h oder -? an erster Stelle zeigt
eine kurze Hilfe an und beendet dann das Script.
Fuer diejenigen, die mit Linux nicht sehr vertraut sind:
Das "&" am Ende einer Kommandozeile veranlasst die Shell das Script in
einer eigenen neuen Shell im Hintergrund auszufuehren.
Dies ist notwendig, wenn das Script in einer Shell gestartet wird, die anschliessend
beendet werden soll, also z.B. in einer SSH-Session. Ohne dieses Zeichen wuerde der
Prozess mit dem Abschluss der aufrufenden Shell auch beendet.
In der Konfigurationsdatei muessen einige wenige Dinge konfiguriert werden:
-
der Timeout von lokalem Betrieb nach dem das Modul getrennt werden soll
-
díe Wartezeit nach lokalem Betrieb bis zum Aufbau eines Links
Hier ein Beispiel:
#-----------------------------------------------------------------------------
# Configuration Part:
#-----------------------------------------------------------------------------
#
# the BASE-Callsign of the repeater:
$RptrCall = "XX0XXX";
#
# the ID of the module that you want to unlink:
$Module = "B";
#
# idle timeout for local traffic (in minutes) until a link is unlinked
# (0 = never)
$LocalTimeout = 15;
#
# Waittime after local traffic until the defaultlink will be set up
again (in minutes)
# (0 = never)
$SetupWaittime = 10;
#
# beacon interval in minutes (standard beacon and defaultlink-announcement)
# (a value of 0 switches the beacons off)
$BeaconTimer = 0;
#
# beacon text sent if not linked (max 20 characters!)
# |12345678901234567890|
$BeaconText = "this is a sampletext";
#
# Number of maximum direct adressed frames from local stations before
unlink
# (0 = don't care)
$MaxDirAdrLoc = 2;
#
# Maximum number of remote frames until unlink
# (0 = don't care)
$MaxDirAdrRem = 10;
#
# allow area repeating when linked (1 = yes / 0 = no)
# "no" will treat area adressing like direct adressing
$AreaRep = 1;
#
#-----------------------------------------------------------------------------
# please change the following settings only if really necessary!
#-----------------------------------------------------------------------------
#
# path and name of the dplus-logfile
##$dplogfile = "/var/log/dplus.log";
#
# path and name of our logfile (switch off logging by using /dev/null)
##$logfile = "/var/log/ds-unlinkd-$Module.log";
#
#-----------------------------------------------------------------------------
# End of configuration part!
#-----------------------------------------------------------------------------
In folgendem File kann ein "Default-Link" festegelegt werden:
/dstar/tmp/defaultlink-?
wobei das "?" fuer die ID des Moduls steht, von dem ausgehend der Link aufgebaut werden soll.
Der Inhalt des Files muss ein Rufzeichen oder Reflektorname sein, aufgefuellt
mit Leerzeichen auf 7 Stellen, gefolgt von der Modul-ID an der 8. Stelle
und einem Linefeed.
Beipiele:
In meinem Fall habe ich ein File /dstar/tmp/defaultlink-b mit dem
Inhalt "REF006 D"
Dies verbindet mein Modul B mit REF006 Modul D.
Ein weiteres Kontroll-File ist
/dstar/tmp/ds-unlink-?-off
Beispiel:
/dstar/tmp/ds-unlink-b-off
Wenn dieses File existiert, wird das Script was das Modul "B" ueberwacht den Timeout
ignorieren und nicht trennen.
Zum Ablauf:
-
Wenn /dstar/tmp/ds-unlink-?-off existiert wird das Script nichts tun,
Timeouts werden ignoriert. Es kann so leicht zeitweise ausser Betrieb gesetzt werden ohne es zu beenden.
-
Wenn ein "Defaultlink" in /dstar/tmp/defaultlink-? definiert und aktuell aufgebaut ist,
tut das Script nichts, der gewuenschte Zustand ist erreicht.
-
Ist eine andere Verbindung aufgebaut als der Defaultlink, wird die Zeit nach dem letzten lokalen Betrieb
ueberwacht. Im Fall eines Timeouts wird der aktuelle Link getrennt.
Nach der definierten "SetupWaittime" wird der festgelegte Defaultlink dann wieder aufgebaut.
-
Ist kein Link aufgebaut - der letzte Benutzer hat manuell getrennt - ueberwacht das Script
lokalen Benutzerbetrieb und baut nach Ablauf der "SetupWaittime" den Defaultlink wieder auf.
Ich mag es nicht, wenn Links mitten in einem QSO aufgebaut werden und ggf. QSO miteinander gemischt
werden.
Defaultlinks koennen leicht gesetzt und geloescht werden, z.B. per Cron:
-
Wird das File was den Defaultlink definiert geloescht, laeuft der Link in einen Timeout und wird dann getrennt.
-
Wird ein neues File mit einem Defaultlink erzeugt, wird der Link nach der "SetupWaittime" aufgebaut,
also nur, wenn der Repeater ungenutzt ist, nicht waehrend eines QSOs.
-
Wird der Inhalt des Files, was den Defaultlink festlegt, geaendert, so wird der alte Link nach
Ablauf des Timeouts getrennt und der neue nach Ablauf der "SetupWaittime" aufgebaut.
- Das Script erzeugt bei Benutzerbetrieb ein File /tmp/no.beacon.
Dieses File kann genutzt werden um andere Tools zu steuern, z.B. das Aussenden von Baken und Zeitansagen waehrend eines QSOs zu verhindern.
Beipiel: Ich benutze dieses File um die Zeitansagen zur vollen Stunde bei QSO-Betrieb zu unterdruecken.
Dazu loescht ein Cron-Job das File "/tmp/no.beacon" jeweils 2 Minuten vor der vollen Stunden. Wenn das Zeitansage-Script
ein solches File findet bricht es ab, denn das ist ein Zeucehn dafuer, dass es in den letzten 2 Minuten Benutzerbetrieb gab.
Das Script kann 2 verschiedene Sprachbaken aussenden. Der Zeitabstand wird mit "BeaconTime" festgelegt,
dabei ist dies eine Zeit ohne Betrieb (lokal und remote) auf dem Repeater.
Der Name der auszusendenden Sprachbake richtet sich nach dem Linkstatus des Repeater-Moduls.
Bei meinem Gateway wird eine kurze Bake mit dem Rufzeichen "DB0MYK" ausgegeben wenn der Repeater nicht
verlinkt ist und eine laengere mit "DB0MYK verbunden mit Reflektor 6 delta" wenn der Defaultlink zu "REF006 D" besteht.
Diese Bake wird wie ueblich im DVTool-format unter folgenden Namen erwartet
- /dstar/dv/beacon.dvtool und
- /dstar/dv/defaultlink-?.dvtool
mit der Module-ID an Stelle von "?" (in Kleinschrift).
Das Script wertet das Logfile von DPlus aus und benutzt nur Interfaces, die dafuer von der DPlus-
Entwicklergruppe spezifziert wurden.
Das Script triggert die Timer nur bei Aussendungen, die wechselnde MyCalls haben.
Dies ist ein einfacher Versuch Bakensendungen zu ignorieren, was nicht funktionieren wird, wenn mehrere
Dauerbakensender auf dem Kanal aktiv sind.
Vielleicht hilft in dem Fall persoenliche Ansprache und der Appel an die Vernunft.
Weitere Aenderungen an der Konfigurationsdatei koennen notwendig sein wenn die DPlus-Installation
nicht standardmaessig ist.
Die Logfiles bekommen automatisch verschiedene Filenamen, die Modul-ID wird an den Basisnamen angehaengt.
Bitte nichts aendern, wenn man nicht sicher ist was das bewirkt!.
Man sollte nie dasselbe Logfile fuer mehrere Module benutzen und damit Instanzen des Scripts, das wird zu Fehlern fuehren!
Wer nur begrenzten Plattenspeicher zur Verfuegung hat kann das Loggen von dsunlinkd abschalten indem er konfiguriert:
$logfile="/dev/null";
Das Script muss NACH DPlus gestartet werden. Das kann man automatisieren indem man ein eigenes Startscript anlegt
oder das Startscript von DPlus modifiziert.
Ein Beispiel werde ich in einer naechsten Version nachreichen.
Das Script erzeugt ein Modul-abhaengiges PID-file /var/run/ds-unlinkd-<ID>.pid
was verwendet werden kann um es gezielt zu stoppen.
Das sollte alles Wichtige sein!
Bei Fragen oder Anmerkungen, Verbesserungsvorschlaegen etc. bitte einfach melden!
Danke all denen, die ihre Ideen eingebracht haben - bis nach Australien!
Hier der Download-Link:
http://download.prgm.org/dl5di-soft/dstar-tools/dstar-unlinkd/ds-unlinkd-latest.tgz
Diese Daemon-Version ersetzt das alte unlink-Script.
Wer von der Version aus updatet sollte das Loeschen des Aufrufs des alten Scripts in der Crontab nicht vergessen!
December 2009
73 de Hans-Juergen, DL5DI
Email: dl5di - at - prgm.org
Web: http://dl5di.prgm.org