#!/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="\n$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 -e "$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' }