From 68277b56e0864f038d427d3568a395a4a27fa856 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 28 Jun 2024 14:19:01 +0200 Subject: [PATCH 01/21] Remove unused part in omr-tracker post tracking script --- .../share/omr/post-tracking.d/001-post-tracking | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking index 90996fe58..3a4da00c5 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking @@ -738,10 +738,10 @@ fi # An interface in error will never be used in MPTCP if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$interface_up" != "true" ]); then - interface_autostart=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["autostart"]') - interface_available=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["available"]') - interface_pending=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["pending"]') - interface_error=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["errors"][0].code') + #interface_autostart=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["autostart"]') + #interface_available=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["available"]') + #interface_pending=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["pending"]') + #interface_error=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["errors"][0].code') #if [ "$interface_available" = "true" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "wireguard" ]) && [ "$interface_error" != "MM_PINCODE_REQUIRED" ] && [ "$interface_error" != "MM_FAILED_REASON_SIM_MISSING" ]; then #if [ "$interface_available" = "true" ] && [ "$interface_up" = "false" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "wireguard" ]); then @@ -1123,15 +1123,6 @@ if [ -n "$OMR_TRACKER_INTERFACE" ]; then } fi -if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - metric="$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" - if [ -z "$metric" ] || ([ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]) || ([ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]); then - _log "Routes not correctly set for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE table $metric) with IPs $OMR_TRACKER_DEVICE_IP $OMR_TRACKER_DEVICE_IP6" - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" - /etc/init.d/omr-tracker restart - fi -fi - if [ "$multipath_config" = "master" ]; then #if ([ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && ([ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ] || [ "$(uci -q get openmptcprouter.settings.vpn)" = "mlvpn" ]); then if ([ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then From ab87b5f53657e7eb94f538230c8e63be66519dbd Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 28 Jun 2024 14:20:55 +0200 Subject: [PATCH 02/21] Divide post-tracking script in 3 smaller scripts and move script to omr-tracker package --- .../share/omr/post-tracking.d/001-initialize | 14 + .../usr/share/omr/post-tracking.d/002-error | 292 ++++++++++++++++++ .../usr/share/omr/post-tracking.d/003-up | 278 +---------------- .../usr/share/omr/post-tracking.d/020-status | 0 .../share/omr/post-tracking.d/021-latencies | 0 .../share/omr/post-tracking.d/022-speedtest | 0 6 files changed, 314 insertions(+), 270 deletions(-) create mode 100755 omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize create mode 100755 omr-tracker/files/usr/share/omr/post-tracking.d/002-error rename mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking => omr-tracker/files/usr/share/omr/post-tracking.d/003-up (82%) rename {mptcp => omr-tracker}/files/usr/share/omr/post-tracking.d/020-status (100%) rename {mptcp => omr-tracker}/files/usr/share/omr/post-tracking.d/021-latencies (100%) rename {mptcp => omr-tracker}/files/usr/share/omr/post-tracking.d/022-speedtest (100%) diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize b/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize new file mode 100755 index 000000000..d9ef59c14 --- /dev/null +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize @@ -0,0 +1,14 @@ + +# Set default multipath status +[ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null +[ "$OMR_TRACKER_INTERFACE" = "omr6in4" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null + +if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$OMR_TRACKER_INTERFACE" != "omr6in4" ]; then + metric="$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" + if [ -z "$metric" ] || ([ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]) || ([ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]); then + _log "Routes not correctly set for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE table $metric) with IPs $OMR_TRACKER_DEVICE_IP $OMR_TRACKER_DEVICE_IP6" + /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" + /etc/init.d/omr-tracker restart + exit 0 + fi +fi diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/002-error b/omr-tracker/files/usr/share/omr/post-tracking.d/002-error new file mode 100755 index 000000000..a74f74df6 --- /dev/null +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/002-error @@ -0,0 +1,292 @@ + + +. /lib/functions/network.sh + +default_gw=$(ip route get 1.1.1.1 | grep via | awk '{print $3}') +default_gw6=$(ip -6 route get 2606:4700:4700::1111 | grep via | awk '{print $3}') + +interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') + +# An interface in error will never be used in MPTCP +if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$interface_up" != "true" ]); then + #interface_autostart=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["autostart"]') + #interface_available=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["available"]') + #interface_pending=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["pending"]') + #interface_error=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["errors"][0].code') + + #if [ "$interface_available" = "true" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "wireguard" ]) && [ "$interface_error" != "MM_PINCODE_REQUIRED" ] && [ "$interface_error" != "MM_FAILED_REASON_SIM_MISSING" ]; then + #if [ "$interface_available" = "true" ] && [ "$interface_up" = "false" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "wireguard" ]); then + # _log "No answer from $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE), restart interface" + # _log "Set $OMR_TRACKER_INTERFACE down" + # ifdown $OMR_TRACKER_INTERFACE + # sleep 5 + # _log "Set $OMR_TRACKER_INTERFACE up" + # ifup $OMR_TRACKER_INTERFACE + # sleep 30 + #if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] && [ "$interface_up" = "false" ] && [ "$interface_available" = "false" ] && [ "$interface_pending" = "false" ] && [ "$interface_autostart" = "true" ]; then + if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ]; then + modemfind="0" + device="$(uci -q get network.$OMR_TRACKER_INTERFACE.device)" + . /usr/share/ModemManager/modemmanager.common + [ -n "$device" ] && MODEM_STATUS="$(timeout 3 mmcli -m $device -K)" + modem=$device + if [ -n "$MODEM_STATUS" ]; then + modemfind="1" + mm_state=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.state") + if [ "$mm_state" = "failed" ]; then + mm_state_failed=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.state-failed-reason") + if [ "$mm_state_failed" = "unknown-capabilities" ]; then + _log "Interface $OMR_TRACKER_INTERFACE in failed state in ModemManager, reset modem..." + /usr/bin/mmcli -m ${modem} -r 2>&1 >/dev/null + sleep 30 + elif false && [ "$mm_state_failed" = "sim-missing" ]; then + _log "Interface $OMR_TRACKER_INTERFACE in failed state in ModemManager, reset modem..." + /usr/bin/mmcli -m ${modem} -r 2>&1 >/dev/null + #_log "Interface $OMR_TRACKER_INTERFACE in failed state sim-missing in ModemManager, reset modem..." + #mm_primary_port=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.primary-port") + #mbimcli -p -d /dev/$mm_primary_port --ms-device-reset 2>&1 >/dev/null + fi + elif [ "$mm_state" = "connected" ] || [ "$mm_state" = "enabled" ]; then + _log "No answer from $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE), restart interface" + _log "Set $OMR_TRACKER_INTERFACE down" + ifdown $OMR_TRACKER_INTERFACE + sleep 5 + _log "Set $OMR_TRACKER_INTERFACE up" + ifup $OMR_TRACKER_INTERFACE + sleep 30 + elif [ "$mm_state" = "disabled" ]; then + # [ -n "$(echo $modeminfo | grep 'modem.3gpp.registration-state ' | grep home)" ]; then + _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) disabled, set it up" + /usr/bin/mmcli -m ${modem} -e 2>&1 >/dev/null + ifup $OMR_TRACKER_INTERFACE + sleep 30 + elif [ "$mm_state" = "registered" ]; then + _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) registered, set it up" + ifup $OMR_TRACKER_INTERFACE + sleep 30 + elif [ "$mm_state" = "locked" ]; then + mm_unlock_required=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.unlock-required") + mm_generic_sim=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.sim") + #mm_primary_port=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.primary-port") + #mm_drivers=$(modemmanager_get_multivalue_field "${MODEM_STATUS}" "modem.generic.drivers") + mm_unlock_retries=$(modemmanager_get_multivalue_field "${MODEM_STATUS}" "modem.generic.unlock-retries" | awk '{print substr($2,2,length($2)-2)}') + if [ "$mm_unlock_required" = "sim-pin" ]; then + # Sometimes PIN is not correctly sent to modem + if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then + if [ "$mm_unlock_retries" -gt "1" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then + _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) locked, set PIN" + mmcli -a -m ${modem} -i $mm_generic_sim --pin=$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode) 2>&1 >/dev/null + sleep 20 + ifup $OMR_TRACKER_INTERFACE + fi + fi + elif [ "$mm_unlock_required" = "sim-puk" ] && [ "$mm_unlock_retries" -gt "1" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pukcode)" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then + _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) locked, set PUK" + mmcli -i $mm_generic_sim --puk=$(uci -q get network.$OMR_TRACKER_INTERFACE.pukcode) --pin=$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode) 2>&1 >/dev/null + sleep 30 + fi + fi + fi + if [ "$modemfind" = "0" ]; then + #_log "Can't find $OMR_TRACKER_INTERFACE in ModemManager, rescan modem..." + #/usr/bin/mmcli -S 2>&1 >/dev/null + #_log "Can't find $OMR_TRACKER_INTERFACE in ModemManager, restart modemmanager..." + _log "Can't find $OMR_TRACKER_INTERFACE in ModemManager" + #/etc/init.d/modemmanager restart + sleep 30 + fi + fi + #elif [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] && [ "$interface_available" = "false" ]; then + # for modem in $(timeout 3 mmcli -L | awk -F/ '{ print $6}' | awk '{print $1}'); do + # if [ -n "$(timeout 2 mmcli -m $modem -K | grep $OMR_TRACKER_DEVICE)" ]; then + # modem_device=$(timeout 2 mmcli -m $modem -K | grep 'modem.generic.device ' | awk '{print $3}') + # [ -n "$modem_device" ] && modem_interface=$(uci -q show network | grep $modem_device | awk -F. '{print $2}') + # [ -n "$modem_interface" ] && { + # _log "No answer from $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE), restart associed interface $modem_interface" + # ifdown $modem_interface + # sleep 5 + # ifup $modem_interface + # sleep 30 + # } + # fi + # done + #fi + + # This part must be done after modems restart because we have no idea when modems will be ready again... (another solution would be to check ModemManager status) + if [ "$OMR_TRACKER_PREV_STATUS" = "$OMR_TRACKER_STATUS" ]; then + exit 0 + fi + + # Get the current multipath status + multipath_status="off" +# [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null +# [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null + if [ -e "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then + case "$(multipath "$OMR_TRACKER_DEVICE")" in + *default*) multipath_status="on" ;; + *backup*) multipath_status="backup" ;; + *handover*) multipath_status="handover" ;; + esac + fi + + if [ "$multipath_status" != "off" ] || ([ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ]); then + if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then + _log "$OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) switched off (interface up status: $interface_up - Tracker status: $OMR_TRACKER_STATUS)" + else + _log "$OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) switched off because $OMR_TRACKER_STATUS_MSG" + fi + if [ -n "$OMR_TRACKER_INTERFACE" ]; then + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='down' + fi + #if [ "$(sysctl -n net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ]; then + # multipath "$OMR_TRACKER_DEVICE" off > /dev/null 2>&1 + #fi + if [ -n "$OMR_TRACKER_DEVICE_IP" ]; then + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set down > /dev/null 2>&1 + fi + if [ -n "$OMR_TRACKER_DEVICE_IP6" ]; then + glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set down > /dev/null 2>&1 + fi + if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ] && [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ]; then + VPN_BASE_INTF="$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.baseintf)" + VPN_BASE_INTF_IP=$(ubus call network.interface.$VPN_BASE_INTF status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") + if [ -n "$VPN_BASE_INTF" ]; then + uci -q batch <<-EOF >/dev/null + set openvpn.$VPN_BASE_INTF.local=$VPN_BASE_INTF_IP + commit openvpn + EOF + fi + [ -z "VPN_BASE_INTF" ] && VPN_BASE_INTF="omr" + /etc/init.d/openvpn restart $VPN_BASE_INTF 2>&1 >/dev/null + fi + config_load openmptcprouter + config_foreach del_server_route server + config_foreach del_server_route6 server + #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then + + if [ -n "$OMR_TRACKER_INTERFACE" ]; then + if ([ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ] || [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ]) && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw: $default_gw - Set routes (current: $(ip r) )" + config_load network + config_foreach set_route interface $OMR_TRACKER_INTERFACE + config_foreach set_route6 interface $OMR_TRACKER_INTERFACE + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New routes $(ip r)" + elif [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath)" = "master" ]; then + config_load network + config_foreach set_route interface $OMR_TRACKER_INTERFACE "no" + config_foreach set_route6 interface $OMR_TRACKER_INTERFACE "no" + elif [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$(ip r show table 991337 | grep "$OMR_TRACKER_DEVICE ")" ]; then + config_load network + config_foreach set_route interface $OMR_TRACKER_INTERFACE "no" + config_foreach set_route6 interface $OMR_TRACKER_INTERFACE "no" + fi + fi + if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set balancing route (current: $(ip r) )" + config_foreach set_server_all_routes server + config_foreach set_server_all_routes6 server + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set balancing route done (new: $(ip r) )" + fi + fi + + mail_alert="" + if [ -n "$OMR_TRACKER_INTERFACE" ]; then + mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)" + fi + [ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" + [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { + OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" + if [ "$(uci -q get omr-tracker.defaults.mail_down_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_down_message)" != "" ]; then + mail_subject="$(uci -q get omr-tracker.defaults.mail_down_subject)" + mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + mail_message="$(uci -q get omr-tracker.defaults.mail_down_message)" + mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` + echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) + else + echo -e "Subject: $OMR_SYSNAME: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is down\n\nConnection failure of $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) detected. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to) + fi + } + script_alert_down="" + if [ -n "$OMR_TRACKER_INTERFACE" ]; then + script_alert_down="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.script_alert_down)" + fi + [ -n "$script_alert_down" ] && eval $script_alert_down + + restart_down="" + if [ -n "$OMR_TRACKER_INTERFACE" ]; then + restart_down="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.restart_down)" + fi + [ -z "$restart_down" ] && restart_down="$(uci -q get omr-tracker.defaults.restart_down)" + [ "$restart_down" = "1" ] && { + _log "Restart $OMR_TRACKER_INTERFACE" + ifdown $OMR_TRACKER_INTERFACE 2>&1 >/dev/null + sleep 5 + ifup $OMR_TRACKER_INTERFACE 2>&1 >/dev/null + } + + if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] || [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ]; then + if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then + _log "$OMR_TRACKER_INTERFACE down" + else + _log "$OMR_TRACKER_INTERFACE down because $OMR_TRACKER_STATUS_MSG" + fi + if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then + config_load network + config_foreach set_route interface $OMR_TRACKER_INTERFACE + config_foreach set_route6 interface $OMR_TRACKER_INTERFACE + else + _log "Default gateway disabled, no default gateway set" + fi + if [ "$(uci -q get openmptcprouter.settings.shadowsocksudp)" = "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.shadowsocks)" = "up" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "" ] && [ "$(uci -q get shadowsocks-libev.hi1.mode)" = "tcp_and_udp" ] && [ "$(uci -q get shadowsocks-libev.sss0.obfs)" != "1" ]; then + _log "Tunnel down use ShadowSocks for UDP" + uci -q set shadowsocks-libev.ss_rules.redir_udp='hi1' + if /etc/init.d/shadowsocks-libev rules_exist ; then + /etc/init.d/shadowsocks-libev rules_down 2>&1 >/dev/null + /etc/init.d/shadowsocks-libev rules_up 2>&1 >/dev/null + fi + fi + if [ "$(uci -q get dsvpn.vpn.enable)" = "1" ]; then + _log "DSVPN down, restart it" + /etc/init.d/dsvpn restart 2>&1 >/dev/null + fi + if [ "$(uci -q get mlvpn.general.enable)" = "1" ]; then + _log "MLVPN down, restart it" + /etc/init.d/mlvpn restart 2>&1 >/dev/null + fi + if [ "$(uci -q get glorytun.vpn.enable)" = "1" ]; then + _log "Glorytun VPN down, restart it" + /etc/init.d/glorytun restart 2>&1 >/dev/null + fi + if [ "$(uci -q get glorytun-udp.vpn.enable)" = "1" ]; then + _log "Glorytun UDP VPN down, restart it" + /etc/init.d/glorytun-udp restart 2>&1 >/dev/null + fi + if [ "$(uci -q get openvpn.omr.enabled)" = "1" ]; then + _log "OpenVPN down, restart it" + /etc/init.d/openvpn restart omr 2>&1 >/dev/null + fi + config_load openmptcprouter + config_foreach disable_pihole server + #if [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ] || [ "$(uci -q get openmptcprouter.settings.vpn)" = "mlvpn" ]; then + if [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then + config_foreach set_server_default_route server + config_foreach set_server_default_route6 server + fi + fi + dns_flush + if [ -n "$OMR_TRACKER_INTERFACE" ]; then + uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.lc + fi + [ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter + #ubus call network reload + + # Set a little sleep after an interface error +# if [ -n "$RANDOM" ]; then +# sleep `expr $RANDOM % 100` +# else +# sleep `awk 'BEGIN{srand();print int(rand()*20)}'` +# fi + + exit 0 +fi + diff --git a/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking b/omr-tracker/files/usr/share/omr/post-tracking.d/003-up similarity index 82% rename from mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking rename to omr-tracker/files/usr/share/omr/post-tracking.d/003-up index 3a4da00c5..c6e78e807 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/001-post-tracking +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/003-up @@ -1,3 +1,7 @@ +if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then + exit 0 +fi + SETROUTE=false . /lib/functions/network.sh @@ -705,6 +709,7 @@ dns_flush() { # sleep `awk 'BEGIN{srand();print int(rand()*9)}'` #fi + # Get the current multipath status multipath_status="off" [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null @@ -717,12 +722,14 @@ if [ -e "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then esac fi + #default_gw=$(ip route show default | awk '/default/ {print $3}') #default_gw6=$(ip -6 route show default | awk '/default/ {print $3}') default_gw=$(ip route get 1.1.1.1 | grep via | awk '{print $3}') default_gw6=$(ip -6 route get 2606:4700:4700::1111 | grep via | awk '{print $3}') #current_interface_gw=$(uci -q get "network.$OMR_TRACKER_INTERFACE.gateway") + initcwrwnd="" interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') @@ -736,276 +743,6 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TR fi fi -# An interface in error will never be used in MPTCP -if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$interface_up" != "true" ]); then - #interface_autostart=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["autostart"]') - #interface_available=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["available"]') - #interface_pending=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["pending"]') - #interface_error=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["errors"][0].code') - - #if [ "$interface_available" = "true" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "wireguard" ]) && [ "$interface_error" != "MM_PINCODE_REQUIRED" ] && [ "$interface_error" != "MM_FAILED_REASON_SIM_MISSING" ]; then - #if [ "$interface_available" = "true" ] && [ "$interface_up" = "false" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "wireguard" ]); then - # _log "No answer from $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE), restart interface" - # _log "Set $OMR_TRACKER_INTERFACE down" - # ifdown $OMR_TRACKER_INTERFACE - # sleep 5 - # _log "Set $OMR_TRACKER_INTERFACE up" - # ifup $OMR_TRACKER_INTERFACE - # sleep 30 - #if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] && [ "$interface_up" = "false" ] && [ "$interface_available" = "false" ] && [ "$interface_pending" = "false" ] && [ "$interface_autostart" = "true" ]; then - if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ]; then - modemfind="0" - device="$(uci -q get network.$OMR_TRACKER_INTERFACE.device)" - . /usr/share/ModemManager/modemmanager.common - [ -n "$device" ] && MODEM_STATUS="$(timeout 3 mmcli -m $device -K)" - modem=$device - if [ -n "$MODEM_STATUS" ]; then - modemfind="1" - mm_state=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.state") - if [ "$mm_state" = "failed" ]; then - mm_state_failed=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.state-failed-reason") - if [ "$mm_state_failed" = "unknown-capabilities" ]; then - _log "Interface $OMR_TRACKER_INTERFACE in failed state in ModemManager, reset modem..." - /usr/bin/mmcli -m ${modem} -r 2>&1 >/dev/null - sleep 30 - elif false && [ "$mm_state_failed" = "sim-missing" ]; then - _log "Interface $OMR_TRACKER_INTERFACE in failed state in ModemManager, reset modem..." - /usr/bin/mmcli -m ${modem} -r 2>&1 >/dev/null - #_log "Interface $OMR_TRACKER_INTERFACE in failed state sim-missing in ModemManager, reset modem..." - #mm_primary_port=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.primary-port") - #mbimcli -p -d /dev/$mm_primary_port --ms-device-reset 2>&1 >/dev/null - fi - elif [ "$mm_state" = "connected" ] || [ "$mm_state" = "enabled" ]; then - _log "No answer from $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE), restart interface" - _log "Set $OMR_TRACKER_INTERFACE down" - ifdown $OMR_TRACKER_INTERFACE - sleep 5 - _log "Set $OMR_TRACKER_INTERFACE up" - ifup $OMR_TRACKER_INTERFACE - sleep 30 - elif [ "$mm_state" = "disabled" ]; then - # [ -n "$(echo $modeminfo | grep 'modem.3gpp.registration-state ' | grep home)" ]; then - _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) disabled, set it up" - /usr/bin/mmcli -m ${modem} -e 2>&1 >/dev/null - ifup $OMR_TRACKER_INTERFACE - sleep 30 - elif [ "$mm_state" = "registered" ]; then - _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) registered, set it up" - ifup $OMR_TRACKER_INTERFACE - sleep 30 - elif [ "$mm_state" = "locked" ]; then - mm_unlock_required=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.unlock-required") - mm_generic_sim=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.sim") - #mm_primary_port=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.primary-port") - #mm_drivers=$(modemmanager_get_multivalue_field "${MODEM_STATUS}" "modem.generic.drivers") - mm_unlock_retries=$(modemmanager_get_multivalue_field "${MODEM_STATUS}" "modem.generic.unlock-retries" | awk '{print substr($2,2,length($2)-2)}') - if [ "$mm_unlock_required" = "sim-pin" ]; then - # Sometimes PIN is not correctly sent to modem - if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then - if [ "$mm_unlock_retries" -gt "1" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then - _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) locked, set PIN" - mmcli -a -m ${modem} -i $mm_generic_sim --pin=$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode) 2>&1 >/dev/null - sleep 20 - ifup $OMR_TRACKER_INTERFACE - fi - fi - elif [ "$mm_unlock_required" = "sim-puk" ] && [ "$mm_unlock_retries" -gt "1" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pukcode)" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then - _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) locked, set PUK" - mmcli -i $mm_generic_sim --puk=$(uci -q get network.$OMR_TRACKER_INTERFACE.pukcode) --pin=$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode) 2>&1 >/dev/null - sleep 30 - fi - fi - fi - if [ "$modemfind" = "0" ]; then - #_log "Can't find $OMR_TRACKER_INTERFACE in ModemManager, rescan modem..." - #/usr/bin/mmcli -S 2>&1 >/dev/null - #_log "Can't find $OMR_TRACKER_INTERFACE in ModemManager, restart modemmanager..." - _log "Can't find $OMR_TRACKER_INTERFACE in ModemManager" - #/etc/init.d/modemmanager restart - sleep 30 - fi - fi - #elif [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] && [ "$interface_available" = "false" ]; then - # for modem in $(timeout 3 mmcli -L | awk -F/ '{ print $6}' | awk '{print $1}'); do - # if [ -n "$(timeout 2 mmcli -m $modem -K | grep $OMR_TRACKER_DEVICE)" ]; then - # modem_device=$(timeout 2 mmcli -m $modem -K | grep 'modem.generic.device ' | awk '{print $3}') - # [ -n "$modem_device" ] && modem_interface=$(uci -q show network | grep $modem_device | awk -F. '{print $2}') - # [ -n "$modem_interface" ] && { - # _log "No answer from $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE), restart associed interface $modem_interface" - # ifdown $modem_interface - # sleep 5 - # ifup $modem_interface - # sleep 30 - # } - # fi - # done - #fi - - # This part must be done after modems restart because we have no idea when modems will be ready again... (another solution would be to check ModemManager status) - if [ "$OMR_TRACKER_PREV_STATUS" = "$OMR_TRACKER_STATUS" ]; then - exit 0 - fi - - if [ "$multipath_status" != "off" ] || ([ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ]); then - if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then - _log "$OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) switched off (interface up status: $interface_up - Tracker status: $OMR_TRACKER_STATUS)" - else - _log "$OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) switched off because $OMR_TRACKER_STATUS_MSG" - fi - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='down' - fi - #if [ "$(sysctl -n net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ]; then - # multipath "$OMR_TRACKER_DEVICE" off > /dev/null 2>&1 - #fi - if [ -n "$OMR_TRACKER_DEVICE_IP" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set down > /dev/null 2>&1 - fi - if [ -n "$OMR_TRACKER_DEVICE_IP6" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set down > /dev/null 2>&1 - fi - if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ] && [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ]; then - VPN_BASE_INTF="$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.baseintf)" - VPN_BASE_INTF_IP=$(ubus call network.interface.$VPN_BASE_INTF status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") - if [ -n "$VPN_BASE_INTF" ]; then - uci -q batch <<-EOF >/dev/null - set openvpn.$VPN_BASE_INTF.local=$VPN_BASE_INTF_IP - commit openvpn - EOF - fi - [ -z "VPN_BASE_INTF" ] && VPN_BASE_INTF="omr" - /etc/init.d/openvpn restart $VPN_BASE_INTF 2>&1 >/dev/null - fi - config_load openmptcprouter - config_foreach del_server_route server - config_foreach del_server_route6 server - #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then - - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - if ([ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ] || [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ]) && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw: $default_gw - Set routes (current: $(ip r) )" - config_load network - config_foreach set_route interface $OMR_TRACKER_INTERFACE - config_foreach set_route6 interface $OMR_TRACKER_INTERFACE - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New routes $(ip r)" - elif [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath)" = "master" ]; then - config_load network - config_foreach set_route interface $OMR_TRACKER_INTERFACE "no" - config_foreach set_route6 interface $OMR_TRACKER_INTERFACE "no" - elif [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$(ip r show table 991337 | grep "$OMR_TRACKER_DEVICE ")" ]; then - config_load network - config_foreach set_route interface $OMR_TRACKER_INTERFACE "no" - config_foreach set_route6 interface $OMR_TRACKER_INTERFACE "no" - fi - fi - if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set balancing route (current: $(ip r) )" - config_foreach set_server_all_routes server - config_foreach set_server_all_routes6 server - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set balancing route done (new: $(ip r) )" - fi - fi - - mail_alert="" - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)" - fi - [ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" - [ "$mail_alert" = "1" ] && [ -n "$(uci -q get mail.default.to)" ] && { - OMR_SYSNAME="$(uci -q get system.@system[0].hostname)" - if [ "$(uci -q get omr-tracker.defaults.mail_down_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_down_message)" != "" ]; then - mail_subject="$(uci -q get omr-tracker.defaults.mail_down_subject)" - mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` - mail_message="$(uci -q get omr-tracker.defaults.mail_down_message)" - mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"` - echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to) - else - echo -e "Subject: $OMR_SYSNAME: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is down\n\nConnection failure of $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) detected. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to) - fi - } - script_alert_down="" - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - script_alert_down="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.script_alert_down)" - fi - [ -n "$script_alert_down" ] && eval $script_alert_down - - restart_down="" - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - restart_down="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.restart_down)" - fi - [ -z "$restart_down" ] && restart_down="$(uci -q get omr-tracker.defaults.restart_down)" - [ "$restart_down" = "1" ] && { - _log "Restart $OMR_TRACKER_INTERFACE" - ifdown $OMR_TRACKER_INTERFACE 2>&1 >/dev/null - sleep 5 - ifup $OMR_TRACKER_INTERFACE 2>&1 >/dev/null - } - - if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] || [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ]; then - if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then - _log "$OMR_TRACKER_INTERFACE down" - else - _log "$OMR_TRACKER_INTERFACE down because $OMR_TRACKER_STATUS_MSG" - fi - if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then - config_load network - config_foreach set_route interface $OMR_TRACKER_INTERFACE - config_foreach set_route6 interface $OMR_TRACKER_INTERFACE - else - _log "Default gateway disabled, no default gateway set" - fi - if [ "$(uci -q get openmptcprouter.settings.shadowsocksudp)" = "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.shadowsocks)" = "up" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "" ] && [ "$(uci -q get shadowsocks-libev.hi1.mode)" = "tcp_and_udp" ] && [ "$(uci -q get shadowsocks-libev.sss0.obfs)" != "1" ]; then - _log "Tunnel down use ShadowSocks for UDP" - uci -q set shadowsocks-libev.ss_rules.redir_udp='hi1' - if /etc/init.d/shadowsocks-libev rules_exist ; then - /etc/init.d/shadowsocks-libev rules_down 2>&1 >/dev/null - /etc/init.d/shadowsocks-libev rules_up 2>&1 >/dev/null - fi - fi - if [ "$(uci -q get dsvpn.vpn.enable)" = "1" ]; then - _log "DSVPN down, restart it" - /etc/init.d/dsvpn restart 2>&1 >/dev/null - fi - if [ "$(uci -q get mlvpn.general.enable)" = "1" ]; then - _log "MLVPN down, restart it" - /etc/init.d/mlvpn restart 2>&1 >/dev/null - fi - if [ "$(uci -q get glorytun.vpn.enable)" = "1" ]; then - _log "Glorytun VPN down, restart it" - /etc/init.d/glorytun restart 2>&1 >/dev/null - fi - if [ "$(uci -q get glorytun-udp.vpn.enable)" = "1" ]; then - _log "Glorytun UDP VPN down, restart it" - /etc/init.d/glorytun-udp restart 2>&1 >/dev/null - fi - if [ "$(uci -q get openvpn.omr.enabled)" = "1" ]; then - _log "OpenVPN down, restart it" - /etc/init.d/openvpn restart omr 2>&1 >/dev/null - fi - config_load openmptcprouter - config_foreach disable_pihole server - #if [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ] || [ "$(uci -q get openmptcprouter.settings.vpn)" = "mlvpn" ]; then - if [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then - config_foreach set_server_default_route server - config_foreach set_server_default_route6 server - fi - fi - dns_flush - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.lc - fi - [ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter - #ubus call network reload - - # Set a little sleep after an interface error -# if [ -n "$RANDOM" ]; then -# sleep `expr $RANDOM % 100` -# else -# sleep `awk 'BEGIN{srand();print int(rand()*20)}'` -# fi - - exit 0 -fi if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] || [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ]; then if [ "$(uci -q get openmptcprouter.settings.shadowsocksudp)" = "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ -n "$(uci -q get shadowsocks-libev.sss0)" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "hi1" ]; then @@ -1029,6 +766,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om # Set VPN MTU if [ -n "$OMR_TRACKER_LATENCY" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]); then + _log "Set VPN MTU" local serverip=$(uci -q get shadowsocks-libev.sss0.server) [ -z "$serverip" ] && serverip=$(uci -q get shadowsocks-rust.sss0.server) [ -z "$serverip" ] && serverip=$(uci -q get v2ray.omrout.s_vless_address) diff --git a/mptcp/files/usr/share/omr/post-tracking.d/020-status b/omr-tracker/files/usr/share/omr/post-tracking.d/020-status similarity index 100% rename from mptcp/files/usr/share/omr/post-tracking.d/020-status rename to omr-tracker/files/usr/share/omr/post-tracking.d/020-status diff --git a/mptcp/files/usr/share/omr/post-tracking.d/021-latencies b/omr-tracker/files/usr/share/omr/post-tracking.d/021-latencies similarity index 100% rename from mptcp/files/usr/share/omr/post-tracking.d/021-latencies rename to omr-tracker/files/usr/share/omr/post-tracking.d/021-latencies diff --git a/mptcp/files/usr/share/omr/post-tracking.d/022-speedtest b/omr-tracker/files/usr/share/omr/post-tracking.d/022-speedtest similarity index 100% rename from mptcp/files/usr/share/omr/post-tracking.d/022-speedtest rename to omr-tracker/files/usr/share/omr/post-tracking.d/022-speedtest From 7343197a08424a3b90eb9485f8f30700bd5f45f0 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Mon, 1 Jul 2024 16:49:55 +0200 Subject: [PATCH 03/21] Don't use ping -B if not possible to bind on the interface in omr-tracker --- omr-tracker/files/bin/omr-tracker | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 734f8ce37..a6c1def2f 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -32,6 +32,7 @@ export OMR_TRACKER_IPV6 export OMR_TRACKER_PROTO export OMR_TRACKER_INTERVAL_TRIES export OMR_TRACKER_INTERVAL +export OMR_TRACKER_NO_BIND dscp=56 # set DSCP CS7 (56) in outgoing packets initial_hosts="$OMR_TRACKER_HOSTS" @@ -149,7 +150,7 @@ _ping() { [ -z "$host" ] && return local device=$2 local localip=$3 - if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "3g" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "qmi" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "ncm" ]); then + if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$OMR_TRACKER_NO_BIND" = "1" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "3g" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "qmi" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "ncm" ]); then ret=$(ping -I "${device}" \ -w "$OMR_TRACKER_TIMEOUT" \ -c "$OMR_TRACKER_COUNT" \ @@ -173,6 +174,8 @@ _ping() { -Q 184 \ "${host}" 2>&1 ) + bindcheck=$(echo "$ret" | grep "Address not available") + [ -n "$bindcheck" ] && OMR_TRACKER_NO_BIND=1 #loss=$(echo "$ret" | grep 'packet loss' | sed -ne 's/.*\([0-9]\+\)% packet loss.*/\1/p') loss=$(echo "$ret" | grep 'packet loss' | cut -d " " -f6 | sed 's/%//' | tr -d '\n') if [ -n "$loss" ] && [ "$loss" -ne 100 ]; then From 0b2d0560a6d6b372330b5c48f505428b3c50ba41 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Tue, 2 Jul 2024 14:30:54 +0200 Subject: [PATCH 04/21] Add patch to bcm27xx-utils for compilation with kernel 5.4 --- .../patches/0002-pinctrl-replace-reallocarray.patch | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 bcm27xx-utils/patches/0002-pinctrl-replace-reallocarray.patch diff --git a/bcm27xx-utils/patches/0002-pinctrl-replace-reallocarray.patch b/bcm27xx-utils/patches/0002-pinctrl-replace-reallocarray.patch new file mode 100644 index 000000000..d0191f620 --- /dev/null +++ b/bcm27xx-utils/patches/0002-pinctrl-replace-reallocarray.patch @@ -0,0 +1,11 @@ +--- a/pinctrl/pinctrl.c 2024-07-02 14:14:31.113459219 +0200 ++++ b/pinctrl/pinctrl.c 2024-07-02 14:14:44.533241981 +0200 +@@ -220,7 +220,7 @@ + if (!gpio_num_is_valid(gpio)) + return 1; + +- poll_gpios = reallocarray(poll_gpios, num_poll_gpios + 1, ++ poll_gpios = realloc(poll_gpios, num_poll_gpios + 1 * + sizeof(*poll_gpios)); + new_gpio = &poll_gpios[num_poll_gpios]; + new_gpio->num = num; From 0a876e4ce508be9456ef81ce6dd00f3c95f0a041 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:40:57 +0200 Subject: [PATCH 05/21] Remove help text in MPTCP interface --- luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index cf1647b3b..f89cf7d99 100644 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -4,7 +4,7 @@ local ifaces = sys.net:devices() local m, s, o local uname = nixio.uname() -m = Map("network", translate("MPTCP"), translate("Networks MPTCP settings. Visit http://multipath-tcp.org/pmwiki.php/Users/ConfigureMPTCP for help.")) +m = Map("network", translate("MPTCP"), translate("Networks MPTCP settings.")) local unameinfo = nixio.uname() or { } @@ -48,6 +48,10 @@ if uname.release:sub(1,3) == "6.6" then for dir in io.popen([[cd /usr/share/bpf/scheduler && ls -1 *.o | sed -e 's/.o//g' -e 's/mptcp_//g']]):lines() do o:value(dir, dir) end + -- bpf_burst => same as the default scheduler + -- bpf_red => sends all packets redundantly on all available subflows + -- bpf_first => always picks the first subflow to send data + -- bpf_rr => always picks the next available subflow to send data (round-robin) end -- if tonumber(uname.release:sub(1,4)) <= 5.15 then From 610f964b0a6e7413fca5e6c8649c7f861d70dad1 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:41:59 +0200 Subject: [PATCH 06/21] Set omr-6in4 only if VPN is up and some fixes --- omr-6in4/files/bin/omr-6in4 | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/omr-6in4/files/bin/omr-6in4 b/omr-6in4/files/bin/omr-6in4 index ab2163dd5..7e0747350 100755 --- a/omr-6in4/files/bin/omr-6in4 +++ b/omr-6in4/files/bin/omr-6in4 @@ -20,11 +20,11 @@ while true; do iface=$(uci -q get openvpn.omr.dev) fi [ -z "$addr" ] && addr=$(ubus call network.interface.omrvpn status | jsonfilter -q -e '@["ipv4-address"][0].address' | tr -d "\n") - if [ -n "$iface" ] && [ -d "/sys/class/net/$iface" ]; then - [ -z "$addr" ] && [ -n "$iface" ] && addr=$(ip -4 addr show dev $iface | grep inet | awk '{print $2}' | cut -d/ -f1 | tr -d "\n") + if [ -n "$iface" ] && [ -d "/sys/class/net/$iface" ] && [ "$(uci -q get openmptcprouter.omrvpn.state)" = "up" ]; then + [ -z "$addr" ] && [ -n "$iface" ] && addr=$(ip -4 addr show dev "$iface" | grep inet | awk '{print $2}' | cut -d/ -f1 | tr -d "\n") [ -z "$peer" ] && peer=$(ubus call network.interface.omrvpn status | jsonfilter -q -l 1 -e '@.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") - [ -z "$peer" ] && peer=$(ip -4 r list dev $iface | grep via | grep -v default | grep -v metric | grep -v / | awk '{print $1; exit}' | tr -d "\n") - [ -z "$peer" ] && peer=$(ip -4 r list dev $iface | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d "\n") + [ -z "$peer" ] && peer=$(ip -4 r list dev "$iface" | grep via | grep -v default | grep -v metric | grep -v / | awk '{print $1; exit}' | tr -d "\n") + [ -z "$peer" ] && peer=$(ip -4 r list dev "$iface" | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d "\n") [ -n "$addr" ] && [ -n "$peer" ] && { #logger -t "omr6in4" "addr: $addr - peer: $peer" if [ "$addr" != "$(uci -q get network.omr6in4.ipaddr)" ] || [ "$peer" != "$(uci -q get network.omr6in4.peeraddr)" ] || [ "$(ip -6 route show default dev 6in4-omr6in4 metric 1 | grep via)" = "" ]; then @@ -36,7 +36,7 @@ while true; do commit network EOF if [ -n "$(ip tunnel | grep omr6in4)" ]; then - ip tunnel change "6in4-omr6in4" mode sit local ${addr} remote ${peer} ttl 64 > /dev/null 2>&1 + ip tunnel change "6in4-omr6in4" mode sit local "${addr}" remote "${peer}" ttl 64 > /dev/null 2>&1 else ifup omr6in4 > /dev/null 2>&1 fi @@ -44,25 +44,27 @@ while true; do #ipv6_addr=$(ip -6 addr show dev 6in4-omr6in4 | grep inet | awk '{print $2'} | cut -d/ -f1 | tr -d "\n") #ipv6_gw=$(echo $ipv6_addr | sed 's/1$/2') ipv6_addr=$(ubus call network.interface.omr6in4 status | jsonfilter -q -l 1 -e '@["ipv6-address"][0].address' | tr -d "\n") - ip -6 addr add $ipv6_addr dev 6in4-omr6in4 > /dev/null 2>&1 + ip -6 addr add "$ipv6_addr" dev 6in4-omr6in4 > /dev/null 2>&1 ipv6_gw=$(ubus call network.interface.omr6in4 status | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n") [ "$ipv6_gw" = "::" ] && ipv6_gw='fe80::a00:1' [ -z "$ipv6_gw" ] && ipv6_gw='fe80::a00:1' #[ -z "$ipv6_gw" ] && ipv6_gw='fe80::aff:ff01' - ip -6 route add ${ipv6_gw} dev 6in4-omr6in4 > /dev/null 2>&1 + ip -6 route add "${ipv6_gw}" dev 6in4-omr6in4 > /dev/null 2>&1 ip -6 route 2002::/16 dev 6in4-omr6in4 > /dev/null 2>&1 - ip -6 route replace default via ${ipv6_gw} dev 6in4-omr6in4 metric 1 > /dev/null 2>&1 + ip -6 route replace default via "${ipv6_gw}" dev 6in4-omr6in4 metric 1 > /dev/null 2>&1 if [ "$(uci -q get openmptcprouter.settings.uci_route)" = "1" ]; then uci -q batch <<-EOF set network.omr6in4_route6_default=route6 set network.omr6in4_route6_default.interface=omr6in4 set network.omr6in4_route6_default.target='::' - set network.omr6in4_route6_default.gateway=$ipv6_gw + set network.omr6in4_route6_default.gateway="$ipv6_gw" commit network EOF fi fi } + else + ifdown omr6in4 > /dev/null 2>&1 fi sleep 10 done \ No newline at end of file From 85c57dca2955264fab38079e127bcd98be115224 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:42:43 +0200 Subject: [PATCH 07/21] openmptcprouter init fix no output --- .../root/etc/init.d/openmptcprouter | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter index 615f38ff8..f69dd5057 100755 --- a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter @@ -101,13 +101,13 @@ omr_set_settings() { fi if [ "$addlatency" = "0" ] && [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then - tc qdisc del dev ${ifname} root netem 2>&1 >/dev/null + tc qdisc del dev ${ifname} root netem >/dev/null 2>&1 fi if [ "$addlatency" != "0" ]; then if [ "$(tc qdisc show dev $ifname | grep delay)" = "" ]; then - tc qdisc add dev ${ifname} root netem delay ${addlatency}ms 2>&1 >/dev/null + tc qdisc add dev ${ifname} root netem delay ${addlatency}ms >/dev/null 2>&1 elif [ "$(tc qdisc show dev $ifname | awk '/delay/ { print $10 }' | sed 's/ms//')" != "$addlatency" ]; then - tc qdisc replace dev ${ifname} root netem delay ${addlatency}ms 2>&1 >/dev/null + tc qdisc replace dev ${ifname} root netem delay ${addlatency}ms >/dev/null 2>&1 fi fi fi @@ -165,7 +165,7 @@ start_service() { fi if [ "$(uci -q get openmptcprouter.settings.sfe_enabled)" = "1" ]; then - [ -z "$(lsmod | grep fast_classifier)" ] && modprobe -q fast_classifier 2>&1 >/dev/null + [ -z "$(lsmod | grep fast_classifier)" ] && modprobe -q fast_classifier >/dev/null 2>&1 if [ "$(uci -q get openmptcprouter.settings.sfe_bridge)" = "1" ]; then echo 1 >/sys/fast_classifier/skip_to_bridge_ingress else @@ -173,12 +173,12 @@ start_service() { fi if [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" = "0" ]; then sfe_ipv6=$(cat /sys/sfe_ipv6/debug_dev) - [ ! -f /dev/sfe_ipv6 ] && mknod /dev/sfe_ipv6 c $sfe_ipv6 0 2>&1 >/dev/null + [ ! -f /dev/sfe_ipv6 ] && mknod /dev/sfe_ipv6 c $sfe_ipv6 0 >/dev/null 2>&1 else rm -f /dev/sfe_ipv6 fi elif [ -d "/sys/module/fast_classifier" ]; then - rmmod fast_classifier 2>&1 >/dev/null + rmmod fast_classifier >/dev/null 2>&1 fi if [ "$(uci -q get openmptcprouter.settings.sipalg)" = "0" ]; then @@ -188,9 +188,9 @@ start_service() { set firewall.zone_vpn.auto_helper='0' commit firewall EOF - [ -n "$(lsmod | grep nf_nat_sip)" ] && rmmod nf_nat_sip 2>&1 >/dev/null + [ -n "$(lsmod | grep nf_nat_sip)" ] && rmmod nf_nat_sip >/dev/null 2>&1 sleep 2 - [ -n "$(lsmod | grep nf_conntrack_sip)" ] && rmmod nf_conntrack_sip 2>&1 >/dev/null + [ -n "$(lsmod | grep nf_conntrack_sip)" ] && rmmod nf_conntrack_sip >/dev/null 2>&1 else uci -q batch <<-EOF >/dev/null set firewall.zone_lan.auto_helper='1' @@ -198,9 +198,9 @@ start_service() { set firewall.zone_vpn.auto_helper='1' commit firewall EOF - modprobe -q nf_conntrack_sip 2>&1 >/dev/null + modprobe -q nf_conntrack_sip >/dev/null 2>&1 sleep 2 - modprobe -q nf_nat_sip 2>&1 >/dev/null + modprobe -q nf_nat_sip >/dev/null 2>&1 fi if [ "$(uci -q get rpcd.@rpcd[0].socket)" != "/var/run/ubus/ubus.sock" ]; then @@ -208,7 +208,7 @@ start_service() { set rpcd.@rpcd[0].socket='/var/run/ubus/ubus.sock' commit rpcd EOF - /etc/init.d/rpcd restart 2>&1 >/dev/null + /etc/init.d/rpcd restart >/dev/null 2>&1 fi if [ "$(pgrep ModemManager)" = "" ] && [ -f /etc/init.d/modemmanager ] && [ -n "$(uci -q show network | grep modemmanager)" ] && [ "$(uci -q openmptcprouter.settings.modemmanager)" != "0" ]; then _log "Can't find ModemManager, start it..." From b316155a6b3cacd0d2d1b3cf9e27e7db0a04d8fe Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:43:14 +0200 Subject: [PATCH 08/21] mptcp init fix no output --- mptcp/files/etc/init.d/mptcp | 60 +++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/mptcp/files/etc/init.d/mptcp b/mptcp/files/etc/init.d/mptcp index 8ca851e59..b109adf0a 100755 --- a/mptcp/files/etc/init.d/mptcp +++ b/mptcp/files/etc/init.d/mptcp @@ -60,7 +60,7 @@ global_multipath_settings() { else sed -i "s:^net.mptcp.enabled=[0-1]*:net.mptcp.enabled=${multipath_status}:" /etc/sysctl.d/zzz_openmptcprouter.conf fi - ip mptcp limits set add_addr_accepted $mptcp_add_addr_accepted subflows $mptcp_subflows 2>&1 >/dev/null + ip mptcp limits set add_addr_accepted $mptcp_add_addr_accepted subflows $mptcp_subflows >/dev/null 2>&1 #[ -z "$mptcp_debug" ] || sysctl -qew net.mptcp.mptcp_debug="$mptcp_debug" [ -z "$mptcp_checksum" ] || sysctl -qew net.mptcp.mptcp_checksum="$mptcp_checksum" [ -z "$mptcp_add_addr_timeout" ] || sysctl -qew net.mptcp.add_addr_timeout="$mptcp_add_addr_timeout" @@ -69,7 +69,7 @@ global_multipath_settings() { [ -z "$mptcp_pm_type" ] || sysctl -qew net.mptcp.pm_type="$mptcp_pm_type" if [ -n "$mptcp_scheduler" ]; then for scheduler in $(ls -1 /usr/share/bpf/scheduler/*.o); do - bpftool struct_ops register $scheduler 2>&1 >/dev/null + bpftool struct_ops register $scheduler >/dev/null 2>&1 done sysctl -qew net.mptcp.scheduler="$mptcp_scheduler" fi @@ -139,23 +139,25 @@ interface_multipath_settings() { uci -q set network.${config}.metric=$metric uci -q set openmptcprouter.${config}.metric=$metric config_get mode "$config" multipath + config_get disabled "$config" disabled + [ "$disabled" = "1" ] && mode="off" id=$metric [ -n "$iface" ] && { gro=$(uci -q get network.${config}.gro) - [ "$gro" = "1" ] && ethtool -K $iface gro on 2>&1 >/dev/null - [ "$gro" = "0" ] && ethtool -K $iface gro on 2>&1 >/dev/null + [ "$gro" = "1" ] && ethtool -K $iface gro on >/dev/null 2>&1 + [ "$gro" = "0" ] && ethtool -K $iface gro on >/dev/null 2>&1 gso=$(uci -q get network.${config}.gso) - [ "$gso" = "1" ] && ethtool -K $iface gso on 2>&1 >/dev/null - [ "$gso" = "0" ] && ethtool -K $iface gso on 2>&1 >/dev/null + [ "$gso" = "1" ] && ethtool -K $iface gso on >/dev/null 2>&1 + [ "$gso" = "0" ] && ethtool -K $iface gso on >/dev/null 2>&1 lro=$(uci -q get network.${config}.lro) - [ "$lro" = "1" ] && ethtool -K $iface lro on 2>&1 >/dev/null - [ "$lro" = "0" ] && ethtool -K $iface lro on 2>&1 >/dev/null + [ "$lro" = "1" ] && ethtool -K $iface lro on >/dev/null 2>&1 + [ "$lro" = "0" ] && ethtool -K $iface lro on >/dev/null 2>&1 ufo=$(uci -q get network.${config}.ufo) - [ "$ufo" = "1" ] && ethtool -K $iface ufo on 2>&1 >/dev/null - [ "$ufo" = "0" ] && ethtool -K $iface ufo on 2>&1 >/dev/null + [ "$ufo" = "1" ] && ethtool -K $iface ufo on >/dev/null 2>&1 + [ "$ufo" = "0" ] && ethtool -K $iface ufo on >/dev/null 2>&1 tso=$(uci -q get network.${config}.tso) - [ "$tso" = "1" ] && ethtool -K $iface tso on 2>&1 >/dev/null - [ "$tso" = "0" ] && ethtool -K $iface tso on 2>&1 >/dev/null + [ "$tso" = "1" ] && ethtool -K $iface tso on >/dev/null 2>&1 + [ "$tso" = "0" ] && ethtool -K $iface tso on >/dev/null 2>&1 } [ "$mode" = "" ] && { mode="$(uci -q get openmptcprouter.${config}.multipath)" @@ -176,7 +178,7 @@ interface_multipath_settings() { [ -z "$mptcpmintf" ] && mptcpmintf="$config" uci -q set network.${config}.defaultroute=0 uci -q set network.${config}.peerdns=0 - echo '' > /etc/resolv.conf 2>&1 >/dev/null + echo '' > /etc/resolv.conf >/dev/null 2>&1 } [ "$mode" = "master" ] && { # Force that only one interface is master @@ -309,18 +311,18 @@ interface_multipath_settings() { else [ -n "$ipaddr" ] && [ -z "$(ip rule show from $ipaddr table $id)" ] && ip rule add from $ipaddr table $id pref 0 [ -z "$(ip rule show oif $iface table $id)" ] && ip rule add oif $iface table $id pref 0 - ip route replace $network/$netmask dev $iface scope link metric $id $initcwrwnd 2>&1 >/dev/null - ip route replace $network/$netmask dev $iface scope link table $id $initcwrwnd 2>&1 >/dev/null - ip route replace default via $gateway dev $iface table $id $initcwrwnd 2>&1 >/dev/null - [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && ip route replace default via $gateway dev $iface metric $id $initcwrwnd 2>&1 >/dev/null - #ip route flush cache $id 2>&1 >/dev/null + ip route replace $network/$netmask dev $iface scope link metric $id $initcwrwnd >/dev/null 2>&1 + ip route replace $network/$netmask dev $iface scope link table $id $initcwrwnd >/dev/null 2>&1 + ip route replace default via $gateway dev $iface table $id $initcwrwnd >/dev/null 2>&1 + [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && ip route replace default via $gateway dev $iface metric $id $initcwrwnd >/dev/null 2>&1 + #ip route flush cache $id >/dev/null 2>&1 fi #config_get mode "$config" multipath "" #[ "$mode" = "" ] && mode="$(uci -q get openmptcprouter.${config}.multipath)" #[ "$mode" = "master" ] && { # #echo "ip route replace default via $gateway dev $iface" - # ip route replace default via $gateway dev $iface 2>&1 >/dev/null + # ip route replace default via $gateway dev $iface >/dev/null 2>&1 #} if [ "$txqueuelen" != "" ]; then ifconfig $iface txqueuelen $txqueuelen > /dev/null 2>&1 @@ -397,18 +399,18 @@ interface_multipath_settings() { commit network EOF else - [ -n "$ip6addr" ] && ip -6 rule add from $ip6addr table 6$id pref 0 2>&1 >/dev/null + [ -n "$ip6addr" ] && ip -6 rule add from $ip6addr table 6$id pref 0 >/dev/null 2>&1 [ -z "$(ip rule show pref 0 table 6$id oif $iface)" ] && ip rule add oif $iface table 6$id pref 0 - ip -6 route replace $network6/$netmask6 dev $iface scope link metric 6$id $initcwrwnd 2>&1 >/dev/null - ip -6 route replace $network6/$netmask6 dev $iface scope link table 6$id $initcwrwnd 2>&1 >/dev/null - ip -6 route replace default via $gateway6 dev $iface table 6$id $initcwrwnd 2>&1 >/dev/null - [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && ip -6 route replace default via $gateway6 dev $iface metric 6$id $initcwrwnd 2>&1 >/dev/null - #ip -6 route flush cache 6$id 2>&1 >/dev/null + ip -6 route replace $network6/$netmask6 dev $iface scope link metric 6$id $initcwrwnd >/dev/null 2>&1 + ip -6 route replace $network6/$netmask6 dev $iface scope link table 6$id $initcwrwnd >/dev/null 2>&1 + ip -6 route replace default via $gateway6 dev $iface table 6$id $initcwrwnd >/dev/null 2>&1 + [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && ip -6 route replace default via $gateway6 dev $iface metric 6$id $initcwrwnd >/dev/null 2>&1 + #ip -6 route flush cache 6$id >/dev/null 2>&1 fi #config_get mode "$config" multipath "off" #[ "$mode" = "master" ] && { - # ip -6 route replace default via $gateway6 dev $iface 2>&1 >/dev/null + # ip -6 route replace default via $gateway6 dev $iface >/dev/null 2>&1 #} #[ "$mode" = "off" ] && { # ifconfig $iface txqueuelen 50 > /dev/null 2>&1 @@ -485,7 +487,7 @@ add_route() { [ -n "$iface" ] && routeset="$routeset dev $iface" logger -t "MPTCP" "Add route $routeset" [ -n "$routeset" ] && { - ip route replace ${routeset} 2>&1 >/dev/null + ip route replace ${routeset} >/dev/null 2>&1 } } @@ -510,7 +512,7 @@ add_route6() { [ -n "$iface" ] && routeset="$routeset dev $iface" logger -t "MPTCP" "Add IPv6 route $routeset" [ -n "$routeset" ] && { - ip -6 route replace ${routeset} 2>&1 >/dev/null + ip -6 route replace ${routeset} >/dev/null 2>&1 } } @@ -524,7 +526,7 @@ start_service() { local id intfmaster . /lib/functions.sh . /lib/functions/network.sh - #[ -n "$intf" ] && multipath "${intf}" off 2>&1 >/dev/null + #[ -n "$intf" ] && multipath "${intf}" off >/dev/null 2>&1 global_multipath_settings [ -n "$(ubus call system board | jsonfilter -e '@.board_name' | grep '3-model-b')" ] && [ "$(ip link show eth0 | grep UP)" = "" ] && { From 806c37be00f160591733174423506ec3047d133a Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:43:34 +0200 Subject: [PATCH 09/21] Small fixes in multipath command --- mptcp/files/usr/bin/multipath | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mptcp/files/usr/bin/multipath b/mptcp/files/usr/bin/multipath index 40cca3ab2..400517ac0 100755 --- a/mptcp/files/usr/bin/multipath +++ b/mptcp/files/usr/bin/multipath @@ -137,7 +137,7 @@ else [ -n "$endpoint" ] && oldintfs=$(echo "${endpoint}" | grep "dev if" | awk '{ print $3 }') [ -n "$oldintfs" ] && { for oldintf in $oldintfs; do - ip mptcp endpoint delete id $oldintf 2>&1 >/dev/null + ip mptcp endpoint delete id $oldintf >/dev/null 2>&1 done endpoint="$(ip mptcp endpoint show)" } @@ -158,20 +158,20 @@ else fi [ -z "$ID" ] && [ -n "$IP" ] && [ -n "$endpoint" ] && ID=$(echo "${endpoint}" show | grep "$IP " | awk '{print $3}') [ -n "$endpoint" ] && RMID=$(echo "${endpoint}" | grep '::ffff' | awk '{ print $3 }') - [ -n "$RMID" ] && ip mptcp endpoint delete id $RMID 2>&1 >/dev/null + [ -n "$RMID" ] && ip mptcp endpoint delete id $RMID >/dev/null 2>&1 fi case $TYPE in "off") [ -n "$ID" ] && { for i in $ID; do - ip mptcp endpoint delete id $i 2>&1 >/dev/null + ip mptcp endpoint delete id $i >/dev/null 2>&1 done } exit 0;; "on") [ -n "$ID" ] && { for i in $ID; do - ip mptcp endpoint delete id $i 2>&1 >/dev/null + ip mptcp endpoint delete id $i >/dev/null 2>&1 done } for i in $IP; do @@ -181,7 +181,7 @@ else "signal") [ -n "$ID" ] && { for i in $ID; do - ip mptcp endpoint delete id $i 2>&1 >/dev/null + ip mptcp endpoint delete id $i >/dev/null 2>&1 done } for i in $IP; do @@ -192,7 +192,7 @@ else "backup") [ -n "$ID" ] && { for i in $ID; do - ip mptcp endpoint delete id $i 2>&1 >/dev/null + ip mptcp endpoint delete id $i >/dev/null 2>&1 done } for i in $IP; do From 1457411c71f4c62622485b014f92922c1422c1db Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:44:31 +0200 Subject: [PATCH 10/21] Prevent ndpi-netfilter2 on linux 6.10 --- ndpi-netfilter2/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ndpi-netfilter2/Makefile b/ndpi-netfilter2/Makefile index 74d517750..0348c6ae3 100644 --- a/ndpi-netfilter2/Makefile +++ b/ndpi-netfilter2/Makefile @@ -41,7 +41,7 @@ define Package/iptables-mod-ndpi # DEPENDS:=+iptables +iptables-mod-conntrack-extra +kmod-ipt-ndpi +libpcap # DEPENDS:=+iptables +kmod-ipt-ndpi +libpcap @(LINUX_5_4||LINUX_5_15||TARGET_x86_64) # DEPENDS:=+iptables +kmod-ipt-ndpi +libpcap @(LINUX_5_4||LINUX_5_15) @!TARGET_ramips - DEPENDS:=+iptables +kmod-ipt-ndpi +libpcap @!TARGET_ramips @!LINUX_6_6 + DEPENDS:=+iptables +kmod-ipt-ndpi +libpcap @!TARGET_ramips @!LINUX_6_6 @!LINUX_6_10 MAINTAINER:=Ycarus (Yannick Chabanois) endef @@ -83,7 +83,7 @@ define KernelPackage/ipt-ndpi TITLE:= nDPI net netfilter module # DEPENDS:=+kmod-nf-conntrack +kmod-nf-conntrack-netlink +kmod-ipt-compat-xtables +libpcap @(LINUX_5_4||LINUX_5_15||TARGET_x86_64) # DEPENDS:=+kmod-nf-conntrack +kmod-nf-conntrack-netlink +kmod-ipt-compat-xtables +libpcap @(LINUX_5_4||LINUX_5_15) @!TARGET_ramips - DEPENDS:=+kmod-nf-conntrack +kmod-nf-conntrack-netlink +(LINUX_5_4||LINUX_6_1):kmod-ipt-compat-xtables +libpcap @!TARGET_ramips @!LINUX_6_6 + DEPENDS:=+kmod-nf-conntrack +kmod-nf-conntrack-netlink +(LINUX_5_4||LINUX_6_1):kmod-ipt-compat-xtables +libpcap @!TARGET_ramips @!LINUX_6_6 @!LINUX_6_10 # DEPENDS:=+kmod-nf-conntrack +kmod-nf-conntrack-netlink +kmod-ipt-compat-xtables +libpcap KCONFIG:=CONFIG_NF_CONNTRACK_LABELS=y \ CONFIG_NETFILTER_XT_MATCH_CONNLABEL=y From ad1cbe695892cab2533e055184e4e07530ec91b1 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:45:11 +0200 Subject: [PATCH 11/21] omr-schedule service script fix no output --- .../usr/share/omr/schedule.d/010-services | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/omr-schedule/files/usr/share/omr/schedule.d/010-services b/omr-schedule/files/usr/share/omr/schedule.d/010-services index bfdef06ee..260da9f20 100755 --- a/omr-schedule/files/usr/share/omr/schedule.d/010-services +++ b/omr-schedule/files/usr/share/omr/schedule.d/010-services @@ -9,44 +9,44 @@ # If a service is down, force restart it if [ -f /etc/init.d/shadowsocks-libev ] && [ "$(pgrep -f omr-tracker-ss)" = "" ] && [ "$(pgrep -f ss-redir)" = "" ] && [ "$(pgrep -f ss-local)" = "" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.server)" != "" ] && [ "$(uci -q get shadowsocks-libev.sss0.server)" != "192.18.1.3" ] && [ "$(uci -q get shadowsocks-libev.sss0.key)" != "" ]; then _log "Can't find Shadowsocks, restart it..." - /etc/init.d/shadowsocks-libev restart 2>&1 >/dev/null + /etc/init.d/shadowsocks-libev restart >/dev/null 2>&1 sleep 5 fi if [ -f /etc/init.d/shadowsocks-rust ] && [ "$(pgrep -f omr-tracker-ss)" = "" ] && [ "$(pgrep -f sslocal)" = "" ] && [ "$(pgrep -f sslocal)" = "" ] && [ "$(uci -q get shadowsocks-rust.sss0.disabled)" != "1" ] && [ "$(uci -q get shadowsocks-rust.sss0.server)" != "" ] && [ "$(uci -q get shadowsocks-rust.sss0.server)" != "192.18.1.3" ] && [ "$(uci -q get shadowsocks-rust.sss0.key)" != "" ]; then _log "Can't find Shadowsocks Rust, restart it..." - /etc/init.d/shadowsocks-rust restart 2>&1 >/dev/null + /etc/init.d/shadowsocks-rust restart >/dev/null 2>&1 sleep 5 fi if [ -f /etc/init.d/glorytun ] && [ "$(pgrep glorytun)" = "" ] && [ "$(uci -q get glorytun.vpn.enable)" = "1" ] && [ -f /etc/init.d/glorytun ] && [ "$(uci -q get glorytun.vpn.key)" != "" ]; then _log "Can't find Glorytun, restart it..." - /etc/init.d/glorytun restart 2>&1 >/dev/null + /etc/init.d/glorytun restart >/dev/null 2>&1 sleep 5 fi if [ -f /etc/init.d/glorytun-udp ] && [ "$(pgrep glorytun-udp)" = "" ] && [ "$(uci -q get glorytun-usp.vpn.enable)" = "1" ] && [ -f /etc/init.d/glorytun-udp ] && [ "$(uci -q get glorytun-udp.vpn.key)" != "" ]; then _log "Can't find Glorytun UDP, restart it..." - /etc/init.d/glorytun-udp restart 2>&1 >/dev/null + /etc/init.d/glorytun-udp restart >/dev/null 2>&1 sleep 5 fi if [ -f /etc/init.d/dnsmasq ]; then if [ "$(pgrep -f dnsmasq)" = "" ]; then _log "Can't find dnsmasq, restart it..." - /etc/init.d/dnsmasq restart 2>&1 >/dev/null + /etc/init.d/dnsmasq restart >/dev/null 2>&1 sleep 5 elif [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ] && [ -n "$(dig +timeout=4 +tries=1 openmptcprouter.com 2>&1 | grep -i 'connection refused')" ]; then _log "Can't resolve via dnsmasq, restart it..." - /etc/init.d/dnsmasq restart 2>&1 >/dev/null + /etc/init.d/dnsmasq restart >/dev/null 2>&1 sleep 5 fi fi if [ -f /etc/init.d/unbound ] && [ "$(uci -q get unbound.@unbound[0].enabled)" = "1" ]; then if [ "$(pgrep -f unbound)" = "" ]; then _log "Can't find unbound, restart it..." - /etc/init.d/unbound restart 2>&1 >/dev/null + /etc/init.d/unbound restart >/dev/null 2>&1 sleep 5 elif [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ] && [ "$(uci -q get unbound.ub_main.listen_port)" = "5353" ] && [ -n "$(dig +timeout=4 +tries=1 openmptcprouter.com -p 5353 | grep 'ANSWER: 0')" ]; then _log "Can't resolve via unbound, restart it..." - /etc/init.d/unbound restart 2>&1 >/dev/null + /etc/init.d/unbound restart >/dev/null 2>&1 sleep 5 fi fi @@ -60,70 +60,70 @@ if [ "$(pgrep openvpn)" = "" ] && [ -f /etc/init.d/openvpn ]; then config_foreach openvpn_enabled openvpn if [ "$openvpn_enable" = "1" ]; then _log "Can't find OpenVPN, restart it" - /etc/init.d/openvpn restart 2>&1 >/dev/null + /etc/init.d/openvpn restart >/dev/null 2>&1 sleep 5 fi fi if [ "$(pgrep mlvpn)" = "" ] && [ "$(uci -q get mlvpn.general.enable)" = "1" ] && [ -f /etc/init.d/mlvpn ] && [ "$(uci -q get mlvpn.general.password)" != "" ]; then _log "Can't find MLVPN, restart it..." - /etc/init.d/mlvpn restart 2>&1 >/dev/null + /etc/init.d/mlvpn restart >/dev/null 2>&1 sleep 5 fi if [ "$(pgrep dsvpn)" = "" ] && [ "$(uci -q get dsvpn.vpn.enable)" = "1" ] && [ -f /etc/init.d/dsvpn ] && [ "$(uci -q get dsvpn.vpn.key)" != "" ]; then _log "Can't find DSVPN, restart it..." - /etc/init.d/dsvpn restart 2>&1 >/dev/null + /etc/init.d/dsvpn restart >/dev/null 2>&1 sleep 5 fi if [ "$(pgrep -f v2ray)" = "" ] && [ "$(uci -q get v2ray.main.enabled)" = "1" ] && [ -f /etc/init.d/v2ray ]; then _log "Can't find V2Ray, restart it..." - /etc/init.d/v2ray restart 2>&1 >/dev/null + /etc/init.d/v2ray restart >/dev/null 2>&1 sleep 5 fi if [ "$(pgrep -f xray)" = "" ] && [ "$(uci -q get xray.main.enabled)" = "1" ] && [ -f /etc/init.d/xray ]; then _log "Can't find XRay, restart it..." - /etc/init.d/xray restart 2>&1 >/dev/null + /etc/init.d/xray restart >/dev/null 2>&1 sleep 5 fi if [ "$(pgrep miniupnpd)" = "" ] && [ "$(uci -q get upnpd.config.enabled)" = "1" ] && [ -f /etc/init.d/miniupnpd ]; then _log "Can't find miniupnpd, restart it..." - /etc/init.d/miniupnpd restart 2>&1 >/dev/null + /etc/init.d/miniupnpd restart >/dev/null 2>&1 sleep 5 fi if [ "$(pgrep rpcd)" = "" ] && [ -f /etc/init.d/rpcd ]; then _log "Can't find rpcd, restart it..." - /etc/init.d/rpcd restart 2>&1 >/dev/null + /etc/init.d/rpcd restart >/dev/null 2>&1 sleep 5 fi if [ "$(pgrep uhttpd)" = "" ] && [ -f /etc/init.d/uhttpd ]; then _log "Can't find uhttpd, restart it..." - /etc/init.d/uhttpd restart 2>&1 >/dev/null + /etc/init.d/uhttpd restart >/dev/null 2>&1 sleep 5 fi if [ -z "$(pgrep ModemManager)" ] && [ -f /etc/init.d/modemmanager ] && [ -n "$(uci -q show network | grep modemmanager)" ]; then _log "Can't find ModemManager, restart it..." - /etc/init.d/modemmanager restart 2>&1 >/dev/null + /etc/init.d/modemmanager restart >/dev/null 2>&1 sleep 5 elif [ -n "$(pgrep ModemManager)" ] && [ -f /etc/init.d/modemmanager ] && [ -n "$(uci -q show network | grep modemmanager)" ] && [ -z "$(timeout 2 mmcli -L)" ]; then _log "ModemManager doesn't answer, restart it..." - /etc/init.d/modemmanager restart 2>&1 >/dev/null + /etc/init.d/modemmanager restart >/dev/null 2>&1 sleep 5 #elif [ -n "$(pgrep ModemManager)" ] && [ -f /etc/init.d/modemmanager ] && [ -z "$(uci -q show network | grep modemmanager)" ]; then # _log "ModemManager not used, stop it..." -# /etc/init.d/modemmanager stop 2>&1 >/dev/null +# /etc/init.d/modemmanager stop >/dev/null 2>&1 # sleep 5 fi if [ "$(uci -q get v2ray.main.enabled)" = "1" ] && [ -f /etc/init.d/v2ray ] && [ "$(pgrep -f omr-tracker-v2ray)" = "" ] && [ "$(pgrep -f '/etc/init.d/omr-tracker')" = "" ]; then _log "Can't find omr-tracker-v2ray, restart omr-tracker..." - /etc/init.d/omr-tracker restart 2>&1 >/dev/null + /etc/init.d/omr-tracker restart >/dev/null 2>&1 fi if [ "$(uci -q get xray.main.enabled)" = "1" ] && [ -f /etc/init.d/xray ] && [ "$(pgrep -f omr-tracker-xray)" = "" ] && [ "$(pgrep -f '/etc/init.d/omr-tracker')" = "" ]; then _log "Can't find omr-tracker-xray, restart omr-tracker..." - /etc/init.d/omr-tracker restart 2>&1 >/dev/null + /etc/init.d/omr-tracker restart >/dev/null 2>&1 fi set_get_config() { @@ -176,19 +176,19 @@ multipath_fix() { config_get multipath "$1" multipath [ "$multipath" != "off" ] && return interface="$(ifstatus $1 | jsonfilter -q -e '@.l3_device' | tr -d '\n')" - [ -n "$interface" ] && [ -z "$(multipath $interface | grep deactivated)" ] && /etc/init.d/mptcp reload $interface 2>&1 >/dev/null + [ -n "$interface" ] && [ -z "$(multipath $interface | grep deactivated)" ] && /etc/init.d/mptcp reload $interface >/dev/null 2>&1 } config_load network config_foreach multipath_fix interface if [ -f /etc/init.d/shadowsocks-libev ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.key)" != "" ] && [ "$(uci -q get shadowsocks-libev.sss0.server)" != "" ] && [ "$(uci -q get shadowsocks-libev.sss0.server)" != "192.168.1.3" ] && [ "$(pgrep -f omr-tracker-ss)" = "" ] && [ "$(pgrep -f '/etc/init.d/omr-tracker')" = "" ]; then _log "Can't find omr-tracker-ss for Shadowsocks libev, restart omr-tracker..." - /etc/init.d/omr-tracker restart 2>&1 >/dev/null + /etc/init.d/omr-tracker restart >/dev/null 2>&1 fi if [ -f /etc/init.d/shadowsocks-rust ] && [ "$(uci -q get shadowsocks-rust.sss0.disabled)" != "1" ] && [ "$(uci -q get shadowsocks-rust.sss0.key)" != "" ] && [ "$(uci -q get shadowsocks-rust.sss0.server)" != "" ] && [ "$(uci -q get shadowsocks-libev.rust.server)" != "192.168.1.3" ] && [ "$(pgrep -f omr-tracker-ss)" = "" ] && [ "$(pgrep -f '/etc/init.d/omr-tracker')" = "" ]; then _log "Can't find omr-tracker-ss for Shadowsocks Rust, restart omr-tracker..." - /etc/init.d/omr-tracker restart 2>&1 >/dev/null + /etc/init.d/omr-tracker restart >/dev/null 2>&1 fi if [ "$(uci -q get glorytun.vpn.enable)" = "1" ] && [ "$(uci -q get glorytun.vpn.key)" = "" ]; then @@ -218,14 +218,14 @@ fi if [ -f /etc/init.d/omr-bypass ] && (([ -e /usr/sbin/iptables-nft-save ] && [ "$(iptables-nft-save 2>/dev/null | grep omr-bypass)" = "" ]) || [ "$(iptables-save 2>/dev/null | grep omr-bypass)" = "" ]) && [ "$(pgrep -f omr-bypass)" = "" ]; then _log "Can't find omr-bypass rules, restart omr-bypass..." - /etc/init.d/omr-bypass start 2>&1 >/dev/null + /etc/init.d/omr-bypass start >/dev/null 2>&1 sleep 5 fi if [ -f /etc/backup/installed_packages.txt ] && [ -n "$(grep overlay /etc/backup/installed_packages.txt)" ] && ([ "$(uci -q get openmptcprouter.settings.sysupgrade_lc)" = "" ] || [ $(($(date +"%s") + $((30 + RANDOM % 31)) - $(uci -q get openmptcprouter.settings.sysupgrade_lc))) -gt 3600 ]) && [ $(($(date +"%s") - $(stat -c "%Y" /etc/backup/installed_packages.txt))) -gt 86400 ]; then _log "Reinstall packages..." uci -q set openmptcprouter.settings.sysupgrade_lc=$(date +"%s") - /etc/init.d/sysupgrade restart 2>&1 >/dev/null + /etc/init.d/sysupgrade restart >/dev/null 2>&1 sleep 10 fi From 60f552fd68e3281ed4b1daec29cb7377def440a8 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:46:32 +0200 Subject: [PATCH 12/21] Some changes in omr-tracker and post-tracking scripts --- omr-tracker/files/bin/omr-tracker | 13 +- omr-tracker/files/bin/omr-tracker-server | 4 +- omr-tracker/files/etc/init.d/omr-tracker | 2 + .../share/omr/post-tracking.d/001-initialize | 12 +- .../usr/share/omr/post-tracking.d/002-error | 54 +++---- .../usr/share/omr/post-tracking.d/003-up | 137 +++++++++--------- .../usr/share/omr/post-tracking.d/020-status | 63 ++++---- .../share/omr/post-tracking.d/021-latencies | 15 +- .../share/omr/post-tracking.d/022-speedtest | 1 + 9 files changed, 157 insertions(+), 144 deletions(-) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index a6c1def2f..937b85602 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -63,6 +63,7 @@ _update_rto() { if [ -z "$srtt" ]; then srtt=$1 rttvar=$(echo "$(($1 / 2))" | cut -d. -f1) + #" else diff=$((srtt - $1)) rttvar=$(echo "$(((75 * rttvar + 25 * (diff >= 0 ? diff : -diff)) / 100))" | cut -d. -f1) @@ -113,7 +114,7 @@ _ping_server() { statusp=$? if $(exit $statusp); then serverip_ping=true - break + return fi fi } @@ -136,7 +137,7 @@ _httping_server() { statusp=$? if $(exit $statusp); then serverip_ping=true - break + return fi fi } @@ -150,7 +151,7 @@ _ping() { [ -z "$host" ] && return local device=$2 local localip=$3 - if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$OMR_TRACKER_NO_BIND" = "1" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "3g" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "qmi" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "ncm" ]); then + if [ -n "$OMR_TRACKER_INTERFACE" ] && { [ "$OMR_TRACKER_NO_BIND" = "1" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "3g" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "qmi" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "ncm" ]; }; then ret=$(ping -I "${device}" \ -w "$OMR_TRACKER_TIMEOUT" \ -c "$OMR_TRACKER_COUNT" \ @@ -323,7 +324,7 @@ while true; do OMR_TRACKER_DEVICE_GATEWAY=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | awk '/via/ {print $3;exit}' | tr -d "\n") fi fi - if ([ "$OMR_TRACKER_IPV6" = "1" ] || [ "$OMR_TRACKER_IPV6" = "auto" ]) && ([ "$OMR_TRACKER_FAMILY" = "ipv6" ] || [ "$OMR_TRACKER_FAMILY" = "ipv4ipv6" ]); then + if { [ "$OMR_TRACKER_IPV6" = "1" ] || [ "$OMR_TRACKER_IPV6" = "auto" ]; } && { [ "$OMR_TRACKER_FAMILY" = "ipv6" ] || [ "$OMR_TRACKER_FAMILY" = "ipv4ipv6" ]; }; then #OMR_TRACKER_DEVICE_IP6=$(ip -6 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}') #if [ -z "$OMR_TRACKER_DEVICE_IP6" ]; then OMR_TRACKER_DEVICE_IP6=$(ip -6 addr show dev "$OMR_TRACKER_DEVICE" scope global | sort -r | grep -m 1 inet6 | awk '{print $2}' | cut -d'/' -s -f1) @@ -349,7 +350,7 @@ while true; do fi # execute specific tracker - if ([ "$OMR_TRACKER_FAMILY" = "ipv4" ] || [ "$OMR_TRACKER_FAMILY" = "ipv4ipv6" ]) && [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then + if { [ "$OMR_TRACKER_FAMILY" = "ipv4" ] || [ "$OMR_TRACKER_FAMILY" = "ipv4ipv6" ]; } && [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then # setup loop variable if [ "$OMR_TRACKER_PREV_STATUS" = "ERROR" ]; then tries="$OMR_TRACKER_TRIES_UP" @@ -557,7 +558,7 @@ while true; do sleep "${OMR_TRACKER_INTERVAL_TRIES:-1}" done fi - if [ "$OMR_TRACKER_STATUS" = "ERROR" ] && ([ -z "$OMR_TRACKER_DEVICE_IP" ] || [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ -z "$OMR_TRACKER_DEVICE_IP6" ] || [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ]); then + if [ "$OMR_TRACKER_STATUS" = "ERROR" ] && { [ -z "$OMR_TRACKER_DEVICE_IP" ] || [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ -z "$OMR_TRACKER_DEVICE_IP6" ] || [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ]; }; then [ -z "$OMR_TRACKER_STATUS_MSG" ] && OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_INTERFACE may have ip issues" [ -z "$OMR_TRACKER_DEVICE_IP" ] && OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_STATUS_MSG, interface have no IPv4" [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ] && OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_STATUS_MSG, interface have no IPv4 gateway" diff --git a/omr-tracker/files/bin/omr-tracker-server b/omr-tracker/files/bin/omr-tracker-server index 39f0d48de..fe7fc0b12 100755 --- a/omr-tracker/files/bin/omr-tracker-server +++ b/omr-tracker/files/bin/omr-tracker-server @@ -320,7 +320,7 @@ _check_master() { /etc/init.d/unbound restart >/dev/null 2>/dev/null /etc/init.d/dnsmasq restart >/dev/null 2>/dev/null } - break + return } } @@ -507,7 +507,7 @@ _check_backup() { /etc/init.d/unbound restart >/dev/null 2>/dev/null /etc/init.d/dnsmasq restart >/dev/null 2>/dev/null } - [ "$server_ping" = true ] && break + [ "$server_ping" = true ] && return } } diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index ee8f27291..1dd50002b 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -91,12 +91,14 @@ _launch_tracker() { config_get gateway "$1" gateway config_get ipv6 "$1" ipv6 config_get proto "$1" proto + config_get disabled "$1" disabled #[ -z "$ifname" ] || [ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "glorytun" ] && [ "$1" != "omrvpn" ] && [ "$( uci -q get openmptcprouter.$1.multipathvpn)" != "1" ] && return ([ -z "$multipath" ] || [ "$multipath" = "off" ]) && [ "$1" != "glorytun" ] && [ "$1" != "omrvpn" ] && [ "$( uci -q get openmptcprouter.$1.multipathvpn)" != "1" ] && return [ "$1" = "omrvpn" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" = "none" ] && return [ "${ifenabled}" = "0" ] && return [ "${enabled}" = "0" ] && return + [ "${disabled}" = "1" ] && return [ -z "${hosts}" ] && [ "$type" != "none" ] && return ifstatus=$(ifstatus "$1" | jsonfilter -q -e '@["up"]') ifdevice=$(ifstatus "$1" | jsonfilter -q -e '@["device"]') diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize b/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize index d9ef59c14..7d58e5d9a 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize @@ -1,14 +1,20 @@ +#!/bin/sh # Set default multipath status -[ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null -[ "$OMR_TRACKER_INTERFACE" = "omr6in4" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null +[ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && multipath "$OMR_TRACKER_DEVICE" off >/dev/null 2>&1 +[ "$OMR_TRACKER_INTERFACE" = "omr6in4" ] && multipath "$OMR_TRACKER_DEVICE" off >/dev/null 2>&1 if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$OMR_TRACKER_INTERFACE" != "omr6in4" ]; then metric="$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" - if [ -z "$metric" ] || ([ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]) || ([ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]); then + if [ -z "$metric" ] || { [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]; } || { [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]; }; then _log "Routes not correctly set for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE table $metric) with IPs $OMR_TRACKER_DEVICE_IP $OMR_TRACKER_DEVICE_IP6" /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" /etc/init.d/omr-tracker restart exit 0 fi + if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.disabled)" = "1" ]; then + /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" + /etc/init.d/omr-tracker restart + exit 0 + fi fi diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/002-error b/omr-tracker/files/usr/share/omr/post-tracking.d/002-error index a74f74df6..6e422d69a 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/002-error +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/002-error @@ -1,4 +1,4 @@ - +#!/bin/sh . /lib/functions/network.sh @@ -8,7 +8,7 @@ default_gw6=$(ip -6 route get 2606:4700:4700::1111 | grep via | awk '{print $3}' interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') # An interface in error will never be used in MPTCP -if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$interface_up" != "true" ]); then +if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || { [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$interface_up" != "true" ]; }; then #interface_autostart=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["autostart"]') #interface_available=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["available"]') #interface_pending=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["pending"]') @@ -37,14 +37,14 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn mm_state_failed=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.state-failed-reason") if [ "$mm_state_failed" = "unknown-capabilities" ]; then _log "Interface $OMR_TRACKER_INTERFACE in failed state in ModemManager, reset modem..." - /usr/bin/mmcli -m ${modem} -r 2>&1 >/dev/null + /usr/bin/mmcli -m ${modem} -r >/dev/null 2>&1 sleep 30 elif false && [ "$mm_state_failed" = "sim-missing" ]; then _log "Interface $OMR_TRACKER_INTERFACE in failed state in ModemManager, reset modem..." - /usr/bin/mmcli -m ${modem} -r 2>&1 >/dev/null + /usr/bin/mmcli -m ${modem} -r >/dev/null 2>&1 #_log "Interface $OMR_TRACKER_INTERFACE in failed state sim-missing in ModemManager, reset modem..." #mm_primary_port=$(modemmanager_get_field "${MODEM_STATUS}" "modem.generic.primary-port") - #mbimcli -p -d /dev/$mm_primary_port --ms-device-reset 2>&1 >/dev/null + #mbimcli -p -d /dev/$mm_primary_port --ms-device-reset >/dev/null 2>&1 fi elif [ "$mm_state" = "connected" ] || [ "$mm_state" = "enabled" ]; then _log "No answer from $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE), restart interface" @@ -57,7 +57,7 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn elif [ "$mm_state" = "disabled" ]; then # [ -n "$(echo $modeminfo | grep 'modem.3gpp.registration-state ' | grep home)" ]; then _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) disabled, set it up" - /usr/bin/mmcli -m ${modem} -e 2>&1 >/dev/null + /usr/bin/mmcli -m ${modem} -e >/dev/null 2>&1 ifup $OMR_TRACKER_INTERFACE sleep 30 elif [ "$mm_state" = "registered" ]; then @@ -75,21 +75,21 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then if [ "$mm_unlock_retries" -gt "1" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) locked, set PIN" - mmcli -a -m ${modem} -i $mm_generic_sim --pin=$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode) 2>&1 >/dev/null + mmcli -a -m ${modem} -i $mm_generic_sim --pin=$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode) >/dev/null 2>&1 sleep 20 ifup $OMR_TRACKER_INTERFACE fi fi elif [ "$mm_unlock_required" = "sim-puk" ] && [ "$mm_unlock_retries" -gt "1" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pukcode)" ] && [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode)" ]; then _log "Interface $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) locked, set PUK" - mmcli -i $mm_generic_sim --puk=$(uci -q get network.$OMR_TRACKER_INTERFACE.pukcode) --pin=$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode) 2>&1 >/dev/null + mmcli -i $mm_generic_sim --puk=$(uci -q get network.$OMR_TRACKER_INTERFACE.pukcode) --pin=$(uci -q get network.$OMR_TRACKER_INTERFACE.pincode) >/dev/null 2>&1 sleep 30 fi fi fi if [ "$modemfind" = "0" ]; then #_log "Can't find $OMR_TRACKER_INTERFACE in ModemManager, rescan modem..." - #/usr/bin/mmcli -S 2>&1 >/dev/null + #/usr/bin/mmcli -S >/dev/null 2>&1 #_log "Can't find $OMR_TRACKER_INTERFACE in ModemManager, restart modemmanager..." _log "Can't find $OMR_TRACKER_INTERFACE in ModemManager" #/etc/init.d/modemmanager restart @@ -119,8 +119,8 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn # Get the current multipath status multipath_status="off" -# [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null -# [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null +# [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && multipath $OMR_TRACKER_DEVICE off >/dev/null 2>&1 +# [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ] && multipath $OMR_TRACKER_DEVICE off >/dev/null 2>&1 if [ -e "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then case "$(multipath "$OMR_TRACKER_DEVICE")" in *default*) multipath_status="on" ;; @@ -129,7 +129,7 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn esac fi - if [ "$multipath_status" != "off" ] || ([ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ]); then + if [ "$multipath_status" != "off" ] || { [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ]; }; then if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then _log "$OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) switched off (interface up status: $interface_up - Tracker status: $OMR_TRACKER_STATUS)" else @@ -142,22 +142,22 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn # multipath "$OMR_TRACKER_DEVICE" off > /dev/null 2>&1 #fi if [ -n "$OMR_TRACKER_DEVICE_IP" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set down > /dev/null 2>&1 + glorytun-udp path addr "$OMR_TRACKER_DEVICE_IP" dev tun0 set down > /dev/null 2>&1 fi if [ -n "$OMR_TRACKER_DEVICE_IP6" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set down > /dev/null 2>&1 + glorytun-udp path addr "$OMR_TRACKER_DEVICE_IP6" dev tun0 set down > /dev/null 2>&1 fi if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ] && [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ]; then VPN_BASE_INTF="$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.baseintf)" VPN_BASE_INTF_IP=$(ubus call network.interface.$VPN_BASE_INTF status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n") if [ -n "$VPN_BASE_INTF" ]; then uci -q batch <<-EOF >/dev/null - set openvpn.$VPN_BASE_INTF.local=$VPN_BASE_INTF_IP + set openvpn.$VPN_BASE_INTF.local="$VPN_BASE_INTF_IP" commit openvpn EOF fi - [ -z "VPN_BASE_INTF" ] && VPN_BASE_INTF="omr" - /etc/init.d/openvpn restart $VPN_BASE_INTF 2>&1 >/dev/null + [ -z "$VPN_BASE_INTF" ] && VPN_BASE_INTF="omr" + /etc/init.d/openvpn restart "$VPN_BASE_INTF" >/dev/null 2>&1 fi config_load openmptcprouter config_foreach del_server_route server @@ -165,7 +165,7 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then if [ -n "$OMR_TRACKER_INTERFACE" ]; then - if ([ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ] || [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ]) && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then + if { [ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ] || [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ]; } && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw: $default_gw - Set routes (current: $(ip r) )" config_load network config_foreach set_route interface $OMR_TRACKER_INTERFACE @@ -219,9 +219,9 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn [ -z "$restart_down" ] && restart_down="$(uci -q get omr-tracker.defaults.restart_down)" [ "$restart_down" = "1" ] && { _log "Restart $OMR_TRACKER_INTERFACE" - ifdown $OMR_TRACKER_INTERFACE 2>&1 >/dev/null + ifdown $OMR_TRACKER_INTERFACE >/dev/null 2>&1 sleep 5 - ifup $OMR_TRACKER_INTERFACE 2>&1 >/dev/null + ifup $OMR_TRACKER_INTERFACE >/dev/null 2>&1 } if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] || [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ]; then @@ -241,29 +241,29 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || ([ "$OMR_TRACKER_INTERFACE" != "omrvpn _log "Tunnel down use ShadowSocks for UDP" uci -q set shadowsocks-libev.ss_rules.redir_udp='hi1' if /etc/init.d/shadowsocks-libev rules_exist ; then - /etc/init.d/shadowsocks-libev rules_down 2>&1 >/dev/null - /etc/init.d/shadowsocks-libev rules_up 2>&1 >/dev/null + /etc/init.d/shadowsocks-libev rules_down >/dev/null 2>&1 + /etc/init.d/shadowsocks-libev rules_up >/dev/null 2>&1 fi fi if [ "$(uci -q get dsvpn.vpn.enable)" = "1" ]; then _log "DSVPN down, restart it" - /etc/init.d/dsvpn restart 2>&1 >/dev/null + /etc/init.d/dsvpn restart >/dev/null 2>&1 fi if [ "$(uci -q get mlvpn.general.enable)" = "1" ]; then _log "MLVPN down, restart it" - /etc/init.d/mlvpn restart 2>&1 >/dev/null + /etc/init.d/mlvpn restart >/dev/null 2>&1 fi if [ "$(uci -q get glorytun.vpn.enable)" = "1" ]; then _log "Glorytun VPN down, restart it" - /etc/init.d/glorytun restart 2>&1 >/dev/null + /etc/init.d/glorytun restart >/dev/null 2>&1 fi if [ "$(uci -q get glorytun-udp.vpn.enable)" = "1" ]; then _log "Glorytun UDP VPN down, restart it" - /etc/init.d/glorytun-udp restart 2>&1 >/dev/null + /etc/init.d/glorytun-udp restart >/dev/null 2>&1 fi if [ "$(uci -q get openvpn.omr.enabled)" = "1" ]; then _log "OpenVPN down, restart it" - /etc/init.d/openvpn restart omr 2>&1 >/dev/null + /etc/init.d/openvpn restart omr >/dev/null 2>&1 fi config_load openmptcprouter config_foreach disable_pihole server diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/003-up b/omr-tracker/files/usr/share/omr/post-tracking.d/003-up index c6e78e807..aed7c3eee 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/003-up +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/003-up @@ -1,3 +1,5 @@ +#!/bin/bash + if [ "$OMR_TRACKER_STATUS" = "ERROR" ]; then exit 0 fi @@ -14,12 +16,12 @@ find_network_device() { local cfg="${1}" local device="${2}" - local type name + local name config_get name "${cfg}" name [ "${name}" = "${device}" ] && device_section="${cfg}" } - if [ ! -z "$device" ]; then + if [ -n "$device" ]; then config_load network config_foreach check_device device "$(uci -q network.${device}.device)" fi @@ -61,8 +63,8 @@ set_route() { if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && [ "$SETDEFAULT" = "yes" ] && _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && [ "$SETDEFAULT" != "yes" ] && _log "$PREVINTERFACE down. Replace default in table 991337 route by $interface_gw dev $interface_if" - [ "$SETDEFAULT" = "yes" ] && [ "$(uci -q openmptcprouter.settings.defaultgw)" != "0" ] && ip route replace default scope global metric 1 via $interface_gw dev $interface_if $initcwrwnd 2>&1 >/dev/null - ip route replace default via $interface_gw dev $interface_if table 991337 $initcwrwnd 2>&1 >/dev/null && SETROUTE=true + [ "$SETDEFAULT" = "yes" ] && [ "$(uci -q openmptcprouter.settings.defaultgw)" != "0" ] && ip route replace default scope global metric 1 via $interface_gw dev $interface_if $initcwrwnd >/dev/null 2>&1 + ip route replace default via $interface_gw dev $interface_if table 991337 $initcwrwnd >/dev/null 2>&1 && SETROUTE=true fi fi } @@ -101,8 +103,8 @@ set_route6() { fi if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep ':')" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" - [ "$SETDEFAULT" = "yes" ] && [ "$(uci -q openmptcprouter.settings.defaultgw)" != "0" ] && ip -6 route replace default scope metric 1 global nexthop via $interface_gw dev $interface_if 2>&1 >/dev/null - ip -6 route replace default via $interface_gw dev $interface_if table 991337 2>&1 >/dev/null && SETROUTE=true + [ "$SETDEFAULT" = "yes" ] && [ "$(uci -q openmptcprouter.settings.defaultgw)" != "0" ] && ip -6 route replace default scope metric 1 global nexthop via $interface_gw dev $interface_if >/dev/null 2>&1 + ip -6 route replace default via $interface_gw dev $interface_if table 991337 >/dev/null 2>&1 && SETROUTE=true fi fi } @@ -127,7 +129,7 @@ set_server_default_route() { if [ "$(ip r show $serverip | grep nexthop)" != "" ]; then ip r delete $serverip >/dev/null 2>&1 fi - ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric 1 $initcwrwnd 2>&1 >/dev/null + ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric 1 $initcwrwnd >/dev/null 2>&1 fi } config_list_foreach $server ip server_route @@ -153,7 +155,7 @@ set_server_default_route6() { if [ "$(ip -6 r show $serverip | grep nexthop)" != "" ]; then ip -6 r delete $serverip >/dev/null 2>&1 fi - ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric 1 2>&1 >/dev/null + ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric 1 >/dev/null 2>&1 fi } config_list_foreach $server ip server_route @@ -204,12 +206,12 @@ set_routes_intf() { [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.device) [ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname) - [ -n "$(echo $interface_if | grep '@')" ] && ifname=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') + [ -n "$(echo $interface_if | grep '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') #multipath_current_config=$(multipath $interface_if | grep 'deactivated') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") interface_vpn=$(uci -q get openmptcprouter.$INTERFACE.vpn || echo "0") - if ([ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]) && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_if" != "" ] && [ "$interface_up" = "true" ]; then + if { [ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]; } && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_if" != "" ] && [ "$interface_up" = "true" ]; then interface_gw="$(uci -q get network.$INTERFACE.gateway)" if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") @@ -266,7 +268,7 @@ set_routes_intf6() { #multipath_current_config=$(multipath $interface_if | grep 'deactivated') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") interface_vpn=$(uci -q get openmptcprouter.$INTERFACE.vpn || echo "0") - if ([ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]) && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_if" != "" ] && [ "$interface_up" = "true" ]; then + if { [ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]; } && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_if" != "" ] && [ "$interface_up" = "true" ]; then interface_gw="$(uci -q get network.$INTERFACE.ip6gw)" interface_ip6="$(uci -q get network.$INTERFACE.ip6)" if [ -z "$interface_gw" ]; then @@ -338,7 +340,7 @@ set_route_balancing() { interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") interface_vpn=$(uci -q get openmptcprouter.$INTERFACE.vpn || echo "0") - if ([ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]) && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then + if { [ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]; } && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then interface_gw="$(uci -q get network.$INTERFACE.gateway)" if [ -z "$interface_gw" ]; then interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") @@ -397,7 +399,7 @@ set_route_balancing6() { interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") interface_vpn=$(uci -q get openmptcprouter.$INTERFACE.vpn || echo "0") - if ([ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]) && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then + if { [ "$interface_vpn" = "0" ] || [ "$(uci -q get openmptcprouter.settings.allmptcpovervpn)" = "0" ]; } && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then interface_gw="$(uci -q get network.$INTERFACE.gateway)" interface_ip6="$(uci -q get network.$INTERFACE.ip6)" if [ -z "$interface_gw" ]; then @@ -484,17 +486,17 @@ set_server_all_routes() { config_foreach set_routes_intf interface uintf="$(echo $routesintf | awk '{print $5}')" uintfb="$(echo $routesintfbackup | awk '{print $5}')" - if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 1 | tr -d '\t' | tr -d '\n' | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" != "$(echo $serverip $routesintf | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" ]) || ([ "$nbintf" = "1" ] && [ -n "$uintf" ] && [ "$(ip r show $serverip metric 1 | grep $uintf)" = "" ]); then + if [ -n "$routesintf" ] && { [ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 1 | tr -d '\t' | tr -d '\n' | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" != "$(echo $serverip $routesintf | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" ]; } || { [ "$nbintf" = "1" ] && [ -n "$uintf" ] && [ "$(ip r show $serverip metric 1 | grep $uintf)" = "" ]; }; then while [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do ip r del $serverip done [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf" - ip route replace $serverip scope global metric 1 $routesintf 2>&1 >/dev/null + ip route replace $serverip scope global metric 1 $routesintf >/dev/null 2>&1 [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 1 | tr -d '\t' | tr -d '\n')" fi - if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n' | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" != "$(echo $serverip $routesintfbackup | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" ]) || ([ "$nbintfb" = "1" ] && [ -n "$uintfb" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then + if [ -n "$routesintfbackup" ] && { [ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n' | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" != "$(echo $serverip $routesintfbackup | sed 's/ *$//' | tr ' ' '\n' | sort | tr -d '\n')" ]; } || { [ "$nbintfb" = "1" ] && [ -n "$uintfb" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]; }; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE" - ip route replace $serverip scope global metric 999 $routesintfbackup 2>&1 >/dev/null + ip route replace $serverip scope global metric 999 $routesintfbackup >/dev/null 2>&1 fi fi } @@ -532,17 +534,17 @@ set_server_all_routes6() { config_foreach set_routes_intf6 interface uintf="$(echo $routesintf6 | awk '{print $5}')" uintfb="$(echo $routesintfbackup6 | awk '{print $5}')" - if [ -n "$routesintf6" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 1 | tr -d '\t' | sort | tr -d '\n' | sed 's/ *$//')" != "$(echo $serverip $routesintf6 | sort | sed 's/ *$//')" ]) || ([ "$nbintf6" = "1" ] && [ -n "$uintf" ] && [ "$(ip -6 r show $serverip metric 1 | grep $uintf)" = "" ]); then + if [ -n "$routesintf6" ] && { [ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 1 | tr -d '\t' | sort | tr -d '\n' | sed 's/ *$//')" != "$(echo $serverip $routesintf6 | sort | sed 's/ *$//')" ]; } || { [ "$nbintf6" = "1" ] && [ -n "$uintf" ] && [ "$(ip -6 r show $serverip metric 1 | grep $uintf)" = "" ]; }; then while [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do ip -6 r del $serverip done [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf6" - ip -6 route replace $serverip scope global metric 1 $routesintf6 2>&1 >/dev/null + ip -6 route replace $serverip scope global metric 1 $routesintf6 >/dev/null 2>&1 [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 1 | tr -d '\t' | tr -d '\n')" fi - if [ -n "$routesintfbackup6" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup6 " ]) || ([ "$nbintfb6" = "1" ] && [ -n "$uintfb" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then + if [ -n "$routesintfbackup6" ] && { [ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup6 " ]; } || { [ "$nbintfb6" = "1" ] && [ -n "$uintfb" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]; }; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup6 nbintfb $nbintfb6 $OMR_TRACKER_DEVICE" - ip -6 route replace $serverip scope global metric 999 $routesintfbackup6 2>&1 >/dev/null + ip -6 route replace $serverip scope global metric 999 $routesintfbackup6 >/dev/null 2>&1 fi fi } @@ -581,12 +583,12 @@ set_server_route() { #if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then if [ "$serverip" != "" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" - ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric $initcwrwnd 2>&1 >/dev/null + ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric $initcwrwnd >/dev/null 2>&1 fi } config_list_foreach $server ip server_route if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ -n "$metric" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep default | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric $initcwrwnd 2>&1 >/dev/null + ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric $initcwrwnd >/dev/null 2>&1 fi } @@ -619,12 +621,12 @@ set_server_route6() { #if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric" - ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric 2>&1 >/dev/null + ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 fi } config_list_foreach $server ip server_route if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$metric" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep default | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then - ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric 2>&1 >/dev/null + ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 fi } @@ -686,7 +688,7 @@ disable_pihole() { commit dhcp EOF fi - /etc/init.d/dnsmasq restart 2>&1 >/dev/null + /etc/init.d/dnsmasq restart >/dev/null 2>&1 fi } @@ -712,8 +714,6 @@ dns_flush() { # Get the current multipath status multipath_status="off" -[ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null -[ "$OMR_TRACKER_INTERFACE" = "omr6in4" ] && multipath $OMR_TRACKER_DEVICE off 2>&1 >/dev/null if [ -e "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then case "$(multipath "$OMR_TRACKER_DEVICE")" in *default*) multipath_status="on" ;; @@ -735,7 +735,7 @@ interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$OMR_TRACKER_INTERFACE" != "omr6in4" ]; then metric="$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" - if [ -z "$metric" ] || ([ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]) || ([ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]); then + if [ -z "$metric" ] || { [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]; } || { [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]; }; then _log "Routes not correctly set for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE table $metric) with IPs $OMR_TRACKER_DEVICE_IP $OMR_TRACKER_DEVICE_IP6" /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" /etc/init.d/omr-tracker restart @@ -753,21 +753,21 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om /etc/init.d/shadowsocks-libev rules_up >/dev/null 2>&1 fi fi - if ([ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ]; then + if { [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; } && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ]; then _log "Tunnel up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE (was $default_gw)" [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw : $default_gw - Current route: $(ip r)" - ip route replace default scope global via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE $initcwrwnd 2>&1 >/dev/null + ip route replace default scope global via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE $initcwrwnd >/dev/null 2>&1 if [ "$(pgrep -f openmptcprouter-vps)" = "" ]; then /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 & fi - [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && conntrack -D -p udp 2>&1 >/dev/null + [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && conntrack -D -p udp >/dev/null 2>&1 [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New route: $(ip r)" fi # Set VPN MTU - if [ -n "$OMR_TRACKER_LATENCY" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]); then + if [ -n "$OMR_TRACKER_LATENCY" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && { [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]; }; then _log "Set VPN MTU" - local serverip=$(uci -q get shadowsocks-libev.sss0.server) + serverip=$(uci -q get shadowsocks-libev.sss0.server) [ -z "$serverip" ] && serverip=$(uci -q get shadowsocks-rust.sss0.server) [ -z "$serverip" ] && serverip=$(uci -q get v2ray.omrout.s_vless_address) [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" @@ -786,7 +786,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") elif [ -z "$(uci -q get openmptcprouter.${OMR_TRACKER_INTERFACE}.mtu)" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then if [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ]; then - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) + mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) #local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 8.8.8.8) [ -n "$mtu" ] && { uci -q set openmptcprouter.${OMR_TRACKER_INTERFACE}.mtu=$mtu @@ -794,7 +794,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") } else - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) + mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) [ -n "$mtu" ] && { uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 @@ -814,7 +814,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om config_load openmptcprouter config_foreach enable_pihole server #config_foreach delete_server_default_route server - [ "$nbserver" = "$piholeenabled" ] && /etc/init.d/openmptcprouter-vps set_pihole 2>&1 >/dev/null + [ "$nbserver" = "$piholeenabled" ] && /etc/init.d/openmptcprouter-vps set_pihole >/dev/null 2>&1 #ubus call network reload exit 0 fi @@ -863,12 +863,12 @@ fi if [ "$multipath_config" = "master" ]; then #if ([ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && ([ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ] || [ "$(uci -q get openmptcprouter.settings.vpn)" = "mlvpn" ]); then - if ([ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then + if { [ "$default_gw" != "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]; } && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then omrvpn_intf=$(uci -q get "network.omrvpn.device" || echo "tun0") [ -z "$omrvpn_intf" ] && omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun0") if [ -n "$omrvpn_intf" ] && [ "$(ip route show default metric 0 | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then _log "Master up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" - ip route replace default scope global metric 1 via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE $initcwrwnd 2>&1 >/dev/null + ip route replace default scope global metric 1 via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE $initcwrwnd >/dev/null 2>&1 fi config_load openmptcprouter #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then @@ -877,14 +877,14 @@ if [ "$multipath_config" = "master" ]; then config_foreach set_server_default_route server #config_foreach set_server_default_route6 server fi - ip route flush cache 2>&1 >/dev/null + ip route flush cache >/dev/null 2>&1 fi - if ([ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$default_gw6" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then + if { [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$default_gw6" = "" ]; } && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then omrvpn_intf=$(uci -q get "network.omrvpn.device" || echo "tun0") [ -z "$omrvpn_intf" ] && omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun0") if [ -n "$omrvpn_intf" ] && [ "$(ip route show default | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then _log "Master up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE" - ip -6 route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE 2>&1 >/dev/null + ip -6 route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 fi config_load openmptcprouter #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then @@ -893,10 +893,11 @@ if [ "$multipath_config" = "master" ]; then #config_foreach set_server_default_route server config_foreach set_server_default_route6 server fi - ip -6 route flush cache 2>&1 >/dev/null + ip -6 route flush cache >/dev/null 2>&1 fi #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(ip route show default | grep weight)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then - if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && (([ -n "$OMR_TRACKER_DEVICE_IP" ] && [ "$(ip route show default | grep weight)" = "" ]) || ([ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ "$(ip -6 route show default | grep weight)" = "" ])) && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then + if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && + { { [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ "$(ip route show default | grep weight)" = "" ]; } || { [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ "$(ip -6 route show default | grep weight)" = "" ]; }; } && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then omrvpn_intf=$(uci -q get "network.omrvpn.device" || echo "tun0") [ -z "$omrvpn_intf" ] && omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun0") if [ -n "$omrvpn_intf" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ "$(ip route show default metric 0 | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ]; then @@ -910,29 +911,29 @@ if [ "$multipath_config" = "master" ]; then config_foreach set_route_balancing interface #config_foreach set_route_balancing6 interface [ -n "$routesbalancing" ] && { - ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 1 | tr -d '\t' | tr -d '\n' | sed 's/ *$//')" != "default via $routesbalancing" ] && [ "$(ip r show default metric 1 | tr -d '\t' | tr -d '\n' | sed 's/ *$//')" != "default $routesbalancing" ]) || ([ "$nbintf" = "1" ] && ([ "$(ip r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] || ([ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ])) && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && { + { [ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 1 | tr -d '\t' | tr -d '\n' | sed 's/ *$//')" != "default via $routesbalancing" ] && [ "$(ip r show default metric 1 | tr -d '\t' | tr -d '\n' | sed 's/ *$//')" != "default $routesbalancing" ]; } || { [ "$nbintf" = "1" ] && { [ "$(ip r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] || { [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]; }; } && [ -n "$OMR_TRACKER_DEVICE_IP" ]; } && { _log "Change in routes, set ip route replace default scope global $routesbalancing (omrvpn_intf: $omrvpn_intf)" [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Current route: $(ip r)" - ip route replace default scope global metric 1 $routesbalancing 2>&1 >/dev/null + ip route replace default scope global metric 1 $routesbalancing >/dev/null 2>&1 [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New route: $(ip r)" } } #[ -n "$routesbalancing6" ] && { # ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { # _log "Set ip -6 route replace default scope global metric 1 $routesbalancing6" - # ip -6 route replace default scope global metric 1 $routesbalancing6 2>&1 >/dev/null + # ip -6 route replace default scope global metric 1 $routesbalancing6 >/dev/null 2>&1 # } #} [ -n "$routesbalancingbackup" ] && { - ([ "$nbintfb" -gt "1" ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup " ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default $routesbalancingbackup " ]) || ([ "$nbintf" = "1" ] && ([ "$(ip r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] || ([ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ])) && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && { + { [ "$nbintfb" -gt "1" ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup " ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default $routesbalancingbackup " ]; } || { [ "$nbintf" = "1" ] && { [ "$(ip r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] || { [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]; }; } && [ -n "$OMR_TRACKER_DEVICE_IP" ]; } && { _log "Set backup ip route replace default scope global metric 999 $routesbalancingbackup" - ip route replace default scope global metric 999 $routesbalancingbackup 2>&1 >/dev/null + ip route replace default scope global metric 999 $routesbalancingbackup >/dev/null 2>&1 } } #[ -n "$routesbalancingbackup6" ] && { # ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { # _log "Set backup ip -6 route replace default scope global $routesbalancingbackup6" - # ip -6 route replace default scope global metric 999 $routesbalancingbackup6 2>&1 >/dev/null + # ip -6 route replace default scope global metric 999 $routesbalancingbackup6 >/dev/null 2>&1 # } #} elif [ -n "$omrvpn_intf" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ "$(ip -6 route show default | grep -v metric | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ]; then @@ -943,30 +944,30 @@ if [ "$multipath_config" = "master" ]; then config_load network config_foreach set_route_balancing6 interface [ -n "$routesbalancing6" ] && { - ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default $routesbalancing6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ "$(ip -6 r show default metric 1 | grep omr6in4)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { + { [ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default $routesbalancing6 " ]; } || { [ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ "$(ip -6 r show default metric 1 | grep omr6in4)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]; } && { _log "Set ip -6 route replace default scope global metric 1 $routesbalancing6" - ip -6 route replace default scope global metric 1 $routesbalancing6 2>&1 >/dev/null + ip -6 route replace default scope global metric 1 $routesbalancing6 >/dev/null 2>&1 } } [ -n "$routesbalancingbackup6" ] && { - ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default $routesbalancingbackup6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && { + { [ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default $routesbalancingbackup6 " ]; } || { [ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]; } && { _log "Set backup ip -6 route replace default scope global $routesbalancingbackup6" - ip -6 route replace default scope global metric 999 $routesbalancingbackup6 2>&1 >/dev/null + ip -6 route replace default scope global metric 999 $routesbalancingbackup6 >/dev/null 2>&1 } } fi - #ip route flush cache 2>&1 >/dev/null - #ip -6 route flush cache 2>&1 >/dev/null + #ip route flush cache >/dev/null 2>&1 + #ip -6 route flush cache >/dev/null 2>&1 fi if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip r show table 991337)" != "default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE " ]; then - ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 $initcwrwnd 2>&1 >/dev/null - #ip route flush cache 2>&1 >/dev/null + ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337 $initcwrwnd >/dev/null 2>&1 + #ip route flush cache >/dev/null 2>&1 fi if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip -6 r show table 991337)" != "default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE " ]; then - ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE table 991337 $initcwrwnd 2>&1 >/dev/null - #ip -6 route flush cache 2>&1 >/dev/null + ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE table 991337 $initcwrwnd >/dev/null 2>&1 + #ip -6 route flush cache >/dev/null 2>&1 fi - if ([ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ]) || [ $(($(date +"%s") + $((10 + RANDOM % 10)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(uci -q show openmptcprouter | grep get_config=\'1\')" != "" ] || [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" != "" ]; then + if { [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ]; } || [ $(($(date +"%s") + $((10 + RANDOM % 10)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(uci -q show openmptcprouter | grep get_config=\'1\')" != "" ] || [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" != "" ]; then [ "$(pgrep -f openmptcprouter-vps)" = "" ] && { /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 & uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") @@ -987,7 +988,7 @@ if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip r show dev $OMR_TRACKER_DEVICE | grep default)" = "" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" != "" ]; then _log "Interface route not yet set, set route ip r add default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" ip r add default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $(uci -q get network.$OMR_TRACKER_INTERFACE.metric) >/dev/null 2>&1 - ip route flush cache 2>&1 >/dev/null + ip route flush cache >/dev/null 2>&1 fi fi if [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then @@ -1000,11 +1001,11 @@ if [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; th fi if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip -6 r show dev $OMR_TRACKER_DEVICE | grep default)" = "" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" != "" ]; then ip -6 r replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric 6$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) >/dev/null 2>&1 - ip -6 route flush cache 2>&1 >/dev/null + ip -6 route flush cache >/dev/null 2>&1 fi fi -if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]); then +if [ -n "$OMR_TRACKER_INTERFACE" ] && { [ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]; }; then download="$(uci -q get network.$OMR_TRACKER_INTERFACE.downloadspeed)" [ -z "$download" ] && download="$(uci -q get sqm.$OMR_TRACKER_INTERFACE.download)" upload="$(uci -q get network.$OMR_TRACKER_INTERFACE.uploadspeed)" @@ -1039,15 +1040,15 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$mul serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 + glorytun-udp path addr "$OMR_TRACKER_DEVICE_IP6" to addr "$serverip" port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 + glorytun-udp path addr "$OMR_TRACKER_DEVICE_IP6" to addr "$serverip" port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx $((upload*1000)) rx $((download*1000)) pref 1 > /dev/null 2>&1 fi else if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 + glorytun-udp path addr "$OMR_TRACKER_DEVICE_IP6" to addr "$serverip" port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 else - glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 + glorytun-udp path addr "$OMR_TRACKER_DEVICE_IP6" to addr "$serverip" port ${gtudp_port} dev ${gtudp_dev} set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1 fi fi fi diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/020-status b/omr-tracker/files/usr/share/omr/post-tracking.d/020-status index 5c86b0cb9..2584f7d30 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/020-status +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/020-status @@ -1,3 +1,4 @@ +#!/bin/bash # # Copyright (C) 2018-2023 Ycarus (Yannick Chabanois) for OpenMPTCProuter # @@ -11,10 +12,10 @@ interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e [ "$interface_up" != "true" ] && exit 0 # Save wan settings for status page -if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((30 + RANDOM % 10)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state)" = "down" ]); then +if [ -n "$OMR_TRACKER_INTERFACE" ] && { [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((30 + RANDOM % 10)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state)" = "down" ]; }; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE..." - local ipaddr="" - local ip6addr="" + ipaddr="" + ip6addr="" if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ]; then [ -n "$OMR_TRACKER_DEVICE_IP" ] && ipaddr="$(omr-ip-intf $OMR_TRACKER_DEVICE)" [ -n "$OMR_TRACKER_DEVICE_IP6" ] && ip6addr="$(omr-ip6-intf $OMR_TRACKER_DEVICE)" @@ -24,11 +25,11 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC fi [ -n "$ipaddr" ] && { # Check if we can get a IPv6 address, if yes enable RA else disable - #local check_ipv6_website="$(uci -q get openmptcprouter.settings.check_ipv6_website)" + #check_ipv6_website="$(uci -q get openmptcprouter.settings.check_ipv6_website)" #[ -z "$check_ipv6_website" ] && check_ipv6_website="http://ipv6.openmptcprouter.com/" - #local ip6addr="$(curl -s -6 -m 2 $check_ipv6_website)" + #ip6addr="$(curl -s -6 -m 2 $check_ipv6_website)" #[ -z "$ip6addr" ] && { - # local ip6addr="$(curl -s -6 -m 2 http://ifconfig.me/)" + # ip6addr="$(curl -s -6 -m 2 http://ifconfig.me/)" #} #if [ "$(uci -q get openmptcprouter.settings.ipv6_disable)" = "0" ]; then # if [ -n "$ip6addr" ] && [ "$(uci -q get dhcp.lan.ra_default)" != 1 ]; then @@ -47,16 +48,16 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC # fi #fi if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then - #local asn="$(wget -4 -qO- -T 4 http://api.iptoasn.com/v1/as/ip/$ipaddr | jsonfilter -q -e '@.as_description')" + #asn="$(wget -4 -qO- -T 4 http://api.iptoasn.com/v1/as/ip/$ipaddr | jsonfilter -q -e '@.as_description')" #[ -z "$asn" ] && { - local asn="$(timeout 2 whois $ipaddr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')" + asn="$(timeout 2 whois $ipaddr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')" #} fi [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE)" ] && { uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE=interface } if [ "$(uci -q get openmptcprouter.latest_versions.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.latest_versions.lc))) -gt 3600 ]; then - local latestversions="$(curl -4 -s -m 3 https://www.openmptcprouter.com/version/version.json)" + latestversions="$(curl -4 -s -m 3 https://www.openmptcprouter.com/version/version.json)" [ -n "$latestversions" ] && { uci -q set openmptcprouter.latest_versions=latest_versions uci -q set openmptcprouter.latest_versions.omr=$(echo $latestversions | jsonfilter -q -e '@.omr')-$(ubus call system board | jsonfilter -e '@.kernel' | cut -d'.' -f1,2) @@ -74,7 +75,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ipaddr" /etc/init.d/mptcp enabled && { _log "Reload MPTCP for $OMR_TRACKER_DEVICE" - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" 2>&1 >/dev/null + /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" >/dev/null 2>&1 } } [ -n "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" @@ -83,8 +84,8 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC } # Routing loop detection - local lanip="$(uci -q get network.lan.ipaddr)" - local masterip + lanip="$(uci -q get network.lan.ipaddr)" + masterip get_master_ip() { if [ -n "$1" ] && [ "$(uci -q get openmptcprouter.$1.multipath)" = "master" ]; then masterip="$(uci -q get openmptcprouter.$1.publicip)" @@ -96,7 +97,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC loop=0 routingloop() { vpsip="" - [ -n "$1"] && vpsip="$(uci -q get openmptcprouter.$1.ip)" + [ -n "$1" ] && vpsip="$(uci -q get openmptcprouter.$1.ip)" if [ -n "$vpsip" ] && [ "$(omr-routing-loop $vpsip $lanip $OMR_TRACKER_DEVICE)" = "detected" ]; then loop=1 fi @@ -112,10 +113,10 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.loop fi - local omrtracebox + omrtracebox="" traceboxmtutest() { omr_tracebox_mtu() { - local serverip=$1 + serverip=$1 [ "$serverip" != "${1#*[0-9].[0-9]}" ] && serverip="" [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep -f tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && { omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)" @@ -132,8 +133,8 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 } elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then - [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && { - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) + if [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ]; then + mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) [ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && { mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) [ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && { @@ -141,8 +142,8 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 } } - } || { - local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) + else + mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1) [ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && { mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip) [ -n "$mtu" ] && [ "$mtu" != "$(ip --json link show dev $OMR_TRACKER_DEVICE | jsonfilter -e '@[0].mtu' | tr -d '\n')" ] && { @@ -150,7 +151,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 } } - } + fi fi fi } @@ -167,13 +168,13 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC } [ -n "$ip6addr" ] && { if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then - local asn="$(whois $ip6addr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')" + asn="$(whois $ip6addr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')" fi [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE)" ] && { uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE=interface } if [ "$(uci -q get openmptcprouter.latest_versions.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.latest_versions.lc))) -gt 3600 ]; then - local latestversions="$(curl -6 -s -m 3 https://www.openmptcprouter.com/version/version.json)" + latestversions="$(curl -6 -s -m 3 https://www.openmptcprouter.com/version/version.json)" [ -n "$latestversions" ] && { uci -q set openmptcprouter.latest_versions=latest_versions uci -q set openmptcprouter.latest_versions.omr=$(echo $latestversions | jsonfilter -q -e '@.omr') @@ -185,7 +186,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC _log "New public ip detected for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE): $ip6addr" /etc/init.d/mptcp enabled && { _log "Reload MPTCP for $OMR_TRACKER_DEVICE" - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" 2>&1 >/dev/null + /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" >/dev/null 2>&1 } uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ip6addr" } @@ -193,7 +194,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC [ -n "$asn" ] && { uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.asn="$asn" } - local omrtracebox + omrtracebox="" traceboxmtutest() { omr_tracebox_mtu() { local serverip=$1 @@ -212,19 +213,19 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 } elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then - [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && { - local mtu=$(omr-mtu6 $OMR_TRACKER_DEVICE_IP6 $serverip) + if [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ]; then + mtu=$(omr-mtu6 $OMR_TRACKER_DEVICE_IP6 $serverip) [ -n "$mtu" ] && { uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 } - } || { - local mtu=$(omr-mtu6 $OMR_TRACKER_DEVICE_IP6 2606:4700:4700::1111) + else + mtu=$(omr-mtu6 $OMR_TRACKER_DEVICE_IP6 2606:4700:4700::1111) [ -n "$mtu" ] && { uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 } - } + fi fi fi } @@ -236,7 +237,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") } if [ "$(uci -q get shadowsocks-libev.sss0.server)" != "" ] && [ "$(uci -q get openmptcprouter.settings.external_check)" = "0" ]; then - if ping -B -I $OMR_TRACKER_DEVICE -c 1 $(uci -q get shadowsocks-libev.sss0.server) 2>&1 >/dev/null; then + if ping -B -I $OMR_TRACKER_DEVICE -c 1 $(uci -q get shadowsocks-libev.sss0.server) >/dev/null 2>&1; then uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") fi fi @@ -266,7 +267,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC else [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE... Done" [ -n "$(uci -q changes openmptcprouter)" ] && uci -q commit openmptcprouter - if [ "$(pgrep -f openmptcprouter-vps)" = "" ] && ( [ "$(uci -q get openmptcprouter.settings.apilc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.settings.apilc))) -gt 3600 ] ); then + if [ "$(pgrep -f openmptcprouter-vps)" = "" ] && { [ "$(uci -q get openmptcprouter.settings.apilc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.settings.apilc))) -gt 3600 ]; }; then _log "Check API configuration..." /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 & uci -q set openmptcprouter.settings.apilc=$(date +"%s") diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/021-latencies b/omr-tracker/files/usr/share/omr/post-tracking.d/021-latencies index f89d70288..c2f51da37 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/021-latencies +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/021-latencies @@ -1,3 +1,4 @@ +#!/bin/sh # # Copyright (C) 2018-2023 Ycarus (Yannick Chabanois) for OpenMPTCProuter # @@ -15,15 +16,15 @@ interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" #[ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.latency_max)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency_max="$OMR_TRACKER_LATENCY" #[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.latency_max)" -lt "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency_max="$OMR_TRACKER_LATENCY" - if [ "$multipath_config" = "on" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath)" != "master" ] && ([ "$(uci -q get openmptcprouter.settings.master)" = "dynamic" ] || ( ( [ "$(uci -q get openmptcprouter.settings.master)" = "change" ] || [ "$(uci -q get openmptcprouter.settings.master)" = "" ] ) && [ "$(uci -q get openmptcprouter.settings.master_lcintf | grep $OMR_TRACKER_INTERFACE)" = "" ] ) ); then + if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath)" = "on" ] && { [ "$(uci -q get openmptcprouter.settings.master)" = "dynamic" ] || { { [ "$(uci -q get openmptcprouter.settings.master)" = "change" ] || [ "$(uci -q get openmptcprouter.settings.master)" = "" ]; } && [ "$(uci -q get openmptcprouter.settings.master_lcintf | grep $OMR_TRACKER_INTERFACE)" = "" ]; }; }; then masterintf="$(uci -q show openmptcprouter | grep -m 1 multipath=\'master\' | cut -d'.' -f2)" [ -z "$masterintf" ] && masterintf="$(uci -q show network | grep -m 1 multipath=\'master\' | cut -d'.' -f2)" masterlatency="$(uci -q get openmptcprouter.$masterintf.latency | tr -d '\n')" - if [ -z "$masterlatency" ] || ([ -n "$masterintf" ] && [ "$(uci -q get openmptcprouter.$masterintf.state)" = "down" ]); then + if [ -z "$masterlatency" ] || { [ -n "$masterintf" ] && [ "$(uci -q get openmptcprouter.$masterintf.state)" = "down" ]; }; then masterlatency=1000 fi - if [ -n "$masterintf" ] && ([ "$masterlatency" != "" ] || [ "$(uci -q get openmptcprouter.$masterintf.state)" = "down" ]); then - if ( ( [ "$(uci -q get openmptcprouter.settings.master)" = "change" ] || [ "$(uci -q get openmptcprouter.settings.master)" = "" ] ) && [ "$OMR_TRACKER_LATENCY" -lt $(awk "BEGIN {printf \"%i\",${masterlatency}/1.5}") ] ) || ( [ "$(uci -q get openmptcprouter.settings.master)" = "dynamic" ] && [ "$OMR_TRACKER_LATENCY" -lt "$((masterlatency/2))" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.latency_previous)" -lt "$((masterlatency/2))" ] ); then + if [ -n "$masterintf" ] && { [ "$masterlatency" != "" ] || [ "$(uci -q get openmptcprouter.$masterintf.state)" = "down" ]; }; then + if { { [ "$(uci -q get openmptcprouter.settings.master)" = "change" ] || [ "$(uci -q get openmptcprouter.settings.master)" = "" ]; } && [ "$OMR_TRACKER_LATENCY" -lt $(awk "BEGIN {printf \"%i\",${masterlatency}/1.5}") ]; } || { [ "$(uci -q get openmptcprouter.settings.master)" = "dynamic" ] && [ "$OMR_TRACKER_LATENCY" -lt "$((masterlatency/2))" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.latency_previous)" -lt "$((masterlatency/2))" ]; }; then uci -q set network.$masterintf.multipath='on' uci -q set openmptcprouter.$masterintf.multipath='on' uci -q set network.$OMR_TRACKER_INTERFACE.multipath='master' @@ -49,13 +50,13 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then addlatency=$(uci -q get network.${OMR_TRACKER_INTERFACE}.addlatency) [ -z "$addlatency" ] && addlatency="0" if [ "$addlatency" = "0" ] && [ "$(tc qdisc show dev $OMR_TRACKER_DEVICE | grep delay)" != "" ]; then - tc qdisc del dev ${OMR_TRACKER_DEVICE} root netem 2>&1 >/dev/null + tc qdisc del dev ${OMR_TRACKER_DEVICE} root netem >/dev/null 2>&1 fi if [ "$addlatency" != "0" ]; then if [ "$(tc qdisc show dev $OMR_TRACKER_DEVICE | grep delay)" = "" ]; then - tc qdisc add dev ${OMR_TRACKER_DEVICE} root netem delay ${addlatency}ms 2>&1 >/dev/null + tc qdisc add dev ${OMR_TRACKER_DEVICE} root netem delay ${addlatency}ms >/dev/null 2>&1 elif [ "$(tc qdisc show dev $OMR_TRACKER_DEVICE | awk '/delay/ { print $10 }' | sed 's/ms//')" != "$addlatency" ]; then - tc qdisc replace dev ${OMR_TRACKER_DEVICE} root netem delay ${addlatency}ms 2>&1 >/dev/null + tc qdisc replace dev ${OMR_TRACKER_DEVICE} root netem delay ${addlatency}ms >/dev/null 2>&1 fi fi fi diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/022-speedtest b/omr-tracker/files/usr/share/omr/post-tracking.d/022-speedtest index 3b2f2b70e..a98ddacec 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/022-speedtest +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/022-speedtest @@ -1,3 +1,4 @@ +#!/bin/bash # # Copyright (C) 2018-2023 Ycarus (Yannick Chabanois) for OpenMPTCProuter # From c1f7c7d9358e9ba51fcbba8427aca34518bbeedc Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:48:01 +0200 Subject: [PATCH 13/21] Fix no output redirection in some openmptcprouter scripts --- openmptcprouter/files/bin/blocklanfw | 20 +++++++++---------- openmptcprouter/files/bin/omr-test-speed | 4 ++-- .../files/bin/omr-test-speed-server | 12 +++++------ openmptcprouter/files/bin/omr-test-speedv6 | 4 ++-- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/openmptcprouter/files/bin/blocklanfw b/openmptcprouter/files/bin/blocklanfw index 1ba1f3c8a..1d1b7bd65 100755 --- a/openmptcprouter/files/bin/blocklanfw +++ b/openmptcprouter/files/bin/blocklanfw @@ -17,7 +17,7 @@ ss_rules_fw_drop() { while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "$IPTABLES-w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" + eval "$IPTABLES-w -t nat -A zone_lan_prerouting ${fwrule} >/dev/null 2>&1" fw=$((fw+1)) fi done @@ -25,7 +25,7 @@ ss_rules_fw_drop() { while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "$IPTABLES-w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" + eval "$IPTABLES-w -t nat -A zone_lan_prerouting ${fwrule} >/dev/null 2>&1" fw=$((fw+1)) fi done @@ -36,7 +36,7 @@ ss_rules6_fw_drop() { while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "$IP6TABLES-w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" + eval "$IP6TABLES-w -t nat -A zone_lan_prerouting ${fwrule} >/dev/null 2>&1" fw=$((fw+1)) fi done @@ -44,7 +44,7 @@ ss_rules6_fw_drop() { while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "$IP6TABLES-w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" + eval "$IP6TABLES-w -t nat -A zone_lan_prerouting ${fwrule} >/dev/null 2>&1" fw=$((fw+1)) fi done @@ -55,7 +55,7 @@ v2r_rules_fw_drop() { while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "$IPTABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null" + eval "$IPTABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} >/dev/null 2>&1" fw=$((fw+1)) fi done @@ -63,7 +63,7 @@ v2r_rules_fw_drop() { while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "$IPTABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null" + eval "$IPTABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} >/dev/null 2>&1" fw=$((fw+1)) fi done @@ -74,14 +74,14 @@ v2ray_rules6_fw_drop() { while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "$IP6TABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null" + eval "$IP6TABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} >/dev/null 2>&1" fi done timeout 1 fw3 -6 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j DROP/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/DROP/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$($IPTABLESSAVE 2>/dev/null | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "$IP6TABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null" + eval "$IP6TABLES-w -t nat -I zone_lan_prerouting 1 ${fwrule} >/dev/null 2>&1" fi done } @@ -97,6 +97,6 @@ elif [ -n "$(uci -q get openmptcprouter.settings.proxy | grep v2ray)" ] || [ -n v2ray_rules6_fw_drop fi rule=$(timeout 1 fw3 -4 print | grep 'A PREROUTING' | grep zone_lan_prerouting | sed 's/-A PREROUTING/-D PREROUTING/') -eval "$rule 2>&1 >/dev/null" +eval "$rule >/dev/null 2>&1" newrule=$(echo "$rule" | sed 's/-D PREROUTING/-I PREROUTING 1/') -eval "$newrule 2>&1 >/dev/null" +eval "$newrule >/dev/null 2>&1" diff --git a/openmptcprouter/files/bin/omr-test-speed b/openmptcprouter/files/bin/omr-test-speed index 68e227a3f..e5ccadc34 100755 --- a/openmptcprouter/files/bin/omr-test-speed +++ b/openmptcprouter/files/bin/omr-test-speed @@ -59,7 +59,7 @@ else fi if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_4 2>/dev/null)" ]; then for ip in $hostip; do - nft add element inet fw4 omr_dst_bypass_all_4 { $ip } 2>&1 >/dev/null + nft add element inet fw4 omr_dst_bypass_all_4 { $ip } >/dev/null 2>&1 done fi if [ "$FASTTEST" = true ]; then @@ -75,7 +75,7 @@ else fi if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_4 2>/dev/null)" ]; then for ip in $hostip; do - nft delete element inet fw4 omr_dst_bypass_all_4 { $ip } 2>&1 >/dev/null + nft delete element inet fw4 omr_dst_bypass_all_4 { $ip } >/dev/null 2>&1 done fi /etc/init.d/sqm start $INTERFACE diff --git a/openmptcprouter/files/bin/omr-test-speed-server b/openmptcprouter/files/bin/omr-test-speed-server index 39a0a878f..c2f9ae091 100755 --- a/openmptcprouter/files/bin/omr-test-speed-server +++ b/openmptcprouter/files/bin/omr-test-speed-server @@ -39,13 +39,13 @@ if [ -n "$HOST" ] && [ -n "$PORT" ] && [ -n "$USERNAME" ] && [ -n "$PASSWORD" ]; export SQM_VERBOSITY_MIN=10 export SQM_VERBOSITY_MAX=0 export SQM_SYSLOG=1 - /etc/init.d/sqm stop $INTERFACE 2>&1 >/dev/null - #tc qdisc delete dev $INTERFACE root 2>&1 >/dev/null - #tc qdisc delete dev ifb4$INTERFACE root 2>&1 >/dev/null + /etc/init.d/sqm stop $INTERFACE >/dev/null 2>&1 + #tc qdisc delete dev $INTERFACE root >/dev/null 2>&1 + #tc qdisc delete dev ifb4$INTERFACE root >/dev/null 2>&1 } #if [ "$(multipath ${INTERFACE} | grep default)" ]; then # MP=true - # /etc/init.d/omr-tracker stop 2>&1 >/dev/null + # /etc/init.d/omr-tracker stop >/dev/null 2>&1 # multipath ${INTERFACE} off #fi if [ -n "$UPLOAD" ]; then @@ -94,10 +94,10 @@ if [ -n "$HOST" ] && [ -n "$PORT" ] && [ -n "$USERNAME" ] && [ -n "$PASSWORD" ]; fi #if [ $MP ]; then # multipath ${INTERFACE} on - # /etc/init.d/omr-tracker start & 2>&1 >/dev/null + # /etc/init.d/omr-tracker start & >/dev/null 2>&1 #fi [ -z "$FASTTEST" ] && echo "Restart SQM on $INTERFACE" - /etc/init.d/sqm start $INTERFACE 2>&1 >/dev/null + /etc/init.d/sqm start $INTERFACE >/dev/null 2>&1 else if [ "$resolve" != "${HOST}" ] || [ "$valid_ip6" != "ok" ]; then curl -k -o /dev/null -H "Authorization: Bearer ${KEY}" https://${HOST}:${PORT}/speedtest || echo diff --git a/openmptcprouter/files/bin/omr-test-speedv6 b/openmptcprouter/files/bin/omr-test-speedv6 index c1eb169b8..792b23eca 100755 --- a/openmptcprouter/files/bin/omr-test-speedv6 +++ b/openmptcprouter/files/bin/omr-test-speedv6 @@ -56,7 +56,7 @@ else fi if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_6 2>/dev/null)" ]; then for ip in $hostip; do - nft add element inet fw4 omr_dst_bypass_all_6 { $ip } 2>&1 >/dev/null + nft add element inet fw4 omr_dst_bypass_all_6 { $ip } >/dev/null 2>&1 done fi if [ "$FASTTEST" = true ]; then @@ -72,7 +72,7 @@ else fi if [ -n "$(nft list set inet fw4 omr_dst_bypass_all_6 2>/dev/null)" ]; then for ip in $hostip; do - nft delete element inet fw4 omr_dst_bypass_all_6 { $ip } 2>&1 >/dev/null + nft delete element inet fw4 omr_dst_bypass_all_6 { $ip } >/dev/null 2>&1 done fi /etc/init.d/sqm start $INTERFACE From c83c764b49c468cba27c6f295ecdd9c17d9a8d9d Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:48:31 +0200 Subject: [PATCH 14/21] Prevent xtables-addons on linux 6.10 --- xtables-addons/Makefile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/xtables-addons/Makefile b/xtables-addons/Makefile index fc4b39c36..9a09d845b 100644 --- a/xtables-addons/Makefile +++ b/xtables-addons/Makefile @@ -80,7 +80,7 @@ define BuildTemplate $$(call Package/xtables-addons) CATEGORY:=Network TITLE:=$(2) iptables extension - DEPENDS:=iptables $(if $(4),+kmod-ipt-$(1)) + DEPENDS:=iptables $(if $(4),+kmod-ipt-$(1)) @!LINUX_6_10 endef define Package/iptables-mod-$(1)/install @@ -99,7 +99,7 @@ define BuildTemplate define KernelPackage/ipt-$(1) SUBMENU:=Netfilter Extensions TITLE:=$(2) netfilter module - DEPENDS:=+kmod-ipt-core $(5) + DEPENDS:=+kmod-ipt-core $(5) @!LINUX_6_10 FILES:=$(foreach mod,$(4),$(PKG_BUILD_DIR)/extensions/$(mod).$(LINUX_KMOD_SUFFIX)) AUTOLOAD:=$(call AutoProbe,$(notdir $(4))) endef @@ -114,7 +114,7 @@ define Package/iptaccount $(call Package/xtables-addons) CATEGORY:=Network TITLE:=iptables-mod-account control utility - DEPENDS:=iptables +iptables-mod-account + DEPENDS:=iptables +iptables-mod-account @!LINUX_6_10 endef define Package/iptaccount/install @@ -136,7 +136,7 @@ define Package/iptasn DEPENDS:=iptables +iptables-mod-asn \ +perl +perlbase-getopt +perlbase-io +perl-text-csv_xs \ +perl-net-cidr-lite \ - +wget-ssl +!BUSYBOX_CONFIG_ZCAT:gzip + +wget-ssl +!BUSYBOX_CONFIG_ZCAT:gzip @!LINUX_6_10 endef define Package/iptasn/config @@ -172,7 +172,7 @@ define Package/iptgeoip DEPENDS:=iptables +iptables-mod-geoip \ +perl +perlbase-getopt +perlbase-io +perl-text-csv_xs \ +perl-net-cidr-lite \ - +wget-ssl +!BUSYBOX_CONFIG_ZCAT:gzip + +wget-ssl +!BUSYBOX_CONFIG_ZCAT:gzip @!LINUX_6_10 endef define Package/iptgeoip/config From d051ac10be705779b1089afd63e840e9b8a3e4c5 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:48:53 +0200 Subject: [PATCH 15/21] Update r8125 --- r8125/Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/r8125/Makefile b/r8125/Makefile index 827bca720..4b4fce6a6 100644 --- a/r8125/Makefile +++ b/r8125/Makefile @@ -7,13 +7,13 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=r8125 -PKG_VERSION:=9.012.04-1 +PKG_VERSION:=9.013.02-2 PKG_RELEASE:=$(AUTORELEASE) PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/awesometic/realtek-r8125-dkms/tar.gz/$(PKG_VERSION)? -PKG_HASH:=470f02f1f3e9a12a0443128f5efd5e254e5e8e94487a5ab949724100fdca6ab4 +PKG_HASH:=eae10100680de13e8119602c50a1748b8a0669eccd61d9a4515b4c846deb3960 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/realtek-$(PKG_NAME)-dkms-$(PKG_VERSION) PKG_LICENSE:=GPL-2.0-only PKG_LICENSE_FILES:=LICENSE @@ -25,6 +25,7 @@ define KernelPackage/r8125 SUBMENU:=Network Devices VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE) FILES:= $(PKG_BUILD_DIR)/src/r8125.ko + DEPENDS:=@!LINUX_6_10 AUTOLOAD:=$(call AutoProbe,r8125) endef From 3caab17ed1e82457947a27ec2b8684641575bbfa Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:49:34 +0200 Subject: [PATCH 16/21] Prevent OpenVPN DCO on linux 6.10 --- ovpn-dco/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ovpn-dco/Makefile b/ovpn-dco/Makefile index d41d0b8e3..105d9a9c1 100644 --- a/ovpn-dco/Makefile +++ b/ovpn-dco/Makefile @@ -27,7 +27,7 @@ include $(INCLUDE_DIR)/package.mk define KernelPackage/ovpn-dco-v2 SUBMENU:=Network Support TITLE:=OpenVPN data channel offload - DEPENDS:=+kmod-crypto-aead +kmod-udptunnel4 +IPV6:kmod-udptunnel6 + DEPENDS:=+kmod-crypto-aead +kmod-udptunnel4 +IPV6:kmod-udptunnel6 @!LINUX_6_10 FILES:=$(PKG_BUILD_DIR)/drivers/net/ovpn-dco/ovpn-dco-v2.ko AUTOLOAD:=$(call AutoLoad,30,ovpn-dco-v2) endef From 17f047fe01bf8139589edd709249fcc765a31b3b Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Thu, 4 Jul 2024 10:50:11 +0200 Subject: [PATCH 17/21] ShadowSocks Rust init fix no output --- shadowsocks-rust/files/shadowsocks-rust.init | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shadowsocks-rust/files/shadowsocks-rust.init b/shadowsocks-rust/files/shadowsocks-rust.init index fbca7e408..771961d70 100644 --- a/shadowsocks-rust/files/shadowsocks-rust.init +++ b/shadowsocks-rust/files/shadowsocks-rust.init @@ -339,7 +339,7 @@ server_state() { rules_up() { rules_exist && { - [ -f /bin/blocklanfw ] && /bin/blocklanfw 2>&1 >/dev/null + [ -f /bin/blocklanfw ] && /bin/blocklanfw >/dev/null 2>&1 return 0 } [ "$(uci -q get shadowsocks-rust.ss_rules.disabled)" = "1" ] && return 0 @@ -359,7 +359,7 @@ rules_up() { logger -t "Shadowsocks-rust" "Reload omr-bypass rules" /etc/init.d/omr-bypass reload_rules } - [ -f /bin/blocklanfw ] && /bin/blocklanfw 2>&1 >/dev/null + [ -f /bin/blocklanfw ] && /bin/blocklanfw >/dev/null 2>&1 } rules_down() { From e33bd66daf40341d82fd60e362fcd80127445d43 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 5 Jul 2024 16:01:10 +0200 Subject: [PATCH 18/21] Small cleaning codes changes in OMR-Tracker scripts --- omr-tracker/files/bin/omr-tracker | 57 ++++++++++++------------ omr-tracker/files/bin/omr-tracker-server | 50 ++++++++++----------- omr-tracker/files/bin/omr-tracker-ss | 17 ++++--- 3 files changed, 62 insertions(+), 62 deletions(-) diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 937b85602..63a88279e 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # shellcheck disable=SC1091,SC1090 # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : @@ -34,9 +34,10 @@ export OMR_TRACKER_INTERVAL_TRIES export OMR_TRACKER_INTERVAL export OMR_TRACKER_NO_BIND -dscp=56 # set DSCP CS7 (56) in outgoing packets -initial_hosts="$OMR_TRACKER_HOSTS" -initial_hosts6="$OMR_TRACKER_HOSTS6" +#dscp=56 # set DSCP CS7 (56) in outgoing packets + +#initial_hosts="$OMR_TRACKER_HOSTS" +#initial_hosts6="$OMR_TRACKER_HOSTS6" initial_timeout="$OMR_TRACKER_TIMEOUT" wait_test=${OMR_TRACKER_WAIT_TEST:-0} @@ -102,15 +103,15 @@ _post_tracking() { } _ping_server() { - local servername=$1 + local servername="$1" [ -z "$servername" ] && return - local disabled=$(uci -q get openmptcprouter.$1.disabled) - local device=$2 + local disabled=$(uci -q get openmptcprouter."$servername".disabled) + local device="$2" if [ -n "$device" ] && [ "$disabled" != "1" ]; then check_ping() { - serverip=$1 + serverip="$1" if [ -n "$serverip" ]; then - _ping $serverip $device "yes" + _ping "$serverip" "$device" "yes" statusp=$? if $(exit $statusp); then serverip_ping=true @@ -119,21 +120,21 @@ _ping_server() { fi } config_load openmptcprouter - config_list_foreach ${servername} ip check_ping + config_list_foreach "${servername}" ip check_ping fi } _httping_server() { - local servername=$1 + local servername="$1" [ -z "$servername" ] && return - local disabled=$(uci -q get openmptcprouter.$1.disabled) - local port=$(uci -q get openmptcprouter.$1.port) - local device=$2 + local disabled=$(uci -q get openmptcprouter."$servername".disabled) + local port=$(uci -q get openmptcprouter."$servername".port) + local device="$2" if [ -n "$device" ] && [ "$disabled" != "1" ]; then check_ping() { - serverip=$1 + serverip="$1" if [ -n "$serverip" ]; then - _httping "${serverip}:${port}" $device "yes" true + _httping "${serverip}:${port}" "$device" "yes" true statusp=$? if $(exit $statusp); then serverip_ping=true @@ -142,15 +143,15 @@ _httping_server() { fi } config_load openmptcprouter - config_list_foreach ${servername} ip check_ping + config_list_foreach "${servername}" ip check_ping fi } _ping() { - local host=$1 + local host="$1" [ -z "$host" ] && return - local device=$2 - local localip=$3 + local device="$2" + local localip="$3" if [ -n "$OMR_TRACKER_INTERFACE" ] && { [ "$OMR_TRACKER_NO_BIND" = "1" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "3g" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "qmi" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "ncm" ]; }; then ret=$(ping -I "${device}" \ -w "$OMR_TRACKER_TIMEOUT" \ @@ -162,7 +163,7 @@ _ping() { ) && echo "$ret" | grep -sq " 0% packet loss" && { if [ "$localip" = "yes" ]; then OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') - _update_rto "$OMR_TRACKER_LATENCY" + #_update_rto "$OMR_TRACKER_LATENCY" fi return } @@ -184,7 +185,7 @@ _ping() { latency=$(echo "$ret" | grep rtt | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') [ -n "$latency" ] && { OMR_TRACKER_LATENCY="$latency" - _update_rto "$OMR_TRACKER_LATENCY" + #_update_rto "$OMR_TRACKER_LATENCY" } OMR_TRACKER_LOSS="$loss" fi @@ -208,7 +209,7 @@ _httping() { ) && echo "$ret" | grep -sq "1 ok" && { if [ "$localip" = "yes" ]; then OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') - _update_rto "$OMR_TRACKER_LATENCY" + #_update_rto "$OMR_TRACKER_LATENCY" fi return } @@ -220,7 +221,7 @@ _httping() { ) && echo "$ret" | grep -sq "1 ok" && { if [ "$localip" = "yes" ]; then OMR_TRACKER_LATENCY=$(echo "$ret" | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') - _update_rto "$OMR_TRACKER_LATENCY" + #_update_rto "$OMR_TRACKER_LATENCY" fi return } @@ -238,7 +239,7 @@ _dns() { one.one.one.one ) && echo "$ret" | grep -sq "1.1.1.1" && { OMR_TRACKER_LATENCY=$(echo "$ret" | awk '/Query time/{print $4}') - _update_rto "$OMR_TRACKER_LATENCY" + #_update_rto "$OMR_TRACKER_LATENCY" return } false @@ -267,8 +268,8 @@ while true; do OMR_TRACKER_DEVICE_GATEWAY6= serverip_ping=false [ -z "$OMR_TRACKER_DEVICE" ] && { - network_get_device OMR_TRACKER_DEVICE $OMR_TRACKER_INTERFACE - [ -z "$OMR_TRACKER_DEVICE" ] && network_get_physdev OMR_TRACKER_DEVICE $OMR_TRACKER_INTERFACE + network_get_device OMR_TRACKER_DEVICE "$OMR_TRACKER_INTERFACE" + [ -z "$OMR_TRACKER_DEVICE" ] && network_get_physdev OMR_TRACKER_DEVICE "$OMR_TRACKER_INTERFACE" [ -z "$OMR_TRACKER_DEVICE" ] && OMR_TRACKER_DEVICE=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["l3_device"]') [ -z "$OMR_TRACKER_DEVICE" ] && OMR_TRACKER_DEVICE=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" | jsonfilter -q -e '@["l3_device"]') #[ -z "$OMR_TRACKER_DEVICE" ] && config_get OMR_TRACKER_DEVICE "$OMR_TRACKER_INTERFACE" device @@ -278,7 +279,7 @@ while true; do if [ -n "$OMR_TRACKER_DEVICE" ] && [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then if [ -n "$(ip link show $OMR_TRACKER_DEVICE | grep 'state UP')" ] || [ -n "$(ip link show $OMR_TRACKER_DEVICE | grep 'state UNKNOWN')" ]; then # retrieve iface ip and gateway - if ([ "$OMR_TRACKER_FAMILY" = "ipv4" ] || [ "$OMR_TRACKER_FAMILY" = "ipv4ipv6" ]) && [ "$OMR_TRACKER_INTERFACE_PROTO" != "dhcpv6" ]; then + if { [ "$OMR_TRACKER_FAMILY" = "ipv4" ] || [ "$OMR_TRACKER_FAMILY" = "ipv4ipv6" ]; } && [ "$OMR_TRACKER_INTERFACE_PROTO" != "dhcpv6" ]; then OMR_TRACKER_DEVICE_IP=$(ip -4 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}') if [ -z "$OMR_TRACKER_DEVICE_IP" ]; then OMR_TRACKER_DEVICE_IP=$(ip -4 addr show dev "$OMR_TRACKER_DEVICE" | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1) diff --git a/omr-tracker/files/bin/omr-tracker-server b/omr-tracker/files/bin/omr-tracker-server index fe7fc0b12..a69d9e9b1 100755 --- a/omr-tracker/files/bin/omr-tracker-server +++ b/omr-tracker/files/bin/omr-tracker-server @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : name=$0 @@ -41,7 +41,7 @@ _check_server() { local host=$1 local port=$2 local k=0 - local valid_ip6=$(valid_subnet6 $host) + local valid_ip6=$(valid_subnet6 "$host") while [ "$server_ping" = false ] && [ "$k" -le "$retry" ]; do if [ "$valid_ip6" != "ok" ]; then ret=$(curl \ @@ -67,7 +67,7 @@ _check_server() { _check_server_intf() { local host=$1 local port=$2 - local valid_ip6=$(valid_subnet6 $host) + local valid_ip6=$(valid_subnet6 "$host") for intf in $(multipath 2>/dev/null | awk '/default/ {print $1}'); do local k=0 while [ "$server_ping" = false ] && [ "$k" -le "$retry" ]; do @@ -76,7 +76,7 @@ _check_server_intf() { --max-time "$OMR_TRACKER_TIMEOUT" \ -s \ -k \ - --interface $intf \ + --interface "$intf" \ "https://${host}:${port}/" ) else @@ -99,7 +99,7 @@ _check_server_intf() { _get_server_name() { local serverid=$1 local serverip=$2 - config_get serveripc $serverid server + config_get serveripc "$serverid" server if [ "$serveripc" = "$serverip" ]; then servername=$serverid fi @@ -107,25 +107,25 @@ _get_server_name() { _disable_current() { local serv=$1 - uci -q set openmptcprouter.${server}.current=0 + uci -q set openmptcprouter."${server}".current=0 } _disable_redir() { - local redir=$1 - local serverdisable=$2 + local redir="$1" + local serverdisable="$2" local shadowsocks="$3" - config_get serverss $redir server + config_get serverss "$redir" server if [ "$serverss" = "$serverdisable" ]; then - uci -q set ${shadowsocks}.${redir}.disabled=1 + uci -q set "${shadowsocks}"."${redir}".disabled=1 fi } _enable_redir() { - local redir=$1 + local redir="$1" local shadowsocks="$2" - config_get serverss $redir server + config_get serverss "$redir" server if [ "$serverss" = "sss${count}" ]; then - uci -q set ${shadowsocks}.${redir}.disabled=0 + uci -q set "${shadowsocks}"."${redir}".disabled=0 fi } @@ -164,7 +164,7 @@ _check_master() { set_ip() { ip="$serverip" if [ "$server_ping" = true ]; then - if ([ -n "$(uci -q get shadowsocks-libev)" ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get shadowsocks-rust)" ] && [ "$(uci -q get shadowsocks-rust.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get openvpn.omr)" ] && [ -z "$(uci -q get openvpn.omr.remote | grep $ip)" ]); then + if { [ -n "$(uci -q get shadowsocks-libev)" ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]; } || { [ -n "$(uci -q get shadowsocks-rust)" ] && [ "$(uci -q get shadowsocks-rust.sss${count}.server | tr -d '\n')" != "$ip" ]; } || { [ -n "$(uci -q get openvpn.omr)" ] && [ -z "$(uci -q get openvpn.omr.remote | grep $ip)" ]; }; then logger -t "OMR-Tracker-Server" "Master server ${name} up ($ip), set it back" changes="1" #logger -t "OMR-Tracker-Server" "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n') - $ip" @@ -217,7 +217,7 @@ _check_master() { set openmptcprouter.${name}.current='1' commit openmptcprouter EOF - /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null + /etc/init.d/openmptcprouter-vps get_openvpn_key "$name" >/dev/null 2>/dev/null #/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null /etc/init.d/v2ray restart >/dev/null 2>/dev/null /etc/init.d/xray restart >/dev/null 2>/dev/null @@ -259,11 +259,11 @@ _check_master() { servername="" config_load shadowsocks-libev config_foreach _get_server_name server "$ip" - [ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-libev" + [ -n "$servername" ] && config_foreach _disable_redir ss_redir "$servername" "shadowsocks-libev" servername="" config_load shadowsocks-rust config_foreach _get_server_name server "$ip" - [ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-rust" + [ -n "$servername" ] && config_foreach _disable_redir ss_redir "$servername" "shadowsocks-rust" if [ -n "$(uci -q get openvpn.omr.remote | grep $ip)" ]; then uci -q batch <<-EOF >/dev/null @@ -329,10 +329,10 @@ _check_backup() { local count=0 local countips=0 local changes="0" - config_get backup $1 backup - config_get ip $1 ip - config_get port $1 port - config_get disabled $1 disabled + config_get backup "$1" backup + config_get ip "$1" ip + config_get port "$1" port + config_get disabled "$1" disabled serverip="" [ "$backup" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && { check_ip() { @@ -359,7 +359,7 @@ _check_backup() { ip="$serverip" #[ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" = "$ip" ] && break if [ "$server_ping" = true ]; then - if ([ -n "$(uci -q get shadowsocks-libev)" ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get shadowsocks-rust)" ] && [ "$(uci -q get shadowsocks-rust.sss${count}.server | tr -d '\n')" != "$ip" ]) || ([ -n "$(uci -q get openvpn.omr)" ] && [ -z "$(uci -q get openvpn.omr.remote | grep $ip)" ]); then + if { [ -n "$(uci -q get shadowsocks-libev)" ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ]; } || { [ -n "$(uci -q get shadowsocks-rust)" ] && [ "$(uci -q get shadowsocks-rust.sss${count}.server | tr -d '\n')" != "$ip" ]; } || { [ -n "$(uci -q get openvpn.omr)" ] && [ -z "$(uci -q get openvpn.omr.remote | grep $ip)" ]; }; then logger -t "OMR-Tracker-Server" "Use backup server $1 ($ip)" changes="1" uci -q batch <<-EOF >/dev/null @@ -407,7 +407,7 @@ _check_backup() { set openmptcprouter.${name}.current='1' commit openmptcprouter EOF - /etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null + /etc/init.d/openmptcprouter-vps get_openvpn_key "$name" >/dev/null 2>/dev/null #/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null /etc/init.d/v2ray restart >/dev/null 2>/dev/null /etc/init.d/xray restart >/dev/null 2>/dev/null @@ -452,11 +452,11 @@ _check_backup() { EOF config_load shadowsocks-libev config_foreach _get_server_name server "$ip" - [ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-libev" + [ -n "$servername" ] && config_foreach _disable_redir ss_redir "$servername" "shadowsocks-libev" servername="" config_load shadowsocks-rust config_foreach _get_server_name server "$ip" - [ -n "$servername" ] && config_foreach _disable_redir ss_redir $servername "shadowsocks-rust" + [ -n "$servername" ] && config_foreach _disable_redir ss_redir "$servername" "shadowsocks-rust" OMR_TRACKER_STATUS_MSG="No answer to ping and to API check" mail_alert="$(uci -q get omr-tracker.server.mail_alert)" diff --git a/omr-tracker/files/bin/omr-tracker-ss b/omr-tracker/files/bin/omr-tracker-ss index 67b0f7215..5b1ebfc57 100755 --- a/omr-tracker/files/bin/omr-tracker-ss +++ b/omr-tracker/files/bin/omr-tracker-ss @@ -1,7 +1,6 @@ -#!/bin/sh +#!/bin/bash # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : -name=$0 basename="$(basename $0)" if [ -e /usr/sbin/iptables-nft ]; then @@ -79,11 +78,11 @@ interval=${OMR_TRACKER_INTERVAL:-10} retry=${OMR_TRACKER_TRIES:-4} proxy=${OMR_TRACKER_PROXY:-127.0.0.1:1111} hosts=${OMR_TRACKER_HOSTS:-1.1.1.1 1.0.0.1} -hosts6=${OMR_TRACKER_HOSTS6} +#hosts6=${OMR_TRACKER_HOSTS6} wait_test=${OMR_TRACKER_WAIT_TEST:-0} server=${OMR_TRACKER_SERVER:-sss0} type=${OMR_TRACKER_SS_TYPE:-libev} -nodns=0 +#nodns=0 last=0 nocontact="" @@ -98,7 +97,7 @@ while true; do [ "$host" = "$hosts" ] || { hosts="${hosts#* } $host" } - if [ "$(curl -s -I -w %{http_code} --socks5 ${proxy} --max-time ${timeout} $host -o /dev/null)" != "000" ]; then + if [ "$(curl -s -I -w %{http_code} --socks5 "${proxy}" --max-time "${timeout}" "$host" -o /dev/null)" != "000" ]; then nocontact="" [ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.ss_${server})" = "" ] && { _log "Shadowsocks $type ${server} is up (can contact via http ${host})" @@ -127,26 +126,26 @@ while true; do _log "Reload Shadowsocks rules" /etc/init.d/shadowsocks-libev rules_up 2> /dev/null if ! /etc/init.d/shadowsocks-libev rules_exist ; then - /etc/init.d/shadowsocks-libev restart 2>&1 >/dev/null + /etc/init.d/shadowsocks-libev restart >/dev/null 2>&1 fi _get_ip elif [ "$type" = "rust" ] && [ "$(uci -q get shadowsocks-rust.ss_rules.disabled)" != "1" ]; then _log "Reload Shadowsocks Rust rules" /etc/init.d/shadowsocks-rust rules_up 2> /dev/null if ! /etc/init.d/shadowsocks-rust rules_exist ; then - /etc/init.d/shadowsocks-rust restart 2>&1 >/dev/null + /etc/init.d/shadowsocks-rust restart >/dev/null 2>&1 fi _get_ip fi fi - [ "$(uci -q get openmptcprouter.omr.detected_public_ipv4)" = "" ] || ([ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.detected_public_ipv6)" = "" ]) && _get_ip + [ "$(uci -q get openmptcprouter.omr.detected_public_ipv4)" = "" ] || { [ "$(uci -q get openmptcprouter.settings.disable_ipv6)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.detected_public_ipv6)" = "" ]; } && _get_ip last=0 OMR_TRACKER_STATUS="OK" else last=$((last + 1 )) [ -z "$nocontact" ] && nocontact="$host" || nocontact="$nocontact, $host" [ "${last}" -ge "${retry}" ] && { - if [ "$OMR_TRACKER_PREV_STATUS" != "ERROR" ] && ([ -n "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep ssr)" ] || [ -n "$(nft list ruleset 2>/dev/null | grep ss_r)" ] || [ -n "$(nft list ruleset 2>/dev/null | grep ssr_r)" ]); then + if [ "$OMR_TRACKER_PREV_STATUS" != "ERROR" ] && { [ -n "$($IPTABLES -w -t nat -L -n 2>/dev/null | grep ssr)" ] || [ -n "$(nft list ruleset 2>/dev/null | grep ss_r)" ] || [ -n "$(nft list ruleset 2>/dev/null | grep ssr_r)" ]; }; then _log "Shadowsocks $type ${server} is down (can't contact via http ${nocontact})" OMR_TRACKER_STATUS_MSG="Shadowsocks $type ${server} is down (can't contact via http ${nocontact})" uci -q set openmptcprouter.omr.ss_${server}="down" From 739fdc5dfa99e86fedb03b745e8a758ac62cf134 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 5 Jul 2024 16:02:36 +0200 Subject: [PATCH 19/21] Remove disabled interface before anything in initialize OMR-Tracker post script --- .../files/usr/share/omr/post-tracking.d/001-initialize | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize b/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize index 7d58e5d9a..a83fe1e52 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/001-initialize @@ -5,6 +5,11 @@ [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ] && multipath "$OMR_TRACKER_DEVICE" off >/dev/null 2>&1 if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$OMR_TRACKER_INTERFACE" != "omr6in4" ]; then + if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.disabled)" = "1" ]; then + /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" + /etc/init.d/omr-tracker restart + exit 0 + fi metric="$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" if [ -z "$metric" ] || { [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]; } || { [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]; }; then _log "Routes not correctly set for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE table $metric) with IPs $OMR_TRACKER_DEVICE_IP $OMR_TRACKER_DEVICE_IP6" @@ -12,9 +17,4 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TR /etc/init.d/omr-tracker restart exit 0 fi - if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.disabled)" = "1" ]; then - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" - /etc/init.d/omr-tracker restart - exit 0 - fi fi From b10ef6ed9d70e6a066677b851b19616b99805292 Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 5 Jul 2024 16:03:08 +0200 Subject: [PATCH 20/21] Get default gateway only if needed in error OMR-Tracker post script --- omr-tracker/files/usr/share/omr/post-tracking.d/002-error | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/002-error b/omr-tracker/files/usr/share/omr/post-tracking.d/002-error index 6e422d69a..f31612110 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/002-error +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/002-error @@ -2,9 +2,6 @@ . /lib/functions/network.sh -default_gw=$(ip route get 1.1.1.1 | grep via | awk '{print $3}') -default_gw6=$(ip -6 route get 2606:4700:4700::1111 | grep via | awk '{print $3}') - interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') # An interface in error will never be used in MPTCP @@ -165,6 +162,8 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || { [ "$OMR_TRACKER_INTERFACE" != "omrvp #if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then if [ -n "$OMR_TRACKER_INTERFACE" ]; then + default_gw=$(ip route get 1.1.1.1 | grep via | awk '{print $3}') + default_gw6=$(ip -6 route get 2606:4700:4700::1111 | grep via | awk '{print $3}') if { [ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ] || [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ]; } && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Default gw: $default_gw - Set routes (current: $(ip r) )" config_load network From 99751c367419c891f524affe1c37fd23cd04573f Mon Sep 17 00:00:00 2001 From: "Ycarus (Yannick Chabanois)" Date: Fri, 5 Jul 2024 16:03:51 +0200 Subject: [PATCH 21/21] Remove metric part already done in initialize OMR-Tracker post script --- .../files/usr/share/omr/post-tracking.d/003-up | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/omr-tracker/files/usr/share/omr/post-tracking.d/003-up b/omr-tracker/files/usr/share/omr/post-tracking.d/003-up index aed7c3eee..6b4dc1f3d 100755 --- a/omr-tracker/files/usr/share/omr/post-tracking.d/003-up +++ b/omr-tracker/files/usr/share/omr/post-tracking.d/003-up @@ -733,17 +733,6 @@ default_gw6=$(ip -6 route get 2606:4700:4700::1111 | grep via | awk '{print $3}' initcwrwnd="" interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') -if [ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$OMR_TRACKER_INTERFACE" != "omr6in4" ]; then - metric="$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" - if [ -z "$metric" ] || { [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -z "$(ip route show table $metric | grep $OMR_TRACKER_DEVICE)" ]; } || { [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -z "$(ip -6 route show table 6${metric} | grep $OMR_TRACKER_DEVICE)" ]; }; then - _log "Routes not correctly set for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE table $metric) with IPs $OMR_TRACKER_DEVICE_IP $OMR_TRACKER_DEVICE_IP6" - /etc/init.d/mptcp reload "$OMR_TRACKER_DEVICE" - /etc/init.d/omr-tracker restart - exit 0 - fi -fi - - if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "omrvpn" ] || [ "$OMR_TRACKER_INTERFACE" = "omr6in4" ]; then if [ "$(uci -q get openmptcprouter.settings.shadowsocksudp)" = "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ -n "$(uci -q get shadowsocks-libev.sss0)" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "hi1" ]; then _log "Tunnel up disable use of ShadowSocks for UDP"