summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--contrib/package/freifunk-watchdog/Makefile2
-rwxr-xr-xcontrib/package/freifunk-watchdog/files/freifunk-watchdog.init17
-rw-r--r--contrib/package/freifunk-watchdog/src/watchdog.c62
3 files changed, 45 insertions, 36 deletions
diff --git a/contrib/package/freifunk-watchdog/Makefile b/contrib/package/freifunk-watchdog/Makefile
index 439e0478c5..e4cb550f6c 100644
--- a/contrib/package/freifunk-watchdog/Makefile
+++ b/contrib/package/freifunk-watchdog/Makefile
@@ -8,7 +8,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=freifunk-watchdog
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
PKG_BUILD_DEPENDS := uci
diff --git a/contrib/package/freifunk-watchdog/files/freifunk-watchdog.init b/contrib/package/freifunk-watchdog/files/freifunk-watchdog.init
index 1cce46b4af..1f87bf744f 100755
--- a/contrib/package/freifunk-watchdog/files/freifunk-watchdog.init
+++ b/contrib/package/freifunk-watchdog/files/freifunk-watchdog.init
@@ -6,15 +6,20 @@ BIN=/usr/sbin/ffwatchd
boot()
{
- if ! grep -q "$BIN" /etc/crontabs/root 2>/dev/null; then
- echo "* * * * * $BIN running || /etc/init.d/freifunk-watchdog restart" >> /etc/crontabs/root
- fi
+ # If watchdog service is enabled, install cronjob, create device node and start daemon
+ if /etc/init.d/freifunk-watchdog enabled 2>/dev/null; then
+ if ! grep -q "$BIN" /etc/crontabs/root 2>/dev/null; then
+ echo "* * * * * $BIN running || /etc/init.d/freifunk-watchdog restart" >> /etc/crontabs/root
+ fi
- if lsmod | grep -q softdog; then
mknod /dev/watchdog c 10 130
- fi
- start
+ start
+
+ # If service is disabled, find and remove related cronjob
+ elif grep -q "$BIN" /etc/crontabs/root 2>/dev/null; then
+ sed -i -e "\\'$BIN'd" /etc/crontabs/root
+ fi
}
start()
diff --git a/contrib/package/freifunk-watchdog/src/watchdog.c b/contrib/package/freifunk-watchdog/src/watchdog.c
index 7bbb7c7ab1..b5a573d49e 100644
--- a/contrib/package/freifunk-watchdog/src/watchdog.c
+++ b/contrib/package/freifunk-watchdog/src/watchdog.c
@@ -205,44 +205,48 @@ static void load_wifi_uci_add_iface(const char *section, struct uci_itr_ctx *itr
const char *ucitmp;
int val = 0;
- if( (t = (wifi_tuple_t *)malloc(sizeof(wifi_tuple_t))) != NULL )
+ ucitmp = ucix_get_option(itr->ctx, "wireless", section, "mode");
+ if( ucitmp && !strncmp(ucitmp, "adhoc", 5) )
{
- ucitmp = ucix_get_option(itr->ctx, "wireless", section, "ifname");
- if(ucitmp)
+ if( (t = (wifi_tuple_t *)malloc(sizeof(wifi_tuple_t))) != NULL )
{
- strncpy(t->ifname, ucitmp, sizeof(t->ifname));
- val++;
- }
-
- ucitmp = ucix_get_option(itr->ctx, "wireless", section, "bssid");
- if(ucitmp)
- {
- strncpy(t->bssid, ucitmp, sizeof(t->bssid));
- val++;
- }
+ ucitmp = ucix_get_option(itr->ctx, "wireless", section, "ifname");
+ if(ucitmp)
+ {
+ strncpy(t->ifname, ucitmp, sizeof(t->ifname));
+ val++;
+ }
- ucitmp = ucix_get_option(itr->ctx, "wireless", section, "device");
- if(ucitmp)
- {
- ucitmp = ucix_get_option(itr->ctx, "wireless", ucitmp, "channel");
+ ucitmp = ucix_get_option(itr->ctx, "wireless", section, "bssid");
if(ucitmp)
{
- t->channel = atoi(ucitmp);
+ strncpy(t->bssid, ucitmp, sizeof(t->bssid));
val++;
}
- }
- if( val == 3 )
- {
- syslog(LOG_INFO, "Monitoring %s: bssid=%s channel=%d",
- t->ifname, t->bssid, t->channel);
+ ucitmp = ucix_get_option(itr->ctx, "wireless", section, "device");
+ if(ucitmp)
+ {
+ ucitmp = ucix_get_option(itr->ctx, "wireless", ucitmp, "channel");
+ if(ucitmp)
+ {
+ t->channel = atoi(ucitmp);
+ val++;
+ }
+ }
- t->next = itr->list;
- itr->list = t;
- }
- else
- {
- free(t);
+ if( val == 3 )
+ {
+ syslog(LOG_INFO, "Monitoring %s: bssid=%s channel=%d",
+ t->ifname, t->bssid, t->channel);
+
+ t->next = itr->list;
+ itr->list = t;
+ }
+ else
+ {
+ free(t);
+ }
}
}
}