#define WDT_OK 0 #define WDT_REQUEST 1 #define WDT_ALREADY_REGISTERED -1 #define WDT_UNKNOWN_HANDLE -2 #define WDT_INVALID_TIMEOUT -3 #define WDT_RESOURCE_ERROR -4 /*-------------------------------------------------------------------------------------*\ * Kündigt das Starten einer Applikation an. * * name: null-terminierter Name des Prozesses (muß eindeutig sein) * timeout: Intervall in Sekunden, innerhalb dessen sich die Applikation mit demselben Namen * registrieren muß. * * returns: WDT_OK, wenn erfolgreich \*-------------------------------------------------------------------------------------*/ int watchdog_announce(char* name, int timeout); /*-------------------------------------------------------------------------------------*\ * Registriert einen Prozeß beim Watchdog * Der Default Timeout beträgt 20s, nach 10s wird die Applikation benachrichtigt (optional) * * name: null-terminierter Name des Prozesses (muß eindeutig sein) * * returns: > 0: handle für registrierten Prozeß, sonst Fehler \*-------------------------------------------------------------------------------------*/ int watchdog_register(char* name); /*-------------------------------------------------------------------------------------*\ * Liefert den Filehandle zum Watchdog-Handle zurück * * handle: Beim Register erhaltener Handle * returns: file handle \*-------------------------------------------------------------------------------------*/ int watchdog_get_fd(int handle); /*-------------------------------------------------------------------------------------*\ * Deregistriert einen Prozeß beim Watchdog * * handle: Beim Register erhaltener Handle * * returns: WDT_OK, wenn erfolgreich, sonst Fehler * * NOTE: Ein Prozeß muß sich per watchdog_release() abmelden, bevor er sich beendet, * anderenfalls wird ein Reboot ausgelöst! Dies gilt auch für den Fall, daß der * Prozeß von einem anderen Prozeß (gewollt) beendet wird. Hierfür ist ein * watchdog_release() im Signal-Handler vorzusehen. \*-------------------------------------------------------------------------------------*/ int watchdog_release(int handle); /*-------------------------------------------------------------------------------------*\ * Ändert den default Timeout für den registrierten Prozeß * * handle: Beim Register erhaltener Handle * timeout: neuer Timeout in Sekunden ab sofort (Maximum 40s) * * returns: WDT_OK, sonst Fehler * * NOTE: watchdog_settimeout() dient gleichzeitig als Trigger für den Watchdog \*-------------------------------------------------------------------------------------*/ int watchdog_settimeout(int handle, int timeout); /*-------------------------------------------------------------------------------------*\ * Triggert den Watchdog für den angegebenen Prozeß * * handle: Beim Register erhaltener Handle * * returns: WDT_OK, sonst Fehler \*-------------------------------------------------------------------------------------*/ int watchdog_trigger(int handle); /*-------------------------------------------------------------------------------------*\ * Blockiert, bis Watchdog neu getriggert werden muß * Nach Rückkehr aus der Funktion hat die Applikation noch die Häfte des gesetzten Timeouts * Zeit zum Zurücksetzen des Watchdogs. * * handle: Beim Register erhaltener Handle * * returns: WDT_OK, sonst Fehler \*-------------------------------------------------------------------------------------*/ int watchdog_wait(int handle); /*-------------------------------------------------------------------------------------*\ * Teilt mit, ob der Watchdog neu getriggert werden muß * Die Funktion blockiert nicht. * * handle: Beim Register erhaltener Handle * * returns: WDT_OK vor Ablauf der Hälfte des gesetzten Timeouts, ungleich WDT_OK danach \*-------------------------------------------------------------------------------------*/ int watchdog_poll(int handle);