Merge pull request #4 from ZeroChaos-/netmode_auto

netmode fixes and auto mode
dev
Marc 2020-01-07 20:12:35 +00:00 committed by GitHub
commit 8dc7469f35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 58 additions and 7 deletions

0
root/payload/payload.sh Normal file → Executable file
View File

View File

@ -1,17 +1,65 @@
#!/bin/bash #!/bin/bash
function show_usage() { function show_usage() {
echo "Usage: $0 [DHCP_CLIENT|DHCP_SERVER]" echo "Usage: $0 [DHCP_CLIENT|DHCP_SERVER|AUTO]"
echo "" echo ""
} }
function shut_it_all_down() {
#we are restarting, possibly with new config, or reversing dhcp roles
#kill 'em all, let the user sort them out
/etc/init.d/odhcpd stop
pkill -9 dnsmasq #odhcpd starts dnsmasq but fails to stop it
pkill -9 udhcpc #this is the observed dhcp client
pkill -9 odhcpcd #just in case
}
function configure_client() {
shut_it_all_down
uci set network.lan.proto='dhcp'
}
function configure_server() {
shut_it_all_down
uci set network.lan.proto='static'
uci set network.lan.ipaddr='172.16.24.1'
uci set network.lan.netmask='255.255.255.0'
uci set network.lan.ip6assign='60'
/etc/init.d/odhcpd start
}
function blink() {
count 3
while [ "${count}" -gt 0 ]; do
LED "${1}"
sleep 0.25
LED "${2}"
sleep 0.25
count=$((count-1))
done
}
case $1 in case $1 in
"DHCP_CLIENT") "DHCP_CLIENT")
uci set network.lan.proto='dhcp' configure_client
;; ;;
"DHCP_SERVER") "DHCP_SERVER")
uci set network.lan.proto='none' configure_server
/etc/init.d/odhcpd start ;;
"AUTO")
#make sure nothing interferes
shut_it_all_down
#this will exit 0 if a dhcp discovery/request packet is seen, and 124 if not
sniffed="$(timeout -t 15 tcpdump -Z nobody -i eth0 -c 3 udp src port 68 and udp dst port 67 -v 2>&1)"
if echo "${sniffed}" | grep -q 'DHCP-Message Option 53, length 1: Discover' && \
! echo "${sniffed}" | grep -q 'DHCP-Message Option 53, length 1: Request'; then
#we saw a dhcp discover but no dhcp request, so someone wants a dhcp server and didn't find one
configure_server
echo 'blink SETUP Y' | at now
else
configure_client
echo 'blink SETUP W' | at now
fi
;; ;;
*) *)
show_usage show_usage

View File

@ -197,16 +197,19 @@ function enter_idle_mode() {
while true while true
do do
if [[ $MODE = "ARMING" ]] || [[ $MODE = "OFF" ]]; then if [[ $MODE = "ARMING" ]] || [[ $MODE = "OFF" ]]; then
#ARMING mode is basically always idle which means this overrides user LED
#status once per second. Don't override user status with idle status.
#pgrep LED > /dev/null || /usr/bin/LED whatever
BATTERY_STATE=$(/usr/bin/BATTERY) BATTERY_STATE=$(/usr/bin/BATTERY)
case $BATTERY_STATE in case $BATTERY_STATE in
"charging") "charging")
/usr/bin/LED B SLOW pgrep LED > /dev/null || /usr/bin/LED B SLOW
;; ;;
"full") "full")
/usr/bin/LED B pgrep LED > /dev/null || /usr/bin/LED B
;; ;;
*) *)
/usr/bin/LED Y SLOW pgrep LED > /dev/null || /usr/bin/LED Y SLOW
if [[ $MODE = "OFF" ]]; then if [[ $MODE = "OFF" ]]; then
sleep 2 && halt sleep 2 && halt
fi fi