This patch:
* Replaces the mess the config file generation was with a bunch of helper
routines.
* Makes absent boolean config options use the aiccu internal defaults like for
the strings. These options are commented out in the config per default.
* Ensures that the generated config file has mode 600. I know that OpenWrt is
normally not a multiuser system but we've got passwords in there, better safe
than sorry.
* Records for each (probably only one) running aiccu the state in /var/state
and stops the tunnels based on that. This avoids weird errors when you
change your config and then try to restart aiccu.
* Replaces config_cb with config_foreach which makes the file a lot better to
understand for non-pros like me.
* Adds a name to the section in the default config file so the files
in /var/run have a nicer name. Maybe the files should be named based on the
interface name instead but I didn't find a clean way to implement this.
Signed-off-by: Malte S. Stretz m...@apache.org
---
ipv6/aiccu/files/aiccu.conf | 10 ++--
ipv6/aiccu/files/aiccu.init | 93 +-
2 files changed, 60 insertions(+), 43 deletions(-)
diff --git a/ipv6/aiccu/files/aiccu.conf b/ipv6/aiccu/files/aiccu.conf
index 671fd16..b088992 100755
--- a/ipv6/aiccu/files/aiccu.conf
+++ b/ipv6/aiccu/files/aiccu.conf
@@ -1,11 +1,11 @@
-config aiccu
+config aiccu tunnel
option username ''
option password ''
option protocol ''
option server ''
option interface''
option tunnel_id''
- option requiretls ''
- option defaultroute '1'
- option nat '1'
- option heartbeat'1'
+# option requiretls 'true'
+# option defaultroute 'true'
+# option nat 'true'
+# option heartbeat'true'
diff --git a/ipv6/aiccu/files/aiccu.init b/ipv6/aiccu/files/aiccu.init
index 56de87d..6567bcd 100644
--- a/ipv6/aiccu/files/aiccu.init
+++ b/ipv6/aiccu/files/aiccu.init
@@ -1,52 +1,69 @@
#!/bin/sh /etc/rc.common
-# Copyright (C) 2006 OpenWrt.org
+# Copyright (C) 2006-2009 OpenWrt.org
START=50
-config_cb() {
- local cfg_type=$1
- local cfg_name=$2
+aiccu_set() {
+ local config=$1
+ local option=$2
+ local value=$3
+ echo $option $value /var/run/aiccu-${config}.conf
+}
+
+aiccu_set_string() {
+ local config=$1
+ local option=$2
+ local setting=$3
+ config_get dummy $config ${setting:-$option}
+ [ -n $dummy ] aiccu_set $config $option $dummy
+}
- case $cfg_type in
- aiccu)
- append cfgs_sections $cfg_name $N
- ;;
+aiccu_set_bool() {
+ local config=$1
+ local option=$2
+ local setting=$3
+ config_get_bool dummy $config ${setting:-$option} undef
+ case $dummy in
+ 0) aiccu_set $config $option false ;;
+ 1) aiccu_set $config $option true ;;
esac
}
start() {
config_load aiccu
- for cfgs_section in $cfgs_sections; do
- config_get username $cfgs_section username
- config_get password $cfgs_section password
- config_get server $cfgs_section server
- config_get protocol $cfgs_section protocol
- config_get interface $cfgs_section interface
- config_get tunnel_id $cfgs_section tunnel_id
- config_get_bool requiretls $cfgs_section requiretls 0
- config_get_bool defaultroute $cfgs_section defaultroute 1
- config_get_bool nat $cfgs_section nat 1
- config_get_bool heartbeat $cfgs_section heartbeat 1
- mkdir -p /tmp/run
- echo username $username /tmp/run/aiccu-${cfgs_section}.conf
- echo password $password /tmp/run/aiccu-${cfgs_section}.conf
- [ -n $server ] echo server $server
/tmp/run/aiccu-${cfgs_section}.conf
- [ -n $protocol ] echo protocol $protocol
/tmp/run/aiccu-${cfgs_section}.conf
- [ -n $interface ] echo ipv6_interface $interface
/tmp/run/aiccu-${cfgs_section}.conf
- [ -n $tunnel_id ] echo tunnel_id $tunnel_id
/tmp/run/aiccu-${cfgs_section}.conf
- [ $requiretls = 1 ] echo requiretls true
/tmp/run/aiccu-${cfgs_section}.conf
- [ $defaultroute != 1 ] echo defaultroute false
/tmp/run/aiccu-${cfgs_section}.conf
- [ $nat = 1 ] echo behindnat true
/tmp/run/aiccu-${cfgs_section}.conf
- [ $heartbeat != 1 ] echo makebeats false
/tmp/run/aiccu-${cfgs_section}.conf
- echo 'daemonize true' /tmp/run/aiccu-${cfgs_section}.conf
- echo pidfile /var/run/aiccu-${cfgs_section}.pid
/tmp/run/aiccu-${cfgs_section}.conf
-
- aiccu start /tmp/run/aiccu-$cfgs_section.conf
- done