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.
195 lines
6.1 KiB
Bash
195 lines
6.1 KiB
Bash
#!/bin/sh
|
|
|
|
. /lib/functions.sh
|
|
. /usr/lib/configsync_lib.sh
|
|
|
|
my_logger() {
|
|
logger -t configsync_handler "${@}"
|
|
}
|
|
|
|
create_local_configuration_file() {
|
|
#if it it not feasable that the uuid changes every time the service is started make the uuid persistent
|
|
UUID=$(cat /proc/sys/kernel/random/uuid)
|
|
if [ "$(uci_get ${MY_SERVICE_NAME} global configured)" = 1 ]; then
|
|
CONFIGURED="yes"
|
|
else
|
|
CONFIGURED="no"
|
|
fi
|
|
|
|
cat > ${CONFIGSYNC_CONFIGURATION_FILE}<<EOF
|
|
[interfaces]
|
|
i0=br-lan,B
|
|
[network]
|
|
interface=br-lan
|
|
almac=${ETH_MAC_ADDR}
|
|
unicasttobridge=on
|
|
[wsc]
|
|
authenticationtypes=Open,WPAPersonal,WPA2Personal
|
|
encryptiontypes=None,AES
|
|
connectiontypes=ESS
|
|
configurationmethods=VirtualPB
|
|
primarydevicetype=NetworkInfrastructure,Bridge
|
|
osversion=1
|
|
devicepasswordid=UserSpecified
|
|
manufacturer=$(eval "$(grep DEVICE_MANUFACTURER= /etc/device_info)"; echo $DEVICE_MANUFACTURER)
|
|
modelname=$(uci_get delos delos device_type)
|
|
devicename=$(eval "$(grep DEVICE_PRODUCT= /etc/device_info)"; echo $DEVICE_PRODUCT)
|
|
modelnumber=9999
|
|
serialnumber=$(uci_get_state delos baptization SerialNumber)
|
|
uuide=${UUID}
|
|
[wscregistrar]
|
|
freqband=CS
|
|
ssid=devolo-WiFi-Passwd
|
|
networkkey=devolo-WiFi
|
|
authenticationtype=WPA2Personal
|
|
encryptiontype=AES
|
|
[configuration]
|
|
registrar=off
|
|
renewonstart=on
|
|
autoconfigsearchtimer=30
|
|
[configsync]
|
|
enabled=yes
|
|
version=1
|
|
configured=${CONFIGURED}
|
|
useplcbutton=off
|
|
priority=0
|
|
domain=$(uci_get ${MY_SERVICE_NAME} global domain 0)
|
|
logging=$(uci_get ${MY_SERVICE_NAME} global logging 0)
|
|
[orange]
|
|
orangetlv=off
|
|
orangetlvm2=off
|
|
orangeexpbackoff=off
|
|
orangeconstbackoff=0
|
|
[debug]
|
|
encryption=on
|
|
messageidcheck=on
|
|
EOF
|
|
}
|
|
|
|
handle_event()
|
|
{
|
|
MESSAGE_TYPE=${1}
|
|
MESSAGE=${2}
|
|
EVENT=${3}
|
|
|
|
my_logger "handle_event: ${MESSAGE_TYPE} '${MESSAGE}', event ${EVENT}"
|
|
|
|
# copy configuration to temp configuration
|
|
wait_stable_config 0 5
|
|
[ "$event" = configsync_to_system ] &&
|
|
rm -rf $CS_TEMP_CONFIG_PATH/* $CS_TEMP_CHANGE_PATH/*
|
|
for CONFIGFILE in ${CS_SERVICES_TO_SYNC}; do
|
|
# ATT! this export will also export uncommitted changes!
|
|
uci -q export $CONFIGFILE | uci_tmp import $CS_PREFIX$CONFIGFILE
|
|
done
|
|
|
|
RETVAL=1
|
|
for CHANGE in ${MESSAGE}; do
|
|
EXECUTOR=${CHANGE}
|
|
my_logger "Got event ${EVENT} for change ${CHANGE}, calling ${EXECUTOR}"
|
|
if [ -f ${PATH_TO_CONFIGSYNC_EXECUTOR}/${EXECUTOR} ]; then
|
|
if ${PATH_TO_CONFIGSYNC_EXECUTOR}/${EXECUTOR} ${EVENT} ${CHANGE}; then
|
|
RETVAL=0
|
|
fi
|
|
else
|
|
if [ "${CHANGE}" != "${MESSAGE_TYPE}" ]; then
|
|
my_logger "Can not handle change ${CHANGE}!"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# check for changed configfiles and import to system configuration
|
|
if [ -s $CS_IMPORTSERVICELIST ]; then
|
|
# wait until configfiles are not in use
|
|
wait_stable_config 0 5
|
|
IMPORTSERVICELIST=$(cat $CS_IMPORTSERVICELIST)
|
|
for CONFIGFILE in ${IMPORTSERVICELIST}; do
|
|
uci revert ${CONFIGFILE}
|
|
uci_tmp export ${CS_PREFIX}${CONFIGFILE} | uci import ${CONFIGFILE}
|
|
update_md5sum ${CONFIGFILE}
|
|
done
|
|
>$CS_IMPORTSERVICELIST
|
|
fi
|
|
return $RETVAL
|
|
}
|
|
|
|
start_p1905()
|
|
{
|
|
my_logger ">>> start_p1905()"
|
|
|
|
# wait on first start after device boot
|
|
STARTDELAY=$(uci_get ${MY_SERVICE_NAME} global startdelay 0)
|
|
EXTENSIONDELAY=$(uci_get ${MY_SERVICE_NAME} global extensiondelay 20)
|
|
wait_stable_config ${STARTDELAY} ${EXTENSIONDELAY}
|
|
|
|
for SERVICE in ${CS_SERVICES_TO_SYNC}; do
|
|
update_md5sum ${SERVICE}
|
|
done
|
|
|
|
rm -f /tmp/cs_omit_wireless
|
|
killall p1905
|
|
# call init() for all files (not directories!) in PATH_TO_CONFIGSYNC_EXECUTOR
|
|
find ${PATH_TO_CONFIGSYNC_EXECUTOR} -type f -maxdepth 1 -exec sh -c "echo \"Call initialization of {} ...\"; {} init" \;
|
|
|
|
create_local_configuration_file
|
|
/usr/sbin/p1905 -f ${CONFIGSYNC_CONFIGURATION_FILE} | while read MESSAGE_TYPE MESSAGE
|
|
do
|
|
case ${MESSAGE_TYPE} in
|
|
AUTOCONFIG-FAILED)
|
|
my_logger "Message ${MESSAGE_TYPE} ${MESSAGE} ignored"
|
|
;;
|
|
NEW-AP-SETTINGS)
|
|
my_logger "Message ${MESSAGE_TYPE} ${MESSAGE} ignored"
|
|
;;
|
|
CONFIGSYNC-SET-CONFIGURED)
|
|
my_logger "Message ${MESSAGE_TYPE} ${MESSAGE} setting configsync state to configured"
|
|
uci_set configsync global configured '1'
|
|
uci_commit configsync
|
|
create_local_configuration_file
|
|
;;
|
|
NEW-CONFIGSYNC-SETTINGS)
|
|
# kill pending events from own website
|
|
killall configsync_event_delay.sh
|
|
>$CS_SERVICELIST
|
|
handle_event ${MESSAGE_TYPE} "${MESSAGE}" configsync_to_system
|
|
reload_config
|
|
;;
|
|
CONFIGSYNC-DYNAMIC-UPDATE)
|
|
handle_event ${MESSAGE_TYPE} "${MESSAGE}" dynamic_update
|
|
;;
|
|
CONFIGSYNC-RESET)
|
|
my_logger "Message ${MESSAGE_TYPE} ${MESSAGE} received"
|
|
rm $CS_CONFIGURATION_PATH/*
|
|
find ${PATH_TO_CONFIGSYNC_EXECUTOR} -type f -maxdepth 1 -exec sh -c "echo \"Call initialization of {} ...\"; {} init" \;
|
|
;;
|
|
VENDOR-MESSAGE)
|
|
my_logger "Vendor message received"
|
|
# cut off the VENDOR-MESSAGE prefix, decode base64 data and call service handler
|
|
/usr/bin/configsync_vs_handler.sh $(echo "$MESSAGE" | cut -d' ' -f2 | openssl enc -base64 -d)
|
|
;;
|
|
*)
|
|
my_logger "Unknown message ${MESSAGE_TYPE} ${MESSAGE}"
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
case ${1} in
|
|
SYSTEM-TO-CONFIGSYNC)
|
|
handle_event NEW-SYSTEM-CONFIG-SETTINGS "${2}" system_to_configsync
|
|
;;
|
|
APPLY)
|
|
my_logger "APPLY) Apply configsync changes"
|
|
killall -USR1 p1905
|
|
;;
|
|
STOP)
|
|
my_logger "STOP) Stop p1905"
|
|
killall p1905 2>/dev/null
|
|
;;
|
|
START)
|
|
ETH_MAC_ADDR=${2}
|
|
my_logger "START) Start p1905 with ${ETH_MAC_ADDR}"
|
|
start_p1905
|
|
;;
|
|
esac
|