#!/bin/sh /etc/rc.common START=98 USE_PROCD=1 NAME=fwuagent PROG=/usr/bin/fwuagent PROPERTIES=/tmp/fwuagent_prop.json disabled=0 if [ -f /lib/ar71xx.sh ]; then PLATFORM=ar71xx . /lib/ar71xx.sh elif [ -f /lib/ipq806x.sh ]; then PLATFORM=ipq806x . /lib/ipq806x.sh fi board=$(${PLATFORM}_board_name) . /lib/delos-functions.sh check_guest_wifi() { local radio="$2" if [ "$(config_get "$1" dvl_guest)" = 1 -a "$(config_get "$1" device)" = "$radio" ]; then if [ "$(config_get "$1" disabled)" = "0" ]; then echo "1" else echo "0" fi fi } is_guest_wifi_enabled() { local radio="$1" config_load wireless config_foreach check_guest_wifi wifi-iface "$radio" } is_radio_enabled() { local radio="$1" if [ "$(uci get -q wireless.$radio.cfg_disabled)" = "0" ]; then echo "1" else echo "0" fi } create_feature_bits() { local pc="$(uci get -q parental_control.@global[0].enabled)" local sq="$(uci get -q station_quota.global.enabled)" local ws="$(uci get -q wifi_schedule.@global[0].enabled)" local son="$(uci get -q wireless.son.enabled)" local ieee80211r="$(uci get -q wireless.son.ieee80211r)" local radio24="$(is_radio_enabled wifi0)" local radio5="$(is_radio_enabled wifi1)" local cs="$(uci get -q configsync.global.enabled)" local guest_switch_off="$(uci get -q wireless.guest_wifi.auto_switch_off)" local guest24="$(is_guest_wifi_enabled wifi0)" local guest5="$(is_guest_wifi_enabled wifi1)" local dhcp="0" [ ! "$(uci get -q network.lan.proto)" = "dhcp" ] || dhcp="1" local location="0" [ -z "$(uci get -q system.@system[0].location)" ] || location="1" json_add_string feature_bits "$pc,$sq,$ws,$son,$ieee80211r,$radio24,$radio5,$cs,$guest_switch_off,$guest24,$guest5,$dhcp,$location" } create_properties() { . /usr/share/libubox/jshn.sh . /etc/delos-version . /etc/delos-image config_load delos config_get oem_variant baptization OemVariant config_get baptized_device_type baptization DeviceType config_get baptized_mt baptization MT if [ "$baptized_device_type" != "" ]; then DEVICE_TYPE="$baptized_device_type" fi json_init json_add_string device_type "$DEVICE_TYPE" json_add_string firmware_date "$FIRMWARE_DATE" json_add_string firmware_distribution "$(uci get fwuagent.device.firmware_distribution)" json_add_string firmware_os "$(uname)" json_add_string firmware_version "$FIRMWARE_VERSION" json_add_string oem_variant "$oem_variant" json_add_string device_mt "$baptized_mt" json_add_string automatic_update "$(uci get fwuagent.service.automatic_update)" json_add_string agent_version "$(opkg info fwuagent | grep Version | cut -d' ' -f2)" create_feature_bits json_close_object echo "$(json_dump)" > "$PROPERTIES" } start_service() { config_load delos config_get serial baptization SerialNumber config_load fwuagent config_get_bool disabled service disabled config_get log_level service log_level config_get_bool ghn_agents service ghn_agents case "$board" in dlan2-2400-ac|\ ew7479cap|\ ap-dk01.1-c1) bootloader_mtd="mtd6" ;; *) bootloader_mtd="mtd0" ;; esac config_get hawkbit_server hawkbit server # use the dev server if we are not running a production firmware dvl_is_internal_firmware && config_get hawkbit_server hawkbit dev_server "hawkbit-dev.devolo.net" # set default log level if none is set if [ -z "$log_level" ]; then log_level="INFO" uci_set fwuagent service log_level "$log_level" uci_commit fwuagent fi # the parameter must be omitted when the option is not enabled ghn_agents_opt="" if [ "$ghn_agents" = "1" ]; then ghn_agents_opt="--ghn-agents" fi # create the properties that are reported to hawkBit create_properties procd_open_instance procd_set_param command "$PROG" \ --client-certificate /etc/keys/delos-client-cert.pem \ --client-certificate-key /etc/keys/delos-client-key.pem \ --dormant "$disabled" \ --log-level "$log_level" \ --bootloader-mtd "$bootloader_mtd" \ --device-id "$serial" \ --hawkbit-server "$hawkbit_server" \ --installed-flash-type "nor" \ --properties-file "$PROPERTIES" \ $ghn_agents_opt procd_set_param respawn 60 10 0 procd_set_param stdout 1 procd_set_param stderr 1 procd_close_instance } service_triggers() { procd_add_reload_trigger "fwuagent" } reload_service() { stop start }