You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

166 lines
4.6 KiB
Bash

#!/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
}