diff --git a/batmand/Makefile b/batmand/Makefile index 77497ab..4f0e5e1 100644 --- a/batmand/Makefile +++ b/batmand/Makefile @@ -14,7 +14,7 @@ PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://git.open-mesh.org/batmand.git PKG_REV:=b67a7087b51d7a5e90d27ac39116d1f57257c86e PKG_VERSION:=1440 -PKG_RELEASE:=0 +PKG_RELEASE:=1 PKG_LICENSE:=GPL-2.0 PKG_SOURCE_VERSION:=$(PKG_REV) diff --git a/batmand/files/etc/init.d/batmand b/batmand/files/etc/init.d/batmand index add4ec8..8361e72 100644 --- a/batmand/files/etc/init.d/batmand +++ b/batmand/files/etc/init.d/batmand @@ -1,21 +1,39 @@ #!/bin/sh /etc/rc.common START=90 +USE_PROCD=1 -start () { - interface=$(uci get batmand.general.interface) +batmand_start() { + local config="$1" + local batman_args + local interface + local hnas + local gateway_class + local originator_interval + local preferred_gateway + local routing_class + local visualisation_srv + local local policy_routing_script + local disable_client_nat + local disable_aggregation + + [ "$config" = "general" ] || return 1 + + config_get interface "$config" interface if [ "$interface" = "" ]; then echo $1 Error, you must specify at least a network interface - exit + return 1 fi - hnas=$(uci get batmand.general.hna) - gateway_class=$(uci get batmand.general.gateway_class) - originator_interval=$(uci get batmand.general.originator_interval) - preferred_gateway=$(uci get batmand.general.preferred_gateway) - routing_class=$(uci get batmand.general.routing_class) - visualisation_srv=$(uci get batmand.general.visualisation_srv) - policy_routing_script=$(uci get batmand.general.policy_routing_script) - disable_client_nat=$(uci get batmand.general.disable_client_nat) - disable_aggregation=$(uci get batmand.general.disable_aggregation) + + config_get hnas "$config" hna + config_get gateway_class "$config" gateway_class + config_get originator_interval "$config" originator_interval + config_get preferred_gateway "$config" preferred_gateway + config_get routing_class "$config" routing_class + config_get visualisation_srv "$config" visualisation_srv + config_get policy_routing_script "$config" policy_routing_script + config_get disable_client_nat "$config" disable_client_nat + config_get disable_aggregation "$config" disable_aggregation + batman_args="" for hna in $hnas; do @@ -54,10 +72,20 @@ start () { batman_args=${batman_args}'--disable-aggregation ' fi - batman_args=${batman_args}$interface - batmand $batman_args >/dev/null 2>&1 + procd_open_instance "${config}" + procd_set_param command /usr/sbin/batmand + procd_append_param command --no-detach + procd_append_param command ${batman_args} + procd_append_param command ${interface} + procd_set_param netdev ${interface} + procd_close_instance } -stop () { - killall batmand +start_service() { + config_load "batmand" + config_foreach batmand_start batmand +} + +service_triggers() { + procd_add_reload_trigger "batmand" } diff --git a/batmand/patches/0001-Allow-one-to-disable-forking-to-background-in-debug_.patch b/batmand/patches/0001-Allow-one-to-disable-forking-to-background-in-debug_.patch new file mode 100644 index 0000000..90527e6 --- /dev/null +++ b/batmand/patches/0001-Allow-one-to-disable-forking-to-background-in-debug_.patch @@ -0,0 +1,68 @@ +From: Sven Eckelmann +Date: Sun, 1 Dec 2013 14:39:00 +0100 +Subject: Allow one to disable forking to background in debug_mode 0 + +--- + posix/init.c | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) + +diff --git a/posix/init.c b/posix/init.c +index afd409f..901c65a 100644 +--- a/posix/init.c ++++ b/posix/init.c +@@ -44,6 +44,7 @@ + #define IOCSETDEV 1 + + int8_t stop; ++int no_detach = 0; + + + +@@ -159,6 +160,7 @@ void apply_init_args( int argc, char *argv[] ) { + {"purge-timeout", required_argument, 0, 'q'}, + {"disable-aggregation", no_argument, 0, 'x'}, + {"disable-client-nat", no_argument, 0, 'z'}, ++ {"no-detach", no_argument, 0, 'D'}, + {0, 0, 0, 0} + }; + +@@ -166,7 +168,7 @@ void apply_init_args( int argc, char *argv[] ) { + stop = 0; + prog_name = argv[0]; + +- while ( ( optchar = getopt_long( argc, argv, "a:A:bcd:hHio:g:p:r:s:vV", long_options, &option_index ) ) != -1 ) { ++ while ( ( optchar = getopt_long( argc, argv, "a:A:bcd:hHio:g:p:r:s:vVD", long_options, &option_index ) ) != -1 ) { + + switch ( optchar ) { + +@@ -378,6 +380,11 @@ void apply_init_args( int argc, char *argv[] ) { + found_args++; + break; + ++ case 'D': ++ no_detach = 1; ++ found_args++; ++ break; ++ + case 'h': + default: + usage(); +@@ -536,12 +543,14 @@ void apply_init_args( int argc, char *argv[] ) { + /* daemonize */ + if (debug_level == 0) { + +- if (my_daemon() < 0) { ++ if (!no_detach) { ++ if (my_daemon() < 0) { + +- printf("Error - can't fork to background: %s\n", strerror(errno)); +- restore_defaults(); +- exit(EXIT_FAILURE); ++ printf("Error - can't fork to background: %s\n", strerror(errno)); ++ restore_defaults(); ++ exit(EXIT_FAILURE); + ++ } + } + + openlog("batmand", LOG_PID, LOG_DAEMON);