| #!/bin/sh /etc/rc.common |
| |
| START=95 |
| USE_PROCD=1 |
| PROG=/usr/bin/kadnode |
| OPTS="" |
| |
| |
| boot() |
| { |
| # Wait for the loopback interface to be ready |
| ubus -t 30 wait_for network.interface network.loopback 2>/dev/null |
| rc_procd start_service |
| } |
| |
| xappend() { |
| local name="$2" value="$1" |
| OPTS="$OPTS--${name//_/-} ${value//'/\\'} |
| " |
| } |
| |
| append_opts_list() { |
| local name cfg="$1"; shift |
| for name in $*; do |
| config_list_foreach "$cfg" "$name" xappend "$name" |
| done |
| } |
| |
| append_opts() { |
| local name value cfg="$1"; shift |
| for name in $*; do |
| config_get value "$cfg" "$name" |
| [ -n "$value" ] && xappend "$value" "$name" |
| done |
| } |
| |
| append_opts_boolean() { |
| local name value cfg="$1"; shift |
| for name in $*; do |
| config_get_bool value "$cfg" "$name" 0 |
| [ $value -gt 0 ] && xappend '' $name |
| done |
| } |
| |
| section_enabled() { |
| config_get_bool enabled "$1" 'enabled' 0 |
| [ $enabled -gt 0 ] |
| } |
| |
| start_instance() { |
| local cfg="$1" |
| local CONFIG_FILE=/tmp/kadnode.${cfg}.conf |
| |
| section_enabled "$cfg" || return |
| |
| OPTS="" |
| |
| append_opts "$cfg" lpd_addr dns_server dns_port verbosity peerfile config \ |
| query_tld user port ifname cmd_port |
| |
| append_opts_list "$cfg" announce peer tls_client_cert tls_server_cert bob_load_key |
| |
| append_opts_boolean "$cfg" dns_proxy_enable lpd_disable fwd_disable ipv4 ipv6 |
| |
| # Close stdin when cmd feature is present |
| if [ $($PROG --version | grep -c cmd) -eq 1 ]; then |
| xappend "" "cmd_disable_stdin" |
| fi |
| |
| echo "$OPTS" > $CONFIG_FILE |
| |
| procd_open_instance |
| procd_set_param command $PROG |
| procd_set_param file $CONFIG_FILE |
| procd_set_param stderr 1 |
| procd_set_param stdout 1 |
| procd_append_param command --config $CONFIG_FILE |
| procd_close_instance |
| } |
| |
| stop_instance() { |
| local cfg="$1" |
| local CONFIG_FILE=/tmp/kadnode.${cfg}.conf |
| |
| rm -f $CONFIG_FILE |
| } |
| |
| start_service() { |
| config_load 'kadnode' |
| config_foreach start_instance 'kadnode' |
| } |
| |
| stop_service() { |
| config_load 'kadnode' |
| config_foreach stop_instance 'kadnode' |
| } |