From 9916032c7ae2f5bac222072b9e09c263217610e8 Mon Sep 17 00:00:00 2001 From: suyuan168 <175338101@qq.com> Date: Fri, 20 May 2022 08:25:55 +0800 Subject: [PATCH] fix --- 6in4/Makefile | 45 + 6in4/files/6in4.sh | 149 + bcm27xx-eeprom/Makefile | 4 +- ...1-rpi-eeprom-update-OpenWrt-defaults.patch | 8 +- cryptodev-linux/Makefile | 58 - dsvpn/files/init | 16 +- glorytun-udp/init | 2 +- glorytun/Makefile | 9 +- glorytun/init | 3 +- golang/golang-values.mk | 42 +- golang/golang/Makefile | 32 +- grpcurl/Makefile | 60 - libell/Makefile | 6 +- libmbim/Makefile | 16 +- libqmi/Makefile | 29 +- luci-app-glorytun-tcp/po/fr/glorytun-tcp.po | 6 +- .../root/etc/uci-defaults/1200-luci-glorytun | 3 +- .../root/etc/config/glorytun-udp | 4 - .../etc/uci-defaults/1201-luci-glorytun-udp | 2 +- luci-app-iperf/po/fr/iperf.po | 4 +- .../resources/view/services/mlvpn.js | 6 - luci-app-mlvpn/po/fr/mlvpn.po | 6 +- luci-app-mptcp/luasrc/controller/mptcp.lua | 11 +- luci-app-mptcp/luasrc/model/cbi/mptcp.lua | 90 +- .../luasrc/view/mptcp/multipath.htm | 4 +- luci-app-mptcp/po/fr/mptcp.po | 10 +- luci-app-omr-bypass/Makefile | 2 +- .../resources/view/services/omr-bypass.js | 2 +- luci-app-omr-bypass/po/fr/omr-bypass.po | 6 +- .../root/etc/init.d/omr-bypass | 23 +- luci-app-omr-dscp/po/fr/omr-dscp.po | 14 +- luci-app-omr-dscp/root/etc/config/dscp | 5 - luci-app-omr-dscp/root/etc/init.d/omr-dscp | 4 +- luci-app-omr-quota/po/fr/omr-quota.po | 6 +- luci-app-omr-tracker/po/it/omr-tracker.po | 8 +- .../luci/menu.d/luci-app-omr-tracker.json | 0 .../rpcd/acl.d/luci-app-omr-tracker.json | 0 .../openmptcprouter/css/wanstatus.css | 0 .../openmptcprouter/images/status-doing.png | Bin .../openmptcprouter/images/status-done.png | Bin .../openmptcprouter/images/status-error.png | Bin .../openmptcprouter/images/status-todo.png | Bin .../openmptcprouter/images/status-warn.png | Bin .../openmptcprouter/images/statusError.png | Bin .../openmptcprouter/images/statusOK.png | Bin .../openmptcprouter/images/statusWarning.png | Bin .../htdocs/luci-static/resources/spinner.gif | Bin .../luasrc/controller/openmptcprouter.lua | 111 +- .../luasrc/view/openmptcprouter/backup.htm | 0 .../luasrc/view/openmptcprouter/debug.htm | 0 .../luasrc/view/openmptcprouter/settings.htm | 6 - .../luasrc/view/openmptcprouter/wanstatus.htm | 6 +- .../luasrc/view/openmptcprouter/wizard.htm | 53 +- .../po/de/openmptcprouter.po | 133 +- .../po/fr/openmptcprouter.po | 6 +- .../po/it/openmptcprouter.po | 107 +- .../po/zh_Hans/openmptcprouter.po | 10 +- .../root/bin/anonymous_config.sh | 1 - .../root/bin/omr-modemmanager | 2 +- .../root/bin/omr-mptcp-intf | 18 +- .../root/etc/hotplug.d/net/99-omr-rename | 0 .../root/etc/init.d/openmptcprouter | 29 +- .../root/usr/libexec/rpcd/openmptcprouter | 41 +- .../root/usr/libexec/rpcd/openmptcprouter.bak | 1870 ----------- luci-app-snmpd/po/fr/snmpd.po | 38 +- .../root/etc/init.d/sysupgrade | 2 +- .../view/dashboard/include/10_router.js | 2 +- luci-mod-dashboard/po/fr/dashboard.po | 12 +- luci-mod-network/Makefile | 4 +- .../luci-static/resources/tools/network.js | 917 ------ .../resources/view/network/dhcp.js | 63 +- .../resources/view/network/hosts.js | 17 +- .../resources/view/network/interfaces.js | 1053 ++---- .../resources/view/network/routes.js | 5 - .../resources/view/network/wireless.js | 172 +- .../share/rpcd/acl.d/luci-mod-network.json | 6 +- luci-proto-modemmanager/Makefile | 15 + .../resources/protocol/modemmanager.js | 121 + .../rpcd/acl.d/luci-proto-modemmanager.json | 12 + luci-theme-openmptcprouter/Makefile | 0 .../luci-static/openmptcprouter/html5.js | 0 .../luci-static/openmptcprouter/mobile.css | 0 .../resources/menu-openmptcprouter.js | 0 .../GalanoGrotesqueW00-Regular.woff2 | Bin .../luci-static/openwrt2020/cascade.css | 0 .../luci-static/openwrt2020/favicon.png | Bin .../luci-static/openwrt2020/omr-logo.png | Bin .../luci-static/openwrt2020/spinner.svg | 0 .../luci-static/resources/menu-openwrt2020.js | 0 .../luasrc/view/themes/openwrt2020/footer.htm | 0 .../luasrc/view/themes/openwrt2020/header.htm | 0 macvlan/files/etc/init.d/macvlan | 16 +- mc/Config.in | 59 + mc/Makefile | 128 + mc/patches/010-subshell.patch | 11 + ...20-fix-mouse-handling-newer-terminfo.patch | 11 + mc/patches/030-fix-gettext-full-0.21.patch | 13 + mlvpn/Makefile | 6 +- mlvpn/files/etc/config/mlvpn | 2 - mlvpn/files/etc/init.d/mlvpn | 13 +- mlvpn/files/etc/uci-defaults/4100-mlvpn | 2 +- mlvpn/patches/010-musl-fix.patch | 11 + mlvpn/patches/020-remove-cdefs.patch | 33 - modemmanager/Makefile | 19 +- modemmanager/files/25-modemmanager-net | 4 + modemmanager/files/25-modemmanager-tty | 2 + modemmanager/files/25-modemmanager-usb | 2 + modemmanager/files/25-modemmanager-wwan | 15 - modemmanager/files/modemmanager.common | 17 +- modemmanager/files/modemmanager.init | 10 +- modemmanager/files/modemmanager.proto | 21 +- .../files/usr/sbin/ModemManager-wrapper | 33 - mptcp/Makefile | 1 - mptcp/files/etc/uci-defaults/mptcp-defaults | 12 - mptcp/files/usr/bin/multipath | 148 +- .../share/omr/post-tracking.d/post-tracking | 454 +-- mptcpd/Makefile | 11 +- mptcpd/patches/log.patch | 24 + mptcpd/patches/remove_log.patch | 167 - ndpi-netfilter2/Makefile | 88 + omr-6in4/files/etc/init.d/omr-6in4 | 2 +- omr-quota/files/bin/omr-quota | 5 +- omr-tracker/files/bin/omr-tracker | 14 +- omr-tracker/files/bin/omr-tracker-gre | 3 +- omr-tracker/files/etc/config/omr-tracker | 7 +- omr-tracker/files/etc/init.d/omr-tracker | 20 +- .../files/etc/uci-defaults/omr-tracker | 3 +- openmptcprouter/Makefile | 0 openmptcprouter/files/bin/blocklanfw | 28 +- openmptcprouter/files/bin/omr-test-speed | 42 +- openmptcprouter/files/bin/omr-test-speedv6 | 41 +- openmptcprouter/files/etc/firewall.gre-tunnel | 0 openmptcprouter/files/etc/firewall.omr-server | 0 openmptcprouter/files/etc/firewall.ttl | 14 - .../files/etc/hotplug.d/iface/00-nego | 2 +- openmptcprouter/files/etc/init.d/alwaysrw | 7 - openmptcprouter/files/etc/init.d/mptcpovervpn | 2 +- .../files/etc/init.d/openmptcprouter-vps | 114 +- .../files/etc/init.d/openvpnbonding | 2 +- openmptcprouter/files/etc/iproute2/rt_dsfield | 0 .../files/etc/sysctl.d/default.conf | 0 .../etc/uci-defaults/1930-omr-shadowsocks | 1 - .../files/etc/uci-defaults/1940-omr-dns | 5 +- .../files/etc/uci-defaults/1970-omr-vnstat | 8 +- .../files/etc/uci-defaults/1980-omr-firewall | 21 +- .../files/etc/uci-defaults/1990-omr-tracker | 5 - .../files/etc/uci-defaults/2020-omr-vpn | 2 +- .../files/etc/uci-defaults/2030-omr-fstab | 17 - .../files/etc/uci-defaults/2040-omr-sqm | 18 +- .../files/etc/uci-defaults/2060-omr-system | 66 +- .../files/etc/uci-defaults/2090-omr-wwan | 4 +- .../files/etc/uci-defaults/2091-omr-wifi | 22 +- openmptcprouter/files/etc/wgetrc4 | 0 r8125/LICENSE | 21 + r8125/Makefile | 45 +- r8125/README.md | 8 + r8125/src/Makefile | 15 +- r8125/src/Makefile_linux24x | 0 r8125/src/r8125.h | 291 +- r8125/src/r8125_dash.h | 0 r8125/src/r8125_firmware.h | 68 - r8125/src/r8125_n.c | 2841 +++++++---------- r8125/src/r8125_ptp.c | 0 r8125/src/r8125_ptp.h | 0 r8125/src/r8125_realwow.h | 0 r8125/src/r8125_rss.c | 3 + r8125/src/r8125_rss.h | 3 - r8125/src/rtl_eeprom.c | 0 r8125/src/rtl_eeprom.h | 0 r8125/src/rtltool.c | 39 + r8125/src/rtltool.h | 0 ...-r8168-add-LED-configuration-from-OF.patch | 42 - shadowsocks-libev/Makefile | 11 +- shadowsocks-libev/files/shadowsocks.conf | 2 +- shadowsocks-libev/patches/020-NOCRYPTO.patch | 632 ++++ shadowsocks-v2ray-plugin/Makefile | 2 +- shortcut-fe/src/Kconfig | 3 +- speedtestc/Makefile | 2 +- speedtestc/patches/compile-fix.patch | 38 + speedtestc/patches/user-agent.patch | 22 + speedtestcpp/Makefile | 42 - tracebox/Makefile | 8 +- umbim/Makefile | 47 + umbim/files/lib/netifd/proto/mbim.sh | 240 ++ v2ray-core/Makefile | 9 +- 185 files changed, 4014 insertions(+), 7755 deletions(-) create mode 100644 6in4/Makefile create mode 100755 6in4/files/6in4.sh delete mode 100644 cryptodev-linux/Makefile delete mode 100644 grpcurl/Makefile mode change 100755 => 100644 luci-app-omr-tracker/root/usr/share/luci/menu.d/luci-app-omr-tracker.json mode change 100755 => 100644 luci-app-omr-tracker/root/usr/share/rpcd/acl.d/luci-app-omr-tracker.json mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-doing.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-done.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-error.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-todo.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-warn.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusError.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusOK.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusWarning.png mode change 100755 => 100644 luci-app-openmptcprouter/htdocs/luci-static/resources/spinner.gif mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm mode change 100755 => 100644 luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm mode change 100755 => 100644 luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename delete mode 100644 luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter.bak delete mode 100644 luci-mod-network/htdocs/luci-static/resources/tools/network.js create mode 100644 luci-proto-modemmanager/Makefile create mode 100644 luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js create mode 100644 luci-proto-modemmanager/root/usr/share/rpcd/acl.d/luci-proto-modemmanager.json mode change 100755 => 100644 luci-theme-openmptcprouter/Makefile mode change 100755 => 100644 luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/html5.js mode change 100755 => 100644 luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/mobile.css mode change 100755 => 100644 luci-theme-openmptcprouter/htdocs/luci-static/resources/menu-openmptcprouter.js mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/GalanoGrotesqueW00-Regular.woff2 mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/cascade.css mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/favicon.png mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/omr-logo.png mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/spinner.svg mode change 100755 => 100644 luci-theme-openwrt-2020/htdocs/luci-static/resources/menu-openwrt2020.js mode change 100755 => 100644 luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm mode change 100755 => 100644 luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm create mode 100644 mc/Config.in create mode 100644 mc/Makefile create mode 100644 mc/patches/010-subshell.patch create mode 100644 mc/patches/020-fix-mouse-handling-newer-terminfo.patch create mode 100644 mc/patches/030-fix-gettext-full-0.21.patch create mode 100644 mlvpn/patches/010-musl-fix.patch delete mode 100644 mlvpn/patches/020-remove-cdefs.patch delete mode 100644 modemmanager/files/25-modemmanager-wwan mode change 100644 => 100755 modemmanager/files/modemmanager.init delete mode 100755 modemmanager/files/usr/sbin/ModemManager-wrapper create mode 100644 mptcpd/patches/log.patch delete mode 100644 mptcpd/patches/remove_log.patch create mode 100644 ndpi-netfilter2/Makefile mode change 100755 => 100644 openmptcprouter/Makefile mode change 100755 => 100644 openmptcprouter/files/etc/firewall.gre-tunnel mode change 100755 => 100644 openmptcprouter/files/etc/firewall.omr-server delete mode 100755 openmptcprouter/files/etc/firewall.ttl mode change 100755 => 100644 openmptcprouter/files/etc/hotplug.d/iface/00-nego delete mode 100755 openmptcprouter/files/etc/init.d/alwaysrw mode change 100755 => 100644 openmptcprouter/files/etc/iproute2/rt_dsfield mode change 100755 => 100644 openmptcprouter/files/etc/sysctl.d/default.conf delete mode 100755 openmptcprouter/files/etc/uci-defaults/2030-omr-fstab mode change 100755 => 100644 openmptcprouter/files/etc/wgetrc4 create mode 100644 r8125/LICENSE create mode 100644 r8125/README.md mode change 100755 => 100644 r8125/src/Makefile mode change 100755 => 100644 r8125/src/Makefile_linux24x mode change 100755 => 100644 r8125/src/r8125.h mode change 100755 => 100644 r8125/src/r8125_dash.h delete mode 100755 r8125/src/r8125_firmware.h mode change 100755 => 100644 r8125/src/r8125_n.c mode change 100755 => 100644 r8125/src/r8125_ptp.c mode change 100755 => 100644 r8125/src/r8125_ptp.h mode change 100755 => 100644 r8125/src/r8125_realwow.h mode change 100755 => 100644 r8125/src/r8125_rss.c mode change 100755 => 100644 r8125/src/r8125_rss.h mode change 100755 => 100644 r8125/src/rtl_eeprom.c mode change 100755 => 100644 r8125/src/rtl_eeprom.h mode change 100755 => 100644 r8125/src/rtltool.c mode change 100755 => 100644 r8125/src/rtltool.h delete mode 100644 r8168/patches/001-r8168-add-LED-configuration-from-OF.patch create mode 100644 shadowsocks-libev/patches/020-NOCRYPTO.patch create mode 100644 speedtestc/patches/compile-fix.patch create mode 100644 speedtestc/patches/user-agent.patch delete mode 100644 speedtestcpp/Makefile create mode 100644 umbim/Makefile create mode 100644 umbim/files/lib/netifd/proto/mbim.sh diff --git a/6in4/Makefile b/6in4/Makefile new file mode 100644 index 000000000..d0f2ad30c --- /dev/null +++ b/6in4/Makefile @@ -0,0 +1,45 @@ +# +# Copyright (C) 2010-2015 OpenWrt.org +# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) +# - Added gateway setting +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=6in4 +PKG_VERSION:=270 +PKG_RELEASE:=2 +PKG_LICENSE:=GPL-2.0 + +include $(INCLUDE_DIR)/package.mk + +define Package/6in4 + SECTION:=net + CATEGORY:=Network + DEPENDS:=@IPV6 +kmod-sit +uclient-fetch + TITLE:=IPv6-in-IPv4 configuration support + MAINTAINER:=Jo-Philipp Wich + PKGARCH:=all +endef + +define Package/6in4/description +Provides support for 6in4 tunnels in /etc/config/network. +Refer to http://wiki.openwrt.org/doc/uci/network for +configuration details. +endef + +define Build/Compile +endef + +define Build/Configure +endef + +define Package/6in4/install + $(INSTALL_DIR) $(1)/lib/netifd/proto + $(INSTALL_BIN) ./files/6in4.sh $(1)/lib/netifd/proto/6in4.sh +endef + +$(eval $(call BuildPackage,6in4)) diff --git a/6in4/files/6in4.sh b/6in4/files/6in4.sh new file mode 100755 index 000000000..cf17c86d8 --- /dev/null +++ b/6in4/files/6in4.sh @@ -0,0 +1,149 @@ +#!/bin/sh +# 6in4.sh - IPv6-in-IPv4 tunnel backend +# Copyright (c) 2010-2015 OpenWrt.org + +[ -n "$INCLUDE_ONLY" ] || { + . /lib/functions.sh + . /lib/functions/network.sh + . ../netifd-proto.sh + init_proto "$@" +} + +proto_6in4_update() { + sh -c ' + timeout=5 + + (while [ $((timeout--)) -gt 0 ]; do + sleep 1 + kill -0 $$ || exit 0 + done; kill -9 $$) 2>/dev/null & + + exec "$@" + ' "$1" "$@" +} + +proto_6in4_add_prefix() { + append "$3" "$1" +} + +proto_6in4_setup() { + local cfg="$1" + local iface="$2" + local link="6in4-$cfg" + + local mtu ttl tos ipaddr peeraddr ip6addr ip6prefix ip6prefixes tunlink tunnelid username password updatekey gateway + json_get_vars mtu ttl tos ipaddr peeraddr ip6addr tunlink tunnelid username password updatekey gateway + json_for_each_item proto_6in4_add_prefix ip6prefix ip6prefixes + + [ -z "$peeraddr" ] && { + proto_notify_error "$cfg" "MISSING_ADDRESS" + proto_block_restart "$cfg" + return + } + + [ -n "$tunlink" ] && ( proto_add_host_dependency "$cfg" "$peeraddr" "$tunlink" ) + + [ -z "$ipaddr" ] && { + local wanif="$tunlink" + if [ -z "$wanif" ] && ! network_find_wan wanif; then + proto_notify_error "$cfg" "NO_WAN_LINK" + return + fi + + if ! network_get_ipaddr ipaddr "$wanif"; then + proto_notify_error "$cfg" "NO_WAN_LINK" + return + fi + } + + proto_init_update "$link" 1 + + [ -n "$ip6addr" ] && { + local local6="${ip6addr%%/*}" + local mask6="${ip6addr##*/}" + [[ "$local6" = "$mask6" ]] && mask6= + proto_add_ipv6_address "$local6" "$mask6" + proto_add_ipv6_route "::" 0 "" "" "" "$local6/$mask6" + } + + [ -n "$gateway" ] && { + proto_add_ipv6_route "::" 0 "$gateway" + } + + for ip6prefix in $ip6prefixes; do + proto_add_ipv6_prefix "$ip6prefix" + proto_add_ipv6_route "::" 0 "" "" "" "$ip6prefix" + done + + proto_add_tunnel + json_add_string mode sit + json_add_int mtu "${mtu:-1280}" + json_add_int ttl "${ttl:-64}" + [ -n "$tos" ] && json_add_string tos "$tos" + json_add_string local "$ipaddr" + json_add_string remote "$peeraddr" + [ -n "$tunlink" ] && json_add_string link "$tunlink" + proto_close_tunnel + + proto_send_update "$cfg" + + [ -n "$tunnelid" -a -n "$username" -a \( -n "$password" -o -n "$updatekey" \) ] && { + [ -n "$updatekey" ] && password="$updatekey" + + local http="http" + local urlget="uclient-fetch" + local urlget_opts="-qO-" + local ca_path="${SSL_CERT_DIR:-/etc/ssl/certs}" + + [ -f /lib/libustream-ssl.so ] && http=https + [ "$http" = "https" -a -z "$(find $ca_path -name "*.0" 2>/dev/null)" ] && { + urlget_opts="$urlget_opts --no-check-certificate" + } + + local url="$http://ipv4.tunnelbroker.net/nic/update?hostname=$tunnelid" + local try=0 + local max=3 + + ( + set -o pipefail + while [ $((++try)) -le $max ]; do + if proto_6in4_update $urlget $urlget_opts --user="$username" --password="$password" "$url" 2>&1 | \ + sed -e 's,^Killed$,timeout,' -e "s,^,update $try/$max: ," | \ + logger -t "$link"; + then + logger -t "$link" "updated" + return 0 + fi + sleep 5 + done + logger -t "$link" "update failed" + ) + } +} + +proto_6in4_teardown() { + local cfg="$1" +} + +proto_6in4_init_config() { + no_device=1 + available=1 + + proto_config_add_string "ipaddr" + proto_config_add_string "ip6addr" + proto_config_add_array "ip6prefix" + proto_config_add_string "peeraddr" + proto_config_add_string "tunlink" + proto_config_add_string "tunnelid" + proto_config_add_string "username" + proto_config_add_string "password" + proto_config_add_string "updatekey" + proto_config_add_string "gateway" + proto_config_add_int "mtu" + proto_config_add_int "ttl" + proto_config_add_string "tos" +} + +[ -n "$INCLUDE_ONLY" ] || { + add_protocol 6in4 +} diff --git a/bcm27xx-eeprom/Makefile b/bcm27xx-eeprom/Makefile index 1dcf6883b..dec227d51 100644 --- a/bcm27xx-eeprom/Makefile +++ b/bcm27xx-eeprom/Makefile @@ -1,12 +1,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=bcm27xx-eeprom -PKG_VERSION:=47976e4409c6999a8e211976c75c60a97c90275c +PKG_VERSION:=2fec47bd7f981c9cb21b0fb3fdd4fe07f23f9e3b PKG_RELEASE:=4 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/raspberrypi/rpi-eeprom/tar.gz/$(PKG_VERSION)? -PKG_HASH:=skip +PKG_HASH:=f54c26ec399801dee7d3d0cc0e969c28878b6f42c982e166c863edb91d2d2a21 PKG_LICENSE:=BSD-3-Clause Custom PKG_LICENSE_FILES:=LICENSE diff --git a/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch b/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch index 7fc10a8a5..059426306 100644 --- a/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch +++ b/bcm27xx-eeprom/patches/0001-rpi-eeprom-update-OpenWrt-defaults.patch @@ -14,7 +14,7 @@ Signed-off-by: Álvaro Fernández Rojas --- a/rpi-eeprom-update +++ b/rpi-eeprom-update -@@ -24,12 +24,12 @@ else +@@ -24,17 +24,17 @@ else fi # Selects the release sub-directory @@ -26,9 +26,15 @@ Signed-off-by: Álvaro Fernández Rojas ENABLE_VL805_UPDATES=${ENABLE_VL805_UPDATES:-1} RECOVERY_BIN=${RECOVERY_BIN:-${FIRMWARE_ROOT}/${FIRMWARE_RELEASE_STATUS}/recovery.bin} BOOTFS=${BOOTFS:-/boot} +-VCMAILBOX=${VCMAILBOX:-/opt/vc/bin/vcmailbox} ++VCMAILBOX=${VCMAILBOX:-/usr/bin/vcmailbox} CM4_ENABLE_RPI_EEPROM_UPDATE=${CM4_ENABLE_RPI_EEPROM_UPDATE:-0} RPI_EEPROM_UPDATE_CONFIG_TOOL="${RPI_EEPROM_UPDATE_CONFIG_TOOL:-raspi-config}" + DT_BOOTLOADER_TS=${DT_BOOTLOADER_TS:-/proc/device-tree/chosen/bootloader/build-timestamp} + + EXIT_SUCCESS=0 + EXIT_UPDATE_REQUIRED=1 --- a/rpi-eeprom-update-default +++ b/rpi-eeprom-update-default @@ -1,8 +1,9 @@ diff --git a/cryptodev-linux/Makefile b/cryptodev-linux/Makefile deleted file mode 100644 index 0c1f63a60..000000000 --- a/cryptodev-linux/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -# -# Copyright (C) 2014 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# -# $Id$ - -include $(TOPDIR)/rules.mk -include $(INCLUDE_DIR)/kernel.mk - -PKG_NAME:=cryptodev-linux -PKG_VERSION:=1.12 -PKG_RELEASE:=1 - -PKG_SOURCE_URL:=https://codeload.github.com/$(PKG_NAME)/$(PKG_NAME)/tar.gz/$(PKG_NAME)-$(PKG_VERSION)? -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_HASH:=f51c2254749233b1b1d7ec9445158bd709f124f88e1c650fe2faac83c3a81938 -PKG_LICENSE:=GPL-2.0 -PKG_LICENSE_FILES:=COPYING - -PKG_MAINTAINER:=Ansuel Smith - -PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_NAME)-$(PKG_VERSION) - -include $(INCLUDE_DIR)/package.mk - -define KernelPackage/cryptodev - SUBMENU:=Cryptographic API modules - TITLE:=Driver for cryptographic acceleration - URL:=http://cryptodev-linux.org/ - VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE) - DEPENDS:=+kmod-crypto-authenc +kmod-crypto-hash - FILES:=$(PKG_BUILD_DIR)/cryptodev.$(LINUX_KMOD_SUFFIX) - AUTOLOAD:=$(call AutoLoad,50,cryptodev) - MODPARAMS.cryptodev:=cryptodev_verbosity=-1 -endef - -define KernelPackage/cryptodev/description - This is a driver for that allows to use the Linux kernel supported - hardware ciphers by user-space applications. -endef - -define Build/Configure -endef - -define Build/Compile - $(MAKE) -C $(PKG_BUILD_DIR) \ - $(KERNEL_MAKE_FLAGS) \ - KERNEL_DIR="$(LINUX_DIR)" -endef - -define Build/InstallDev - $(INSTALL_DIR) $(STAGING_DIR)/usr/include/crypto - $(CP) $(PKG_BUILD_DIR)/crypto/cryptodev.h $(STAGING_DIR)/usr/include/crypto/ -endef - -$(eval $(call KernelPackage,cryptodev)) diff --git a/dsvpn/files/init b/dsvpn/files/init index ca25fd3f0..250c409df 100755 --- a/dsvpn/files/init +++ b/dsvpn/files/init @@ -29,16 +29,6 @@ validate_section() { 'externalip:string:auto' } -version_over_5_4() { - MAJOR_VERSION=$(uname -r | awk -F '.' '{print $1}') - MINOR_VERSION=$(uname -r | awk -F '.' '{print $2}') - if [ $MAJOR_VERSION -ge 5 ] && [ $MINOR_VERSION -gt 13 ] || [ $MAJOR_VERSION -gt 5 ] ; then - return 0 - else - return 1 - fi -} - start_instance() { local enable key host port dev @@ -59,7 +49,7 @@ start_instance() { key="" if [ "$(uci -q get network.omrvpn)" != "" ] && [ "$(uci -q get network.omrvpn)" != "$dev" ]; then - uci -q set network.omrvpn.device=$dev + uci -q set network.omrvpn.ifname=$dev uci -q commit fi @@ -68,10 +58,6 @@ start_instance() { _log "starting ${PROG_NAME} ${1} instance $*" - if version_over_5_4; then - PROG="mptcpize run ${PROG}" - fi - procd_open_instance procd_set_param command ${PROG} ${mode} \ diff --git a/glorytun-udp/init b/glorytun-udp/init index f5086024f..e9f7caf7c 100755 --- a/glorytun-udp/init +++ b/glorytun-udp/init @@ -50,7 +50,7 @@ start_instance() { key="" if [ "$(uci -q get network.omrvpn)" != "" ]; then - uci -q set network.omrvpn.device=$dev + uci -q set network.omrvpn.ifname=$dev uci -q commit fi diff --git a/glorytun/Makefile b/glorytun/Makefile index 95d7ed3aa..6cd00b7ae 100644 --- a/glorytun/Makefile +++ b/glorytun/Makefile @@ -9,14 +9,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=glorytun +PKG_VERSION:=0.0.35 PKG_RELEASE:=6 -PKG_SOURCE_PROTO:=git -PKG_SOURCE_VERSION:=6d58536f4232fea8eaa10fb60aace8ba11f29ed6 PKG_SOURCE:=glorytun-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://github.com/Ysurac/glorytun.git -PKG_VERSION:=0.0.35-$(PKG_SOURCE_VERSION) - -PKG_FIXUP:=autoreconf +PKG_SOURCE_URL:=https://github.com/angt/glorytun/releases/download/v$(PKG_VERSION) +PKG_HASH:=49e4d8ea4ff2990300b37947b0bd0da3c8e0985bc6eddf29f4146306188fff64 include $(INCLUDE_DIR)/package.mk diff --git a/glorytun/init b/glorytun/init index 1384a0315..f5b868323 100755 --- a/glorytun/init +++ b/glorytun/init @@ -59,10 +59,9 @@ start_instance() { key="" if [ "$(uci -q get network.omrvpn)" != "" ]; then - uci -q set network.omrvpn.device=${dev} + uci -q set network.omrvpn.ifname=${dev} uci -q commit network fi - _log "starting ${PROG_NAME} ${1} instance $*" procd_open_instance diff --git a/golang/golang-values.mk b/golang/golang-values.mk index 34c9c1c65..69126a1ed 100644 --- a/golang/golang-values.mk +++ b/golang/golang-values.mk @@ -13,11 +13,10 @@ endif # Unset environment variables # There are more magic variables to track down, but ain't nobody got time for that -# From https://pkg.go.dev/cmd/go#hdr-Environment_variables +# From https://golang.org/cmd/go/#hdr-Environment_variables # General-purpose environment variables: unexport \ - GO111MODULE \ GCCGO \ GOARCH \ GOBIN \ @@ -37,7 +36,6 @@ unexport \ # GONOPROXY # GOSUMDB # GONOSUMDB -# GOVCS # Environment variables for use with cgo: unexport \ @@ -65,20 +63,23 @@ unexport \ # Special-purpose environment variables: unexport \ GCCGOTOOLDIR \ - GOEXPERIMENT \ GOROOT_FINAL \ GO_EXTLINK_ENABLED # Unmodified: # GIT_ALLOW_PROTOCOL -# From https://pkg.go.dev/runtime#hdr-Environment_Variables +# From https://golang.org/cmd/go/#hdr-Module_support +unexport \ + GO111MODULE + +# From https://golang.org/pkg/runtime/#hdr-Environment_Variables unexport \ GOGC \ GOMAXPROCS \ GORACE \ GOTRACEBACK -# From https://pkg.go.dev/cmd/cgo#hdr-Using_cgo_with_the_go_command +# From https://golang.org/cmd/cgo/#hdr-Using_cgo_with_the_go_command unexport \ CC_FOR_TARGET \ CXX_FOR_TARGET @@ -110,6 +111,10 @@ unexport \ BOOT_GO_GCFLAGS \ BOOT_GO_LDFLAGS +# From https://golang.org/src/cmd/dist/buildruntime.go +unexport \ + GOEXPERIMENT + # From https://golang.org/src/cmd/dist/buildtool.go unexport \ GOBOOTSTRAP_TOOLEXEC @@ -143,11 +148,8 @@ else endif ifeq ($(GO_ARCH),386) - ifeq ($(CONFIG_TARGET_x86_geode)$(CONFIG_TARGET_x86_legacy),y) - GO_386:=softfloat - else - GO_386:=sse2 - endif + # ensure binaries can run on older CPUs + GO_386:=387 # -fno-plt: causes "unexpected GOT reloc for non-dynamic symbol" errors GO_CFLAGS_TO_REMOVE:=-fno-plt @@ -193,23 +195,19 @@ GO_ARCH_DEPENDS:=@(aarch64||arm||i386||i686||mips||mips64||mips64el||mipsel||pow # ASLR/PIE -# From https://golang.org/src/cmd/internal/sys/supported.go GO_PIE_SUPPORTED_OS_ARCH:= \ - android_386 android_amd64 android_arm android_arm64 \ - linux_386 linux_amd64 linux_arm linux_arm64 \ + android_386 android_amd64 android_arm android_arm64 \ + linux_386 linux_amd64 linux_arm linux_arm64 \ \ - windows_386 windows_amd64 windows_arm \ - \ - darwin_amd64 darwin_arm64 \ - ios_amd64 ios_arm64 \ + windows_386 windows_amd64 windows_arm \ \ + darwin_amd64 \ freebsd_amd64 \ \ aix_ppc64 \ \ - linux_ppc64le linux_riscv64 linux_s390x + linux_ppc64le linux_s390x -# From https://golang.org/src/cmd/go/internal/work/init.go go_pie_install_suffix=$(if $(filter $(1),aix_ppc64 windows_386 windows_amd64 windows_arm),,shared) ifneq ($(filter $(GO_HOST_OS_ARCH),$(GO_PIE_SUPPORTED_OS_ARCH)),) @@ -238,7 +236,7 @@ endif # General build info -GO_BUILD_CACHE_DIR:=$(or $(call qstrip,$(CONFIG_GOLANG_BUILD_CACHE_DIR)),$(TMP_DIR)/go-build) +GO_BUILD_CACHE_DIR:=$(or $(call qstrip,$(CONFIG_GOLANG_BUILD_CACHE_DIR)),$(TOPDIR)/.go-build) GO_MOD_CACHE_DIR:=$(DL_DIR)/go-mod-cache GO_MOD_ARGS= \ @@ -251,6 +249,6 @@ GO_GENERAL_BUILD_CONFIG_VARS= \ GO_MOD_ARGS="$(GO_MOD_ARGS)" define Go/CacheCleanup - $(GO_GENERAL_BUILD_CONFIG_VARS) \ + $(GENERAL_BUILD_CONFIG_VARS) \ $(SHELL) $(GO_INCLUDE_DIR)/golang-build.sh cache_cleanup endef diff --git a/golang/golang/Makefile b/golang/golang/Makefile index 30979fe7c..2016dfb8c 100644 --- a/golang/golang/Makefile +++ b/golang/golang/Makefile @@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk -GO_VERSION_MAJOR_MINOR:=1.17 -GO_VERSION_PATCH:=3 +GO_VERSION_MAJOR_MINOR:=1.15 +GO_VERSION_PATCH:=2 PKG_NAME:=golang PKG_VERSION:=$(GO_VERSION_MAJOR_MINOR)$(if $(GO_VERSION_PATCH),.$(GO_VERSION_PATCH)) @@ -20,7 +20,7 @@ GO_SOURCE_URLS:=https://dl.google.com/go/ \ PKG_SOURCE:=go$(PKG_VERSION).src.tar.gz PKG_SOURCE_URL:=$(GO_SOURCE_URLS) -PKG_HASH:=705c64251e5b25d5d55ede1039c6aa22bea40a7a931d14c370339853643c3df0 +PKG_HASH:=28bf9d0bcde251011caae230a4a05d917b172ea203f2a62f2c2f9533589d4b4d PKG_MAINTAINER:=Jeffery To PKG_LICENSE:=BSD-3-Clause @@ -48,13 +48,12 @@ HOST_GO_VALID_OS_ARCH:= \ freebsd_386 freebsd_amd64 freebsd_arm freebsd_arm64 \ linux_386 linux_amd64 linux_arm linux_arm64 \ openbsd_386 openbsd_amd64 openbsd_arm openbsd_arm64 \ - netbsd_386 netbsd_amd64 netbsd_arm netbsd_arm64 \ - windows_386 windows_amd64 windows_arm windows_arm64 \ \ + netbsd_386 netbsd_amd64 netbsd_arm \ plan9_386 plan9_amd64 plan9_arm \ + windows_386 windows_amd64 windows_arm \ \ darwin_amd64 darwin_arm64 \ - ios_amd64 ios_arm64 \ \ dragonfly_amd64 \ illumos_amd64 \ @@ -65,9 +64,7 @@ HOST_GO_VALID_OS_ARCH:= \ \ linux_ppc64 linux_ppc64le \ linux_mips linux_mipsle linux_mips64 linux_mips64le \ - linux_riscv64 linux_s390x \ - \ - openbsd_mips64 + linux_riscv64 linux_s390x BOOTSTRAP_SOURCE:=go1.4-bootstrap-20171003.tar.gz BOOTSTRAP_SOURCE_URL:=$(GO_SOURCE_URLS) @@ -261,14 +258,12 @@ endif $(eval $(call GoCompiler/AddProfile,Package,$(PKG_BUILD_DIR),$(PKG_GO_PREFIX),$(PKG_GO_VERSION_ID),$(GO_OS_ARCH),$(PKG_GO_INSTALL_SUFFIX))) PKG_GO_ZBOOTSTRAP_MODS:= \ - s/defaultGO386 = `[^`]*`/defaultGO386 = `$(or $(GO_386),sse2)`/; \ + s/defaultGO386 = `[^`]*`/defaultGO386 = `$(or $(GO_386),387)`/; \ s/defaultGOARM = `[^`]*`/defaultGOARM = `$(or $(GO_ARM),5)`/; \ s/defaultGOMIPS = `[^`]*`/defaultGOMIPS = `$(or $(GO_MIPS),hardfloat)`/; \ s/defaultGOMIPS64 = `[^`]*`/defaultGOMIPS64 = `$(or $(GO_MIPS64),hardfloat)`/; \ s/defaultGOPPC64 = `[^`]*`/defaultGOPPC64 = `power8`/; -PKG_GO_ZBOOTSTRAP_PATH:=$(PKG_BUILD_DIR)/src/internal/buildcfg/zbootstrap.go - PKG_GO_VARS= \ GOCACHE="$(GO_BUILD_CACHE_DIR)" \ GOENV=off \ @@ -311,17 +306,8 @@ define Build/Compile $(PKG_GO_VARS) \ ) - $(SED) '$(PKG_GO_ZBOOTSTRAP_MODS)' "$(PKG_GO_ZBOOTSTRAP_PATH)" - - ( \ - if echo 'int main() { return 0; }' | $(TARGET_CC) -o $(PKG_BUILD_DIR)/test-ldso -x c - > /dev/null 2>&1; then \ - LDSO=$$$$( \ - readelf -l $(PKG_BUILD_DIR)/test-ldso | \ - sed -n -e 's/^.*interpreter: \(.*\)[]]/\1/p' \ - ) ; \ - fi ; \ - $(SED) "s,defaultGO_LDSO = \`[^\`]*\`,defaultGO_LDSO = \`$$$$LDSO\`," "$(PKG_GO_ZBOOTSTRAP_PATH)" ; \ - ) + $(SED) '$(PKG_GO_ZBOOTSTRAP_MODS)' \ + "$(PKG_BUILD_DIR)/src/cmd/internal/objabi/zbootstrap.go" @echo "Building target Go second stage" diff --git a/grpcurl/Makefile b/grpcurl/Makefile deleted file mode 100644 index 8bec5ccf4..000000000 --- a/grpcurl/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -# -# Copyright (C) 2022 Ycarus (Yannick Chabanois) for OpenMPTCProuter -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=grpcurl -PKG_VERSION:=1.8.6 -PKG_RELEASE:=1 - -PKG_SOURCE:=v$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://github.com/fullstorydev/grpcurl/archive/refs/tags/ -PKG_HASH:=18b457f644baabeef0de350596dd8d23563586ee94a3ed3cb290063e097ab934 - -PKG_LICENSE:=MIT -PKG_LICENSE_FILES:=LICENSE -PKG_MAINTAINER:=Yannick Chabanois - -PKG_BUILD_DEPENDS:=golang/host -PKG_BUILD_PARALLEL:=1 -PKG_USE_MIPS16:=0 - -GO_PKG:=github.com/fullstorydev/grpcurl -GO_PKG_BUILD_PKG:=github.com/fullstorydev/grpcurl/cmd/grpcurl -GO_PKG_LDFLAGS_X:= \ - $(GO_PKG)/constant.Version=$(PKG_VERSION) \ - $(GO_PKG)/constant.Commit=v$(PKG_VERSION) -GO_PKG_LDFLAGS:=-s -w -GO_PKG_TAGS:=master - -include $(INCLUDE_DIR)/package.mk -include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk - -define Package/grpcurl - TITLE:=grpcurl is a command-line tool that lets you interact with gRPC servers - URL:=https://github.com/fullstorydev/grpcurl - SECTION:=net - CATEGORY:=Network - DEPENDS:=$(GO_ARCH_DEPENDS) +protobuf -endef - -define Package/grpcurl/description - grpcurl is a command-line tool that lets you interact with gRPC servers. It's basically curl for gRPC servers. - - The main purpose for this tool is to invoke RPC methods on a gRPC server from the command-line. gRPC servers use a binary encoding on the wire (protocol buffers, or "protobufs" for short). So they are basically impossible to interact with using regular curl (and older versions of curl that do not support HTTP/2 are of course non-starters). This program accepts messages using JSON encoding, which is much more friendly for both humans and scripts. -endef - -define Package/v2ray-core/install - $(call GoPackage/Package/Install/Bin,$(PKG_INSTALL_DIR)) - - $(INSTALL_DIR) $(1)/usr/bin - - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/grpcurl $(1)/usr/bin -endef - -$(eval $(call GoBinPackage,grpcurl)) -$(eval $(call BuildPackage,grpcurl)) diff --git a/libell/Makefile b/libell/Makefile index 8b12f4b51..99ac29e1f 100644 --- a/libell/Makefile +++ b/libell/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2020-2021 Ycarus (Yannick Chabanois) +# Copyright (C) 2020 Ycarus (Yannick Chabanois) # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -8,10 +8,10 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ell -PKG_VERSION:=0.41 +PKG_VERSION:=0.30 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_HASH:=4e8dba6c53cf152dbd0fd1dc3d4c7b04abf79e20a948895f85943e586870505c +PKG_HASH:=51cf8cc66a9d1038e41f7d619ea5660aa4476904496562b2d45ca79370ca4a5e PKG_SOURCE_URL:=@KERNEL/linux/libs/ell PKG_LICENSE:=GPL-2.0 PKG_LICENSE_FILES:=GPL diff --git a/libmbim/Makefile b/libmbim/Makefile index 505ae7bc6..b9563219e 100644 --- a/libmbim/Makefile +++ b/libmbim/Makefile @@ -1,22 +1,24 @@ # # Copyright (C) 2016 Velocloud Inc. # Copyright (C) 2016 Aleksander Morgado +# Copyright (C) 2021 Ycarus (Yannick Chabanois) for OpenMPTCProuter # # This is free software, licensed under the GNU General Public License v2. # include $(TOPDIR)/rules.mk +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/libmbim.git +PKG_SOURCE_VERSION:=c90c7c5b877de6e413b4833aaf1a42d2d128b051 + PKG_NAME:=libmbim -PKG_VERSION:=1.26.2 -PKG_RELEASE:=$(AUTORELEASE) +PKG_VERSION:=1.25.3-$(PKG_SOURCE_VERSION) +PKG_RELEASE:=10 -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_SOURCE_URL:=https://www.freedesktop.org/software/libmbim -PKG_HASH:=10c77bf5b5eb8c92ba80e9b519923ad9b898362bc8e1928e2bc9a17eeba649af - -PKG_MAINTAINER:=Nicholas Smith +PKG_MAINTAINER:=Nicholas Smith +PKG_FIXUP:=autoreconf PKG_INSTALL:=1 PKG_BUILD_PARALLEL:=1 diff --git a/libqmi/Makefile b/libqmi/Makefile index d3ebdeecd..a10ea0121 100644 --- a/libqmi/Makefile +++ b/libqmi/Makefile @@ -1,21 +1,22 @@ # # Copyright (C) 2016 Velocloud Inc. # Copyright (C) 2016 Aleksander Morgado +# Copyright (C) 2021 Ycarus (Yannick Chabanois) for OpenMPTCProuter # # This is free software, licensed under the GNU General Public License v2. # include $(TOPDIR)/rules.mk +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/libqmi.git +PKG_SOURCE_VERSION:=29fab8a1d4496ca5a1d32bb486013b1868a718ba PKG_NAME:=libqmi -PKG_VERSION:=1.30.4 -PKG_RELEASE:=$(AUTORELEASE) +PKG_VERSION:=1.29.3-$(PKG_SOURCE_VERSION) +PKG_RELEASE:=10 -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz -PKG_SOURCE_URL:=https://www.freedesktop.org/software/libqmi -PKG_HASH:=00d7da30a4f8d1185f37cba289cfaf1dfcd04a58f2f76d6acfdf5b85312d6ed6 - -PKG_MAINTAINER:=Nicholas Smith +PKG_FIXUP:=autoreconf +PKG_MAINTAINER:=Nicholas Smith PKG_INSTALL:=1 PKG_BUILD_PARALLEL:=1 @@ -66,22 +67,12 @@ CONFIGURE_ARGS += \ --disable-gtk-doc-pdf \ --disable-silent-rules \ --enable-firmware-update \ + --$(if $(LIBQMI_WITH_MBIM_QMUX),en,dis)able-mbim-qmux \ + --$(if $(LIBQMI_WITH_QRTR_GLIB),en,dis)able-qrtr \ --enable-more-warnings=yes \ --without-udev \ --without-udev-base-dir -ifeq ($(CONFIG_LIBQMI_WITH_MBIM_QMUX),y) - CONFIGURE_ARGS += --enable-mbim-qmux -else - CONFIGURE_ARGS += --disable-mbim-qmux -endif - -ifeq ($(CONFIG_LIBQMI_WITH_QRTR_GLIB),y) - CONFIGURE_ARGS += --enable-qrtr -else - CONFIGURE_ARGS += --disable-qrtr -endif - define Build/InstallDev $(INSTALL_DIR) $(1)/usr/include $(CP) \ diff --git a/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po index 977d4d7e7..8fac07bca 100644 --- a/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po +++ b/luci-app-glorytun-tcp/po/fr/glorytun-tcp.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2022-02-19 07:53+0000\n" +"PO-Revision-Date: 2021-04-30 16:16+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -8,7 +8,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.6.1\n" +"X-Generator: Weblate 4.5.2\n" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:32 msgid "Advanced Settings" @@ -89,7 +89,7 @@ msgstr "Serveur" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:73 msgid "Timeout" -msgstr "Hors Délais" +msgstr "Temporisation" #: luci-app-glorytun-tcp/htdocs/luci-static/resources/view/services/glorytun-tcp.js:70 msgid "chacha" diff --git a/luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun b/luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun index e78973fe0..9d0f93d85 100644 --- a/luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun +++ b/luci-app-glorytun-tcp/root/etc/uci-defaults/1200-luci-glorytun @@ -15,7 +15,7 @@ if [ "$(uci -q get network.glorytun)" = "" ] && [ "$(uci -q get network.omrvpn)" uci -q batch <<-EOF >/dev/null delete network.glorytun set network.glorytun=interface - set network.glorytun.device=tun0 + set network.glorytun.ifname=tun0 set network.glorytun.proto=dhcp set network.glorytun.ip4table=vpn set network.glorytun.multipath=off @@ -48,7 +48,6 @@ if [ "$(uci -q show firewall | grep Allow-All-LAN-to-VPN)" = "" ]; then set firewall.@rule[-1].name='Allow-All-LAN-to-VPN' set firewall.@rule[-1].dest='vpn' set firewall.@rule[-1].src='lan' - set firewall.@rule[-1].proto='all' commit firewall EOF fi diff --git a/luci-app-glorytun-udp/root/etc/config/glorytun-udp b/luci-app-glorytun-udp/root/etc/config/glorytun-udp index 431da357a..d5d356dd6 100644 --- a/luci-app-glorytun-udp/root/etc/config/glorytun-udp +++ b/luci-app-glorytun-udp/root/etc/config/glorytun-udp @@ -8,7 +8,3 @@ config glorytun-udp 'vpn' option localip '10.255.254.2' option remoteip '10.255.254.1' option mode 'to' - option kxtimeout '7d' - option timetolerance '10m' - option keepalive '25s' - option rateauto '0' \ No newline at end of file diff --git a/luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp b/luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp index ebe335318..dbecf5b5b 100644 --- a/luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp +++ b/luci-app-glorytun-udp/root/etc/uci-defaults/1201-luci-glorytun-udp @@ -11,7 +11,7 @@ if [ "$(uci -q get network.glorytun-udp)" = "" ] && [ "$(uci -q get network.omrv uci -q batch <<-EOF >/dev/null delete network.glorytun-udp set network.glorytun-udp=interface - set network.glorytun-udp.device=tun0 + set network.glorytun-udp.ifname=tun0 set network.glorytun-udp.proto=dhcp set network.glorytun-udp.ip4table=vpn set network.glorytun-udp.multipath=off diff --git a/luci-app-iperf/po/fr/iperf.po b/luci-app-iperf/po/fr/iperf.po index 711692095..6057249da 100644 --- a/luci-app-iperf/po/fr/iperf.po +++ b/luci-app-iperf/po/fr/iperf.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-02-19 07:53+0000\n" +"PO-Revision-Date: 2021-05-21 19:20+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -74,7 +74,7 @@ msgstr "Vitesse souhaitée (Mbits/s)" #: luci-app-iperf/luasrc/view/iperf/test.htm:169 msgid "Test" -msgstr "Essai" +msgstr "Teste" #: luci-app-iperf/luasrc/view/iperf/test.htm:100 msgid "This iPerf interface is in bêta. No support for this." diff --git a/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js b/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js index f8bbc58c5..e7259c44a 100644 --- a/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js +++ b/luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js @@ -82,12 +82,6 @@ return L.view.extend({ o.rmempty = false; o.modalonly = true; - o = s.taboption('advanced', form.Value, 'latency_tolerance', _('Latency tolerance')); - o.default = '300'; - o.datatype = "uinteger"; - o.rmempty = false; - o.modalonly = true; - return m.render(); } }); diff --git a/luci-app-mlvpn/po/fr/mlvpn.po b/luci-app-mlvpn/po/fr/mlvpn.po index 97c7d305e..f7ef82ca8 100644 --- a/luci-app-mlvpn/po/fr/mlvpn.po +++ b/luci-app-mlvpn/po/fr/mlvpn.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2022-02-19 07:53+0000\n" +"PO-Revision-Date: 2021-04-30 16:16+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -8,7 +8,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.6.1\n" +"X-Generator: Weblate 4.5.2\n" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:32 msgid "Advanced Settings" @@ -20,7 +20,7 @@ msgstr "Client" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:75 msgid "Disable encryption" -msgstr "Désactiver le chiffrement" +msgstr "" #: luci-app-mlvpn/htdocs/luci-static/resources/view/services/mlvpn.js:34 msgid "Enabled" diff --git a/luci-app-mptcp/luasrc/controller/mptcp.lua b/luci-app-mptcp/luasrc/controller/mptcp.lua index 842adc6ef..249179514 100644 --- a/luci-app-mptcp/luasrc/controller/mptcp.lua +++ b/luci-app-mptcp/luasrc/controller/mptcp.lua @@ -63,10 +63,7 @@ function multipath_bandwidth() local label = s["label"] local dev = get_device(intname) if dev == "" then - dev = get_device(s["device"]) - if dev == "" then - dev = get_device(s["ifname"]) - end + dev = get_device(s["ifname"]) end local multipath = s["multipath"] or "" if dev ~= "lo" and dev ~= "" then @@ -209,8 +206,8 @@ end function mptcp_monitor_data() luci.http.prepare_content("text/plain") local fullmesh - fullmesh = io.popen("multipath -m") - if fullmesh:read() ~= nil then + fullmesh = io.popen("cat /proc/net/mptcp_net/snmp") + if fullmesh then while true do local ln = fullmesh:read("*l") if not ln then break end @@ -225,7 +222,7 @@ function mptcp_connections_data() luci.http.prepare_content("text/plain") local connections connections = io.popen("multipath -c") - if connections:read() ~= nil then + if connections then while true do local ln = connections:read("*l") if not ln then break end diff --git a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua index d853e8e49..4b3bdb2b7 100644 --- a/luci-app-mptcp/luasrc/model/cbi/mptcp.lua +++ b/luci-app-mptcp/luasrc/model/cbi/mptcp.lua @@ -21,80 +21,56 @@ o:value(0, translate("disable")) o = s:option(ListValue, "mptcp_path_manager", translate("Multipath TCP path-manager"), translate("Default is fullmesh")) o:value("default", translate("default")) o:value("fullmesh", "fullmesh") -if uname.release:sub(1,4) ~= "5.14" then - o:value("ndiffports", "ndiffports") - o:value("binder", "binder") - if uname.release:sub(1,4) ~= "4.14" then +o:value("ndiffports", "ndiffports") +o:value("binder", "binder") +if uname.release:sub(1,4) ~= "4.14" then o:value("netlink", translate("Netlink")) - end end o = s:option(ListValue, "mptcp_scheduler", translate("Multipath TCP scheduler")) o:value("default", translate("default")) -if uname.release:sub(1,4) ~= "5.15" then - o:value("roundrobin", "round-robin") - o:value("redundant", "redundant") - if uname.release:sub(1,4) ~= "4.14" then +o:value("roundrobin", "round-robin") +o:value("redundant", "redundant") +if uname.release:sub(1,4) ~= "4.14" then o:value("blest", "BLEST") o:value("ecf", "ECF") - end -end -if uname.release:sub(1,4) ~= "5.15" then - o = s:option(Value, "mptcp_syn_retries", translate("Multipath TCP SYN retries")) - o.datatype = "uinteger" - o.rmempty = false -end -if uname.release:sub(1,4) ~= "5.15" then - o = s:option(Value, "mptcp_version", translate("Multipath TCP version")) - o.datatype = "uinteger" - o.rmempty = false - o.default = 0 end +o = s:option(Value, "mptcp_syn_retries", translate("Multipath TCP SYN retries")) +o.datatype = "uinteger" +o.rmempty = false o = s:option(ListValue, "congestion", translate("Congestion Control"),translate("Default is cubic")) local availablecong = sys.exec("sysctl -n net.ipv4.tcp_available_congestion_control | xargs -n1 | sort | xargs") for cong in string.gmatch(availablecong, "[^%s]+") do o:value(cong, translate(cong)) end -if uname.release:sub(1,4) == "5.15" then - o = s:option(Value, "mptcp_subflows", translate("specifies the maximum number of additional subflows allowed for each MPTCP connection")) - o.datatype = "uinteger" - o.rmempty = false - o.default = 3 - - o = s:option(Value, "mptcp_add_addr_accepted", translate("specifies the maximum number of ADD_ADDR suboptions accepted for each MPTCP connection")) - o.datatype = "uinteger" - o.rmempty = false - o.default = 1 -else - o = s:option(Value, "mptcp_fullmesh_num_subflows", translate("Fullmesh subflows for each pair of IP addresses")) - o.datatype = "uinteger" - o.rmempty = false - o.default = 1 - --o:depends("mptcp_path_manager","fullmesh") +o = s:option(Value, "mptcp_fullmesh_num_subflows", translate("Fullmesh subflows for each pair of IP addresses")) +o.datatype = "uinteger" +o.rmempty = false +o.default = 1 +--o:depends("mptcp_path_manager","fullmesh") - o = s:option(ListValue, "mptcp_fullmesh_create_on_err", translate("Re-create fullmesh subflows after a timeout")) - o:value(1, translate("enable")) - o:value(0, translate("disable")) - --o:depends("mptcp_path_manager","fullmesh") +o = s:option(ListValue, "mptcp_fullmesh_create_on_err", translate("Re-create fullmesh subflows after a timeout")) +o:value(1, translate("enable")) +o:value(0, translate("disable")) +--o:depends("mptcp_path_manager","fullmesh") - o = s:option(Value, "mptcp_ndiffports_num_subflows", translate("ndiffports subflows number")) - o.datatype = "uinteger" - o.rmempty = false - o.default = 1 - --o:depends("mptcp_path_manager","ndiffports") +o = s:option(Value, "mptcp_ndiffports_num_subflows", translate("ndiffports subflows number")) +o.datatype = "uinteger" +o.rmempty = false +o.default = 1 +--o:depends("mptcp_path_manager","ndiffports") - o = s:option(ListValue, "mptcp_rr_cwnd_limited", translate("Fill the congestion window on all subflows for round robin")) - o:value("Y", translate("enable")) - o:value("N", translate("disable")) - o.default = "Y" - --o:depends("mptcp_scheduler","roundrobin") +o = s:option(ListValue, "mptcp_rr_cwnd_limited", translate("Fill the congestion window on all subflows for round robin")) +o:value("Y", translate("enable")) +o:value("N", translate("disable")) +o.default = "Y" +--o:depends("mptcp_scheduler","roundrobin") - o = s:option(Value, "mptcp_rr_num_segments", translate("Consecutive segments that should be sent for round robin")) - o.datatype = "uinteger" - o.rmempty = false - o.default = 1 - --o:depends("mptcp_scheduler","roundrobin") -end +o = s:option(Value, "mptcp_rr_num_segments", translate("Consecutive segments that should be sent for round robin")) +o.datatype = "uinteger" +o.rmempty = false +o.default = 1 +--o:depends("mptcp_scheduler","roundrobin") s = m:section(TypedSection, "interface", translate("Interfaces Settings")) o = s:option(ListValue, "multipath", translate("Multipath TCP"), translate("One interface must be set as master")) diff --git a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm index 97ea6e956..8d375c359 100644 --- a/luci-app-mptcp/luasrc/view/mptcp/multipath.htm +++ b/luci-app-mptcp/luasrc/view/mptcp/multipath.htm @@ -238,8 +238,8 @@ labelup_25.parentNode.appendChild(textup); } - labeldn_scale.innerHTML = String.format('<%:(%d minutes window, %d seconds interval)%>', 4, data_wanted / 60); - labelup_scale.innerHTML = String.format('<%:(%d minutes window, %d seconds interval)%>', 4, data_wanted / 60); + labeldn_scale.innerHTML = String.format('<%:(%d minutes window, %d seconds interval)%>', 3, data_wanted / 60); + labelup_scale.innerHTML = String.format('<%:(%d minutes window, %d seconds interval)%>', 3, data_wanted / 60); /* render datasets, start update interval */ XHR.poll(3, '<%=build_url(bandwidthtotalurl, all)%>', null, diff --git a/luci-app-mptcp/po/fr/mptcp.po b/luci-app-mptcp/po/fr/mptcp.po index 0901267ce..146ec4466 100644 --- a/luci-app-mptcp/po/fr/mptcp.po +++ b/luci-app-mptcp/po/fr/mptcp.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-02-19 07:53+0000\n" +"PO-Revision-Date: 2021-04-30 16:16+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.6.1\n" +"X-Generator: Weblate 4.5.2\n" #: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:775 msgid "(%d minute window, %d second interval)" @@ -44,7 +44,7 @@ msgstr "Contrôle de la congestion" #: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:69 msgid "Consecutive segments that should be sent for round robin" -msgstr "Segments consécutifs à envoyer pour round robin" +msgstr "" #: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:311 #: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:314 @@ -77,7 +77,7 @@ msgstr "Connexions établies" #: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:63 msgid "Fill the congestion window on all subflows for round robin" -msgstr "Remplir la fenêtre de congestion de tous les sous-flux pour round robin" +msgstr "" #: luci-app-mptcp/luasrc/model/cbi/mptcp.lua:46 msgid "Fullmesh subflows for each pair of IP addresses" @@ -215,7 +215,7 @@ msgstr "Paramètres" #: luci-app-mptcp/luasrc/view/mptcp/mptcp_check.htm:65 msgid "Test" -msgstr "Essai" +msgstr "" #: luci-app-mptcp/luasrc/view/mptcp/multipath.htm:914 msgid "Upload:" diff --git a/luci-app-omr-bypass/Makefile b/luci-app-omr-bypass/Makefile index fac789d4b..cbce20358 100644 --- a/luci-app-omr-bypass/Makefile +++ b/luci-app-omr-bypass/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk LUCI_TITLE:=LuCI Interface to bypass domains -LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +iptables-mod-extra +iptables +LUCI_DEPENDS:=+dnsmasq-full +shadowsocks-libev-ss-rules +iptables-mod-ndpi +iptables-mod-extra +kmod-ipt-ndpi +iptables PKG_LICENSE:=GPLv3 diff --git a/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js b/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js index 361d203db..109279953 100644 --- a/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js +++ b/luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js @@ -190,7 +190,7 @@ return L.view.extend({ o = s.option(form.Flag, 'enabled', _('Enabled')); o.default = o.enabled; - o = s.option(form.ListValue, 'proto', _('Protocol/Service')); + o = s.option(form.Value, 'proto', _('Protocol/Service')); o.rmempty = false; o.load = function(section_id) { return Promise.all([ diff --git a/luci-app-omr-bypass/po/fr/omr-bypass.po b/luci-app-omr-bypass/po/fr/omr-bypass.po index 0e9543bdf..272fe4b31 100644 --- a/luci-app-omr-bypass/po/fr/omr-bypass.po +++ b/luci-app-omr-bypass/po/fr/omr-bypass.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-02-19 07:53+0000\n" +"PO-Revision-Date: 2021-04-30 16:16+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.6.1\n" +"X-Generator: Weblate 4.5.2\n" #: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:166 #: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:174 @@ -94,7 +94,7 @@ msgstr "Ports de destination" #: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:90 msgid "Ports source" -msgstr "Ports source" +msgstr "" #: luci-app-omr-bypass/htdocs/luci-static/resources/view/services/omr-bypass.js:193 msgid "Protocol/Service" diff --git a/luci-app-omr-bypass/root/etc/init.d/omr-bypass b/luci-app-omr-bypass/root/etc/init.d/omr-bypass index b95a0a806..2b8f56972 100755 --- a/luci-app-omr-bypass/root/etc/init.d/omr-bypass +++ b/luci-app-omr-bypass/root/etc/init.d/omr-bypass @@ -14,18 +14,13 @@ _add_proto() { if [ "$(dd if=/proc/net/xt_ndpi/proto bs=4096 2> /dev/null | grep $protoname)" = "" ]; then echo "add_custom $protoname" >/proc/net/xt_ndpi/proto fi - allurls="$(dd if=/proc/net/xt_ndpi/host_proto bs=4096 2> /dev/null)" hosts="$( uci -q get omr-bypass.$protoname.url )" for url in $hosts; do - if [ "$(echo "$allurls" | grep -i ^${protoname}: | grep $url)" = "" ]; then - echo "$protoname:$url" >/proc/net/xt_ndpi/host_proto - fi + echo "$protoname:$url" >/proc/net/xt_ndpi/host_proto done ip="$( uci -q get omr-bypass.$protoname.ip )" for ip in $ips; do - if [ "$(echo "$allurls" | grep -i ^${protoname}: | grep $ip)" = "" ]; then - echo "$protoname:$ip" >/proc/net/xt_ndpi/ip_proto - fi + echo "$protoname:$ip" >/proc/net/xt_ndpi/ip_proto done } @@ -105,14 +100,12 @@ _bypass_domain() { fi if [ "$(uci -q get dhcp.@dnsmasq[0].ipset | grep /$domain/)" = "" ]; then uci -q add_list dhcp.@dnsmasq[0].ipset="/$domain/omr_dst_bypass_$intf,omr6_dst_bypass_$intf" - add_domains="true" else dnsmasqipset=$(uci -q get dhcp.@dnsmasq[0].ipset | sed 's/ /\n/g') for dnsipset in $dnsmasqipset; do if [ "$(echo $dnsipset | cut -d/ -f2)" = "$domain" ]; then uci -q del_list dhcp.@dnsmasq[0].ipset=$dnsipset uci -q add_list dhcp.@dnsmasq[0].ipset="$dnsipset,omr_dst_bypass_$intf,omr6_dst_bypass_$intf" - add_domains="true" fi done fi @@ -508,10 +501,9 @@ _intf_rule_v2ray_rules() { _intf_rule() { local intf - intf=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') + config_get intf $1 ifname + [ -z "$intf" ] && intf=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') [ -n "$(echo $intf | grep '@')" ] && intf=$(ifstatus "$1" | jsonfilter -q -e '@["device"]') - [ -z "$intf" ] && config_get intf $1 device - [ -n "$(echo $intf | grep '/')" ] && return #count=$((count+1)) config_get count $1 metric local mode @@ -545,7 +537,7 @@ _intf_rule() { EOF else ip rule add prio 1 fwmark 0x539$count lookup $count pref 1 > /dev/null 2>&1 - ip -6 rule add prio 1 fwmark 0x6539$count lookup 6$count pref 1 > /dev/null 2>&1 + ip -6 rule add prio 1 fwmark 0x6539$count lookup 6$count > /dev/null 2>&1 fi } if [ "$(iptables-save | grep omr-bypass | grep omr_dst_bypass_$intf)" = "" ]; then @@ -688,7 +680,6 @@ boot() { start_service() { #local count logger -t "omr-bypass" "Starting OMR-ByPass..." - add_domains="false" config_load omr-bypass config_foreach _add_proto proto disableipv6="$(uci -q get openmptcprouter.settings.disable_ipv6)" @@ -806,11 +797,11 @@ start_service() { config_foreach _bypass_proto dpis uci -q commit omr-bypass - [ -z "$RELOAD" ] && [ "$add_domains" = "true" ] && { + [ -z "$RELOAD" ] && { logger -t "omr-bypass" "Restart dnsmasq..." /etc/init.d/dnsmasq restart } - [ -n "$RELOAD" ] && [ "$add_domains" = "true" ] && { + [ -n "$RELOAD" ] && { logger -t "omr-bypass" "Reload dnsmasq..." /etc/init.d/dnsmasq reload } diff --git a/luci-app-omr-dscp/po/fr/omr-dscp.po b/luci-app-omr-dscp/po/fr/omr-dscp.po index a7389d8f3..8ab04ac95 100644 --- a/luci-app-omr-dscp/po/fr/omr-dscp.po +++ b/luci-app-omr-dscp/po/fr/omr-dscp.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-02-19 07:53+0000\n" +"PO-Revision-Date: 2021-03-31 15:07+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.6.1\n" +"X-Generator: Weblate 4.5.2\n" #: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:21 #: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:73 @@ -36,15 +36,15 @@ msgstr "CS3 - SIP" #: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:25 #: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:77 msgid "CS4 - Real-Time Interactive" -msgstr "CS4 - Temps réel interactif" +msgstr "" #: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:78 msgid "CS5 - Broadcast Video" -msgstr "CS5 - Diffusion vidéo" +msgstr "" #: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:26 msgid "CS5 - Broadcast video" -msgstr "CS5 - Diffusion vidéo" +msgstr "" #: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:27 #: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:79 @@ -54,7 +54,7 @@ msgstr "CS6 - Routage réseau" #: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:28 #: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:80 msgid "CS7 - Latency sensitive" -msgstr "CS7 - Sensible à la latence" +msgstr "" #: luci-app-omr-dscp/luasrc/model/cbi/dscp-domains.lua:20 #: luci-app-omr-dscp/luasrc/model/cbi/dscp.lua:72 @@ -116,7 +116,7 @@ msgstr "EF - Voix" #: luci-app-omr-dscp/root/usr/share/rpcd/acl.d/luci-app-omr-dscp.json:3 msgid "Grant UCI access for luci-app-dscp" -msgstr "Permettre l'accès pour luci-app-dscp" +msgstr "" #: luci-app-omr-dscp/luasrc/controller/omr-dscp.lua:4 #: luci-app-omr-dscp/root/usr/share/luci/menu.d/luci-app-omr-dscp.json:3 diff --git a/luci-app-omr-dscp/root/etc/config/dscp b/luci-app-omr-dscp/root/etc/config/dscp index 310ae3e31..ef2ef31f2 100644 --- a/luci-app-omr-dscp/root/etc/config/dscp +++ b/luci-app-omr-dscp/root/etc/config/dscp @@ -256,8 +256,3 @@ config domains option class 'cs1' option comment 'WindowsUpdate' -config domains - option name 'tv.milkywan.fr' - option class 'cs5' - option comment 'MilkyWan TV' - diff --git a/luci-app-omr-dscp/root/etc/init.d/omr-dscp b/luci-app-omr-dscp/root/etc/init.d/omr-dscp index 4997e1cbc..9ea0d661f 100755 --- a/luci-app-omr-dscp/root/etc/init.d/omr-dscp +++ b/luci-app-omr-dscp/root/etc/init.d/omr-dscp @@ -19,10 +19,10 @@ config_get lan_device lan ifname config_load dscp _ipt4() { - iptables -w -t mangle "$@" 2>&1 >/dev/null + iptables -w -t mangle "$@" } _ipt6() { - ip6tables -w -t mangle "$@" >/dev/null + ip6tables -w -t mangle "$@" } _add_dscp_rule() { diff --git a/luci-app-omr-quota/po/fr/omr-quota.po b/luci-app-omr-quota/po/fr/omr-quota.po index e67782587..a7af2a13a 100644 --- a/luci-app-omr-quota/po/fr/omr-quota.po +++ b/luci-app-omr-quota/po/fr/omr-quota.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-02-19 07:53+0000\n" +"PO-Revision-Date: 2021-04-30 16:16+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.6.1\n" +"X-Generator: Weblate 4.5.2\n" #: luci-app-omr-quota/luasrc/view/omr-quota/cbi-select-add.htm:8 msgid "Add" @@ -23,7 +23,7 @@ msgstr "Activer" #: luci-app-omr-quota/root/usr/share/rpcd/acl.d/luci-app-omr-quota.json:3 msgid "Grant UCI access for luci-app-omr-quota" -msgstr "Permettre l'accès à luci-app-omr-quota" +msgstr "" #: luci-app-omr-quota/luasrc/model/cbi/quota/quota.lua:10 msgid "Interfaces" diff --git a/luci-app-omr-tracker/po/it/omr-tracker.po b/luci-app-omr-tracker/po/it/omr-tracker.po index eed54997d..4257d56b1 100644 --- a/luci-app-omr-tracker/po/it/omr-tracker.po +++ b/luci-app-omr-tracker/po/it/omr-tracker.po @@ -1,18 +1,18 @@ msgid "" msgstr "" -"PO-Revision-Date: 2022-02-11 13:53+0000\n" -"Last-Translator: Riccardo Tornesello \n" +"PO-Revision-Date: 2020-09-21 12:51+0000\n" +"Last-Translator: Weblate Admin \n" "Language-Team: Italian \n" "Language: it\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.6.1\n" +"X-Generator: Weblate 4.0.4\n" #: luci-app-omr-tracker/luasrc/view/omr-tracker/cbi-select-add.htm:8 msgid "Add" -msgstr "Aggiungi" +msgstr "" #: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:117 #: luci-app-omr-tracker/luasrc/model/cbi/omr-tracker.lua:192 diff --git a/luci-app-omr-tracker/root/usr/share/luci/menu.d/luci-app-omr-tracker.json b/luci-app-omr-tracker/root/usr/share/luci/menu.d/luci-app-omr-tracker.json old mode 100755 new mode 100644 diff --git a/luci-app-omr-tracker/root/usr/share/rpcd/acl.d/luci-app-omr-tracker.json b/luci-app-omr-tracker/root/usr/share/rpcd/acl.d/luci-app-omr-tracker.json old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/css/wanstatus.css old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-doing.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-doing.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-done.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-done.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-error.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-error.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-todo.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-todo.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-warn.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/status-warn.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusError.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusError.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusOK.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusOK.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusWarning.png b/luci-app-openmptcprouter/htdocs/luci-static/resources/openmptcprouter/images/statusWarning.png old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/htdocs/luci-static/resources/spinner.gif b/luci-app-openmptcprouter/htdocs/luci-static/resources/spinner.gif old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua old mode 100755 new mode 100644 index 9e94a08a1..3d243b210 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -26,11 +26,7 @@ end function interface_from_device(dev) for _, iface in ipairs(net:get_networks()) do local ifacen = iface:name() - local ifacename = "" - ifacename = ucic:get("network",ifacen,"device") - if ifacename == "" then - ifacename = ucic:get("network",ifacen,"ifname") - end + local ifacename = ucic:get("network",ifacen,"ifname") if ifacename == dev then return ifacen end @@ -38,17 +34,6 @@ function interface_from_device(dev) return "" end -function uci_device_from_interface(intf) - intfname = ucic:get("network",intf,"device") - deviceuci = "" - ucic:foreach("network", "device", function(s) - if intfname == ucic:get("network",s[".name"],"name") then - deviceuci = s[".name"] - end - end) - return deviceuci -end - function wizard_add() local gostatus = true @@ -128,10 +113,7 @@ function wizard_add() end) local defif = "eth0" if add_interface_ifname == "" then - local defif1 = ucic:get("network","wan1_dev","device") or "" - if defif1 == "" then - defif1 = ucic:get("network","wan1_dev","ifname") or "" - end + local defif1 = ucic:get("network","wan1_dev","ifname") or "" if defif1 ~= "" then defif = defif1 end @@ -144,29 +126,17 @@ function wizard_add() if ointf ~= "" then if ucic:get("network",ointf,"type") == "" then ucic:set("network",ointf,"type","macvlan") - ucic:set("network",ointf,"device",ointf) - ucic:set("network",ointf .. "_dev","device") - ucic:set("network",ointf .. "_dev","type","macvlan") - ucic:set("network",ointf .. "_dev","mode","vepa") - ucic:set("network",ointf .. "_dev","ifname",defif) - ucic:set("network",ointf .. "_dev","name",ointf) end wanif = "wan" .. i end ucic:set("network","wan" .. i,"interface") - ucic:set("network","wan" .. i,"device",defif) + ucic:set("network","wan" .. i,"ifname",defif) ucic:set("network","wan" .. i,"proto","static") ucic:set("openmptcprouter","wan" .. i,"interface") if ointf ~= "" then ucic:set("network","wan" .. i,"type","macvlan") - ucic:set("network","wan" .. i,"device","wan" .. i) ucic:set("network","wan" .. i,"masterintf",defif) - ucic:set("network","wan" .. i .. "_dev","device") - ucic:set("network","wan" .. i .. "_dev","type","macvlan") - ucic:set("network","wan" .. i .. "_dev","mode","vepa") - ucic:set("network","wan" .. i .. "_dev","ifname",defif) - ucic:set("network","wan" .. i .. "_dev","name","wan" .. i) end ucic:set("network","wan" .. i,"ip4table","wan") if multipath_master then @@ -201,7 +171,7 @@ function wizard_add() ucic:set("sqm","wan" .. i,"script","simple.qos") ucic:set("sqm","wan" .. i,"qdisc_advanced","0") ucic:set("sqm","wan" .. i,"linklayer","none") - ucic:set("sqm","wan" .. i,"enabled","1") + ucic:set("sqm","wan" .. i,"enabled","0") ucic:set("sqm","wan" .. i,"debug_logging","0") ucic:set("sqm","wan" .. i,"verbosity","5") ucic:set("sqm","wan" .. i,"download","0") @@ -227,10 +197,7 @@ function wizard_add() local delete_intf = luci.http.formvaluetable("delete") or "" if delete_intf ~= "" then for intf, _ in pairs(delete_intf) do - local defif = ucic:get("network",intf,"ifname") or "" - if defif == "" then - defif = ucic:get("network",intf,"ifname") - end + local defif = ucic:get("network",intf,"ifname") ucic:delete("network",intf) if ucic:get("network",intf .. "_dev") ~= "" then ucic:delete("network",intf .. "_dev") @@ -284,7 +251,6 @@ function wizard_add() local sqmenabled = luci.http.formvalue("cbid.sqm.%s.enabled" % intf) or "0" local multipath = luci.http.formvalue("cbid.network.%s.multipath" % intf) or "on" local lan = luci.http.formvalue("cbid.network.%s.lan" % intf) or "0" - local ttl = luci.http.formvalue("cbid.network.%s.ttl" % intf) or "" if typeintf ~= "" then if typeintf == "normal" then typeintf = "" @@ -296,48 +262,15 @@ function wizard_add() end if typeintf == "macvlan" and masterintf ~= "" then ucic:set("network",intf,"type","macvlan") - ucic:set("network",intf .. "_dev","device") - ucic:set("network",intf .. "_dev","type","macvlan") - ucic:set("network",intf .. "_dev","ifname",masterinf) - ucic:set("network",intf .. "_dev","mode","vepa") - ucic:set("network",intf .. "_dev","name",intf) ucic:set("network",intf,"masterintf",masterintf) elseif typeintf == "" and ifname ~= "" and (proto == "static" or proto == "dhcp" or proto == "dhcpv6") then - ucic:set("network",intf,"device",ifname) - if uci_device_from_interface(intf) == "" then - ucic:set("network",intf .. "_dev","device") - ucic:set("network",intf .. "_dev","name",ifname) - end + ucic:set("network",intf,"ifname",ifname) elseif typeintf == "" and device ~= "" and proto == "ncm" then ucic:set("network",intf,"device",device_ncm) - if uci_device_from_interface(intf) == "" then - ucic:set("network",intf .. "_dev","device") - ucic:set("network",intf .. "_dev","name",device_ncm) - end elseif typeintf == "" and device ~= "" and proto == "qmi" then ucic:set("network",intf,"device",device_qmi) - if uci_device_from_interface(intf) == "" then - ucic:set("network",intf .. "_dev","device") - ucic:set("network",intf .. "_dev","name",device_qmi) - end elseif typeintf == "" and device ~= "" and proto == "modemmanager" then ucic:set("network",intf,"device",device_manager) - if uci_device_from_interface(intf) == "" then - ucic:set("network",intf .. "_dev","device") - ucic:set("network",intf .. "_dev","name",device_manager) - end - elseif typeintf == "" and ifname ~= "" and proto == "static" then - ucic:set("network",intf,"device",ifname) - if uci_device_from_interface(intf) == "" then - ucic:set("network",intf .. "_dev","device") - ucic:set("network",intf .. "_dev","name",ifname) - end - end - if typeintf ~= "macvlan" and ucic:get("network",intf .. "_dev","type") == "macvlan" then - ucic:delete("network",intf .. "_dev","type") - ucic:delete("network",intf .. "_dev","mode") - ucic:delete("network",intf .. "_dev","ifname") - ucic:delete("network",intf .. "_dev","macaddr") end if proto == "pppoe" then ucic:set("network",intf,"pppd_options","persist maxfail 0") @@ -345,13 +278,6 @@ function wizard_add() if proto ~= "other" then ucic:set("network",intf,"proto",proto) end - - uci_device = uci_device_from_interface(intf) - if uci_device == "" then - uci_device = intf .. "_dev" - end - ucic:set("network",uci_device,"ttl",ttl) - ucic:set("network",intf,"apn",apn) ucic:set("network",intf,"pincode",pincode) ucic:set("network",intf,"delay",delay) @@ -416,10 +342,7 @@ function wizard_add() if not ucic:get("sqm",intf) ~= "" then local defif = get_device(intf) if defif == "" then - defif = ucic:get("network",intf,"device") or "" - if defif == "" then - defif = ucic:get("network",intf,"ifname") or "" - end + defif = ucic:get("network",intf,"ifname") or "" end ucic:set("sqm",intf,"queue") ucic:set("sqm",intf,"interface",defif) @@ -519,7 +442,7 @@ function wizard_add() ucic:set("network","omrvpn","proto","bonding") end if vpn_intf ~= "" then - ucic:set("network","omrvpn","device",vpn_intf) + ucic:set("network","omrvpn","ifname",vpn_intf) ucic:set("sqm","omrvpn","interface",vpn_intf) ucic:save("network") ucic:commit("network") @@ -886,7 +809,7 @@ function wizard_add() local dsvpn_key = luci.http.formvalue("dsvpn_key") if dsvpn_key ~= "" then - ucic:set("dsvpn","vpn","port","65401") + ucic:set("dsvpn","vpn","port","65011") ucic:set("dsvpn","vpn","key",dsvpn_key) ucic:set("dsvpn","vpn","localip","10.255.251.2") ucic:set("dsvpn","vpn","remoteip","10.255.251.1") @@ -971,7 +894,7 @@ function wizard_add() -- Restart all menuentry = ucic:get("openmptcprouter","settings","menu") or "openmptcprouter" if gostatus == true then - --luci.sys.call("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") + luci.sys.call("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") luci.sys.call("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") luci.sys.call("ip addr flush dev tun0 >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/omr-tracker stop >/dev/null 2>/dev/null") @@ -993,7 +916,6 @@ function wizard_add() luci.sys.call("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/vnstat restart >/dev/null 2>/dev/null") luci.sys.call("/etc/init.d/v2ray restart >/dev/null 2>/dev/null") - luci.sys.call("/etc/init.d/sysntpd restart >/dev/null 2>/dev/null") luci.http.redirect(luci.dispatcher.build_url("admin/system/" .. menuentry:lower() .. "/status")) else luci.http.redirect(luci.dispatcher.build_url("admin/system/" .. menuentry:lower() .. "/wizard")) @@ -1190,19 +1112,6 @@ function settings_add() local sfe_bridge = luci.http.formvalue("sfe_bridge") or "0" ucic:set("openmptcprouter","settings","sfe_bridge",sfe_bridge) - -- Enable/disable SIP ALG - local sipalg = luci.http.formvalue("sipalg") or "0" - ucic:set("openmptcprouter","settings","sipalg",sipalg) - ucic:foreach("firewall", "zone", function (section) - ucic:set("firewall",section[".name"],"auto_helper",sipalg) - end) - if sipalg == "1" then - luci.sys.call("modprobe nf_conntrack_ip >/dev/null 2>/dev/null") - luci.sys.call("modprobe nf_nat_sip >/dev/null 2>/dev/null") - else - luci.sys.call("rmmod nf_nat_sip >/dev/null 2>/dev/null") - luci.sys.call("rmmod nf_conntrack_ip >/dev/null 2>/dev/null") - end ucic:save("openmptcprouter") ucic:commit("openmptcprouter") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/debug.htm old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm old mode 100755 new mode 100644 index 2db886333..c866f921e --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm @@ -219,12 +219,6 @@ -
- -
- checked<% end %>> -
-

diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm old mode 100755 new mode 100644 index be05b035e..5f248ab31 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm @@ -19,7 +19,7 @@ -- along with OverTheBox. If not, see (http://www.gnu.org/licenses/) -%> <% --- Copyright 2018-2022 Ycarus (Yannick Chabanois) ycarus@zugaina.org for OpenMPTCProuter +-- Copyright 2018-2020 Ycarus (Yannick Chabanois) ycarus@zugaina.org for OpenMPTCProuter -- -- Small changes to make this work with OpenMPTCProuter -- New features: @@ -307,9 +307,7 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm } if (mArray.openmptcprouter.vps_time_accurate == false) { - var vps_time = new Date(mArray.openmptcprouter.vps_time*1000).toISOString(); - var omr_time = new Date(mArray.openmptcprouter.omr_time*1000).toISOString(); - statusMessage += '<%:Big time difference between the server and the router%> (' + vps_time + '/' + omr_time + ')
'; + statusMessage += '<%:Big time difference between the server and the router%>' + '
'; } } if (statusMessage !== "" && statusMessageClass !== "error") diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm old mode 100755 new mode 100644 index e447518f4..2c33cfa2d --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -7,17 +7,11 @@ local sys = require "luci.sys" local ut = require "luci.util" local ifaces = sys.net:devices() - local ifttyu = nixio.fs.glob("/dev/ttyUSB*") - local ifttyc = nixio.fs.glob("/dev/cdc-wdm*") menuentry = uci:get("openmptcprouter","settings","menu") or "openmptcprouter" function device_notvirtual(dev) - if dev:match("^eth.*") or dev:match("^wwan.*") or dev:match("^tun.*") or dev:match("/") then - return true - end - networks = net:get_networks() - for _, iface in ipairs(networks) do + for _, iface in ipairs(net:get_networks()) do local ifacen = iface:name() - local ifacename = uci:get("network",ifacen,"device") + local ifacename = uci:get("network",ifacen,"ifname") local ifacetype = uci:get("network",ifacen,"type") or "" local ifaceproto = uci:get("network",ifacen,"proto") or "" --if ifacename == dev and (ifacetype == "macvlan" or ifacetype == "bridge" or ifaceproto == "6in4") then @@ -434,7 +428,7 @@ <% for _, iface in ipairs(net:get_networks()) do local ifname = iface:name() - local firewall_lan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_lan.network | tr ' ' '\n' | grep \'^" .. ifname .. "$\'")) + local firewall_lan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_lan.network | grep " .. ifname)) if firewall_lan ~= "" then %>

<%=ifname%>

@@ -479,7 +473,7 @@ if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea == "mlvpn0" or ifacea:match("^ifb.*") or ifacea:match("^sit.*") or ifacea:match("^gre.*") or ifacea:match("^ip6.*") or ifacea:match("^teql.*") or ifacea:match("^erspan.*") or ifacea:match("^tun.*") or ifacea:match("^bond.*")) and device_notvirtual(ifacea) then if uci:get("network",ifname,"proto") ~= "macvlan" then %> - + <% else %> @@ -489,9 +483,9 @@ end end if uci:get("network",ifname,"proto") ~= "macvlan" then - if iffind == 0 and uci:get("network",ifname,"device") ~= nil then + if iffind == 0 and uci:get("network",ifname,"ifname") ~= nil then %> - + <% end else @@ -537,7 +531,7 @@ <% for _, iface in ipairs(net:get_networks()) do local ifname = iface:name() - local firewall_wan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_wan.network | tr ' ' '\n' | grep \'^" .. ifname .. "$\'")) + local firewall_wan = luci.util.trim(luci.sys.exec("uci -q get firewall.zone_wan.network | grep " .. ifname)) if firewall_wan ~= "" then -- local multipath = uci:get("network",ifname,"multipath") @@ -622,7 +616,7 @@ +
<%:Set an IP in the same network as the modem%> @@ -702,7 +696,7 @@
- " data-type="ip6addr" data-optional="true"> + " data-type="ip6addr">
<%:Set here IP of the modem%> @@ -749,12 +743,14 @@ <% iffind=0 - for tty in ifttyc do + iftty = nixio.fs.glob("/dev/cdc-wdm*") + for tty in iftty do %> <% @@ -896,16 +893,6 @@ <% end %> -
- -
- -
-
- <%:You can force a TTL. Some LTE provider detect tethering by inpecting packet TTL value, setting it to 65 often solve the issue.%> -
-
-
<% local download = "0" @@ -922,7 +909,7 @@ -- end --end %> -
+
checked<% end %> /> @@ -932,7 +919,7 @@
-
+
checked<% end %> /> @@ -942,7 +929,7 @@
-
+
@@ -958,7 +945,7 @@ -->
-
+
diff --git a/luci-app-openmptcprouter/po/de/openmptcprouter.po b/luci-app-openmptcprouter/po/de/openmptcprouter.po index 7efcbe36f..58d482708 100644 --- a/luci-app-openmptcprouter/po/de/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/de/openmptcprouter.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2022-02-19 10:30+0000\n" -"Last-Translator: Weblate Admin \n" +"PO-Revision-Date: 2020-10-21 12:55+0000\n" +"Last-Translator: Anonymous \n" "Language-Team: German \n" "Language: de\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.10.1\n" +"X-Generator: Weblate 4.0.4\n" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307 msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP" @@ -23,12 +23,10 @@ msgstr "Schlüssel 'Dead Simple VPN'" msgid "" "A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set" msgstr "" -"Die zweite IP eines Servers kann für Dual-IPv4/IPv6-Server festgelegt " -"werden, wenn WAN-IPv6 eingerichtet ist" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:111 msgid "API username to retrieve personnalized settings from the server." -msgstr "API Benutzername zum Download der Einstellungen vom Server." +msgstr "API Benutzername zum Download der Settings vom Server." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:809 msgid "APN" @@ -90,7 +88,7 @@ msgstr "Backup der Router-Einstellungen auf den Server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:371 msgid "Balancing" -msgstr "Ausgleich" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:22 msgid "Beta" @@ -98,11 +96,11 @@ msgstr "Beta" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:310 msgid "Big time difference between the server and the router" -msgstr "Großer Zeitunterschied zwischen dem Server und dem Router" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:564 msgid "Bridge" -msgstr "Netzwerkbrücke" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:618 msgid "Bridge can't have multipath enabled" @@ -115,27 +113,28 @@ msgstr "" "übertragen." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 +#, fuzzy msgid "" "By default proxy is used for any traffic that is TCP (and UDP for V2Ray)." msgstr "" -"Standard wird TCP Netzwerk Verkehr über Proxy übertragen (Auch UDP für " -"V2Ray)." +"IP-Pakete, die nicht TCP sind, werden standardmäßig mit einem VPN-Protokoll " +"übertragen." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840 msgid "CHAP" -msgstr "CHAP" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:271 msgid "Can\\'t access and use server part" -msgstr "Kann Server Teil nicht öffnen und verwenden" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:297 msgid "Can\\'t contact Server Admin Script" -msgstr "Kann nicht verbinden zum Server Admin Skript" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:287 msgid "Can\\'t get public IP address from ShadowSocks" -msgstr "Kann keine Public IP Adresse vom ShadowSocks beziehen" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290 msgid "Can\\'t get public IP address from V2Ray" @@ -143,7 +142,7 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 msgid "Can\\'t ping server" -msgstr "Kann Server nicht pingen" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415 msgid "China" @@ -154,22 +153,20 @@ msgid "" "Choose MacVLAN if you want to create a virtual interface based on a physical " "interface." msgstr "" -"Wähle MacVLAN um ein virtuelles Interface basierend auf ein Physikalisches " -"Interface an zu legen." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:502 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:588 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:647 msgid "Choose physical interface." -msgstr "Wähle physikalische Schnittstelle." +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:135 msgid "Core temp:" -msgstr "Kerntemperatur:" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410 msgid "Country" -msgstr "Land" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:407 #, fuzzy @@ -182,20 +179,22 @@ msgid "DHCP" msgstr "DHCP" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:600 +#, fuzzy msgid "DHCPv6" -msgstr "DHCPv6" +msgstr "DHCP" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" -msgstr "DNS Problem: Hostnamen nicht beziehbar" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:355 msgid "Debug" -msgstr "Debug" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:223 +#, fuzzy msgid "Default Proxy" -msgstr "Standard Proxy" +msgstr "Standard VPN" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:337 msgid "Default VPN" @@ -210,7 +209,7 @@ msgstr "Löschen" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:768 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:789 msgid "Device" -msgstr "Gerät" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253 #, fuzzy @@ -233,12 +232,13 @@ msgstr "" "Abschalten von TCP-Fast-Open für Linux und die ShadowsSocks-Einstellungen" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:295 +#, fuzzy msgid "Disable default gateway" -msgstr "Default Gateway aus" +msgstr "Gateway-Ping aus" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:300 msgid "Disable default gateway, no internet if VPS are down" -msgstr "Default Gateway aus, kein Internet wenn VPS down ist" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:193 msgid "Disable external check" @@ -254,12 +254,13 @@ msgid "Disable gateway ping check in status page" msgstr "Gateway-Ping Statusüberprüfung aus" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279 +#, fuzzy msgid "Disable interfaces auto rename" -msgstr "Automatische Umbenennung von Interfaces deaktivieren" +msgstr "Externe Prüfung aus" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330 msgid "Disable multipath test using tracebox" -msgstr "Deaktiviere multipath Test mittels Tracebox" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:335 #, fuzzy @@ -276,8 +277,9 @@ msgid "" msgstr "Portweiterleitungen in der Server-Firewall zu diesem Router abschalten" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284 +#, fuzzy msgid "Disable renaming interfaces" -msgstr "Umbenennung der Schnittstelle deaktivieren" +msgstr "Bezeichnung der Schnittstelle" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:315 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320 @@ -286,12 +288,14 @@ msgid "Disable route loop detection" msgstr "Server-Ping aus" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:144 +#, fuzzy msgid "Disable server" -msgstr "Server deaktivieren" +msgstr "Server-Ping aus" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248 +#, fuzzy msgid "Disable server http test" -msgstr "Server-http-Test aus" +msgstr "Server-Ping aus" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:305 msgid "Disable server ping" @@ -302,14 +306,15 @@ msgid "Disable server ping status check" msgstr "Server-Ping Status-Prüfung aus" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:325 +#, fuzzy msgid "Disable tracebox test" -msgstr "Deaktiviere tracebox Test" +msgstr "Externe Prüfung aus" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:189 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:871 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:887 msgid "Disabled" -msgstr "inaktiv" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:933 msgid "Download speed (Kb/s)" @@ -346,12 +351,13 @@ msgid "Enable ShadowSocks Obfuscating" msgstr "Shadowsocks-Verschleierung aktiv" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:213 +#, fuzzy msgid "Enable TCP Low Latency" -msgstr "Aktiviere TCP Low Latency" +msgstr "TCP-Fast-Open aus" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:360 msgid "Enable debug logs" -msgstr "Aktiviere debug Logs" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:190 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:870 @@ -364,30 +370,31 @@ msgid "Encryption" msgstr "Verschlüsselung" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:280 +#, fuzzy msgid "Encryption method is used for Shadowsocks, V2Ray, Glorytun and OpenVPN." -msgstr "" -"Verschlüsselungverfahren wird verwendet für Shadowsocks, V2Ray, Glorytun " -"and OpenVPN." +msgstr "Verschlüsselungverfahren wird ebenfalls für Glorytun genutzt." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:176 msgid "Filesystem is readonly" -msgstr "Filesystem ist nur lesen" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:419 msgid "For China, set an accessible DNS and disable DNSSEC." msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178 +#, fuzzy msgid "Force retrieve all keys from server." -msgstr "Erzwingen alle Schlüssel vom Server runter zu laden." +msgstr "API Benutzername zum Download der Settings vom Server." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:173 +#, fuzzy msgid "Force retrieve settings" -msgstr "Erzwingen Einstellungen runter zu laden." +msgstr "Server-Einstellungen" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:829 msgid "GPRS only" -msgstr "Nur GPRS" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:561 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:764 @@ -465,13 +472,15 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710 +#, fuzzy msgid "IPv6 address" -msgstr "IPv6-Adresse" +msgstr "IPv4-Adresse" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 +#, fuzzy msgid "IPv6 gateway" -msgstr "IPv6-Standardgateway" +msgstr "IPv4-Standardgateway" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:632 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:804 @@ -479,8 +488,9 @@ msgid "IPv6 route received" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:184 +#, fuzzy msgid "IPv6 settings" -msgstr "IPv6-Einstellungen" +msgstr "VPN-Einstellungen" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:209 msgid "IPv6 tunnel DOWN" @@ -627,7 +637,7 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:867 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:883 msgid "Multipath TCP" -msgstr "Multipath-TCP" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:601 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:607 @@ -780,7 +790,7 @@ msgstr "Nur eine Verbindung kann als 'primär' definiert werden." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391 msgid "Only work with Shadowsocks as proxy." -msgstr "Funktioniert nur mit Shadowsocks als Proxy." +msgstr "" #: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3 msgid "OpenMPTCProuter" @@ -792,7 +802,7 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:218 msgid "Optimize for latency instead of bandwidth" -msgstr "Für niedrige Latenz anstatt für Bandbreite optimieren" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:455 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:605 @@ -839,11 +849,11 @@ msgstr "Interface hinzufügen" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:825 msgid "Prefer LTE" -msgstr "Bevorzuge LTE" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:826 msgid "Prefer UMTS" -msgstr "Bevorzuge UMTS" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:94 #, fuzzy @@ -911,8 +921,9 @@ msgid "Scaling governor" msgstr "Methode der CPU-Taktung" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#, fuzzy msgid "Secondary server IP" -msgstr "zweite Server IP" +msgstr "Server IPv4" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:992 msgid "Select the device you want to base the interface on." @@ -952,8 +963,9 @@ msgid "Server username" msgstr "Server-Benutzername" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:821 +#, fuzzy msgid "Service Type" -msgstr "Dienst Typ" +msgstr "Server-Schlüssel" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:401 msgid "Set VPN to use for MPTCP over VPN." @@ -1094,7 +1106,7 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:559 msgid "Type" -msgstr "Typ" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:331 msgid "UBOND can replace Glorytun with connections with same latency" @@ -1164,8 +1176,9 @@ msgid "VLAN" msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:184 +#, fuzzy msgid "VPN is not running" -msgstr "VPN läuft nicht" +msgstr "VPN-Einstellungen" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:286 msgid "VPN settings" @@ -1300,7 +1313,7 @@ msgstr "Statische Adresse" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:516 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:749 msgid "latency:" -msgstr "Latenz:" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:520 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:753 @@ -1339,12 +1352,14 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:496 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:741 +#, fuzzy msgid "wan address:" -msgstr "öffentliche IP Adresse:" +msgstr "Statische Adresse" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:500 +#, fuzzy msgid "wan ipv6 address:" -msgstr "öffentliche ipv6 Adresse:" +msgstr "Statische Adresse" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:508 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:512 diff --git a/luci-app-openmptcprouter/po/fr/openmptcprouter.po b/luci-app-openmptcprouter/po/fr/openmptcprouter.po index 5f1b0670d..001127345 100644 --- a/luci-app-openmptcprouter/po/fr/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/fr/openmptcprouter.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-02-19 07:53+0000\n" +"PO-Revision-Date: 2021-06-01 06:35+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -87,7 +87,7 @@ msgstr "Type d'authentification" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:873 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:889 msgid "Backup" -msgstr "Remplaçant" +msgstr "Sauvegarder" #: luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua:21 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:10 @@ -112,7 +112,7 @@ msgstr "Passerelle" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:618 msgid "Bridge can't have multipath enabled" -msgstr "Les passerelles ne peuvent pas utiliser le protocole multipath" +msgstr "Un pont ne peut avoir multipath d'activer" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:287 msgid "By default VPN is used for any traffic that is not TCP." diff --git a/luci-app-openmptcprouter/po/it/openmptcprouter.po b/luci-app-openmptcprouter/po/it/openmptcprouter.po index 6d4ddf076..1d7926872 100644 --- a/luci-app-openmptcprouter/po/it/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/it/openmptcprouter.po @@ -1,14 +1,14 @@ msgid "" msgstr "" -"PO-Revision-Date: 2022-02-19 10:30+0000\n" -"Last-Translator: Weblate Admin \n" +"PO-Revision-Date: 2020-12-01 17:19+0000\n" +"Last-Translator: Giuseppe Dipierro \n" "Language-Team: Italian \n" "Language: it\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.10.1\n" +"X-Generator: Weblate 4.0.4\n" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:307 msgid "A Dead Simple VPN is a TCP VPN that can replace Glorytun TCP" @@ -23,8 +23,6 @@ msgstr "Chiave Dead Simple VPN" msgid "" "A second server's IP can be set for dual IPv4/IPv6 server if WAN IPv6 are set" msgstr "" -"Può essere impostato un secondo IP per il doppio server IPv4/IPv6 se è stato " -"impostato il server WAN IPv6" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:111 msgid "API username to retrieve personnalized settings from the server." @@ -108,7 +106,7 @@ msgstr "Ponte" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:618 msgid "Bridge can't have multipath enabled" -msgstr "Il Bridge non può avere il multipath abilitato" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:287 msgid "By default VPN is used for any traffic that is not TCP." @@ -140,8 +138,9 @@ msgid "Can\\'t get public IP address from ShadowSocks" msgstr "Impossibile ottenere un indirizzo IP pubblico da ShadowSocks" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:290 +#, fuzzy msgid "Can\\'t get public IP address from V2Ray" -msgstr "Impossibile ottenere un indirizzo IP pubblico da V2Ray" +msgstr "Impossibile ottenere un indirizzo IP pubblico da ShadowSocks" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:284 msgid "Can\\'t ping server" @@ -149,7 +148,7 @@ msgstr "Impossibile eseguire il ping del server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:415 msgid "China" -msgstr "Cina" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:568 msgid "" @@ -171,11 +170,12 @@ msgstr "Temp. Nucleo:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:410 msgid "Country" -msgstr "Nazione" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:407 +#, fuzzy msgid "Country settings" -msgstr "Impostazioni nazionali del router" +msgstr "Impostazioni del router" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:454 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:599 @@ -183,8 +183,9 @@ msgid "DHCP" msgstr "DHCP" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:600 +#, fuzzy msgid "DHCPv6" -msgstr "DHCPv6" +msgstr "DHCP" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:188 msgid "DNS issue: can\\'t resolve hostname" @@ -214,13 +215,15 @@ msgid "Device" msgstr "Dispositivo" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:253 +#, fuzzy msgid "Disable HTTP test on Server API in status page" -msgstr "Disabilitare il test HTTP sulle API Server nella pagina di stato" +msgstr "Disabilitare il controllo dello stato del ping del server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:345 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:350 +#, fuzzy msgid "Disable ModemManager" -msgstr "Disabilita ModemManager" +msgstr "ModemManager" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:203 msgid "Disable TCP Fast Open" @@ -248,20 +251,24 @@ msgid "Disable gateway ping" msgstr "Disabilita il ping del gateway" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:243 +#, fuzzy msgid "Disable gateway ping check in status page" -msgstr "Disabilita il controllo del ping del gateway nella pagina di stato" +msgstr "Disabilitare il controllo dello stato del ping del gateway" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:279 +#, fuzzy msgid "Disable interfaces auto rename" -msgstr "Disabilita auto rinomina interfacce" +msgstr "Disabilita il test Tracebox" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:330 msgid "Disable multipath test using tracebox" msgstr "Disabilita il test multipath usando tracebox" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:335 +#, fuzzy +#| msgid "Disabled" msgid "Disable nDPI" -msgstr "Disabilita nDPI" +msgstr "Disabilitato" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:340 msgid "Disable nDPI, used for protocols in OMR-ByPass" @@ -275,8 +282,9 @@ msgstr "" "a questo router" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:284 +#, fuzzy msgid "Disable renaming interfaces" -msgstr "Disabilita rinomina interfaccia" +msgstr "Etichetta per l'interfaccia" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:315 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:320 @@ -289,8 +297,9 @@ msgid "Disable server" msgstr "Disabilita il server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:248 +#, fuzzy msgid "Disable server http test" -msgstr "Disabilita http test server" +msgstr "Disabilita il ping del server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:305 msgid "Disable server ping" @@ -320,11 +329,12 @@ msgstr "Cambiamento dinamico" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:390 msgid "Enable Bridge Acceleration" -msgstr "Abilita Accelerazione modalità Bridge" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:209 +#, fuzzy msgid "Enable DNS64" -msgstr "Abilita DNS64" +msgstr "Abilita MQ" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/settings.htm:384 msgid "Enable Fast Patch offloading for connections" @@ -373,7 +383,7 @@ msgstr "Il filesystem è di sola lettura" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:419 msgid "For China, set an accessible DNS and disable DNSSEC." -msgstr "Per la Cina, imposta un DNS accessibile e disabilita DNSSEC." +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:178 msgid "Force retrieve all keys from server." @@ -393,8 +403,9 @@ msgid "Gateway DOWN" msgstr "Tipi di pagamento" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:564 +#, fuzzy msgid "Gateway IPv6 DOWN" -msgstr "Gateway IPv6 SPENTO" +msgstr "Tipi di pagamento" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:295 msgid "Glorytun TCP is used by default for UDP and ICMP" @@ -464,13 +475,15 @@ msgstr "Prefisso IPv6" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:683 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:710 +#, fuzzy msgid "IPv6 address" -msgstr "Indirizzi IPv6" +msgstr "Indirizzi IPv4" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:697 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:720 +#, fuzzy msgid "IPv6 gateway" -msgstr "Gateway IPv6" +msgstr "Gateway IPv4" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:632 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:804 @@ -491,7 +504,7 @@ msgstr "IPv6:" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:214 msgid "If host support NAT64, you can enable DNS64 support." -msgstr "Se l'host supporta NAT64, puoi abilitare il supporto DNS64." +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:529 msgid "Interfaces settings" @@ -575,16 +588,15 @@ msgid "MPTCP over VPN" msgstr "MPTCP su VPN" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:390 +#, fuzzy msgid "MPTCP over VPN settings" -msgstr "Impostazioni MPTCP su VPN" +msgstr "MPTCP su VPN" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391 msgid "" "MPTCP over VPN should be used only when Multipath TCP is blocked on a " "connection." msgstr "" -"MPTCP su VPN deve essere usato solo quando il Multipath TCP è bloccatp su " -"una connessione." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:563 msgid "MacVLAN" @@ -638,7 +650,7 @@ msgstr "Lo stato corrente di Multipath è" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:596 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:782 msgid "Multipath master already defined" -msgstr "Multipath principale già definito" +msgstr "Multipath master già definito" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:567 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:767 @@ -654,8 +666,9 @@ msgid "NONE" msgstr "NESSUNO" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:623 +#, fuzzy msgid "Network interface MAC address duplicated" -msgstr "Interfaccia di rete con MAC address duplicata" +msgstr "Interfaccia di rete duplicata" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:613 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:799 @@ -663,8 +676,9 @@ msgid "Network interface duplicated" msgstr "Interfaccia di rete duplicata" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:579 +#, fuzzy msgid "Network interface not in WAN firewall zone" -msgstr "Interfaccia di rete non in WAN firewall zone" +msgstr "Interfaccia di rete duplicata" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:899 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:901 @@ -685,17 +699,18 @@ msgid "No IPv6 access" msgstr "Nessun accesso IPv6" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:575 +#, fuzzy msgid "No Server http response after 1 second" -msgstr "Nessuna risposta dal server HTTP dopo 1 secondo" +msgstr "Nessuna risposta al ping del server dopo 1 secondo" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:571 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:771 msgid "No Server ping response after 1 second" -msgstr "Nessuna risposta al ping dal server dopo 1 secondo" +msgstr "Nessuna risposta al ping del server dopo 1 secondo" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:656 msgid "No WAN with multipath enabled:" -msgstr "Nessuna WAN con multipath abilitata:" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:26 msgid "No available backup on server." @@ -720,12 +735,14 @@ msgid "No output" msgstr "Nessun output" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:293 +#, fuzzy msgid "No public IP address detected in less than 1 second" -msgstr "Nessun indirizzo IP pubblico rilevato in meno di 1 secondo" +msgstr "Nessun indirizzo IP WAN rilevato in meno di 1 secondo" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:267 +#, fuzzy msgid "No server IP address, No public IP address" -msgstr "Nessun indirizzo IP del server, nessun indirizzo IP pubblico" +msgstr "Nessun indirizzo IP del server, nessun indirizzo IP WAN" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wanstatus.htm:280 msgid "No server defined" @@ -766,15 +783,13 @@ msgstr "Al cambio della procedura guidata" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:233 msgid "Only ShadowSocks is supported with server multiple IPs for now." -msgstr "Solo ShadowSocks è supportato con server multi IP per adesso." +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:877 msgid "" "Only one interface must be set as \"Master\", this should be the most stable " "interface." msgstr "" -"Solo un' interfaccia può essere impostata come \"Master\", deve essere " -"impostata l'interfaccia più stabile." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:135 msgid "Only one server can be master, else all servers are set as backup." @@ -784,7 +799,7 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:391 msgid "Only work with Shadowsocks as proxy." -msgstr "Funziona solo con Shadowsocks come proxy." +msgstr "" #: luci-app-openmptcprouter/root/usr/share/luci/menu.d/luci-app-openmptcprouter.json:3 msgid "OpenMPTCProuter" @@ -846,8 +861,9 @@ msgid "Prefer UMTS" msgstr "Preferisci UMTS" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:94 +#, fuzzy msgid "Primary server IP" -msgstr "IP principale del server" +msgstr "Indirizzo IP del server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:449 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:594 @@ -880,7 +896,7 @@ msgstr "Reindirizza tutte le porte dal server a questo router" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:999 msgid "Reset" -msgstr "Resetta" +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/backup.htm:32 msgid "Restore backup" @@ -908,8 +924,9 @@ msgid "Scaling governor" msgstr "Governatore in scala" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:95 +#, fuzzy msgid "Secondary server IP" -msgstr "IP secondario del server" +msgstr "Indirizzo IP del server" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:992 msgid "Select the device you want to base the interface on." @@ -951,7 +968,7 @@ msgstr "Tipo di servizio" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:401 msgid "Set VPN to use for MPTCP over VPN." -msgstr "Seleziona la VPN da utilizzare per MPTCP su VPN." +msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:658 #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:688 @@ -1208,7 +1225,7 @@ msgstr "" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:65 msgid "Wizard" -msgstr "Procedura guidata" +msgstr "Wizard" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:414 msgid "World" diff --git a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po index 7bcec9785..e8827e0ff 100644 --- a/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po +++ b/luci-app-openmptcprouter/po/zh_Hans/openmptcprouter.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-01-11 10:52+0000\n" +"PO-Revision-Date: 2021-06-02 09:51+0000\n" "Last-Translator: antrouter \n" "Language-Team: Chinese (Simplified) \n" @@ -113,7 +113,7 @@ msgstr "默认情况下,VPN用于非TCP的任何流量." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:221 msgid "" "By default proxy is used for any traffic that is TCP (and UDP for V2Ray)." -msgstr "默认情况下,仅代理TCP(如果选用V2Ray则代理TCP跟UDP还有ICMP任何)流量。" +msgstr "默认情况下,代理用于任何TCP(对于V2Ray是UDP)流量。" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:840 msgid "CHAP" @@ -946,7 +946,9 @@ msgstr "将服务器设置为主服务器" msgid "" "Set the default Proxy used for TCP when ShadowSocks is enabled, for TCP and " "UDP when V2Ray is enabled." -msgstr "启用ShadowSocks时用于默认代理TC流量,启用V2Ray时用于默认代理TCP和UDP还有ICMP任何流量." +msgstr "" +"设置启用ShadowSocks时用于TCP的默认代理,启用V2Ray时设置用于TCP和UDP的默认代" +"理." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:384 msgid "" @@ -1096,7 +1098,7 @@ msgstr "V2Ray没有运行" #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:254 msgid "V2Ray is used for TCP and UDP." -msgstr "V2Ray用于TCP和UDP代理." +msgstr "V2Ray用于TCP和UDP传输." #: luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm:251 msgid "V2Ray user" diff --git a/luci-app-openmptcprouter/root/bin/anonymous_config.sh b/luci-app-openmptcprouter/root/bin/anonymous_config.sh index 65c0813a2..674d01726 100755 --- a/luci-app-openmptcprouter/root/bin/anonymous_config.sh +++ b/luci-app-openmptcprouter/root/bin/anonymous_config.sh @@ -21,6 +21,5 @@ uci show | \ -e "/vpn\.key=/s/......$/xxxxxx'/" \ -e "/vps\.key=/s/......$/xxxxxx'/" \ -e "/wgkey=/s/......$/xxxxxx'/" \ - -e "/key=/s/......$/xxxxxx'/" \ -e "/ula_prefix=2/s/=.........../='xxxxxxxxxxx/" \ -e "/token=/s/............$/xxxxxx'/" \ No newline at end of file diff --git a/luci-app-openmptcprouter/root/bin/omr-modemmanager b/luci-app-openmptcprouter/root/bin/omr-modemmanager index 57115c2e0..b7dc840ba 100755 --- a/luci-app-openmptcprouter/root/bin/omr-modemmanager +++ b/luci-app-openmptcprouter/root/bin/omr-modemmanager @@ -10,7 +10,7 @@ timeout 1 mmcli -L | while read MODEM; do OPERATOR=$(echo "$MODEM_INFO" | grep 'modem.3gpp.operator-name ' | awk -F": " '{print $2}') NUMBER=$(echo "$MODEM_INFO" | grep 'modem.generic.own-numbders.value[1]' | awk -F": " '{print $2}') STATE=$(echo "$MODEM_INFO" | grep 'modem.generic.state ' | awk -F": " '{print $2}') - TYPE=$(echo "$MODEM_INFO" | grep 'modem.generic.access-technologies.value\[1\]' | awk -F": " '{print $2}') + TYPE=$(echo "$MODEM_INFO" | grep 'modem.generic.access-technologies.values[1]' | awk -F": " '{print $2}') [ -z "$INFO" ] && echo $PERCENT [ "$INFO" = "all" ] && echo "$PERCENT;$OPERATOR;$NUMBER;$STATE;$TYPE" exit diff --git a/luci-app-openmptcprouter/root/bin/omr-mptcp-intf b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf index 8fac4468b..d2a74b245 100755 --- a/luci-app-openmptcprouter/root/bin/omr-mptcp-intf +++ b/luci-app-openmptcprouter/root/bin/omr-mptcp-intf @@ -12,17 +12,9 @@ get_mptcp_from_server() { get_mptcp() { serverip=$1 if [ "$(echo $serverip | grep :)" ]; then - if [ -f /proc/sys/net/mptcp/enabled ]; then - support="$(mptcpize run curl -s -k -6 -m ${timeout} --interface $intf https://[$serverip]:$serverport/mptcpsupport)" - else - support="$(curl -s -k -6 -m ${timeout} --interface $intf https://[$serverip]:$serverport/mptcpsupport)" - fi + support="$(curl -s -k -6 -m ${timeout} --interface $intf https://[$serverip]:$serverport/mptcpsupport)" else - if [ -f /proc/sys/net/mptcp/enabled ]; then - support="$(mptcpize run curl -s -k -4 -m ${timeout} --interface $intf https://$serverip:$serverport/mptcpsupport)" - else - support="$(curl -s -k -4 -m ${timeout} --interface $intf https://$serverip:$serverport/mptcpsupport)" - fi + support="$(curl -s -k -4 -m ${timeout} --interface $intf https://$serverip:$serverport/mptcpsupport)" fi [ -n "$support" ] && { support=$(echo $support | jsonfilter -e '@.mptcp') @@ -64,10 +56,8 @@ get_mptcp_from_website6() { support="" config_load openmptcprouter config_foreach get_mptcp_from_server server -if [ ! -f /proc/sys/net/mptcp/enabled ] && [ -z "$support" ]; then - [ -n "$(ip -4 a show dev $intf)" ] && get_mptcp_from_website - [ -n "$(ip -6 a show dev $intf)" ] && get_mptcp_from_website6 -fi +[ -z "$support" ] && [ -n "$(ip -4 a show dev $intf)" ] && get_mptcp_from_website +[ -z "$support" ] && [ -n "$(ip -6 a show dev $intf)" ] && get_mptcp_from_website6 if [ "$support" = "working" ]; then echo "MPTCP enabled" elif [ "$support" = "not working" ]; then diff --git a/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename b/luci-app-openmptcprouter/root/etc/hotplug.d/net/99-omr-rename old mode 100755 new mode 100644 diff --git a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter index 928feb60f..9c547bff8 100755 --- a/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/init.d/openmptcprouter @@ -6,8 +6,6 @@ START=5 USE_PROCD=1 -. /lib/functions/network.sh - omr_intf_del() { [ -z "$1" ] && return uci -q delete openmptcprouter.$1 @@ -20,15 +18,12 @@ omr_intf_check() { omr_intf_set() { local device local ifname - network_get_device ifname $1 - [ -z "$ifname" ] && network_get_physdev ifname $1 - [ -z "$ifname" ] && config_get ifname "$1" device - [ -z "$ifname" ] && config_get ifname "$1" ifname - [ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') - #config_get devicename "$1" _modem_device - devicename=${ifname} + config_get ifname "$1" ifname + config_get device "$1" device config_get type "$1" type + [ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') + if [ "$type" != "macvlan" ] && [ -n "$ifname" ] && [ -f /sys/class/net/${ifname}/device/uevent ]; then devicepath=$(readlink -f /sys/class/net/${ifname}) if [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" = "" ]; then @@ -39,11 +34,11 @@ omr_intf_set() { uci -q set network.$1.modalias="$(cat /sys/class/net/${ifname}/device/uevent | grep MODALIAS | cut -d '=' -f2 | tr -d '\n')-$mac" uci -q set network.$1.product="$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT | cut -d '=' -f2 | tr -d '\n')" elif [ -n "$devicepath" ] && ([ "$(echo ${devicepath} | grep virtual)" != "" ] || [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" = "" ] || [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" != "" ] || [ "$(cat /sys/class/net/${ifname}tmp/device/uevent)" != "" ]); then - #uci -q delete network.$1.device + uci -q delete network.$1.device uci -q delete network.$1.modalias uci -q delete network.$1.product fi - elif [ "$type" != "macvlan" ] && [ -n "$devicename" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ]; then + elif [ "$type" != "macvlan" ] && [ -n "$device" ] && [ -f /sys/bus/usb-serial/devices/${devicename}/device/uevent ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ]; then mac="" if [ -f /sys/class/net/${ifname}/address ]; then mac="$(cat /sys/class/net/${ifname}/address | tr -d '\n')" @@ -61,10 +56,7 @@ omr_set_settings() { local ifname local multipath config_get multipath "$1" multipath - network_get_device ifname $1 - [ -z "$ifname" ] && network_get_physdev ifname $1 - [ -z "$ifname" ] && config_get ifname "$1" device - [ -z "$ifname" ] && config_get ifname "$1" ifname + config_get ifname "$1" ifname config_get device "$1" device config_get proto "$1" proto config_get type "$1" type @@ -84,8 +76,7 @@ omr_set_settings() { [ -z "$addlatency" ] && addlatency=0 devicename=$(echo "$device" | cut -d'/' -f3) - ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') - [ -z "$ifname" ] && config_get ifname "$1" ifname + [ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') [ -n "$(echo $ifname | grep '@')" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["device"]') if [ -n "$ifname" ]; then @@ -153,13 +144,15 @@ start_service() { del_list dhcp.@dnsmasq[0].server='127.0.0.1#5353' add_list dhcp.@dnsmasq[0].server='114.114.114.114' set dhcp.@dnsmasq[0].dnsseccheckunsigned='0' - delete dhcp.@dnsmasq[0].dnssec + delete dhcp.@dnsmasq[0].dnssec='1' commit dhcp EOF elif [ "$(uci -q get openmptcprouter.settings.country)" = "world" ] && [ -n "$(uci -q get dhcp.@dnsmasq[0].server | grep '114.114.114.114')" ]; then uci -q batch <<-EOF > /dev/null add_list dhcp.@dnsmasq[0].server='127.0.0.1#5353' del_list dhcp.@dnsmasq[0].server='114.114.114.114' + set dhcp.@dnsmasq[0].dnsseccheckunsigned='1' + set dhcp.@dnsmasq[0].dnssec='1' commit dhcp EOF fi diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter index f8ac6eca0..effce068c 100755 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter +++ b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter @@ -11,7 +11,7 @@ local jsonc = require "luci.jsonc" function interface_from_device(dev) for _, iface in ipairs(net:get_networks()) do local ifacen = iface:name() - local ifacename = ucic:get("network",ifacen,"device") + local ifacename = ucic:get("network",ifacen,"ifname") if ifacename == dev then return ifacen end @@ -72,7 +72,7 @@ function add_interface(add_interface_ifname) end ucic:set("network","wan" .. i,"interface") - ucic:set("network","wan" .. i,"device",defif) + ucic:set("network","wan" .. i,"ifname",defif) ucic:set("network","wan" .. i,"proto","static") if ointf ~= "" then ucic:set("network","wan" .. i,"type","macvlan") @@ -128,7 +128,7 @@ end function remove_interface(intf) -- Remove existing interface - local defif = ucic:get("network",intf,"device") + local defif = ucic:get("network",intf,"ifname") ucic:delete("network",intf) ucic:delete("network",intf .. "_dev") ucic:save("network") @@ -170,7 +170,7 @@ function set_interface(intf,proto,ipaddr,netmask,gateway,sqmenabled,downloadspee if not ucic:get("sqm",intf) ~= "" then local defif = get_device(intf) if defif == "" then - defif = ucic:get("network",intf,"device") or "" + defif = ucic:get("network",intf,"ifname") or "" end ucic:set("sqm",intf,"queue") ucic:set("sqm",intf,"interface",defif) @@ -268,7 +268,7 @@ function default_vpn(default_vpn) ucic:set("network","omrvpn","proto","dhcp") end if vpn_intf ~= "" then - ucic:set("network","omrvpn","device",vpn_intf) + ucic:set("network","omrvpn","ifname",vpn_intf) ucic:save("network") ucic:commit("network") end @@ -824,7 +824,7 @@ function interfaces_status() if mArray.openmptcprouter["external_check"] ~= false then mArray.openmptcprouter["proxy_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " " .. check_ipv4_website)) if mArray.openmptcprouter["proxy_addr"] == "" then - mArray.openmptcprouter["proxy_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " ifconfig.me")) + mArray.openmptcprouter["proxy_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " ifconfig.co")) end --mArray.openmptcprouter["ss_addr6"] = sys.exec("curl -s -6 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 3 http://ipv6.openmptcprouter.com") end @@ -931,11 +931,6 @@ function interfaces_status() else mArray.openmptcprouter["vps_admin"] = false mArray.openmptcprouter["vps_admin_error_msg"] = "No result" - uci:set("openmptcprouter",s[".name"],"admin_error","1") - mArray.openmptcprouter["vps_admin_error"] = true - uci:delete("openmptcprouter",s[".name"],"token") - uci:save("openmptcprouter",s[".name"]) - uci:commit("openmptcprouter",s[".name"]) end else mArray.openmptcprouter["vps_admin"] = false @@ -966,10 +961,7 @@ function interfaces_status() if string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?glorytun(-udp)?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?dsvpn?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?mlvpn?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?openvpn?$'"), "%d+") then mArray.openmptcprouter["tun_service"] = true mArray.openmptcprouter["tun_ip"] = get_ip("omrvpn") - local tun_dev = uci:get("network","omrvpn","device") - if tun_dev == "" then - tun_dev = uci:get("network","omrvpn","ifname") - end + local tun_dev = uci:get("network","omrvpn","ifname") if tun_dev == "" then tun_dev = get_device("omrvpn") end @@ -1027,7 +1019,7 @@ function interfaces_status() mArray.openmptcprouter["multi_vpn"] = true end end - + -- check Shadowsocks is running mArray.openmptcprouter["shadowsocks_service"] = false if string.find(sys.exec("/usr/bin/pgrep ss-redir"), "%d+") then @@ -1035,16 +1027,10 @@ function interfaces_status() end mArray.openmptcprouter["shadowsocks_enabled"] = true - local ss_server = "1" - ucic:foreach("shadowsocks-libev", "server", function(s) - if uci:get("shadowsocks-libev",s[".name"],"disabled") == "0" then - ss_server = "0" - end - end) + local ss_server = uci:get("shadowsocks-libev","sss0","disabled") or "0" if ss_server == "1" then mArray.openmptcprouter["shadowsocks_enabled"] = false end - -- check V2Ray is running mArray.openmptcprouter["v2ray_service"] = false if string.find(sys.exec("/usr/bin/pgrep v2ray"), "%d+") then @@ -1153,14 +1139,14 @@ function interfaces_status() local ifname = get_device(interface) if ifname == "" or ifname == nil then - ifname = section["device"] or "" + ifname = section["ifname"] or "" end --if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then --ifname = get_device(interface:sub(5)) --end duplicateif = false - if ifname ~= "" and ifname ~= nil and not (section["device"] ~= nil and section["device"]:match("^@.*")) and (proto == "static" or proto == "dhcp") then + if ifname ~= "" and ifname ~= nil and not (section["ifname"] ~= nil and section["ifname"]:match("^@.*")) then if allintf[ifname] then connectivity = "ERROR" duplicateif = true @@ -1170,7 +1156,7 @@ function interfaces_status() end duplicatemac = false - if mac ~= "" and mac ~= nil and not (section["device"] ~= nil and section["device"]:match("^@.*")) and not (ifname ~= nil and ifname:match("%.")) then + if mac ~= "" and mac ~= nil and not (section["ifname"] ~= nil and section["ifname"]:match("^@.*")) then if allmac[mac] then connectivity = "ERROR" duplicatemac = true @@ -1385,8 +1371,7 @@ function interfaces_status() if adminport == "" then adminport = "65500" end - -- httping disable for now, with -l (ssl) timeout is ignored - if false and server_ping == "UP" and uci:get("openmptcprouter", "settings", "disableserverhttptest") ~= "1" and ipaddr ~= "" and adminport ~= "" then + if server_ping == "UP" and uci:get("openmptcprouter", "settings", "disableserverhttptest") ~= "1" and ipaddr ~= "" and adminport ~= "" then local server_http_result = "" local server_http_test = "" if mArray.openmptcprouter["service_addr_ip"] ~= "" then diff --git a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter.bak b/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter.bak deleted file mode 100644 index 9981f0a38..000000000 --- a/luci-app-openmptcprouter/root/usr/libexec/rpcd/openmptcprouter.bak +++ /dev/null @@ -1,1870 +0,0 @@ -#!/usr/bin/env lua - -local math = require "math" -local sys = require "luci.sys" -local json = require("luci.json") -local fs = require("nixio.fs") -local net = require "luci.model.network".init() -local ucic = require "luci.model.uci".cursor() -local jsonc = require "luci.jsonc" - -function interface_from_device(dev) - for _, iface in ipairs(net:get_networks()) do - local ifacen = iface:name() - local ifacename = ucic:get("network",ifacen,"device") - if ifacename == dev then - return ifacen - end - end - return "" -end - -function add_server(add_server_name) - ucic:set("openmptcprouter",add_server_name:gsub("[^%w_]+","_"),"server") - ucic:save("openmptcprouter") - ucic:commit("openmptcprouter") -end - -function remove_server(serverdel) - -- Remove existing server - ucic:foreach("network", "interface", function(s) - local sectionname = s[".name"] - ucic:delete("network","server_" .. serverdel .. "_" .. sectionname .. "_route") - end) - ucic:delete("network","server_" .. serverdel .. "_default_route") - ucic:delete("openmptcprouter",serverdel) - ucic:save("openmptcprouter") - ucic:commit("openmptcprouter") - ucic:save("network") - ucic:commit("network") -end - -function add_interface(add_interface_ifname) - -- Add new interface - local i = 1 - local multipath_master = false - ucic:foreach("network", "interface", function(s) - local sectionname = s[".name"] - if sectionname:match("^wan(%d+)$") then - i = i + 1 - end - if ucic:get("network",sectionname,"multipath") == "master" then - multipath_master = true - end - end) - local defif = "eth0" - if add_interface_ifname == "" then - local defif1 = ucic:get("network","wan1_dev","ifname") or "" - if defif1 ~= "" then - defif = defif1 - end - else - defif = add_interface_ifname - end - - local ointf = interface_from_device(defif) or "" - local wanif = defif - if ointf ~= "" then - if ucic:get("network",ointf,"type") == "" then - ucic:set("network",ointf,"type","macvlan") - end - wanif = "wan" .. i - end - - ucic:set("network","wan" .. i,"interface") - ucic:set("network","wan" .. i,"device",defif) - ucic:set("network","wan" .. i,"proto","static") - if ointf ~= "" then - ucic:set("network","wan" .. i,"type","macvlan") - end - ucic:set("network","wan" .. i,"ip4table","wan") - if multipath_master then - ucic:set("network","wan" .. i,"multipath","on") - ucic:set("openmptcprouter","wan" .. i,"multipath","on") - else - ucic:set("network","wan" .. i,"multipath","master") - ucic:set("openmptcprouter","wan" .. i,"multipath","master") - end - ucic:set("network","wan" .. i,"defaultroute","0") - ucic:reorder("network","wan" .. i, i + 2) - ucic:save("network") - ucic:commit("network") - - ucic:set("qos","wan" .. i,"interface") - ucic:set("qos","wan" .. i,"classgroup","Default") - ucic:set("qos","wan" .. i,"enabled","0") - ucic:set("qos","wan" .. i,"upload","4000") - ucic:set("qos","wan" .. i,"download","100000") - ucic:save("qos") - ucic:commit("qos") - - ucic:set("sqm","wan" .. i,"queue") - if ointf ~= "" then - ucic:set("sqm","wan" .. i,"interface","wan" .. i) - else - ucic:set("sqm","wan" .. i,"interface",defif) - end - ucic:set("sqm","wan" .. i,"qdisc","fq_codel") - ucic:set("sqm","wan" .. i,"script","simple.qos") - ucic:set("sqm","wan" .. i,"qdisc_advanced","0") - ucic:set("sqm","wan" .. i,"linklayer","none") - ucic:set("sqm","wan" .. i,"enabled","0") - ucic:set("sqm","wan" .. i,"debug_logging","0") - ucic:set("sqm","wan" .. i,"verbosity","5") - ucic:set("sqm","wan" .. i,"download","0") - ucic:set("sqm","wan" .. i,"upload","0") - ucic:save("sqm") - ucic:commit("sqm") - - sys.exec("uci -q add_list vnstat.@vnstat[-1].interface=" .. wanif) - sys.exec("uci -q commit vnstat") - - -- Dirty way to add new interface to firewall... - sys.exec("uci -q add_list firewall.@zone[1].network=wan" .. i) - sys.exec("uci -q commit firewall") - - sys.exec("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") -end - -function remove_interface(intf) - -- Remove existing interface - local defif = ucic:get("network",intf,"device") - ucic:delete("network",intf) - ucic:delete("network",intf .. "_dev") - ucic:save("network") - ucic:commit("network") - ucic:delete("sqm",intf) - ucic:save("sqm") - ucic:commit("sqm") - ucic:delete("qos",intf) - ucic:save("qos") - ucic:commit("qos") - if defif ~= nil and defif ~= "" then - sys.exec("uci -q del_list vnstat.@vnstat[-1].interface=" .. defif) - end - sys.exec("uci -q commit vnstat") - sys.exec("uci -q del_list firewall.@zone[1].network=" .. intf) - sys.exec("uci -q commit firewall") -end - -function set_interface(intf,proto,ipaddr,netmask,gateway,sqmenabled,downloadspeed,uploadspeed) - -- Set interfaces settings - if proto ~= "other" then - ucic:set("network",intf,"proto",proto) - end - ucic:set("network",intf,"ipaddr",ipaddr) - ucic:set("network",intf,"netmask",netmask) - ucic:set("network",intf,"gateway",gateway) - - ucic:delete("openmptcprouter",intf,"lc") - ucic:save("openmptcprouter") - - if not ucic:get("qos",intf) ~= "" then - ucic:set("qos",intf,"interface") - ucic:set("qos",intf,"classgroup","Default") - ucic:set("qos",intf,"enabled","0") - ucic:set("qos",intf,"upload","4000") - ucic:set("qos",intf,"download","100000") - end - - if not ucic:get("sqm",intf) ~= "" then - local defif = get_device(intf) - if defif == "" then - defif = ucic:get("network",intf,"device") or "" - end - ucic:set("sqm",intf,"queue") - ucic:set("sqm",intf,"interface",defif) - ucic:set("sqm",intf,"qdisc","fq_codel") - ucic:set("sqm",intf,"script","simple.qos") - ucic:set("sqm",intf,"qdisc_advanced","0") - ucic:set("sqm",intf,"linklayer","none") - ucic:set("sqm",intf,"enabled","0") - ucic:set("sqm",intf,"debug_logging","0") - ucic:set("sqm",intf,"verbosity","5") - ucic:set("sqm",intf,"download","0") - ucic:set("sqm",intf,"upload","0") - end - - if downloadspeed ~= "0" and uploadspeed ~= "0" then - ucic:set("network",intf,"downloadspeed",downloadspeed) - ucic:set("network",intf,"uploadspeed",uploadspeed) - ucic:set("sqm",intf,"download",math.ceil(downloadspeed*95/100)) - ucic:set("sqm",intf,"upload",math.ceil(uploadspeed*95/100)) - if sqmenabled == "1" then - ucic:set("sqm",intf,"enabled","1") - else - ucic:set("sqm",intf,"enabled","0") - end - ucic:set("qos",intf,"download",math.ceil(downloadspeed*95/100)) - ucic:set("qos",intf,"upload",math.ceil(uploadspeed*95/100)) - if sqmenabled == "1" then - ucic:set("qos",intf,"enabled","1") - else - ucic:set("qos",intf,"enabled","0") - end - else - ucic:set("sqm",intf,"download","0") - ucic:set("sqm",intf,"upload","0") - ucic:set("sqm",intf,"enabled","0") - ucic:set("qos",intf,"download","0") - ucic:set("qos",intf,"upload","0") - ucic:set("qos",intf,"enabled","0") - end - - -- Disable multipath on LAN, VPN and loopback - ucic:set("network","loopback","multipath","off") - ucic:set("network","lan","multipath","off") - ucic:set("network","omr6in4","multipath","off") - ucic:set("network","omrvpn","multipath","off") - - ucic:save("sqm") - ucic:commit("sqm") - ucic:save("qos") - ucic:commit("qos") - ucic:save("network") - ucic:commit("network") - ucic:save("openmptcprouter") - ucic:commit("openmptcprouter") -end - -function default_vpn(default_vpn) - -- Get VPN set by default - local vpn_port = "" - local vpn_intf = "" - if default_vpn:match("^glorytun.*") then - vpn_port = 65001 - vpn_intf = "tun0" - --ucic:set("network","omrvpn","proto","dhcp") - ucic:set("network","omrvpn","proto","none") - if default_vpn == "glorytun_udp" then - ucic:set("glorytun","vpn","proto","udp") - ucic:set("glorytun","vpn","localip","10.255.254.2") - ucic:set("glorytun","vpn","remoteip","10.255.254.1") - ucic:set("network","omr6in4","ipaddr","10.255.254.2") - ucic:set("network","omr6in4","peeraddr","10.255.254.1") - else - ucic:set("glorytun","vpn","proto","tcp") - ucic:set("glorytun","vpn","localip","10.255.255.2") - ucic:set("glorytun","vpn","remoteip","10.255.255.1") - ucic:set("network","omr6in4","ipaddr","10.255.255.2") - ucic:set("network","omr6in4","peeraddr","10.255.255.1") - end - elseif default_vpn == "dsvpn" then - vpn_port = 65011 - vpn_intf = "tun0" - --ucic:set("network","omrvpn","proto","dhcp") - ucic:set("network","omrvpn","proto","none") - ucic:set("dsvpn","vpn","localip","10.255.251.2") - ucic:set("dsvpn","vpn","remoteip","10.255.251.1") - ucic:set("network","omr6in4","ipaddr","10.255.251.2") - ucic:set("network","omr6in4","peeraddr","10.255.251.1") - elseif default_vpn == "mlvpn" then - vpn_port = 65201 - vpn_intf = "mlvpn0" - ucic:set("network","omrvpn","proto","dhcp") - elseif default_vpn == "openvpn" then - vpn_port = 65301 - vpn_intf = "tun0" - ucic:set("network","omrvpn","proto","dhcp") - end - if vpn_intf ~= "" then - ucic:set("network","omrvpn","device",vpn_intf) - ucic:save("network") - ucic:commit("network") - end - -- Set Glorytun settings - if default_vpn:match("^glorytun.*") then - ucic:set("glorytun","vpn","enable",1) - else - ucic:set("glorytun","vpn","enable",0) - end - -- Set A Dead Simple VPN settings - if default_vpn == "dsvpn" then - ucic:set("dsvpn","vpn","enable",1) - else - ucic:set("dsvpn","vpn","enable",0) - end - -- Set MLVPN settings - if default_vpn == "mlvpn" then - ucic:set("mlvpn","general","enable",1) - ucic:set("network","omrvpn","proto","dhcp") - else - ucic:set("mlvpn","general","enable",0) - end - if default_vpn == "openvpn" then - ucic:set("openvpn","omr","enabled",1) - ucic:set("network","omrvpn","proto","dhcp") - else - ucic:set("openvpn","omr","enabled",0) - end - ucic:set("openmptcprouter","settings","vpn",default_vpn) - ucic:save("glorytun") - ucic:commit("glorytun") - ucic:save("mlvpn") - ucic:commit("mlvpn") - ucic:save("dsvpn") - ucic:commit("dsvpn") - ucic:save("openvpn") - ucic:commit("openvpn") - ucic:save("openmptcprouter") - ucic:commit("openmptcprouter") - ucic:save("network") - ucic:commit("network") - -end - -function server_settings(server,server_ip,openmptcprouter_vps_key) - -- OpenMPTCProuter VPS - ucic:set("openmptcprouter",server,"server") - ucic:set("openmptcprouter",server,"username","openmptcprouter") - ucic:set("openmptcprouter",server,"password",openmptcprouter_vps_key) - ucic:set("openmptcprouter",server,"ip",server_ip) - ucic:set("openmptcprouter",server,"port","65500") - ucic:save("openmptcprouter") - if ucic:get("openmptcprouter",server,"master") == "1" then - ucic:set("shadowsocks-libev","sss0","server",server_ip) - ucic:set("glorytun","vpn","host",server_ip) - ucic:set("dsvpn","vpn","host",server_ip) - ucic:set("mlvpn","general","host",server_ip) - sys.exec("uci -q del openvpn.omr.remote") - sys.exec("uci -q add_list openvpn.omr.remote=" .. server_ip) - ucic:set("qos","serverin","srchost",server_ip) - ucic:set("qos","serverout","dsthost",server_ip) - ucic:set("v2ray","omrout","s_vmess_address",server_ip) - ucic:set("v2ray","omrout","s_vless_address",server_ip) - ucic:save("qos") - ucic:commit("qos") - ucic:save("mlvpn") - ucic:commit("mlvpn") - ucic:save("dsvpn") - ucic:commit("dsvpn") - ucic:save("v2ray") - ucic:commit("v2ray") - ucic:save("glorytun") - ucic:commit("glorytun") - ucic:save("shadowsocks-libev") - ucic:commit("shadowsocks-libev") - end -end - -function set_shadowsocks(shadowsocks_key) - -- Set ShadowSocks settings - ucic:set("shadowsocks-libev","sss0","key",shadowsocks_key) - ucic:save("shadowsocks-libev") - ucic:commit("shadowsocks-libev") -end - -function disable_shadowsocks(shadowsocks_disable) - -- Set ShadowSocks settings - ucic:set("shadowsocks-libev","sss0","disabled",shadowsocks_disable) - ucic:save("shadowsocks-libev") - ucic:commit("shadowsocks-libev") -end - -function set_glorytun(glorytun_key) - ucic:set("glorytun","vpn","port","65001") - ucic:set("glorytun","vpn","key",glorytun_key) - ucic:set("glorytun","vpn","mptcp",1) - ucic:set("glorytun","vpn","chacha20",1) - ucic:save("glorytun") - ucic:commit("glorytun") -end - -function set_dsvpn(dsvpn_key) - ucic:set("dsvpn","vpn","port","65011") - ucic:set("dsvpn","vpn","key",dsvpn_key) - ucic:save("glorytun") - ucic:commit("glorytun") -end - -function set_mlvpn(mlvpn_password) - -- Set MLVPN settings - local mlvpn_password = luci.http.formvalue("mlvpn_password") - ucic:set("mlvpn","general","password",mlvpn_password) - ucic:set("mlvpn","general","firstport","65201") - ucic:set("mlvpn","general","interface_name","mlvpn0") - ucic:save("mlvpn") - ucic:commit("mlvpn") -end - -function set_openvpn(openvpn_key) - -- Set OpenVPN settings - local openvpn_key_path = "/etc/luci-uploads/openvpn.key" - local fp - luci.http.setfilehandler( - function(meta, chunk, eof) - if not fp and meta and meta.name == "openvpn_key" then - fp = io.open(openvpn_key_path, "w") - end - if fp and chunk then - fp:write(chunk) - end - if fp and eof then - fp:close() - end - end) - ucic:set("openvpn","omr","secret",openvpn_key_path) - ucic:save("openvpn") - ucic:commit("openvpn") -end - -function restart_all() - -- Restart all - sys.exec("/etc/init.d/macvlan restart >/dev/null 2>/dev/null") - sys.exec("(env -i /bin/ubus call network reload) >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/omr-tracker stop >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/mptcp restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/glorytun restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/mlvpn restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/openvpn restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/openvpnbonding restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/dsvpn restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/omr-tracker start >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/mptcpovervpn restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/vnstat restart >/dev/null 2>/dev/null") - sys.exec("/etc/init.d/v2ray restart >/dev/null 2>/dev/null") -end - -function redirectports(server,redirect_ports) - ucic:set("openmptcprouter",server,"redirect_ports",value) - ucic:commit("openmptcprouter") -end - -function tcpkeepalivetime(tcp_keepalive_time) - -- Set tcp_keepalive_time - sys.exec("sysctl -w net.ipv4.tcp_keepalive_time=%s" % tcp_keepalive_time) - sys.exec("sed -i 's:^net.ipv4.tcp_keepalive_time=[0-9]*:net.ipv4.tcp_keepalive_time=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_keepalive_time) -end - -function tcpfintimeout(tcp_fin_timeout) - -- Set tcp_fin_timeout - sys.exec("sysctl -w net.ipv4.tcp_fin_timeout=%s" % tcp_fin_timeout) - sys.exec("sed -i 's:^net.ipv4.tcp_fin_timeout=[0-9]*:net.ipv4.tcp_fin_timeout=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_fin_timeout) -end - -function tcpsynretries(tcp_syn_retries) - -- Set tcp_syn_retries - sys.exec("sysctl -w net.ipv4.tcp_syn_retries=%s" % tcp_syn_retries) - sys.exec("sed -i 's:^net.ipv4.tcp_syn_retries=[0-9]*:net.ipv4.tcp_syn_retries=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_syn_retries) -end - -function tcpfastopen(tcp_fastopen) - -- Set tcp_fastopen - sys.exec("sysctl -w net.ipv4.tcp_fastopen=%s" % tcp_fastopen) - sys.exec("sed -i 's:^net.ipv4.tcp_fastopen=[0-3]*:net.ipv4.tcp_fastopen=%s:' /etc/sysctl.d/zzz_openmptcprouter.conf" % tcp_fastopen) -end - -function disableipv6(disable_ipv6) - -- Disable IPv6 - ucic:set("openmptcprouter","settings","disable_ipv6",disable_ipv6) - ucic:save("openmptcprouter") - ucic:commit("openmptcprouter") - sys.exec("/etc/init.d/omr-6in4 restart >/dev/null 2>/dev/null") -end - -function externalcheck(externalcheck) - -- Enable/disable external check - ucic:set("openmptcprouter","settings","external_check",externalcheck) - ucic:commit("openmptcprouter") -end - -function savevnstat(savevnstat) - -- Enable/disable save vnstat - sys.exec("uci -q set vnstat.@vnstat[0].backup=%s" % savevnstat) - ucic:commit("vnstat") -end - -function disablefastopen(disablefastopen) - -- Enable/disable fast open - if disablefastopen == "0" then - fastopen = "1" - else - fastopen = "0" - end - ucic:foreach("shadowsocks-libev", "ss_redir", function (section) - ucic:set("shadowsocks-libev",section[".name"],"fast_open",fastopen) - end) - ucic:foreach("shadowsocks-libev", "ss_local", function (section) - ucic:set("shadowsocks-libev",section[".name"],"fast_open",fastopen) - end) -end - -function enableobfs(obfs,obfs_plugin,obfs_type) - -- Enable/disable obfs - ucic:foreach("shadowsocks-libev", "server", function (section) - ucic:set("shadowsocks-libev",section[".name"],"obfs",obfs) - ucic:set("shadowsocks-libev",section[".name"],"obfs_plugin",obfs_plugin) - ucic:set("shadowsocks-libev",section[".name"],"obfs_type",obfs_type) - end) - ucic:save("shadowsocks-libev") - ucic:commit("shadowsocks-libev") -end - -function setmastertype(master_type) - -- Set master to dynamic or static - ucic:set("openmptcprouter","settings","master",master_type) - ucic:commit("openmptcprouter") -end - -function cpuscalingmin(scaling_min_freq) - -- Set CPU scaling minimum frequency - ucic:set("openmptcprouter","settings","scaling_min_freq",scaling_min_freq) - ucic:save("openmptcprouter") - ucic:commit("openmptcprouter") -end - -function cpuscalingmax(scaling_max_freq) - -- Set CPU scaling maximum frequency - ucic:set("openmptcprouter","settings","scaling_max_freq",scaling_max_freq) - ucic:save("openmptcprouter") - ucic:commit("openmptcprouter") -end - -function cpuscalinggovernor(scaling_governor) - -- Set CPU governor - ucic:set("openmptcprouter","settings","scaling_governor",scaling_governor) - ucic:save("openmptcprouter") - ucic:commit("openmptcprouter") -end - -function update_vps() - -- Update VPS - local vpsgettoken = sys.exec("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null") - ucic:foreach("openmptcprouter", "server", function(section) - local servername = section[".name"] - local serverips = section["ip"] - local serverip = serverips[1] - local adminport = section["port"] or "65500" - local token = section["token"] or "" - if token ~= "" then - local updatevps = sys.exec('curl -4 --max-time 20 -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ":" .. adminport .. "/update") - end - end) - local vpsgettoken = sys.exec("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null") -end - -function get_rootfs() - local rootfs = {} - rootfs['format'] = luci.util.trim(sys.exec("mount | awk 'NR==1{print $5}'")) - return rootfs -end - -function get_efi() - local efi = {} - efi['efi_enabled'] = nixio.fs.access("/sys/firmware/efi") - return efi -end - -function get_ip(interface) - local ut = require "luci.util" - local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) - local ip = "" - if dump and dump['ipv4-address'] then - local _, ipv4address - for _, ipv4address in ipairs(dump['ipv4-address']) do - ip = dump['ipv4-address'][_].address - end - end - if ip == "" then - local dump = require("luci.util").ubus("network.interface.%s_4" % interface, "status", {}) - if dump and dump['ipv4-address'] then - local _, ipv4address - for _, ipv4address in ipairs(dump['ipv4-address']) do - ip = dump['ipv4-address'][_].address - end - end - end - if ip == "" then - local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) - if dump and dump['l3_device'] then - local ifname = dump['l3_device'] - ip = ut.trim(sys.exec("ip -4 -br addr ls dev %s | awk -F'[ /]+' '{print $3}'" % ifname)) - end - end - return ip -end - -function get_ip6(interface) - local ut = require "luci.util" - local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) - local ip = "" - if dump and dump['ipv6-address'] then - local _, ipv6address - for _, ipv6address in ipairs(dump['ipv6-address']) do - ip = dump['ipv6-address'][_].address - end - end - if ip == "" then - local dump = require("luci.util").ubus("network.interface.%s_6" % interface, "status", {}) - if dump and dump['ipv6-address'] then - local _, ipv6address - for _, ipv6address in ipairs(dump['ipv6-address']) do - ip = dump['ipv6-address'][_].address - end - end - end - if ip == "" then - local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) - if dump and dump['l3_device'] then - local ifname = dump['l3_device'] - ip = ut.trim(sys.exec("ip -6 -br addr ls dev %s | awk -F'[ /]+' '{print $3}'" % ifname)) - end - end - return ip -end - -function get_device(interface) - local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) - if dump then - return dump['l3_device'] - else - return "" - end -end - -function get_gateway(interface) - local gateway = "" - local dump = nil - - dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) - - if dump and dump.route then - local _, route - for _, route in ipairs(dump.route) do - if dump.route[_].target == "0.0.0.0" then - gateway = dump.route[_].nexthop - end - end - end - if gateway == "" then - if dump and dump.inactive and dump.inactive.route then - local _, route - for _, route in ipairs(dump.inactive.route) do - if dump.inactive.route[_].target == "0.0.0.0" then - gateway = dump.inactive.route[_].nexthop - end - end - end - end - - if gateway == "" then - dump = require("luci.util").ubus("network.interface.%s_4" % interface, "status", {}) - - if dump and dump.route then - local _, route - for _, route in ipairs(dump.route) do - if dump.route[_].target == "0.0.0.0" then - gateway = dump.route[_].nexthop - end - end - end - if gateway == "" then - if dump and dump.inactive and dump.inactive.route then - local _, route - for _, route in ipairs(dump.inactive.route) do - if dump.inactive.route[_].target == "0.0.0.0" then - gateway = dump.inactive.route[_].nexthop - end - end - end - end - end - return gateway -end - -function get_gateway6(interface) - local gateway = "" - local dump = nil - - dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {}) - - if dump and dump.route then - local _, route - for _, route in ipairs(dump.route) do - if dump.route[_].target == "::" then - gateway = dump.route[_].nexthop - end - end - end - if gateway == "" then - if dump and dump.inactive and dump.inactive.route then - local _, route - for _, route in ipairs(dump.inactive.route) do - if dump.inactive.route[_].target == "::" then - gateway = dump.inactive.route[_].nexthop - end - end - end - end - - if gateway == "" then - dump = require("luci.util").ubus("network.interface.%s_6" % interface, "status", {}) - - if dump and dump.route then - local _, route - for _, route in ipairs(dump.route) do - if dump.route[_].target == "::" then - gateway = dump.route[_].nexthop - end - end - end - if gateway == "" then - if dump and dump.inactive and dump.inactive.route then - local _, route - for _, route in ipairs(dump.inactive.route) do - if dump.inactive.route[_].target == "::" then - gateway = dump.inactive.route[_].nexthop - end - end - end - end - end - return gateway -end - --- This function come from OverTheBox by OVH with many changes --- Copyright 2015 OVH --- Simon Lelievre (simon.lelievre@corp.ovh.com) --- Sebastien Duponcheel --- Modified by Ycarus (Yannick Chabanois) for OpenMPTCProuter project --- Under GPL3+ -function interfaces_status() - local ut = require "luci.util" - local ntm = require "luci.model.network".init() - local uci = require "luci.model.uci".cursor() - local mArray = {} - - -- OpenMPTCProuter info - mArray.openmptcprouter = {} - --mArray.openmptcprouter["version"] = ut.trim(sys.exec("cat /etc/os-release | grep VERSION= | sed -e 's:VERSION=::'")) - mArray.openmptcprouter["version"] = uci:get("openmptcprouter", "settings", "version") or ut.trim(sys.exec("cat /etc/os-release | grep VERSION= | sed -e 's:VERSION=::' -e 's/^.//' -e 's/.$//'")) - - mArray.openmptcprouter["latest_version_omr"] = uci:get("openmptcprouter", "latest_versions", "omr") or "" - mArray.openmptcprouter["latest_version_vps"] = uci:get("openmptcprouter", "latest_versions", "vps") or "" - - mArray.openmptcprouter["service_addr"] = uci:get("shadowsocks-libev", "sss0", "server") or "" - if mArray.openmptcprouter["service_addr"] == "" or mArray.openmptcprouter["service_addr"] == "192.168.1.3" then - mArray.openmptcprouter["service_addr"] = "" - ucic:foreach("openmptcprouter", "server", function(s) - local serverip = uci:get("openmptcprouter",s[".name"],"ip") or "" - local disabled = uci:get("openmptcprouter",s[".name"],"disabled") or "0" - if serverip ~= "" and disabled ~= "1" then - mArray.openmptcprouter["service_addr"] = serverip - end - end) - end - local net = ntm:get_network("lan") - local ipaddr = net:ipaddr() or "" - mArray.openmptcprouter["local_addr"] = ipaddr - --mArray.openmptcprouter["local_addr"] = uci:get("network", "lan", "ipaddr") - mArray.openmptcprouter["hostname"] = "OpenMPTCProuter" - ucic:foreach("system", "system", function(s) - mArray.openmptcprouter["hostname"] = uci:get("system",s[".name"],"hostname") or "OpenMPTCProuter" - end) - - --mArray.openmptcprouter["server_mptcp"] = "" - mArray.openmptcprouter["omr_time"] = os.time() - -- dns - mArray.openmptcprouter["dns"] = false - local timeout = uci:get("openmptcprouter","settings","status_getip_timeout") or "1" - local dns_test = sys.exec("dig +timeout=" .. timeout .. " +tries=1 openmptcprouter.com | grep 'ANSWER: 0'") - if dns_test == "" then - mArray.openmptcprouter["dns"] = true - end - - mArray.openmptcprouter["ipv6"] = "disabled" - if uci:get("openmptcprouter","settings","disable_ipv6") ~= "1" then - mArray.openmptcprouter["ipv6"] = "enabled" - end - - mArray.openmptcprouter["proxy_addr"] = "" - --mArray.openmptcprouter["ss_addr6"] = "" - mArray.openmptcprouter["wan_addr"] = "" - mArray.openmptcprouter["wan_addr6"] = "" - local tracker_ip = "" - local check_ipv4_website = uci:get("openmptcprouter","settings","check_ipv4_website") or "http://ip.openmptcprouter.com" - local check_ipv6_website = uci:get("openmptcprouter","settings","check_ipv6_website") or "http://ipv6.openmptcprouter.com" - if mArray.openmptcprouter["dns"] == true then - -- wanaddr - --mArray.openmptcprouter["wan_addr"] = uci:get("openmptcprouter","omr","public_detected_ipv4") or "" - if mArray.openmptcprouter["service_addr"] ~= "" then - mArray.openmptcprouter["service_addr_ip"] = ut.trim(sys.exec("resolveip -4 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1")) - mArray.openmptcprouter["service_addr_ip6"] = ut.trim(sys.exec("resolveip -6 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1")) - end - - if uci:get("openmptcprouter","settings","external_check") ~= "0" and mArray.openmptcprouter["dns"] == true then - --if mArray.openmptcprouter["service_addr_ip"] ~= "" and mArray.openmptcprouter["service_addr_ip"] ~= nil then - mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("curl -4 -s -m " .. timeout .. " " .. check_ipv4_website)) - if mArray.openmptcprouter["wan_addr"] == "" then - mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("dig -4 TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'")) - end - --end - if mArray.openmptcprouter["ipv6"] == "enabled" or ( mArray.openmptcprouter["service_addr_ip6"] ~= "" and mArray.openmptcprouter["service_addr_ip6"] ~= nil) then - mArray.openmptcprouter["wan_addr6"] = uci:get("openmptcprouter","omr","public_detected_ipv6") or "" - if mArray.openmptcprouter["wan_addr6"] == "" then - mArray.openmptcprouter["wan_addr6"] = ut.trim(sys.exec("curl -6 -s -m " .. timeout .. " " .. check_ipv6_website)) - if mArray.openmptcprouter["wan_addr6"] == "" then - mArray.openmptcprouter["wan_addr6"] = ut.trim(sys.exec("dig -6 TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'")) - end - end - end - mArray.openmptcprouter["external_check"] = true - else - mArray.openmptcprouter["external_check"] = false - end - -- shadowsocksaddr - mArray.openmptcprouter["proxy_addr"] = uci:get("openmptcprouter","omr","detected_ss_ipv4") or "" - if mArray.openmptcprouter["proxy_addr"] == "" and mArray.openmptcprouter["service_addr"] ~= "" then - tracker_ip = uci:get("shadowsocks-libev","tracker_sss0","local_address") or "" - if tracker_ip ~= "" then - local tracker_port = uci:get("shadowsocks-libev","tracker_sss0","local_port") - if mArray.openmptcprouter["external_check"] ~= false then - mArray.openmptcprouter["proxy_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " " .. check_ipv4_website)) - if mArray.openmptcprouter["proxy_addr"] == "" then - mArray.openmptcprouter["proxy_addr"] = ut.trim(sys.exec("curl -s -4 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m " .. timeout .. " ifconfig.me")) - end - --mArray.openmptcprouter["ss_addr6"] = sys.exec("curl -s -6 --socks5 " .. tracker_ip .. ":" .. tracker_port .. " -m 3 http://ipv6.openmptcprouter.com") - end - end - end - end - - if mArray.openmptcprouter["service_addr"] ~= "" and mArray.openmptcprouter["service_addr"] ~= "127.0.0.1" then - mArray.openmptcprouter["vps_status"] = "DOWN" - else - mArray.openmptcprouter["vps_status"] = "UP" - end - - mArray.openmptcprouter["vps_admin"] = false - mArray.openmptcprouter["vps_admin_error"] = false - mArray.openmptcprouter["vps_admin_error_msg"] = "Not found" - - mArray.openmptcprouter["vps_hostname"] = "Server" - -- Get VPS info - local adminport = "" - ucic:foreach("openmptcprouter", "server", function(s) - local serverips = uci:get("openmptcprouter",s[".name"],"ip") or { "" } - local master = uci:get("openmptcprouter",s[".name"],"master") or "1" - for key, value in pairs(serverips) do - serverip = value - if serverip ~= "" and (master == "1" or mArray.openmptcprouter["wan_addr"] == serverip or mArray.openmptcprouter["wan_addr6"] == serverip) and mArray.openmptcprouter["vps_admin"] == false then - mArray.openmptcprouter["vps_omr_version"] = uci:get("openmptcprouter", s[".name"], "omr_version") or "" - mArray.openmptcprouter["vps_kernel"] = uci:get("openmptcprouter",s[".name"],"kernel") or "" - mArray.openmptcprouter["vps_machine"] = uci:get("openmptcprouter",s[".name"],"machine") or "" - timeout = uci:get("openmptcprouter","settings","status_vps_timeout") or "1" - if uci:get("openmptcprouter",s[".name"],"admin_error") == "1" then - mArray.openmptcprouter["vps_admin_error"] = true - end - adminport = uci:get("openmptcprouter",s[".name"],"port") or "65500" - local token = uci:get("openmptcprouter",s[".name"],"token") or "" - if token ~= "" then - local vpsinfo_json = "" - if mArray.openmptcprouter["service_addr_ip"] ~= "" then - vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ':' .. adminport .. '/status') - end - if mArray.openmptcprouter["service_addr_ip6"] ~= "" then - vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://[' .. serverip .. ']:' .. adminport .. '/status') - end - if vpsinfo_json ~= "" and vpsinfo_json ~= nil then - local status, vpsinfo = pcall(function() - return json.decode(vpsinfo_json) - end) - if status and vpsinfo.vps ~= nil then - mArray.openmptcprouter["vps_loadavg"] = vpsinfo.vps.loadavg or "" - mArray.openmptcprouter["vps_uptime"] = vpsinfo.vps.uptime or "" - mArray.openmptcprouter["vps_mptcp"] = vpsinfo.vps.mptcp.enabled or "" - mArray.openmptcprouter["vps_hostname"] = vpsinfo.vps.hostname or "" - mArray.openmptcprouter["vps_time"] = vpsinfo.vps.time or "" - if vpsinfo.vps.kernel ~= nil then - mArray.openmptcprouter["vps_kernel"] = vpsinfo.vps.kernel or "" - end - if vpsinfo.vps.omr_version ~= nil then - mArray.openmptcprouter["vps_omr_version"] = vpsinfo.vps.omr_version or "" - end - if vpsinfo.vps.time ~= "" then - if math.abs(os.time() - vpsinfo.vps.time) > 10 then - mArray.openmptcprouter["vps_time_accurate"] = false - else - mArray.openmptcprouter["vps_time_accurate"] = true - end - end - mArray.openmptcprouter["vps_admin"] = true - mArray.openmptcprouter["vps_status"] = "UP" - mArray.openmptcprouter["vps_admin_error_msg"] = "" - else - uci:set("openmptcprouter",s[".name"],"admin_error","1") - mArray.openmptcprouter["vps_admin_error"] = true - uci:delete("openmptcprouter",s[".name"],"token") - uci:save("openmptcprouter",s[".name"]) - uci:commit("openmptcprouter",s[".name"]) - mArray.openmptcprouter["vps_admin"] = false - mArray.openmptcprouter["vps_admin_error_msg"] = "Answer error" - end - if status and vpsinfo.vpn ~= nil then - mArray.openmptcprouter["vpn_traffic_rx"] = vpsinfo.vpn.rx or "0" - mArray.openmptcprouter["vpn_traffic_tx"] = vpsinfo.vpn.tx or "0" - mArray.openmptcprouter["vpn_traffic"] = mArray.openmptcprouter["vpn_traffic_tx"] + mArray.openmptcprouter["vpn_traffic_rx"] - else - mArray.openmptcprouter["vpn_traffic_rx"] = "0" - mArray.openmptcprouter["vpn_traffic_tx"] = "0" - mArray.openmptcprouter["vpn_traffic"] = "0" - end - if status and vpsinfo.shadowsocks ~= nil then - mArray.openmptcprouter["ss_traffic"] = vpsinfo.shadowsocks.traffic or "0" - else - mArray.openmptcprouter["ss_traffic"] = "0" - end - if status and vpsinfo.v2ray ~= nil then - mArray.openmptcprouter["v2ray_traffic_rx"] = vpsinfo.v2ray.rx or "0" - mArray.openmptcprouter["v2ray_traffic_tx"] = vpsinfo.v2ray.tx or "0" - mArray.openmptcprouter["v2ray_traffic"] = mArray.openmptcprouter["v2ray_traffic_tx"] + mArray.openmptcprouter["v2ray_traffic_rx"] - else - mArray.openmptcprouter["v2ray_traffic_rx"] = "0" - mArray.openmptcprouter["v2ray_traffic_tx"] = "0" - mArray.openmptcprouter["v2ray_traffic"] = "0" - end - mArray.openmptcprouter["proxy_traffic"] = mArray.openmptcprouter["ss_traffic"] + mArray.openmptcprouter["v2ray_traffic"] - mArray.openmptcprouter["total_traffic"] = mArray.openmptcprouter["proxy_traffic"] + mArray.openmptcprouter["vpn_traffic"] - else - mArray.openmptcprouter["vps_admin"] = false - mArray.openmptcprouter["vps_admin_error_msg"] = "No result" - end - else - mArray.openmptcprouter["vps_admin"] = false - mArray.openmptcprouter["vps_admin_error_msg"] = "No token yet available" - end - if mArray.openmptcprouter["vps_admin"] == false then - if mArray.openmptcprouter["service_addr_ip"] ~= "" then - local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://' .. serverip .. ':' .. adminport .. '/') - elseif mArray.openmptcprouter["service_addr_ip6"] ~= "" then - local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://[' .. serverip .. ']:' .. adminport .. '/') - end - if vpstest == "" then - mArray.openmptcprouter["vps_admin_error_msg"] = mArray.openmptcprouter["vps_admin_error_msg"] .. " - No API script answer" - end - end - end - end - end) - - - if mArray.openmptcprouter["vps_hostname"] == "" then - mArray.openmptcprouter["vps_hostname"] = "Server" - end - -- Check openmptcprouter service are running - mArray.openmptcprouter["tun_service"] = false - mArray.openmptcprouter["tun_state"] = "DOWN" - mArray.openmptcprouter["tun6_state"] = "DOWN" - if string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?glorytun(-udp)?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?dsvpn?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?mlvpn?$'"), "%d+") or string.find(sys.exec("/usr/bin/pgrep '^(/usr/sbin/)?openvpn?$'"), "%d+") then - mArray.openmptcprouter["tun_service"] = true - mArray.openmptcprouter["tun_ip"] = get_ip("omrvpn") - local tun_dev = uci:get("network","omrvpn","device") - if tun_dev == "" then - tun_dev = uci:get("network","omrvpn","ifname") - end - if tun_dev == "" then - tun_dev = get_device("omrvpn") - end - if tun_dev ~= "" and tun_dev ~= nil then - local peer = get_gateway("omrvpn") - if peer == "" then - peer = ut.trim(sys.exec("ip -4 r list dev " .. tun_dev .. " | grep via | grep -v default | awk '{print $1}' | grep -v / | tr -d '\n'")) - end - if peer == "" then - peer = ut.trim(sys.exec("ip -4 r list dev " .. tun_dev .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) - end - if peer ~= "" then - local tunnel_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 -I " .. tun_dev .. " " .. peer .. " | grep '100% packet loss'")) - if tunnel_ping_test == "" then - mArray.openmptcprouter["tun_state"] = "UP" - else - mArray.openmptcprouter["tun_state"] = "DOWN" - end - if mArray.openmptcprouter["ipv6"] == "enabled" or mArray.openmptcprouter["service_addr_ip6"] ~= "" then - local tunnel_ipv6_gw = uci:get("network","omr6in4","gateway") - local tunnel_ping6_test = ut.trim(sys.exec("ping6 -w 1 -c 1 " .. tunnel_ipv6_gw .. "%6in4-omr6in4 | grep '100% packet loss'")) - if tunnel_ping6_test == "" then - mArray.openmptcprouter["tun6_state"] = "UP" - else - mArray.openmptcprouter["tun6_state"] = "DOWN" - end - end - else - mArray.openmptcprouter["tun_state"] = "DOWN" - mArray.openmptcprouter["tun6_state"] = "DOWN" - end - end - elseif uci:get("openmptcprouter","settings","vpn") == "none" then - mArray.openmptcprouter["tun_service"] = true - mArray.openmptcprouter["tun_state"] = "NONE" - mArray.openmptcprouter["tun6_state"] = "NONE" - end - - mArray.openmptcprouter["multi_vpn"] = false - if uci:get("openmptcprouter","settings","vpn") ~= "none" then - current_vpn = uci:get("openmptcprouter","settings","vpn") - if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "tcp" and current_vpn ~= "glorytun_tcp" then - mArray.openmptcprouter["multi_vpn"] = true - end - if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "udp" and current_vpn ~= "glorytun_udp" then - mArray.openmptcprouter["multi_vpn"] = true - end - if uci:get("dsvpn","vpn","enable") == "1" and current_vpn ~= "dsvpn" then - mArray.openmptcprouter["multi_vpn"] = true - end - if uci:get("mlvpn","general","enable") == "1" and current_vpn ~= "mlvpn" then - mArray.openmptcprouter["multi_vpn"] = true - end - if uci:get("openvpn","omr","enabled") == "1" and current_vpn ~= "openvpn" then - mArray.openmptcprouter["multi_vpn"] = true - end - end - - -- check Shadowsocks is running - mArray.openmptcprouter["shadowsocks_service"] = false - if string.find(sys.exec("/usr/bin/pgrep ss-redir"), "%d+") then - mArray.openmptcprouter["shadowsocks_service"] = true - end - - mArray.openmptcprouter["shadowsocks_enabled"] = true - local ss_server = uci:get("shadowsocks-libev","sss0","disabled") or "0" - if ss_server == "1" then - mArray.openmptcprouter["shadowsocks_enabled"] = false - end - -- check V2Ray is running - mArray.openmptcprouter["v2ray_service"] = false - if string.find(sys.exec("/usr/bin/pgrep v2ray"), "%d+") then - mArray.openmptcprouter["v2ray_service"] = true - end - mArray.openmptcprouter["v2ray_enabled"] = false - local v2ray = uci:get("v2ray","main","enabled") or "0" - if v2ray == "1" then - mArray.openmptcprouter["v2ray_enabled"] = true - end - local ss_key = uci:get("shadowsocks-libev","sss0","key") or "" - mArray.openmptcprouter["shadowsocks_service_method"] = uci:get("shadowsocks-libev","sss0","method") - if ss_key == "" then - mArray.openmptcprouter["shadowsocks_service_key"] = false - else - mArray.openmptcprouter["shadowsocks_service_key"] = true - end - - -- Add DHCP infos by parsing dnsmasq config file - mArray.openmptcprouter.dhcpd = {} - dnsmasq = ut.trim(sys.exec("cat /var/etc/dnsmasq.conf*")) - for itf, range_start, range_end, mask, leasetime in dnsmasq:gmatch("range=[%w,!:-]*set:(%w+),(%d+\.%d+\.%d+\.%d+),(%d+\.%d+\.%d+\.%d+),(%d+\.%d+\.%d+\.%d+),(%w+)") do - mArray.openmptcprouter.dhcpd[itf] = {} - mArray.openmptcprouter.dhcpd[itf].interface = itf - mArray.openmptcprouter.dhcpd[itf].range_start = range_start - mArray.openmptcprouter.dhcpd[itf].range_end = range_end - mArray.openmptcprouter.dhcpd[itf].netmask = mask - mArray.openmptcprouter.dhcpd[itf].leasetime = leasetime - mArray.openmptcprouter.dhcpd[itf].router = mArray.openmptcprouter["local_addr"] - mArray.openmptcprouter.dhcpd[itf].dns = mArray.openmptcprouter["local_addr"] - end - for itf, option, value in dnsmasq:gmatch("option=(%w+),([%w:-]+),(%d+\.%d+\.%d+\.%d+)") do - if mArray.openmptcprouter.dhcpd[itf] then - if option == "option:router" or option == "3" then - mArray.openmptcprouter.dhcpd[itf].router = value - end - if option == "option:dns-server" or option == "6" then - mArray.openmptcprouter.dhcpd[itf].dns = value - end - end - end - - - -- Parse mptcp kernel info - local mptcp = {} - local fullmesh = ut.trim(sys.exec("cat /proc/net/mptcp_fullmesh")) - for ind, addressId, backup, ipaddr in fullmesh:gmatch("(%d+), (%d+), (%d+), (%d+\.%d+\.%d+\.%d+)") do - mptcp[ipaddr] = {} - mptcp[ipaddr].index = ind - mptcp[ipaddr].id = addressId - mptcp[ipaddr].backup= backup - mptcp[ipaddr].ipaddr= ipaddr - end - - - mArray.openmptcprouter['model'] = sys.exec("ubus call system board | jsonfilter -q -e '@.model' 2>/dev/null | tr -d '\n'") - local board_name = sys.exec("ubus call system board | jsonfilter -q -e '@.board_name' 2>/dev/null | tr -d '\n'") - -- retrieve core temperature - if board_name:match("^raspberrypi.*") then - mArray.openmptcprouter["core_temp"] = sys.exec("cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null"):match("%d+") - end - mArray.openmptcprouter["loadavg"] = sys.exec("cat /proc/loadavg 2>/dev/null"):match("[%d%.]+ [%d%.]+ [%d%.]+") - mArray.openmptcprouter["uptime"] = sys.exec("cat /proc/uptime 2>/dev/null"):match("[%d%.]+") - - mArray.openmptcprouter["fstype"] = sys.exec("cat /proc/mounts 2>/dev/null | awk '/\\/dev\\/root/ {print $3}' | tr -d '\n'") - if mArray.openmptcprouter["fstype"] == "ext4" then - if sys.exec("cat /proc/mounts 2>/dev/null | awk '/\\/dev\\/root/ {print $4}' | grep ro") == "" then - mArray.openmptcprouter["fsro"] = false - else - mArray.openmptcprouter["fsro"] = true - end - elseif mArray.openmptcprouter["fstype"] == "squashfs" then - if sys.exec("cat /proc/mounts 2>/dev/null | awk '/overlayfs/ {print $4}' | grep overlay") == "" then - mArray.openmptcprouter["fsro"] = true - else - mArray.openmptcprouter["fsro"] = false - end - end - - - mArray.openmptcprouter["direct_output"] = false - -- overview status - mArray.wans = {} - mArray.tunnels = {} - allintf = {} - allmac = {} - - uci:foreach("network", "interface", function (section) - local interface = section[".name"] - local net = ntm:get_network(interface) - local ipaddr = net:ipaddr() or "" - local ip6addr = net:ip6addr() or "" - local gateway = section["gateway"] or "" - local gateway6 = section["ip6gw"] or "" - local multipath = section["multipath"] - local enabled = section["auto"] - local proto = section["proto"] or "" - local ipv6 = section["ipv6"] or "0" - local mac = section ["macaddr"] or "" - local itype = section ["type"] or "" - local state = uci:get("openmptcprouter", interface, "state") or "" - - --if not ipaddr or not gateway then return end - -- Don't show if0 in the overview - --if interface == "lo" then return end - - local ifname = get_device(interface) - if ifname == "" or ifname == nil then - ifname = section["device"] or "" - end - --if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then - --ifname = get_device(interface:sub(5)) - --end - - duplicateif = false - if ifname ~= "" and ifname ~= nil and not (section["device"] ~= nil and section["device"]:match("^@.*")) then - if allintf[ifname] then - connectivity = "ERROR" - duplicateif = true - else - allintf[ifname] = true - end - end - - duplicatemac = false - if mac ~= "" and mac ~= nil and not (section["device"] ~= nil and section["device"]:match("^@.*")) and not (ifname ~= nil and ifname:match("%.")) then - if allmac[mac] then - connectivity = "ERROR" - duplicatemac = true - else - allmac[mac] = true - end - end - - --if multipath == "off" and not ifname:match("^tun.*") then return end - if multipath == "off" then return end - - if enabled == "0" then return end - - local connectivity = "OK" - if ipaddr == "" and ifname ~= nil and ifname ~= "" and proto ~= "dhcpv6" then - ipaddr = ut.trim(sys.exec("ip -4 -br addr ls dev " .. ifname .. " | awk -F'[ /]+' '{print $3}' | tr -d '\n'")) - end - if ipaddr == "" and ifname ~= nil and ifname ~= "" and proto ~= "dhcpv6" then - ipaddr = ut.trim(sys.exec("ip -4 addr show dev " .. ifname .. " | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1 | tr -d '\n'")) - end - if ip6addr == "" and ifname ~= nil and ifname ~= "" and (ipv6 == "1" or ipv6 == "auto") then - ip6addr = ut.trim(sys.exec("ip -6 -br addr ls dev " .. ifname .. " | awk -F'[ /]+' '{print $3}' | tr -d '\n'")) - end - if ip6addr == "" and ifname ~= nil and ifname ~= "" and (ipv6 == "1" or ipv6 == "auto") then - ip6addr = ut.trim(sys.exec("ip -6 addr show dev " .. ifname .. " | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1 | tr -d '\n'")) - end - if ipaddr == "" and ip6addr == "" then - connectivity = "ERROR" - else - if mArray.openmptcprouter["wan_addr"] == ipaddr then - mArray.openmptcprouter["direct_output"] = true - end - if mArray.openmptcprouter["ipv6"] == "enabled" or ( mArray.openmptcprouter["service_addr_ip6"] ~= "" and mArray.openmptcprouter["service_addr_ip6"] ~= nil) then - if mArray.openmptcprouter["wan_addr6"] == ip6addr then - mArray.openmptcprouter["direct_output"] = true - end - end - end - - local multipath_state = "" - local current_multipath_state = "" - if ifname ~= "" and ifname ~= nil and connectivity ~= "ERROR" then - if fs.access("/sys/class/net/" .. ifname) then - multipath_state = ut.trim(sys.exec("multipath " .. ifname .. " | grep deactivated")) - if multipath_state == "" then - connectivity = "OK" - else - connectivity = "ERROR" - end - else - connectivity = "ERROR" - end - else - connectivity = "ERROR" - end - if ifname ~= "" and ifname ~= nil and connectivity ~= "ERROR" then - local test_current_multipath_state = ut.trim(sys.exec("multipath " .. ifname)) - if string.find(test_current_multipath_state,"deactivated") then - current_multipath_state = "off" - elseif string.find(test_current_multipath_state,"default") then - current_multipath_state = "on" - elseif string.find(test_current_multipath_state,"backup") then - current_multipath_state = "backup" - elseif string.find(test_current_multipath_state,"handover") then - current_multipath_state = "handover" - else - current_multipath_state = "" - end - end - - -- Detect WAN gateway status - local gw_ping = "UP" - local gw_ping6 = "UP" - if ifname ~= nil and not (ifname:match("^tun.*") or interface:match("^ovpn.*") or interface:match("^wg.*")) then - if proto ~= "dhcpv6" then - gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'")) - end - if ipv6 == "1" or ipv6 == "auto" then - gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'")) - end - end - - if gateway == "" and proto ~= "dhcpv6" then - gateway = get_gateway(interface) - end - if gateway == "" and ifname ~= nil and ifname ~= "" and ipv6 ~= "1" and ipv6 ~= "auto" then - if fs.access("/sys/class/net/" .. ifname) then - gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) - if gateway == "" then - gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep default | awk '{print $3}' | tr -d '\n'")) - end - end - end - if gateway6 == "" and (ipv6 == "1" or ipv6 == "auto") then - gateway6 = get_gateway6(interface) - end - if gateway6 == "" and ifname ~= nil and ifname ~= "" and (ipv6 == "1" or ipv6 == "auto") then - if fs.access("/sys/class/net/" .. ifname) then - gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'")) - if gateway6 == "" then - gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep default | awk '{print $3}' | tr -d '\n'")) - end - end - end - local signal = "" - local operator = "" - local phonenumber = "" - local donglestate = "" - local networktype = "" - if gateway ~= "" or gateway6 ~= "" then - if uci:get("openmptcprouter", "settings", "disablegwping") ~= "1" and connectivity ~= "ERROR" then - if gateway ~= "" then - local gw_ping_test = "" - if ifname ~= "" and ifname ~= nil then - gw_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 -B -I " .. ifname .. " " .. gateway .. " | grep '100% packet loss'")) - else - gw_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway .. " | grep '100% packet loss'")) - end - if gw_ping_test ~= "" then - gw_ping = "DOWN" - if connectivity == "OK" then - connectivity = "WARNING" - end - end - else - gw_ping = "DOWN" - end - if gateway6 ~= "" then - local gw_ping6_test = "" - if ifname ~= "" and ifname ~= nil then - gw_ping6_test = ut.trim(sys.exec("ping -w 1 -c 1 -B -I " .. ifname .. " " .. gateway6 .. " | grep '100% packet loss'")) - else - gw_ping6_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway6 .. " | grep '100% packet loss'")) - end - if gw_ping6_test ~= "" then - gw_ping6 = "DOWN" - if connectivity == "OK" then - connectivity = "WARNING" - end - end - else - gw_ping6 = "DOWN" - end - end - if uci:get("openmptcprouter", interface, "manufacturer") == "huawei" and ipaddr ~= "" then - intfdata = ut.trim(sys.exec("omr-huawei " .. ipaddr .. " " .. gateway .. " all")) - if intfdata ~= "" then - signal = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $1}'")) - operator = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $2}'")) - phonenumber = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $3}'")) - donglestate = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $4}'")) - networktype = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $5}'")) - end - end - elseif gateway == "" and gateway6 == "" then - gw_ping = "DOWN" - connectivity = "ERROR" - end - - if ifname ~= "" and ifname ~= nil then - --local proto = section['proto'] - if proto == "qmi" then - local device = section['device'] - intfdata = ut.trim(sys.exec("omr-qmi " .. device .. " all")) - if intfdata ~= "" then - signal = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $1}'")) - operator = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $2}'")) - phonenumber = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $3}'")) - donglestate = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $4}'")) - networktype = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $5}'")) - end - elseif proto == "3g" then - local device = section['device'] - signal = sys.exec("omr-3g " .. device .. " | tr -d '\n'") - elseif proto == "modemmanager" then - local device = section['device'] - intfdata = ut.trim(sys.exec("omr-modemmanager " .. device .. " all")) - if intfdata ~= "" then - signal = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $1}'")) - operator = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $2}'")) - phonenumber = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $3}'")) - donglestate = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $4}'")) - networktype = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $5}'")) - end - end - end - - local latency = "" - local server_ping = "" - local server_http = "" - --if connectivity ~= "ERROR" and ifname ~= "" and gateway ~= "" and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and ipaddr ~= "" then - if ifname ~= "" and (gateway ~= "" or gateway6 ~= "") and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and (ipaddr ~= "" or ip6addr ~= "") and connectivity ~= "ERROR" then - local serverip = mArray.openmptcprouter["service_addr"] - if serverip == "127.0.0.1" then - serverip = mArray.openmptcprouter["wan_addr"] - end - if serverip ~= "" and uci:get("openmptcprouter", "settings", "disableserverping") ~= "1" then - local server_ping_test = sys.exec("ping -B -w 1 -c 1 -I " .. ifname .. " " .. serverip) - local server_ping_result = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | grep '100% packet loss'")) - if server_ping_result ~= "" then - server_ping = "DOWN" - if connectivity == "OK" then - connectivity = "WARNING" - end - else - mArray.openmptcprouter["vps_status"] = "UP" - server_ping = "UP" - latency = ut.trim(sys.exec("echo '" .. server_ping_test .. "' | cut -d '/' -s -f5 | cut -d '.' -f1")) - end - end - - if adminport == "" then - adminport = "65500" - end - -- httping disable for now, with -l (ssl) timeout is ignored - if false and server_ping == "UP" and uci:get("openmptcprouter", "settings", "disableserverhttptest") ~= "1" and ipaddr ~= "" and adminport ~= "" then - local server_http_result = "" - local server_http_test = "" - if mArray.openmptcprouter["service_addr_ip"] ~= "" then - server_http_test = sys.exec("httping -l " .. mArray.openmptcprouter["service_addr_ip"] .. ":" .. adminport .. " -y " .. ipaddr .. " -t 1 -c 1") - server_http_result = ut.trim(sys.exec("echo '" .. server_http_test .. "' | grep '100.00% failed'")) - elseif mArray.openmptcprouter["service_addr_ip6"] ~= "" then - server_http_test = sys.exec("httping -l [" .. mArray.openmptcprouter["service_addr_ip6"] .. "]:" .. adminport .. " -y " .. ipaddr .. " -t 1 -c 1") - server_http_result = ut.trim(sys.exec("echo '" .. server_http_test .. "' | grep '100.00% failed'")) - end - if server_http_result ~= "" then - server_http = "DOWN" - if connectivity == "OK" then - connectivity = "WARNING" - end - else - server_http = "UP" - end - end - end - - local multipath_available = "" - local multipath_available_state = "" - if connectivity ~= "ERROR" and mArray.openmptcprouter["dns"] == true and ifname ~= nil and ifname ~= "" and (gateway ~= "" or gateway6 ~= "") and (gw_ping == "UP" or gw_ping6 == "UP") then - -- Test if multipath can work on the connection - local multipath_available_state = uci:get("openmptcprouter",interface,"mptcp_status") or "" - if multipath_available_state == "" then - multipath_available = "NO CHECK" - elseif multipath_available_state == "MPTCP enabled" then - multipath_available = "OK" - else - multipath_available = "ERROR" - end - else - multipath_available = "NO CHECK" - end - - local zonewan = "NO" - if ut.trim(sys.exec("uci -q get firewall.zone_wan.network | grep '" .. interface .. "'")) ~= "" or interface:match("^wg.*") or interface:match("^ovpn.*") then - zonewan = "OK" - end - - -- Detect if WAN get an IPv6 - local ipv6_discover = "NONE" - -- Disabled, seems to take a too much time in some case - -- if ifname ~= "" and ifname ~= nil and mArray.openmptcprouter["ipv6"] == "enabled" then - -- local ipv6_result = "" - -- local ipv6_result = _ipv6_discover(ifname) - -- if type(ipv6_result) == "table" and #ipv6_result > 0 then - -- local ipv6_addr_test - -- for k,v in ipairs(ipv6_result) do - -- if v.RecursiveDnsServer then - -- if type(v.RecursiveDnsServer) ~= "table" then - -- ipv6_addr_test = sys.exec("ip -6 addr | grep " .. v.RecursiveDnsServer) - -- if ipv6_addr_test == "" then - -- ipv6_discover = "DETECTED" - -- end - -- end - -- end - -- end - -- end - -- end - local mtu = "" - local whois = "" - local whois6 = "" - local publicIP = "" - local publicIP6 = "" - - if connectivity ~= "ERROR" then - if ifname ~= nil and (ifname:match("^tun.*") and interface:match("^ovpn.*")) then - publicIP = uci:get("openmptcprouter",interface:sub(5),"publicip") or "" - if ifname ~= nil and ipaddr ~= "" and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then - publicIP = ut.trim(sys.exec("omr-ip-intf " .. get_device(interface:sub(5)))) - end - publicIP6 = uci:get("openmptcprouter",interface:sub(5),"publicip6") or "" - if ifname ~= nil and ip6addr ~= "" and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then - publicIP6 = ut.trim(sys.exec("omr-ip6-intf " .. get_device(interface:sub(5)))) - end - elseif ifname ~= nil and interface:match("^wg.*") then - publicIP = uci:get("openmptcprouter",interface:sub(3),"publicip") or "" - if ifname ~= nil and ipaddr ~= "" and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then - publicIP = ut.trim(sys.exec("omr-ip-intf " .. get_device(interface:sub(3)))) - end - publicIP6 = uci:get("openmptcprouter",interface:sub(3),"publicip6") or "" - if ifname ~= nil and ip6addr ~= "" and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then - publicIP6 = ut.trim(sys.exec("omr-ip6-intf " .. get_device(interface:sub(3)))) - end - else - publicIP = uci:get("openmptcprouter",interface,"publicip") or "" - if ifname ~= nil and ipaddr ~= "" and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then - publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname)) - end - publicIP6 = uci:get("openmptcprouter",interface,"publicip6") or "" - if ifname ~= nil and ip6addr ~= "" and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then - publicIP6 = ut.trim(sys.exec("omr-ip6-intf " .. ifname)) - end - end - if publicIP ~= "" then - whois = ut.trim(sys.exec("curl -4 --max-time 20 -s -k 'https://api.ip138.com/ip/?ip=" .. publicIP .. "&datatype=txt&callback=find' -H 'token:99eeff11df2c5c5a6e6b984bafd0bb77' | awk '{print $3 $4 $5 $6}'")) - end - if publicIP6 ~= "" then - whois6 = ut.trim(sys.exec("curl -6 --max-time 20 -s -k 'https://api.ip138.com/ip/?ip=" .. publicIP6 .. "&datatype=txt&callback=find' -H 'token:99eeff11df2c5c5a6e6b984bafd0bb77' | awk '{print $3 $4 $5 $6}'")) - end - if ifname ~= "" and ifname ~= nil then - if fs.access("/sys/class/net/" .. ifname) then - mtu = ut.trim(sys.exec("cat /sys/class/net/" .. ifname .. "/mtu | tr -d '\n'")) - if mtu == "" and interface ~= nil then - mtu = uci:get("openmptcprouter",interface,"mtu") or "" - end - end - end - loop = false - if uci:get("openmptcprouter", interface, "loop") == "1" then - loop = true - end - end - local rx = "" - local tx = "" - if ifname ~= "" and ifname ~= nil then - rx = ut.trim(sys.exec("devstatus " .. ifname .. " | jsonfilter -e '@.statistics.rx_bytes'")) - tx = ut.trim(sys.exec("devstatus " .. ifname .. " | jsonfilter -e '@.statistics.tx_bytes'")) - end - - if state == "down" then - connectivity = "ERROR" - end - - local data = { - label = section["label"] or interface, - name = interface, - --link = net:adminlink() or "", - ifname = ifname, - ipaddr = ipaddr, - ip6addr = ip6addr, - gateway = gateway, - gateway6 = gateway6, - multipath = section["multipath"], - status = connectivity, - wanip = publicIP, - wanip6 = publicIP6, - latency = latency, - mtu = mtu, - whois = whois or "unknown", - whois6 = whois6 or "unknown", - qos = section["trafficcontrol"], - download = section["download"], - upload = section["upload"], - gw_ping = gw_ping, - gw_ping6 = gw_ping6, - server_ping = server_ping, - server_http = server_http, - ipv6_discover = ipv6_discover, - multipath_available = multipath_available, - multipath_state = current_multipath_state, - duplicateif = duplicateif, - duplicatemac = duplicatemac, - signal = signal, - operator = operator, - phonenumber = phonenumber, - donglestate = donglestate, - networktype = networktype, - proto = proto, - rx = rx, - tx = tx, - zonewan = zonewan, - iftype = itype, - state = state, - loop = loop, - } - if ifname ~= nil and ifname:match("^tun.*") then - table.insert(mArray.tunnels, data); - elseif ifname ~= nil and ifname:match("^mlvpn.*") then - table.insert(mArray.tunnels, data); - else - table.insert(mArray.wans, data); - end - end) - if next(mArray.wans) == nil then - mArray.openmptcprouter["direct_output"] = true - end - - --luci.http.prepare_content("application/json") - --luci.http.write_json(mArray) - return mArray - --return "titi" -end - --- This come from OverTheBox by OVH --- Copyright 2015 OVH --- Simon Lelievre (simon.lelievre@corp.ovh.com) --- Sebastien Duponcheel --- Under GPL3+ -function _ipv6_discover(interface) - local result = {} - - --local ra6_list = (sys.exec("rdisc6 -nm " .. interface)) - local ra6_list = (sys.exec("rdisc6 -n1 -r1 " .. interface)) - -- dissect results - local lines = {} - local index = {} - ra6_list:gsub('[^\r\n]+', function(c) - table.insert(lines, c) - if c:match("Hop limit") then - table.insert(index, #lines) - end - end) - local ra6_result = {} - for k,v in ipairs(index) do - local istart = v - local iend = index[k+1] or #lines - - local entry = {} - for i=istart,iend - 1 do - local level = lines[i]:find('%w') - local line = lines[i]:sub(level) - - local param, value - if line:match('^from') then - param, value = line:match('(from)%s+(.*)$') - else - param, value = line:match('([^:]+):(.*)$') - -- Capitalize param name and remove spaces - param = param:gsub("(%a)([%w_']*)", function(first, rest) return first:upper()..rest:lower() end):gsub("[%s-]",'') - param = param:gsub("%.$", '') - -- Remove text between brackets, seconds and spaces - value = value:lower() - value = value:gsub("%(.*%)", '') - value = value:gsub("%s-seconds%s-", '') - value = value:gsub("^%s+", '') - value = value:gsub("%s+$", '') - end - - if entry[param] == nil then - entry[param] = value - elseif type(entry[param]) == "table" then - table.insert(entry[param], value) - else - old = entry[param] - entry[param] = {} - table.insert(entry[param], old) - table.insert(entry[param], value) - end - end - table.insert(ra6_result, entry) - end - return ra6_result -end - -local methods = { - getrootfs = { - call = function() - return get_rootfs() - end - }, - getefi = { - call = function() - return get_efi() - end - }, - status = { - call = function() - return interfaces_status() - end - }, - setIPv6 = { - args = { disable = 0 }, - call = function(args) - set_ipv6_state(args.disable) - end - }, - updateVPS = { - call = function() - update_vps() - end - }, - redirectports = { - args = { server = "", redirect_ports = 0}, - call = function(args) - redirectports(args.server,args.redirect_ports) - end - }, - tcpkeepalivetime = { - args = { tcp_keepalive_time = 7200 }, - call = function(args) - tcpkeepalivetime(args.tcp_keepalive_time) - end - }, - tcpfintimeout = { - args = { tcp_fin_timeout = 60 }, - call = function(args) - tcpfintimeout(args.tcp_fin_timeout) - end - }, - tcpsynretries = { - args = { tcp_syn_retries = 3 }, - call = function(args) - tcpsynretries(args.tcp_syn_retries) - end - }, - tcpfastopen = { - args = { tcp_fastopen = 1}, - call = function(args) - tcpfastopen(args.tcp_fastopen) - end - }, - disableipv6 = { - args = { disable_ipv6 = 0 }, - call = function(args) - set_ipv6_disable(args.disable_ipv6) - end - }, - externalcheck = { - args = { externalcheck = 0 }, - call = function(args) - externalcheck(args.externalcheck) - end - }, - savevnstat = { - args = { savevnstat = 0 }, - call = function(args) - savevnstat(args.savevnstat) - end - }, - disablefastopen = { - args = { disablefastopen = 0 }, - call = function(args) - disablefastopen(args.disablefastopen) - end - }, - enableobfs = { - args = { enableobfs = 0 }, - call = function(args) - enableobfs(args.enableobfs) - end - }, - setmastertype = { - args = { master_type = "redundant" }, - call = function(args) - setmastertype(args.setmastertype) - end - }, - cpuscalingmin = { - args = { scaling_min_freq = 0 }, - call = function(args) - cpuscalingmin(args.scaling_min_freq) - end - }, - cpuscalingmax = { - args = { scaling_max_freq = 0 }, - call = function(args) - cpuscalingmax(args.scaling_max_freq) - end - }, - addserver = { - args = { server_name = "" }, - call = function(args) - add_server(args.server_name) - end - }, - removeserver = { - args = { server_name = "" }, - call = function(args) - remove_server(args.server_name) - end - }, - addinterface = { - args = { ifname = "" }, - call = function(args) - add_interface(args.ifname) - end - }, - removeinterface = { - args = { intf = "" }, - call = function(args) - remove_interface(args.intf) - end - }, - setinterface = { - args = { intf = "", proto = "dhcp", ipaddr = "", netmask = "", gateway = "", sqmenabled = 0, downloadspeed = 0, uploadspeed = 0 }, - call = function(args) - set_interface(args.intf, args.proto, args.ipaddr, args.netmask, args.gateway, args.sqmenabled, args.downloadspeed, args.uploadspeed) - end - }, - defaultvpn = { - args = { vpn = "glorytun_tcp" }, - call = function(args) - default_vpn(args.vpn) - end - }, - setserver = { - args = { server = "vps", server_ip = "", openmptcprouter_vps_key = "" }, - call = function(args) - server_settings(args.server, args.server_ip, args.openmptcprouter_vps_key) - end - }, - setshadowsocks = { - args = { key = "" }, - call = function(args) - set_shadowsocks(args.shadowsocks_key) - end - }, - disableshadowsocks = { - args = { disable = 0 }, - call = function(args) - disable_shadowsocks(args.disable) - end - }, - setglorytun = { - args = { key = "" }, - call = function(args) - set_glorytun(args.key) - end - }, - setdsvpn = { - args = { key = "" }, - call = function(args) - set_dsvpn(args.key) - end - }, - setmlvpn = { - args = { key = "" }, - call = function(args) - set_mlvpn(args.key) - end - }, - setopenvpn = { - args = { key = "" }, - call = function(args) - set_openvpn(args.key) - end - }, - -} - -local function parseInput() - local parse = jsonc.new() - local done, err - - while true do - local chunk = io.read(4096) - if not chunk then - break - elseif not done and not err then - done, err = parse:parse(chunk) - end - end - - if not done then - print(jsonc.stringify({ error = err or "Incomplete input" })) - os.exit(1) - end - - return parse:get() -end - -local function validateArgs(func, uargs) - local method = methods[func] - if not method then - print(jsonc.stringify({ error = "Method not found" })) - os.exit(1) - end - - if type(uargs) ~= "table" then - print(jsonc.stringify({ error = "Invalid arguments" })) - os.exit(1) - end - - uargs.ubus_rpc_session = nil - - local k, v - local margs = method.args or {} - for k, v in pairs(uargs) do - if margs[k] == nil or - (v ~= nil and type(v) ~= type(margs[k])) - then - print(jsonc.stringify({ error = "Invalid arguments" })) - os.exit(1) - end - end - return method -end - -if arg[1] == "list" then - local _, method, rv = nil, nil, {} - for _, method in pairs(methods) do rv[_] = method.args or {} end - print((jsonc.stringify(rv):gsub(":%[%]", ":{}"))) -elseif arg[1] == "call" then - local args = parseInput() - local method = validateArgs(arg[2], args) - local result, code = method.call(args) - print((jsonc.stringify(result):gsub("^%[%]$", "{}"))) - os.exit(code or 0) -end \ No newline at end of file diff --git a/luci-app-snmpd/po/fr/snmpd.po b/luci-app-snmpd/po/fr/snmpd.po index 7efb48a42..976057fbf 100644 --- a/luci-app-snmpd/po/fr/snmpd.po +++ b/luci-app-snmpd/po/fr/snmpd.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2022-02-19 07:53+0000\n" +"PO-Revision-Date: 2021-05-21 19:20+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -57,7 +57,7 @@ msgstr "" #: luci-app-snmpd/luasrc/view/snmpd.htm:21 #: luci-app-snmpd/luasrc/view/snmpd.htm:48 msgid "General" -msgstr "Général" +msgstr "" #: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3 msgid "Grant UCI access for luci-app-snmpd" @@ -80,11 +80,11 @@ msgstr "Interface" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101 msgid "Level" -msgstr "Niveau" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22 msgid "Location" -msgstr "Localisation" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24 #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137 @@ -97,11 +97,11 @@ msgstr "Réseaux" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116 msgid "Notify" -msgstr "Notifier" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136 msgid "ObjectID" -msgstr "ObjectID" +msgstr "" #: luci-app-snmpd/luasrc/view/snmpd.htm:55 #: luci-app-snmpd/luasrc/view/snmpd.htm:90 @@ -110,7 +110,7 @@ msgstr "Interface de sortie" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138 msgid "Program" -msgstr "Programme" +msgstr "" #: luci-app-snmpd/luasrc/view/snmpd.htm:85 #: luci-app-snmpd/luasrc/view/snmpd.htm:89 @@ -119,28 +119,28 @@ msgstr "Protocoles" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106 msgid "Read" -msgstr "Lecture" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34 #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69 msgid "Read-only" -msgstr "Lecture Seule" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35 #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70 msgid "Read-write" -msgstr "Lecture-écriture" +msgstr "" #: luci-app-snmpd/luasrc/controller/snmpd.lua:6 #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4 #: luci-app-snmpd/luasrc/view/snmpd.htm:19 #: luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3 msgid "SNMPd" -msgstr "SNMPd" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4 msgid "SNMPd settings interface (Beta)" -msgstr "Paramètres du protocole SNMPd (Beta)" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32 msgid "Server" @@ -148,7 +148,7 @@ msgstr "Serveur" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37 msgid "Source" -msgstr "Source" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19 msgid "System" @@ -156,23 +156,23 @@ msgstr "Système" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111 msgid "Write" -msgstr "Ecriture" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92 msgid "any" -msgstr "Tout" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104 msgid "auth" -msgstr "Authentification" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29 msgid "com2sec security" -msgstr "com2sec security" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103 msgid "noauth" -msgstr "pas d'authentification" +msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67 msgid "secname" @@ -181,4 +181,4 @@ msgstr "" #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76 #: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90 msgid "version" -msgstr "version" +msgstr "" diff --git a/luci-app-sysupgrade/root/etc/init.d/sysupgrade b/luci-app-sysupgrade/root/etc/init.d/sysupgrade index 9ffc3c537..377c67944 100755 --- a/luci-app-sysupgrade/root/etc/init.d/sysupgrade +++ b/luci-app-sysupgrade/root/etc/init.d/sysupgrade @@ -11,7 +11,7 @@ start_service() { if [ -f /etc/backup/installed_packages.txt ]; then - if [ "$(opkg -V0 update 2>&1)" = "" ]; then + if [ "$(opkg -V0 update)" = "" ]; then grep "\toverlay" /etc/backup/installed_packages.txt | cut -f1 | xargs -r opkg -V0 install rm /etc/backup/installed_packages.txt fi diff --git a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js index cf69d4d0e..b5892cff2 100644 --- a/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js +++ b/luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js @@ -371,7 +371,7 @@ return baseclass.extend({ release: { title: _('Firmware Version'), - value: (typeof boardinfo.release !== "undefined") ? ((typeof boardinfo.release.description !== "undefined") ? boardinfo.release.description : null) : null + value: boardinfo.release.description ? boardinfo.release.description : null } }; diff --git a/luci-mod-dashboard/po/fr/dashboard.po b/luci-mod-dashboard/po/fr/dashboard.po index ee91c668b..cdf32c682 100644 --- a/luci-mod-dashboard/po/fr/dashboard.po +++ b/luci-mod-dashboard/po/fr/dashboard.po @@ -1,6 +1,6 @@ msgid "" msgstr "" -"PO-Revision-Date: 2022-02-19 07:53+0000\n" +"PO-Revision-Date: 2021-05-31 18:51+0000\n" "Last-Translator: Weblate Admin \n" "Language-Team: French \n" @@ -47,11 +47,11 @@ msgstr "Tableau de bord" #: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/20_lan.js:136 msgid "Devices" -msgstr "Périphériques" +msgstr "Appareils" #: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:195 msgid "Devices Connected" -msgstr "Périphériques connectés" +msgstr "Appareils connectés" #: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:86 msgid "Down." @@ -71,7 +71,7 @@ msgstr "Version du micrologiciel" #: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:173 msgid "GHz" -msgstr "GHz" +msgstr "Ghz" #: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:25 msgid "Grant access to DHCP status display" @@ -83,7 +83,7 @@ msgstr "Permettre l'accès à l'affichage de l'état principal" #: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:3 msgid "Grant access to the system route status" -msgstr "Permettre l’accès au status de routage" +msgstr "Permettre l'acces au Status du Routage" #: luci-mod-dashboard/root/usr/share/rpcd/acl.d/luci-mod-dashboard.json:34 msgid "Grant access to wireless status display" @@ -220,4 +220,4 @@ msgstr "non" #: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/10_router.js:101 #: luci-mod-dashboard/htdocs/luci-static/resources/view/dashboard/include/30_wifi.js:65 msgid "yes" -msgstr "oui" +msgstr "Oui" diff --git a/luci-mod-network/Makefile b/luci-mod-network/Makefile index 6148f98b4..71e847f31 100644 --- a/luci-mod-network/Makefile +++ b/luci-mod-network/Makefile @@ -1,10 +1,10 @@ # # Copyright (C) 2008-2014 The LuCI Team -# Copyright (C) 2020-2021 Ycarus (Yannick Chabanois) for OpenMPTCProuter +# Copyright (C) 2020 Ycarus (Yannick Chabanois) for OpenMPTCProuter # # This is free software, licensed under the Apache License, Version 2.0 . # -# From https://github.com/openwrt/luci/commit/b88157e69a060ade618e48b30947729310935d61 +# From https://github.com/openwrt/luci/commit/f5c04e1a2e173f536597f220db0380cc08869e8e include $(TOPDIR)/rules.mk diff --git a/luci-mod-network/htdocs/luci-static/resources/tools/network.js b/luci-mod-network/htdocs/luci-static/resources/tools/network.js deleted file mode 100644 index b08f84058..000000000 --- a/luci-mod-network/htdocs/luci-static/resources/tools/network.js +++ /dev/null @@ -1,917 +0,0 @@ -'use strict'; -'require ui'; -'require dom'; -'require uci'; -'require form'; -'require network'; -'require baseclass'; -'require validation'; -'require tools.widgets as widgets'; - -function validateAddr(section_id, value) { - if (value == '') - return true; - - var ipv6 = /6$/.test(this.section.formvalue(section_id, 'mode')), - addr = ipv6 ? validation.parseIPv6(value) : validation.parseIPv4(value); - - return addr ? true : (ipv6 ? _('Expecting a valid IPv6 address') : _('Expecting a valid IPv4 address')); -} - -function validateQoSMap(section_id, value) { - if (value == '') - return true; - - var m = value.match(/^(\d+):(\d+)$/); - - if (!m || +m[1] > 0xFFFFFFFF || +m[2] > 0xFFFFFFFF) - return _('Expecting two priority values separated by a colon'); - - return true; -} - -function deviceSectionExists(section_id, devname) { - var exists = false; - - uci.sections('network', 'device', function(ss) { - exists = exists || ( - ss['.name'] != section_id && - ss.name == devname - ); - }); - - return exists; -} - -function isBridgePort(dev) { - if (!dev) - return false; - - if (dev.isBridgePort()) - return true; - - var isPort = false; - - uci.sections('network', null, function(s) { - if (s['.type'] != 'interface' && s['.type'] != 'device') - return; - - if (s.type == 'bridge' && L.toArray(s.ifname).indexOf(dev.getName()) > -1) - isPort = true; - }); - - return isPort; -} - -function updateDevBadge(node, dev) { - var type = dev.getType(), - up = dev.getCarrier(); - - dom.content(node, [ - E('img', { - 'class': 'middle', - 'src': L.resource('icons/%s%s.png').format(type, up ? '' : '_disabled') - }), - '\x0a', dev.getName() - ]); - - return node; -} - -function renderDevBadge(dev) { - return updateDevBadge(E('span', { - 'class': 'ifacebadge port-status-device', - 'style': 'font-weight:normal', - 'data-device': dev.getName() - }), dev); -} - -function updatePortStatus(node, dev) { - var carrier = dev.getCarrier(), - duplex = dev.getDuplex(), - speed = dev.getSpeed(), - desc, title; - - if (carrier && speed > 0 && duplex != null) { - desc = '%d%s'.format(speed, duplex == 'full' ? 'FD' : 'HD'); - title = '%s, %d MBit/s, %s'.format(_('Connected'), speed, duplex == 'full' ? _('full-duplex') : _('half-duplex')); - } - else if (carrier) { - desc = _('Connected'); - } - else { - desc = _('no link'); - } - - dom.content(node, [ - E('img', { - 'class': 'middle', - 'src': L.resource('icons/port_%s.png').format(carrier ? 'up' : 'down') - }), - '\x0a', desc - ]); - - if (title) - node.setAttribute('data-tooltip', title); - else - node.removeAttribute('data-tooltip'); - - return node; -} - -function renderPortStatus(dev) { - return updatePortStatus(E('span', { - 'class': 'ifacebadge port-status-link', - 'data-device': dev.getName() - }), dev); -} - -function updatePlaceholders(opt, section_id) { - var dev = network.instantiateDevice(opt.getUIElement(section_id).getValue()); - - for (var i = 0, co; (co = opt.section.children[i]) != null; i++) { - if (co !== opt) { - switch (co.option) { - case 'mtu': - case 'mtu6': - co.getUIElement(section_id).setPlaceholder(dev.getMTU()); - break; - - case 'macaddr': - co.getUIElement(section_id).setPlaceholder(dev.getMAC()); - break; - - case 'txqueuelen': - co.getUIElement(section_id).setPlaceholder(dev._devstate('qlen')); - break; - } - } - } -} - - -var cbiTagValue = form.Value.extend({ - renderWidget: function(section_id, option_index, cfgvalue) { - var widget = new ui.Dropdown(cfgvalue || ['-'], { - '-': E([], [ - E('span', { 'class': 'hide-open', 'style': 'font-family:monospace' }, [ '—' ]), - E('span', { 'class': 'hide-close' }, [ _('Do not participate', 'VLAN port state') ]) - ]), - 'u': E([], [ - E('span', { 'class': 'hide-open', 'style': 'font-family:monospace' }, [ 'u' ]), - E('span', { 'class': 'hide-close' }, [ _('Egress untagged', 'VLAN port state') ]) - ]), - 't': E([], [ - E('span', { 'class': 'hide-open', 'style': 'font-family:monospace' }, [ 't' ]), - E('span', { 'class': 'hide-close' }, [ _('Egress tagged', 'VLAN port state') ]) - ]), - '*': E([], [ - E('span', { 'class': 'hide-open', 'style': 'font-family:monospace' }, [ '*' ]), - E('span', { 'class': 'hide-close' }, [ _('Primary VLAN ID', 'VLAN port state') ]) - ]) - }, { - id: this.cbid(section_id), - sort: [ '-', 'u', 't', '*' ], - optional: false, - multiple: true - }); - - var field = this; - - widget.toggleItem = function(sb, li, force_state) { - var lis = li.parentNode.querySelectorAll('li'), - toggle = ui.Dropdown.prototype.toggleItem; - - toggle.apply(this, [sb, li, force_state]); - - if (force_state != null) - return; - - switch (li.getAttribute('data-value')) - { - case '-': - if (li.hasAttribute('selected')) { - for (var i = 0; i < lis.length; i++) { - switch (lis[i].getAttribute('data-value')) { - case '-': - break; - - case '*': - toggle.apply(this, [sb, lis[i], false]); - lis[i].setAttribute('unselectable', ''); - break; - - default: - toggle.apply(this, [sb, lis[i], false]); - } - } - } - break; - - case 't': - case 'u': - if (li.hasAttribute('selected')) { - for (var i = 0; i < lis.length; i++) { - switch (lis[i].getAttribute('data-value')) { - case li.getAttribute('data-value'): - break; - - case '*': - lis[i].removeAttribute('unselectable'); - break; - - default: - toggle.apply(this, [sb, lis[i], false]); - } - } - } - else { - toggle.apply(this, [sb, li, true]); - } - break; - - case '*': - if (li.hasAttribute('selected')) { - var section_ids = field.section.cfgsections(); - - for (var i = 0; i < section_ids.length; i++) { - var other_widget = field.getUIElement(section_ids[i]), - other_value = L.toArray(other_widget.getValue()); - - if (other_widget === this) - continue; - - var new_value = other_value.filter(function(v) { return v != '*' }); - - if (new_value.length == other_value.length) - continue; - - other_widget.setValue(new_value); - break; - } - } - } - }; - - var node = widget.render(); - - node.style.minWidth = '4em'; - - if (cfgvalue == '-') - node.querySelector('li[data-value="*"]').setAttribute('unselectable', ''); - - return E('div', { 'style': 'display:inline-block' }, node); - }, - - cfgvalue: function(section_id) { - var ports = L.toArray(uci.get('network', section_id, 'ports')); - - for (var i = 0; i < ports.length; i++) { - var s = ports[i].split(/:/); - - if (s[0] != this.port) - continue; - - var t = /t/.test(s[1] || '') ? 't' : 'u'; - - return /\*/.test(s[1] || '') ? [t, '*'] : [t]; - } - - return ['-']; - }, - - write: function(section_id, value) { - var ports = []; - - for (var i = 0; i < this.section.children.length; i++) { - var opt = this.section.children[i]; - - if (opt.port) { - var val = L.toArray(opt.formvalue(section_id)).join(''); - - switch (val) { - case '-': - break; - - case 'u': - ports.push(opt.port); - break; - - default: - ports.push('%s:%s'.format(opt.port, val)); - break; - } - } - } - - uci.set('network', section_id, 'ports', ports); - }, - - remove: function() {} -}); - -return baseclass.extend({ - replaceOption: function(s, tabName, optionClass, optionName, optionTitle, optionDescription) { - var o = s.getOption(optionName); - - if (o) { - if (o.tab) { - s.tabs[o.tab].children = s.tabs[o.tab].children.filter(function(opt) { - return opt.option != optionName; - }); - } - - s.children = s.children.filter(function(opt) { - return opt.option != optionName; - }); - } - - return s.taboption(tabName, optionClass, optionName, optionTitle, optionDescription); - }, - - addDeviceOptions: function(s, dev, isNew) { - var parent_dev = dev ? dev.getParent() : null, - o, ss; - - s.tab('devgeneral', _('General device options')); - s.tab('devadvanced', _('Advanced device options')); - s.tab('brport', _('Bridge port specific options')); - s.tab('bridgevlan', _('Bridge VLAN filtering')); - - o = this.replaceOption(s, 'devgeneral', form.ListValue, 'type', _('Device type')); - o.readonly = !isNew; - o.value('', _('Network device')); - o.value('bridge', _('Bridge device')); - o.value('8021q', _('VLAN (802.1q)')); - o.value('8021ad', _('VLAN (802.1ad)')); - o.value('macvlan', _('MAC VLAN')); - o.value('veth', _('Virtual Ethernet')); - o.validate = function(section_id, value) { - if (value == 'bridge' || value == 'veth') - updatePlaceholders(this.section.getOption('name_complex'), section_id); - - return true; - }; - - o = this.replaceOption(s, 'devgeneral', widgets.DeviceSelect, 'name_simple', _('Existing device')); - o.readonly = !isNew; - o.rmempty = false; - o.noaliases = true; - o.default = (dev ? dev.getName() : ''); - o.ucioption = 'name'; - o.filter = function(section_id, value) { - var dev = network.instantiateDevice(value); - return !deviceSectionExists(section_id, value) && (dev.getType() != 'wifi' || dev.isUp()); - }; - o.validate = function(section_id, value) { - updatePlaceholders(this, section_id); - - return deviceSectionExists(section_id, value) - ? _('A configuration for the device "%s" already exists').format(value) : true; - }; - o.onchange = function(ev, section_id, values) { - updatePlaceholders(this, section_id); - }; - o.depends('type', ''); - - o = this.replaceOption(s, 'devgeneral', widgets.DeviceSelect, 'ifname_single', _('Base device')); - o.readonly = !isNew; - o.rmempty = false; - o.noaliases = true; - o.default = (dev ? dev.getName() : '').match(/^.+\.\d+$/) ? dev.getName().replace(/\.\d+$/, '') : ''; - o.ucioption = 'ifname'; - o.filter = function(section_id, value) { - var dev = network.instantiateDevice(value); - return (dev.getType() != 'wifi' || dev.isUp()); - }; - o.validate = function(section_id, value) { - updatePlaceholders(this, section_id); - - if (isNew) { - var type = this.section.formvalue(section_id, 'type'), - name = this.section.getUIElement(section_id, 'name_complex'); - - if (type == 'macvlan' && value && name && !name.isChanged()) { - var i = 0; - - while (deviceSectionExists(section_id, '%smac%d'.format(value, i))) - i++; - - name.setValue('%smac%d'.format(value, i)); - name.triggerValidation(); - } - } - - return true; - }; - o.onchange = function(ev, section_id, values) { - updatePlaceholders(this, section_id); - }; - o.depends('type', '8021q'); - o.depends('type', '8021ad'); - o.depends('type', 'macvlan'); - - o = this.replaceOption(s, 'devgeneral', form.Value, 'vid', _('VLAN ID')); - o.readonly = !isNew; - o.datatype = 'range(1, 4094)'; - o.rmempty = false; - o.default = (dev ? dev.getName() : '').match(/^.+\.\d+$/) ? dev.getName().replace(/^.+\./, '') : ''; - o.validate = function(section_id, value) { - var base = this.section.formvalue(section_id, 'ifname_single'), - vid = this.section.formvalue(section_id, 'vid'), - name = this.section.getUIElement(section_id, 'name_complex'); - - if (base && vid && name && !name.isChanged()) { - name.setValue('%s.%d'.format(base, vid)); - name.triggerValidation(); - } - - return true; - }; - o.depends('type', '8021q'); - o.depends('type', '8021ad'); - - o = this.replaceOption(s, 'devgeneral', form.ListValue, 'mode', _('Mode')); - o.value('vepa', _('VEPA (Virtual Ethernet Port Aggregator)', 'MACVLAN mode')); - o.value('private', _('Private (Prevent communication between MAC VLANs)', 'MACVLAN mode')); - o.value('bridge', _('Bridge (Support direct communication between MAC VLANs)', 'MACVLAN mode')); - o.value('passthru', _('Pass-through (Mirror physical device to single MAC VLAN)', 'MACVLAN mode')); - o.depends('type', 'macvlan'); - - o = this.replaceOption(s, 'devgeneral', form.Value, 'name_complex', _('Device name')); - o.rmempty = false; - o.datatype = 'maxlength(15)'; - o.readonly = !isNew; - o.ucioption = 'name'; - o.validate = function(section_id, value) { - var dev = network.instantiateDevice(value); - - if (deviceSectionExists(section_id, value) || (isNew && (dev.dev || {}).idx)) - return _('The device name "%s" is already taken').format(value); - - return true; - }; - o.depends({ type: '', '!reverse': true }); - - o = this.replaceOption(s, 'devadvanced', form.DynamicList, 'ingress_qos_mapping', _('Ingress QoS mapping'), _('Defines a mapping of VLAN header priority to the Linux internal packet priority on incoming frames')); - o.rmempty = true; - o.validate = validateQoSMap; - o.depends('type', '8021q'); - o.depends('type', '8021ad'); - - o = this.replaceOption(s, 'devadvanced', form.DynamicList, 'egress_qos_mapping', _('Egress QoS mapping'), _('Defines a mapping of Linux internal packet priority to VLAN header priority but for outgoing frames')); - o.rmempty = true; - o.validate = validateQoSMap; - o.depends('type', '8021q'); - o.depends('type', '8021ad'); - - o = this.replaceOption(s, 'devgeneral', widgets.DeviceSelect, 'ifname_multi', _('Bridge ports')); - o.size = 10; - o.rmempty = true; - o.multiple = true; - o.noaliases = true; - o.nobridges = true; - o.ucioption = 'ports'; - o.default = L.toArray(dev ? dev.getPorts() : null).filter(function(p) { return p.getType() != 'wifi' }).map(function(p) { return p.getName() }); - o.filter = function(section_id, device_name) { - var bridge_name = uci.get('network', section_id, 'name'), - choice_dev = network.instantiateDevice(device_name), - parent_dev = choice_dev.getParent(); - - /* only show wifi networks which are already present in "option ifname" */ - if (choice_dev.getType() == 'wifi') { - var ifnames = L.toArray(uci.get('network', section_id, 'ports')); - - for (var i = 0; i < ifnames.length; i++) - if (ifnames[i] == device_name) - return true; - - return false; - } - - return (!parent_dev || parent_dev.getName() != bridge_name); - }; - o.description = _('Specifies the wired ports to attach to this bridge. In order to attach wireless networks, choose the associated interface as network in the wireless settings.') - o.onchange = function(ev, section_id, values) { - ss.updatePorts(values); - - return ss.parse().then(function() { - ss.redraw(); - }); - }; - o.depends('type', 'bridge'); - - o = this.replaceOption(s, 'devgeneral', form.Flag, 'bridge_empty', _('Bring up empty bridge'), _('Bring up the bridge interface even if no ports are attached')); - o.default = o.disabled; - o.depends('type', 'bridge'); - - o = this.replaceOption(s, 'devadvanced', form.Value, 'priority', _('Priority')); - o.placeholder = '32767'; - o.datatype = 'range(0, 65535)'; - o.depends('type', 'bridge'); - - o = this.replaceOption(s, 'devadvanced', form.Value, 'ageing_time', _('Ageing time'), _('Timeout in seconds for learned MAC addresses in the forwarding database')); - o.placeholder = '30'; - o.datatype = 'uinteger'; - o.depends('type', 'bridge'); - - o = this.replaceOption(s, 'devadvanced', form.Flag, 'stp', _('Enable STP'), _('Enables the Spanning Tree Protocol on this bridge')); - o.default = o.disabled; - o.depends('type', 'bridge'); - - o = this.replaceOption(s, 'devadvanced', form.Value, 'hello_time', _('Hello interval'), _('Interval in seconds for STP hello packets')); - o.placeholder = '2'; - o.datatype = 'range(1, 10)'; - o.depends({ type: 'bridge', stp: '1' }); - - o = this.replaceOption(s, 'devadvanced', form.Value, 'forward_delay', _('Forward delay'), _('Time in seconds to spend in listening and learning states')); - o.placeholder = '15'; - o.datatype = 'range(2, 30)'; - o.depends({ type: 'bridge', stp: '1' }); - - o = this.replaceOption(s, 'devadvanced', form.Value, 'max_age', _('Maximum age'), _('Timeout in seconds until topology updates on link loss')); - o.placeholder = '20'; - o.datatype = 'range(6, 40)'; - o.depends({ type: 'bridge', stp: '1' }); - - - o = this.replaceOption(s, 'devadvanced', form.Flag, 'igmp_snooping', _('Enable IGMP snooping'), _('Enables IGMP snooping on this bridge')); - o.default = o.disabled; - o.depends('type', 'bridge'); - - o = this.replaceOption(s, 'devadvanced', form.Value, 'hash_max', _('Maximum snooping table size')); - o.placeholder = '512'; - o.datatype = 'uinteger'; - o.depends({ type: 'bridge', igmp_snooping: '1' }); - - o = this.replaceOption(s, 'devadvanced', form.Flag, 'multicast_querier', _('Enable multicast querier')); - o.defaults = { '1': [{'igmp_snooping': '1'}], '0': [{'igmp_snooping': '0'}] }; - o.depends('type', 'bridge'); - - o = this.replaceOption(s, 'devadvanced', form.Value, 'robustness', _('Robustness'), _('The robustness value allows tuning for the expected packet loss on the network. If a network is expected to be lossy, the robustness value may be increased. IGMP is robust to (Robustness-1) packet losses')); - o.placeholder = '2'; - o.datatype = 'min(1)'; - o.depends({ type: 'bridge', multicast_querier: '1' }); - - o = this.replaceOption(s, 'devadvanced', form.Value, 'query_interval', _('Query interval'), _('Interval in centiseconds between multicast general queries. By varying the value, an administrator may tune the number of IGMP messages on the subnet; larger values cause IGMP Queries to be sent less often')); - o.placeholder = '12500'; - o.datatype = 'uinteger'; - o.depends({ type: 'bridge', multicast_querier: '1' }); - - o = this.replaceOption(s, 'devadvanced', form.Value, 'query_response_interval', _('Query response interval'), _('The max response time in centiseconds inserted into the periodic general queries. By varying the value, an administrator may tune the burstiness of IGMP messages on the subnet; larger values make the traffic less bursty, as host responses are spread out over a larger interval')); - o.placeholder = '1000'; - o.datatype = 'uinteger'; - o.validate = function(section_id, value) { - var qiopt = L.toArray(this.map.lookupOption('query_interval', section_id))[0], - qival = qiopt ? (qiopt.formvalue(section_id) || qiopt.placeholder) : ''; - - if (value != '' && qival != '' && +value >= +qival) - return _('The query response interval must be lower than the query interval value'); - - return true; - }; - o.depends({ type: 'bridge', multicast_querier: '1' }); - - o = this.replaceOption(s, 'devadvanced', form.Value, 'last_member_interval', _('Last member interval'), _('The max response time in centiseconds inserted into group-specific queries sent in response to leave group messages. It is also the amount of time between group-specific query messages. This value may be tuned to modify the "leave latency" of the network. A reduced value results in reduced time to detect the loss of the last member of a group')); - o.placeholder = '100'; - o.datatype = 'uinteger'; - o.depends({ type: 'bridge', multicast_querier: '1' }); - - o = this.replaceOption(s, 'devgeneral', form.Value, 'mtu', _('MTU')); - o.datatype = 'range(576, 9200)'; - o.validate = function(section_id, value) { - var parent_mtu = (dev && dev.getType() == 'vlan') ? (parent_dev ? parent_dev.getMTU() : null) : null; - - if (parent_mtu !== null && +value > parent_mtu) - return _('The MTU must not exceed the parent device MTU of %d bytes').format(parent_mtu); - - return true; - }; - - o = this.replaceOption(s, 'devgeneral', form.Value, 'macaddr', _('MAC address')); - o.datatype = 'macaddr'; - - o = this.replaceOption(s, 'devgeneral', form.Value, 'peer_name', _('Peer device name')); - o.rmempty = true; - o.datatype = 'maxlength(15)'; - o.depends('type', 'veth'); - o.load = function(section_id) { - var sections = uci.sections('network', 'device'), - idx = 0; - - for (var i = 0; i < sections.length; i++) - if (sections[i]['.name'] == section_id) - break; - else if (sections[i].type == 'veth') - idx++; - - this.placeholder = 'veth%d'.format(idx); - - return form.Value.prototype.load.apply(this, arguments); - }; - - o = this.replaceOption(s, 'devgeneral', form.Value, 'peer_macaddr', _('Peer MAC address')); - o.rmempty = true; - o.datatype = 'macaddr'; - o.depends('type', 'veth'); - - o = this.replaceOption(s, 'devgeneral', form.Value, 'txqueuelen', _('TX queue length')); - o.placeholder = dev ? dev._devstate('qlen') : ''; - o.datatype = 'uinteger'; - - o = this.replaceOption(s, 'devadvanced', form.Flag, 'promisc', _('Enable promiscuous mode')); - o.default = o.disabled; - - o = this.replaceOption(s, 'devadvanced', form.ListValue, 'rpfilter', _('Reverse path filter')); - o.default = ''; - o.value('', _('disabled')); - o.value('loose', _('Loose filtering')); - o.value('strict', _('Strict filtering')); - o.cfgvalue = function(section_id) { - var val = form.ListValue.prototype.cfgvalue.apply(this, [section_id]); - - switch (val || '') { - case 'loose': - case '1': - return 'loose'; - - case 'strict': - case '2': - return 'strict'; - - default: - return ''; - } - }; - - o = this.replaceOption(s, 'devadvanced', form.Flag, 'acceptlocal', _('Accept local'), _('Accept packets with local source addresses')); - o.default = o.disabled; - - o = this.replaceOption(s, 'devadvanced', form.Flag, 'sendredirects', _('Send ICMP redirects')); - o.default = o.enabled; - - o = this.replaceOption(s, 'devadvanced', form.Value, 'neighreachabletime', _('Neighbour cache validity'), _('Time in milliseconds')); - o.placeholder = '30000'; - o.datatype = 'uinteger'; - - o = this.replaceOption(s, 'devadvanced', form.Value, 'neighgcstaletime', _('Stale neighbour cache timeout'), _('Timeout in seconds')); - o.placeholder = '60'; - o.datatype = 'uinteger'; - - o = this.replaceOption(s, 'devadvanced', form.Value, 'neighlocktime', _('Minimum ARP validity time'), _('Minimum required time in seconds before an ARP entry may be replaced. Prevents ARP cache thrashing.')); - o.placeholder = '0'; - o.datatype = 'uinteger'; - - o = this.replaceOption(s, 'devadvanced', form.Value, 'ttl', _('Force TTL'), _('Some LTE providers detect tethering by inspecting packet TTL values')); - o.placeholder = '65'; - o.datatype = 'uinteger'; - - o = this.replaceOption(s, 'devgeneral', form.Flag, 'ipv6', _('Enable IPv6')); - o.migrate = false; - o.default = o.enabled; - - o = this.replaceOption(s, 'devgeneral', form.Value, 'mtu6', _('IPv6 MTU')); - o.datatype = 'max(9200)'; - o.depends('ipv6', '1'); - - o = this.replaceOption(s, 'devgeneral', form.Value, 'dadtransmits', _('DAD transmits'), _('Amount of Duplicate Address Detection probes to send')); - o.placeholder = '1'; - o.datatype = 'uinteger'; - o.depends('ipv6', '1'); - - - o = this.replaceOption(s, 'devadvanced', form.Flag, 'multicast', _('Enable multicast support')); - o.default = o.enabled; - - o = this.replaceOption(s, 'devadvanced', form.ListValue, 'igmpversion', _('Force IGMP version')); - o.value('', _('No enforcement')); - o.value('1', _('Enforce IGMPv1')); - o.value('2', _('Enforce IGMPv2')); - o.value('3', _('Enforce IGMPv3')); - o.depends('multicast', '1'); - - o = this.replaceOption(s, 'devadvanced', form.ListValue, 'mldversion', _('Force MLD version')); - o.value('', _('No enforcement')); - o.value('1', _('Enforce MLD version 1')); - o.value('2', _('Enforce MLD version 2')); - o.depends('multicast', '1'); - - if (isBridgePort(dev)) { - o = this.replaceOption(s, 'brport', form.Flag, 'learning', _('Enable MAC address learning')); - o.default = o.enabled; - - o = this.replaceOption(s, 'brport', form.Flag, 'unicast_flood', _('Enable unicast flooding')); - o.default = o.enabled; - - o = this.replaceOption(s, 'brport', form.Flag, 'isolated', _('Port isolation'), _('Only allow communication with non-isolated bridge ports when enabled')); - o.default = o.disabled; - - o = this.replaceOption(s, 'brport', form.ListValue, 'multicast_router', _('Multicast routing')); - o.value('', _('Never')); - o.value('1', _('Learn')); - o.value('2', _('Always')); - o.depends('multicast', '1'); - - o = this.replaceOption(s, 'brport', form.Flag, 'multicast_to_unicast', _('Multicast to unicast'), _('Forward multicast packets as unicast packets on this device.')); - o.default = o.disabled; - o.depends('multicast', '1'); - - o = this.replaceOption(s, 'brport', form.Flag, 'multicast_fast_leave', _('Enable multicast fast leave')); - o.default = o.disabled; - o.depends('multicast', '1'); - } - - o = this.replaceOption(s, 'bridgevlan', form.Flag, 'vlan_filtering', _('Enable VLAN filtering')); - o.depends('type', 'bridge'); - o.updateDefaultValue = function(section_id) { - var device = uci.get('network', s.section, 'name'), - uielem = this.getUIElement(section_id), - has_vlans = false; - - uci.sections('network', 'bridge-vlan', function(bvs) { - has_vlans = has_vlans || (bvs.device == device); - }); - - this.default = has_vlans ? this.enabled : this.disabled; - - if (uielem && !uielem.isChanged()) - uielem.setValue(this.default); - }; - - o = this.replaceOption(s, 'bridgevlan', form.SectionValue, 'bridge-vlan', form.TableSection, 'bridge-vlan'); - o.depends('type', 'bridge'); - - ss = o.subsection; - ss.addremove = true; - ss.anonymous = true; - - ss.renderHeaderRows = function(/* ... */) { - var node = form.TableSection.prototype.renderHeaderRows.apply(this, arguments); - - node.querySelectorAll('.th').forEach(function(th) { - th.classList.add('left'); - th.classList.add('middle'); - }); - - return node; - }; - - ss.filter = function(section_id) { - var devname = uci.get('network', s.section, 'name'); - return (uci.get('network', section_id, 'device') == devname); - }; - - ss.render = function(/* ... */) { - return form.TableSection.prototype.render.apply(this, arguments).then(L.bind(function(node) { - node.style.overflow = 'auto hidden'; - node.style.paddingTop = '1em'; - - if (this.node) - this.node.parentNode.replaceChild(node, this.node); - - this.node = node; - - return node; - }, this)); - }; - - ss.redraw = function() { - return this.load().then(L.bind(this.render, this)); - }; - - ss.updatePorts = function(ports) { - var devices = ports.map(function(port) { - return network.instantiateDevice(port) - }).filter(function(dev) { - return dev.getType() != 'wifi' || dev.isUp(); - }); - - this.children = this.children.filter(function(opt) { return !opt.option.match(/^port_/) }); - - for (var i = 0; i < devices.length; i++) { - o = ss.option(cbiTagValue, 'port_%s'.format(sfh(devices[i].getName())), renderDevBadge(devices[i]), renderPortStatus(devices[i])); - o.port = devices[i].getName(); - } - - var section_ids = this.cfgsections(), - device_names = devices.reduce(function(names, dev) { names[dev.getName()] = true; return names }, {}); - - for (var i = 0; i < section_ids.length; i++) { - var old_spec = L.toArray(uci.get('network', section_ids[i], 'ports')), - new_spec = old_spec.filter(function(spec) { return device_names[spec.replace(/:[ut*]+$/, '')] }); - - if (old_spec.length != new_spec.length) - uci.set('network', section_ids[i], 'ports', new_spec.length ? new_spec : null); - } - }; - - ss.handleAdd = function(ev) { - return s.parse().then(L.bind(function() { - var device = uci.get('network', s.section, 'name'), - section_ids = this.cfgsections(), - section_id = null, - max_vlan_id = 0; - - if (!device) - return; - - for (var i = 0; i < section_ids.length; i++) { - var vid = +uci.get('network', section_ids[i], 'vlan'); - - if (vid > max_vlan_id) - max_vlan_id = vid; - } - - section_id = uci.add('network', 'bridge-vlan'); - uci.set('network', section_id, 'device', device); - uci.set('network', section_id, 'vlan', max_vlan_id + 1); - - s.children.forEach(function(opt) { - switch (opt.option) { - case 'type': - case 'name_complex': - var input = opt.map.findElement('id', 'widget.%s'.format(opt.cbid(s.section))); - if (input) - input.disabled = true; - break; - } - }); - - s.getOption('vlan_filtering').updateDefaultValue(s.section); - - s.map.addedVLANs = s.map.addedVLANs || []; - s.map.addedVLANs.push(section_id); - - return this.redraw(); - }, this)); - }; - - o = ss.option(form.Value, 'vlan', _('VLAN ID')); - o.datatype = 'range(1, 4094)'; - - o.renderWidget = function(/* ... */) { - var node = form.Value.prototype.renderWidget.apply(this, arguments); - - node.style.width = '5em'; - - return node; - }; - - o.validate = function(section_id, value) { - var section_ids = this.section.cfgsections(); - - for (var i = 0; i < section_ids.length; i++) { - if (section_ids[i] == section_id) - continue; - - if (uci.get('network', section_ids[i], 'vlan') == value) - return _('The VLAN ID must be unique'); - } - - return true; - }; - - o = ss.option(form.Flag, 'local', _('Local')); - o.default = o.enabled; - - var ports = []; - - var seen_ports = {}; - - L.toArray(uci.get('network', s.section, 'ports')).forEach(function(port) { - seen_ports[port] = true; - }); - - uci.sections('network', 'bridge-vlan', function(bvs) { - if (uci.get('network', s.section, 'name') != bvs.device) - return; - - L.toArray(bvs.ports).forEach(function(portspec) { - var m = portspec.match(/^([^:]+)(?::[ut*]+)?$/); - - if (m) - seen_ports[m[1]] = true; - }); - }); - - for (var port_name in seen_ports) - ports.push(port_name); - - ports.sort(function(a, b) { - var m1 = a.match(/^(.+?)([0-9]*)$/), - m2 = b.match(/^(.+?)([0-9]*)$/); - - if (m1[1] < m2[1]) - return -1; - else if (m1[1] > m2[1]) - return 1; - else - return +(m1[2] || 0) - +(m2[2] || 0); - }); - - ss.updatePorts(ports); - }, - - updateDevBadge: updateDevBadge, - updatePortStatus: updatePortStatus -}); diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js index 4dd90cc32..ed2b50866 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/dhcp.js @@ -34,8 +34,8 @@ CBILeaseStatus = form.DummyValue.extend({ E('table', { 'id': 'lease_status_table', 'class': 'table' }, [ E('tr', { 'class': 'tr table-titles' }, [ E('th', { 'class': 'th' }, _('Hostname')), - E('th', { 'class': 'th' }, _('IPv4 address')), - E('th', { 'class': 'th' }, _('MAC address')), + E('th', { 'class': 'th' }, _('IPv4-Address')), + E('th', { 'class': 'th' }, _('MAC-Address')), E('th', { 'class': 'th' }, _('Lease time remaining')) ]), E('tr', { 'class': 'tr placeholder' }, [ @@ -53,7 +53,7 @@ CBILease6Status = form.DummyValue.extend({ E('table', { 'id': 'lease6_status_table', 'class': 'table' }, [ E('tr', { 'class': 'tr table-titles' }, [ E('th', { 'class': 'th' }, _('Host')), - E('th', { 'class': 'th' }, _('IPv6 address')), + E('th', { 'class': 'th' }, _('IPv6-Address')), E('th', { 'class': 'th' }, _('DUID')), E('th', { 'class': 'th' }, _('Lease time remaining')) ]), @@ -279,8 +279,7 @@ return view.extend({ o.optional = true; o.placeholder = '/example.org/10.1.2.3'; - o.validate = validateServerSpec; - + // o.validate = validateServerSpec; o = s.taboption('general', form.DynamicList, 'address', _('Addresses'), _('List of domains to force to an IP address.')); @@ -288,7 +287,6 @@ return view.extend({ o.optional = true; o.placeholder = '/router.local/192.168.0.1'; - o = s.taboption('general', form.Flag, 'rebind_protection', _('Rebind protection'), _('Discard upstream RFC1918 responses')); @@ -409,7 +407,7 @@ return view.extend({ o = s.taboption('leases', form.SectionValue, '__leases__', form.GridSection, 'host', null, _('Static leases are used to assign fixed IP addresses and symbolic hostnames to DHCP clients. They are also required for non-dynamic interface configurations where only hosts with a corresponding lease are served.') + '
' + - _('Use the Add Button to add a new lease entry. The MAC address identifies the host, the IPv4 address specifies the fixed address to use, and the Hostname is assigned as a symbolic name to the requesting host. The optional Lease time can be used to set non-standard host-specific lease time, e.g. 12h, 3d or infinite.')); + _('Use the Add Button to add a new lease entry. The MAC-Address identifies the host, the IPv4-Address specifies the fixed address to use, and the Hostname is assigned as a symbolic name to the requesting host. The optional Lease time can be used to set non-standard host-specific lease time, e.g. 12h, 3d or infinite.')); ss = o.subsection; @@ -450,11 +448,7 @@ return view.extend({ node.addEventListener('cbi-dropdown-change', L.bind(function(ipopt, section_id, ev) { var mac = ev.detail.value.value; - if (mac == null || mac == '' || !hosts[mac]) - return; - - var iphint = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4)[0]; - if (iphint == null) + if (mac == null || mac == '' || !hosts[mac] || !hosts[mac].ipv4) return; var ip = ipopt.formvalue(section_id); @@ -463,35 +457,16 @@ return view.extend({ var node = ipopt.map.findElement('id', ipopt.cbid(section_id)); if (node) - dom.callClassMethod(node, 'setValue', iphint); + dom.callClassMethod(node, 'setValue', hosts[mac].ipv4); }, this, ipopt, section_id)); return node; }; Object.keys(hosts).forEach(function(mac) { - var hint = hosts[mac].name || L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4)[0]; + var hint = hosts[mac].name || hosts[mac].ipv4; so.value(mac, hint ? '%s (%s)'.format(mac, hint) : mac); }); - so.write = function(section, value) { - var ip = this.map.lookupOption('ip', section)[0].formvalue(section); - var hosts = uci.sections('dhcp', 'host'); - var section_removed = false; - - for (var i = 0; i < hosts.length; i++) { - if (ip == hosts[i].ip) { - uci.set('dhcp', hosts[i]['.name'], 'mac', [hosts[i].mac, value].join(' ')); - uci.remove('dhcp', section); - section_removed = true; - break; - } - } - - if (!section_removed) { - uci.set('dhcp', section, 'mac', value); - } - } - so = ss.option(form.Value, 'ip', _('IPv4-Address')); so.datatype = 'or(ip4addr,"ignore")'; so.validate = function(section, value) { @@ -505,21 +480,19 @@ return view.extend({ return true; }; - - var ipaddrs = {}; - Object.keys(hosts).forEach(function(mac) { - var addrs = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4); - - for (var i = 0; i < addrs.length; i++) - ipaddrs[addrs[i]] = hosts[mac].name; + if (hosts[mac].ipv4) { + var hint = hosts[mac].name; + so.value(hosts[mac].ipv4, hint ? '%s (%s)'.format(hosts[mac].ipv4, hint) : hosts[mac].ipv4); + } }); - L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) { - so.value(ipv4, ipaddrs[ipv4] ? '%s (%s)'.format(ipv4, ipaddrs[ipv4]) : ipv4); - }); + so = ss.option(form.Value, 'gw', _('Gateway')); + so.datatype = 'or(ip4addr,"ignore")'; + so.rmempty = true; - so = ss.option(form.Value, 'leasetime', _('Lease time')); + so = ss.option(form.Value, 'leasetime', _('Lease time'), _('The lease time is in minutes (mini 2m), hours (eg 1h) or "infinite"')); + so.placeholder = '12h'; so.rmempty = true; so = ss.option(form.Value, 'duid', _('DUID')); @@ -574,7 +547,7 @@ return view.extend({ exp = '%t'.format(lease.expires); var hint = lease.macaddr ? hosts[lease.macaddr] : null, - name = hint ? (hint.name || L.toArray(hint.ipaddrs || hint.ipv4)[0] || L.toArray(hint.ip6addrs || hint.ipv6)[0]) : null, + name = hint ? (hint.name || hint.ipv4 || hint.ipv6) : null, host = null; if (name && lease.hostname && lease.hostname != name && lease.ip6addr != name) diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js b/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js index 93ebf5ba6..cd0dacbf6 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/hosts.js @@ -31,18 +31,11 @@ return view.extend({ o = s.option(form.Value, 'ip', _('IP address')); o.datatype = 'ipaddr'; o.rmempty = true; - - var ipaddrs = {}; - - Object.keys(hosts).forEach(function(mac) { - var addrs = L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4); - - for (var i = 0; i < addrs.length; i++) - ipaddrs[addrs[i]] = hosts[mac].name || mac; - }); - - L.sortedKeys(ipaddrs, null, 'addr').forEach(function(ipv4) { - o.value(ipv4, '%s (%s)'.format(ipv4, ipaddrs[ipv4])); + L.sortedKeys(hosts, 'ipv4', 'addr').forEach(function(mac) { + o.value(hosts[mac].ipv4, '%s (%s)'.format( + hosts[mac].ipv4, + hosts[mac].name || mac + )); }); return m.render(); diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js b/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js index ff179d404..9944c0920 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/interfaces.js @@ -9,7 +9,6 @@ 'require network'; 'require firewall'; 'require tools.widgets as widgets'; -'require tools.network as nettools'; var isReadonlyView = !L.hasViewPermission() || null; @@ -77,6 +76,7 @@ function render_status(node, ifc, with_device) { macaddr = maindev ? maindev.getMAC() : null; return L.itemlist(node, [ + _('Label'), ifc.get('label'), _('Protocol'), with_device ? null : (desc || '?'), _('Device'), with_device ? (maindev ? maindev.getShortName() : E('em', _('Not present'))) : null, _('Uptime'), (!changecount && ifc.isUp()) ? '%t'.format(ifc.getUptime()) : null, @@ -128,7 +128,7 @@ function render_modal_status(node, ifc) { function render_ifacebox_status(node, ifc) { var dev = ifc.getL3Device() || ifc.getDevice(), - subdevs = dev ? dev.getPorts() : null, + subdevs = ifc.getDevices(), c = [ render_iface(dev, ifc.isAlias()) ]; if (subdevs && subdevs.length) { @@ -228,39 +228,6 @@ function get_netmask(s, use_cfgvalue) { return subnetmask; } -var cbiRichListValue = form.ListValue.extend({ - renderWidget: function(section_id, option_index, cfgvalue) { - var choices = this.transformChoices(); - var widget = new ui.Dropdown((cfgvalue != null) ? cfgvalue : this.default, choices, { - id: this.cbid(section_id), - sort: this.keylist, - optional: true, - select_placeholder: this.select_placeholder || this.placeholder, - custom_placeholder: this.custom_placeholder || this.placeholder, - validate: L.bind(this.validate, this, section_id), - disabled: (this.readonly != null) ? this.readonly : this.map.readonly - }); - - return widget.render(); - }, - - value: function(value, title, description) { - if (description) { - form.ListValue.prototype.value.call(this, value, E([], [ - E('span', { 'class': 'hide-open' }, [ title ]), - E('div', { 'class': 'hide-close', 'style': 'min-width:25vw' }, [ - E('strong', [ title ]), - E('br'), - E('span', { 'style': 'white-space:normal' }, description) - ]) - ])); - } - else { - form.ListValue.prototype.value.call(this, value, title); - } - } -}); - return view.extend({ poll_status: function(map, networks) { var resolveZone = null; @@ -319,142 +286,20 @@ return view.extend({ btn2.disabled = isReadonlyView || btn1.classList.contains('spinning') || btn2.classList.contains('spinning') || dynamic || disabled; } - document.querySelectorAll('.port-status-device[data-device]').forEach(function(node) { - nettools.updateDevBadge(node, network.instantiateDevice(node.getAttribute('data-device'))); - }); - - document.querySelectorAll('.port-status-link[data-device]').forEach(function(node) { - nettools.updatePortStatus(node, network.instantiateDevice(node.getAttribute('data-device'))); - }); - return Promise.all([ resolveZone, network.flushCache() ]); }, load: function() { return Promise.all([ network.getDSLModemType(), - network.getDevices(), - fs.lines('/etc/iproute2/rt_tables'), - L.resolveDefault(fs.read('/usr/lib/opkg/info/netifd.control')), uci.changes() ]); }, - interfaceBridgeWithIfnameSections: function() { - return uci.sections('network', 'interface').filter(function(ns) { - return ns.type == 'bridge' && !ns.ports && ns.ifname; - }); - }, - - deviceWithIfnameSections: function() { - return uci.sections('network', 'device').filter(function(ns) { - return ns.type == 'bridge' && !ns.ports && ns.ifname; - }); - }, - - interfaceWithIfnameSections: function() { - return uci.sections('network', 'interface').filter(function(ns) { - return !ns.device && ns.ifname; - }); - }, - - handleBridgeMigration: function(ev) { - var tasks = []; - - this.interfaceBridgeWithIfnameSections().forEach(function(ns) { - var device_name = 'br-' + ns['.name']; - - tasks.push(uci.callAdd('network', 'device', null, { - 'name': device_name, - 'type': 'bridge', - 'ports': L.toArray(ns.ifname), - 'mtu': ns.mtu, - 'macaddr': ns.macaddr, - 'igmp_snooping': ns.igmp_snooping - })); - - tasks.push(uci.callSet('network', ns['.name'], { - 'type': '', - 'ifname': '', - 'mtu': '', - 'macaddr': '', - 'igmp_snooping': '', - 'device': device_name - })); - }); - - return Promise.all(tasks) - .then(L.bind(ui.changes.init, ui.changes)) - .then(L.bind(ui.changes.apply, ui.changes)); - }, - - renderBridgeMigration: function() { - ui.showModal(_('Network bridge configuration migration'), [ - E('p', _('The existing network configuration needs to be changed for LuCI to function properly.')), - E('p', _('Upon pressing "Continue", bridges configuration will be updated and the network will be restarted to apply the updated configuration.')), - E('div', { 'class': 'right' }, - E('button', { - 'class': 'btn cbi-button-action important', - 'click': ui.createHandlerFn(this, 'handleBridgeMigration') - }, _('Continue'))) - ]); - }, - - handleIfnameMigration: function(ev) { - var tasks = []; - - this.deviceWithIfnameSections().forEach(function(ds) { - tasks.push(uci.callSet('network', ds['.name'], { - 'ifname': '', - 'ports': L.toArray(ds.ifname) - })); - }); - - this.interfaceWithIfnameSections().forEach(function(ns) { - tasks.push(uci.callSet('network', ns['.name'], { - 'ifname': '', - 'device': ns.ifname - })); - }); - - return Promise.all(tasks) - .then(L.bind(ui.changes.init, ui.changes)) - .then(L.bind(ui.changes.apply, ui.changes)); - }, - - renderIfnameMigration: function() { - ui.showModal(_('Network ifname configuration migration'), [ - E('p', _('The existing network configuration needs to be changed for LuCI to function properly.')), - E('p', _('Upon pressing "Continue", ifname options will get renamed and the network will be restarted to apply the updated configuration.')), - E('div', { 'class': 'right' }, - E('button', { - 'class': 'btn cbi-button-action important', - 'click': ui.createHandlerFn(this, 'handleIfnameMigration') - }, _('Continue'))) - ]); - }, - render: function(data) { - var netifdVersion = (data[3] || '').match(/Version: ([^\n]+)/); - - if (netifdVersion && netifdVersion[1] >= "2021-05-26") { - if (this.interfaceBridgeWithIfnameSections().length) - return this.renderBridgeMigration(); - else if (this.deviceWithIfnameSections().length || this.interfaceWithIfnameSections().length) - return this.renderIfnameMigration(); - } - var dslModemType = data[0], - netDevs = data[1], m, s, o; - var rtTables = data[2].map(function(l) { - var m = l.trim().match(/^(\d+)\s+(\S+)$/); - return m ? [ +m[1], m[2] ] : null; - }).filter(function(e) { - return e && e[0] > 0; - }); - m = new form.Map('network'); m.tabbed = true; m.chain('dhcp'); @@ -477,8 +322,6 @@ return view.extend({ s.tab('general', _('General Settings')); s.tab('advanced', _('Advanced Settings')); s.tab('physical', _('Physical Settings')); - s.tab('brport', _('Bridge port specific options')); - s.tab('bridgevlan', _('Bridge VLAN filtering')); s.tab('firewall', _('Firewall Settings')); s.tab('dhcp', _('DHCP Server')); @@ -526,7 +369,7 @@ return view.extend({ s.addModalOptions = function(s) { var protoval = uci.get('network', s.section, 'proto'), protoclass = protoval ? network.getProtocol(protoval) : null, - o, proto_select, proto_switch, type, stp, igmp, ss, so; + o, ifname_single, ifname_multi, ifname_master, proto_select, proto_switch, type, stp, igmp, ss, so; if (!protoval) return; @@ -550,6 +393,9 @@ return view.extend({ }, this); o.write = function() {}; + o = s.taboption('general', form.Value, 'label', _('Label')); + o.modalonly = true; + o.optional = true; proto_select = s.taboption('general', form.ListValue, 'proto', _('Protocol')); proto_select.modalonly = true; @@ -566,16 +412,170 @@ return view.extend({ .then(L.bind(this.renderMoreOptionsModal, this, s.section)); }, this); - o = s.taboption('general', widgets.DeviceSelect, '_net_device', _('Device')); - o.ucioption = 'device'; - o.nobridges = false; - o.optional = false; - o.network = ifc.getName(); - o = s.taboption('general', form.Flag, 'auto', _('Bring up on boot')); o.modalonly = true; o.default = o.enabled; + type = s.taboption('physical', form.ListValue, 'type', _('Type')); + type.value('',_('Normal')); + type.value('bridge',_('Bridge')); + type.value('macvlan',_('MacVLAN')); + type.write = type.remove = function(section_id, value) { + var protocol = network.getProtocol(proto_select.formvalue(section_id)), + ifnameopt = this.section.children.filter(function(o) { + if (value == 'bridge') + return o.option == 'ifname_multi'; + else if (value == 'macvlan') + return o.option == 'ifname_master'; + else + return o.option == 'ifname_single'; + })[0]; + + if (!protocol.isVirtual() && !this.isActive(section_id)) + return; + + var old_ifnames = [], + devs = ifc.getDevices() || L.toArray(ifc.getDevice()); + + for (var i = 0; i < devs.length; i++) + old_ifnames.push(devs[i].getName()); + + var new_ifnames = L.toArray(ifnameopt.formvalue(section_id)); + + if (!value) + new_ifnames.length = Math.max(new_ifnames.length, 1); + + old_ifnames.sort(); + new_ifnames.sort(); + + for (var i = 0; i < Math.max(old_ifnames.length, new_ifnames.length); i++) { + if (old_ifnames[i] != new_ifnames[i]) { + // backup_ifnames() + for (var j = 0; j < old_ifnames.length; j++) + ifc.deleteDevice(old_ifnames[j]); + + for (var j = 0; j < new_ifnames.length; j++) + ifc.addDevice(new_ifnames[j]); + + break; + } + } + + if (value) + uci.set('network', section_id, 'type', value); + else + uci.unset('network', section_id, 'type'); + }; + + o = s.taboption('advanced', form.Value, 'ip6assign', _('IPv6 assignment length'), _('Assign a part of given length of every public IPv6-prefix to this interface')); + o.value('', _('disabled')); + o.value('64'); + o.datatype = 'max(64)'; + + o = s.taboption('advanced', form.Value, 'ip6hint', _('IPv6 assignment hint'), _('Assign prefix parts using this hexadecimal subprefix ID for this interface.')); + o.placeholder = '0'; + o.validate = function(section_id, value) { + if (value == null || value == '') + return true; + var n = parseInt(value, 16); + if (!/^(0x)?[0-9a-fA-F]+$/.test(value) || isNaN(n) || n >= 0xffffffff) + return _('Expecting a hexadecimal assignment hint'); + return true; + }; + + for (var i = 33; i <= 64; i++) + o.depends('ip6assign', String(i)); + + o = s.taboption('advanced', form.DynamicList, 'ip6addr', _('IPv6 address')); + o.datatype = 'ip6addr'; + o.placeholder = _('Add IPv6 address…'); + o.depends('ip6assign', ''); + + o = s.taboption('advanced', form.Value, 'ip6gw', _('IPv6 gateway')); + o.datatype = 'ip6addr("nomask")'; + o.depends('ip6assign', ''); + + o = s.taboption('advanced', form.Value, 'ip6prefix', _('IPv6 routed prefix'), _('Public prefix routed to this device for distribution to clients.')); + o.datatype = 'ip6addr'; + o.depends('ip6assign', ''); + + o = s.taboption('advanced', form.Value, 'ip6ifaceid', _('IPv6 suffix'), _("Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or '::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') for the interface.")); + o.datatype = 'ip6hostid'; + o.placeholder = '::1'; + + stp = s.taboption('physical', form.Flag, 'stp', _('Enable STP'), _('Enables the Spanning Tree Protocol on this bridge')); + + igmp = s.taboption('physical', form.Flag, 'igmp_snooping', _('Enable IGMP snooping'), _('Enables IGMP snooping on this bridge')); + + ifname_master = s.taboption('physical', widgets.DeviceSelect, 'ifname_master', _('Base interface')); + ifname_master.nobridges = true; + ifname_master.noaliases = true; + ifname_master.optional = false; + ifname_master.modalonly = true; + ifname_master.network = ifc.getName(); + //ifname_master.write = ifname_master.remove = function() {}; + ifname_master.ucioption = 'masterintf'; + //ifname_master.cfgvalue = function(section_id) { + // return uci.get('network', section_id, 'masterintf'); + //}; + //ifname_master.write = function(section_id, value) { + // uci.set('network', section_id, 'masterintf', value); + //}; + + ifname_single = s.taboption('physical', widgets.DeviceSelect, 'ifname_single', _('Interface')); + ifname_single.nobridges = ifc.isBridge(); + ifname_single.noaliases = false; + ifname_single.optional = false; + ifname_single.network = ifc.getName(); + ifname_single.write = ifname_single.remove = function() {}; + + ifname_multi = s.taboption('physical', widgets.DeviceSelect, 'ifname_multi', _('Interface')); + ifname_multi.nobridges = ifc.isBridge(); + ifname_multi.noaliases = true; + ifname_multi.multiple = true; + ifname_multi.optional = true; + ifname_multi.network = ifc.getName(); + ifname_multi.display_size = 6; + ifname_multi.write = ifname_multi.remove = function(section_id, value) { + var old_ifnames = [], + devs = ifc.getDevices() || L.toArray(ifc.getDevice()); + + for (var i = 0; i < devs.length; i++) + old_ifnames.push(devs[i].getName()); + + var new_ifnames = L.toArray(value); + + if (value == null) + return; + + old_ifnames.sort(); + new_ifnames.sort(); + + for (var i = 0; i < Math.max(old_ifnames.length, new_ifnames.length); i++) { + if (old_ifnames[i] != new_ifnames[i]) { + // backup_ifnames() + for (var j = 0; j < old_ifnames.length; j++) + ifc.deleteDevice(old_ifnames[j]); + + for (var j = 0; j < new_ifnames.length; j++) + ifc.addDevice(new_ifnames[j]); + + break; + } + } + }; + + + ifname_single.cfgvalue = ifname_multi.cfgvalue = function(section_id) { + var devs = ifc.getDevices() || L.toArray(ifc.getDevice()), + ifnames = []; + + for (var i = 0; i < devs.length; i++) + ifnames.push(devs[i].getName()); + + return ifnames; + }; + if (L.hasSystemFeature('firewall')) { o = s.taboption('firewall', widgets.ZoneSelect, '_zone', _('Create / Assign firewall-zone'), _('Choose the firewall zone you want to assign to this interface. Select unspecified to remove the interface from the associated zone or fill out the custom field to define a new zone and attach the interface to it.')); o.network = ifc.getName(); @@ -619,10 +619,31 @@ return view.extend({ if (protocols[i].getProtocol() != uci.get('network', s.section, 'proto')) proto_switch.depends('proto', protocols[i].getProtocol()); + + if (!protocols[i].isVirtual()) { + type.depends('proto', protocols[i].getProtocol()); + stp.depends({ type: 'bridge', proto: protocols[i].getProtocol() }); + igmp.depends({ type: 'bridge', proto: protocols[i].getProtocol() }); + ifname_single.depends({ type: '', proto: protocols[i].getProtocol() }); + ifname_master.depends({ type: 'macvlan', proto: protocols[i].getProtocol() }); + ifname_multi.depends({ type: 'bridge', proto: protocols[i].getProtocol() }); + } } + o = s.taboption('advanced', form.ListValue, 'multipath', _('Multipath setting'), _('Only one interface must be set as Master.')); + o.value('on',_('Enabled')); + o.value('off',_('Disabled')); + o.value('master',_('Master')); + o.value('backup',_('Backup')); + o.default = 'off'; + + o = s.taboption('advanced', form.Value, 'addlatency', _('Additional latency')); + o.datatype = 'uinteger'; + o.default = '0'; + if (L.hasSystemFeature('dnsmasq') || L.hasSystemFeature('odhcpd')) { o = s.taboption('dhcp', form.SectionValue, '_dhcp', form.TypedSection, 'dhcp'); + o.depends('proto', 'static'); ss = o.subsection; ss.uciconfig = 'dhcp'; @@ -632,7 +653,6 @@ return view.extend({ ss.tab('general', _('General Setup')); ss.tab('advanced', _('Advanced Settings')); ss.tab('ipv6', _('IPv6 Settings')); - ss.tab('ipv6-ra', _('IPv6 RA Settings')); ss.filter = function(section_id) { return (uci.get('dhcp', section_id, 'interface') == ifc.getName()); @@ -648,15 +668,9 @@ return view.extend({ this.map.save(function() { uci.add('dhcp', 'dhcp', section_id); uci.set('dhcp', section_id, 'interface', section_id); - - if (protoval == 'static') { - uci.set('dhcp', section_id, 'start', 100); - uci.set('dhcp', section_id, 'limit', 150); - uci.set('dhcp', section_id, 'leasetime', '12h'); - } - else { - uci.set('dhcp', section_id, 'ignore', 1); - } + uci.set('dhcp', section_id, 'start', 100); + uci.set('dhcp', section_id, 'limit', 150); + uci.set('dhcp', section_id, 'leasetime', '12h'); }); }, ifc.getName()) }, _('Setup DHCP Server')) @@ -665,389 +679,108 @@ return view.extend({ ss.taboption('general', form.Flag, 'ignore', _('Ignore interface'), _('Disable DHCP for this interface.')); - if (protoval == 'static') { - so = ss.taboption('general', form.Value, 'start', _('Start'), _('Lowest leased address as offset from the network address.')); - so.optional = true; - so.datatype = 'or(uinteger,ip4addr("nomask"))'; - so.default = '100'; + so = ss.taboption('general', form.Value, 'start', _('Start'), _('Lowest leased address as offset from the network address.')); + so.optional = true; + so.datatype = 'or(uinteger,ip4addr("nomask"))'; + so.default = '100'; - so = ss.taboption('general', form.Value, 'limit', _('Limit'), _('Maximum number of leased addresses.')); - so.optional = true; - so.datatype = 'uinteger'; - so.default = '150'; + so = ss.taboption('general', form.Value, 'limit', _('Limit'), _('Maximum number of leased addresses.')); + so.optional = true; + so.datatype = 'uinteger'; + so.default = '150'; - so = ss.taboption('general', form.Value, 'leasetime', _('Lease time'), _('Expiry time of leased addresses, minimum is 2 minutes (2m).')); - so.optional = true; - so.default = '12h'; + so = ss.taboption('general', form.Value, 'leasetime', _('Lease time'), _('Expiry time of leased addresses, minimum is 2 minutes (2m).')); + so.optional = true; + so.default = '12h'; - so = ss.taboption('advanced', form.Flag, 'dynamicdhcp', _('Dynamic DHCP'), _('Dynamically allocate DHCP addresses for clients. If disabled, only clients having static leases will be served.')); - so.default = so.enabled; + so = ss.taboption('advanced', form.Flag, 'dynamicdhcp', _('Dynamic DHCP'), _('Dynamically allocate DHCP addresses for clients. If disabled, only clients having static leases will be served.')); + so.default = so.enabled; - ss.taboption('advanced', form.Flag, 'force', _('Force'), _('Force DHCP on this network even if another server is detected.')); + ss.taboption('advanced', form.Flag, 'force', _('Force'), _('Force DHCP on this network even if another server is detected.')); - // XXX: is this actually useful? - //ss.taboption('advanced', form.Value, 'name', _('Name'), _('Define a name for this network.')); + // XXX: is this actually useful? + //ss.taboption('advanced', form.Value, 'name', _('Name'), _('Define a name for this network.')); - so = ss.taboption('advanced', form.Value, 'netmask', _('IPv4-Netmask'), _('Override the netmask sent to clients. Normally it is calculated from the subnet that is served.')); - so.optional = true; - so.datatype = 'ip4addr'; + so = ss.taboption('advanced', form.Value, 'netmask', _('IPv4-Netmask'), _('Override the netmask sent to clients. Normally it is calculated from the subnet that is served.')); + so.optional = true; + so.datatype = 'ip4addr'; - so.render = function(option_index, section_id, in_table) { - this.placeholder = get_netmask(s, true); - return form.Value.prototype.render.apply(this, [ option_index, section_id, in_table ]); - }; - - so.validate = function(section_id, value) { - var uielem = this.getUIElement(section_id); - if (uielem) - uielem.setPlaceholder(get_netmask(s, false)); - return form.Value.prototype.validate.apply(this, [ section_id, value ]); - }; - - ss.taboption('advanced', form.DynamicList, 'dhcp_option', _('DHCP-Options'), _('Define additional DHCP options, for example "6,192.168.2.1,192.168.2.2" which advertises different DNS servers to clients.')); - } - - - var has_other_master = uci.sections('dhcp', 'dhcp').filter(function(s) { - return (s.interface != ifc.getName() && s.master == '1'); - })[0]; - - so = ss.taboption('ipv6', form.Flag , 'master', _('Designated master')); - so.readonly = has_other_master ? true : false; - so.description = has_other_master - ? _('Interface "%h" is already marked as designated master.').format(has_other_master.interface || has_other_master['.name']) - : _('Set this interface as master for RA and DHCPv6 relaying as well as NDP proxying.') - ; + so.render = function(option_index, section_id, in_table) { + this.placeholder = get_netmask(s, true); + return form.Value.prototype.render.apply(this, [ option_index, section_id, in_table ]); + }; so.validate = function(section_id, value) { - var hybrid_downstream_desc = _('Operate in relay mode if a designated master interface is configured and active, otherwise fall back to server mode.'), - ndp_downstream_desc = _('Operate in relay mode if a designated master interface is configured and active, otherwise disable NDP proxying.'), - hybrid_master_desc = _('Operate in relay mode if an upstream IPv6 prefix is present, otherwise disable service.'), - checked = this.formvalue(section_id), - dhcpv6 = this.section.getOption('dhcpv6').getUIElement(section_id), - ndp = this.section.getOption('ndp').getUIElement(section_id), - ra = this.section.getOption('ra').getUIElement(section_id); - - if (checked == '1' || protoval != 'static') { - dhcpv6.node.querySelector('li[data-value="server"]').setAttribute('unselectable', ''); - - if (dhcpv6.getValue() == 'server') - dhcpv6.setValue('hybrid'); - - ra.node.querySelector('li[data-value="server"]').setAttribute('unselectable', ''); - - if (ra.getValue() == 'server') - ra.setValue('hybrid'); - } - - if (checked == '1') { - dhcpv6.node.querySelector('li[data-value="hybrid"] > div > span').innerHTML = hybrid_master_desc; - ra.node.querySelector('li[data-value="hybrid"] > div > span').innerHTML = hybrid_master_desc; - ndp.node.querySelector('li[data-value="hybrid"] > div > span').innerHTML = hybrid_master_desc; - } - else { - if (protoval == 'static') { - dhcpv6.node.querySelector('li[data-value="server"]').removeAttribute('unselectable'); - ra.node.querySelector('li[data-value="server"]').removeAttribute('unselectable'); - } - - dhcpv6.node.querySelector('li[data-value="hybrid"] > div > span').innerHTML = hybrid_downstream_desc; - ra.node.querySelector('li[data-value="hybrid"] > div > span').innerHTML = hybrid_downstream_desc; - ndp.node.querySelector('li[data-value="hybrid"] > div > span').innerHTML = ndp_downstream_desc ; - } - - return true; + var uielem = this.getUIElement(section_id); + if (uielem) + uielem.setPlaceholder(get_netmask(s, false)); + return form.Value.prototype.validate.apply(this, [ section_id, value ]); }; + ss.taboption('advanced', form.DynamicList, 'dhcp_option', _('DHCP-Options'), _('Define additional DHCP options, for example "6,192.168.2.1,192.168.2.2" which advertises different DNS servers to clients.')); - so = ss.taboption('ipv6', cbiRichListValue, 'ra', _('RA-Service'), - _('Configures the operation mode of the RA service on this interface.')); - so.value('', _('disabled'), - _('Do not send any RA messages on this interface.')); - so.value('server', _('server mode'), - _('Send RA messages advertising this device as IPv6 router.')); - so.value('relay', _('relay mode'), - _('Forward RA messages received on the designated master interface to downstream interfaces.')); - so.value('hybrid', _('hybrid mode'), ' '); + for (var i = 0; i < ss.children.length; i++) + if (ss.children[i].option != 'ignore') + ss.children[i].depends('ignore', '0'); + so = ss.taboption('ipv6', form.ListValue, 'ra', _('Router Advertisement-Service')); + so.value('', _('disabled')); + so.value('server', _('server mode')); + so.value('relay', _('relay mode')); + so.value('hybrid', _('hybrid mode')); - so = ss.taboption('ipv6-ra', cbiRichListValue, 'ra_default', _('Default router'), - _('Configures the default router advertisement in RA messages.')); - so.value('', _('automatic'), - _('Announce this device as default router if a local IPv6 default route is present.')); - so.value('1', _('on available prefix'), - _('Announce this device as default router if a public IPv6 prefix is available, regardless of local default route availability.')); - so.value('2', _('forced'), - _('Announce this device as default router regardless of whether a prefix or default route is present.')); - so.depends('ra', 'server'); - so.depends({ ra: 'hybrid', master: '0' }); + so = ss.taboption('ipv6', form.ListValue, 'dhcpv6', _('DHCPv6-Service')); + so.value('', _('disabled')); + so.value('server', _('server mode')); + so.value('relay', _('relay mode')); + so.value('hybrid', _('hybrid mode')); - so = ss.taboption('ipv6-ra', form.Flag, 'ra_slaac', _('Enable SLAAC'), - _('Set the autonomous address-configuration flag in the prefix information options of sent RA messages. When enabled, clients will perform stateless IPv6 address autoconfiguration.')); - so.default = so.enabled; - so.depends('ra', 'server'); - so.depends({ ra: 'hybrid', master: '0' }); + so = ss.taboption('ipv6', form.ListValue, 'ndp', _('NDP-Proxy')); + so.value('', _('disabled')); + so.value('relay', _('relay mode')); + so.value('hybrid', _('hybrid mode')); - so = ss.taboption('ipv6-ra', cbiRichListValue, 'ra_flags', _('RA Flags'), - _('Specifies the flags sent in RA messages, for example to instruct clients to request further information via stateful DHCPv6.')); - so.value('managed-config', _('managed config (M)'), - _('The Managed address configuration (M) flag indicates that IPv6 addresses are available via DHCPv6.')); - so.value('other-config', _('other config (O)'), - _('The Other configuration (O) flag indicates that other information, such as DNS servers, is available via DHCPv6.')); - so.value('home-agent', _('mobile home agent (H)'), - _('The Mobile IPv6 Home Agent (H) flag indicates that the device is also acting as Mobile IPv6 home agent on this link.')); - so.multiple = true; - so.select_placeholder = _('none'); - so.depends('ra', 'server'); - so.depends({ ra: 'hybrid', master: '0' }); - so.cfgvalue = function(section_id) { - var flags = L.toArray(uci.get('dhcp', section_id, 'ra_flags')); - return flags.length ? flags : [ 'other-config' ]; - }; - so.remove = function(section_id) { - uci.set('dhcp', section_id, 'ra_flags', [ 'none' ]); - }; + so = ss.taboption('ipv6', form.Flag , 'master', _('Master'), _('Set this interface as master for the dhcpv6 relay.')); + so.depends('dhcpv6', 'relay'); + so.depends('dhcpv6', 'hybrid'); - so = ss.taboption('ipv6-ra', form.Value, 'ra_maxinterval', _('Max RA interval'), _('Maximum time allowed between sending unsolicited RA. Default is 600 seconds.')); - so.optional = true; - so.datatype = 'uinteger'; - so.placeholder = '600'; - so.depends('ra', 'server'); - so.depends({ ra: 'hybrid', master: '0' }); - - so = ss.taboption('ipv6-ra', form.Value, 'ra_mininterval', _('Min RA interval'), _('Minimum time allowed between sending unsolicited RA. Default is 200 seconds.')); - so.optional = true; - so.datatype = 'uinteger'; - so.placeholder = '200'; - so.depends('ra', 'server'); - so.depends({ ra: 'hybrid', master: '0' }); - - so = ss.taboption('ipv6-ra', form.Value, 'ra_lifetime', _('RA Lifetime'), _('Router Lifetime published in RA messages. Maximum is 9000 seconds.')); - so.optional = true; - so.datatype = 'range(0, 9000)'; - so.placeholder = '1800'; - so.depends('ra', 'server'); - so.depends({ ra: 'hybrid', master: '0' }); - - so = ss.taboption('ipv6-ra', form.Value, 'ra_mtu', _('RA MTU'), _('The MTU to be published in RA messages. Minimum is 1280 bytes.')); - so.optional = true; - so.datatype = 'range(1280, 65535)'; - so.depends('ra', 'server'); - so.depends({ ra: 'hybrid', master: '0' }); - so.load = function(section_id) { - var dev = ifc.getL3Device(); - - if (dev) { - var path = "/proc/sys/net/ipv6/conf/%s/mtu".format(dev.getName()); - - return L.resolveDefault(fs.read(path), dev.getMTU()).then(L.bind(function(data) { - this.placeholder = data; - }, this)); - } - }; - - so = ss.taboption('ipv6-ra', form.Value, 'ra_hoplimit', _('RA Hop Limit'), _('The maximum hops to be published in RA messages. Maximum is 255 hops.')); - so.optional = true; - so.datatype = 'range(0, 255)'; - so.depends('ra', 'server'); - so.depends({ ra: 'hybrid', master: '0' }); - so.load = function(section_id) { - var dev = ifc.getL3Device(); - - if (dev) { - var path = "/proc/sys/net/ipv6/conf/%s/hop_limit".format(dev.getName()); - - return L.resolveDefault(fs.read(path), 64).then(L.bind(function(data) { - this.placeholder = data; - }, this)); - } - }; - - - so = ss.taboption('ipv6', cbiRichListValue, 'dhcpv6', _('DHCPv6-Service'), - _('Configures the operation mode of the DHCPv6 service on this interface.')); - so.value('', _('disabled'), - _('Do not offer DHCPv6 service on this interface.')); - so.value('server', _('server mode'), - _('Provide a DHCPv6 server on this interface and reply to DHCPv6 solicitations and requests.')); - so.value('relay', _('relay mode'), - _('Forward DHCPv6 messages between the designated master interface and downstream interfaces.')); - so.value('hybrid', _('hybrid mode'), ' '); - - - so = ss.taboption('ipv6', form.DynamicList, 'dns', _('Announced IPv6 DNS servers'), - _('Specifies a fixed list of IPv6 DNS server addresses to announce via DHCPv6. If left unspecified, the device will announce itself as IPv6 DNS server unless the Local IPv6 DNS server option is disabled.')); - so.datatype = 'ip6addr("nomask")'; /* restrict to IPv6 only for now since dnsmasq (DHCPv4) does not honour this option */ + so = ss.taboption('ipv6', form.ListValue, 'ra_management', _('DHCPv6-Mode'), _('Default is stateless + stateful')); + so.value('0', _('stateless')); + so.value('1', _('stateless + stateful')); + so.value('2', _('stateful-only')); so.depends('dhcpv6', 'server'); - so.depends({ dhcpv6: 'hybrid', master: '0' }); + so.depends('dhcpv6', 'hybrid'); + so.default = '1'; - so = ss.taboption('ipv6', form.Flag, 'dns_service', _('Local IPv6 DNS server'), - _('Announce this device as IPv6 DNS server.')); - so.default = so.enabled; - so.depends({ dhcpv6: 'server', dns: /^$/ }); - so.depends({ dhcpv6: 'hybrid', dns: /^$/, master: '0' }); + so = ss.taboption('ipv6', form.Flag, 'ra_default', _('Always announce default router'), _('Announce as default router even if no public prefix is available.')); + so.depends('ra', 'server'); + so.depends('ra', 'hybrid'); - so = ss.taboption('ipv6', form.DynamicList, 'domain', _('Announced DNS domains'), - _('Specifies a fixed list of DNS search domains to announce via DHCPv6. If left unspecified, the local device DNS search domain will be announced.')); - so.datatype = 'hostname'; - so.depends('dhcpv6', 'server'); - so.depends({ dhcpv6: 'hybrid', master: '0' }); - - - so = ss.taboption('ipv6', cbiRichListValue, 'ndp', _('NDP-Proxy'), - _('Configures the operation mode of the NDP proxy service on this interface.')); - so.value('', _('disabled'), - _('Do not proxy any NDP packets.')); - so.value('relay', _('relay mode'), - _('Forward NDP NS and NA messages between the designated master interface and downstream interfaces.')); - so.value('hybrid', _('hybrid mode'), ' '); - - - so = ss.taboption('ipv6', form.Flag, 'ndproxy_routing', _('Learn routes'), _('Setup routes for proxied IPv6 neighbours.')); - so.default = so.enabled; - so.depends('ndp', 'relay'); - so.depends('ndp', 'hybrid'); - - so = ss.taboption('ipv6', form.Flag, 'ndproxy_slave', _('NDP-Proxy slave'), _('Set interface as NDP-Proxy external slave. Default is off.')); - so.depends({ ndp: 'relay', master: '0' }); - so.depends({ ndp: 'hybrid', master: '0' }); + ss.taboption('ipv6', form.DynamicList, 'dns', _('Announced DNS servers')); + ss.taboption('ipv6', form.DynamicList, 'domain', _('Announced DNS domains')); } ifc.renderFormOptions(s); - // Common interface options - o = nettools.replaceOption(s, 'advanced', form.Flag, 'defaultroute', _('Use default gateway'), _('If unchecked, no default route is configured')); - o.default = o.enabled; - - if (protoval != 'static') { - o = nettools.replaceOption(s, 'advanced', form.Flag, 'peerdns', _('Use DNS servers advertised by peer'), _('If unchecked, the advertised DNS server addresses are ignored')); - o.default = o.enabled; - } - - o = nettools.replaceOption(s, 'advanced', form.DynamicList, 'dns', _('Use custom DNS servers')); - if (protoval != 'static') - o.depends('peerdns', '0'); - o.datatype = 'ipaddr'; - - o = nettools.replaceOption(s, 'advanced', form.DynamicList, 'dns_search', _('DNS search domains')); - if (protoval != 'static') - o.depends('peerdns', '0'); - o.datatype = 'hostname'; - - o = nettools.replaceOption(s, 'advanced', form.Value, 'dns_metric', _('DNS weight'), _('The DNS server entries in the local resolv.conf are primarily sorted by the weight specified here')); - o.datatype = 'uinteger'; - o.placeholder = '0'; - - o = nettools.replaceOption(s, 'advanced', form.Value, 'metric', _('Use gateway metric')); - o.datatype = 'uinteger'; - o.placeholder = '0'; - - o = nettools.replaceOption(s,'advanced', form.ListValue, 'multipath', _('Multipath setting'), _('Only one interface must be set as Master.')); - o.value('on',_('Enabled')); - o.value('off',_('Disabled')); - o.value('master',_('Master')); - o.value('backup',_('Backup')); - o.default = 'off'; - - o = nettools.replaceOption(s,'advanced', form.Value, 'addlatency', _('Additional latency')); - o.datatype = 'uinteger'; - o.default = '0'; - - o = nettools.replaceOption(s, 'advanced', form.Value, 'ip4table', _('Override IPv4 routing table')); - o.datatype = 'or(uinteger, string)'; - for (var i = 0; i < rtTables.length; i++) - o.value(rtTables[i][1], '%s (%d)'.format(rtTables[i][1], rtTables[i][0])); - - o = nettools.replaceOption(s, 'advanced', form.Value, 'ip6table', _('Override IPv6 routing table')); - o.datatype = 'or(uinteger, string)'; - for (var i = 0; i < rtTables.length; i++) - o.value(rtTables[i][1], '%s (%d)'.format(rtTables[i][0], rtTables[i][1])); - - o = nettools.replaceOption(s, 'advanced', form.Flag, 'delegate', _('Delegate IPv6 prefixes'), _('Enable downstream delegation of IPv6 prefixes available on this interface')); - o.default = o.enabled; - - o = nettools.replaceOption(s, 'advanced', form.Value, 'ip6assign', _('IPv6 assignment length'), _('Assign a part of given length of every public IPv6-prefix to this interface')); - o.value('', _('disabled')); - o.value('64'); - o.datatype = 'max(128)'; - - o = nettools.replaceOption(s, 'advanced', form.Value, 'ip6hint', _('IPv6 assignment hint'), _('Assign prefix parts using this hexadecimal subprefix ID for this interface.')); - o.placeholder = '0'; - o.validate = function(section_id, value) { - if (value == null || value == '') - return true; - - var n = parseInt(value, 16); - - if (!/^(0x)?[0-9a-fA-F]+$/.test(value) || isNaN(n) || n >= 0xffffffff) - return _('Expecting a hexadecimal assignment hint'); - - return true; - }; - for (var i = 33; i <= 64; i++) - o.depends('ip6assign', String(i)); - - - o = nettools.replaceOption(s, 'advanced', form.DynamicList, 'ip6class', _('IPv6 prefix filter'), _('If set, downstream subnets are only allocated from the given IPv6 prefix classes.')); - o.value('local', 'local (%s)'.format(_('Local ULA'))); - - var prefixClasses = {}; - - this.networks.forEach(function(net) { - var prefixes = net._ubus('ipv6-prefix'); - if (Array.isArray(prefixes)) { - prefixes.forEach(function(pfx) { - if (L.isObject(pfx) && typeof(pfx['class']) == 'string') { - prefixClasses[pfx['class']] = prefixClasses[pfx['class']] || {}; - prefixClasses[pfx['class']][net.getName()] = true; - } - }); - } - }); - - Object.keys(prefixClasses).sort().forEach(function(c) { - var networks = Object.keys(prefixClasses[c]).sort().join(', '); - o.value(c, (c != networks) ? '%s (%s)'.format(c, networks) : c); - }); - - - o = nettools.replaceOption(s, 'advanced', form.Value, 'ip6ifaceid', _('IPv6 suffix'), _("Optional. Allowed values: 'eui64', 'random', fixed value like '::1' or '::1:2'. When IPv6 prefix (like 'a:b:c:d::') is received from a delegating server, use the suffix (like '::1') to form the IPv6 address ('a:b:c:d::1') for the interface.")); - o.datatype = 'ip6hostid'; - o.placeholder = '::1'; - - o = nettools.replaceOption(s, 'advanced', form.Value, 'ip6weight', _('IPv6 preference'), _('When delegating prefixes to multiple downstreams, interfaces with a higher preference value are considered first when allocating subnets.')); - o.datatype = 'uinteger'; - o.placeholder = '0'; - for (var i = 0; i < s.children.length; i++) { o = s.children[i]; switch (o.option) { case 'proto': + case 'delegate': case 'auto': + case 'type': + case 'stp': + case 'igmp_snooping': + case 'ifname_single': + case 'ifname_multi': + case 'ifname_master': case '_dhcp': case '_zone': case '_switch_proto': case '_ifacestat_modal': continue; - case 'igmp_snooping': - case 'stp': - case 'type': - case '_net_device': - var deps = []; - for (var j = 0; j < protocols.length; j++) { - if (!protocols[j].isVirtual()) { - if (o.deps.length) - for (var k = 0; k < o.deps.length; k++) - deps.push(Object.assign({ proto: protocols[j].getProtocol() }, o.deps[k])); - else - deps.push({ proto: protocols[j].getProtocol() }); - } - } - o.deps = deps; - break; - default: if (o.deps.length) for (var j = 0; j < o.deps.length; j++) @@ -1056,28 +789,14 @@ return view.extend({ o.depends('proto', protoval); } } - - this.activeSection = s.section; }, this)); }; - s.handleModalCancel = function(/* ... */) { - var type = uci.get('network', this.activeSection || this.addedSection, 'type'), - device = (type == 'bridge') ? 'br-%s'.format(this.activeSection || this.addedSection) : null; - - uci.sections('network', 'bridge-vlan', function(bvs) { - if (device != null && bvs.device == device) - uci.remove('network', bvs['.name']); - }); - - return form.GridSection.prototype.handleModalCancel.apply(this, arguments); - }; - s.handleAdd = function(ev) { var m2 = new form.Map('network'), s2 = m2.section(form.NamedSection, '_new_'), protocols = network.getProtocols(), - proto, name, device; + proto, name, type, ifname_single, ifname_multi, ifname_master; protocols.sort(function(a, b) { return a.getProtocol() > b.getProtocol(); @@ -1110,15 +829,35 @@ return view.extend({ proto = s2.option(form.ListValue, 'proto', _('Protocol')); proto.validate = name.validate; - device = s2.option(widgets.DeviceSelect, 'device', _('Device')); - device.noaliases = false; - device.optional = false; + type = s2.option(form.ListValue, 'type', _('Interface type')); + type.value('',_('Normal')); + type.value('bridge',_('Bridge')); + type.value('macvlan',_('MacVLAN')); + + ifname_single = s2.option(widgets.DeviceSelect, 'ifname_single', _('Interface')); + ifname_single.noaliases = false; + ifname_single.optional = false; + + ifname_master = s2.option(widgets.DeviceSelect, 'ifname_master', _('Base interface')); + ifname_master.noaliases = false; + ifname_master.optional = false; + + ifname_multi = s2.option(widgets.DeviceSelect, 'ifname_multi', _('Interface')); + ifname_multi.nobridges = true; + ifname_multi.noaliases = true; + ifname_multi.multiple = true; + ifname_multi.optional = true; + ifname_multi.display_size = 6; for (var i = 0; i < protocols.length; i++) { proto.value(protocols[i].getProtocol(), protocols[i].getI18n()); - if (!protocols[i].isVirtual()) - device.depends('proto', protocols[i].getProtocol()); + if (!protocols[i].isVirtual()) { + type.depends({ proto: protocols[i].getProtocol() }); + ifname_single.depends({ type: '', proto: protocols[i].getProtocol() }); + ifname_multi.depends({ type: 'bridge', proto: protocols[i].getProtocol() }); + ifname_master.depends({ type: 'macvlan', proto: protocols[i].getProtocol() }); + } } m2.render().then(L.bind(function(nodes) { @@ -1134,7 +873,7 @@ return view.extend({ 'click': ui.createHandlerFn(this, function(ev) { var nameval = name.isValid('_new_') ? name.formvalue('_new_') : null, protoval = proto.isValid('_new_') ? proto.formvalue('_new_') : null, - protoclass = protoval ? network.getProtocol(protoval, nameval) : null; + protoclass = protoval ? network.getProtocol(protoval) : null; if (nameval == null || protoval == null || nameval == '' || protoval == '') return; @@ -1150,11 +889,22 @@ return view.extend({ return m.save(function() { var section_id = uci.add('network', 'interface', nameval); - protoclass.set('proto', protoval); - protoclass.addDevice(device.formvalue('_new_')); + uci.set('network', section_id, 'proto', protoval); - m.children[0].addedSection = section_id; + if (ifname_single.isActive('_new_')) { + uci.set('network', section_id, 'ifname', ifname_single.formvalue('_new_')); + } + else if (ifname_multi.isActive('_new_')) { + uci.set('network', section_id, 'type', 'bridge'); + uci.set('network', section_id, 'ifname', L.toArray(ifname_multi.formvalue('_new_')).join(' ')); + } + else if (ifname_master.isActive('_new_')) { + uci.set('network', section_id, 'type', 'macvlan'); + uci.set('network', section_id, 'ifname', section_id); + uci.set('network', section_id, 'masterintf', L.toArray(ifname_master.formvalue('_new_')).join(' ')); + } }).then(L.bind(m.children[0].renderMoreOptionsModal, m.children[0], nameval)); + }); }) }, _('Create interface')) @@ -1231,218 +981,11 @@ return view.extend({ }; - // Device configuration - s = m.section(form.GridSection, 'device', _('Devices')); - s.addremove = true; - s.anonymous = true; - s.addbtntitle = _('Add device configuration…'); - - s.cfgsections = function() { - var sections = uci.sections('network', 'device'), - section_ids = sections.sort(function(a, b) { return a.name > b.name }).map(function(s) { return s['.name'] }); - - for (var i = 0; i < netDevs.length; i++) { - if (sections.filter(function(s) { return s.name == netDevs[i].getName() }).length) - continue; - - if (netDevs[i].getType() == 'wifi' && !netDevs[i].isUp()) - continue; - - /* Unless http://lists.openwrt.org/pipermail/openwrt-devel/2020-July/030397.html is implemented, - we cannot properly redefine bridges as devices, so filter them away for now... */ - - var m = netDevs[i].isBridge() ? netDevs[i].getName().match(/^br-([A-Za-z0-9_]+)$/) : null, - s = m ? uci.get('network', m[1]) : null; - - if (s && s['.type'] == 'interface' && s.type == 'bridge') - continue; - - section_ids.push('dev:%s'.format(netDevs[i].getName())); - } - - return section_ids; - }; - - s.renderMoreOptionsModal = function(section_id, ev) { - var m = section_id.match(/^dev:(.+)$/); - - if (m) { - var devtype = getDevType(section_id); - - section_id = uci.add('network', 'device'); - - uci.set('network', section_id, 'name', m[1]); - uci.set('network', section_id, 'type', (devtype != 'ethernet') ? devtype : null); - - this.addedSection = section_id; - } - - return this.super('renderMoreOptionsModal', [section_id, ev]); - }; - - s.renderRowActions = function(section_id) { - var trEl = this.super('renderRowActions', [ section_id, _('Configure…') ]), - deleteBtn = trEl.querySelector('button:last-child'); - - deleteBtn.firstChild.data = _('Reset'); - deleteBtn.setAttribute('title', _('Remove related device settings from the configuration')); - deleteBtn.disabled = section_id.match(/^dev:/) ? true : null; - - return trEl; - }; - - s.modaltitle = function(section_id) { - var m = section_id.match(/^dev:(.+)$/), - name = m ? m[1] : uci.get('network', section_id, 'name'); - - return name ? '%s: %q'.format(getDevTypeDesc(section_id), name) : _('Add device configuration'); - }; - - s.addModalOptions = function(s) { - var isNew = (uci.get('network', s.section, 'name') == null), - dev = getDevice(s.section); - - nettools.addDeviceOptions(s, dev, isNew); - }; - - s.handleModalCancel = function(map /*, ... */) { - var name = uci.get('network', this.addedSection, 'name') - - uci.sections('network', 'bridge-vlan', function(bvs) { - if (name != null && bvs.device == name) - uci.remove('network', bvs['.name']); - }); - - if (map.addedVLANs) - for (var i = 0; i < map.addedVLANs.length; i++) - uci.remove('network', map.addedVLANs[i]); - - return form.GridSection.prototype.handleModalCancel.apply(this, arguments); - }; - - function getDevice(section_id) { - var m = section_id.match(/^dev:(.+)$/), - name = m ? m[1] : uci.get('network', section_id, 'name'); - - return netDevs.filter(function(d) { return d.getName() == name })[0]; - } - - function getDevType(section_id) { - var dev = getDevice(section_id), - cfg = uci.get('network', section_id), - type = cfg ? (uci.get('network', section_id, 'type') || 'ethernet') : (dev ? dev.getType() : ''); - - switch (type) { - case '': - return null; - - case 'vlan': - case '8021q': - return '8021q'; - - case '8021ad': - return '8021ad'; - - case 'bridge': - return 'bridge'; - - case 'tunnel': - return 'tunnel'; - - case 'macvlan': - return 'macvlan'; - - case 'veth': - return 'veth'; - - case 'wifi': - case 'alias': - case 'switch': - case 'ethernet': - default: - return 'ethernet'; - } - } - - function getDevTypeDesc(section_id) { - switch (getDevType(section_id) || '') { - case '': - return E('em', [ _('Device not present') ]); - - case '8021q': - return _('VLAN (802.1q)'); - - case '8021ad': - return _('VLAN (802.1ad)'); - - case 'bridge': - return _('Bridge device'); - - case 'tunnel': - return _('Tunnel device'); - - case 'macvlan': - return _('MAC VLAN'); - - case 'veth': - return _('Virtual Ethernet'); - - default: - return _('Network device'); - } - } - - o = s.option(form.DummyValue, 'name', _('Device')); - o.modalonly = false; - o.textvalue = function(section_id) { - var dev = getDevice(section_id), - ext = section_id.match(/^dev:/), - icon = render_iface(dev); - - if (ext) - icon.querySelector('img').style.opacity = '.5'; - - return E('span', { 'class': 'ifacebadge' }, [ - icon, - E('span', { 'style': ext ? 'opacity:.5' : null }, [ - dev ? dev.getName() : (uci.get('network', section_id, 'name') || '?') - ]) - ]); - }; - - o = s.option(form.DummyValue, 'type', _('Type')); - o.textvalue = getDevTypeDesc; - o.modalonly = false; - - o = s.option(form.DummyValue, 'macaddr', _('MAC Address')); - o.modalonly = false; - o.textvalue = function(section_id) { - var dev = getDevice(section_id), - val = uci.get('network', section_id, 'macaddr'), - mac = dev ? dev.getMAC() : null; - - return val ? E('strong', { - 'data-tooltip': _('The value is overridden by configuration. Original: %s').format(mac || _('unknown')) - }, [ val.toUpperCase() ]) : (mac || '-'); - }; - - o = s.option(form.DummyValue, 'mtu', _('MTU')); - o.modalonly = false; - o.textvalue = function(section_id) { - var dev = getDevice(section_id), - val = uci.get('network', section_id, 'mtu'), - mtu = dev ? dev.getMTU() : null; - - return val ? E('strong', { - 'data-tooltip': _('The value is overridden by configuration. Original: %s').format(mtu || _('unknown')) - }, [ val ]) : (mtu || '-').toString(); - }; - s = m.section(form.TypedSection, 'globals', _('Global network options')); s.addremove = false; s.anonymous = true; - o = s.option(form.Value, 'ula_prefix', _('IPv6 ULA-Prefix'), _('Unique Local Address - in the range fc00::/7. Typically only within the ‘local’ half fd00::/8. ULA for IPv6 is analogous to IPv4 private network addressing. This prefix is randomly generated at first install.')); + o = s.option(form.Value, 'ula_prefix', _('IPv6 ULA-Prefix')); o.datatype = 'cidr6'; o = s.option(form.Flag, 'packet_steering', _('Packet Steering'), _('Enable packet steering across all CPUs. May help or hinder network speed.')); diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js b/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js index 7e11a3cb4..b218daac3 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/routes.js @@ -20,7 +20,6 @@ return view.extend({ s.anonymous = true; s.addremove = true; s.sortable = true; - s.nodescriptions = true; s.tab('general', _('General Settings')); s.tab('advanced', _('Advanced Settings')); @@ -29,10 +28,6 @@ return view.extend({ o.rmempty = false; o.nocreate = true; - o = s.taboption('general', form.Flag, 'disabled', _('Disable'), _('Disable this route')); - o.rmempty = true; - o.default = o.disabled; - o = s.taboption('general', form.Value, 'target', _('Target'), (i == 4) ? _('Host-IP or Network') : _('IPv6-Address or Network (CIDR)')); o.datatype = (i == 4) ? 'ip4addr' : 'ip6addr'; o.rmempty = false; diff --git a/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js b/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js index 5115a69eb..d19b025e3 100644 --- a/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js +++ b/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js @@ -199,9 +199,7 @@ function format_wifirate(rate) { var s = '%.1f\xa0%s, %d\xa0%s'.format(rate.rate / 1000, _('Mbit/s'), rate.mhz, _('MHz')), ht = rate.ht, vht = rate.vht, mhz = rate.mhz, nss = rate.nss, - mcs = rate.mcs, sgi = rate.short_gi, - he = rate.he, he_gi = rate.he_gi, - he_dcm = rate.he_dcm; + mcs = rate.mcs, sgi = rate.short_gi; if (ht || vht) { if (vht) s += ', VHT-MCS\xa0%d'.format(mcs); @@ -210,13 +208,6 @@ function format_wifirate(rate) { if (sgi) s += ', ' + _('Short GI').replace(/ /g, '\xa0'); } - if (he) { - s += ', HE-MCS\xa0%d'.format(mcs); - if (nss) s += ', HE-NSS\xa0%d'.format(nss); - if (he_gi) s += ', HE-GI\xa0%d'.format(he_gi); - if (he_dcm) s += ', HE-DCM\xa0%d'.format(he_dcm); - } - return s; } @@ -312,32 +303,16 @@ var CBIWifiFrequencyValue = form.Value.extend({ this.callFrequencyList(section_id) ]).then(L.bind(function(data) { this.channels = { - '2g': L.hasSystemFeature('hostapd', 'acs') ? [ 'auto', 'auto', true ] : [], - '5g': L.hasSystemFeature('hostapd', 'acs') ? [ 'auto', 'auto', true ] : [], - '6g': [], - '60g': [] + '11g': L.hasSystemFeature('hostapd', 'acs') ? [ 'auto', 'auto', true ] : [], + '11a': L.hasSystemFeature('hostapd', 'acs') ? [ 'auto', 'auto', true ] : [] }; - for (var i = 0; i < data[1].length; i++) { - var band; - - if (data[1][i].mhz >= 2412 && data[1][i].mhz <= 2484) - band = '2g'; - else if (data[1][i].mhz >= 5160 && data[1][i].mhz <= 5885) - band = '5g'; - else if (data[1][i].mhz >= 5925 && data[1][i].mhz <= 7125) - band = '6g'; - else if (data[1][i].mhz >= 58329 && data[1][i].mhz <= 69120) - band = '60g'; - else - continue; - - this.channels[band].push( + for (var i = 0; i < data[1].length; i++) + this.channels[(data[1][i].mhz > 2484) ? '11a' : '11g'].push( data[1][i].channel, '%d (%d Mhz)'.format(data[1][i].channel, data[1][i].mhz), !data[1][i].restricted ); - } var hwmodelist = L.toArray(data[0] ? data[0].getHWModes() : null) .reduce(function(o, v) { o[v] = true; return o }, {}); @@ -345,8 +320,7 @@ var CBIWifiFrequencyValue = form.Value.extend({ this.modes = [ '', 'Legacy', true, 'n', 'N', hwmodelist.n, - 'ac', 'AC', hwmodelist.ac, - 'ax', 'AX', hwmodelist.ax + 'ac', 'AC', hwmodelist.ac ]; var htmodelist = L.toArray(data[0] ? data[0].getHTModes() : null) @@ -363,30 +337,20 @@ var CBIWifiFrequencyValue = form.Value.extend({ 'VHT40', '40 MHz', htmodelist.VHT40, 'VHT80', '80 MHz', htmodelist.VHT80, 'VHT160', '160 MHz', htmodelist.VHT160 - ], - 'ax': [ - 'HE20', '20 MHz', htmodelist.HE20, - 'HE40', '40 MHz', htmodelist.HE40, - 'HE80', '80 MHz', htmodelist.HE80, - 'HE160', '160 MHz', htmodelist.HE160 ] }; this.bands = { '': [ - '2g', '2.4 GHz', this.channels['2g'].length > 3, - '5g', '5 GHz', this.channels['5g'].length > 3 + '11g', '2.4 GHz', this.channels['11g'].length > 3, + '11a', '5 GHz', this.channels['11a'].length > 3 ], 'n': [ - '2g', '2.4 GHz', this.channels['2g'].length > 3, - '5g', '5 GHz', this.channels['5g'].length > 3 + '11g', '2.4 GHz', this.channels['11g'].length > 3, + '11a', '5 GHz', this.channels['11a'].length > 3 ], 'ac': [ - '5g', '5 GHz', true - ], - 'ax': [ - '2g', '2.4 GHz', this.channels['2g'].length > 3, - '5g', '5 GHz', this.channels['5g'].length > 3 + '11a', '5 GHz', true ] }; }, this)); @@ -428,8 +392,6 @@ var CBIWifiFrequencyValue = form.Value.extend({ this.setValues(band, this.bands[mode.value]); this.toggleWifiChannel(elem); - - this.map.checkDepends(); }, toggleWifiChannel: function(elem) { @@ -446,14 +408,11 @@ var CBIWifiFrequencyValue = form.Value.extend({ bwdt = elem.querySelector('.htmode'), htval = uci.get('wireless', section_id, 'htmode'), hwval = uci.get('wireless', section_id, 'hwmode'), - chval = uci.get('wireless', section_id, 'channel'), - bandval = uci.get('wireless', section_id, 'band'); + chval = uci.get('wireless', section_id, 'channel'); this.setValues(mode, this.modes); - if (/HE20|HE40|HE80|HE160/.test(htval)) - mode.value = 'ax'; - else if (/VHT20|VHT40|VHT80|VHT160/.test(htval)) + if (/VHT20|VHT40|VHT80|VHT160/.test(htval)) mode.value = 'ac'; else if (/HT20|HT40/.test(htval)) mode.value = 'n'; @@ -462,24 +421,15 @@ var CBIWifiFrequencyValue = form.Value.extend({ this.toggleWifiMode(elem); - if (hwval != null) { - this.useBandOption = false; - - if (/a/.test(hwval)) - band.value = '5g'; - else - band.value = '2g'; - } - else { - this.useBandOption = true; - - band.value = bandval; - } + if (/a/.test(hwval)) + band.value = '11a'; + else + band.value = '11g'; this.toggleWifiBand(elem); bwdt.value = htval; - chan.value = chval || chan.options[0].value; + chan.value = chval; return elem; }, @@ -511,7 +461,6 @@ var CBIWifiFrequencyValue = form.Value.extend({ E('select', { 'class': 'channel', 'style': 'width:auto', - 'change': L.bind(this.map.checkDepends, this.map), 'disabled': (this.disabled != null) ? this.disabled : this.map.readonly }) ]), @@ -520,7 +469,6 @@ var CBIWifiFrequencyValue = form.Value.extend({ E('select', { 'class': 'htmode', 'style': 'width:auto', - 'change': L.bind(this.map.checkDepends, this.map), 'disabled': (this.disabled != null) ? this.disabled : this.map.readonly }) ]), @@ -533,7 +481,7 @@ var CBIWifiFrequencyValue = form.Value.extend({ cfgvalue: function(section_id) { return [ uci.get('wireless', section_id, 'htmode'), - uci.get('wireless', section_id, 'hwmode') || uci.get('wireless', section_id, 'band'), + uci.get('wireless', section_id, 'hwmode'), uci.get('wireless', section_id, 'channel') ]; }, @@ -550,12 +498,7 @@ var CBIWifiFrequencyValue = form.Value.extend({ write: function(section_id, value) { uci.set('wireless', section_id, 'htmode', value[0] || null); - - if (this.useBandOption) - uci.set('wireless', section_id, 'band', value[1]); - else - uci.set('wireless', section_id, 'hwmode', (value[1] == '2g') ? '11g' : '11a'); - + uci.set('wireless', section_id, 'hwmode', value[1]); uci.set('wireless', section_id, 'channel', value[2]); } }); @@ -940,9 +883,6 @@ return view.extend({ o.ucisection = s.section; if (hwtype == 'mac80211') { - o = ss.taboption('general', form.Flag, 'legacy_rates', _('Allow legacy 802.11b rates'), _('Legacy or badly behaving devices may require legacy 802.11b rates to interoperate. Airtime efficiency may be significantly reduced where these are used. It is recommended to not allow 802.11b rates where possible.')); - o.depends({'_freq': '11g', '!contains': true}); - o = ss.taboption('general', CBIWifiTxPowerValue, 'txpower', _('Maximum transmit power'), _('Specifies the maximum transmit power the wireless radio may use. Depending on regulatory requirements and wireless usage, the actual transmit power may be reduced by the driver.')); o.wifiNetwork = radioNet; @@ -955,6 +895,9 @@ return view.extend({ o.value('2', _('High')); o.value('3', _('Very High')); + o = ss.taboption('advanced', form.Flag, 'legacy_rates', _('Allow legacy 802.11b rates')); + o.default = o.enabled; + o = ss.taboption('advanced', form.Value, 'distance', _('Distance Optimization'), _('Distance to farthest network member in meters.')); o.datatype = 'or(range(0,114750),"auto")'; o.placeholder = 'auto'; @@ -1040,17 +983,8 @@ return view.extend({ return net || network.addNetwork(name, { proto: 'none' }); }, this, values[i])).then(L.bind(function(dev, net) { if (net) { - if (!net.isEmpty()) { - var target_dev = net.getDevice(); - - /* Resolve parent interface of vlan */ - while (target_dev && target_dev.getType() == 'vlan') - target_dev = target_dev.getParent(); - - if (!target_dev || target_dev.getType() != 'bridge') - net.set('type', 'bridge'); - } - + if (!net.isEmpty()) + net.set('type', 'bridge'); net.addDevice(dev); } }, this, dev))); @@ -1080,7 +1014,7 @@ return view.extend({ bssid.depends('mode', 'sta'); bssid.depends('mode', 'sta-wds'); - o = ss.taboption('macfilter', form.ListValue, 'macfilter', _('MAC Address Filter')); + o = ss.taboption('macfilter', form.ListValue, 'macfilter', _('MAC-Address Filter')); o.depends('mode', 'ap'); o.depends('mode', 'ap-wds'); o.value('', _('disable')); @@ -1135,11 +1069,11 @@ return view.extend({ return mode; }; - o = ss.taboption('general', form.Flag, 'hidden', _('Hide ESSID'), _('Where the ESSID is hidden, clients may fail to roam and airtime efficiency may be significantly reduced.')); + o = ss.taboption('general', form.Flag, 'hidden', _('Hide ESSID')); o.depends('mode', 'ap'); o.depends('mode', 'ap-wds'); - o = ss.taboption('general', form.Flag, 'wmm', _('WMM Mode'), _('Where Wi-Fi Multimedia (WMM) Mode QoS is disabled, clients may be limited to 802.11a/802.11g rates.')); + o = ss.taboption('general', form.Flag, 'wmm', _('WMM Mode')); o.depends('mode', 'ap'); o.depends('mode', 'ap-wds'); o.default = o.enabled; @@ -1675,32 +1609,34 @@ return view.extend({ if (hwtype == 'mac80211') { // ieee802.11w options - o = ss.taboption('encryption', form.ListValue, 'ieee80211w', _('802.11w Management Frame Protection'), _("Note: Some wireless drivers do not fully support 802.11w. E.g. mwlwifi may have problems")); - o.value('', _('Disabled')); - o.value('1', _('Optional')); - o.value('2', _('Required')); - add_dependency_permutations(o, { mode: ['ap', 'ap-wds', 'sta', 'sta-wds'], encryption: ['owe', 'psk2', 'psk-mixed', 'sae', 'sae-mixed', 'wpa2', 'wpa3', 'wpa3-mixed'] }); + if (L.hasSystemFeature('hostapd', '11w')) { + o = ss.taboption('encryption', form.ListValue, 'ieee80211w', _('802.11w Management Frame Protection'), _("Requires the 'full' version of wpad/hostapd and support from the wifi driver
(as of Jan 2019: ath9k, ath10k, mwlwifi and mt76)")); + o.value('', _('Disabled')); + o.value('1', _('Optional')); + o.value('2', _('Required')); + add_dependency_permutations(o, { mode: ['ap', 'ap-wds', 'sta', 'sta-wds'], encryption: ['owe', 'psk2', 'psk-mixed', 'sae', 'sae-mixed', 'wpa2', 'wpa3', 'wpa3-mixed'] }); - o.defaults = { - '2': [{ encryption: 'sae' }, { encryption: 'owe' }, { encryption: 'wpa3' }, { encryption: 'wpa3-mixed' }], - '1': [{ encryption: 'sae-mixed'}], - '': [] + o.defaults = { + '2': [{ encryption: 'sae' }, { encryption: 'owe' }, { encryption: 'wpa3' }, { encryption: 'wpa3-mixed' }], + '1': [{ encryption: 'sae-mixed'}], + '': [] + }; + + o = ss.taboption('encryption', form.Value, 'ieee80211w_max_timeout', _('802.11w maximum timeout'), _('802.11w Association SA Query maximum timeout')); + o.depends('ieee80211w', '1'); + o.depends('ieee80211w', '2'); + o.datatype = 'uinteger'; + o.placeholder = '1000'; + o.rmempty = true; + + o = ss.taboption('encryption', form.Value, 'ieee80211w_retry_timeout', _('802.11w retry timeout'), _('802.11w Association SA Query retry timeout')); + o.depends('ieee80211w', '1'); + o.depends('ieee80211w', '2'); + o.datatype = 'uinteger'; + o.placeholder = '201'; + o.rmempty = true; }; - o = ss.taboption('encryption', form.Value, 'ieee80211w_max_timeout', _('802.11w maximum timeout'), _('802.11w Association SA Query maximum timeout')); - o.depends('ieee80211w', '1'); - o.depends('ieee80211w', '2'); - o.datatype = 'uinteger'; - o.placeholder = '1000'; - o.rmempty = true; - - o = ss.taboption('encryption', form.Value, 'ieee80211w_retry_timeout', _('802.11w retry timeout'), _('802.11w Association SA Query retry timeout')); - o.depends('ieee80211w', '1'); - o.depends('ieee80211w', '2'); - o.datatype = 'uinteger'; - o.placeholder = '201'; - o.rmempty = true; - o = ss.taboption('encryption', form.Flag, 'wpa_disable_eapol_key_retries', _('Enable key reinstallation (KRACK) countermeasures'), _('Complicates key reinstallation attacks on the client side by disabling retransmission of EAPOL-Key frames that are used to install keys. This workaround might cause interoperability issues and reduced robustness of key negotiation especially in environments with heavy traffic load.')); add_dependency_permutations(o, { mode: ['ap', 'ap-wds'], encryption: ['psk2', 'psk-mixed', 'sae', 'sae-mixed', 'wpa2', 'wpa3', 'wpa3-mixed'] }); @@ -2146,7 +2082,7 @@ return view.extend({ var table = E('table', { 'class': 'table assoclist', 'id': 'wifi_assoclist_table' }, [ E('tr', { 'class': 'tr table-titles' }, [ E('th', { 'class': 'th nowrap' }, _('Network')), - E('th', { 'class': 'th hide-xs' }, _('MAC address')), + E('th', { 'class': 'th hide-xs' }, _('MAC-Address')), E('th', { 'class': 'th' }, _('Host')), E('th', { 'class': 'th' }, _('Signal / Noise')), E('th', { 'class': 'th' }, _('RX Rate / TX Rate')) diff --git a/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json b/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json index 6943d9563..d6c84bab2 100644 --- a/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json +++ b/luci-mod-network/root/usr/share/rpcd/acl.d/luci-mod-network.json @@ -4,11 +4,7 @@ "read": { "cgi-io": [ "exec" ], "file": { - "/etc/iproute2/rt_tables": [ "read" ], - "/proc/sys/net/ipv6/conf/*/mtu": [ "read" ], - "/proc/sys/net/ipv6/conf/*/hop_limit": [ "read" ], - "/usr/libexec/luci-peeraddr": [ "exec" ], - "/usr/lib/opkg/info/netifd.control": [ "read" ] + "/usr/libexec/luci-peeraddr": [ "exec" ] }, "ubus": { "file": [ "exec" ], diff --git a/luci-proto-modemmanager/Makefile b/luci-proto-modemmanager/Makefile new file mode 100644 index 000000000..8d968ff7e --- /dev/null +++ b/luci-proto-modemmanager/Makefile @@ -0,0 +1,15 @@ +# +# Copyright (C) 2008-2014 The LuCI Team +# +# This is free software, licensed under the Apache License, Version 2.0 . +# + +include $(TOPDIR)/rules.mk + +LUCI_TITLE:=Support for ModemManager +LUCI_DEPENDS:=+modemmanager +PKG_VERSION:=omr-202103 + +include $(TOPDIR)/feeds/luci/luci.mk + +# call BuildPackage - OpenWrt buildroot signature diff --git a/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js b/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js new file mode 100644 index 000000000..33cf6dce4 --- /dev/null +++ b/luci-proto-modemmanager/htdocs/luci-static/resources/protocol/modemmanager.js @@ -0,0 +1,121 @@ +'use strict'; +'require fs'; +'require form'; +'require network'; + +function getModemList() { + return fs.exec_direct('/usr/bin/mmcli', [ '-L' ]).then(function(res) { + var lines = (res || '').split(/\n/), + tasks = []; + + for (var i = 0; i < lines.length; i++) { + var m = lines[i].match(/\/Modem\/(\d+)/); + if (m) + tasks.push(fs.exec_direct('/usr/bin/mmcli', [ '-m', m[1] ])); + } + + return Promise.all(tasks).then(function(res) { + var modems = []; + + for (var i = 0; i < res.length; i++) { + var man = res[i].match(/manufacturer: ([^\n]+)/), + mod = res[i].match(/model: ([^\n]+)/), + dev = res[i].match(/device: ([^\n]+)/); + + if (dev) { + modems.push({ + device: dev[1].trim(), + manufacturer: (man ? man[1].trim() : '') || '?', + model: (mod ? mod[1].trim() : '') || dev[1].trim() + }); + } + } + + return modems; + }); + }); +} + +network.registerPatternVirtual(/^mobiledata-.+$/); +network.registerErrorCode('CALL_FAILED', _('Call failed')); +network.registerErrorCode('NO_CID', _('Unable to obtain client ID')); +network.registerErrorCode('PLMN_FAILED', _('Setting PLMN failed')); + +return network.registerProtocol('modemmanager', { + getI18n: function() { + return _('ModemManager'); + }, + + getIfname: function() { + return this._ubus('l3_device') || 'modemmanager-%s'.format(this.sid); + }, + + getOpkgPackage: function() { + return 'modemmanager'; + }, + + isFloating: function() { + return true; + }, + + isVirtual: function() { + return true; + }, + + getDevices: function() { + return null; + }, + + containsDevice: function(ifname) { + return (network.getIfnameOf(ifname) == this.getIfname()); + }, + + renderFormOptions: function(s) { + var dev = this.getL3Device() || this.getDevice(), o; + + o = s.taboption('general', form.ListValue, 'device', _('Modem device')); + o.rmempty = false; + o.load = function(section_id) { + return getModemList().then(L.bind(function(devices) { + for (var i = 0; i < devices.length; i++) + this.value(devices[i].device, + '%s - %s (%s)'.format(devices[i].manufacturer, devices[i].model, devices[i].device)); + return form.Value.prototype.load.apply(this, [section_id]); + }, this)); + }; + + s.taboption('general', form.Value, 'apn', _('APN')); + s.taboption('general', form.Value, 'pincode', _('PIN')); + + o = s.taboption('general', form.ListValue, 'auth', _('Authentication Type')); + o.value('both', _('PAP/CHAP (both)')); + o.value('pap', 'PAP'); + o.value('chap', 'CHAP'); + o.value('none', _('None')); + o.default = 'none'; + + o = s.taboption('general', form.Value, 'username', _('PAP/CHAP username')); + o.depends('auth', 'pap'); + o.depends('auth', 'chap'); + o.depends('auth', 'both'); + + o = s.taboption('general', form.Value, 'password', _('PAP/CHAP password')); + o.depends('auth', 'pap'); + o.depends('auth', 'chap'); + o.depends('auth', 'both'); + o.password = true; + + o = s.taboption('general', form.ListValue, 'iptype', _('IP Type')); + o.value('ipv4v6', _('IPv4/IPv6 (both - defaults to IPv4)')) + o.value('ipv4', _('IPv4 only')); + o.value('ipv6', _('IPv6 only')); + o.default = 'ipv4v6'; + + o = s.taboption('advanced', form.Value, 'mtu', _('Override MTU')); + o.placeholder = dev ? (dev.getMTU() || '1500') : '1500'; + o.datatype = 'max(9200)'; + + s.taboption('general', form.Value, 'metric', _('Gateway metric')); + + } +}); diff --git a/luci-proto-modemmanager/root/usr/share/rpcd/acl.d/luci-proto-modemmanager.json b/luci-proto-modemmanager/root/usr/share/rpcd/acl.d/luci-proto-modemmanager.json new file mode 100644 index 000000000..716f4c465 --- /dev/null +++ b/luci-proto-modemmanager/root/usr/share/rpcd/acl.d/luci-proto-modemmanager.json @@ -0,0 +1,12 @@ +{ + "luci-proto-modemmanager": { + "description": "Grant access to mmcli", + "read": { + "cgi-io": [ "exec" ], + "file": { + "/usr/bin/mmcli -L": [ "exec" ], + "/usr/bin/mmcli -m [0-9]": [ "exec" ] + } + } + } +} diff --git a/luci-theme-openmptcprouter/Makefile b/luci-theme-openmptcprouter/Makefile old mode 100755 new mode 100644 diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/html5.js b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/html5.js old mode 100755 new mode 100644 diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/mobile.css b/luci-theme-openmptcprouter/htdocs/luci-static/openmptcprouter/mobile.css old mode 100755 new mode 100644 diff --git a/luci-theme-openmptcprouter/htdocs/luci-static/resources/menu-openmptcprouter.js b/luci-theme-openmptcprouter/htdocs/luci-static/resources/menu-openmptcprouter.js old mode 100755 new mode 100644 diff --git a/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/GalanoGrotesqueW00-Regular.woff2 b/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/GalanoGrotesqueW00-Regular.woff2 old mode 100755 new mode 100644 diff --git a/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/cascade.css b/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/cascade.css old mode 100755 new mode 100644 diff --git a/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/favicon.png b/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/favicon.png old mode 100755 new mode 100644 diff --git a/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/omr-logo.png b/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/omr-logo.png old mode 100755 new mode 100644 diff --git a/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/spinner.svg b/luci-theme-openwrt-2020/htdocs/luci-static/openwrt2020/spinner.svg old mode 100755 new mode 100644 diff --git a/luci-theme-openwrt-2020/htdocs/luci-static/resources/menu-openwrt2020.js b/luci-theme-openwrt-2020/htdocs/luci-static/resources/menu-openwrt2020.js old mode 100755 new mode 100644 diff --git a/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm b/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/footer.htm old mode 100755 new mode 100644 diff --git a/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm b/luci-theme-openwrt-2020/luasrc/view/themes/openwrt2020/header.htm old mode 100755 new mode 100644 diff --git a/macvlan/files/etc/init.d/macvlan b/macvlan/files/etc/init.d/macvlan index 6669a9ff2..b38597eff 100755 --- a/macvlan/files/etc/init.d/macvlan +++ b/macvlan/files/etc/init.d/macvlan @@ -13,7 +13,6 @@ _save_macaddr() { local _macaddr uci -q get "network.$1_dev.ifname" >/dev/null && { _ifname=$(uci -q get "network.$1.ifname") - [ -z "$_ifname" ] && _ifname=$(uci -q get "network.$1.device") if [ -n "$(uci -q get network.$1.macaddr)" ] && [ "$(uci -q get network.$1.macaddr)" != "$(uci -q get network.$1_dev.macaddr)" ]; then uci -q set network.$1_dev.macaddr="$(uci -q get network.$1.macaddr)" else @@ -26,8 +25,7 @@ _save_macaddr() { } [ -z "$(uci -q get network.$1.macaddr)" ] && { _ifname=$(uci -q get "network.$1.ifname") - [ -z "$_ifname" ] && _ifname=$(uci -q get "network.$1.device") - [ -n "$_ifname" ] && [ -z "$(echo $_ifname | grep '\.')" ] && { + [ -n "$_ifname" ] && { _macaddr=$(ip link show dev $_ifname 2>/dev/null | grep link | awk '{print $2}') [ -n "$_macaddr" ] && { uci -q set network.$1.macaddr=$_macaddr @@ -44,6 +42,8 @@ _delete_device() { uci -q batch <<-EOF delete network.$1 commit network + delete macvlan.$1 + commit macvlan EOF } return @@ -67,7 +67,7 @@ _setup_interface() { [ -z "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1.masterintf=$(uci -q get network.$1_dev.ifname) [ -n "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1_dev.ifname=$(uci -q get network.$1.masterintf) [ -n "$(uci -q get network.$1.macaddr)" ] && uci -q set network.$1_dev.macaddr=$(uci -q get network.$1.macaddr) - uci set network.$1.device=$1 + uci set network.$1.ifname=$1 uci -q commit network return 0 } @@ -75,11 +75,9 @@ _setup_interface() { uci -q batch <<-EOF set network.$1_dev=device set network.$1_dev.name=$1 - set network.$1_dev.type='macvlan' + set network.$1_dev.type=macvlan set network.$1_dev.ifname=$_ifname - set network.$1_dev.mode='private' - set network.$1_dev.multicast=0 - set network.$1.device=$1 + set network.$1.ifname=$1 set network.$1.masterintf=$_ifname set network.$1.type=macvlan set network.$1.defaultroute=0 @@ -88,7 +86,7 @@ _setup_interface() { #_macaddr=$(uci -q get "network.$1.macaddr") #_setup_macaddr "$1" "${_macaddr:-auto$(date +%s)}" - _setup_macaddr "$1" "$(dd if=/dev/urandom bs=1024 count=1 2>/dev/null | md5sum | sed -e 's/^\(..\)\(..\)\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4:\5:\6/' -e 's/^\(.\)[13579bdf]/\10/')" + _setup_macaddr "$1" "auto$(date +%s)" uci -q set network.$1_dev.mtu=$(uci -q get network.$1.mtu) uci -q commit network } diff --git a/mc/Config.in b/mc/Config.in new file mode 100644 index 000000000..fcd8fad33 --- /dev/null +++ b/mc/Config.in @@ -0,0 +1,59 @@ +menu "Configuration" + depends on PACKAGE_mc + +config MC_DIFFVIEWER + bool "Enable internal diff viewer" + default n + help + This option enables the built-in diff viewer. + Disabled by default. + +config MC_EDITOR + bool "Enable internal editor" + default y + help + This option enables the built-in file editor. + Enabled by default. + +config MC_SUBSHELL + bool "Enable concurrent subshell" + default y + help + This option enables concurrent subshell support. + Enabled by default. + +config MC_LARGEFILE + bool "Enable largefile support" + default n + help + This option enables support for large files (> 2 GB). + Disabled by default. + +config MC_BACKGROUND + bool "Enable background operations" + default n + help + This option enables support for background operations which + allow to perform some tasks such as copying files in a + separate background process. Background code is known + to be less stable than the rest of the code. + Disabled by default. + +config MC_CHARSET + bool "Enable charset support" + default y + help + This option adds support for selecting character set of the text in + the internal viewer and editor and converting it on the fly. + Enabled by default. + +config MC_VFS + bool "Enable virtual filesystem support" + default y + help + This option enables the Virtual File System switch code to get + transparent access to the following file systems: + cpio, tar, fish, sfs, ftp, sftp, extfs. + Enabled by default. + +endmenu diff --git a/mc/Makefile b/mc/Makefile new file mode 100644 index 000000000..30814afb0 --- /dev/null +++ b/mc/Makefile @@ -0,0 +1,128 @@ +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=mc +PKG_VERSION:=4.8.25 +PKG_RELEASE:=2 +PKG_MAINTAINER:=Dirk Brenken +PKG_LICENSE:=GPL-3.0-or-later +PKG_CPE_ID:=cpe:/a:midnight_commander:midnight_commander + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz +PKG_SOURCE_URL:=http://ftp.midnight-commander.org/ +PKG_HASH:=ffc19617f20ebb23330acd3998b7fd559a042d172fa55746d53d246697b2548a +PKG_BUILD_PARALLEL:=1 +PKG_FIXUP:=autoreconf gettext-version +PKG_BUILD_DEPENDS:=MC_VFS:libtirpc + +PKG_CONFIG_DEPENDS := \ + CONFIG_PACKAGE_MC \ + CONFIG_MC_DIFFVIEWER \ + CONFIG_MC_EDITOR \ + CONFIG_MC_SUBSHELL \ + CONFIG_MC_LARGEFILE \ + CONFIG_MC_BACKGROUND \ + CONFIG_MC_CHARSET \ + CONFIG_MC_VFS + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/nls.mk + +define Package/mc + SECTION:=utils + CATEGORY:=Utilities + DEPENDS:=+glib2 +libncurses +libmount +MC_VFS:libssh2 $(ICONV_DEPENDS) + TITLE:=Midnight Commander - a powerful visual file manager + URL:=https://www.midnight-commander.org/ + MENU:=1 +endef + +define Package/mc/config + source "$(SOURCE)/Config.in" +endef + +define Package/mc/description +GNU Midnight Commander is a visual file manager. +It's a feature rich full-screen text mode application that allows you to copy, +move and delete files and whole directory trees, search for files and run commands in the subshell. +Internal viewer and editor are included as well. + +endef + +CONFIGURE_ARGS += \ + --enable-silent-rules \ + --disable-tests \ + --disable-doxygen-doc \ + --with-homedir=/etc/mc \ + --with-screen=ncurses \ + --without-x \ + +CONFIGURE_VARS += \ + ac_cv_search_addwstr=no \ + +ifeq ($(CONFIG_MC_DIFFVIEWER),) +CONFIGURE_ARGS += --without-diff-viewer +endif + +ifeq ($(CONFIG_MC_EDITOR),) +CONFIGURE_ARGS += --without-internal-edit +endif + +ifeq ($(CONFIG_MC_SUBSHELL),) +CONFIGURE_ARGS += --without-subshell +endif + +ifeq ($(CONFIG_MC_LARGEFILE),) +CONFIGURE_ARGS += --disable-largefile +endif + +ifeq ($(CONFIG_MC_BACKGROUND),) +CONFIGURE_ARGS += --disable-background +endif + +ifeq ($(CONFIG_MC_CHARSET),) +CONFIGURE_ARGS += --disable-charset +endif + +ifeq ($(CONFIG_MC_VFS),) +CONFIGURE_ARGS += --disable-vfs +else +TARGET_CPPFLAGS += -I$(STAGING_DIR)/usr/include/tirpc +endif + +define Package/mc/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/mc $(1)/usr/bin + $(INSTALL_DIR) $(1)/etc/mc + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.charsets $(1)/etc/mc + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.ext $(1)/etc/mc + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.default.keymap $(1)/etc/mc/mc.keymap + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/filehighlight.ini $(1)/etc/mc + $(INSTALL_DIR) $(1)/usr/share/mc/help + $(INSTALL_DATA) $(PKG_BUILD_DIR)/doc/hlp/mc.hlp $(1)/usr/share/mc/help + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/mc.menu $(1)/etc/mc + $(INSTALL_DIR) $(1)/etc/mc/skins + $(INSTALL_DATA) $(PKG_BUILD_DIR)/misc/skins/default.ini $(1)/etc/mc/skins + $(INSTALL_DIR) $(1)/etc/mc/mcedit/Syntax +ifeq ($(CONFIG_MC_DIFFVIEWER),y) + ln -sf mc $(1)/usr/bin/mcdiff +endif +ifeq ($(CONFIG_MC_EDITOR),y) + ln -sf mc $(1)/usr/bin/mcedit +endif +ifeq ($(CONFIG_MC_VFS),y) + $(INSTALL_DATA) $(PKG_BUILD_DIR)/src/vfs/sfs/sfs.ini $(1)/etc/mc + $(INSTALL_DIR) $(1)/usr/lib/mc/extfs.d +endif +endef + +define Package/mc/conffiles +/etc/mc/mc.menu +/etc/mc/skins/default.ini +endef + +$(eval $(call BuildPackage,mc)) diff --git a/mc/patches/010-subshell.patch b/mc/patches/010-subshell.patch new file mode 100644 index 000000000..73d8ca949 --- /dev/null +++ b/mc/patches/010-subshell.patch @@ -0,0 +1,11 @@ +-- a/src/subshell/common.c ++++ b/src/subshell/common.c +@@ -836,7 +836,7 @@ init_subshell_precmd (char *precmd, size + "else " + "[ \"${PWD##$HOME/}\" = \"$PWD\" ] && MC_PWD=\"$PWD\" || MC_PWD=\"~/${PWD##$HOME/}\"; " + "fi; " +- "echo \"$USER@$(hostname -s):$MC_PWD\"; " ++ "echo \"$USER@$HOSTNAME:$MC_PWD\"; " + "pwd>&%d; " + "kill -STOP $$; " + "}; " "PRECMD=precmd; " "PS1='$($PRECMD)$ '\n", subshell_pipe[WRITE]); diff --git a/mc/patches/020-fix-mouse-handling-newer-terminfo.patch b/mc/patches/020-fix-mouse-handling-newer-terminfo.patch new file mode 100644 index 000000000..82543379e --- /dev/null +++ b/mc/patches/020-fix-mouse-handling-newer-terminfo.patch @@ -0,0 +1,11 @@ +--- a/lib/tty/tty.c ++++ b/lib/tty/tty.c +@@ -370,7 +370,7 @@ tty_init_xterm_support (gboolean is_xter + if (xmouse_seq != NULL) + { + if (strcmp (xmouse_seq, ESC_STR "[<") == 0) +- xmouse_seq = ESC_STR "[M"; ++ xmouse_seq = NULL; + + xmouse_extended_seq = ESC_STR "[<"; + } diff --git a/mc/patches/030-fix-gettext-full-0.21.patch b/mc/patches/030-fix-gettext-full-0.21.patch new file mode 100644 index 000000000..af44dcf66 --- /dev/null +++ b/mc/patches/030-fix-gettext-full-0.21.patch @@ -0,0 +1,13 @@ +--- a/po/Makefile.in.in 2020-07-13 04:16:44.000000000 +0800 ++++ b/po/Makefile.in.in 2021-02-17 18:04:44.881887192 +0800 +@@ -8,8 +8,8 @@ + # Please note that the actual code of GNU gettext is covered by the GNU + # General Public License and is *not* in the public domain. + # +-# Origin: gettext-0.18 +-GETTEXT_MACRO_VERSION = 0.18 ++# Origin: gettext-0.20 ++GETTEXT_MACRO_VERSION = 0.20 + + PACKAGE = @PACKAGE@ + VERSION = @VERSION@ \ No newline at end of file diff --git a/mlvpn/Makefile b/mlvpn/Makefile index 455efe415..f9a356f02 100644 --- a/mlvpn/Makefile +++ b/mlvpn/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mlvpn -PKG_VERSION:=8aa1b16 +PKG_VERSION:=2263bab PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://github.com/zehome/MLVPN.git -PKG_SOURCE_VERSION:=ddafba3c0bd63e0d733d3d5a4532e275714991b3 -PKG_SOURCE_DATE:=2021-10-28 +PKG_SOURCE_VERSION:=2263bab7e5f983e1daa33887b53120c12646398f +PKG_SOURCE_DATE:=2020-12-16 #PKG_SOURCE_URL:=https://github.com/markfoodyburton/MLVPN.git #PKG_SOURCE_VERSION:=8f9720978b28c1954f9f229525333547283316d2 #PKG_SOURCE_DATE:=2018-09-03 diff --git a/mlvpn/files/etc/config/mlvpn b/mlvpn/files/etc/config/mlvpn index bbd90b5a4..53085dc48 100644 --- a/mlvpn/files/etc/config/mlvpn +++ b/mlvpn/files/etc/config/mlvpn @@ -8,5 +8,3 @@ config mlvpn 'general' option host '128.128.128.128' option firstport '65201' option interface_name 'mlvpn0' - option loss_tolerance '50' - option latency_tolerance '300' diff --git a/mlvpn/files/etc/init.d/mlvpn b/mlvpn/files/etc/init.d/mlvpn index 3c11ff633..6ef4bfdc6 100755 --- a/mlvpn/files/etc/init.d/mlvpn +++ b/mlvpn/files/etc/init.d/mlvpn @@ -13,8 +13,7 @@ interface_multipath_settings() { mode="$(uci -q get openmptcprouter.$config.multipath)" } [ "$mode" = "off" ] || [ "$mode" = "" ] && return 1 - config_get ifname "$config" device - [ -z "$ifname" ] && config_get ifname "$config" ifname + config_get ifname "$config" ifname [ -z "$ifname" ] && ifname=$(ifstatus "$config" | jsonfilter -q -e '@["l3_device"]') [ -n "$(echo $ifname | grep '@')" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["device"]') [ -z "$ifname" ] && return 1 @@ -33,22 +32,21 @@ interface_multipath_settings() { } start() { - local enable timeout mode password reorder_buffer_size interface_name host firstport loss_tolerance latency_tolerance + local enable timeout mode password reorder_buffer_size interface_name host firstport loss_tolerence [ "$(uci -q get mlvpn.general.enable)" = "1" ] || return 1 interface_name="$(uci -q get mlvpn.general.interface_name)" timeout="$(uci -q get mlvpn.general.timeout)" mode="$(uci -q get mlvpn.general.mode)" password="$(uci -q get mlvpn.general.password)" reorder_buffer_size="$(uci -q get mlvpn.general.reorder_buffer_size)" - loss_tolerance="$(uci -q get mlvpn.general.loss_tolerance)" - latency_tolerance="$(uci -q get mlvpn.general.latency_tolerance)" + loss_tolerence="$(uci -q get mlvpn.general.loss_tolerence)" cleartext_data="$(uci -q get mlvpn.general.cleartext_data)" [ -z "$cleartext_data" ] && cleartext_data="0" host="$(uci -q get mlvpn.general.host)" firstport="$(uci -q get mlvpn.general.firstport)" if [ "$(uci -q get network.omrvpn)" != "${interface_name}" ]; then - uci -q set network.omrvpn.device=${interface_name} + uci -q set network.omrvpn.ifname=${interface_name} uci -q commit fi @@ -60,8 +58,7 @@ start() { timeout = ${timeout} reorder_buffer = yes reorder_buffer_size = ${reorder_buffer_size} - loss_tolerence = ${loss_tolerance} - latency_tolerence = ${latency_tolerance} + loss_tolerence = ${loss_tolerence} cleartext_data = ${cleartext_data} password = "${password}" mtu = 1452 diff --git a/mlvpn/files/etc/uci-defaults/4100-mlvpn b/mlvpn/files/etc/uci-defaults/4100-mlvpn index 8aa0a6139..45d4f57ee 100644 --- a/mlvpn/files/etc/uci-defaults/4100-mlvpn +++ b/mlvpn/files/etc/uci-defaults/4100-mlvpn @@ -11,7 +11,7 @@ if [ "$(uci -q get network.omrvpn)" = "" ] && [ "$(uci -q get network.mlvpn)" = uci -q batch <<-EOF >/dev/null delete network.mlvpn=interface set network.mlvpn=interface - set network.mlvpn.device=mlvpn0 + set network.mlvpn.ifname=mlvpn0 set network.mlvpn.proto=dhcp set network.mlvpn.ip4table=vpn set network.mlvpn.multipath=off diff --git a/mlvpn/patches/010-musl-fix.patch b/mlvpn/patches/010-musl-fix.patch new file mode 100644 index 000000000..851d3dfca --- /dev/null +++ b/mlvpn/patches/010-musl-fix.patch @@ -0,0 +1,11 @@ +--- a/src/privsep.c ++++ b/src/privsep.c +@@ -778,7 +778,7 @@ sig_got_chld(int sig) + pid_t pid; + + do { +- pid = waitpid(WAIT_ANY, NULL, WNOHANG); ++ pid = waitpid(-1, NULL, WNOHANG); + if (pid == child_pid && cur_state < STATE_QUIT) + cur_state = STATE_QUIT; + } while (pid > 0 || (pid == -1 && errno == EINTR)); diff --git a/mlvpn/patches/020-remove-cdefs.patch b/mlvpn/patches/020-remove-cdefs.patch deleted file mode 100644 index 9b4bd38a0..000000000 --- a/mlvpn/patches/020-remove-cdefs.patch +++ /dev/null @@ -1,33 +0,0 @@ ---- a/src/vis.h.anc 2021-09-24 22:00:03.900321816 +0200 -+++ b/src/vis.h 2021-09-24 22:00:21.500028958 +0200 -@@ -79,7 +79,6 @@ - */ - #define UNVIS_END 1 /* no more characters */ - --#include - - __BEGIN_DECLS - char *vis(char *, int, int, int); ---- a/src/vis.h.anc 2021-09-24 22:05:19.543069573 +0200 -+++ b/src/vis.h 2021-09-24 22:06:00.430389216 +0200 -@@ -80,7 +80,9 @@ - #define UNVIS_END 1 /* no more characters */ - - --__BEGIN_DECLS -+#ifdef __cplusplus -+extern "C" { -+#endif - char *vis(char *, int, int, int); - int strvis(char *, const char *, int); - int stravis(char **, const char *, int); -@@ -93,6 +95,8 @@ - ssize_t strnunvis(char *, const char *, size_t) - __attribute__ ((__bounded__(__string__,1,3))); - --__END_DECLS -+#ifdef __cplusplus -+} -+#endif - - #endif /* !HAVE_STRNVIS || BROKEN_STRNVIS */ diff --git a/modemmanager/Makefile b/modemmanager/Makefile index 3eb780398..d16b72d12 100644 --- a/modemmanager/Makefile +++ b/modemmanager/Makefile @@ -1,25 +1,28 @@ # # Copyright (C) 2016 Velocloud Inc. # Copyright (C) 2016 Aleksander Morgado +# Copyright (C) 2021 Ycarus (Yannick Chabanois) for OpenMPTCProuter # # This is free software, licensed under the GNU General Public License v2. # include $(TOPDIR)/rules.mk +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL:=https://gitlab.freedesktop.org/mobile-broadband/ModemManager.git +PKG_SOURCE_VERSION:=d77d8dff420dc70d6191b67e172e1df5c4e009bf PKG_NAME:=modemmanager -PKG_VERSION:=1.18.6 -PKG_RELEASE:=1 +PKG_VERSION:=1.16.3-$(PKG_SOURCE_VERSION) +PKG_RELEASE:=10 -PKG_SOURCE:=ModemManager-$(PKG_VERSION).tar.xz -PKG_SOURCE_URL:=https://www.freedesktop.org/software/ModemManager -PKG_HASH:=d4f804b31cf504239c5f1d4973c62095c00cba1ee9abb503718dac6d146a470a -PKG_BUILD_DIR:=$(BUILD_DIR)/ModemManager-$(PKG_VERSION) +#PKG_BUILD_DIR:=$(BUILD_DIR)/modemamanager-$ PKG_MAINTAINER:=Nicholas Smith PKG_LICENSE:=GPL-2.0-or-later PKG_LICENSE_FILES:=COPYING +PKG_FIXUP:=autoreconf + PKG_INSTALL:=1 PKG_BUILD_PARALLEL:=1 @@ -98,7 +101,6 @@ define Package/modemmanager/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ModemManager $(1)/usr/sbin - $(INSTALL_BIN) ./files/usr/sbin/ModemManager-wrapper $(1)/usr/sbin $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mmcli $(1)/usr/bin @@ -132,9 +134,6 @@ define Package/modemmanager/install $(INSTALL_DIR) $(1)/etc/hotplug.d/tty $(INSTALL_DATA) ./files/25-modemmanager-tty $(1)/etc/hotplug.d/tty - $(INSTALL_DIR) $(1)/etc/hotplug.d/wwan - $(INSTALL_DATA) ./files/25-modemmanager-wwan $(1)/etc/hotplug.d/wwan - $(INSTALL_DIR) $(1)/lib/netifd/proto $(INSTALL_BIN) ./files/modemmanager.proto $(1)/lib/netifd/proto/modemmanager.sh endef diff --git a/modemmanager/files/25-modemmanager-net b/modemmanager/files/25-modemmanager-net index e87231e31..504c3d6b6 100644 --- a/modemmanager/files/25-modemmanager-net +++ b/modemmanager/files/25-modemmanager-net @@ -8,6 +8,10 @@ # We require a interface name [ -n "${INTERFACE}" ] || exit +[ -n "$(echo ${INTERFACE} | grep -i sqm)" ] && exit +[ -d /sys${DEVPATH} ] || exit +[ -n "$(echo ${DEVPATH} | grep -i sqm)" ] && exit + # Always make sure the rundir exists mkdir -m 0755 -p "${MODEMMANAGER_RUNDIR}" diff --git a/modemmanager/files/25-modemmanager-tty b/modemmanager/files/25-modemmanager-tty index c13148a33..1d3fb9a35 100644 --- a/modemmanager/files/25-modemmanager-tty +++ b/modemmanager/files/25-modemmanager-tty @@ -7,6 +7,8 @@ # We require a device name [ -n "$DEVNAME" ] || exit +[ -d /sys${DEVPATH} ] || exit +[ -n "$(echo ${DEVPATH} | grep -i sqm)" ] && exit # Always make sure the rundir exists mkdir -m 0755 -p "${MODEMMANAGER_RUNDIR}" diff --git a/modemmanager/files/25-modemmanager-usb b/modemmanager/files/25-modemmanager-usb index 93d0bf70a..565b7b9c9 100644 --- a/modemmanager/files/25-modemmanager-usb +++ b/modemmanager/files/25-modemmanager-usb @@ -5,6 +5,8 @@ # want to process specific interface removal events. [ "$ACTION" = remove ] || exit [ -z "${INTERFACE}" ] || exit +[ -d /sys${DEVPATH} ] || exit +[ -n "$(echo ${DEVPATH} | grep -i sqm)" ] && exit # Load common utilities . /usr/share/ModemManager/modemmanager.common diff --git a/modemmanager/files/25-modemmanager-wwan b/modemmanager/files/25-modemmanager-wwan deleted file mode 100644 index c4dc6b897..000000000 --- a/modemmanager/files/25-modemmanager-wwan +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -# Copyright (C) 2021 Aleksander Morgado - -# Load hotplug common utilities -. /usr/share/ModemManager/modemmanager.common - -# We require a device name -[ -n "$DEVNAME" ] || exit - -# Always make sure the rundir exists -mkdir -m 0755 -p "${MODEMMANAGER_RUNDIR}" - -# Report wwan -mm_log "${ACTION} wwan control port ${DEVNAME}: event processed" -mm_report_event "${ACTION}" "${DEVNAME}" "wwan" "/sys${DEVPATH}" diff --git a/modemmanager/files/modemmanager.common b/modemmanager/files/modemmanager.common index a439179de..8de8f2946 100644 --- a/modemmanager/files/modemmanager.common +++ b/modemmanager/files/modemmanager.common @@ -4,6 +4,10 @@ ################################################################################ +# If there is no interface that use modemmanager, exit +#[ -z "$(uci -q show network | grep modemmanager)" ] && exit +[ "$(uci -q get openmptcprouter.settings.modemmanager)" = "0" ] && exit + . /lib/functions.sh . /lib/netifd/netifd-proto.sh @@ -20,7 +24,7 @@ MODEMMANAGER_EVENTS_CACHE="${MODEMMANAGER_RUNDIR}/events.cache" # Common logging mm_log() { - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && logger -t "ModemManager" "hotplug: $*" + logger -t "ModemManager" "hotplug: $*" } ################################################################################ @@ -39,21 +43,12 @@ mm_find_physdev_sysfs_path() { # avoid infinite loops iterating [ -z "${tmp_path}" ] || [ "${tmp_path}" = "/" ] && return - # for USB devices, the physical device will be that with a idVendor - # and idProduct pair of files + # the physical device will be that with a idVendor and idProduct pair of files [ -f "${tmp_path}"/idVendor ] && [ -f "${tmp_path}"/idProduct ] && { tmp_path=$(readlink -f "$tmp_path") echo "${tmp_path}" return } - - # For PCI devices, the physical device will be that with a vendor - # and device pair of files - [ -f "${tmp_path}"/vendor ] && [ -f "${tmp_path}"/device ] && { - tmp_path=$(readlink -f "$tmp_path") - echo "${tmp_path}" - return - } done } diff --git a/modemmanager/files/modemmanager.init b/modemmanager/files/modemmanager.init old mode 100644 new mode 100755 index a3f6c1b12..b3f9f9290 --- a/modemmanager/files/modemmanager.init +++ b/modemmanager/files/modemmanager.init @@ -22,12 +22,14 @@ start_service() { # it starts. # # All these commands need to be executed on every MM start, even after - # procd-triggered respawns, which is why this is wrapped in a startup - # wrapper script called '/usr/sbin/ModemManager-wrapper'. + # procd-triggered respawns, which is why they're all included as instance command # - . /usr/share/ModemManager/modemmanager.common procd_open_instance - procd_set_param command /usr/sbin/ModemManager-wrapper + procd_set_param command sh -c ". /usr/share/ModemManager/modemmanager.common; \ + mkdir -m 0755 -p ${MODEMMANAGER_RUNDIR}; \ + mm_cleanup_interfaces; \ + ( mm_report_events_from_cache ) >/dev/null 2>&1 & \ + /usr/sbin/ModemManager" procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}" procd_set_param pidfile "${MODEMMANAGER_PID_FILE}" procd_close_instance diff --git a/modemmanager/files/modemmanager.proto b/modemmanager/files/modemmanager.proto index 0e050e7b9..d24910b98 100755 --- a/modemmanager/files/modemmanager.proto +++ b/modemmanager/files/modemmanager.proto @@ -197,7 +197,6 @@ modemmanager_connected_method_dhcp_ipv4() { local interface="$1" local wwan="$2" local metric="$3" - local defaultroute="$4" proto_init_update "${wwan}" 1 proto_set_keep 1 @@ -223,7 +222,6 @@ modemmanager_connected_method_static_ipv4() { local dns1="$7" local dns2="$8" local metric="$9" - local defaultroute="$10" local mask="" @@ -244,9 +242,8 @@ modemmanager_connected_method_static_ipv4() { proto_set_keep 1 echo "adding IPv4 address ${address}, netmask ${mask}" proto_add_ipv4_address "${address}" "${mask}" - [ -n "${gateway}" ] && [ "${defaultroute}" != 0 ] && { + [ -n "${gateway}" ] && { echo "adding default IPv4 route via ${gateway}" - logger -t "modemmanager.proto" "adding default IPv4 route via ${gateway} ${address}" proto_add_ipv4_route "0.0.0.0" "0" "${gateway}" "${address}" } [ -n "${dns1}" ] && { @@ -265,7 +262,6 @@ modemmanager_connected_method_dhcp_ipv6() { local interface="$1" local wwan="$2" local metric="$3" - local defaultroute="$4" proto_init_update "${wwan}" 1 proto_set_keep 1 @@ -292,7 +288,6 @@ modemmanager_connected_method_static_ipv6() { local dns1="$7" local dns2="$8" local metric="$9" - local defaultroute="$10" [ -n "${address}" ] || { proto_notify_error "${interface}" ADDRESS_MISSING @@ -311,7 +306,7 @@ modemmanager_connected_method_static_ipv6() { echo "adding IPv6 address ${address}, prefix ${prefix}" proto_add_ipv6_address "${address}" "128" proto_add_ipv6_prefix "${address}/${prefix}" - [ -n "${gateway}" ] && [ "$defaultroute" != 0 ] && { + [ -n "${gateway}" ] && { echo "adding default IPv6 route via ${gateway}" proto_add_ipv6_route "${gateway}" "128" proto_add_ipv6_route "::0" "0" "${gateway}" "" "" "${address}/${prefix}" @@ -362,9 +357,9 @@ proto_modemmanager_setup() { local device apn allowedauth username password pincode iptype metric signalrate - local address prefix gateway mtu dns1 dns2 defaultroute + local address prefix gateway mtu dns1 dns2 - json_get_vars device apn allowedauth username password pincode iptype metric signalrate defaultroute + json_get_vars device apn allowedauth username password pincode iptype metric signalrate # validate sysfs path given in config [ -n "${device}" ] || { @@ -452,7 +447,7 @@ proto_modemmanager_setup() { echo "IPv4 connection setup required in interface ${interface}: ${bearermethod_ipv4}" case "${bearermethod_ipv4}" in "dhcp") - modemmanager_connected_method_dhcp_ipv4 "${interface}" "${beareriface}" "${metric}" "${defaultroute}" + modemmanager_connected_method_dhcp_ipv4 "${interface}" "${beareriface}" "${metric}" ;; "static") address=$(modemmanager_get_field "${bearerstatus}" "bearer.ipv4-config.address") @@ -461,7 +456,7 @@ proto_modemmanager_setup() { mtu=$(modemmanager_get_field "${bearerstatus}" "bearer.ipv4-config.mtu") dns1=$(modemmanager_get_field "${bearerstatus}" "bearer.ipv4-config.dns.value\[1\]") dns2=$(modemmanager_get_field "${bearerstatus}" "bearer.ipv4-config.dns.value\[2\]") - modemmanager_connected_method_static_ipv4 "${interface}" "${beareriface}" "${address}" "${prefix}" "${gateway}" "${mtu}" "${dns1}" "${dns2}" "${metric}" "${defaultroute}" + modemmanager_connected_method_static_ipv4 "${interface}" "${beareriface}" "${address}" "${prefix}" "${gateway}" "${mtu}" "${dns1}" "${dns2}" "${metric}" ;; "ppp") modemmanager_connected_method_ppp_ipv4 "${interface}" "${beareriface}" "${username}" "${password}" "${allowedauth}" @@ -479,7 +474,7 @@ proto_modemmanager_setup() { echo "IPv6 connection setup required in interface ${interface}: ${bearermethod_ipv6}" case "${bearermethod_ipv6}" in "dhcp") - modemmanager_connected_method_dhcp_ipv6 "${interface}" "${beareriface}" "${metric}" "${defaultroute}" + modemmanager_connected_method_dhcp_ipv6 "${interface}" "${beareriface}" "${metric}" ;; "static") address=$(modemmanager_get_field "${bearerstatus}" "bearer.ipv6-config.address") @@ -488,7 +483,7 @@ proto_modemmanager_setup() { mtu=$(modemmanager_get_field "${bearerstatus}" "bearer.ipv6-config.mtu") dns1=$(modemmanager_get_field "${bearerstatus}" "bearer.ipv6-config.dns.value\[1\]") dns2=$(modemmanager_get_field "${bearerstatus}" "bearer.ipv6-config.dns.value\[2\]") - modemmanager_connected_method_static_ipv6 "${interface}" "${beareriface}" "${address}" "${prefix}" "${gateway}" "${mtu}" "${dns1}" "${dns2}" "${metric}" "${defaultroute}" + modemmanager_connected_method_static_ipv6 "${interface}" "${beareriface}" "${address}" "${prefix}" "${gateway}" "${mtu}" "${dns1}" "${dns2}" "${metric}" ;; "ppp") proto_notify_error "${interface}" "unsupported method" diff --git a/modemmanager/files/usr/sbin/ModemManager-wrapper b/modemmanager/files/usr/sbin/ModemManager-wrapper deleted file mode 100755 index 4fd64227f..000000000 --- a/modemmanager/files/usr/sbin/ModemManager-wrapper +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh - -trap_with_arg() { - func="$1" ; shift - for sig ; do - # shellcheck disable=SC2064 - trap "$func $sig" "$sig" - done -} - -func_trap() { - logger "ModemManager-wrapper[$$]" "Sending signal ${1}..." - kill "-${1}" "$CHILD" 2>/dev/null -} - -main() { - . /usr/share/ModemManager/modemmanager.common - - trap_with_arg func_trap INT TERM KILL - - mkdir -p "${MODEMMANAGER_RUNDIR}" - chmod 0755 "${MODEMMANAGER_RUNDIR}" - mm_cleanup_interfaces - - /usr/sbin/ModemManager "$@" 1>/dev/null 2>/dev/null & - CHILD="$!" - - mm_report_events_from_cache - - wait "$CHILD" -} - -main "$@" diff --git a/mptcp/Makefile b/mptcp/Makefile index 95cb91198..ecfb24e82 100644 --- a/mptcp/Makefile +++ b/mptcp/Makefile @@ -24,7 +24,6 @@ define Package/mptcp DEPENDS:=+ip +iptables +ethtool +ipcalc KCONFIG:=\ CONFIG_MPTCP=y \ - CONFIG_MPTCP_IPV6=y \ CONFIG_MPTCP_BINDER=y \ CONFIG_MPTCP_FULLMESH=y \ CONFIG_MPTCP_NDIFFPORTS=y \ diff --git a/mptcp/files/etc/uci-defaults/mptcp-defaults b/mptcp/files/etc/uci-defaults/mptcp-defaults index 97235fb8d..9dddade8f 100755 --- a/mptcp/files/etc/uci-defaults/mptcp-defaults +++ b/mptcp/files/etc/uci-defaults/mptcp-defaults @@ -8,9 +8,6 @@ if [ "$(uci -q get network.globals.mptcp_path_manager)" = "" ]; then set network.globals.mptcp_checksum=0 set network.globals.mptcp_debug=0 set network.globals.mptcp_syn_retries=2 - set network.globals.mptcp_subflows=3 - set network.globals.mptcp_add_addr_accepted=1 - set network.globals.mptcp_add_addr_timeout=120 commit network EOF fi @@ -56,15 +53,6 @@ if [ "$(uci -q show network.globals | grep mptcp_fullmesh)" = "" ]; then commit network EOF fi -if [ "$(uci -q get network.globals.mptcp_subflows)" = "" ]; then - uci -q batch <<-EOF >/dev/null - set network.globals.mptcp_subflows=3 - set network.globals.mptcp_add_addr_accepted=1 - set network.globals.mptcp_add_addr_timeout=120 - commit network - EOF -fi - uci -q batch <<-EOF >/dev/null delete ucitrack.@mptcp[-1] add ucitrack mptcp diff --git a/mptcp/files/usr/bin/multipath b/mptcp/files/usr/bin/multipath index 42bb1ddff..f25706218 100755 --- a/mptcp/files/usr/bin/multipath +++ b/mptcp/files/usr/bin/multipath @@ -6,12 +6,15 @@ # Released under GPL 3 or later if [ -d "/proc/sys/net/mptcp" ]; then - if ([ -f /proc/sys/net/mptcp/mptcp_enabled ] && [ `cat /proc/sys/net/mptcp/mptcp_enabled` = 0 ]) || ([ -f /proc/sys/net/mptcp/enabled ] && [ `cat /proc/sys/net/mptcp/enabled` = 0 ]); then + if [ `cat /proc/sys/net/mptcp/mptcp_enabled` = 0 ]; then echo "MPTCP is disabled!" + echo "Please set net.mptcp.mptcp_enabled = 1" exit 1 fi else echo "Your device don't support multipath-TCP." + echo "You have to install the pached kernel to use MPTCP." + echo "See http://multipath-tcp.org/ for details" exit 1 fi @@ -20,68 +23,34 @@ case $1 in echo " Multipath-TCP configuration tool" echo "show/update flags:" echo " multipath [device]" - if [ -f /proc/sys/net/mptcp/mptcp_enabled ]; then - echo " multipath device {on | off | backup }" - else - echo " multipath device {on | off | signal | backup }" - fi + echo " multipath device {on | off | backup | handover}" echo echo "show established conections: -c" echo "show fullmesh info: -f" echo "show kernel config: -k" - echo "show MPTCP info: -m" echo echo "Flag on the device, to enable/disable MPTCP for this interface. The backup-flag" echo "will allow a subflow to be established across this interface, but only be used" echo "as backup. Handover-flag indicates that his interface is not used at all (even " echo "no subflow being established), as long as there are other interfaces available." + echo "See http://multipath-tcp.org/ for details" echo exit 0 ;; "-c") - if [ -f /proc/net/mptcp_net/mptcp ]; then - cat /proc/net/mptcp_net/mptcp - else - ss -M - fi + cat /proc/net/mptcp_net/mptcp exit 0;; "-f") - if [ -f /proc/net/mptcp_fullmesh ]; then - cat /proc/net/mptcp_fullmesh - else - ip mptcp endpoint | grep fullmesh - fi + cat /proc/net/mptcp_fullmesh exit 0;; "-k") - if [ -f /proc/sys/net/mptcp/mptcp_enabled ]; then - echo Enabled: `cat /proc/sys/net/mptcp/mptcp_enabled` - elif [ -f /proc/sys/net/mptcp/enabled ]; then - echo Enabled: `cat /proc/sys/net/mptcp/enabled` - fi - if [ -f /proc/sys/net/mptcp/mptcp_path_manager ]; then - echo Path Manager: `cat /proc/sys/net/mptcp/mptcp_path_manager` - fi - if [ -f /proc/sys/net/mptcp/mptcp_checksum ]; then - echo Use checksum: `cat /proc/sys/net/mptcp/mptcp_checksum` - else - echo Use checksum: `cat /proc/sys/net/mptcp/checksum_enabled` - fi - if [ -f /proc/sys/net/mptcp/mptcp_scheduler ]; then - echo Scheduler: `cat /proc/sys/net/mptcp/mptcp_scheduler` - fi - if [ -f /proc/sys/net/mptcp/mptcp_syn_retries ]; then - echo Syn retries: `cat /proc/sys/net/mptcp/mptcp_syn_retries` - fi - if [ -f /proc/sys/net/mptcp/mptcp_debug ]; then - echo Debugmode: `cat /proc/sys/net/mptcp/mptcp_debug` - fi + echo Enabled: `cat /proc/sys/net/mptcp/mptcp_enabled` + echo Path Manager: `cat /proc/sys/net/mptcp/mptcp_path_manager` + echo Use checksum: `cat /proc/sys/net/mptcp/mptcp_checksum` + echo Scheduler: `cat /proc/sys/net/mptcp/mptcp_scheduler` + echo Syn retries: `cat /proc/sys/net/mptcp/mptcp_syn_retries` + echo Debugmode: `cat /proc/sys/net/mptcp/mptcp_debug` echo - exit 0 ;; - "-m") - if [ -f /proc/net/mptcp_net/snmp ]; then - cat /proc/net/mptcp_net/snmp - else - nstat -z | grep -i mptcp - fi + echo See http://multipath-tcp.org/ for details exit 0 ;; "") for ifpath in /sys/class/net/*; do @@ -101,70 +70,33 @@ TYPE="$2" exit 1 } -if [ -f /proc/sys/net/mptcp/mptcp_enabled ]; then - FLAG_PATH="/sys/class/net/$DEVICE/flags" - IFF=`cat $FLAG_PATH` +FLAG_PATH="/sys/class/net/$DEVICE/flags" +IFF=`cat $FLAG_PATH` - IFF_OFF="0x80000" - IFF_ON="0x00" - IFF_BACKUP="0x100000" - IFF_HANDOVER="0x200000" - IFF_MASK="0x380000" +IFF_OFF="0x80000" +IFF_ON="0x00" +IFF_BACKUP="0x100000" +IFF_HANDOVER="0x200000" +IFF_MASK="0x380000" - case $TYPE in - "off") FLAG=$IFF_OFF;; - "on") FLAG=$IFF_ON;; - "backup") FLAG=$IFF_BACKUP;; - "handover") FLAG=$IFF_HANDOVER;; - "") - IFF=`printf "0x%02x" $(($IFF&$IFF_MASK))` - case "$IFF" in - $IFF_OFF) echo $DEVICE is deactivated;; - $IFF_ON) echo $DEVICE is in default mode;; - $IFF_BACKUP) echo $DEVICE is in backup mode;; - $IFF_HANDOVER) echo $DEVICE is in handover mode;; - *) echo "Unkown state!" && exit 1;; - esac - exit 0;; - *) echo "Unkown flag! Use 'multipath -h' for help" && exit 1;; - esac +case $TYPE in + "off") FLAG=$IFF_OFF;; + "on") FLAG=$IFF_ON;; + "backup") FLAG=$IFF_BACKUP;; + "handover") FLAG=$IFF_HANDOVER;; + "") + IFF=`printf "0x%02x" $(($IFF&$IFF_MASK))` + case "$IFF" in + $IFF_OFF) echo $DEVICE is deactivated;; + $IFF_ON) echo $DEVICE is in default mode;; + $IFF_BACKUP) echo $DEVICE is in backup mode;; + $IFF_HANDOVER) echo $DEVICE is in handover mode;; + *) echo "Unkown state!" && exit 1;; + esac + exit 0;; + *) echo "Unkown flag! Use 'multipath -h' for help" && exit 1;; +esac - printf "0x%02x" $(($(($IFF^$(($IFF&$IFF_MASK))))|$FLAG)) > $FLAG_PATH -else - ID=$(ip mptcp endpoint show | grep "dev $DEVICE" | awk '{print $3}') - IFF=$(ip mptcp endpoint show | grep "dev $DEVICE" | awk '{print $4}') - IP=$(ifconfig $DEVICE | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p') - RMID=$(ip mptcp endpoint show | grep '::ffff' | awk '{ print $3 }') - [ -n "$RMID" ] && ip mptcp endpoint delete id $RMID 2>&1 >/dev/null - case $TYPE in - "off") - [ -n "$ID" ] && ip mptcp endpoint delete id $ID 2>&1 >/dev/null - exit 0;; - "on") - [ -n "$ID" ] && ip mptcp endpoint delete id $ID 2>&1 >/dev/null - ip mptcp endpoint add $IP dev $DEVICE subflow fullmesh - exit 0;; - "signal") - [ -n "$ID" ] && ip mptcp endpoint delete id $ID 2>&1 >/dev/null - #ip mptcp endpoint add $IP dev $DEVICE signal subflow fullmesh - ip mptcp endpoint add $IP dev $DEVICE signal - exit 0;; - "backup") - [ -n "$ID" ] && ip mptcp endpoint delete id $ID 2>&1 >/dev/null - ip mptcp endpoint add $IP dev $DEVICE backup fullmesh - exit 0;; - "") - case "$IFF" in - "") echo $DEVICE is deactivated;; - "subflow") echo $DEVICE is in default mode;; - "backup") echo $DEVICE is in backup mode;; - "signal") echo $DEVICE is in signal mode;; - "fullmesh") echo $DEVICE is in fullmesh mode;; - *) echo "$DEVICE Unkown state!" && exit 1;; - esac - exit 0;; - *) echo "Unkown flag! Use 'multipath -h' for help" && exit 1;; - esac +printf "0x%02x" $(($(($IFF^$(($IFF&$IFF_MASK))))|$FLAG)) > $FLAG_PATH -fi diff --git a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking index 1efcca695..c764e794d 100755 --- a/mptcp/files/usr/share/omr/post-tracking.d/post-tracking +++ b/mptcp/files/usr/share/omr/post-tracking.d/post-tracking @@ -1,45 +1,20 @@ SETROUTE=false -. /lib/functions/network.sh - -find_network_device() { - local device="${1}" - local device_section="" - - check_device() { - local cfg="${1}" - local device="${2}" - - local type name - config_get name "${cfg}" name - - [ "${name}" = "${device}" ] && device_section="${cfg}" - } - if [ ! -z "$device" ]; then - config_load network - config_foreach check_device device "$(uci -q network.${device}.device)" - fi - echo "${device_section}" -} - set_route() { local multipath_config_route interface_gw interface_if INTERFACE=$1 PREVINTERFACE=$2 SETDEFAULT=$3 [ -z "$SETDEFAULT" ] && SETDEFAULT="yes" - [ -z "$INTERFACE" ] && return multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" } - network_get_device interface_if $INTERFACE + interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -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 '@')" ] && interface_if=$(ifstatus "${INTERFACE}" | jsonfilter -q -e '@["device"]') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") @@ -55,8 +30,7 @@ set_route() { interface_gw=$(ubus call network.interface.${INTERFACE}_4 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n") fi 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" + [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if" [ "$SETDEFAULT" = "yes" ] && ip route replace default scope global nexthop via $interface_gw dev $interface_if 2>&1 >/dev/null ip route replace default via $interface_gw dev $interface_if table 991337 2>&1 >/dev/null && SETROUTE=true fi @@ -69,18 +43,15 @@ set_route6() { PREVINTERFACE=$2 SETDEFAULT=$3 [ -z "$SETDEFAULT" ] && SETDEFAULT="yes" - [ -z "$INTERFACE" ] && return multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" } - network_get_device interface_if $INTERFACE + interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -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 '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up") @@ -111,7 +82,6 @@ set_server_default_route() { [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" config_get disabled $server disabled [ "$disabled" = "1" ] && return - [ -z "$OMR_TRACKER_INTERFACE" ] && return multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { @@ -137,7 +107,6 @@ set_server_default_route6() { [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" config_get disabled $server disabled [ "$disabled" = "1" ] && return - [ -z "$OMR_TRACKER_INTERFACE" ] && return multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath) [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off") [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { @@ -188,17 +157,14 @@ delete_server_default_route6() { set_routes_intf() { local multipath_config_route local INTERFACE=$1 - [ -z "$INTERFACE" ] && return multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" } - network_get_device interface_if $INTERFACE - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -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"]') interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') @@ -245,17 +211,14 @@ set_routes_intf() { set_routes_intf6() { local multipath_config_route local INTERFACE=$1 - [ -z "$INTERFACE" ] && return multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" } - network_get_device interface_if $INTERFACE - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_6" 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 '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') @@ -318,17 +281,14 @@ set_routes_intf6() { set_route_balancing() { local multipath_config_route interface_gw interface_if INTERFACE=$1 - [ -z "$INTERFACE" ] && return multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" } - network_get_device interface_if $INTERFACE - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -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 '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') @@ -369,17 +329,14 @@ set_route_balancing() { set_route_balancing6() { local multipath_config_route interface_gw interface_if INTERFACE=$1 - [ -z "$INTERFACE" ] && return multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath) [ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off") [ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && { [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")" [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${INTERFACE}.multipath || echo "off")" } - network_get_device interface_if $INTERFACE - [ -z "$interface_if" ] && interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') + interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -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 '@')" ] && interface_if=$(ifstatus "$INTERFACE" | jsonfilter -q -e '@["device"]') interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') @@ -435,19 +392,16 @@ set_route_balancing6() { set_server_all_routes() { local server=$1 - [ -z "$OMR_TRACKER_INTERFACE" ] && return server_route() { local serverip multipath_config_route serverip=$1 [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" config_get disabled $server disabled [ "$disabled" = "1" ] && return - network_get_device interface_if $OMR_TRACKER_INTERFACE - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.device) + interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off") [ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off') @@ -464,7 +418,7 @@ 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')" != "$serverip $routesintf " ]) || ([ "$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 @@ -472,7 +426,7 @@ set_server_all_routes() { ip route replace $serverip scope global metric 1 $routesintf 2>&1 >/dev/null [ "$(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')" != "$serverip $routesintfbackup " ]) || ([ "$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 fi @@ -483,19 +437,16 @@ set_server_all_routes() { set_server_all_routes6() { local server=$1 - [ -z "$OMR_TRACKER_INTERFACE" ] && return server_route() { local serverip multipath_config_route serverip=$1 [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" config_get disabled $server disabled [ "$disabled" = "1" ] && return - network_get_device interface_if $OMR_TRACKER_INTERFACE - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.device) + interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off") [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { @@ -511,7 +462,7 @@ 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' | tr -d '\n')" != "$serverip $routesintf6 " ]) || ([ "$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 @@ -532,7 +483,6 @@ set_server_all_routes6() { set_server_route() { local server=$1 - [ -z "$OMR_TRACKER_INTERFACE" ] && return server_route() { local serverip multipath_config_route serverip=$1 @@ -547,12 +497,10 @@ set_server_route() { [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${OMR_TRACKER_INTERFACE}.multipath || echo "off")" } - network_get_device interface_if $OMR_TRACKER_INTERFACE - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.device) + interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') #multipath_current_config=$(multipath $interface_if | grep "deactivated") interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up") @@ -570,7 +518,6 @@ set_server_route() { set_server_route6() { local server=$1 - [ -z "$OMR_TRACKER_INTERFACE" ] && return server_route() { local serverip multipath_config_route serverip=$1 @@ -585,12 +532,10 @@ set_server_route6() { [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${OMR_TRACKER_INTERFACE}.multipath || echo "off")" } - network_get_device interface_if $OMR_TRACKER_INTERFACE - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.device) + interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]') [ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" | jsonfilter -q -e '@["device"]') - [ -z "$interface_if" ] && interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname) interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') #multipath_current_config=$(multipath $interface_if | grep "deactivated") interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up") @@ -611,13 +556,9 @@ del_server_route() { remove_route() { local serverip="$1" [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" - [ -n "$serverip" ] && _log "Delete default route to $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" + [ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE" local metric - if [ -z "$OMR_TRACKER_INTERFACE" ]; then - metric=0 - else - metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - fi + metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) [ -n "$metric" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$serverip" ] && [ -n "$(ip route show $serverip dev $OMR_TRACKER_DEVICE metric $metric)" ] && ip route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$serverip" ] && [ -n "$(ip route show $serverip dev $OMR_TRACKER_DEVICE)" ] && ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$serverip" ] && [ -n "$(ip route show $serverip | grep $OMR_TRACKER_DEVICE)" ] && ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 @@ -635,15 +576,11 @@ del_server_route6() { remove_route() { local serverip="$1" [ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')" - [ -n "$serverip" ] && _log "Delete default route to $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE" + [ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE" local metric - if [ -z "$OMR_TRACKER_INTERFACE" ]; then - metric=0 - else - metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) - fi - [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$metric" ] && [ -n "$serverip"] && [ -n "$(ip -6 route show $serverip dev $OMR_TRACKER_DEVICE metric $metric)" ] && ip -6 route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 - [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$metric" ] && [ -n "$serverip" ] && [ -n "$(ip -6 route show $serverip dev $OMR_TRACKER_DEVICE)" ] && ip -6 route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 + metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric) + [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$metric" ] && [ -n "$(ip -6 route show $serverip dev $OMR_TRACKER_DEVICE metric $metric)" ] && ip -6 route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1 + [ -n "$OMR_TRACKER_DEVICE" ] && [ -n "$metric" ] && [ -n "$(ip -6 route show $serverip dev $OMR_TRACKER_DEVICE)" ] && ip -6 route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1 } config_list_foreach $server ip remove_route if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then @@ -664,14 +601,14 @@ disable_pihole() { commit dhcp EOF fi - /etc/init.d/dnsmasq restart 2>&1 >/dev/null + /etc/init.d/dnsmasq restart fi } enable_pihole() { local server=$1 nbserver=$((nbserver+1)) - if [ -n "$server" ] && [ "$(uci -q get openmptcprouter.${server}.pihole)" = "1" ] && [ "$(uci -q get dhcp.@dnsmasq[0].server | grep '127.0.0.1#5353')" != "" ]; then + if [ "$(uci -q get openmptcprouter.${server}.pihole)" = "1" ] && [ "$(uci -q get dhcp.@dnsmasq[0].server | grep '127.0.0.1#5353')" != "" ]; then piholeenabled=$((piholeenabled+1)) fi } @@ -704,119 +641,28 @@ default_gw6=$(ip -6 route show default | grep -v "metric" | awk '/default/ {prin interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]') - -if [ -n "$(grep RUTX /etc/board.json)" ] && [ -n "$OMR_TRACKER_INTERFACE" ]; then - if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.device)" = "wwan0" ]; then - modemdata=$(omr-modemmanager '/sys/devices/platform/soc/60f8800.usb2/6000000.dwc3/xhci-hcd.1.auto/usb3/3-1' all) - gen=$(echo $modemdata | cut -d ';' -f 5 | tr -d '\n') - if [ "$gen" = "gsm" ]; then - echo "default-on" > /sys/class/leds/mob_gen_2/trigger - echo "none" > /sys/class/leds/mob_gen_3/trigger - echo "none" > /sys/class/leds/mob_gen_4/trigger - elif [ "$gen" = "umts" ]; then - echo "none" > /sys/class/leds/mob_gen_2/trigger - echo "default-on" > /sys/class/leds/mob_gen_3/trigger - echo "none" > /sys/class/leds/mob_gen_4/trigger - elif [ "$gen" = "lte" ]; then - echo "none" > /sys/class/leds/mob_gen_2/trigger - echo "none" > /sys/class/leds/mob_gen_3/trigger - echo "default-on" > /sys/class/leds/mob_gen_4/trigger - fi - bar=$(echo $modemdata | cut -d ';' -f 1 | tr -d '\n') - if [ "$bar" -gt "0" ]; then - echo "default-on" > /sys/class/leds/mob_ssid_1/trigger - else - echo "none" > /sys/class/leds/mob_ssid_1/trigger - fi - if [ "$bar" -gt "30" ]; then - echo "default-on" > /sys/class/leds/mob_ssid_2/trigger - else - echo "none" > /sys/class/leds/mob_ssid_2/trigger - fi - if [ "$bar" -gt "50" ]; then - echo "default-on" > /sys/class/leds/mob_ssid_3/trigger - else - echo "none" > /sys/class/leds/mob_ssid_3/trigger - fi - if [ "$bar" -gt "70" ]; then - echo "default-on" > /sys/class/leds/mob_ssid_4/trigger - else - echo "none" > /sys/class/leds/mob_ssid_4/trigger - fi - if [ "$bar" -gt "90" ]; then - echo "default-on" > /sys/class/leds/mob_ssid_5/trigger - else - echo "none" > /sys/class/leds/mob_ssid_5/trigger - fi - elif [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.device)" = "wwan1" ]; then - modemdata=$(omr-modemmanager '/sys/devices/platform/soc/8af8800.usb3/8a00000.dwc3/xhci-hcd.0.auto/usb1/1-1/1-1.2' all) - gen=$(echo $modemdata | cut -d ';' -f 5 | tr -d '\n') - if [ "$gen" = "gsm" ]; then - echo "default-on" > /sys/class/leds/mob2_gen_2/trigger - echo "none" > /sys/class/leds/mob2_gen_3/trigger - echo "none" > /sys/class/leds/mob2_gen_4/trigger - elif [ "$gen" = "umts" ]; then - echo "none" > /sys/class/leds/mob2_gen_2/trigger - echo "default-on" > /sys/class/leds/mob2_gen_3/trigger - echo "none" > /sys/class/leds/mob2_gen_4/trigger - elif [ "$gen" = "lte" ]; then - echo "none" > /sys/class/leds/mob2_gen_2/trigger - echo "none" > /sys/class/leds/mob2_gen_3/trigger - echo "default-on" > /sys/class/leds/mob2_gen_4/trigger - fi - bar=$(echo $modemdata | cut -d ';' -f 1 | tr -d '\n') - if [ "$bar" -gt "0" ]; then - echo "default-on" > /sys/class/leds/mob2_ssid_1/trigger - else - echo "none" > /sys/class/leds/mob2_ssid_1/trigger - fi - if [ "$bar" -gt "30" ]; then - echo "default-on" > /sys/class/leds/mob2_ssid_2/trigger - else - echo "none" > /sys/class/leds/mob2_ssid_2/trigger - fi - if [ "$bar" -gt "50" ]; then - echo "default-on" > /sys/class/leds/mob2_ssid_3/trigger - else - echo "none" > /sys/class/leds/mob2_ssid_3/trigger - fi - if [ "$bar" -gt "70" ]; then - echo "default-on" > /sys/class/leds/mob2_ssid_4/trigger - else - echo "none" > /sys/class/leds/mob2_ssid_4/trigger - fi - if [ "$bar" -gt "90" ]; then - echo "default-on" > /sys/class/leds/mob2_ssid_5/trigger - else - echo "none" > /sys/class/leds/mob2_ssid_5/trigger - fi - fi -fi - # An interface in error will never be used in MPTCP if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then - if [ "$interface_up" = "true" ] && [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "modemmanager" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "wireguard" ]); then + if [ "$interface_up" = "true" ] && ([ "$(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 20 + sleep 10 fi 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 [ "$multipath_status" != "off" ] || [ "$(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" 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 + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='down' #if [ "$(sysctl -n net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ]; then # multipath "$OMR_TRACKER_DEVICE" off > /dev/null 2>&1 #fi @@ -826,47 +672,35 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then 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 + if [ "$(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 - /etc/init.d/openvpn restart $VPN_BASE_INTF 2>&1 >/dev/null + uci -q batch <<-EOF >/dev/null + set openvpn.$VPN_BASE_INTF.local=$VPN_BASE_INTF_IP + commit openvpn + EOF + /etc/init.d/openvpn restart $VPN_BASE_INTF 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 [ "$(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 - 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" - fi - fi - - mail_alert="" - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)" + if ([ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ] || [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ]) && [ "$(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 + 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" fi + mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)" [ -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)" @@ -880,16 +714,10 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then 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 + script_alert_down="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.script_alert_down)" [ -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 + restart_down="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.restart_down)" [ -z "$restart_down" ] && restart_down="$(uci -q get omr-tracker.defaults.restart_down)" [ "$restart_down" = "1" ] && { _log "Restart $OMR_TRACKER_INTERFACE" @@ -913,25 +741,25 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; 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 + /etc/init.d/shadowsocks-libev rules_down + /etc/init.d/shadowsocks-libev rules_up 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 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 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 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 fi config_load openmptcprouter config_foreach disable_pihole server @@ -942,9 +770,7 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then fi fi dns_flush - if [ -n "$OMR_TRACKER_INTERFACE" ]; then - uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.lc - fi + uci -q delete openmptcprouter.$OMR_TRACKER_INTERFACE.lc uci -q commit openmptcprouter #ubus call network reload @@ -969,17 +795,15 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om fi 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" - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Current route: $(ip r)" ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE 2>&1 >/dev/null if [ "$(pgrep 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 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" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ]); then local serverip=$(uci -q get shadowsocks-libev.sss0.server) [ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')" if [ "$serverip" = "192.168.1.3" ] || [ "$serverip" = "127.0.0.1" ]; then @@ -988,18 +812,17 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE="interface" uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" if [ "$(uci -q get glorytun.vpn.enable)" != "1" ] || [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then - OMR_NETWORK_DEVICE=$(find_network_device ${OMR_TRACKER_INTERFACE}) - if [ -n "$OMR_NETWORK_DEVICE" ] && [ -n "$(uci -q get network.$OMR_NETWORK_DEVICE.mtu)" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - mtu=$(uci -q get network.$OMR_NETWORK_DEVICE.mtu) - uci -q set openmptcprouter.${OMR_TRACKER_INTERFACE}.mtu=$mtu + if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then + mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu) + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu [ -n "$mtu" ] && ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 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 + 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) #local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 8.8.8.8) [ -n "$mtu" ] && { - uci -q set openmptcprouter.${OMR_TRACKER_INTERFACE}.mtu=$mtu + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s") } @@ -1024,12 +847,12 @@ 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 #ubus call network reload exit 0 fi -if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]; then +if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]; then if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state)" != "up" ]; then uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up' uci -q commit openmptcprouter @@ -1037,7 +860,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACK exit 0 fi -if [ "$OMR_TRACKER_PREV_STATUS" != "" ] && [ "$OMR_TRACKER_PREV_STATUS" != "$OMR_TRACKER_STATUS" ] && [ -n "$OMR_TRACKER_INTERFACE" ]; then +if [ "$OMR_TRACKER_PREV_STATUS" != "" ] && [ "$OMR_TRACKER_PREV_STATUS" != "$OMR_TRACKER_STATUS" ]; then _log "$OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) switched up" mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)" [ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)" @@ -1056,27 +879,24 @@ if [ "$OMR_TRACKER_PREV_STATUS" != "" ] && [ "$OMR_TRACKER_PREV_STATUS" != "$OMR script_alert_up="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.script_alert_up)" [ -n "$script_alert_up" ] && eval $script_alert_up fi -if [ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state)" != "up" ]; then +if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state)" != "up" ]; then uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up' uci -q commit openmptcprouter dns_flush fi -if [ -n "$OMR_TRACKER_INTERFACE" ]; then - multipath_config=$(uci -q get "openmtpcprouter.$OMR_TRACKER_INTERFACE.multipath") - [ -z "$multipath_config" ] && multipath_config=$(uci -q get "network.$OMR_TRACKER_INTERFACE.multipath" || echo "off") - [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${OMR_TRACKER_INTERFACE}.multipath || echo "off")" - } -fi +multipath_config=$(uci -q get "openmtpcprouter.$OMR_TRACKER_INTERFACE.multipath") +[ -z "$multipath_config" ] && multipath_config=$(uci -q get "network.$OMR_TRACKER_INTERFACE.multipath" || echo "off") +[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && { + [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "openvpn" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")" + [ "$(uci -q get openmptcprouter.settings.mptcpovervpn)" = "wireguard" ] && multipath_config_route="$(uci -q get openmptcprouter.wg${OMR_TRACKER_INTERFACE}.multipath || echo "off")" +} 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 - 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 | grep -v metric | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then + omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun") + 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_GATEWAY dev $OMR_TRACKER_DEVICE" ip route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE 2>&1 >/dev/null fi @@ -1088,8 +908,7 @@ if [ "$multipath_config" = "master" ]; then fi fi 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") + omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun") 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 @@ -1104,9 +923,8 @@ if [ "$multipath_config" = "master" ]; then 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" ] && [ "$(ip 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" ] && [ "$(ip route show default | grep -v metric | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ]; then + omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun") + if [ -n "$omrvpn_intf" ] && [ "$(ip route show default | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ]; then routesbalancing="" routesbalancingbackup="" nbintf=0 @@ -1117,11 +935,9 @@ 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')" != "default via $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)" + ([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing " ]) || ([ "$nbintf" = "1" ] && ([ "$(ip r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]) && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && { + _log "Set ip route replace default scope global $routesbalancing" ip route replace default scope global metric 1 $routesbalancing 2>&1 >/dev/null - [ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New route: $(ip r)" } } [ -n "$routesbalancing6" ] && { @@ -1131,8 +947,8 @@ if [ "$multipath_config" = "master" ]; then } } [ -n "$routesbalancingbackup" ] && { - ([ "$nbintfb" -gt "1" ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $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" + ([ "$nbintfb" -gt "1" ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup " ]) || ([ "$nbintf" = "1" ] && ([ "$(ip r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]) && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && { + _log "Set backup ip route replace default scope global $routesbalancingbackup" ip route replace default scope global metric 999 $routesbalancingbackup 2>&1 >/dev/null } } @@ -1150,7 +966,7 @@ if [ "$multipath_config" = "master" ]; then 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 2>&1 >/dev/null fi - if ([ -n "$OMR_TRACKER_INTERFACE" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ]) || [ $(($(date +"%s") + $((10 + RANDOM % 31)) - $(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 [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((10 + RANDOM % 31)) - $(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 openmptcprouter-vps)" = "" ] && /etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1 fi multipath_config="on" @@ -1164,9 +980,8 @@ if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then elif [ "$(uci -q get openmptcprouter.settings.master)" != "failover" ]; then config_foreach set_server_route server fi - if [ -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 + if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip r show dev $OMR_TRACKER_DEVICE | grep default)" = "" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" != "" ]; then + ip r replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $(uci -q get network.$OMR_TRACKER_INTERFACE.metric) >/dev/null 2>&1 fi fi if [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then @@ -1177,12 +992,12 @@ if [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; th elif [ "$(uci -q get openmptcprouter.settings.master)" != "failover" ]; then config_foreach set_server_route6 server fi - if [ -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 + if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip -6 r show dev $OMR_TRACKER_DEVICE | grep default)" = "" ] && [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)" != "" ]; then ip -6 r replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $(uci -q get network.$OMR_TRACKER_INTERFACE.metric) >/dev/null 2>&1 fi fi -if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]); then +if [ "$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)" @@ -1197,7 +1012,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$mul serverip=$1 #gtudpst="up" #[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && [ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && gtudpst="backup" - if [ "$OMR_TRACKER_DEVICE_IP" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP | grep running)" = "" ] && [ -n "$(resolveip -4 $serverip)" ]; then + if [ "$OMR_TRACKER_DEVICE_IP" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP)" = "" ] && [ -n "$(resolveip -4 $serverip)" ]; then 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_IP to addr $serverip port ${gtudp_port} dev ${gtudp_dev} set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 @@ -1212,7 +1027,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$mul fi fi fi - if [ "$OMR_TRACKER_DEVICE_IP6" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP6 | grep running)" = "" ] && [ -n "$(resolveip -6 $serverip)" ]; then + if [ "$OMR_TRACKER_DEVICE_IP6" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP6)" = "" ] && [ -n "$(resolveip -6 $serverip)" ]; then 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/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1 @@ -1242,7 +1057,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$multipath_config" = "on" ] || [ "$mul fi [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && { [ "$multipath_status" = "$multipath_config" ] || { - if [ "$(sysctl -qen net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ] || [ "$(sysctl -qen net.mptcp.enabled | tr -d '\n')" = "1" ]; then + if [ "$(sysctl -n net.mptcp.mptcp_enabled | tr -d '\n')" = "1" ]; then _log "Multipath $OMR_TRACKER_DEVICE switched to $multipath_config" multipath "$OMR_TRACKER_DEVICE" "$multipath_config" fi @@ -1251,7 +1066,7 @@ fi #ubus call network reload # Save wan settings for status page -if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((30 + RANDOM % 31)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state)" = "down" ]); then +if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((30 + RANDOM % 31)) - $(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="" @@ -1268,7 +1083,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC #[ -z "$check_ipv6_website" ] && check_ipv6_website="http://ipv6.openmptcprouter.com/" #local ip6addr="$(curl -s -6 -m 2 $check_ipv6_website)" #[ -z "$ip6addr" ] && { - # local ip6addr="$(curl -s -6 -m 2 http://ifconfig.me/)" + # local ip6addr="$(curl -s -6 -m 2 http://ifconfig.co/)" #} #if [ "$(uci -q get openmptcprouter.settings.ipv6_disable)" = "0" ]; then # if [ -n "$ip6addr" ] && [ "$(uci -q get dhcp.lan.ra_default)" != 1 ]; then @@ -1289,14 +1104,14 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC 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')" #[ -z "$asn" ] && { - local asn="$(timeout 2 whois $ipaddr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')" + local asn="$(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://55860.com/bak/version.json)" + local 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') @@ -1304,16 +1119,9 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC uci -q set openmptcprouter.latest_versions.lc=$(date +"%s") } fi - [ -n "$ipaddr" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.publicip)" != "$ipaddr" ] && { - _log "New public ip detected for $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE): $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 - } - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ipaddr" - } + [ -n "$ipaddr" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ipaddr" [ -n "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" - [ -n "$asn" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.asn)" != "$asn" ] && { + [ -n "$asn" ] && { uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.asn="$asn" } @@ -1321,7 +1129,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC local lanip="$(uci -q get network.lan.ipaddr)" local masterip get_master_ip() { - if [ -n "$1" ] && [ "$(uci -q get openmptcprouter.$1.multipath)" = "master" ]; then + if [ "$(uci -q get openmptcprouter.$1.multipath)" = "master" ]; then masterip="$(uci -q get openmptcprouter.$1.publicip)" fi } @@ -1330,8 +1138,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC if [ -n "$lanip" ] && [ -n "$masterip" ] && [ -n "$ipaddr" ] && [ "$ipaddr" = "$masterip" ] && [ "$(uci -q get openmptcprouter.settings.disableloopdetection)" != "1" ]; then loop=0 routingloop() { - vpsip="" - [ -n "$1"] && vpsip="$(uci -q get openmptcprouter.$1.ip)" + vpsip="$(uci -q get openmptcprouter.$1.ip)" if [ -n "$vpsip" ] && [ "$(omr-routing-loop $vpsip $lanip $OMR_TRACKER_DEVICE)" = "detected" ]; then loop=1 fi @@ -1356,10 +1163,8 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC [ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox" } if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - if [ -n "$(uci -q get network.$(find_network_device ${OMR_TRACKER_INTERFACE}).mtu)" ]; then - network_device=$(find_network_device ${OMR_TRACKER_INTERFACE}) - mtu="" - [ -n "$network_device" ] && mtu=$(uci -q get network.${network_device}.mtu) + if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then + mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu) [ -n "$mtu" ] && { uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 @@ -1385,7 +1190,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC } config_load openmptcprouter config_foreach traceboxmtutest server - [ "$(uci -q get openmptcprouter.settings.tracebox)" = "0" ] && [ -n "$OMR_TRACKER_DEVICE" ] && { + [ "$(uci -q get openmptcprouter.settings.tracebox)" = "0" ] && { mptcpsupport="$(omr-mptcp-intf $OMR_TRACKER_DEVICE)" [ -n "$mptcpsupport" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$mptcpsupport" } @@ -1408,14 +1213,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC uci -q set openmptcprouter.latest_versions.lc=$(date +"%s") } fi - [ -n "$ip6addr" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.publicip)" != "$ip6addr" ] && { - _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 - } - uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ip6addr" - } + [ -n "$ipaddr" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip6="$ip6addr" [ -n "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY" [ -n "$asn" ] && { uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.asn="$asn" @@ -1429,11 +1227,10 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC [ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox" } if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ] && [ -n "$OMR_TRACKER_DEVICE" ]; then - network_device=$(find_network_device ${OMR_TRACKER_INTERFACE}) - if [ -n "$network_device" ] && [ -n "$(uci -q get network.${network_device}.mtu)" ]; then - mtu=$(uci -q get network.$(find_network_device ${OMR_TRACKER_INTERFACE}).mtu) + if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then + mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu) [ -n "$mtu" ] && { - uci -q set openmptcprouter.${OMR_TRACKER_INTERFACE}.mtu=$mtu + uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1 } elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then @@ -1501,7 +1298,7 @@ if [ -n "$OMR_TRACKER_INTERFACE" ] && ([ "$(uci -q get openmptcprouter.$OMR_TRAC dns_flush fi -[ -n "$OMR_TRACKER_INTERFACE" ] && [ -n "$OMR_TRACKER_LATENCY" ] && { +[ -n "$OMR_TRACKER_LATENCY" ] && { [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.latency)" != "" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency_previous="$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.latency)" 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" @@ -1510,7 +1307,7 @@ fi 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" ] || [ "$(uci -q get openmptcprouter.$masterintf.state)" = "down" ]; then masterlatency=1000 fi if [ -n "$masterintf" ] && ([ "$masterlatency" != "" ] || [ "$(uci -q get openmptcprouter.$masterintf.state)" = "down" ]); then @@ -1536,24 +1333,24 @@ fi } # If a service is down, force restart it -if [ -f /etc/init.d/shadowsocks-libev ] && [ "$(pgrep ss-redir)" = "" ] && [ "$(pgrep 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 +if [ "$(pgrep ss-redir)" = "" ] && [ "$(pgrep 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 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 +if [ "$(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 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 +if [ "$(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 sleep 5 fi if [ "$(pgrep unbound)" = "" ] && [ -f /etc/init.d/unbound ] && [ "$(uci -q get unbound.@unbound[0].enabled)" = "1" ]; then - /etc/init.d/unbound restart 2>&1 >/dev/null + /etc/init.d/unbound restart sleep 5 fi @@ -1566,53 +1363,47 @@ 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 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 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 sleep 5 fi if [ "$(pgrep 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 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 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 - 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/rpcd restart sleep 5 fi #if [ "$(pgrep ModemManager)" = "" ] && [ -f /etc/init.d/modemmanager ] && [ -n "$(uci -q show network | grep modemmanager)" ] && [ "$(uci -q get openmptcprouter.settings.modemmanager)" != "0" ]; then # _log "Can't find ModemManager, restart it..." -# /etc/init.d/modemmanager restart 2>&1 >/dev/null +# /etc/init.d/modemmanager restart # 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 fi set_get_config() { @@ -1628,7 +1419,7 @@ fi if [ "$(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.18.1.3" ] && [ "$(pgrep -f omr-tracker-ss)" = "" ] && [ "$(pgrep -f '/etc/init.d/omr-tracker')" = "" ]; then _log "Can't find omr-tracker-ss, restart omr-tracker..." - /etc/init.d/omr-tracker restart 2>&1 >/dev/null + /etc/init.d/omr-tracker restart fi if [ "$(uci -q get glorytun.vpn.enable)" = "1" ] && [ "$(uci -q get glorytun.vpn.key)" = "" ]; then @@ -1650,14 +1441,14 @@ if [ -n "$(logread | tail -n 2 | grep 'Ring expansion failed')" ]; then echo 1 > /sys/bus/pci/rescan fi -if [ -f /etc/init.d/omr-bypass ] && [ "$(iptables-save | grep omr-bypass)" = "" ] && [ "$(pgrep omr-bypass)" = "" ]; then +if [ "$(iptables-save | grep omr-bypass)" = "" ] && [ "$(pgrep omr-bypass)" = "" ]; then _log "Can't find omr-bypass rules, restart omr-bypass..." - /etc/init.d/omr-bypass 2>&1 >/dev/null + /etc/init.d/omr-bypass fi -if [ -f /etc/backup/installed_packages.txt ] && [ -n "$(grep overlay /etc/backup/installed_packages.txt)" ]; then +if [ -f /etc/backup/installed_packages.txt ]; then _log "Reinstall packages..." - /etc/init.d/sysupgrade restart 2>&1 >/dev/null + /etc/init.d/sysupgrade restart fi if [ "$(pgrep openmptcprouter-vps)" = "" ] && ([ "$(uci -q show openmptcprouter | grep get_config=\'1\')" != "" ] || [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" != "" ]); then @@ -1665,13 +1456,12 @@ if [ "$(pgrep openmptcprouter-vps)" = "" ] && ([ "$(uci -q show openmptcprouter sleep 5 fi -#if [ "$(uci -q show openmptcprouter | grep server)" != "" ] && [ "$(uci -q show openmptcprouter | grep password)" != "" ] && [ "$(pgrep openmptcprouter-vps)" = "" ] && [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" = "" ] && ([ "$(uci -q show openmptcprouter | grep set_firewall=\'1\')" != "" ] || [ -z "$(iptables-save | grep omr_dst_bypass_${OMR_TRACKER_DEVICE})" ]); then -if [ "$(uci -q show openmptcprouter | grep server)" != "" ] && [ "$(uci -q show openmptcprouter | grep password)" != "" ] && [ "$(pgrep openmptcprouter-vps)" = "" ] && [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" = "" ] && [ "$(uci -q show openmptcprouter | grep set_firewall=\'1\')" != "" ]; then +if [ "$(pgrep openmptcprouter-vps)" = "" ] && ([ "$(uci -q show openmptcprouter | grep set_firewall=\'1\')" != "" ] || [ -z "$(iptables-save | grep omr_dst_bypass_${OMR_TRACKER_DEVICE})" ]); then _log "Set firewall on server" /etc/init.d/openmptcprouter-vps set_vps_firewall >/dev/null 2>&1 run_fw_include() { - [ -n "$1" ] && [ "$(uci -q get firewall.$1.reload)" = "0" ] && sh $(uci -q get firewall.$1.path) >/dev/null 2>&1 + [ "$(uci -q get firewall.$1.reload)" = "0" ] && sh $(uci -q get firewall.$1.path) >/dev/null 2>&1 } config_load firewall config_foreach run_fw_include include diff --git a/mptcpd/Makefile b/mptcpd/Makefile index 47f0de339..a23a4a41b 100644 --- a/mptcpd/Makefile +++ b/mptcpd/Makefile @@ -8,15 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=mptcpd -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/intel/mptcpd.git -PKG_SOURCE_VERSION:=0e7175adf721c95a3bd742be77cb85e0b47138cd -PKG_VERSION:=0.7-$(PKG_SOURCE_VERSION) +PKG_VERSION:=0.5.1 +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://github.com/intel/mptcpd/releases/download/v$(PKG_VERSION) +PKG_HASH:=0ee4418880f20a1a2eff5c54c26185a75092cb44cbabe0fa3f25a2c5886459e7 PKG_RELEASE:=1 PKG_MAINTAINER:=Ycarus (Yannick Chabanois) -PKG_FIXUP:=autoreconf - PKG_FORTIFY_SOURCE:=2 PKG_INSTALL:=1 PKG_BUILD_PARALLEL:=1 @@ -45,7 +43,6 @@ endef define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/usr/bin $(CP) $(PKG_INSTALL_DIR)/usr/bin/mptcpd $(1)/usr/bin/mptcpd - $(CP) $(PKG_INSTALL_DIR)/usr/bin/mptcpize $(1)/usr/bin/mptcpize $(INSTALL_DIR) $(1)/usr/include/mptcpd $(CP) $(PKG_INSTALL_DIR)/usr/include/mptcpd/*.h $(1)/usr/include/ $(INSTALL_DIR) $(1)/usr/lib/mptcpd diff --git a/mptcpd/patches/log.patch b/mptcpd/patches/log.patch new file mode 100644 index 000000000..c0bc52e3c --- /dev/null +++ b/mptcpd/patches/log.patch @@ -0,0 +1,24 @@ +--- a/src/configuration.c 2020-04-14 21:31:22.057292953 +0200 ++++ b/src/configuration.c 2020-04-14 21:32:13.712364449 +0200 +@@ -35,10 +35,10 @@ + */ + //@{ + /// Underlying string concatenation macro. +-#define MPTCPD_CONCAT_IMPL(x, ...) x ## __VA_ARGS__ ++//#define MPTCPD_CONCAT_IMPL(x, ...) x ## __VA_ARGS__ + + /// Concatenate strings using the preprocessor. +-#define MPTCPD_CONCAT(x, ...) MPTCPD_CONCAT_IMPL(x, __VA_ARGS__) ++//#define MPTCPD_CONCAT(x, ...) MPTCPD_CONCAT_IMPL(x, __VA_ARGS__) + //@} + + // Compile-time default logging choice +@@ -47,7 +47,7 @@ + # error Problem configuring default log message destination. + #endif + /// Name of the default logging function determined at compile-time. +-#define MPTCPD_SET_LOG_FUNCTION MPTCPD_CONCAT(l_log_set_, MPTCPD_LOGGER) ++#define MPTCPD_SET_LOG_FUNCTION l_log_set_stderr + + /** + * @brief Get the function that sets the log message destination. diff --git a/mptcpd/patches/remove_log.patch b/mptcpd/patches/remove_log.patch deleted file mode 100644 index ed077f859..000000000 --- a/mptcpd/patches/remove_log.patch +++ /dev/null @@ -1,167 +0,0 @@ ---- a/src/configuration.c 2021-06-29 17:44:20.481179981 +0200 -+++ b/src/configuration.c 2021-06-29 17:44:52.580655950 +0200 -@@ -37,21 +37,12 @@ - * Preprocessor concatenation that expands preprocessor tokens as - * needed by leveraging the usual indirection technique. - */ --///@{ --/// Underlying string concatenation macro. --#define MPTCPD_CONCAT_IMPL(x, ...) x ## __VA_ARGS__ -- --/// Concatenate strings using the preprocessor. --#define MPTCPD_CONCAT(x, ...) MPTCPD_CONCAT_IMPL(x, __VA_ARGS__) --///@} - - // Compile-time default logging choice - #ifndef MPTCPD_LOGGER - // This should never occur! - # error Problem configuring default log message destination. - #endif --/// Name of the default logging function determined at compile-time. --#define MPTCPD_SET_LOG_FUNCTION MPTCPD_CONCAT(l_log_set_, MPTCPD_LOGGER) - - /** - * @brief Get the function that sets the log message destination. -@@ -474,7 +465,6 @@ - - struct mptcpd_config *mptcpd_config_create(int argc, char *argv[]) - { -- MPTCPD_SET_LOG_FUNCTION(); // For early logging. - - struct mptcpd_config *const config = - l_new(struct mptcpd_config, 1); ---- a/src/mptcpize.c 2021-06-29 19:29:57.810281053 +0200 -+++ b/src/mptcpize.c 2021-06-29 19:29:29.942701557 +0200 -@@ -17,7 +17,6 @@ - #include - #include - #include --#include - #include - #include - #include -@@ -79,7 +78,7 @@ - nr++; - envp = calloc(nr + 3, sizeof(char *)); - if (!envp) -- error(1, errno, "can't allocate env list"); -+ fprintf(stderr, "can't allocate env list"); - - // ... filtering out any 'LD_PRELOAD' ... - nr = 0; -@@ -103,7 +102,7 @@ - // build the NULL terminated arg list - argv = calloc(argc + 1, sizeof(char *)); - if (!argv) -- error(1, errno, "can't allocate argument list"); -+ fprintf(stderr, "can't allocate argument list"); - - memcpy(argv, av, argc * sizeof(char*)); - return execvpe(argv[0], argv, envp); -@@ -124,33 +123,33 @@ - len = strlen(name) + 1 + strlen(SYSTEMCTL_SHOW); - cmd = malloc(len); - if (!cmd) -- error(1, 0, "can't allocate systemctl command string"); -+ fprintf(stderr, "can't allocate systemctl command string"); - - sprintf(cmd, SYSTEMCTL_SHOW"%s", name); - systemctl = popen(cmd, "r"); - if (!systemctl) -- error(1, errno, "can't execute %s", cmd); -+ fprintf(stderr, "can't execute %s", cmd); - - free(cmd); - while ((read = getline(&line, &len, systemctl)) != -1) { - if (strncmp(line, SYSTEMD_UNIT_VAR, strlen(SYSTEMD_UNIT_VAR)) == 0) { - char *ret = strdup(&line[strlen(SYSTEMD_UNIT_VAR)]); - if (!ret) -- error(1, errno, "failed to duplicate string"); -+ fprintf(stderr, "failed to duplicate string"); - - // trim trailing newline, if any - len = strlen(ret); - if (len > 0 && ret[len - 1] == '\n') - ret[--len] = 0; - if (len == 0) -- error(1, 0, "can't find unit file for service %s", name); -+ fprintf(stderr, "can't find unit file for service %s", name); - free(line); - pclose(systemctl); - return ret; - } - } - -- error(1, 0, "can't find FragmentPath attribute for unit %s", name); -+ fprintf(stderr, "can't find FragmentPath attribute for unit %s", name); - - // never reached: just silence gcc - return NULL; -@@ -175,12 +174,12 @@ - unit = locate_unit(argv[0]); - src = fopen(unit, "r"); - if (!src) -- error(1, errno, "can't open file %s", unit); -+ fprintf(stderr, "can't open file %s", unit); - - strcpy(dst_path, "/tmp/unit_XXXXXX"); - dst = mkstemp(dst_path); - if (dst < 0) -- error(1, errno, "can't create tmp file"); -+ fprintf(stderr, "can't create tmp file"); - - // reset any prior error, to allow later check on errno - errno = 0; -@@ -194,27 +193,27 @@ - - if (!is_env) { - if (write(dst, line, read) < 0) -- error(1, errno, "can't write '%s' into %s", line, dst_path); -+ fprintf(stderr, "can't write '%s' into %s", line, dst_path); - } - - if (append_env && - (is_env || strncmp(line, SYSTEMD_SERVICE_TAG, strlen(SYSTEMD_SERVICE_TAG)) == 0)) { - if (dprintf(dst, "%s%s\n", SYSTEMD_ENV_VAR, MPTCPWRAP_ENV) < 0) -- error(1, errno, "can't write to env string into %s", dst_path); -+ fprintf(stderr, "can't write to env string into %s", dst_path); - append_env = 0; - } - } - if (errno != 0) -- error(1, errno, "can't read from %s", unit); -+ fprintf(stderr, "can't read from %s", unit); - free(line); - fclose(src); - close(dst); - - if (rename(dst_path, unit) < 0) -- error(1, errno, "can't rename %s to %s", dst_path, unit); -+ fprintf(stderr, "can't rename %s to %s", dst_path, unit); - - if (system("systemctl daemon-reload") != 0) -- error(1, errno, "can't reload unit, manual 'systemctl daemon-reload' is required"); -+ fprintf(stderr, "can't reload unit, manual 'systemctl daemon-reload' is required"); - - printf("mptcp successfully %s on unit %s\n", - enable ? "enabled" : "disabled", unit); -@@ -239,7 +238,7 @@ - argp_program_version = "mptcpize "VERSION; - argp_program_bug_address = "<" PACKAGE_BUGREPORT ">"; - if (argp_parse(&argp, argc, argv, ARGP_IN_ORDER, &idx, 0) < 0) -- error(1, errno, "can't parse arguments"); -+ fprintf(stderr, "can't parse arguments"); - - argc -= idx; - argv += idx; ---- a/src/mptcpize.c 2021-07-05 20:06:07.035838944 +0200 -+++ b/src/mptcpize.c 2021-07-05 20:06:26.875505617 +0200 -@@ -7,8 +7,6 @@ - * Copyright (c) 2021, Red Hat, Inc. - */ - --#define _GNU_SOURCE -- - #include - - #include diff --git a/ndpi-netfilter2/Makefile b/ndpi-netfilter2/Makefile new file mode 100644 index 000000000..b74ed75c1 --- /dev/null +++ b/ndpi-netfilter2/Makefile @@ -0,0 +1,88 @@ +# +# Based on package from https://github.com/openwrt-develop/ndpi-netfilter/ +# Copyright (C) 2018-2020 Ycarus (Yannick Chabanois) for OpenMPTCProuter +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/kernel.mk + +PKG_NAME:=ndpi-netfilter2 +PKG_RELEASE:=3 +PKG_REV:=25a5c2e1d619aa2d819b18bed8276b3bd7eb4c5b +PKG_VERSION:=3.2-$(PKG_REV) + +PKG_SOURCE_PROTO:=git +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE_URL:=https://github.com/vel21ripn/nDPI.git +PKG_SOURCE_VERSION:=$(PKG_REV) + +PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) + +include $(INCLUDE_DIR)/package.mk + +define Package/iptables-mod-ndpi + SUBMENU:=Firewall + SECTION:=net + CATEGORY:=Network + TITLE:=ndpi successor of OpenDPI + URL:=http://www.ntop.org/products/ndpi/ +# DEPENDS:=+iptables +iptables-mod-conntrack-extra +kmod-ipt-ndpi +libpcap + DEPENDS:=+iptables +kmod-ipt-ndpi +libpcap + MAINTAINER:=Ycarus (Yannick Chabanois) +endef + +define Package/iptables-mod-ndpi/description + nDPI is a ntop-maintained superset of the popular OpenDPI library +endef + +#CONFIGURE_CMD = ./autogen.sh +#CONFIGURE_ARGS += --with-pic +MAKE_PATH := ndpi-netfilter + +MAKE_FLAGS += \ + KERNEL_DIR="$(LINUX_DIR)" \ + MODULES_DIR="$(TARGET_MODULES_DIR)" \ + ARCH="$(LINUX_KARCH)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + NDPI_PATH=$(PKG_BUILD_DIR)/ndpi-netfilter + +define Build/Configure + cd $(PKG_BUILD_DIR) && \ + CC="" ./autogen.sh \ + --host="$(GNU_TARGET_NAME)" +# --with-pic \ +# CFLAGS="$(TARGET_CFLAGS)" \ +# HOST_CFLAGS="$(BUILD_CFLAGS)" \ +# BUILD_CPPFLAGS="$(TARGET_CPPLAGS)" \ +# BUILD_CFLAGS="$(TARGET_CFLAGS)" \ +# BUILD_LDFLAGS="$(TARGET_LDFLAGS)" +endef + +define Build/Compile + (cd $(PKG_BUILD_DIR)/src/lib &&\ + gcc -g -O2 -fPIC -DPIC -DNDPI_LIB_COMPILATION -I../../src/include/ -I../../src/lib/third_party/include/ ndpi_network_list_compile.c -o ndpi_network_list_compile &&\ + ./ndpi_network_list_compile -o ndpi_network_list.c.inc ndpi_network_list_std.yaml ndpi_network_list_tor.yaml) + $(MAKE) $(MAKE_FLAGS) -C $(PKG_BUILD_DIR)/ndpi-netfilter +endef + +define Package/iptables-mod-ndpi/install + $(INSTALL_DIR) $(1)/usr/lib/iptables + $(INSTALL_BIN) $(PKG_BUILD_DIR)/ndpi-netfilter/ipt/libxt_ndpi.so $(1)/usr/lib/iptables +endef + +define KernelPackage/ipt-ndpi + SUBMENU:=Netfilter Extensions + TITLE:= nDPI net netfilter module + 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 + FILES:= $(PKG_BUILD_DIR)/ndpi-netfilter/src/xt_ndpi.ko + AUTOLOAD:=$(call AutoProbe,xt_ndpi) +endef + +$(eval $(call BuildPackage,iptables-mod-ndpi)) +$(eval $(call KernelPackage,ipt-ndpi)) diff --git a/omr-6in4/files/etc/init.d/omr-6in4 b/omr-6in4/files/etc/init.d/omr-6in4 index 8a3e38a38..5bec94c02 100755 --- a/omr-6in4/files/etc/init.d/omr-6in4 +++ b/omr-6in4/files/etc/init.d/omr-6in4 @@ -73,7 +73,7 @@ set_ipv6_state() { unbound.ub_main.protocol='mixed' commit unbound EOF - if [ "$(uci -q get network.lan.ip6assign)" = "" ]; then + if [ "$(network.lan.ip6assign)" = "" ]; then uci -q set network.lan.ip6assign='60' fi if [ "$(uci -q get network.globals.ula_prefix)" = "" ]; then diff --git a/omr-quota/files/bin/omr-quota b/omr-quota/files/bin/omr-quota index 6b3f11501..69c2d2ba6 100755 --- a/omr-quota/files/bin/omr-quota +++ b/omr-quota/files/bin/omr-quota @@ -10,9 +10,8 @@ shift # main loop while true; do - OMR_QUOTA_REAL_INTERFACE="$(ifstatus $OMR_QUOTA_INTERFACE | jsonfilter -e '@.l3_device')" - rx=`vnstat -i $OMR_QUOTA_REAL_INTERFACE --json | jsonfilter -q -e '@.interfaces[0].traffic.months[-1].rx' | tr -d "\n"` - tx=`vnstat -i $OMR_QUOTA_REAL_INTERFACE --json | jsonfilter -q -e '@.interfaces[0].traffic.months[-1].tx' | tr -d "\n"` + rx=`vnstat -i $OMR_QUOTA_INTERFACE --json | jsonfilter -q -e '@.interfaces[0].traffic.months[-1].rx' | tr -d "\n"` + tx=`vnstat -i $OMR_QUOTA_INTERFACE --json | jsonfilter -q -e '@.interfaces[0].traffic.months[-1].tx' | tr -d "\n"` tt=$((rx + tx)) if [ -n "$OMR_QUOTA_RX" ] && [ "$OMR_QUOTA_RX" -gt 0 ] && [ -n "$rx" ] && [ "$OMR_QUOTA_RX" -le "$rx" ]; then if [ "$(ifstatus $OMR_QUOTA_INTERFACE | jsonfilter -e '@.up')" = "true" ]; then diff --git a/omr-tracker/files/bin/omr-tracker b/omr-tracker/files/bin/omr-tracker index 910654913..f78571aab 100755 --- a/omr-tracker/files/bin/omr-tracker +++ b/omr-tracker/files/bin/omr-tracker @@ -85,19 +85,13 @@ _post_tracking() { _log() { logger -t "post-tracking-${tracker_bin##*/}" "$*" } - . "$tracker_bin" 2>&1 - #tmp=$(mktemp) - #. "$tracker_bin" 2>&1 > "$tmp" - #trackresult=$(< "$tmp") - #[ -n "$trackresult" ] && _log $trackresult - #rm -f "$tmp" + . "$tracker_bin" ) done } _ping_server() { local servername=$1 - [ -z "$servername" ] && return local disabled=$(uci -q get openmptcprouter.$1.disabled) local device=$2 if [ -n "$device" ] && [ "$disabled" != "1" ]; then @@ -119,7 +113,6 @@ _ping_server() { _httping_server() { 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 @@ -142,10 +135,9 @@ _httping_server() { _ping() { local host=$1 - [ -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 [ "$(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 2 \ @@ -230,7 +222,7 @@ _none() { _restart -OMR_TRACKER_INTERFACE_PROTO="$(uci -q get network.${OMR_TRACKER_INTERFACE}.proto)" +OMR_TRACKER_INTERFACE_PROTO="$(uci -q get network.${OMR_TRACKER_INTERFACE_PROTO}.proto)" OMR_TRACKER_PREV_STATUS="" # main loop while true; do diff --git a/omr-tracker/files/bin/omr-tracker-gre b/omr-tracker/files/bin/omr-tracker-gre index 78fa1aef0..5c19e43cc 100755 --- a/omr-tracker/files/bin/omr-tracker-gre +++ b/omr-tracker/files/bin/omr-tracker-gre @@ -23,8 +23,7 @@ _ping_server() { _ping_tunnel() { local name=$1 config_get gateway $1 gateway - config_get ifname $1 device - [ -z "$ifname" ] && config_get ifname $1 ifname + config_get ifname $1 ifname config_get disabled $1 disabled [ "$(echo $ifname | grep oip)" != "" ] && [ -n "$gateway" ] && [ "$disabled" != "1" ] && { _ping_server $gateway diff --git a/omr-tracker/files/etc/config/omr-tracker b/omr-tracker/files/etc/config/omr-tracker index 494c494e6..df54c8416 100644 --- a/omr-tracker/files/etc/config/omr-tracker +++ b/omr-tracker/files/etc/config/omr-tracker @@ -23,15 +23,18 @@ config defaults 'defaults' option interval_tries '1' option type 'ping' option wait_test '0' - option server_http_test '0' + option server_http_test '1' option restart_down '0' - option mail_alert '0' + option options '' config proxy 'proxy' option enabled '1' list hosts '1.0.0.1' list hosts '212.27.48.10' list hosts '198.27.92.1' + list hosts '151.101.129.164' + list hosts '77.88.55.77' + list hosts '1.1.1.1' list hosts '74.82.42.42' list hosts '176.103.130.130' option timeout '10' diff --git a/omr-tracker/files/etc/init.d/omr-tracker b/omr-tracker/files/etc/init.d/omr-tracker index 0f80614ed..3276316e9 100755 --- a/omr-tracker/files/etc/init.d/omr-tracker +++ b/omr-tracker/files/etc/init.d/omr-tracker @@ -1,7 +1,7 @@ #!/bin/sh /etc/rc.common # shellcheck disable=SC2039 # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : -# Copyright (C) 2018-2021 Ycarus (Yannick Chabanois) +# Copyright (C) 2018 Ycarus (Yannick Chabanois) # Released under GPL 3. See LICENSE for the full terms. # shellcheck disable=SC2034 @@ -12,7 +12,6 @@ } . /usr/lib/unbound/iptools.sh -. /lib/functions/network.sh _validate_section() { local tmp_hosts=$hosts tmp_hosts6=$hosts6 tmp_timeout=$timeout tmp_tries=$tries @@ -28,7 +27,7 @@ _validate_section() { 'wait_test:uinteger' \ 'type:string:undef' \ 'enabled:bool:1' \ - 'server_http_test:bool:0' \ + 'server_http_test:bool:1' \ 'options:string' [ -z "$hosts" ] && hosts=$tmp_hosts @@ -48,17 +47,15 @@ _launch_tracker() { case "$1" in loopback|lan*|if0*) return;; esac - [ -z "$1" ] && return + local hosts hosts6 timeout tries interval interval_tries options type enabled wait_test ipv6 proto server_http_test _validate_section "defaults" "defaults" _validate_section "interface" "$1" local ifname ip4table - network_get_device ifname $1 - [ -z "$ifname" ] && network_get_physdev ifname $1 - [ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') + ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]') [ -z "$ifname" ] && ifname=$(ifstatus "$1_4" | jsonfilter -q -e '@["l3_device"]') - [ -z "$ifname" ] && config_get ifname "$1" device + [ -z "$ifname" ] && config_get ifname "$1" ifname [ -n "$(echo $ifname | grep '@')" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["device"]') config_get multipath "$1" multipath @@ -72,9 +69,6 @@ _launch_tracker() { [ "${ifenabled}" = "0" ] && return [ "${enabled}" = "0" ] && return [ -z "${hosts}" ] && [ "$type" != "none" ] && return - ifstatus=$(ifstatus "$1" | jsonfilter -q -e '@["up"]') - ifdevice=$(ifstatus "$1" | jsonfilter -q -e '@["device"]') - [ "${ifstatus}" = "false" ] && [ -z "${ifdevice}" ] && return [ -z "${interval_tries}" ] && interval_tries=1 procd_open_instance @@ -152,7 +146,6 @@ _initialize_shadowsocks_tracker() { server=$1 [ -n "$(echo $server | grep sss)" ] || return - [ -z "$server" ] && return #redir_tcp=$(uci -q get shadowsocks-libev.ss_rules.redir_tcp) #config_get tracker_server ss_rules server @@ -200,8 +193,7 @@ _launch_shadowsocks_tracker() { config_get server "$1" server [ "$enabled" = "0" ] || [ "$disabled" = "1" ] || [ -z "$hosts" ] && return - [ -z "$server" ] && return - [ "$(uci -q get shadowsocks-libev.$server.server)" = "192.168.1.3" ] || [ "$(uci -q get shadowsocks-libev.$server.server)" = "" ] && return + [ -z "$server" ] || [ "$(uci -q get shadowsocks-libev.$server.server)" = "192.168.1.3" ] || [ "$(uci -q get shadowsocks-libev.$server.server)" = "" ] && return procd_open_instance # shellcheck disable=SC2086 diff --git a/omr-tracker/files/etc/uci-defaults/omr-tracker b/omr-tracker/files/etc/uci-defaults/omr-tracker index 11f985272..13e4fe990 100755 --- a/omr-tracker/files/etc/uci-defaults/omr-tracker +++ b/omr-tracker/files/etc/uci-defaults/omr-tracker @@ -46,6 +46,7 @@ if [ "$(uci -q get omr-tracker.proxy.hosts | grep '23.96.52.53')" != "" ]; then del_list omr-tracker.proxy.hosts='80.67.169.12' add_list omr-tracker.proxy.hosts='104.16.1.1' add_list omr-tracker.proxy.hosts='198.27.92.1' + add_list omr-tracker.proxy.hosts='151.101.129.164' commit omr-tracker EOF fi @@ -94,7 +95,7 @@ fi if [ "$(uci -q get omr-tracker.defaults.server_http_test)" = "" ]; then uci -q batch <<-EOF >/dev/null - set omr-tracker.defaults.server_http_test=0 + set omr-tracker.defaults.server_http_test=1 commit omr-tracker EOF fi diff --git a/openmptcprouter/Makefile b/openmptcprouter/Makefile old mode 100755 new mode 100644 diff --git a/openmptcprouter/files/bin/blocklanfw b/openmptcprouter/files/bin/blocklanfw index a35694dac..cf507eba4 100755 --- a/openmptcprouter/files/bin/blocklanfw +++ b/openmptcprouter/files/bin/blocklanfw @@ -1,6 +1,6 @@ #!/bin/sh ss_rules_fw_drop() { - timeout 1 fw3 -4 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j reject/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | + fw3 -4 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j reject/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then @@ -8,18 +8,18 @@ ss_rules_fw_drop() { fw=$((fw+1)) fi done - timeout 1 fw3 -4 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" }' | + fw3 -4 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 "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "iptables -w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" + eval "iptables -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" fw=$((fw+1)) fi done } ss_rules6_fw_drop() { - timeout 1 fw3 -6 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j reject/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | + fw3 -6 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j reject/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then @@ -27,18 +27,18 @@ ss_rules6_fw_drop() { fw=$((fw+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" }' | + 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 "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "ip6tables -w -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" + eval "ip6tables -t nat -A zone_lan_prerouting ${fwrule} 2>&1 >/dev/null" fw=$((fw+1)) fi done } v2r_rules_fw_drop() { - timeout 1 fw3 -4 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j reject/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | + fw3 -4 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j reject/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then @@ -46,35 +46,33 @@ v2r_rules_fw_drop() { fw=$((fw+1)) fi done - timeout 1 fw3 -4 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" }' | + fw3 -4 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 "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "iptables -w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null" + eval "iptables -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null" fw=$((fw+1)) fi done } v2ray_rules6_fw_drop() { - timeout 1 fw3 -6 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j reject/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | + fw3 -6 print 2>/dev/null | awk '/iptables/&&/zone_lan_forward/&&/tcp/&&/-t filter/&&/-j reject/ {for(i=6; i<=NF; i++) { printf "%s ",$i } print "\n" }' | while IFS=$"\n" read -r c; do fwrule=$(echo "$c" | sed 's/reject/REDIRECT --to-ports 65535/') if [ -n "$fwrule" ] && [ -z "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then eval "ip6tables -w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null" 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" }' | + 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 "$(iptables-save | grep zone_lan_prerouting | grep '${fwrule}')" ]; then - eval "ip6tables -w -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null" + eval "ip6tables -t nat -I zone_lan_prerouting 1 ${fwrule} 2>&1 >/dev/null" fi done } -[ -n "$(pgrep blocklanfw)" ] && exit 0 -[ -z "$(iptables-save | grep zone_lan)" ] && exit 0 fw=0 if [ "$(uci -q get openmptcprouter.settings.proxy)" = "shadowsocks" ]; then ss_rules6_fw_drop @@ -83,7 +81,7 @@ elif [ "$(uci -q get openmptcprouter.settings.proxy)" = "v2ray" ]; then v2r_rules_fw_drop v2ray_rules6_fw_drop fi -rule=$(timeout 1 fw3 -4 print | grep 'A PREROUTING' | grep zone_lan_prerouting | sed 's/-A PREROUTING/-D PREROUTING/') +rule=$(fw3 -4 print | grep 'A PREROUTING' | grep zone_lan_prerouting | sed 's/-A PREROUTING/-D PREROUTING/') eval "$rule 2>&1 >/dev/null" newrule=$(echo "$rule" | sed 's/-D PREROUTING/-I PREROUTING 1/') eval "$newrule 2>&1 >/dev/null" diff --git a/openmptcprouter/files/bin/omr-test-speed b/openmptcprouter/files/bin/omr-test-speed index 9817eda79..863232f9e 100755 --- a/openmptcprouter/files/bin/omr-test-speed +++ b/openmptcprouter/files/bin/omr-test-speed @@ -1,9 +1,9 @@ #!/bin/sh # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : -FORCEVPS=false -if [ "$1" = "forcevps" ]; then +OVH=false +if [ "$1" = "ovh" ]; then + OVH=true INTERFACE="$2" - FORCEVPS=true else INTERFACE="$1" fi @@ -13,24 +13,26 @@ fi exit 0 } -echo "Select best test server..." -HOSTLST="https://repo.huaweicloud.com/debian-cd/10.0.0/amd64/iso-dvd/debian-10.0.0-amd64-DVD-2.iso https://mirrors.aliyun.com/ubuntu-releases/impish/ubuntu-21.10-desktop-amd64.iso https://mirrors.cloud.tencent.com/ubuntu-cdimage/ubuntu/daily-canary/20220209/jammy-desktop-canary-amd64.iso" -bestping="9999" -for pinghost in $HOSTLST; do - domain=$(echo $pinghost | awk -F/ '{print $3}') - if [ -z "$INTERFACE" ] || [ "$FORCEVPS" = true ]; then - ping=$(ping -c1 -w2 $domain | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') - else - ping=$(ping -c1 -w2 -I $INTERFACE -B $domain | cut -d "/" -s -f5 | cut -d "." -f1 | tr -d '\n') - fi - echo "host: $domain - ping: $ping" - if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then - bestping=$ping - HOST=$pinghost - fi -done +if [ "$OVH" = false ]; then + echo "Select best test server..." + HOSTLST="http://speedtest.frankfurt.linode.com/garbage.php?ckSize=10000 http://speedtest.tokyo2.linode.com/garbage.php?ckSize=10000 http://speedtest.singapore.linode.com/garbage.php?ckSize=10000 http://speedtest.newark.linode.com/garbage.php?ckSize=10000 http://speedtest.atlanta.linode.com/garbage.php?ckSize=10000 http://speedtest.dallas.linode.com/garbage.php?ckSize=10000 http://speedtest.fremont.linode.com/garbage.php?ckSize=10000 http://speedtest.tele2.net/1000GB.zip http://proof.ovh.net/files/10Gb.dat https://speed.hetzner.de/10GB.bin http://ipv4.bouygues.testdebit.info/10G.iso http://par.download.datapacket.com/10000mb.bin http://nyc.download.datapacket.com/10000mb.bin http://ams.download.datapacket.com/10000mb.bin http://fra.download.datapacket.com/10000mb.bin http://lon.download.datapacket.com/10000mb.bin http://mad.download.datapacket.com/10000mb.bin http://prg.download.datapacket.com/10000mb.bin http://sto.download.datapacket.com/10000mb.bin http://vie.download.datapacket.com/10000mb.bin http://war.download.datapacket.com/10000mb.bin http://atl.download.datapacket.com/10000mb.bin http://chi.download.datapacket.com/10000mb.bin http://lax.download.datapacket.com/10000mb.bin http://mia.download.datapacket.com/10000mb.bin http://nyc.download.datapacket.com/10000mb.bin" + bestping="9999" + for pinghost in $HOSTLST; do + domain=$(echo $pinghost | awk -F/ '{print $3}') + if [ -z "$INTERFACE" ]; then + ping=$(ping -c1 -w2 $domain | cut -d "/" -s -f5 | cut -d "." -f1) + else + ping=$(ping -c1 -w2 -I $INTERFACE -B $domain | cut -d "/" -s -f5 | cut -d "." -f1) + fi + echo "host: $domain - ping: $ping" + if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then + bestping=$ping + HOST=$pinghost + fi + done +fi -[ -z "$HOST" ] && HOST="https://speed.hetzner.de/10GB.bin" +[ -z "$HOST" ] && HOST="http://proof.ovh.net/files/10Gio.dat" echo "Best server is $HOST, running test:" trap : HUP INT TERM diff --git a/openmptcprouter/files/bin/omr-test-speedv6 b/openmptcprouter/files/bin/omr-test-speedv6 index 6e4b1215e..ca3d64d9a 100755 --- a/openmptcprouter/files/bin/omr-test-speedv6 +++ b/openmptcprouter/files/bin/omr-test-speedv6 @@ -1,8 +1,8 @@ #!/bin/sh # vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 : -FORCEVPS=false -if [ "$1" = "forcevps" ]; then - FORCEVPS=true +OVH=false +if [ "$1" = "ovh" ]; then + OVH=true INTERFACE="$2" else INTERFACE="$1" @@ -14,25 +14,26 @@ fi } -echo "Select best test server..." -HOSTLST="http://scaleway.testdebit.info/10G.iso http://bordeaux.testdebit.info/10G.iso http://aix-marseille.testdebit.info/10G.iso http://lyon.testdebit.info/10G.iso http://lille.testdebit.info/10G.iso http://paris.testdebit.info/10G.iso http://appliwave.testdebit.info/10G/10G.iso http://speedtest.frankfurt.linode.com/garbage.php?ckSize=10000 http://speedtest.tokyo2.linode.com/garbage.php?ckSize=10000 http://speedtest.singapore.linode.com/garbage.php?ckSize=10000 http://speedtest.newark.linode.com/garbage.php?ckSize=10000 http://speedtest.atlanta.linode.com/garbage.php?ckSize=10000 http://speedtest.dallas.linode.com/garbage.php?ckSize=10000 http://speedtest.fremont.linode.com/garbage.php?ckSize=10000 https://speed.hetzner.de/10GB.bin http://ipv6.bouygues.testdebit.info/10G.iso http://par.download.datapacket.com/10000mb.bin http://nyc.download.datapacket.com/10000mb.bin http://ams.download.datapacket.com/10000mb.bin http://fra.download.datapacket.com/10000mb.bin http://lon.download.datapacket.com/10000mb.bin http://mad.download.datapacket.com/10000mb.bin http://prg.download.datapacket.com/10000mb.bin http://sto.download.datapacket.com/10000mb.bin http://vie.download.datapacket.com/10000mb.bin http://war.download.datapacket.com/10000mb.bin http://atl.download.datapacket.com/10000mb.bin http://chi.download.datapacket.com/10000mb.bin http://lax.download.datapacket.com/10000mb.bin http://mia.download.datapacket.com/10000mb.bin http://nyc.download.datapacket.com/10000mb.bin http://speedtest.milkywan.fr/files/10G.iso" -bestping="9999" -for pinghost in $HOSTLST; do - domain=$(echo $pinghost | awk -F/ '{print $3}') - if [ -z "$INTERFACE" ] || [ "$FORCEVPS" = true ]; then - ping=$(ping -6 -c1 -w2 $domain | cut -d "/" -s -f5 | cut -d "." -f1) - else - ping=$(ping -6 -c1 -w2 -I $INTERFACE -B $domain | cut -d "/" -s -f5 | cut -d "." -f1) - fi - echo "host: $domain - ping: $ping" - if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then - bestping=$ping - HOST=$pinghost - fi -done +if [ "$OVH" = false ]; then + echo "Select best test server..." + HOSTLST="http://speedtest.frankfurt.linode.com/garbage.php?ckSize=10000 http://speedtest.tokyo2.linode.com/garbage.php?ckSize=10000 http://speedtest.singapore.linode.com/garbage.php?ckSize=10000 http://speedtest.newark.linode.com/garbage.php?ckSize=10000 http://speedtest.atlanta.linode.com/garbage.php?ckSize=10000 http://speedtest.dallas.linode.com/garbage.php?ckSize=10000 http://speedtest.fremont.linode.com/garbage.php?ckSize=10000 http://speedtest.tele2.net/1000GB.zip http://www.ovh.net/files/10Gb.dat https://speed.hetzner.de/10GB.bin http://ipv6.bouygues.testdebit.info/10G.iso http://par.download.datapacket.com/10000mb.bin http://nyc.download.datapacket.com/10000mb.bin http://ams.download.datapacket.com/10000mb.bin http://fra.download.datapacket.com/10000mb.bin http://lon.download.datapacket.com/10000mb.bin http://mad.download.datapacket.com/10000mb.bin http://prg.download.datapacket.com/10000mb.bin http://sto.download.datapacket.com/10000mb.bin http://vie.download.datapacket.com/10000mb.bin http://war.download.datapacket.com/10000mb.bin http://atl.download.datapacket.com/10000mb.bin http://chi.download.datapacket.com/10000mb.bin http://lax.download.datapacket.com/10000mb.bin http://mia.download.datapacket.com/10000mb.bin http://nyc.download.datapacket.com/10000mb.bin" + bestping="9999" + for pinghost in $HOSTLST; do + domain=$(echo $pinghost | awk -F/ '{print $3}') + if [ -z "$INTERFACE" ]; then + ping=$(ping -6 -c1 -w2 $domain | cut -d "/" -s -f5 | cut -d "." -f1) + else + ping=$(ping -6 -c1 -w2 -I $INTERFACE -B $domain | cut -d "/" -s -f5 | cut -d "." -f1) + fi + echo "host: $domain - ping: $ping" + if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then + bestping=$ping + HOST=$pinghost + fi + done fi -[ -z "$HOST" ] && HOST="https://speed.hetzner.de/10GB.bin" +[ -z "$HOST" ] && HOST="http://proof.ovh.net/files/10Gio.dat" echo "Best server is $HOST, running test:" trap : HUP INT TERM diff --git a/openmptcprouter/files/etc/firewall.gre-tunnel b/openmptcprouter/files/etc/firewall.gre-tunnel old mode 100755 new mode 100644 diff --git a/openmptcprouter/files/etc/firewall.omr-server b/openmptcprouter/files/etc/firewall.omr-server old mode 100755 new mode 100644 diff --git a/openmptcprouter/files/etc/firewall.ttl b/openmptcprouter/files/etc/firewall.ttl deleted file mode 100755 index e241dbfca..000000000 --- a/openmptcprouter/files/etc/firewall.ttl +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -. /lib/functions.sh - -_set_ttl() { - device=$(uci -q get network.$1.name) - ttl=$(uci -q get network.$1.ttl) - if [ -n "$ttl" ] && [ -z "$(iptables-save | grep TTL | grep $device)" ]; then - iptables -w -t mangle -I POSTROUTING -o $device -j TTL --ttl-set $ttl 2>&1 >/dev/null - fi -} - -config_load network -config_foreach _set_ttl device \ No newline at end of file diff --git a/openmptcprouter/files/etc/hotplug.d/iface/00-nego b/openmptcprouter/files/etc/hotplug.d/iface/00-nego old mode 100755 new mode 100644 index 9ad0cb927..67e62dcec --- a/openmptcprouter/files/etc/hotplug.d/iface/00-nego +++ b/openmptcprouter/files/etc/hotplug.d/iface/00-nego @@ -1,3 +1,3 @@ #!/bin/sh # Needed for some device, like rtl8156 2.5G USB adapter -[ "$ACTION" = "ifup" ] && [ -n "$DEVICE" ] && ([ -n "$(lsusb | grep 8156)" ] || [ -n "$(ethtool $DEVICE | grep 2500)" ]) && ethtool -s $DEVICE autoneg on \ No newline at end of file +[ "$ACTION" = "ifup" ] && [ -n "$DEVICE" ] && [ -n "$(lsusb | grep 8156)" ] [ -n "$(ethtool $DEVICE | grep 2500)" ] && ethtool -s $DEVICE autoneg on \ No newline at end of file diff --git a/openmptcprouter/files/etc/init.d/alwaysrw b/openmptcprouter/files/etc/init.d/alwaysrw deleted file mode 100755 index 81be5e4d8..000000000 --- a/openmptcprouter/files/etc/init.d/alwaysrw +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh /etc/rc.common - -START=10 - -boot() { - [ "$(mount | grep '/dev/root' | grep 'ext4' | grep '(ro')" != "" ] && mount -o remount,rw /dev/root -} diff --git a/openmptcprouter/files/etc/init.d/mptcpovervpn b/openmptcprouter/files/etc/init.d/mptcpovervpn index 0bb30c0dd..b36425041 100755 --- a/openmptcprouter/files/etc/init.d/mptcpovervpn +++ b/openmptcprouter/files/etc/init.d/mptcpovervpn @@ -68,7 +68,7 @@ mptcp_over_vpn() { uci -q batch <<-EOF >/dev/null set network.ovpn${interface}=interface - set network.ovpn${interface}.device="tun${id}" + set network.ovpn${interface}.ifname="tun${id}" set network.ovpn${interface}.defaultroute='0' set network.ovpn${interface}.peerdns='0' set network.ovpn${interface}.proto='none' diff --git a/openmptcprouter/files/etc/init.d/openmptcprouter-vps b/openmptcprouter/files/etc/init.d/openmptcprouter-vps index 0f3b63c10..73eb6d623 100755 --- a/openmptcprouter/files/etc/init.d/openmptcprouter-vps +++ b/openmptcprouter/files/etc/init.d/openmptcprouter-vps @@ -221,8 +221,6 @@ _get_ss_redir() { [ "$cf_fast_open" = "1" ] && fast_open="true" config_get cf_no_delay $1 no_delay [ "$cf_no_delay" = "1" ] && no_delay="true" - config_get cf_mptcp $1 mptcp - [ "$cf_mptcp" = "1" ] && mptcp="true" } _get_ss_server() { @@ -255,12 +253,10 @@ _set_ss_server_vps() { current_obfs_type="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.obfs_type')" current_fast_open="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.fast_open')" current_no_delay="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.no_delay')" - current_mptcp="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.mptcp')" ebpf="false" fast_open="false" no_delay="false" - mptcp="false" obfs="false" obfs_plugin="v2ray" obfs_type="http" @@ -268,9 +264,9 @@ _set_ss_server_vps() { config_foreach _get_ss_redir ss_redir config_foreach _get_ss_server server - if [ "$current_mptcp" != "$mptcp" ] || [ "$current_obfs_plugin" != "$obfs_plugin" ] || [ "$current_obfs_type" != "$obfs_type" ] || [ "$current_port" != "$port" ] || [ "$current_method" != "$method" ] || [ "$current_key" != "$key" ] || [ "$current_ebpf" != "$ebpf" ] || [ "$current_obfs" != "$obfs" ] || [ "$current_fast_open" != "$fast_open" ] || [ "$current_no_delay" != "$no_delay" ]; then + if [ "$current_obfs_plugin" != "$obfs_plugin" ] || [ "$current_obfs_type" != "$obfs_type" ] || [ "$current_port" != "$port" ] || [ "$current_method" != "$method" ] || [ "$current_key" != "$key" ] || [ "$current_ebpf" != "$ebpf" ] || [ "$current_obfs" != "$obfs" ] || [ "$current_fast_open" != "$fast_open" ] || [ "$current_no_delay" != "$no_delay" ]; then local settings - settings='{"port": '$port',"method":"'$method'","fast_open":'$fast_open',"reuse_port":true,"no_delay":'$no_delay',"mptcp":'$mptcp',"key":"'$key'","ebpf":'$ebpf',"obfs":'$obfs',"obfs_plugin":"'$obfs_plugin'","obfs_type":"'$obfs_type'"}' + settings='{"port": '$port',"method":"'$method'","fast_open":'$fast_open',"reuse_port":true,"no_delay":'$no_delay',"mptcp":true,"key":"'$key'","ebpf":'$ebpf',"obfs":'$obfs',"obfs_plugin":"'$obfs_plugin'","obfs_type":"'$obfs_type'"}' _set_json "shadowsocks" "$settings" fi } @@ -524,7 +520,7 @@ _get_gre_tunnel() { peeraddr="$(echo $tunnel | jsonfilter -q -e '@.remote_ip')" ipaddr="$(echo $tunnel | jsonfilter -q -e '@.local_ip')" publicaddr="$(echo $tunnel | jsonfilter -q -e '@.public_ip')" - if [ "$peeraddr" != "" ] && [ "$ipaddr" != "" ] && [ "$publicaddr" != "" ] && [ "$vpnip_local" != "" ] && ([ "$(uci -q get network.oip${i}.ipaddr)" != "$peeraddr" ] || [ "$(uci -q get network.oip${i}.gateway)" != "$ipaddr" ] || [ "$(uci -q get network.oip${i}gre.ipaddr)" != "$vpnip_local" ]); then + if [ "$peeraddr" != "" ] && [ "$ipaddr" != "" ] && [ "$publicaddr" != "" ] && [ "$vpnip_local" != "" ] && ([ "$(uci -q get network.oip${i}.ipaddr)" != "$peeraddr" ] || [ "$(uci -q get network.oip${i}.ipaddr)" != "$ipaddr" ] || [ "$(uci -q get network.oip${i}gre.ipaddr)" != "$vpnip_local" ]); then uci -q batch <<-EOF >/dev/null set network.oip${i}gre=interface set network.oip${i}gre.label="GRE tunnel for $publicaddr" @@ -543,7 +539,7 @@ _get_gre_tunnel() { set network.oip${i}.label="Tunnel for $publicaddr" set network.oip${i}.proto=static set network.oip${i}.nohostroute='1' - set network.oip${i}.device="@oip${i}gre" + set network.oip${i}.ifname="@oip${i}gre" set network.oip${i}.ipv6='0' set network.oip${i}.defaultroute='0' set network.oip${i}.multipath='off' @@ -559,10 +555,10 @@ _get_gre_tunnel() { for intf in $allintf; do uci -q add_list firewall.zone_vpn.network=$intf done - [ -z "$(uci -q get firewall.zone_vpn.network | grep oip${i}gre)" ] && { - uci -q add_list firewall.zone_vpn.network="oip${i}gre" - uci -q add_list firewall.zone_vpn.network="oip${i}" - } + uci -q batch <<-EOF >/dev/null + add_list firewall.zone_vpn.network="oip${i}gre" + add_list firewall.zone_vpn.network="oip${i}" + EOF ssport="$(echo $tunnel | jsonfilter -q -e '@.shadowsocks_port')" uci -q batch <<-EOF >/dev/null set shadowsocks-libev.oip${i}server=server @@ -740,7 +736,7 @@ _set_mptcp_vps() { syn_retries="$(uci -q get network.globals.mptcp_syn_retries)" congestion="$(uci -q get network.globals.congestion)" [ -z "$congestion" ] && congestion="bbr" - if [ "$mptcp_enabled_current" != "$mptcp_enabled" ] || [ "$checksum_current" != "$checksum" ] || ([ "$path_manager_current" != "" ] && [ "$path_manager_current" != "$path_manager" ]) || ([ "$scheduler_current" != "" ] && [ "$scheduler_current" != "$scheduler" ]) || ([ "$syn_retries_current" != "" ] && [ "$syn_retries_current" != "$syn_retries" ]) || [ "$congestion_control_current" != "$congestion" ]; then + if [ "$mptcp_enabled_current" != "$mptcp_enabled" ] || [ "$checksum_current" != "$checksum" ] || [ "$path_manager_current" != "$path_manager" ] || [ "$scheduler_current" != "$scheduler" ] || [ "$syn_retries_current" != "$syn_retries" ] || [ "$congestion_control_current" != "$congestion" ]; then settings='{"enabled" : "'$mptcp_enabled'", "checksum": "'$checksum'","path_manager": "'$path_manager'","scheduler": "'$scheduler'","syn_retries": "'$syn_retries'","congestion_control": "'$congestion'"}' echo $(_set_json "mptcp" "$settings") else @@ -827,7 +823,7 @@ _set_vpn_ip() { local settings [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return - vpnifname="$(uci -q get network.omrvpn.device)" + vpnifname="$(uci -q get network.omrvpn.ifname)" vpnip_local_current="$(echo "$vps_config" | jsonfilter -q -e '@.vpn.remoteip')" vpnip_local=$(ip -4 -br addr ls dev ${vpnifname} | awk -F'[ /]+' '{print $3}') vpnip_remote_current="$(echo "$vps_config" | jsonfilter -q -e '@.vpn.localip')" @@ -843,19 +839,6 @@ _set_vpn_ip() { fi } -_set_sipalg() { - local settings - sipalg="$(uci -q get openmptcprouter.settings.sipalg)" - if [ "$sipalg" = "1" ]; then - sipalg="true" - else - sipalg="false" - fi - settings='{"enable" : "'$sipalg'"}' - result=$(_set_json "sipalg" "$settings") -} - - _delete_client2client() { if [ -n "$(echo $1 | grep omr_client2client)" ]; then uci -q delete network.$1 @@ -867,7 +850,7 @@ _set_client2client() { [ -z "$vps_config" ] && vps_config=$(_get_json "config") [ -z "$vps_config" ] && return c2cips="$(echo "$vps_config" | jsonfilter -q -e '@.client2client.lanips[0]')" - vpnifname="$(uci -q get network.omrvpn.device)" + vpnifname="$(uci -q get network.omrvpn.ifname)" vpnip_local=$(ip -4 -br addr ls dev ${vpnifname} | awk -F'[ /]+' '{print $3}' | tr -d "\n") vpnip_remote=$(ip -4 r list dev ${vpnifname} | grep via | grep -v default | grep -v / | grep -v metric | awk '{print $1}' | tr -d "\n") for lanip in $c2cips; do @@ -901,7 +884,6 @@ _vps_firewall_redirect_port() { config_get v2ray $1 v2ray "0" config_get name $1 name config_get dmz $1 dmz "0" - config_get target $1 target "REDIRECT" if [ -z "$src_dport" ] && [ -n "$dest_port" ]; then src_dport=$dest_port fi @@ -936,74 +918,42 @@ _vps_firewall_redirect_port() { iptables-save --counters | sed "s:-d $src_dip/32::g" | iptables-restore -w } [ -n "$src_ip" ] && comment=" from $src_ip" - if [ "$target" = "ACCEPT" ]; then - checkfw=$(echo "$vpsfwlist" | grep "# OMR $username open router $src_dport port $protoi${comment}") - else - checkfw=$(echo "$vpsfwlist" | grep "# OMR $username redirect router $src_dport port $protoi${comment}") - fi + checkfw=$(echo "$vpsfwlist" | grep "# OMR $username redirect router $src_dport port $protoi${comment}") fi else if [ "$src_dip" = "" ] && [ "$src_ip" = "" ]; then - if [ "$target" = "ACCEPT" ]; then - checkfw=$(echo "$vpsfw6list" | grep "$src_dport # OMR $username open router $src_dport port $protoi") - else - checkfw=$(echo "$vpsfw6list" | grep "$src_dport # OMR $username redirect router $src_dport port $protoi") - fi + checkfw=$(echo "$vpsfw6list" | grep "$src_dport # OMR $username redirect router $src_dport port $protoi") else comment="" [ -n "$src_dip" ] && comment=" to $src_dip" [ -n "$src_ip" ] && comment=" from $src_ip" - if [ "$target" = "ACCEPT" ]; then - checkfw=$(echo "$vpsfw6list" | grep "# OMR $username open router $src_dport port $protoi${comment}") - else - checkfw=$(echo "$vpsfw6list" | grep "# OMR $username redirect router $src_dport port $protoi${comment}") - fi + checkfw=$(echo "$vpsfw6list" | grep "# OMR $username redirect router $src_dport port $protoi${comment}") fi fi if [ "$checkfw" = "" ]; then - settings='{"name" : "router '$src_dport'","port" : "'$src_dport'","source_dip" : "'$src_dip'","source_ip" : "'$src_ip'","proto" : "'$protoi'","fwtype" : "'$target'","ipproto" : "'$family'"}' + settings='{"name" : "router '$src_dport'","port" : "'$src_dport'","source_dip" : "'$src_dip'","source_ip" : "'$src_ip'","proto" : "'$protoi'","fwtype" : "DNAT","ipproto" : "'$family'"}' _set_json "shorewallopen" "$settings" fi if [ "$family" = "ipv4" ]; then if [ "$src_dip" = "" ] && [ "$src_ip" = "" ]; then - if [ "$target" = "ACCEPT" ]; then - vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR $username open router $src_dport port $protoi") - [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR open router $src_dport port $protoi") - else - vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR $username redirect router $src_dport port $protoi") - [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR redirect router $src_dport port $protoi") - fi + vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR $username redirect router $src_dport port $protoi") + [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "$src_dport # OMR redirect router $src_dport port $protoi") else comment="" [ -n "$src_dip" ] && comment=" to $src_dip" [ -n "$src_ip" ] && comment=" from $src_ip" - if [ "$target" = "ACCEPT" ]; then - vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR $username open router $src_dport port $protoi${comment}") - [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR open router $src_dport port $protoi${comment}") - else - vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR $username redirect router $src_dport port $protoi${comment}") - [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR redirect router $src_dport port $protoi${comment}") - fi + vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR $username redirect router $src_dport port $protoi${comment}") + [ "$username" = "openmptcprouter" ] && vpsfwlist=$(echo "$vpsfwlist" | grep -v "# OMR redirect router $src_dport port $protoi${comment}") fi else if [ "$src_dip" = "" ] && [ "$src_ip" = "" ]; then - if [ "$target" = "ACCEPT" ]; then - vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR $username open router $src_dport port $protoi") - [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR open router $src_dport port $protoi") - else - vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR $username redirect router $src_dport port $protoi") - [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR redirect router $src_dport port $protoi") - fi + vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR $username redirect router $src_dport port $protoi") + [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "$src_dport # OMR redirect router $src_dport port $protoi") else [ -n "$src_dip" ] && comment=" to $src_dip" [ -n "$src_ip" ] && comment=" from $src_ip" - if [ "$target" = "ACCEPT" ]; then - vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR $username open router $src_dport port $protoi${comment}") - [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR open router $src_dport port $protoi${comment}") - else - vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR $username redirect router $src_dport port $protoi${comment}") - [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR redirect router $src_dport port $protoi${comment}") - fi + vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR $username redirect router $src_dport port $protoi${comment}") + [ "$username" = "openmptcprouter" ] && vpsfw6list=$(echo "$vpsfw6list" | grep -v "# OMR redirect router $src_dport port $protoi${comment}") fi fi else @@ -1134,7 +1084,7 @@ _set_vps_firewall() { #' fwservername=$1 - [ -n "$fwservername" ] && servername=$fwservername + [ -z "$servername" ] && servername=$fwservername [ -z "$fwservername" ] && fwservername=$servername [ "$(uci -q get openmptcprouter.${fwservername}.nofwredirect)" = "1" ] && return [ -z "$(uci -q get openmptcprouter.${fwservername}.username)" ] && return @@ -1153,11 +1103,9 @@ _set_vps_firewall() { username="$(uci -q get openmptcprouter.${fwservername}.username)" settings='{"name" : "redirect router"}' fw_list=$(_set_json "shorewalllist" "$settings") - [ -z "$fw_list" ] && return vpsfwlist=$(echo $fw_list | jsonfilter -q -e '@.list[*]' | sed '/^[[:space:]]*$/d') settings='{"name" : "open router"}' fw_list=$(_set_json "shorewalllist" "$settings") - [ -z "$fw_list" ] && return if [ -n "$vpsfwlist" ]; then vpsfwlist="$vpsfwlist\n$(echo $fw_list | jsonfilter -q -e '@.list[*]' | sed '/^[[:space:]]*$/d')" else @@ -1165,11 +1113,9 @@ _set_vps_firewall() { fi settings='{"name" : "redirect router","ipproto" : "ipv6"}' fw6_list=$(_set_json "shorewalllist" "$settings") - [ -z "$fw6_list" ] && return vpsfw6list=$(echo $fw6_list | jsonfilter -q -e '@.list[*]' | sed '/^[[:space:]]*$/d') settings='{"name" : "open router","ipproto" : "ipv6"}' fw6_list=$(_set_json "shorewalllist" "$settings") - [ -z "$fw6_list" ] && return if [ -n "$vpsfw6list" ]; then vpsfw6list="$vpsfw6list\n$(echo $fw6_list | jsonfilter -q -e '@.list[*]' | sed '/^[[:space:]]*$/d')" else @@ -1563,18 +1509,13 @@ _set_config_from_vps() { congestion="$(echo "$vps_config" | jsonfilter -q -e '@.network.congestion_control')" uci -q batch <<-EOF >/dev/null set network.globals.multipath=$mptcp_enabled + set network.globals.mptcp_path_manager=$mptcp_path_manager + set network.globals.mptcp_scheduler=$mptcp_scheduler set network.globals.mptcp_checksum=$mptcp_checksum + set network.globals.mptcp_syn_retries=$mptcp_syn_retries set network.globals.congestion=$congestion commit network EOF - if [ "$mptcp_path_manager" != "" ] && [ "$mptcp_scheduler" != "" ] && [ "$mptcp_syn_retries" != "" ]; then - uci -q batch <<-EOF >/dev/null - set network.globals.mptcp_path_manager=$mptcp_path_manager - set network.globals.mptcp_scheduler=$mptcp_scheduler - set network.globals.mptcp_syn_retries=$mptcp_syn_retries - commit network - EOF - fi # Check if server get an IPv6, if not disable IPv6 on OMR vps_ipv6_addr="$(echo "$vps_config" | jsonfilter -q -e '@.network.ipv6')" @@ -1895,7 +1836,6 @@ _config_service() { lanips="" config_foreach _get_lan_ip interface _set_lan_ip - _set_sipalg config_foreach _delete_client2client route if [ "$(uci -q get openmptcprouter.settings.vpn)" != "openvpn" ] && [ "$(echo "$vps_config" | jsonfilter -q -e '@.client2client.enabled')" == "true" ]; then _set_client2client diff --git a/openmptcprouter/files/etc/init.d/openvpnbonding b/openmptcprouter/files/etc/init.d/openvpnbonding index f3c085802..adad30b5b 100755 --- a/openmptcprouter/files/etc/init.d/openvpnbonding +++ b/openmptcprouter/files/etc/init.d/openvpnbonding @@ -77,7 +77,7 @@ start_service() set network.omrvpn.updelay='20' set network.omrvpn.use_carrier='1' set network.omrvpn.mtu='1440' - set network.omrvpn.device= 'bonding-omrvpn' + set network.omrvpn.ifname= 'bonding-omrvpn' set network.omrvpn.force_link='1' commit network EOF diff --git a/openmptcprouter/files/etc/iproute2/rt_dsfield b/openmptcprouter/files/etc/iproute2/rt_dsfield old mode 100755 new mode 100644 diff --git a/openmptcprouter/files/etc/sysctl.d/default.conf b/openmptcprouter/files/etc/sysctl.d/default.conf old mode 100755 new mode 100644 diff --git a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks index 7ddcc4e57..f47a4200c 100755 --- a/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks +++ b/openmptcprouter/files/etc/uci-defaults/1930-omr-shadowsocks @@ -53,7 +53,6 @@ fi if [ "$(uci -q get shadowsocks-libev.hi3)" != "" ]; then port=1100 - [ "$NBCPU" -gt "10" ] && NBCPU=10 for c in $(seq 1 2 $NBCPU); do uci -q batch <<-EOF >/dev/null set shadowsocks-libev.hi$c.local_port=$port diff --git a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns index ecb75b2f5..705c30225 100755 --- a/openmptcprouter/files/etc/uci-defaults/1940-omr-dns +++ b/openmptcprouter/files/etc/uci-defaults/1940-omr-dns @@ -15,6 +15,7 @@ if [ "$(uci -q get openmptcprouter.latest_versions)" = "" ]; then uci -q batch <<-EOF >/dev/null add_list dhcp.@dnsmasq[-1].server="127.0.0.1#5353" add_list dhcp.@dnsmasq[-1].server="/lan/" + set dhcp.@dnsmasq[-1].dnssec='1' commit dhcp EOF fi @@ -42,7 +43,7 @@ if [ "$(uci -q get dhcp.lan.dhcp_options)" = "" ]; then EOF fi -if [ -n "$(uci -q get dhcp.@dnsmasq[0].server | grep 127.0.0.1)" ] && [ -z "$(uci -q get dhcp.@dnsmasq[0].server | grep 127.0.0.1#5353)" ]; then +if [ -n "$(uci -q dhcp.@dnsmasq[0].server | grep 127.0.0.1)" ] && [ -z "$(uci -q dhcp.@dnsmasq[0].server | grep 127.0.0.1#5353)" ]; then /etc/init.d/https-dns-proxy start /etc/init.d/https-dns-proxy enable else @@ -59,7 +60,7 @@ fi # commit unbound #EOF -if [ -z "$(uci -q show unbound.auth_icann)" ]; then +if [ -z "$(uci -q unbound.auth_icann)" ]; then uci -q batch <<-EOF >/dev/null set unbound.auth_icann=zone set unbound.auth_icann.fallback='1' diff --git a/openmptcprouter/files/etc/uci-defaults/1970-omr-vnstat b/openmptcprouter/files/etc/uci-defaults/1970-omr-vnstat index 749b10680..2cef43a28 100755 --- a/openmptcprouter/files/etc/uci-defaults/1970-omr-vnstat +++ b/openmptcprouter/files/etc/uci-defaults/1970-omr-vnstat @@ -1,24 +1,24 @@ #!/bin/sh if [ "$(uci -q get openmptcprouter.latest_versions)" = "" ]; then - wanintf="$(uci -q get network.wan1.device)" + wanintf="$(uci -q get network.wan1.ifname)" if [ "$(uci -q get vnstat.@vnstat[-1].interface | grep $wanintf)" = "" ]; then uci -q batch <<-EOF >/dev/null delete vnstat.@vnstat[-1] add vnstat vnstat set vnstat.@vnstat[-1].interface=$wanintf EOF - wanintf="$(uci -q get network.wan2.device)" + wanintf="$(uci -q get network.wan2.ifname)" uci -q batch <<-EOF >/dev/null add_list vnstat.@vnstat[-1].interface=$wanintf EOF if [ "$(uci -q get network.wan3)" != "" ]; then - wanintf="$(uci -q get network.wan3.device)" + wanintf="$(uci -q get network.wan3.ifname)" uci -q batch <<-EOF >/dev/null add_list vnstat.@vnstat[-1].interface=$wanintf EOF fi if [ "$(uci -q get network.wan4)" != "" ]; then - wanintf="$(uci -q get network.wan4.device)" + wanintf="$(uci -q get network.wan4.ifname)" uci -q batch <<-EOF >/dev/null add_list vnstat.@vnstat[-1].interface=$wanintf EOF diff --git a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall index 709eaaf05..133e1d293 100755 --- a/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall +++ b/openmptcprouter/files/etc/uci-defaults/1980-omr-firewall @@ -45,8 +45,7 @@ if [ "$(uci -q get firewall.zone_vpn)" = "" ]; then uci -q batch <<-EOF >/dev/null set firewall.zone_vpn=zone set firewall.zone_vpn.name=vpn - add_list firewall.zone_vpn.network=omrvpn - add_list firewall.zone_vpn.network=omr6in4 + set firewall.zone_vpn.network=glorytun set firewall.zone_vpn.masq=1 set firewall.zone_vpn.input=REJECT set firewall.zone_vpn.forward=ACCEPT @@ -99,7 +98,6 @@ if [ "$(uci -q show firewall | grep Allow-Lan-to-Wan)" = "" ]; then set firewall.@rule[-1].name='Allow-Lan-to-Wan' set firewall.@rule[-1].dest='wan' set firewall.@rule[-1].src='lan' - set firewall.@rule[-1].proto='all' commit firewall EOF fi @@ -150,14 +148,6 @@ if [ "$(uci -q get firewall.gre_tunnel)" = "" ]; then commit firewall EOF fi -if [ "$(uci -q get firewall.ttl)" = "" ]; then - uci -q batch <<-EOF >/dev/null - set firewall.ttl=include - set firewall.ttl.path=/etc/firewall.ttl - set firewall.ttl.reload=1 - commit firewall - EOF -fi if [ "$(uci -q get firewall.fwlantovpn)" = "" ]; then uci -q batch <<-EOF >/dev/null set firewall.zone_lan.auto_helper='0' @@ -240,15 +230,6 @@ uci -q batch <<-EOF >/dev/null set firewall.@include[0].reload='1' commit firewall EOF -if [ "$(uci -q get openmptcprouter.settings.sipalg)" != "1" ]; then - uci -q batch <<-EOF >/dev/null - set firewall.zone_lan.auto_helper='0' - set firewall.zone_wan.auto_helper='0' - commit firewall - EOF - rmmod nf_nat_sip 2>&1 >/dev/null - rmmod nf_conntrack_sip 2>&1 >/dev/null -fi rm -f /tmp/luci-indexcache diff --git a/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker b/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker index 882e4b0a7..00fbf4002 100755 --- a/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker +++ b/openmptcprouter/files/etc/uci-defaults/1990-omr-tracker @@ -10,11 +10,6 @@ if [ "$(uci -q get omr-tracker.omrvpn)" = "" ]; then set omr-tracker.omrvpn.interval=5 set omr-tracker.omrvpn.mail_alert=0 set omr-tracker.omrvpn.enabled=1 - set omr-tracker.omrvpn.wait-test=0 - set omr-tracker.omrvpn.server_http_test=1 - set omr-tracker.omrvpn.restart_down=0 - add_list omr-tracker.omrvpn.hosts='4.2.2.1' - add_list omr-tracker.omrvpn.hosts='8.8.8.8' commit omr-tracker EOF fi diff --git a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn index 4cb5a524c..d1f5d8b86 100755 --- a/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn +++ b/openmptcprouter/files/etc/uci-defaults/2020-omr-vpn @@ -5,7 +5,7 @@ if [ "$(uci -q get network.omrvpn)" = "" ]; then delete network.glorytun delete network.omrvpn set network.omrvpn=interface - set network.omrvpn.device=tun0 + set network.omrvpn.ifname=tun0 set network.omrvpn.proto=dhcp set network.omrvpn.ip4table=vpn set network.omrvpn.multipath=off diff --git a/openmptcprouter/files/etc/uci-defaults/2030-omr-fstab b/openmptcprouter/files/etc/uci-defaults/2030-omr-fstab deleted file mode 100755 index 575d0e238..000000000 --- a/openmptcprouter/files/etc/uci-defaults/2030-omr-fstab +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -. /lib/functions.sh - -_set_fsck() { - uci -q batch <<-EOF >/dev/null - set "fstab.$1.enabled=1" - set "fstab.$1.enable_fsck=1" - EOF -} - -/sbin/block detect > /etc/config/fstab -uci -q set fstab.@global[0].check_fs='1' -config_load fstab -config_foreach _set_fsck mount -uci -q commit fstab - -exit 0 diff --git a/openmptcprouter/files/etc/uci-defaults/2040-omr-sqm b/openmptcprouter/files/etc/uci-defaults/2040-omr-sqm index ace19d8a4..d8c232752 100755 --- a/openmptcprouter/files/etc/uci-defaults/2040-omr-sqm +++ b/openmptcprouter/files/etc/uci-defaults/2040-omr-sqm @@ -1,8 +1,8 @@ #!/bin/sh if [ "$(uci -q get openmptcprouter.settings.version)" = "" ]; then if [ "$(uci -q get sqm.wan1)" = "" ]; then - wan1="$(uci -q get network.wan1.device)" - wan2="$(uci -q get network.wan2.device)" + wan1="$(uci -q get network.wan1.ifname)" + wan2="$(uci -q get network.wan2.ifname)" uci -q batch <<-EOF >/dev/null delete sqm.eth1 set sqm.wan1=queue @@ -10,7 +10,7 @@ if [ "$(uci -q get openmptcprouter.settings.version)" = "" ]; then set sqm.wan1.script="simple.qos" set sqm.wan1.qdisc_advanced='0' set sqm.wan1.linklayer='none' - set sqm.wan1.enabled='1' + set sqm.wan1.enabled='0' set sqm.wan1.interface="${wan1}" set sqm.wan1.download='0' set sqm.wan1.upload='0' @@ -23,7 +23,7 @@ if [ "$(uci -q get openmptcprouter.settings.version)" = "" ]; then set sqm.wan2.script="simple.qos" set sqm.wan2.qdisc_advanced='0' set sqm.wan2.linklayer='none' - set sqm.wan2.enabled='1' + set sqm.wan2.enabled='0' set sqm.wan2.interface="${wan2}" set sqm.wan2.download='0' set sqm.wan2.upload='0' @@ -34,14 +34,14 @@ if [ "$(uci -q get openmptcprouter.settings.version)" = "" ]; then commit sqm EOF if [ "$(uci -q get network.wan3)" != "" ]; then - wan3="$(uci -q get network.wan3.device)" + wan3="$(uci -q get network.wan3.ifname)" uci -q batch <<-EOF >/dev/null set sqm.wan3=queue set sqm.wan3.qdisc="fq_codel" set sqm.wan3.script="simple.qos" set sqm.wan3.qdisc_advanced='0' set sqm.wan3.linklayer='none' - set sqm.wan3.enabled='1' + set sqm.wan3.enabled='0' set sqm.wan3.interface="${wan3}" set sqm.wan3.download='0' set sqm.wan3.upload='0' @@ -53,14 +53,14 @@ if [ "$(uci -q get openmptcprouter.settings.version)" = "" ]; then EOF fi if [ "$(uci -q get network.wan4)" != "" ]; then - wan4="$(uci -q get network.wan4.device)" + wan4="$(uci -q get network.wan4.ifname)" uci -q batch <<-EOF >/dev/null set sqm.wan4=queue set sqm.wan4.qdisc="fq_codel" set sqm.wan4.script="simple.qos" set sqm.wan4.qdisc_advanced='0' set sqm.wan4.linklayer='none' - set sqm.wan4.enabled='1' + set sqm.wan4.enabled='0' set sqm.wan4.interface="${wan4}" set sqm.wan4.download='0' set sqm.wan4.upload='0' @@ -93,8 +93,6 @@ if [ "$(uci -q get sqm.omrvpn)" = "" ]; then EOF fi -sed -i 's/SQM_SYSLOG=1/SQM_SYSLOG=0/g' /etc/sqm/sqm.conf - rm -f /tmp/luci-indexcache exit 0 diff --git a/openmptcprouter/files/etc/uci-defaults/2060-omr-system b/openmptcprouter/files/etc/uci-defaults/2060-omr-system index 4a4a37962..787763c26 100755 --- a/openmptcprouter/files/etc/uci-defaults/2060-omr-system +++ b/openmptcprouter/files/etc/uci-defaults/2060-omr-system @@ -1,15 +1,8 @@ #!/bin/sh uci -q batch <<-EOF >/dev/null set system.@system[-1].ttylogin=1 - set system.ntp=timeserver set system.ntp.use_dhcp='0' set system.ntp.enable_server='1' - set system.ntp.enabled='1' - del system.ntp.server - add_list system.ntp.server='0.pool.ntp.org' - add_list system.ntp.server='1.pool.ntp.org' - add_list system.ntp.server='2.pool.ntp.org' - add_list system.ntp.server='3.pool.ntp.org' commit system set rpcd.@rpcd[0].timeout=120 commit rpcd @@ -24,6 +17,12 @@ if [ "$(uci -q get rpcd.@rpcd[0].socket)" != "/var/run/ubus/ubus.sock" ]; then EOF fi +/sbin/block detect > /etc/config/fstab +uci -q batch <<-EOF >/dev/null + set fstab.@global[0].check_fs='1' + commit fstab +EOF + [ -n "$(ubus call system board | jsonfilter -e '@.board_name' | grep raspberry)" ] && [ "$(uci -q get openmptcprouter.settings.scaling_governor)" != "performance" ] && { # force CPU speed for RPI uci -q set openmptcprouter.settings.scaling_min_freq=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq | tr -d "\n") @@ -31,58 +30,5 @@ fi uci -q set openmptcprouter.settings.scaling_governor='performance' uci -q commit openmptcprouter } -[ -n "$(ubus call system board | jsonfilter -e '@.board_name' | grep wrt)" ] && [ "$(uci -q get system.@system[0].compat_version)" == "" ] && { - uci -q batch <<-EOF >/dev/null - set system.@system[-1].compat_version='1.1' - commit system - EOF -} - -if [ -n "$(ubus call system board | jsonfilter -e '@.board_name' | grep rutx)" ]; then - uci -q batch <<-EOF >/dev/null - add system led - set system.@led[-1].sysfs='wan_wifi_4' - set system.@led[-1].name='WAN_ETH' - set system.@led[-1].trigger='netdev' - set system.@led[-1].dev='eth0' - add_list system.@led[-1].mode='tx' - add_list system.@led[-1].mode='rx' - add system led - set system.@led[-1].sysfs='wan_eth_3' - set system.@led[-1].name='WAN_WIFI' - set system.@led[-1].trigger='netdev' - add_list system.@led[-1].mode='tx' - add_list system.@led[-1].mode='rx' - add system led - set system.@led[-1].sysfs='wan_sim_1' - set system.@led[-1].name='WAN_MODEM1' - set system.@led[-1].trigger='netdev' - set system.@led[-1].dev='wwan0' - set system.@led[-1].mode='rx' - add system led - set system.@led[-1].name='WAN_MODEM2' - set system.@led[-1].sysfs='wan_sim_2' - set system.@led[-1].trigger='netdev' - set system.@led[-1].dev='wwan1' - set system.@led[-1].mode='rx' - add system led - set system.@led[-1].name='WIFI24' - set system.@led[-1].sysfs='wifi_gen_2' - set system.@led[-1].trigger='netdev' - set system.@led[-1].dev='radio0.network1' - add_list system.@led[-1].mode='tx' - add_list system.@led[-1].mode='rx' - add system led - set system.@led[-1].name='WIFI5' - set system.@led[-1].sysfs='wifi_gen_5' - set system.@led[-1].trigger='netdev' - set system.@led[-1].dev='radio1.network1' - add_list system.@led[-1].mode='tx' - add_list system.@led[-1].mode='rx' - commit system - EOF -fi - -#sed -i 's/^\tlogger -t/\t[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] \&\& logger -t/g' /usr/share/ModemManager/modemmanager.common exit 0 \ No newline at end of file diff --git a/openmptcprouter/files/etc/uci-defaults/2090-omr-wwan b/openmptcprouter/files/etc/uci-defaults/2090-omr-wwan index cab4295ea..42d8f2555 100755 --- a/openmptcprouter/files/etc/uci-defaults/2090-omr-wwan +++ b/openmptcprouter/files/etc/uci-defaults/2090-omr-wwan @@ -4,9 +4,9 @@ if [ "$(grep usbmode /etc/rc.local)" = "" ]; then sed -i 's:exit 0::g' /etc/rc.local cat <<-EOF >> /etc/rc.local /bin/sleep 5 - /sbin/usbmode -l 2>&1 /dev/null + /sbin/usbmode -l /bin/sleep 3 - /sbin/usbmode -s 2>&1 /dev/null + /sbin/usbmode -s exit 0 EOF fi diff --git a/openmptcprouter/files/etc/uci-defaults/2091-omr-wifi b/openmptcprouter/files/etc/uci-defaults/2091-omr-wifi index 2925bb104..f2e65c52e 100755 --- a/openmptcprouter/files/etc/uci-defaults/2091-omr-wifi +++ b/openmptcprouter/files/etc/uci-defaults/2091-omr-wifi @@ -1,22 +1,18 @@ #!/bin/sh -if [ "$(uci -q get wifi-iface.radio0)" != "" ] && [ "$(uci -q get wifi-iface.default_radio0.key)" = "12345678" ]; then - if [ "$(uci -q get wifi-device.radio0.country)" = "" ]; then +if [ "$(uci -q get wireless.radio0)" != "" ]; then + if [ "$(uci -q get wireless.radio0.country)" = "" ]; then uci -q batch <<-EOF >/dev/null - set wifi-device.radio0.country='FR' - commit wifi-device + set wireless.radio0.country='00' + set wireless.default_radio0.skip_inactivity_poll='1' + commit wireless EOF fi - if [ -n "$(uci -q get wifi-iface.radio0.network | grep lan)" ]; then + if [ "$(uci -q get wireless.default_radio0.network)" = "lan" ]; then uci -q batch <<-EOF >/dev/null - set wifi-iface.default_radio0.network='wifi' - commit wifi-iface - EOF - fi - if [ -n "$(uci -q get wifi-device.radio0.cell_density)" ]; then - uci -q batch <<-EOF >/dev/null - delete wifi-device.radio0.cell_density - commit wifi-device + set wireless.default_radio0.network='wifi' + commit wireless EOF + fi fi diff --git a/openmptcprouter/files/etc/wgetrc4 b/openmptcprouter/files/etc/wgetrc4 old mode 100755 new mode 100644 diff --git a/r8125/LICENSE b/r8125/LICENSE new file mode 100644 index 000000000..f3077e149 --- /dev/null +++ b/r8125/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 goldkeyber112 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/r8125/Makefile b/r8125/Makefile index e9b213c6e..02d07644d 100644 --- a/r8125/Makefile +++ b/r8125/Makefile @@ -1,42 +1,53 @@ -# Attribution: https://gist.github.com/lenew/9b41ba901c3393047ede0766760f9d55 - -#Put this source to 'package/lean/r8125' folder of OpenWRT/LEDE SDK +# Come from https://github.com/goldkeyber112/openwrt-r8125 +#Download realtek r8125 linux driver from official site +#Unpack source file +#Replace orginal Makefile with this file +#Put this source to 'package' folder of OpenWRT SDK #Build(make menuconfig, make defconfig, make) include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=r8125 -PKG_VERSION:=9.006.04 -PKG_RELEASE:=$(AUTORELEASE) +PKG_VERSION:=9.005.01 +PKG_RELEASE:=1 + +#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 +#PKG_CAT:=bzcat PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) include $(INCLUDE_DIR)/package.mk define KernelPackage/r8125 - TITLE:=Driver for Realtek r8125 chipsets SUBMENU:=Network Devices + TITLE:=Driver for Realtek r8125 chipsets VERSION:=$(LINUX_VERSION)+$(PKG_VERSION)-$(BOARD)-$(PKG_RELEASE) FILES:= $(PKG_BUILD_DIR)/r8125.ko AUTOLOAD:=$(call AutoProbe,r8125) + DEFAULT:=y endef define Package/r8125/description - This package contains a driver for Realtek r8125 chipsets. + This package contains a driver for Realtek r8125 chipsets. endef R8125_MAKEOPTS= -C $(PKG_BUILD_DIR) \ - PATH="$(TARGET_PATH)" \ - ARCH="$(LINUX_KARCH)" \ - CROSS_COMPILE="$(TARGET_CROSS)" \ - TARGET="$(HAL_TARGET)" \ - TOOLPREFIX="$(KERNEL_CROSS)" \ - TOOLPATH="$(KERNEL_CROSS)" \ - KERNELPATH="$(LINUX_DIR)" \ - KERNELDIR="$(LINUX_DIR)" \ - LDOPTS=" " \ - DOMULTI=1 + PATH="$(TARGET_PATH)" \ + ARCH="$(LINUX_KARCH)" \ + CROSS_COMPILE="$(TARGET_CROSS)" \ + TARGET="$(HAL_TARGET)" \ + TOOLPREFIX="$(KERNEL_CROSS)" \ + TOOLPATH="$(KERNEL_CROSS)" \ + KERNELPATH="$(LINUX_DIR)" \ + KERNELDIR="$(LINUX_DIR)" \ + LDOPTS=" " \ + DOMULTI=1 + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) + $(CP) ./src/* $(PKG_BUILD_DIR) +endef define Build/Compile $(MAKE) $(R8125_MAKEOPTS) modules diff --git a/r8125/README.md b/r8125/README.md new file mode 100644 index 000000000..a472d859e --- /dev/null +++ b/r8125/README.md @@ -0,0 +1,8 @@ +# Realtek RTL8125 Driver for Openwrt + +Download realtek r8125 linux driver from official site +https://www.realtek.com/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-pci-express-software +Unpack source file +Replace orginal Makefile with this file +Put this source to 'package' folder of OpenWRT SDK +Build(make menuconfig, make defconfig, make) diff --git a/r8125/src/Makefile b/r8125/src/Makefile old mode 100755 new mode 100644 index 514c0acdd..f49c90676 --- a/r8125/src/Makefile +++ b/r8125/src/Makefile @@ -44,11 +44,8 @@ ENABLE_TX_NO_CLOSE = y ENABLE_MULTIPLE_TX_QUEUE = n ENABLE_PTP_SUPPORT = n ENABLE_PTP_MASTER_MODE = n -ENABLE_RSS_SUPPORT = y +ENABLE_RSS_SUPPORT = n ENABLE_LIB_SUPPORT = n -ENABLE_USE_FIRMWARE_FILE = n -DISABLE_PM_SUPPORT = n -DISABLE_MULTI_MSIX_VECTOR = n ifneq ($(KERNELRELEASE),) obj-m := r8125.o @@ -109,16 +106,6 @@ ifneq ($(KERNELRELEASE),) r8125-objs += r8125_lib.o EXTRA_CFLAGS += -DENABLE_LIB_SUPPORT endif - ifeq ($(ENABLE_USE_FIRMWARE_FILE), y) - r8125-objs += r8125_firmware.o - EXTRA_CFLAGS += -DENABLE_USE_FIRMWARE_FILE - endif - ifeq ($(DISABLE_PM_SUPPORT), y) - EXTRA_CFLAGS += -DDISABLE_PM_SUPPORT - endif - ifeq ($(DISABLE_MULTI_MSIX_VECTOR), y) - EXTRA_CFLAGS += -DDISABLE_MULTI_MSIX_VECTOR - endif else BASEDIR := /lib/modules/$(shell uname -r) KERNELDIR ?= $(BASEDIR)/build diff --git a/r8125/src/Makefile_linux24x b/r8125/src/Makefile_linux24x old mode 100755 new mode 100644 diff --git a/r8125/src/r8125.h b/r8125/src/r8125.h old mode 100755 new mode 100644 index 4875ccca4..06893797b --- a/r8125/src/r8125.h +++ b/r8125/src/r8125.h @@ -47,15 +47,9 @@ #include "r8125_lib.h" #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32) -typedef int netdev_tx_t; -#endif - -/* #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)&& !defined(ENABLE_LIB_SUPPORT) #define RTL_USE_NEW_INTR_API #endif -*/ #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) #define skb_transport_offset(skb) (skb->h.raw - skb->data) @@ -363,7 +357,7 @@ do { \ #define RSS_SUFFIX "" #endif -#define RTL8125_VERSION "9.006.04" NAPI_SUFFIX DASH_SUFFIX REALWOW_SUFFIX PTP_SUFFIX RSS_SUFFIX +#define RTL8125_VERSION "9.005.01" NAPI_SUFFIX DASH_SUFFIX REALWOW_SUFFIX PTP_SUFFIX RSS_SUFFIX #define MODULENAME "r8125" #define PFX MODULENAME ": " @@ -466,10 +460,8 @@ This is free software, and you are welcome to redistribute it under certain cond #define R8125_MAX_RX_QUEUES (4) #define R8125_MAX_QUEUES R8125_MAX_RX_QUEUES -#define OCP_STD_PHY_BASE 0xa400 - #ifdef ENABLE_LIB_SUPPORT -#define R8125_MULTI_RX_Q(tp) 0 +#define R8125_MULTI_RX_Q(tp) 1 #else #define R8125_MULTI_RX_Q(tp) (tp->num_rx_rings > 1) #endif @@ -505,7 +497,7 @@ This is free software, and you are welcome to redistribute it under certain cond #endif #ifndef NETDEV_TX_LOCKED -#define NETDEV_TX_LOCKED -1t /* driver tx lock was already taken */ +#define NETDEV_TX_LOCKED -1 /* driver tx lock was already taken */ #endif #ifndef ADVERTISED_Pause @@ -541,9 +533,6 @@ This is free software, and you are welcome to redistribute it under certain cond #endif #define RTK_ADVERTISE_2500FULL 0x80 -#define RTK_LPA_ADVERTISE_2500FULL 0x20 -#define RTK_LPA_ADVERTISE_5000FULL 0x40 -#define RTK_LPA_ADVERTISE_10000FULL 0x800 /* Tx NO CLOSE */ #define MAX_TX_NO_CLOSE_DESC_PTR_V2 0x10000 @@ -1203,24 +1192,16 @@ enum RTL8125_registers { TIMER_INT3_8125 = 0x00F4, INT_MITI_V2_0_RX = 0x0A00, INT_MITI_V2_0_TX = 0x0A02, - INT_MITI_V2_1_RX = 0x0A08, INT_MITI_V2_1_TX = 0x0A0A, IMR_V2_CLEAR_REG_8125 = 0x0D00, ISR_V2_8125 = 0x0D04, IMR_V2_SET_REG_8125 = 0x0D0C, - TDU_STA_8125 = 0x0D08, - RDU_STA_8125 = 0x0D0A, - TX_NEW_CTRL = 0x203E, TNPDS_Q1_LOW_8125 = 0x2100, - PLA_TXQ0_IDLE_CREDIT = 0x2500, - PLA_TXQ1_IDLE_CREDIT = 0x2504, SW_TAIL_PTR0_8125 = 0x2800, HW_CLO_PTR0_8125 = 0x2802, RDSAR_Q1_LOW_8125 = 0x4000, RSS_CTRL_8125 = 0x4500, Q_NUM_CTRL_8125 = 0x4800, - RSS_KEY_8125 = 0x4600, - RSS_INDIRECTION_TBL_8125_V2 = 0x4700, EEE_TXIDLE_TIMER_8125 = 0x6048, PTP_CTRL_8125 = 0x6800, PTP_STATUS_8125 = 0x6802, @@ -1303,7 +1284,6 @@ enum RTL8125_register_content { RxCfg_128_int_en = (1 << 15), RxCfg_fet_multi_en = (1 << 14), RxCfg_half_refetch = (1 << 13), - RxCfg_pause_slot_en = (1 << 11), RxCfg_9356SEL = (1 << 6), /* TxConfigBits */ @@ -1730,14 +1710,6 @@ struct pci_resource { u32 pci_sn_h; }; -enum r8125_flag { - R8125_FLAG_DOWN = 0, - R8125_FLAG_TASK_RESET_PENDING, - R8125_FLAG_TASK_ESD_CHECK_PENDING, - R8125_FLAG_TASK_LINKCHG_CHECK_PENDING, - R8125_FLAG_MAX -}; - struct rtl8125_tx_ring { void* priv; u32 index; @@ -1786,210 +1758,6 @@ struct r8125_irq { char name[IFNAMSIZ + 10]; }; -#pragma pack(1) -struct rtl8125_regs { - //00 - u8 mac_id[6]; - u16 reg_06; - u8 mar[8]; - //10 - u64 dtccr; - u16 ledsel0; - u16 legreg; - u32 tctr3; - //20 - u32 txq0_dsc_st_addr_0; - u32 txq0_dsc_st_addr_2; - u64 reg_28; - //30 - u16 rit; - u16 ritc; - u16 reg_34; - u8 reg_36; - u8 command; - u32 imr0; - u32 isr0; - //40 - u32 tcr; - u32 rcr; - u32 tctr0; - u32 tctr1; - //50 - u8 cr93c46; - u8 config0; - u8 config1; - u8 config2; - u8 config3; - u8 config4; - u8 config5; - u8 tdfnr; - u32 timer_int0; - u32 timer_int1; - //60 - u32 gphy_mdcmdio; - u32 csidr; - u32 csiar; - u16 phy_status; - u8 config6; - u8 pmch; - //70 - u32 eridr; - u32 eriar; - u16 config7; - u16 reg_7a; - u32 ephy_rxerr_cnt; - //80 - u32 ephy_mdcmdio; - u16 ledsel2; - u16 ledsel1; - u32 tctr2; - u32 timer_int2; - //90 - u8 tppoll0; - u8 reg_91; - u16 reg_92; - u16 led_feature; - u16 ledsel3; - u16 eee_led_config; - u16 reg_9a; - u32 reg_9c; - //a0 - u32 reg_a0; - u32 reg_a4; - u32 reg_a8; - u32 reg_ac; - //b0 - u32 patch_dbg; - u32 reg_b4; - u32 gphy_ocp; - u32 reg_bc; - //c0 - u32 reg_c0; - u32 reg_c4; - u32 reg_c8; - u16 otp_cmd; - u16 otp_pg_config; - //d0 - u16 phy_pwr; - u8 twsi_ctrl; - u8 oob_ctrl; - u16 mac_dbgo; - u16 mac_dbg; - u16 reg_d8; - u16 rms; - u32 efuse_data; - //e0 - u16 cplus_cmd; - u16 reg_e2; - u32 rxq0_dsc_st_addr_0; - u32 rxq0_dsc_st_addr_2; - u16 reg_ec; - u16 tx10midle_cnt; - //f0 - u16 misc0; - u16 misc1; - u32 timer_int3; - u32 cmac_ib; - u16 reg_fc; - u16 sw_rst; -}; -#pragma pack() - -struct rtl8125_regs_save { - union { - u8 mac_io[R8125_MAC_REGS_SIZE]; - - struct rtl8125_regs mac_reg; - }; - u16 pcie_phy[R8125_EPHY_REGS_SIZE/2]; - u16 eth_phy[R8125_PHY_REGS_SIZE/2]; - u32 eri_reg[R8125_ERI_REGS_SIZE/4]; - u32 pci_reg[R8125_PCI_REGS_SIZE/4]; - u16 sw_tail_ptr_reg[R8125_MAX_TX_QUEUES]; - u16 hw_clo_ptr_reg[R8125_MAX_TX_QUEUES]; - - //ktime_t begin_ktime; - //ktime_t end_ktime; - //u64 duration_ns; - - u16 sw0_tail_ptr; - u16 next_hwq0_clo_ptr; - u16 sw1_tail_ptr; - u16 next_hwq1_clo_ptr; - - u16 int_miti_rxq0; - u16 int_miti_txq0; - u16 int_miti_rxq1; - u16 int_miti_txq1; - u8 int_config; - u32 imr_new; - u32 isr_new; - - u8 tdu_status; - u16 rdu_status; - - u16 tc_mode; - - u32 txq1_dsc_st_addr_0; - u32 txq1_dsc_st_addr_2; - - u32 pla_tx_q0_idle_credit; - u32 pla_tx_q1_idle_credit; - - u32 rxq1_dsc_st_addr_0; - u32 rxq1_dsc_st_addr_2; - - u32 rss_ctrl; - u8 rss_key[RTL8125_RSS_KEY_SIZE]; - u8 rss_i_table[RTL8125_MAX_INDIRECTION_TABLE_ENTRIES]; - u16 rss_queue_num_sel_r; -}; - -struct rtl8125_counters { - /* legacy */ - u64 tx_packets; - u64 rx_packets; - u64 tx_errors; - u32 rx_errors; - u16 rx_missed; - u16 align_errors; - u32 tx_one_collision; - u32 tx_multi_collision; - u64 rx_unicast; - u64 rx_broadcast; - u32 rx_multicast; - u16 tx_aborted; - u16 tx_underrun; - - /* extended */ - u64 tx_octets; - u64 rx_octets; - u64 rx_multicast64; - u64 tx_unicast64; - u64 tx_broadcast64; - u64 tx_multicast64; - u32 tx_pause_on; - u32 tx_pause_off; - u32 tx_pause_all; - u32 tx_deferred; - u32 tx_late_collision; - u32 tx_all_collision; - u32 tx_aborted32; - u32 align_errors32; - u32 rx_frame_too_long; - u32 rx_runt; - u32 rx_pause_on; - u32 rx_pause_off; - u32 rx_pause_all; - u32 rx_unknown_opcode; - u32 rx_mac_error; - u32 tx_underrun32; - u32 rx_mac_missed; - u32 rx_tcam_dropped; - u32 tdu; - u32 rdu; -}; - /* Flow Control Settings */ enum rtl8125_fc_mode { rtl8125_fc_none = 0, @@ -2041,8 +1809,8 @@ struct rtl8125_private { struct rtl8125_ring lib_tx_ring[R8125_MAX_TX_QUEUES]; struct rtl8125_ring lib_rx_ring[R8125_MAX_RX_QUEUES]; #endif - //struct timer_list esd_timer; - //struct timer_list link_timer; + struct timer_list esd_timer; + struct timer_list link_timer; struct pci_resource pci_cfg_space; unsigned int esd_flag; unsigned int pci_cfg_is_read; @@ -2085,15 +1853,10 @@ struct rtl8125_private { unsigned int (*phy_reset_pending)(struct net_device *); unsigned int (*link_ok)(struct net_device *); #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) - struct work_struct reset_task; - struct work_struct esd_task; - struct work_struct linkchg_task; + struct work_struct task; #else - struct delayed_work reset_task; - struct delayed_work esd_task; - struct delayed_work linkchg_task; + struct delayed_work task; #endif - DECLARE_BITMAP(task_flags, R8125_FLAG_MAX); unsigned features; u8 org_pci_offset_99; @@ -2148,10 +1911,9 @@ struct rtl8125_private { u8 random_mac; - u16 phy_reg_aner; + u8 HwSuppGigaForceMode; + u16 phy_reg_anlpar; - u16 phy_reg_gbsr; - u16 phy_reg_status_2500; u32 HwPcieSNOffset; @@ -2163,20 +1925,12 @@ struct rtl8125_private { u8 HwSuppIntMitiVer; - u8 HwSuppExtendTallyCounterVer; - u8 check_keep_link_speed; u8 resume_not_chg_speed; u8 HwSuppD0SpeedUpVer; u8 D0SpeedUpSpeed; - u8 ring_lib_enabled; - - const char *fw_name; - struct rtl8125_fw *rtl_fw; - u32 ocp_base; - //Dash+++++++++++++++++ u8 HwSuppDashVer; u8 DASH; @@ -2266,7 +2020,8 @@ struct rtl8125_private { //Realwow-------------- #endif //ENABLE_REALWOW_SUPPORT - struct ethtool_eee eee; + u32 eee_adv_t; + u8 eee_enabled; #ifdef ENABLE_R8125_PROCFS //Procfs support @@ -2297,7 +2052,9 @@ struct rtl8125_private { #ifdef ENABLE_RSS_SUPPORT u32 rss_flags; /* Receive Side Scaling settings */ +#define RTL8125_RSS_KEY_SIZE 40 /* size of RSS Hash Key in bytes */ u8 rss_key[RTL8125_RSS_KEY_SIZE]; +#define RTL8125_MAX_INDIRECTION_TABLE_ENTRIES 128 u8 rss_indir_tbl[RTL8125_MAX_INDIRECTION_TABLE_ENTRIES]; u32 rss_options; #endif @@ -2366,8 +2123,8 @@ enum mcfg { CFG_METHOD_3, CFG_METHOD_4, CFG_METHOD_5, - CFG_METHOD_DEFAULT, - CFG_METHOD_MAX + CFG_METHOD_MAX, + CFG_METHOD_DEFAULT = 0xFF }; #define LSO_32K 32000 @@ -2407,15 +2164,15 @@ enum mcfg { static const u16 other_q_intr_mask = (RxOK1 | RxDU1); -void rtl8125_mdio_write(struct rtl8125_private *tp, u16 RegAddr, u16 value); +void rtl8125_mdio_write(struct rtl8125_private *tp, u32 RegAddr, u32 value); void rtl8125_mdio_prot_write(struct rtl8125_private *tp, u32 RegAddr, u32 value); void rtl8125_mdio_prot_direct_write_phy_ocp(struct rtl8125_private *tp, u32 RegAddr, u32 value); -u32 rtl8125_mdio_read(struct rtl8125_private *tp, u16 RegAddr); +u32 rtl8125_mdio_read(struct rtl8125_private *tp, u32 RegAddr); u32 rtl8125_mdio_prot_read(struct rtl8125_private *tp, u32 RegAddr); u32 rtl8125_mdio_prot_direct_read_phy_ocp(struct rtl8125_private *tp, u32 RegAddr); void rtl8125_ephy_write(struct rtl8125_private *tp, int RegAddr, int value); void rtl8125_mac_ocp_write(struct rtl8125_private *tp, u16 reg_addr, u16 value); -u32 rtl8125_mac_ocp_read(struct rtl8125_private *tp, u16 reg_addr); +u16 rtl8125_mac_ocp_read(struct rtl8125_private *tp, u16 reg_addr); void rtl8125_clear_eth_phy_bit(struct rtl8125_private *tp, u8 addr, u16 mask); void rtl8125_set_eth_phy_bit(struct rtl8125_private *tp, u8 addr, u16 mask); void rtl8125_ocp_write(struct rtl8125_private *tp, u16 addr, u8 len, u32 data); @@ -2423,6 +2180,7 @@ void rtl8125_oob_notify(struct rtl8125_private *tp, u8 cmd); void rtl8125_init_ring_indexes(struct rtl8125_private *tp); int rtl8125_eri_write(struct rtl8125_private *tp, int addr, int len, u32 value, int type); void rtl8125_oob_mutex_lock(struct rtl8125_private *tp); +u32 rtl8125_mdio_read(struct rtl8125_private *tp, u32 RegAddr); u32 rtl8125_ocp_read(struct rtl8125_private *tp, u16 addr, u8 len); u32 rtl8125_ocp_read_with_oob_base_address(struct rtl8125_private *tp, u16 addr, u8 len, u32 base_address); u32 rtl8125_ocp_write_with_oob_base_address(struct rtl8125_private *tp, u16 addr, u8 len, u32 value, u32 base_address); @@ -2474,22 +2232,21 @@ rtl8125_enable_hw_interrupt_v2(struct rtl8125_private *tp, u32 message_id) RTL_W32(tp, IMR_V2_SET_REG_8125, BIT(message_id)); } -int rtl8125_open(struct net_device *dev); -int rtl8125_close(struct net_device *dev); -void rtl8125_hw_config(struct net_device *dev); void rtl8125_hw_set_timer_int_8125(struct rtl8125_private *tp, u32 message_id, u8 timer_intmiti_val); void rtl8125_set_rx_q_num(struct rtl8125_private *tp, unsigned int num_rx_queues); void rtl8125_set_tx_q_num(struct rtl8125_private *tp, unsigned int num_tx_queues); +int rtl8125_set_real_num_queue(struct rtl8125_private *tp); void rtl8125_hw_start(struct net_device *dev); void rtl8125_hw_reset(struct net_device *dev); void rtl8125_tx_clear(struct rtl8125_private *tp); void rtl8125_rx_clear(struct rtl8125_private *tp); int rtl8125_init_ring(struct net_device *dev); void rtl8125_hw_set_rx_packet_filter(struct net_device *dev); -void rtl8125_enable_hw_linkchg_interrupt(struct rtl8125_private *tp); -int rtl8125_dump_tally_counter(struct rtl8125_private *tp, dma_addr_t paddr); -#ifndef ENABLE_LIB_SUPPORT +#ifdef ENABLE_LIB_SUPPORT +void rtl8125_lib_reset_prepare(struct rtl8125_private *tp); +void rtl8125_lib_reset_complete(struct rtl8125_private *tp); +#else static inline void rtl8125_lib_reset_prepare(struct rtl8125_private *tp) { } static inline void rtl8125_lib_reset_complete(struct rtl8125_private *tp) { } #endif diff --git a/r8125/src/r8125_dash.h b/r8125/src/r8125_dash.h old mode 100755 new mode 100644 diff --git a/r8125/src/r8125_firmware.h b/r8125/src/r8125_firmware.h deleted file mode 100755 index 1961be5d5..000000000 --- a/r8125/src/r8125_firmware.h +++ /dev/null @@ -1,68 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ -/* -################################################################################ -# -# r8125 is the Linux device driver released for Realtek 2.5Gigabit Ethernet -# controllers with PCI-Express interface. -# -# Copyright(c) 2021 Realtek Semiconductor Corp. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2 of the License, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -# more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, see . -# -# Author: -# Realtek NIC software team -# No. 2, Innovation Road II, Hsinchu Science Park, Hsinchu 300, Taiwan -# -################################################################################ -*/ - -/************************************************************************************ - * This product is covered by one or more of the following patents: - * US6,570,884, US6,115,776, and US6,327,625. - ***********************************************************************************/ - -#ifndef _LINUX_rtl8125_FIRMWARE_H -#define _LINUX_rtl8125_FIRMWARE_H - -#include -#include - -struct rtl8125_private; -typedef void (*rtl8125_fw_write_t)(struct rtl8125_private *tp, u16 reg, u16 val); -typedef u32 (*rtl8125_fw_read_t)(struct rtl8125_private *tp, u16 reg); - -#define RTL8125_VER_SIZE 32 - -struct rtl8125_fw { - rtl8125_fw_write_t phy_write; - rtl8125_fw_read_t phy_read; - rtl8125_fw_write_t mac_mcu_write; - rtl8125_fw_read_t mac_mcu_read; - const struct firmware *fw; - const char *fw_name; - struct device *dev; - - char version[RTL8125_VER_SIZE]; - - struct rtl8125_fw_phy_action { - __le32 *code; - size_t size; - } phy_action; -}; - -int rtl8125_fw_request_firmware(struct rtl8125_fw *rtl_fw); -void rtl8125_fw_release_firmware(struct rtl8125_fw *rtl_fw); -void rtl8125_fw_write_firmware(struct rtl8125_private *tp, struct rtl8125_fw *rtl_fw); - -#endif /* _LINUX_rtl8125_FIRMWARE_H */ diff --git a/r8125/src/r8125_n.c b/r8125/src/r8125_n.c old mode 100755 new mode 100644 index fd96e8f8e..608d8c2ee --- a/r8125/src/r8125_n.c +++ b/r8125/src/r8125_n.c @@ -83,33 +83,17 @@ #include "r8125.h" #include "rtl_eeprom.h" #include "rtltool.h" -#include "r8125_firmware.h" #ifdef ENABLE_R8125_PROCFS #include #include #endif -#define FIRMWARE_8125A_3 "rtl_nic/rtl8125a-3.fw" -#define FIRMWARE_8125B_2 "rtl_nic/rtl8125b-2.fw" - /* Maximum number of multicast addresses to filter (vs. Rx-all-multicast). The RTL chips use a 64 element hash table based on the Ethernet CRC. */ static const int multicast_filter_limit = 32; -static const struct { - const char *name; - const char *fw_name; -} rtl_chip_fw_infos[] = { - /* PCI-E devices. */ - [CFG_METHOD_2] = {"RTL8125A" }, - [CFG_METHOD_3] = {"RTL8125A", FIRMWARE_8125A_3}, - [CFG_METHOD_4] = {"RTL8125B", }, - [CFG_METHOD_5] = {"RTL8125B", FIRMWARE_8125B_2}, - [CFG_METHOD_DEFAULT] = {"Unknown", }, -}; - -#define _R(NAME,MAC,RCR,MASK,JumFrameSz) \ +#define _R(NAME,MAC,RCR,MASK, JumFrameSz) \ { .name = NAME, .mcfg = MAC, .RCR_Cfg = RCR, .RxConfigMask = MASK, .jumbo_frame_sz = JumFrameSz } static const struct { @@ -133,13 +117,13 @@ static const struct { _R("RTL8125B", CFG_METHOD_4, - BIT_30 | RxCfg_pause_slot_en | EnableInnerVlan | EnableOuterVlan | (RX_DMA_BURST << RxCfgDMAShift), + BIT_30 | EnableInnerVlan | EnableOuterVlan | (RX_DMA_BURST << RxCfgDMAShift), 0xff7e5880, Jumbo_Frame_9k), _R("RTL8125B", CFG_METHOD_5, - BIT_30 | RxCfg_pause_slot_en | EnableInnerVlan | EnableOuterVlan | (RX_DMA_BURST << RxCfgDMAShift), + BIT_30 | EnableInnerVlan | EnableOuterVlan | (RX_DMA_BURST << RxCfgDMAShift), 0xff7e5880, Jumbo_Frame_9k), @@ -151,7 +135,6 @@ static const struct { }; #undef _R - #ifndef PCI_VENDOR_ID_DLINK #define PCI_VENDOR_ID_DLINK 0x1186 #endif @@ -223,11 +206,6 @@ static int enable_ptp_master_mode = 1; #else static int enable_ptp_master_mode = 0; #endif -#ifdef DISABLE_PM_SUPPORT -static int disable_pm_support = 1; -#else -static int disable_pm_support = 0; -#endif MODULE_AUTHOR("Realtek and the Linux r8125 crew "); MODULE_DESCRIPTION("Realtek RTL8125 2.5Gigabit Ethernet driver"); @@ -277,29 +255,20 @@ MODULE_PARM_DESC(tx_no_close_enable, "Enable TX No Close."); module_param(enable_ptp_master_mode, int, 0); MODULE_PARM_DESC(enable_ptp_master_mode, "Enable PTP Master Mode."); -module_param(disable_pm_support, int, 0); -MODULE_PARM_DESC(disable_pm_support, "Disable PM support."); - #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) module_param_named(debug, debug.msg_enable, int, 0); MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 16=all)"); #endif//LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) MODULE_LICENSE("GPL"); -#ifdef ENABLE_USE_FIRMWARE_FILE -MODULE_FIRMWARE(FIRMWARE_8125A_3); -MODULE_FIRMWARE(FIRMWARE_8125B_2); -#endif MODULE_VERSION(RTL8125_VERSION); -/* #if LINUX_VERSION_CODE < KERNEL_VERSION(4,14,0) static void rtl8125_esd_timer(unsigned long __opaque); #else static void rtl8125_esd_timer(struct timer_list *t); #endif -*/ /* #if LINUX_VERSION_CODE < KERNEL_VERSION(4,14,0) static void rtl8125_link_timer(unsigned long __opaque); @@ -308,7 +277,8 @@ static void rtl8125_link_timer(struct timer_list *t); #endif */ -static netdev_tx_t rtl8125_start_xmit(struct sk_buff *skb, struct net_device *dev); +static int rtl8125_open(struct net_device *dev); +static int rtl8125_start_xmit(struct sk_buff *skb, struct net_device *dev); #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) static irqreturn_t rtl8125_interrupt(int irq, void *dev_instance, struct pt_regs *regs); #else @@ -319,6 +289,8 @@ static irqreturn_t rtl8125_interrupt_msix(int irq, void *dev_instance, struct pt #else static irqreturn_t rtl8125_interrupt_msix(int irq, void *dev_instance); #endif +void rtl8125_hw_config(struct net_device *dev); +static int rtl8125_close(struct net_device *dev); static void rtl8125_set_rx_mode(struct net_device *dev); #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0) static void rtl8125_tx_timeout(struct net_device *dev, unsigned int txqueue); @@ -338,8 +310,6 @@ static void rtl8125_desc_addr_fill(struct rtl8125_private *); static void rtl8125_tx_desc_init(struct rtl8125_private *tp); static void rtl8125_rx_desc_init(struct rtl8125_private *tp); -static u32 mdio_direct_read_phy_ocp(struct rtl8125_private *tp, u16 RegAddr); -static u16 rtl8125_get_hw_phy_mcu_code_ver(struct rtl8125_private *tp); static void rtl8125_phy_power_up(struct net_device *dev); static void rtl8125_phy_power_down(struct net_device *dev); static int rtl8125_set_speed(struct net_device *dev, u8 autoneg, u32 speed, u8 duplex, u32 adv); @@ -350,26 +320,6 @@ static bool rtl8125_clear_phy_mcu_patch_request(struct rtl8125_private *tp); static int rtl8125_poll(napi_ptr napi, napi_budget budget); #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) -static void rtl8125_reset_task(void *_data); -static void rtl8125_esd_task(void *_data); -static void rtl8125_linkchg_task(void *_data); -#else -static void rtl8125_reset_task(struct work_struct *work); -static void rtl8125_esd_task(struct work_struct *work); -static void rtl8125_linkchg_task(struct work_struct *work); -#endif -static void rtl8125_schedule_reset_work(struct rtl8125_private *tp); -static void rtl8125_schedule_esd_work(struct rtl8125_private *tp); -static void rtl8125_schedule_linkchg_work(struct rtl8125_private *tp); -static void rtl8125_init_all_schedule_work(struct rtl8125_private *tp); -static void rtl8125_cancel_all_schedule_work(struct rtl8125_private *tp); - -static inline struct device *tp_to_dev(struct rtl8125_private *tp) -{ - return &tp->pci_dev->dev; -} - #if ((LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0) && \ LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,00))) void ethtool_convert_legacy_u32_to_link_mode(unsigned long *dst, @@ -639,49 +589,21 @@ static inline struct mii_ioctl_data *if_mii(struct ifreq *rq) } #endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,7) -static u32 rtl8125_read_thermal_sensor(struct rtl8125_private *tp) -{ - u16 ts_digout; - - switch (tp->mcfg) { - case CFG_METHOD_4: - case CFG_METHOD_5: - ts_digout = mdio_direct_read_phy_ocp(tp, 0xBD84); - ts_digout &= 0x3ff; - break; - default: - ts_digout = 0xffff; - break; - } - - return ts_digout; -} - -int rtl8125_dump_tally_counter(struct rtl8125_private *tp, dma_addr_t paddr) -{ - u32 cmd; - u32 WaitCnt; - int retval = -1; - - RTL_W32(tp, CounterAddrHigh, (u64)paddr >> 32); - cmd = (u64)paddr & DMA_BIT_MASK(32); - RTL_W32(tp, CounterAddrLow, cmd); - RTL_W32(tp, CounterAddrLow, cmd | CounterDump); - - WaitCnt = 0; - while (RTL_R32(tp, CounterAddrLow) & CounterDump) { - udelay(10); - - WaitCnt++; - if (WaitCnt > 20) - break; - } - - if (WaitCnt <= 20) - retval = 0; - - return retval; -} +struct rtl8125_counters { + u64 tx_packets; + u64 rx_packets; + u64 tx_errors; + u32 rx_errors; + u16 rx_missed; + u16 align_errors; + u32 tx_one_collision; + u32 tx_multi_collision; + u64 rx_unicast; + u64 rx_broadcast; + u32 rx_multicast; + u16 tx_aborted; + u16 tx_underun; +}; #ifdef ENABLE_R8125_PROCFS /**************************************************************************** @@ -697,11 +619,11 @@ static int proc_get_driver_variable(struct seq_file *m, void *v) { struct net_device *dev = m->private; struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; seq_puts(m, "\nDump Driver Variable\n"); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); seq_puts(m, "Variable\tValue\n----------\t-----\n"); seq_printf(m, "MODULENAME\t%s\n", MODULENAME); seq_printf(m, "driver version\t%s\n", RTL8125_VERSION); @@ -778,7 +700,7 @@ static int proc_get_driver_variable(struct seq_file *m, void *v) seq_printf(m, "aspm\t0x%x\n", aspm); seq_printf(m, "s5wol\t0x%x\n", s5wol); seq_printf(m, "s5_keep_curr_mac\t0x%x\n", s5_keep_curr_mac); - seq_printf(m, "eee_enable\t0x%x\n", tp->eee.eee_enabled); + seq_printf(m, "eee_enable\t0x%x\n", tp->eee_enabled); seq_printf(m, "hwoptimize\t0x%lx\n", hwoptimize); seq_printf(m, "proc_init_num\t0x%x\n", proc_init_num); seq_printf(m, "s0_magic_packet\t0x%x\n", s0_magic_packet); @@ -788,6 +710,7 @@ static int proc_get_driver_variable(struct seq_file *m, void *v) seq_printf(m, "D0SpeedUpSpeed\t0x%x\n", tp->D0SpeedUpSpeed); seq_printf(m, "HwSuppCheckPhyDisableModeVer\t0x%x\n", tp->HwSuppCheckPhyDisableModeVer); seq_printf(m, "HwPkgDet\t0x%x\n", tp->HwPkgDet); + seq_printf(m, "HwSuppGigaForceMode\t0x%x\n", tp->HwSuppGigaForceMode); seq_printf(m, "HwSuppTxNoCloseVer\t0x%x\n", tp->HwSuppTxNoCloseVer); seq_printf(m, "EnableTxNoClose\t0x%x\n", tp->EnableTxNoClose); seq_printf(m, "NextHwDesCloPtr0\t0x%x\n", tp->tx_ring[0].NextHwDesCloPtr); @@ -805,9 +728,6 @@ static int proc_get_driver_variable(struct seq_file *m, void *v) seq_printf(m, "ptp_master_mode\t0x%x\n", tp->ptp_master_mode); seq_printf(m, "min_irq_nvecs\t0x%x\n", tp->min_irq_nvecs); seq_printf(m, "irq_nvecs\t0x%x\n", tp->irq_nvecs); - seq_printf(m, "ring_lib_enabled\t0x%x\n", tp->ring_lib_enabled); - seq_printf(m, "HwSuppIsrVer\t0x%x\n", tp->HwSuppIsrVer); - seq_printf(m, "HwCurrIsrVer\t0x%x\n", tp->HwCurrIsrVer); #ifdef ENABLE_PTP_SUPPORT seq_printf(m, "tx_hwtstamp_timeouts\t0x%x\n", tp->tx_hwtstamp_timeouts); seq_printf(m, "tx_hwtstamp_skipped\t0x%x\n", tp->tx_hwtstamp_skipped); @@ -818,8 +738,7 @@ static int proc_get_driver_variable(struct seq_file *m, void *v) seq_printf(m, "perm_addr\t%pM\n", dev->perm_addr); #endif seq_printf(m, "dev_addr\t%pM\n", dev->dev_addr); - - rtnl_unlock(); + spin_unlock_irqrestore(&tp->lock, flags); seq_putc(m, '\n'); return 0; @@ -831,67 +750,52 @@ static int proc_get_tally_counter(struct seq_file *m, void *v) struct rtl8125_private *tp = netdev_priv(dev); struct rtl8125_counters *counters; dma_addr_t paddr; + u32 cmd; + u32 WaitCnt; + unsigned long flags; seq_puts(m, "\nDump Tally Counter\n"); - rtnl_lock(); + //ASSERT_RTNL(); counters = tp->tally_vaddr; paddr = tp->tally_paddr; if (!counters) { seq_puts(m, "\nDump Tally Counter Fail\n"); - goto out_unlock; + return 0; } - rtl8125_dump_tally_counter(tp, paddr); + spin_lock_irqsave(&tp->lock, flags); + RTL_W32(tp, CounterAddrHigh, (u64)paddr >> 32); + cmd = (u64)paddr & DMA_BIT_MASK(32); + RTL_W32(tp, CounterAddrLow, cmd); + RTL_W32(tp, CounterAddrLow, cmd | CounterDump); + + WaitCnt = 0; + while (RTL_R32(tp, CounterAddrLow) & CounterDump) { + udelay(10); + + WaitCnt++; + if (WaitCnt > 20) + break; + } + spin_unlock_irqrestore(&tp->lock, flags); seq_puts(m, "Statistics\tValue\n----------\t-----\n"); seq_printf(m, "tx_packets\t%lld\n", le64_to_cpu(counters->tx_packets)); seq_printf(m, "rx_packets\t%lld\n", le64_to_cpu(counters->rx_packets)); seq_printf(m, "tx_errors\t%lld\n", le64_to_cpu(counters->tx_errors)); - seq_printf(m, "rx_errors\t%d\n", le32_to_cpu(counters->rx_errors)); - seq_printf(m, "rx_missed\t%d\n", le16_to_cpu(counters->rx_missed)); - seq_printf(m, "align_errors\t%d\n", le16_to_cpu(counters->align_errors)); - seq_printf(m, "tx_one_collision\t%d\n", le32_to_cpu(counters->tx_one_collision)); - seq_printf(m, "tx_multi_collision\t%d\n", le32_to_cpu(counters->tx_multi_collision)); + seq_printf(m, "rx_missed\t%lld\n", le64_to_cpu(counters->rx_missed)); + seq_printf(m, "align_errors\t%lld\n", le64_to_cpu(counters->align_errors)); + seq_printf(m, "tx_one_collision\t%lld\n", le64_to_cpu(counters->tx_one_collision)); + seq_printf(m, "tx_multi_collision\t%lld\n", le64_to_cpu(counters->tx_multi_collision)); seq_printf(m, "rx_unicast\t%lld\n", le64_to_cpu(counters->rx_unicast)); seq_printf(m, "rx_broadcast\t%lld\n", le64_to_cpu(counters->rx_broadcast)); - seq_printf(m, "rx_multicast\t%d\n", le32_to_cpu(counters->rx_multicast)); - seq_printf(m, "tx_aborted\t%d\n", le16_to_cpu(counters->tx_aborted)); - seq_printf(m, "tx_underrun\t%d\n", le16_to_cpu(counters->tx_underrun)); - - seq_printf(m, "tx_octets\t%lld\n", le64_to_cpu(counters->tx_octets)); - seq_printf(m, "rx_octets\t%lld\n", le64_to_cpu(counters->rx_octets)); - seq_printf(m, "rx_multicast64\t%lld\n", le64_to_cpu(counters->rx_multicast64)); - seq_printf(m, "tx_unicast64\t%lld\n", le64_to_cpu(counters->tx_unicast64)); - seq_printf(m, "tx_broadcast64\t%lld\n", le64_to_cpu(counters->tx_broadcast64)); - seq_printf(m, "tx_multicast64\t%lld\n", le64_to_cpu(counters->tx_multicast64)); - seq_printf(m, "tx_pause_on\t%d\n", le32_to_cpu(counters->tx_pause_on)); - seq_printf(m, "tx_pause_off\t%d\n", le32_to_cpu(counters->tx_pause_off)); - seq_printf(m, "tx_pause_all\t%d\n", le32_to_cpu(counters->tx_pause_all)); - seq_printf(m, "tx_deferred\t%d\n", le32_to_cpu(counters->tx_deferred)); - seq_printf(m, "tx_late_collision\t%d\n", le32_to_cpu(counters->tx_late_collision)); - seq_printf(m, "tx_all_collision\t%d\n", le32_to_cpu(counters->tx_all_collision)); - seq_printf(m, "tx_aborted32\t%d\n", le32_to_cpu(counters->tx_aborted32)); - seq_printf(m, "align_errors32\t%d\n", le32_to_cpu(counters->align_errors32)); - seq_printf(m, "rx_frame_too_long\t%d\n", le32_to_cpu(counters->rx_frame_too_long)); - seq_printf(m, "rx_runt\t%d\n", le32_to_cpu(counters->rx_runt)); - seq_printf(m, "rx_pause_on\t%d\n", le32_to_cpu(counters->rx_pause_on)); - seq_printf(m, "rx_pause_off\t%d\n", le32_to_cpu(counters->rx_pause_off)); - seq_printf(m, "rx_pause_all\t%d\n", le32_to_cpu(counters->rx_pause_all)); - seq_printf(m, "rx_unknown_opcode\t%d\n", le32_to_cpu(counters->rx_unknown_opcode)); - seq_printf(m, "rx_mac_error\t%d\n", le32_to_cpu(counters->rx_mac_error)); - seq_printf(m, "tx_underrun32\t%d\n", le32_to_cpu(counters->tx_underrun32)); - seq_printf(m, "rx_mac_missed\t%d\n", le32_to_cpu(counters->rx_mac_missed)); - seq_printf(m, "rx_tcam_dropped\t%d\n", le32_to_cpu(counters->rx_tcam_dropped)); - seq_printf(m, "tdu\t%d\n", le32_to_cpu(counters->tdu)); - seq_printf(m, "rdu\t%d\n", le32_to_cpu(counters->rdu)); + seq_printf(m, "rx_multicast\t%lld\n", le64_to_cpu(counters->rx_multicast)); + seq_printf(m, "tx_aborted\t%lld\n", le64_to_cpu(counters->tx_aborted)); + seq_printf(m, "tx_underun\t%lld\n", le64_to_cpu(counters->tx_underun)); seq_putc(m, '\n'); - -out_unlock: - rtnl_unlock(); - return 0; } @@ -902,12 +806,12 @@ static int proc_get_registers(struct seq_file *m, void *v) u8 byte_rd; struct rtl8125_private *tp = netdev_priv(dev); void __iomem *ioaddr = tp->mmio_addr; + unsigned long flags; seq_puts(m, "\nDump MAC Registers\n"); seq_puts(m, "Offset\tValue\n------\t-----\n"); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); for (n = 0; n < max;) { seq_printf(m, "\n0x%02x:\t", n); @@ -916,8 +820,7 @@ static int proc_get_registers(struct seq_file *m, void *v) seq_printf(m, "%02x ", byte_rd); } } - - rtnl_unlock(); + spin_unlock_irqrestore(&tp->lock, flags); seq_putc(m, '\n'); return 0; @@ -929,12 +832,12 @@ static int proc_get_pcie_phy(struct seq_file *m, void *v) int i, n, max = R8125_EPHY_REGS_SIZE/2; u16 word_rd; struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; seq_puts(m, "\nDump PCIE PHY\n"); seq_puts(m, "\nOffset\tValue\n------\t-----\n "); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); for (n = 0; n < max;) { seq_printf(m, "\n0x%02x:\t", n); @@ -943,8 +846,7 @@ static int proc_get_pcie_phy(struct seq_file *m, void *v) seq_printf(m, "%04x ", word_rd); } } - - rtnl_unlock(); + spin_unlock_irqrestore(&tp->lock, flags); seq_putc(m, '\n'); return 0; @@ -956,12 +858,12 @@ static int proc_get_eth_phy(struct seq_file *m, void *v) int i, n, max = R8125_PHY_REGS_SIZE/2; u16 word_rd; struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; seq_puts(m, "\nDump Ethernet PHY\n"); seq_puts(m, "\nOffset\tValue\n------\t-----\n "); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); seq_puts(m, "\n####################page 0##################\n "); rtl8125_mdio_write(tp, 0x1f, 0x0000); for (n = 0; n < max;) { @@ -972,8 +874,7 @@ static int proc_get_eth_phy(struct seq_file *m, void *v) seq_printf(m, "%04x ", word_rd); } } - - rtnl_unlock(); + spin_unlock_irqrestore(&tp->lock, flags); seq_putc(m, '\n'); return 0; @@ -985,12 +886,12 @@ static int proc_get_extended_registers(struct seq_file *m, void *v) int i, n, max = R8125_ERI_REGS_SIZE; u32 dword_rd; struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; seq_puts(m, "\nDump Extended Registers\n"); seq_puts(m, "\nOffset\tValue\n------\t-----\n "); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); for (n = 0; n < max;) { seq_printf(m, "\n0x%02x:\t", n); @@ -999,8 +900,7 @@ static int proc_get_extended_registers(struct seq_file *m, void *v) seq_printf(m, "%08x ", dword_rd); } } - - rtnl_unlock(); + spin_unlock_irqrestore(&tp->lock, flags); seq_putc(m, '\n'); return 0; @@ -1012,12 +912,12 @@ static int proc_get_pci_registers(struct seq_file *m, void *v) int i, n, max = R8125_PCI_REGS_SIZE; u32 dword_rd; struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; seq_puts(m, "\nDump PCI Registers\n"); seq_puts(m, "\nOffset\tValue\n------\t-----\n "); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); for (n = 0; n < max;) { seq_printf(m, "\n0x%03x:\t", n); @@ -1034,44 +934,7 @@ static int proc_get_pci_registers(struct seq_file *m, void *v) pci_read_config_dword(tp->pci_dev, n, &dword_rd); seq_printf(m, "\n0x%03x:\t%08x ", n, dword_rd); - rtnl_unlock(); - - seq_putc(m, '\n'); - return 0; -} - -static int proc_get_temperature(struct seq_file *m, void *v) -{ - struct net_device *dev = m->private; - struct rtl8125_private *tp = netdev_priv(dev); - u16 ts_digout, tj, fah; - - switch (tp->mcfg) { - case CFG_METHOD_4: - case CFG_METHOD_5: - seq_puts(m, "\nChip Temperature\n"); - break; - default: - seq_puts(m, "\nThis Chip Does Not Support Dump Temperature\n"); - break; - } - - rtnl_lock(); - ts_digout = rtl8125_read_thermal_sensor(tp); - rtnl_unlock(); - - tj = ts_digout / 2; - if (ts_digout <= 512) { - tj = ts_digout / 2; - seq_printf(m, "Cel:%d\n", tj); - fah = tj * (9/5) + 32; - seq_printf(m, "Fah:%d\n", fah); - } else { - tj = (512 - ((ts_digout / 2) - 512)) / 2; - seq_printf(m, "Cel:-%d\n", tj); - fah = tj * (9/5) + 32; - seq_printf(m, "Fah:-%d\n", fah); - } + spin_unlock_irqrestore(&tp->lock, flags); seq_putc(m, '\n'); return 0; @@ -1084,13 +947,13 @@ static int proc_get_driver_variable(char *page, char **start, { struct net_device *dev = data; struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; int len = 0; len += snprintf(page + len, count - len, "\nDump Driver Driver\n"); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); len += snprintf(page + len, count - len, "Variable\tValue\n----------\t-----\n"); @@ -1180,6 +1043,7 @@ static int proc_get_driver_variable(char *page, char **start, "D0SpeedUpSpeed\t0x%x\n" "HwSuppCheckPhyDisableModeVer\t0x%x\n" "HwPkgDet\t0x%x\n" + "HwSuppGigaForceMode\t0x%x\n" "HwSuppTxNoCloseVer\t0x%x\n" "EnableTxNoClose\t0x%x\n" "NextHwDesCloPtr0\t0x%x\n" @@ -1197,9 +1061,6 @@ static int proc_get_driver_variable(char *page, char **start, "ptp_master_mode\t0x%x\n" "min_irq_nvecs\t0x%x\n" "irq_nvecs\t0x%x\n" - "ring_lib_enabled\t0x%x\n" - "HwSuppIsrVer\t0x%x\n" - "HwCurrIsrVer\t0x%x\n" #ifdef ENABLE_PTP_SUPPORT "tx_hwtstamp_timeouts\t0x%x\n" "tx_hwtstamp_skipped\t0x%x\n" @@ -1285,7 +1146,7 @@ static int proc_get_driver_variable(char *page, char **start, aspm, s5wol, s5_keep_curr_mac, - tp->eee.eee_enabled, + tp->eee_enabled, hwoptimize, proc_init_num, s0_magic_packet, @@ -1295,6 +1156,7 @@ static int proc_get_driver_variable(char *page, char **start, tp->D0SpeedUpSpeed, tp->HwSuppCheckPhyDisableModeVer, tp->HwPkgDet, + tp->HwSuppGigaForceMode, tp->HwSuppTxNoCloseVer, tp->EnableTxNoClose, tp->tx_ring[0].NextHwDesCloPtr, @@ -1312,9 +1174,6 @@ static int proc_get_driver_variable(char *page, char **start, tp->ptp_master_mode, tp->min_irq_nvecs, tp->irq_nvecs, - tp->ring_lib_enabled, - tp->HwSuppIsrVer, - tp->HwCurrIsrVer, #ifdef ENABLE_PTP_SUPPORT tp->tx_hwtstamp_timeouts, tp->tx_hwtstamp_skipped, @@ -1326,8 +1185,7 @@ static int proc_get_driver_variable(char *page, char **start, #endif dev->dev_addr ); - - rtnl_unlock(); + spin_unlock_irqrestore(&tp->lock, flags); len += snprintf(page + len, count - len, "\n"); @@ -1343,22 +1201,39 @@ static int proc_get_tally_counter(char *page, char **start, struct rtl8125_private *tp = netdev_priv(dev); struct rtl8125_counters *counters; dma_addr_t paddr; + u32 cmd; + u32 WaitCnt; + unsigned long flags; int len = 0; len += snprintf(page + len, count - len, "\nDump Tally Counter\n"); - rtnl_lock(); + //ASSERT_RTNL(); counters = tp->tally_vaddr; paddr = tp->tally_paddr; if (!counters) { len += snprintf(page + len, count - len, "\nDump Tally Counter Fail\n"); - goto out_unlock; + goto out; } - rtl8125_dump_tally_counter(tp, paddr); + spin_lock_irqsave(&tp->lock, flags); + RTL_W32(tp, CounterAddrHigh, (u64)paddr >> 32); + cmd = (u64)paddr & DMA_BIT_MASK(32); + RTL_W32(tp, CounterAddrLow, cmd); + RTL_W32(tp, CounterAddrLow, cmd | CounterDump); + + WaitCnt = 0; + while (RTL_R32(tp, CounterAddrLow) & CounterDump) { + udelay(10); + + WaitCnt++; + if (WaitCnt > 20) + break; + } + spin_unlock_irqrestore(&tp->lock, flags); len += snprintf(page + len, count - len, "Statistics\tValue\n----------\t-----\n"); @@ -1367,89 +1242,31 @@ static int proc_get_tally_counter(char *page, char **start, "tx_packets\t%lld\n" "rx_packets\t%lld\n" "tx_errors\t%lld\n" - "rx_errors\t%d\n" - "rx_missed\t%d\n" - "align_errors\t%d\n" - "tx_one_collision\t%d\n" - "tx_multi_collision\t%d\n" + "rx_missed\t%lld\n" + "align_errors\t%lld\n" + "tx_one_collision\t%lld\n" + "tx_multi_collision\t%lld\n" "rx_unicast\t%lld\n" "rx_broadcast\t%lld\n" - "rx_multicast\t%d\n" - "tx_aborted\t%d\n" - "tx_underrun\t%d\n", - - "tx_octets\t%lld\n", - "rx_octets\t%lld\n", - "rx_multicast64\t%lld\n", - "tx_unicast64\t%lld\n", - "tx_broadcast64\t%lld\n", - "tx_multicast64\t%lld\n", - "tx_pause_on\t%d\n", - "tx_pause_off\t%d\n", - "tx_pause_all\t%d\n", - "tx_deferred\t%d\n", - "tx_late_collision\t%d\n", - "tx_all_collision\t%d\n", - "tx_aborted32\t%d\n", - "align_errors32\t%d\n", - "rx_frame_too_long\t%d\n", - "rx_runt\t%d\n", - "rx_pause_on\t%d\n", - "rx_pause_off\t%d\n", - "rx_pause_all\t%d\n", - "rx_unknown_opcode\t%d\n", - "rx_mac_error\t%d\n", - "tx_underrun32\t%d\n", - "rx_mac_missed\t%d\n", - "rx_tcam_dropped\t%d\n", - "tdu\t%d\n", - "rdu\t%d\n", + "rx_multicast\t%lld\n" + "tx_aborted\t%lld\n" + "tx_underun\t%lld\n", le64_to_cpu(counters->tx_packets), le64_to_cpu(counters->rx_packets), le64_to_cpu(counters->tx_errors), - le32_to_cpu(counters->rx_errors), - le16_to_cpu(counters->rx_missed), - le16_to_cpu(counters->align_errors), - le32_to_cpu(counters->tx_one_collision), - le32_to_cpu(counters->tx_multi_collision), + le64_to_cpu(counters->rx_missed), + le64_to_cpu(counters->align_errors), + le64_to_cpu(counters->tx_one_collision), + le64_to_cpu(counters->tx_multi_collision), le64_to_cpu(counters->rx_unicast), le64_to_cpu(counters->rx_broadcast), - le32_to_cpu(counters->rx_multicast), - le16_to_cpu(counters->tx_aborted), - le16_to_cpu(counters->tx_underrun), - - le64_to_cpu(counters->tx_octets), - le64_to_cpu(counters->rx_octets), - le64_to_cpu(counters->rx_multicast64), - le64_to_cpu(counters->tx_unicast64), - le64_to_cpu(counters->tx_broadcast64), - le64_to_cpu(counters->tx_multicast64), - le32_to_cpu(counters->tx_pause_on), - le32_to_cpu(counters->tx_pause_off), - le32_to_cpu(counters->tx_pause_all), - le32_to_cpu(counters->tx_deferred), - le32_to_cpu(counters->tx_late_collision), - le32_to_cpu(counters->tx_all_collision), - le32_to_cpu(counters->tx_aborted32), - le32_to_cpu(counters->align_errors32), - le32_to_cpu(counters->rx_frame_too_long), - le32_to_cpu(counters->rx_runt), - le32_to_cpu(counters->rx_pause_on), - le32_to_cpu(counters->rx_pause_off), - le32_to_cpu(counters->rx_pause_all), - le32_to_cpu(counters->rx_unknown_opcode), - le32_to_cpu(counters->rx_mac_error), - le32_to_cpu(counters->tx_underrun32), - le32_to_cpu(counters->rx_mac_missed), - le32_to_cpu(counters->rx_tcam_dropped), - le32_to_cpu(counters->tdu), - le32_to_cpu(counters->rdu), + le64_to_cpu(counters->rx_multicast), + le64_to_cpu(counters->tx_aborted), + le64_to_cpu(counters->tx_underun) ); len += snprintf(page + len, count - len, "\n"); -out_unlock: - rtnl_unlock(); - +out: *eof = 1; return len; } @@ -1463,14 +1280,14 @@ static int proc_get_registers(char *page, char **start, u8 byte_rd; struct rtl8125_private *tp = netdev_priv(dev); void __iomem *ioaddr = tp->mmio_addr; + unsigned long flags; int len = 0; len += snprintf(page + len, count - len, "\nDump MAC Registers\n" "Offset\tValue\n------\t-----\n"); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); for (n = 0; n < max;) { len += snprintf(page + len, count - len, "\n0x%02x:\t", @@ -1483,8 +1300,7 @@ static int proc_get_registers(char *page, char **start, byte_rd); } } - - rtnl_unlock(); + spin_unlock_irqrestore(&tp->lock, flags); len += snprintf(page + len, count - len, "\n"); @@ -1500,14 +1316,14 @@ static int proc_get_pcie_phy(char *page, char **start, int i, n, max = R8125_EPHY_REGS_SIZE/2; u16 word_rd; struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; int len = 0; len += snprintf(page + len, count - len, "\nDump PCIE PHY\n" "Offset\tValue\n------\t-----\n"); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); for (n = 0; n < max;) { len += snprintf(page + len, count - len, "\n0x%02x:\t", @@ -1520,8 +1336,7 @@ static int proc_get_pcie_phy(char *page, char **start, word_rd); } } - - rtnl_unlock(); + spin_unlock_irqrestore(&tp->lock, flags); len += snprintf(page + len, count - len, "\n"); @@ -1537,14 +1352,14 @@ static int proc_get_eth_phy(char *page, char **start, int i, n, max = R8125_PHY_REGS_SIZE/2; u16 word_rd; struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; int len = 0; len += snprintf(page + len, count - len, "\nDump Ethernet PHY\n" "Offset\tValue\n------\t-----\n"); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); len += snprintf(page + len, count - len, "\n####################page 0##################\n"); rtl8125_mdio_write(tp, 0x1f, 0x0000); @@ -1560,8 +1375,7 @@ static int proc_get_eth_phy(char *page, char **start, word_rd); } } - - rtnl_unlock(); + spin_unlock_irqrestore(&tp->lock, flags); len += snprintf(page + len, count - len, "\n"); @@ -1577,14 +1391,14 @@ static int proc_get_extended_registers(char *page, char **start, int i, n, max = R8125_ERI_REGS_SIZE; u32 dword_rd; struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; int len = 0; len += snprintf(page + len, count - len, "\nDump Extended Registers\n" "Offset\tValue\n------\t-----\n"); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); for (n = 0; n < max;) { len += snprintf(page + len, count - len, "\n0x%02x:\t", @@ -1597,11 +1411,10 @@ static int proc_get_extended_registers(char *page, char **start, dword_rd); } } - - rtnl_unlock(); + spin_unlock_irqrestore(&tp->lock, flags); len += snprintf(page + len, count - len, "\n"); - +out: *eof = 1; return len; } @@ -1614,14 +1427,14 @@ static int proc_get_pci_registers(char *page, char **start, int i, n, max = R8125_PCI_REGS_SIZE; u32 dword_rd; struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; int len = 0; len += snprintf(page + len, count - len, "\nDump PCI Registers\n" "Offset\tValue\n------\t-----\n"); - rtnl_lock(); - + spin_lock_irqsave(&tp->lock, flags); for (n = 0; n < max;) { len += snprintf(page + len, count - len, "\n0x%03x:\t", @@ -1647,61 +1460,7 @@ static int proc_get_pci_registers(char *page, char **start, "\n0x%03x:\t%08x ", n, dword_rd); - - rtnl_unlock(); - - len += snprintf(page + len, count - len, "\n"); - - *eof = 1; - return len; -} - -static int proc_get_temperature(char *page, char **start, - off_t offset, int count, - int *eof, void *data) -{ - struct net_device *dev = data; - struct rtl8125_private *tp = netdev_priv(dev); - u16 ts_digout, tj, fah; - int len = 0; - - switch (tp->mcfg) { - case CFG_METHOD_4: - case CFG_METHOD_5: - len += snprintf(page + len, count - len, - "\nChip Temperature\n"); - break; - default: - len += snprintf(page + len, count - len, - "\nThis Chip Does Not Support Dump Temperature\n"); - break; - } - - rtnl_lock(); - ts_digout = rtl8125_read_thermal_sensor(tp); - rtnl_unlock(); - - tj = ts_digout / 2; - if (ts_digout <= 512) { - tj = ts_digout / 2; - len += snprintf(page + len, count - len, - "Cel:%d\n", - tj); - fah = tj * (9/5) + 32; - len += snprintf(page + len, count - len, - "Fah:%d\n", - fah); - - } else { - tj = (512 - ((ts_digout / 2) - 512)) / 2; - len += snprintf(page + len, count - len, - "Cel:-%d\n", - tj); - fah = tj * (9/5) + 32; - len += snprintf(page + len, count - len, - "Fah:-%d\n", - fah); - } + spin_unlock_irqrestore(&tp->lock, flags); len += snprintf(page + len, count - len, "\n"); @@ -1771,7 +1530,6 @@ static const struct rtl8125_proc_file rtl8125_proc_files[] = { { "eth_phy", &proc_get_eth_phy }, { "ext_regs", &proc_get_extended_registers }, { "pci_regs", &proc_get_pci_registers }, - { "temp", &proc_get_temperature }, { "", NULL } }; @@ -1939,8 +1697,8 @@ static void rtl8125_mdio_real_write_phy_ocp(struct rtl8125_private *tp, } static void mdio_real_write(struct rtl8125_private *tp, - u16 RegAddr, - u16 value) + u32 RegAddr, + u32 value) { if (RegAddr == 0x1F) { tp->cur_page = value; @@ -1950,8 +1708,8 @@ static void mdio_real_write(struct rtl8125_private *tp, } void rtl8125_mdio_write(struct rtl8125_private *tp, - u16 RegAddr, - u16 value) + u32 RegAddr, + u32 value) { if (tp->rtk_enable_diag) return; @@ -2029,13 +1787,13 @@ static u32 rtl8125_mdio_real_read_phy_ocp(struct rtl8125_private *tp, } static u32 mdio_real_read(struct rtl8125_private *tp, - u16 RegAddr) + u32 RegAddr) { return rtl8125_mdio_real_read_phy_ocp(tp, tp->cur_page, RegAddr); } u32 rtl8125_mdio_read(struct rtl8125_private *tp, - u16 RegAddr) + u32 RegAddr) { if (tp->rtk_enable_diag) return 0xffffffff; @@ -2126,7 +1884,7 @@ void rtl8125_mac_ocp_write(struct rtl8125_private *tp, u16 reg_addr, u16 value) RTL_W32(tp, MACOCP, data32); } -u32 rtl8125_mac_ocp_read(struct rtl8125_private *tp, u16 reg_addr) +u16 rtl8125_mac_ocp_read(struct rtl8125_private *tp, u16 reg_addr) { u32 data32; u16 data16 = 0; @@ -2144,23 +1902,6 @@ u32 rtl8125_mac_ocp_read(struct rtl8125_private *tp, u16 reg_addr) return data16; } -#ifdef ENABLE_USE_FIRMWARE_FILE -static void mac_mcu_write(struct rtl8125_private *tp, u16 reg, u16 value) -{ - if (reg == 0x1f) { - tp->ocp_base = value << 4; - return; - } - - rtl8125_mac_ocp_write(tp, tp->ocp_base + reg, value); -} - -static u32 mac_mcu_read(struct rtl8125_private *tp, u16 reg) -{ - return rtl8125_mac_ocp_read(tp, tp->ocp_base + reg); -} -#endif - static void ClearAndSetMcuAccessRegBit( struct rtl8125_private *tp, @@ -2868,28 +2609,34 @@ rtl8125_is_in_phy_disable_mode(struct net_device *dev) return in_phy_disable_mode; } -static bool -rtl8125_stop_all_request(struct net_device *dev) +static void +rtl8125_enable_phy_disable_mode(struct net_device *dev) { struct rtl8125_private *tp = netdev_priv(dev); - int i; - RTL_W8(tp, ChipCmd, RTL_R8(tp, ChipCmd) | StopReq); - - switch (tp->mcfg) { - case CFG_METHOD_2: - case CFG_METHOD_3: - for (i = 0; i < 20; i++) { - udelay(10); - if (!(RTL_R8(tp, ChipCmd) & StopReq)) break; - } - - if (i == 20) - return 0; + switch (tp->HwSuppCheckPhyDisableModeVer) { + case 3: + RTL_W8(tp, 0xF2, RTL_R8(tp, 0xF2) | BIT_5); break; } - return 1; + dprintk("enable phy disable mode.\n"); +} + +static void +rtl8125_disable_phy_disable_mode(struct net_device *dev) +{ + struct rtl8125_private *tp = netdev_priv(dev); + + switch (tp->HwSuppCheckPhyDisableModeVer) { + case 3: + RTL_W8(tp, 0xF2, RTL_R8(tp, 0xF2) & ~BIT_5); + break; + } + + mdelay(1); + + dprintk("disable phy disable mode.\n"); } void @@ -2898,13 +2645,6 @@ rtl8125_wait_txrx_fifo_empty(struct net_device *dev) struct rtl8125_private *tp = netdev_priv(dev); int i; - switch (tp->mcfg) { - case CFG_METHOD_4: - case CFG_METHOD_5: - rtl8125_stop_all_request(dev); - break; - } - switch (tp->mcfg) { case CFG_METHOD_2: case CFG_METHOD_3: @@ -2914,6 +2654,7 @@ rtl8125_wait_txrx_fifo_empty(struct net_device *dev) udelay(50); if ((RTL_R8(tp, MCUCmd_reg) & (Txfifo_empty | Rxfifo_empty)) == (Txfifo_empty | Rxfifo_empty)) break; + } break; } @@ -2925,6 +2666,7 @@ rtl8125_wait_txrx_fifo_empty(struct net_device *dev) udelay(50); if ((RTL_R16(tp, IntrMitigate) & (BIT_0 | BIT_1 | BIT_8)) == (BIT_0 | BIT_1 | BIT_8)) break; + } break; } @@ -2953,7 +2695,7 @@ rtl8125_disable_dash2_interrupt(struct rtl8125_private *tp) } #endif -void +static inline void rtl8125_enable_hw_linkchg_interrupt(struct rtl8125_private *tp) { switch (tp->HwCurrIsrVer) { @@ -2961,7 +2703,7 @@ rtl8125_enable_hw_linkchg_interrupt(struct rtl8125_private *tp) RTL_W32(tp, IMR_V2_SET_REG_8125, ISRIMR_V2_LINKCHG); break; case 1: - RTL_W32(tp, tp->imr_reg[0], LinkChg | RTL_R32(tp, tp->imr_reg[0])); + RTL_W32(tp, tp->imr_reg[0], LinkChg); break; } @@ -3089,11 +2831,17 @@ rtl8125_nic_reset(struct net_device *dev) rtl8125_enable_rxdvgate(dev); - rtl8125_stop_all_request(dev); - rtl8125_wait_txrx_fifo_empty(dev); - mdelay(2); + switch (tp->mcfg) { + case CFG_METHOD_2: + case CFG_METHOD_3: + case CFG_METHOD_4: + case CFG_METHOD_5: + default: + mdelay(2); + break; + } /* Soft reset the chip. */ RTL_W8(tp, ChipCmd, CmdReset); @@ -3220,26 +2968,11 @@ rtl8125_xmii_link_ok(struct net_device *dev) return retval; } -static int -rtl8125_wait_phy_reset_complete(struct rtl8125_private *tp) -{ - int i, val; - - for (i = 0; i < 2500; i++) { - val = rtl8125_mdio_read(tp, MII_BMCR) & BMCR_RESET; - if (!val) - return 0; - - mdelay(1); - } - - return -1; -} - static void rtl8125_xmii_reset_enable(struct net_device *dev) { struct rtl8125_private *tp = netdev_priv(dev); + int i, val = 0; if (rtl8125_is_in_phy_disable_mode(dev)) { return; @@ -3254,7 +2987,15 @@ rtl8125_xmii_reset_enable(struct net_device *dev) mdio_direct_write_phy_ocp(tp, 0xA5D4, mdio_direct_read_phy_ocp(tp, 0xA5D4) & ~(RTK_ADVERTISE_2500FULL)); rtl8125_mdio_write(tp, MII_BMCR, BMCR_RESET | BMCR_ANENABLE); - if (rtl8125_wait_phy_reset_complete(tp) == 0) return; + for (i = 0; i < 2500; i++) { + val = rtl8125_mdio_read(tp, MII_BMCR) & BMCR_RESET; + + if (!val) { + return; + } + + mdelay(1); + } if (netif_msg_link(tp)) printk(KERN_ERR "%s: PHY reset failed.\n", dev->name); @@ -3265,7 +3006,7 @@ rtl8125_init_ring_indexes(struct rtl8125_private *tp) { int i; - for (i = 0; i < tp->HwSuppNumTxQueues; i++) { + for (i = 0; i < tp->num_tx_rings; i++) { struct rtl8125_tx_ring *ring = &tp->tx_ring[i]; ring->dirty_tx = ring->cur_tx = 0; ring->NextHwDesCloPtr = 0; @@ -3274,7 +3015,7 @@ rtl8125_init_ring_indexes(struct rtl8125_private *tp) ring->priv = tp; } - for (i = 0; i < tp->HwSuppNumRxQueues; i++) { + for (i = 0; i < tp->num_rx_rings; i++) { struct rtl8125_rx_ring *ring = &tp->rx_ring[i]; ring->dirty_rx = ring->cur_rx = 0; ring->index = i; @@ -3341,7 +3082,7 @@ static int rtl8125_enable_eee_plus(struct rtl8125_private *tp) break; default: -// dev_printk(KERN_DEBUG, tp_to_dev(tp), "Not Support EEEPlus\n"); +// dev_printk(KERN_DEBUG, &tp->pci_dev->dev, "Not Support EEEPlus\n"); ret = -EOPNOTSUPP; break; } @@ -3363,7 +3104,7 @@ static int rtl8125_disable_eee_plus(struct rtl8125_private *tp) break; default: -// dev_printk(KERN_DEBUG, tp_to_dev(tp), "Not Support EEEPlus\n"); +// dev_printk(KERN_DEBUG, &tp->pci_dev->dev, "Not Support EEEPlus\n"); ret = -EOPNOTSUPP; break; } @@ -3371,6 +3112,26 @@ static int rtl8125_disable_eee_plus(struct rtl8125_private *tp) return ret; } +static void +rtl8125_wakeup_all_tx_queue(struct net_device *dev) +{ + struct rtl8125_private *tp = netdev_priv(dev); + int i; + + for (i=0; inum_tx_rings; i++) + netif_start_subqueue(dev, i); +} + +static void +rtl8125_stop_all_tx_queue(struct net_device *dev) +{ + struct rtl8125_private *tp = netdev_priv(dev); + int i; + + for (i=0; inum_tx_rings; i++) + netif_stop_subqueue(dev, i); +} + static void rtl8125_link_on_patch(struct net_device *dev) { @@ -3397,12 +3158,10 @@ rtl8125_link_on_patch(struct net_device *dev) netif_carrier_on(dev); - netif_tx_wake_all_queues(dev); + rtl8125_wakeup_all_tx_queue(dev); - tp->phy_reg_aner = rtl8125_mdio_read(tp, MII_EXPANSION); + rtl8125_mdio_write(tp, 0x1F, 0x0000); tp->phy_reg_anlpar = rtl8125_mdio_read(tp, MII_LPA); - tp->phy_reg_gbsr = rtl8125_mdio_read(tp, MII_STAT1000); - tp->phy_reg_status_2500 = mdio_direct_read_phy_ocp(tp, 0xA5D6); } static void @@ -3410,10 +3169,7 @@ rtl8125_link_down_patch(struct net_device *dev) { struct rtl8125_private *tp = netdev_priv(dev); - tp->phy_reg_aner = 0; tp->phy_reg_anlpar = 0; - tp->phy_reg_gbsr = 0; - tp->phy_reg_status_2500 = 0; if (tp->mcfg == CFG_METHOD_2 || tp->mcfg == CFG_METHOD_3 || @@ -3421,7 +3177,7 @@ rtl8125_link_down_patch(struct net_device *dev) tp->mcfg == CFG_METHOD_5) rtl8125_disable_eee_plus(tp); - netif_tx_stop_all_queues(dev); + rtl8125_stop_all_tx_queue(dev); netif_carrier_off(dev); @@ -3445,33 +3201,31 @@ rtl8125_link_down_patch(struct net_device *dev) } static void -_rtl8125_check_link_status(struct net_device *dev) +rtl8125_check_link_status(struct net_device *dev, bool force_set) { struct rtl8125_private *tp = netdev_priv(dev); + int link_status_on; - if (tp->link_ok(dev)) { - rtl8125_link_on_patch(dev); + link_status_on = tp->link_ok(dev); - if (netif_msg_ifup(tp)) - printk(KERN_INFO PFX "%s: link up\n", dev->name); - } else { - if (netif_msg_ifdown(tp)) - printk(KERN_INFO PFX "%s: link down\n", dev->name); + if (force_set || (netif_carrier_ok(dev) != link_status_on)) { + if (link_status_on) { + rtl8125_link_on_patch(dev); - rtl8125_link_down_patch(dev); + if (netif_msg_ifup(tp)) + printk(KERN_INFO PFX "%s: link up\n", dev->name); + } else { + if (netif_msg_ifdown(tp)) + printk(KERN_INFO PFX "%s: link down\n", dev->name); + + rtl8125_link_down_patch(dev); + } + + if (!force_set) + tp->resume_not_chg_speed = 0; } } -static void -rtl8125_check_link_status(struct net_device *dev) -{ - struct rtl8125_private *tp = netdev_priv(dev); - - _rtl8125_check_link_status(dev); - - tp->resume_not_chg_speed = 0; -} - static void rtl8125_link_option(u8 *aut, u32 *spd, @@ -3603,9 +3357,9 @@ rtl8125_enable_pci_offset_99(struct rtl8125_private *tp) case CFG_METHOD_5: csi_tmp = rtl8125_mac_ocp_read(tp, 0xE032); csi_tmp &= ~(BIT_0 | BIT_1); - if (tp->org_pci_offset_99 & (BIT_5 | BIT_6)) + if (!(tp->org_pci_offset_99 & (BIT_5 | BIT_6))) csi_tmp |= BIT_1; - if (tp->org_pci_offset_99 & BIT_2) + if (!(tp->org_pci_offset_99 & BIT_2)) csi_tmp |= BIT_0; rtl8125_mac_ocp_write(tp, 0xE032, csi_tmp); break; @@ -3763,26 +3517,6 @@ rtl8125_disable_exit_l1_mask(struct rtl8125_private *tp) ClearMcuAccessRegBit(tp, 0xC0AC, (BIT_7 | BIT_8 | BIT_9 | BIT_10 | BIT_11 | BIT_12)); } -static void -rtl8125_enable_extend_tally_couter(struct rtl8125_private *tp) -{ - switch (tp->HwSuppExtendTallyCounterVer) { - case 1: - SetMcuAccessRegBit(tp, 0xEA84, (BIT_1 | BIT_0)); - break; - } -} - -static void -rtl8125_disable_extend_tally_couter(struct rtl8125_private *tp) -{ - switch (tp->HwSuppExtendTallyCounterVer) { - case 1: - ClearMcuAccessRegBit(tp, 0xEA84, (BIT_1 | BIT_0)); - break; - } -} - static void rtl8125_hw_d3_para(struct net_device *dev) { @@ -3828,8 +3562,6 @@ rtl8125_hw_d3_para(struct net_device *dev) rtl8125_disable_ocp_phy_power_saving(dev); rtl8125_disable_rxdvgate(dev); - - rtl8125_disable_extend_tally_couter(tp); } static void @@ -3863,7 +3595,7 @@ rtl8125_enable_linkchg_wakeup(struct net_device *dev) switch (tp->HwSuppLinkChgWakeUpVer) { case 3: RTL_W8(tp, Config3, RTL_R8(tp, Config3) | LinkUp); - ClearAndSetMcuAccessRegBit(tp, 0xE0C6, (BIT_5 | BIT_3 | BIT_2), (BIT_4 | BIT_1 | BIT_0)); + ClearAndSetMcuAccessRegBit(tp, 0xE0C6, (BIT_3 | BIT_2), (BIT_4 | BIT_1 | BIT_0)); break; } } @@ -3876,7 +3608,7 @@ rtl8125_disable_linkchg_wakeup(struct net_device *dev) switch (tp->HwSuppLinkChgWakeUpVer) { case 3: RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~LinkUp); - ClearMcuAccessRegBit(tp, 0xE0C6, (BIT_5 | BIT_4 | BIT_3 | BIT_2 | BIT_1 | BIT_0)); + ClearMcuAccessRegBit(tp, 0xE0C6, (BIT_4 | BIT_3 | BIT_2 | BIT_1 | BIT_0)); break; } } @@ -3890,9 +3622,6 @@ rtl8125_get_hw_wol(struct rtl8125_private *tp) u32 csi_tmp; u32 wol_opts = 0; - if (disable_pm_support) - goto out; - options = RTL_R8(tp, Config1); if (!(options & PMEnable)) goto out; @@ -4034,6 +3763,9 @@ rtl8125_phy_setup_force_mode(struct net_device *dev, u32 speed, u8 duplex) bmcr_true_force = BMCR_SPEED100; } else if ((speed == SPEED_100) && (duplex == DUPLEX_FULL)) { bmcr_true_force = BMCR_SPEED100 | BMCR_FULLDPLX; + } else if ((speed == SPEED_1000) && (duplex == DUPLEX_FULL) && + tp->HwSuppGigaForceMode) { + bmcr_true_force = BMCR_SPEED1000 | BMCR_FULLDPLX; } else { netif_err(tp, drv, dev, "Failed to set phy force mode!\n"); return; @@ -4067,96 +3799,44 @@ rtl8125_set_wol_link_speed(struct net_device *dev) struct rtl8125_private *tp = netdev_priv(dev); int auto_nego; int giga_ctrl; - int ctrl_2500; - u32 adv; u16 anlpar; - u16 gbsr; - u16 status_2500; - u16 aner; - - if (tp->autoneg != AUTONEG_ENABLE) - goto exit; rtl8125_mdio_write(tp, 0x1F, 0x0000); - auto_nego = rtl8125_mdio_read(tp, MII_ADVERTISE); auto_nego &= ~(ADVERTISE_10HALF | ADVERTISE_10FULL | ADVERTISE_100HALF | ADVERTISE_100FULL); - giga_ctrl = rtl8125_mdio_read(tp, MII_CTRL1000); - giga_ctrl &= ~(ADVERTISE_1000HALF | ADVERTISE_1000FULL); - - ctrl_2500 = mdio_direct_read_phy_ocp(tp, 0xA5D4); - ctrl_2500 &= ~(RTK_ADVERTISE_2500FULL); - - aner = anlpar = gbsr = status_2500 = 0; - if (tp->link_ok(dev)) { - aner = rtl8125_mdio_read(tp, MII_EXPANSION); - anlpar = rtl8125_mdio_read(tp, MII_LPA); - gbsr = rtl8125_mdio_read(tp, MII_STAT1000); - status_2500 = mdio_direct_read_phy_ocp(tp, 0xA5D6); - } else { - if (netif_running(dev)) { - aner = tp->phy_reg_aner; - anlpar = tp->phy_reg_anlpar; - gbsr = tp->phy_reg_gbsr; - status_2500 = tp->phy_reg_status_2500; - } - } - - if ((aner | anlpar | gbsr | status_2500) == 0) { - int auto_nego_tmp = 0; - adv = tp->advertising; - if ((adv & ADVERTISED_10baseT_Half) && (anlpar & LPA_10HALF)) - auto_nego_tmp |= ADVERTISE_10HALF; - if ((adv & ADVERTISED_10baseT_Full) && (anlpar & LPA_10FULL)) - auto_nego_tmp |= ADVERTISE_10FULL; - if ((adv & ADVERTISED_100baseT_Half) && (anlpar & LPA_100HALF)) - auto_nego_tmp |= ADVERTISE_100HALF; - if ((adv & ADVERTISED_100baseT_Full) && (anlpar & LPA_100FULL)) - auto_nego_tmp |= ADVERTISE_100FULL; - - if (auto_nego_tmp == 0) goto exit; - - auto_nego |= auto_nego_tmp; - goto skip_check_lpa; - } - if (!(aner & EXPANSION_NWAY)) goto exit; - - adv = tp->advertising; - if ((adv & ADVERTISED_10baseT_Half) && (anlpar & LPA_10HALF)) - auto_nego |= ADVERTISE_10HALF; - else if ((adv & ADVERTISED_10baseT_Full) && (anlpar & LPA_10FULL)) - auto_nego |= ADVERTISE_10FULL; - else if ((adv & ADVERTISED_100baseT_Half) && (anlpar & LPA_100HALF)) - auto_nego |= ADVERTISE_100HALF; - else if ((adv & ADVERTISED_100baseT_Full) && (anlpar & LPA_100FULL)) - auto_nego |= ADVERTISE_100FULL; - else if (adv & ADVERTISED_1000baseT_Half && (gbsr & LPA_1000HALF)) - giga_ctrl |= ADVERTISE_1000HALF; - else if (adv & ADVERTISED_1000baseT_Full && (gbsr & LPA_1000FULL)) - giga_ctrl |= ADVERTISE_1000FULL; - else if (adv & ADVERTISED_2500baseX_Full && (status_2500 & RTK_LPA_ADVERTISE_2500FULL)) - ctrl_2500 |= RTK_ADVERTISE_2500FULL; + if (netif_running(dev)) + anlpar = tp->phy_reg_anlpar; else - goto exit; - -skip_check_lpa: - if (tp->DASH) - auto_nego |= (ADVERTISE_100FULL | ADVERTISE_100HALF | ADVERTISE_10HALF | ADVERTISE_10FULL); + anlpar = rtl8125_mdio_read(tp, MII_LPA); #ifdef CONFIG_DOWN_SPEED_100 auto_nego |= (ADVERTISE_100FULL | ADVERTISE_100HALF | ADVERTISE_10HALF | ADVERTISE_10FULL); +#else + if (anlpar & (LPA_10HALF | LPA_10FULL)) + auto_nego |= (ADVERTISE_10HALF | ADVERTISE_10FULL); + else + auto_nego |= (ADVERTISE_100FULL | ADVERTISE_100HALF | ADVERTISE_10HALF | ADVERTISE_10FULL); #endif + if (tp->DASH) + auto_nego |= (ADVERTISE_100FULL | ADVERTISE_100HALF | ADVERTISE_10HALF | ADVERTISE_10FULL); + + giga_ctrl = rtl8125_mdio_read(tp, MII_CTRL1000) & ~(ADVERTISE_1000HALF | ADVERTISE_1000FULL); rtl8125_mdio_write(tp, MII_ADVERTISE, auto_nego); rtl8125_mdio_write(tp, MII_CTRL1000, giga_ctrl); - mdio_direct_write_phy_ocp(tp, 0xA5D4, ctrl_2500); + if (tp->mcfg == CFG_METHOD_2 || + tp->mcfg == CFG_METHOD_3 || + tp->mcfg == CFG_METHOD_4 || + tp->mcfg == CFG_METHOD_5) { + int ctrl_2500; + ctrl_2500 = mdio_direct_read_phy_ocp(tp, 0xA5D4); + ctrl_2500 &= ~(RTK_ADVERTISE_2500FULL); + mdio_direct_write_phy_ocp(tp, 0xA5D4, ctrl_2500); + } rtl8125_phy_restart_nway(dev); - -exit: - return; } static bool @@ -4259,21 +3939,27 @@ rtl8125_get_wol(struct net_device *dev, { struct rtl8125_private *tp = netdev_priv(dev); u8 options; + unsigned long flags; wol->wolopts = 0; - if (tp->mcfg == CFG_METHOD_DEFAULT || disable_pm_support) { + if (tp->mcfg == CFG_METHOD_DEFAULT) { wol->supported = 0; return; } else { wol->supported = WAKE_ANY; } + spin_lock_irqsave(&tp->lock, flags); + options = RTL_R8(tp, Config1); if (!(options & PMEnable)) - return; + goto out_unlock; wol->wolopts = tp->wol_opts; + +out_unlock: + spin_unlock_irqrestore(&tp->lock, flags); } static int @@ -4281,15 +3967,20 @@ rtl8125_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol) { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; - if (tp->mcfg == CFG_METHOD_DEFAULT || disable_pm_support) + if (tp->mcfg == CFG_METHOD_DEFAULT) return -EOPNOTSUPP; + spin_lock_irqsave(&tp->lock, flags); + tp->wol_opts = wol->wolopts; tp->wol_enabled = (tp->wol_opts) ? WOL_ENABLED : WOL_DISABLED; - device_set_wakeup_enable(tp_to_dev(tp), wol->wolopts); + spin_unlock_irqrestore(&tp->lock, flags); + + device_set_wakeup_enable(&tp->pci_dev->dev, wol->wolopts); return 0; } @@ -4299,17 +3990,12 @@ rtl8125_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) { struct rtl8125_private *tp = netdev_priv(dev); - struct rtl8125_fw *rtl_fw = tp->rtl_fw; strcpy(info->driver, MODULENAME); strcpy(info->version, RTL8125_VERSION); strcpy(info->bus_info, pci_name(tp->pci_dev)); info->regdump_len = R8125_REGS_DUMP_SIZE; info->eedump_len = tp->eeprom_len; - BUILD_BUG_ON(sizeof(info->fw_version) < sizeof(rtl_fw->version)); - if (rtl_fw) - strlcpy(info->fw_version, rtl_fw->version, - sizeof(info->fw_version)); } static int @@ -4324,13 +4010,12 @@ rtl8125_set_d0_speedup_speed(struct rtl8125_private *tp) { if (FALSE == HW_SUPPORT_D0_SPEED_UP(tp)) return; - tp->D0SpeedUpSpeed = D0_SPEED_UP_SPEED_DISABLE; - if (tp->autoneg == AUTONEG_ENABLE) { - if (tp->speed == SPEED_2500) - tp->D0SpeedUpSpeed = D0_SPEED_UP_SPEED_2500; - else if(tp->speed == SPEED_1000) - tp->D0SpeedUpSpeed = D0_SPEED_UP_SPEED_1000; - } + if (tp->autoneg == AUTONEG_ENABLE || tp->speed == SPEED_2500) + tp->D0SpeedUpSpeed = D0_SPEED_UP_SPEED_2500; + else if(tp->speed == SPEED_1000) + tp->D0SpeedUpSpeed = D0_SPEED_UP_SPEED_1000; + else + tp->D0SpeedUpSpeed = D0_SPEED_UP_SPEED_DISABLE; } static int @@ -4402,9 +4087,11 @@ rtl8125_set_speed_xmii(struct net_device *dev, mdelay(20); } else { /*true force*/ - if (speed == SPEED_10 || speed == SPEED_100) + if (speed == SPEED_10 || speed == SPEED_100 || + (speed == SPEED_1000 && duplex == DUPLEX_FULL && + tp->HwSuppGigaForceMode)) { rtl8125_phy_setup_force_mode(dev, speed, duplex); - else + } else goto out; } @@ -4447,7 +4134,9 @@ rtl8125_set_settings(struct net_device *dev, #endif ) { + struct rtl8125_private *tp = netdev_priv(dev); int ret; + unsigned long flags; u8 autoneg; u32 speed; u8 duplex; @@ -4468,17 +4157,13 @@ rtl8125_set_settings(struct net_device *dev, cmd->link_modes.supported); ethtool_convert_link_mode_to_legacy_u32(&advertising, cmd->link_modes.advertising); - if (test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, - cmd->link_modes.supported)) - supported |= ADVERTISED_2500baseX_Full; - if (test_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, - cmd->link_modes.advertising)) - advertising |= ADVERTISED_2500baseX_Full; #endif if (advertising & ~supported) return -EINVAL; + spin_lock_irqsave(&tp->lock, flags); ret = rtl8125_set_speed(dev, autoneg, speed, duplex, advertising); + spin_unlock_irqrestore(&tp->lock, flags); return ret; } @@ -4489,12 +4174,15 @@ rtl8125_get_tx_csum(struct net_device *dev) { struct rtl8125_private *tp = netdev_priv(dev); u32 ret; + unsigned long flags; + spin_lock_irqsave(&tp->lock, flags); #if LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0) ret = ((dev->features & NETIF_F_IP_CSUM) != 0); #else ret = ((dev->features & (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM)) != 0); #endif //LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0) + spin_unlock_irqrestore(&tp->lock, flags); return ret; } @@ -4504,8 +4192,11 @@ rtl8125_get_rx_csum(struct net_device *dev) { struct rtl8125_private *tp = netdev_priv(dev); u32 ret; + unsigned long flags; + spin_lock_irqsave(&tp->lock, flags); ret = tp->cp_cmd & RxChkSum; + spin_unlock_irqrestore(&tp->lock, flags); return ret; } @@ -4515,10 +4206,13 @@ rtl8125_set_tx_csum(struct net_device *dev, u32 data) { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; if (tp->mcfg == CFG_METHOD_DEFAULT) return -EOPNOTSUPP; + spin_lock_irqsave(&tp->lock, flags); + #if LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0) if (data) dev->features |= NETIF_F_IP_CSUM; @@ -4531,6 +4225,8 @@ rtl8125_set_tx_csum(struct net_device *dev, dev->features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); #endif //LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0) + spin_unlock_irqrestore(&tp->lock, flags); + return 0; } @@ -4539,10 +4235,13 @@ rtl8125_set_rx_csum(struct net_device *dev, u32 data) { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; if (tp->mcfg == CFG_METHOD_DEFAULT) return -EOPNOTSUPP; + spin_lock_irqsave(&tp->lock, flags); + if (data) tp->cp_cmd |= RxChkSum; else @@ -4550,6 +4249,8 @@ rtl8125_set_rx_csum(struct net_device *dev, RTL_W16(tp, CPlusCmd, tp->cp_cmd); + spin_unlock_irqrestore(&tp->lock, flags); + return 0; } #endif //LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0) @@ -4612,7 +4313,9 @@ rtl8125_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; + spin_lock_irqsave(&tp->lock, flags); tp->vlgrp = grp; if (tp->mcfg == CFG_METHOD_2 || tp->mcfg == CFG_METHOD_3 || @@ -4626,6 +4329,7 @@ rtl8125_vlan_rx_register(struct net_device *dev, RTL_W32(tp, RxConfig, RTL_R32(tp, RxConfig) & ~(EnableInnerVlan | EnableOuterVlan)) } } + spin_unlock_irqrestore(&tp->lock, flags); } #endif @@ -4636,13 +4340,16 @@ rtl8125_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid) { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; + spin_lock_irqsave(&tp->lock, flags); #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21) if (tp->vlgrp) tp->vlgrp->vlan_devices[vid] = NULL; #else vlan_group_set_device(tp->vlgrp, vid, NULL); #endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21) + spin_unlock_irqrestore(&tp->lock, flags); } #endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) @@ -4696,6 +4403,10 @@ rtl8125_rx_vlan_skb(struct rtl8125_private *tp, static netdev_features_t rtl8125_fix_features(struct net_device *dev, netdev_features_t features) { + struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; + + spin_lock_irqsave(&tp->lock, flags); if (dev->mtu > MSS_MAX) features &= ~NETIF_F_ALL_TSO; if (dev->mtu > ETH_DATA_LEN) { @@ -4705,6 +4416,7 @@ static netdev_features_t rtl8125_fix_features(struct net_device *dev, #ifndef CONFIG_R8125_VLAN features &= ~NETIF_F_ALL_CSUM; #endif + spin_unlock_irqrestore(&tp->lock, flags); return features; } @@ -4716,21 +4428,15 @@ static int rtl8125_hw_set_features(struct net_device *dev, u32 rx_config; rx_config = RTL_R32(tp, RxConfig); - if (features & NETIF_F_RXALL) { - tp->rtl8125_rx_config |= (AcceptErr | AcceptRunt); + if (features & NETIF_F_RXALL) rx_config |= (AcceptErr | AcceptRunt); - } else { - tp->rtl8125_rx_config &= ~(AcceptErr | AcceptRunt); + else rx_config &= ~(AcceptErr | AcceptRunt); - } - if (features & NETIF_F_HW_VLAN_RX) { - tp->rtl8125_rx_config |= (EnableInnerVlan | EnableOuterVlan); + if (dev->features & NETIF_F_HW_VLAN_RX) rx_config |= (EnableInnerVlan | EnableOuterVlan); - } else { - tp->rtl8125_rx_config &= ~(EnableInnerVlan | EnableOuterVlan); + else rx_config &= ~(EnableInnerVlan | EnableOuterVlan); - } RTL_W32(tp, RxConfig, rx_config); @@ -4748,9 +4454,15 @@ static int rtl8125_hw_set_features(struct net_device *dev, static int rtl8125_set_features(struct net_device *dev, netdev_features_t features) { + struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; + features &= NETIF_F_RXALL | NETIF_F_RXCSUM | NETIF_F_HW_VLAN_RX; - rtl8125_hw_set_features(dev, features); + spin_lock_irqsave(&tp->lock, flags); + if (features ^ dev->features) + rtl8125_hw_set_features(dev, features); + spin_unlock_irqrestore(&tp->lock, flags); return 0; } @@ -4766,17 +4478,12 @@ static void rtl8125_gset_xmii(struct net_device *dev, ) { struct rtl8125_private *tp = netdev_priv(dev); - u16 aner = tp->phy_reg_aner; - u16 anlpar = tp->phy_reg_anlpar; - u16 gbsr = tp->phy_reg_gbsr; - u16 status_2500 = tp->phy_reg_status_2500; - u32 lpa_adv = 0; u16 status; u8 autoneg, duplex; u32 speed = 0; u16 bmcr; u32 supported, advertising; - u8 report_lpa = 0; + unsigned long flags; supported = SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full | @@ -4791,8 +4498,10 @@ static void rtl8125_gset_xmii(struct net_device *dev, advertising = ADVERTISED_TP; + spin_lock_irqsave(&tp->lock, flags); rtl8125_mdio_write(tp, 0x1F, 0x0000); bmcr = rtl8125_mdio_read(tp, MII_BMCR); + spin_unlock_irqrestore(&tp->lock, flags); if (bmcr & BMCR_ANENABLE) { advertising |= ADVERTISED_Autoneg; @@ -4815,10 +4524,8 @@ static void rtl8125_gset_xmii(struct net_device *dev, } status = RTL_R16(tp, PHYstatus); - if (netif_running(dev) && (status & LinkStatus)) - report_lpa = 1; - if (report_lpa) { + if (status & LinkStatus) { /*link on*/ if (status & _2500bpsF) speed = SPEED_2500; @@ -4837,33 +4544,10 @@ static void rtl8125_gset_xmii(struct net_device *dev, duplex = ((status & (_1000bpsF | _2500bpsF)) || (status & FullDup)) ? DUPLEX_FULL : DUPLEX_HALF; - - /*link partner*/ - if (aner & EXPANSION_NWAY) - lpa_adv |= ADVERTISED_Autoneg; - if (anlpar & LPA_10HALF) - lpa_adv |= ADVERTISED_10baseT_Half; - if (anlpar & LPA_10FULL) - lpa_adv |= ADVERTISED_10baseT_Full; - if (anlpar & LPA_100HALF) - lpa_adv |= ADVERTISED_100baseT_Half; - if (anlpar & LPA_100FULL) - lpa_adv |= ADVERTISED_100baseT_Full; - if (anlpar & LPA_PAUSE_CAP) - lpa_adv |= ADVERTISED_Pause; - if (anlpar & LPA_PAUSE_ASYM) - lpa_adv |= ADVERTISED_Asym_Pause; - if (gbsr & LPA_1000HALF) - lpa_adv |= ADVERTISED_1000baseT_Half; - if (gbsr & LPA_1000FULL) - lpa_adv |= ADVERTISED_1000baseT_Full; - if (status_2500 & RTK_LPA_ADVERTISE_2500FULL) - lpa_adv |= ADVERTISED_2500baseX_Full; } else { /*link down*/ speed = SPEED_UNKNOWN; duplex = DUPLEX_UNKNOWN; - lpa_adv = 0; } #if LINUX_VERSION_CODE < KERNEL_VERSION(4,6,0) @@ -4873,42 +4557,11 @@ static void rtl8125_gset_xmii(struct net_device *dev, cmd->speed = speed; cmd->duplex = duplex; cmd->port = PORT_TP; - cmd->lp_advertising = lpa_adv; #else ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported, supported); ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising, advertising); - ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.lp_advertising, - lpa_adv); -#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0) - if (supported & SUPPORTED_2500baseX_Full) { - linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseX_Full_BIT, - cmd->link_modes.supported, 0); - linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, - cmd->link_modes.supported, 1); - } - if (advertising & ADVERTISED_2500baseX_Full) { - linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseX_Full_BIT, - cmd->link_modes.advertising, 0); - linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, - cmd->link_modes.advertising, 1); - } - if (report_lpa) { - if (lpa_adv & ADVERTISED_2500baseX_Full) { - linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseX_Full_BIT, - cmd->link_modes.lp_advertising, 0); - linkmode_mod_bit(ETHTOOL_LINK_MODE_2500baseT_Full_BIT, - cmd->link_modes.lp_advertising, 1); - } - if (status_2500 & RTK_LPA_ADVERTISE_5000FULL) - linkmode_mod_bit(ETHTOOL_LINK_MODE_5000baseT_Full_BIT, - cmd->link_modes.lp_advertising, 1); - if (status_2500 & RTK_LPA_ADVERTISE_10000FULL) - linkmode_mod_bit(ETHTOOL_LINK_MODE_10000baseT_Full_BIT, - cmd->link_modes.lp_advertising, 1); - } -#endif cmd->base.autoneg = autoneg; cmd->base.speed = speed; cmd->base.duplex = duplex; @@ -4940,12 +4593,14 @@ static void rtl8125_get_regs(struct net_device *dev, struct ethtool_regs *regs, void __iomem *ioaddr = tp->mmio_addr; unsigned int i; u8 *data = p; + unsigned long flags; if (regs->len < R8125_REGS_DUMP_SIZE) return /* -EINVAL */; memset(p, 0, regs->len); + spin_lock_irqsave(&tp->lock, flags); for (i = 0; i < R8125_MAC_REGS_SIZE; i++) *data++ = readb(ioaddr + i); data = (u8*)p + 256; @@ -4975,12 +4630,16 @@ static void rtl8125_get_regs(struct net_device *dev, struct ethtool_regs *regs, } break; } + spin_unlock_irqrestore(&tp->lock, flags); } static void rtl8125_get_pauseparam(struct net_device *dev, struct ethtool_pauseparam *pause) { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; + + spin_lock_irqsave(&tp->lock, flags); pause->autoneg = (tp->autoneg ? AUTONEG_ENABLE : AUTONEG_DISABLE); if (tp->fcpause == rtl8125_fc_rx_pause) @@ -4991,6 +4650,8 @@ static void rtl8125_get_pauseparam(struct net_device *dev, pause->rx_pause = 1; pause->tx_pause = 1; } + + spin_unlock_irqrestore(&tp->lock, flags); } static int rtl8125_set_pauseparam(struct net_device *dev, @@ -4998,18 +4659,23 @@ static int rtl8125_set_pauseparam(struct net_device *dev, { struct rtl8125_private *tp = netdev_priv(dev); enum rtl8125_fc_mode newfc; + unsigned long flags; if (pause->tx_pause || pause->rx_pause) newfc = rtl8125_fc_full; else newfc = rtl8125_fc_none; + spin_lock_irqsave(&tp->lock, flags); + if (tp->fcpause != newfc) { tp->fcpause = newfc; rtl8125_set_speed(dev, tp->autoneg, tp->speed, tp->duplex, tp->advertising); } + spin_unlock_irqrestore(&tp->lock, flags); + return 0; } @@ -5032,7 +4698,6 @@ rtl8125_set_msglevel(struct net_device *dev, } static const char rtl8125_gstrings[][ETH_GSTRING_LEN] = { - /* legacy */ "tx_packets", "rx_packets", "tx_errors", @@ -5046,34 +4711,6 @@ static const char rtl8125_gstrings[][ETH_GSTRING_LEN] = { "multicast", "tx_aborted", "tx_underrun", - - /* extended */ - "tx_octets", - "rx_octets", - "rx_multicast64", - "tx_unicast64", - "tx_broadcast64", - "tx_multicast64", - "tx_pause_on", - "tx_pause_off", - "tx_pause_all", - "tx_deferred", - "tx_late_collision", - "tx_all_collision", - "tx_aborted32", - "align_errors32", - "rx_frame_too_long", - "rx_runt", - "rx_pause_on", - "rx_pause_off", - "rx_pause_all", - "rx_unknown_opcode", - "rx_mac_error", - "tx_underrun32", - "rx_mac_missed", - "rx_tcam_dropped", - "tdu", - "rdu", }; #endif //#LINUX_VERSION_CODE > KERNEL_VERSION(2,4,22) @@ -5105,6 +4742,9 @@ rtl8125_get_ethtool_stats(struct net_device *dev, struct rtl8125_private *tp = netdev_priv(dev); struct rtl8125_counters *counters; dma_addr_t paddr; + u32 cmd; + u32 WaitCnt; + unsigned long flags; ASSERT_RTNL(); @@ -5113,7 +4753,21 @@ rtl8125_get_ethtool_stats(struct net_device *dev, if (!counters) return; - rtl8125_dump_tally_counter(tp, paddr); + spin_lock_irqsave(&tp->lock, flags); + RTL_W32(tp, CounterAddrHigh, (u64)paddr >> 32); + cmd = (u64)paddr & DMA_BIT_MASK(32); + RTL_W32(tp, CounterAddrLow, cmd); + RTL_W32(tp, CounterAddrLow, cmd | CounterDump); + + WaitCnt = 0; + while (RTL_R32(tp, CounterAddrLow) & CounterDump) { + udelay(10); + + WaitCnt++; + if (WaitCnt > 20) + break; + } + spin_unlock_irqrestore(&tp->lock, flags); data[0] = le64_to_cpu(counters->tx_packets); data[1] = le64_to_cpu(counters->rx_packets); @@ -5127,34 +4781,7 @@ rtl8125_get_ethtool_stats(struct net_device *dev, data[9] = le64_to_cpu(counters->rx_broadcast); data[10] = le32_to_cpu(counters->rx_multicast); data[11] = le16_to_cpu(counters->tx_aborted); - data[12] = le16_to_cpu(counters->tx_underrun); - - data[13] = le64_to_cpu(counters->tx_octets); - data[14] = le64_to_cpu(counters->rx_octets); - data[15] = le64_to_cpu(counters->rx_multicast64); - data[16] = le64_to_cpu(counters->tx_unicast64); - data[17] = le64_to_cpu(counters->tx_broadcast64); - data[18] = le64_to_cpu(counters->tx_multicast64); - data[19] = le32_to_cpu(counters->tx_pause_on); - data[20] = le32_to_cpu(counters->tx_pause_off); - data[21] = le32_to_cpu(counters->tx_pause_all); - data[22] = le32_to_cpu(counters->tx_deferred); - data[23] = le32_to_cpu(counters->tx_late_collision); - data[24] = le32_to_cpu(counters->tx_all_collision); - data[25] = le32_to_cpu(counters->tx_aborted32); - data[26] = le32_to_cpu(counters->align_errors32); - data[27] = le32_to_cpu(counters->rx_frame_too_long); - data[28] = le32_to_cpu(counters->rx_runt); - data[29] = le32_to_cpu(counters->rx_pause_on); - data[30] = le32_to_cpu(counters->rx_pause_off); - data[31] = le32_to_cpu(counters->rx_pause_all); - data[32] = le32_to_cpu(counters->rx_unknown_opcode); - data[33] = le32_to_cpu(counters->rx_mac_error); - data[34] = le32_to_cpu(counters->tx_underrun32); - data[35] = le32_to_cpu(counters->rx_mac_missed); - data[36] = le32_to_cpu(counters->rx_tcam_dropped); - data[37] = le32_to_cpu(counters->tdu); - data[38] = le32_to_cpu(counters->rdu); + data[12] = le16_to_cpu(counters->tx_underun); } static void @@ -5187,10 +4814,10 @@ static int rtl_get_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, u16 tmp; if (tp->eeprom_type == EEPROM_TYPE_NONE) { - dev_printk(KERN_DEBUG, tp_to_dev(tp), "Detect none EEPROM\n"); + dev_printk(KERN_DEBUG, &tp->pci_dev->dev, "Detect none EEPROM\n"); return -EOPNOTSUPP; } else if (eeprom->len == 0 || (eeprom->offset+eeprom->len) > tp->eeprom_len) { - dev_printk(KERN_DEBUG, tp_to_dev(tp), "Invalid parameter\n"); + dev_printk(KERN_DEBUG, &tp->pci_dev->dev, "Invalid parameter\n"); return -EINVAL; } @@ -5282,21 +4909,17 @@ static int _kc_ethtool_op_set_sg(struct net_device *dev, u32 data) static int rtl8125_enable_eee(struct rtl8125_private *tp) { - struct ethtool_eee *eee = &tp->eee; - u16 eee_adv_t = ethtool_adv_to_mmd_eee_adv_t(eee->advertised); int ret; ret = 0; switch (tp->mcfg) { case CFG_METHOD_2: case CFG_METHOD_3: - RTL_W16(tp, EEE_TXIDLE_TIMER_8125, eee->tx_lpi_timer); - SetMcuAccessRegBit(tp, 0xE040, (BIT_1|BIT_0)); SetMcuAccessRegBit(tp, 0xEB62, (BIT_2|BIT_1)); SetEthPhyOcpBit(tp, 0xA432, BIT_4); - SetEthPhyOcpBit(tp, 0xA5D0, eee_adv_t); + SetEthPhyOcpBit(tp, 0xA5D0, tp->eee_adv_t); ClearEthPhyOcpBit(tp, 0xA6D4, BIT_0); ClearEthPhyOcpBit(tp, 0xA6D8, BIT_4); @@ -5305,22 +4928,17 @@ static int rtl8125_enable_eee(struct rtl8125_private *tp) break; case CFG_METHOD_4: case CFG_METHOD_5: - RTL_W16(tp, EEE_TXIDLE_TIMER_8125, eee->tx_lpi_timer); - SetMcuAccessRegBit(tp, 0xE040, (BIT_1|BIT_0)); - SetEthPhyOcpBit(tp, 0xA5D0, eee_adv_t); - if (eee->advertised & SUPPORTED_2500baseX_Full) - SetEthPhyOcpBit(tp, 0xA6D4, BIT_0); - else - ClearEthPhyOcpBit(tp, 0xA6D4, BIT_0); + SetEthPhyOcpBit(tp, 0xA5D0, tp->eee_adv_t); + ClearEthPhyOcpBit(tp, 0xA6D4, BIT_0); ClearEthPhyOcpBit(tp, 0xA6D8, BIT_4); ClearEthPhyOcpBit(tp, 0xA428, BIT_7); ClearEthPhyOcpBit(tp, 0xA4A2, BIT_9); break; default: -// dev_printk(KERN_DEBUG, tp_to_dev(tp), "Not Support EEE\n"); +// dev_printk(KERN_DEBUG, &tp->pci_dev->dev, "Not Support EEE\n"); ret = -EOPNOTSUPP; break; } @@ -5373,7 +4991,7 @@ static int rtl8125_disable_eee(struct rtl8125_private *tp) ClearEthPhyOcpBit(tp, 0xA4A2, BIT_9); break; default: -// dev_printk(KERN_DEBUG, tp_to_dev(tp), "Not Support EEE\n"); +// dev_printk(KERN_DEBUG, &tp->pci_dev->dev, "Not Support EEE\n"); ret = -EOPNOTSUPP; break; } @@ -5398,10 +5016,15 @@ static int rtl8125_disable_eee(struct rtl8125_private *tp) static int rtl_nway_reset(struct net_device *dev) { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; int ret, bmcr; - if (unlikely(tp->rtk_enable_diag)) + spin_lock_irqsave(&tp->lock, flags); + + if (unlikely(tp->rtk_enable_diag)) { + spin_unlock_irqrestore(&tp->lock, flags); return -EBUSY; + } /* if autoneg is off, it's an error */ rtl8125_mdio_write(tp, 0x1F, 0x0000); @@ -5415,50 +5038,30 @@ static int rtl_nway_reset(struct net_device *dev) ret = -EINVAL; } + spin_unlock_irqrestore(&tp->lock, flags); + return ret; } #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) -static u32 -rtl8125_tx_lpi_timer_to_us(struct rtl8125_private *tp , u32 tx_lpi_timer) -{ - u32 to_us; - u16 status; - - //2.5G : tx_lpi_timer * 3.2ns - //Giga: tx_lpi_timer * 8ns - //100M : tx_lpi_timer * 80ns - to_us = tx_lpi_timer * 80; - status = RTL_R16(tp, PHYstatus); - if (status & LinkStatus) { - /*link on*/ - if (status & _2500bpsF) - to_us = (tx_lpi_timer * 32) / 10; - else if (status & _1000bpsF) - to_us = tx_lpi_timer * 8; - } - - //ns to us - to_us /= 1000; - - return to_us; -} - static int -rtl_ethtool_get_eee(struct net_device *net, struct ethtool_eee *edata) +rtl_ethtool_get_eee(struct net_device *net, struct ethtool_eee *eee) { struct rtl8125_private *tp = netdev_priv(net); - struct ethtool_eee *eee = &tp->eee; - u32 lp, adv, tx_lpi_timer, supported = 0; + u32 lp, adv, supported = 0; + unsigned long flags; u16 val; - if (unlikely(tp->rtk_enable_diag)) + spin_lock_irqsave(&tp->lock, flags); + + if (unlikely(tp->rtk_enable_diag)) { + spin_unlock_irqrestore(&tp->lock, flags); return -EBUSY; + } /* Get Supported EEE */ - //val = mdio_direct_read_phy_ocp(tp, 0xA5C4); - //supported = mmd_eee_cap_to_ethtool_sup_t(val); - supported = eee->supported; + val = mdio_direct_read_phy_ocp(tp, 0xA5C4); + supported = mmd_eee_cap_to_ethtool_sup_t(val); /* Get advertisement EEE */ val = mdio_direct_read_phy_ocp(tp, 0xA5D0); @@ -5468,97 +5071,51 @@ rtl_ethtool_get_eee(struct net_device *net, struct ethtool_eee *edata) val = mdio_direct_read_phy_ocp(tp, 0xA5D2); lp = mmd_eee_adv_to_ethtool_adv_t(val); - /* Get EEE Tx LPI timer*/ - tx_lpi_timer = RTL_R16(tp, EEE_TXIDLE_TIMER_8125); - val = rtl8125_mac_ocp_read(tp, 0xE040); val &= BIT_1 | BIT_0; - edata->eee_enabled = !!val; - edata->eee_active = !!(supported & adv & lp); - edata->supported = supported; - edata->advertised = adv; - edata->lp_advertised = lp; - edata->tx_lpi_enabled = edata->eee_enabled; - edata->tx_lpi_timer = rtl8125_tx_lpi_timer_to_us(tp, tx_lpi_timer); + spin_unlock_irqrestore(&tp->lock, flags); + + eee->eee_enabled = !!val; + eee->eee_active = !!(supported & adv & lp); + eee->supported = supported; + eee->advertised = adv; + eee->lp_advertised = lp; return 0; } static int -rtl_ethtool_set_eee(struct net_device *net, struct ethtool_eee *edata) +rtl_ethtool_set_eee(struct net_device *net, struct ethtool_eee *eee) { struct rtl8125_private *tp = netdev_priv(net); - struct ethtool_eee *eee = &tp->eee; - u32 advertising; - int rc = 0; + unsigned long flags; if (!HW_HAS_WRITE_PHY_MCU_RAM_CODE(tp) || tp->DASH) return -EOPNOTSUPP; + spin_lock_irqsave(&tp->lock, flags); + if (unlikely(tp->rtk_enable_diag)) { - dev_printk(KERN_WARNING, tp_to_dev(tp), "Diag Enabled\n"); - rc = -EBUSY; - goto out; + spin_unlock_irqrestore(&tp->lock, flags); + return -EBUSY; } - if (tp->autoneg != AUTONEG_ENABLE) { - dev_printk(KERN_WARNING, tp_to_dev(tp), "EEE requires autoneg\n"); - rc = -EINVAL; - goto out; - } + tp->eee_enabled = eee->eee_enabled; + tp->eee_adv_t = ethtool_adv_to_mmd_eee_adv_t(eee->advertised); - if (edata->tx_lpi_enabled) { - if (edata->tx_lpi_timer > tp->max_jumbo_frame_size || - edata->tx_lpi_timer < ETH_MIN_MTU) { - dev_printk(KERN_WARNING, tp_to_dev(tp), "Valid LPI timer range is %d to %d. \n", - ETH_MIN_MTU, tp->max_jumbo_frame_size); - rc = -EINVAL; - goto out; - } - } - - advertising = tp->advertising; - if (!edata->advertised) { - edata->advertised = advertising & eee->supported; - } else if (edata->advertised & ~advertising) { - dev_printk(KERN_WARNING, tp_to_dev(tp), "EEE advertised %x must be a subset of autoneg advertised speeds %x\n", - edata->advertised, advertising); - rc = -EINVAL; - goto out; - } - - if (edata->advertised & ~eee->supported) { - dev_printk(KERN_WARNING, tp_to_dev(tp), "EEE advertised %x must be a subset of support %x\n", - edata->advertised, eee->supported); - rc = -EINVAL; - goto out; - } - - //tp->eee.eee_enabled = edata->eee_enabled; - //tp->eee_adv_t = ethtool_adv_to_mmd_eee_adv_t(edata->advertised); - - dev_printk(KERN_WARNING, tp_to_dev(tp), "EEE tx_lpi_timer %x must be a subset of support %x\n", - edata->tx_lpi_timer, eee->tx_lpi_timer); - - eee->advertised = edata->advertised; - eee->tx_lpi_enabled = edata->tx_lpi_enabled; - eee->tx_lpi_timer = edata->tx_lpi_timer; - eee->eee_enabled = edata->eee_enabled; - - if (eee->eee_enabled) + if (tp->eee_enabled) { rtl8125_enable_eee(tp); - else + } else { rtl8125_disable_eee(tp); + } + + spin_unlock_irqrestore(&tp->lock, flags); rtl_nway_reset(net); - return rc; - -out: - - return rc; + return 0; } #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) */ @@ -5638,6 +5195,7 @@ static const struct ethtool_ops rtl8125_ethtool_ops = { static int rtl8125_enable_green_feature(struct rtl8125_private *tp) { u16 gphy_val; + unsigned long flags; switch (tp->mcfg) { case CFG_METHOD_2: @@ -5649,7 +5207,7 @@ static int rtl8125_enable_green_feature(struct rtl8125_private *tp) rtl8125_mdio_write(tp, 0x00, 0x9200); break; default: - dev_printk(KERN_DEBUG, tp_to_dev(tp), "Not Support Green Feature\n"); + dev_printk(KERN_DEBUG, &tp->pci_dev->dev, "Not Support Green Feature\n"); break; } @@ -5659,6 +5217,7 @@ static int rtl8125_enable_green_feature(struct rtl8125_private *tp) static int rtl8125_disable_green_feature(struct rtl8125_private *tp) { u16 gphy_val; + unsigned long flags; switch (tp->mcfg) { case CFG_METHOD_2: @@ -5670,7 +5229,7 @@ static int rtl8125_disable_green_feature(struct rtl8125_private *tp) rtl8125_mdio_write(tp, 0x00, 0x9200); break; default: - dev_printk(KERN_DEBUG, tp_to_dev(tp), "Not Support Green Feature\n"); + dev_printk(KERN_DEBUG, &tp->pci_dev->dev, "Not Support Green Feature\n"); break; } @@ -5910,6 +5469,8 @@ rtl8125_exit_oob(struct net_device *dev) } break; }; + + tp->phy_reg_anlpar = 0; } void @@ -5957,7 +5518,6 @@ rtl8125_hw_disable_mac_mcu_bps(struct net_device *dev) } } -#ifndef ENABLE_USE_FIRMWARE_FILE static void rtl8125_set_mac_mcu_8125a_1(struct net_device *dev) { @@ -6025,21 +5585,17 @@ rtl8125_set_mac_mcu_8125b_2(struct net_device *dev) struct rtl8125_private *tp = netdev_priv(dev); u16 i; static const u16 mcu_patch_code_8125b_2[] = { - 0xE010, 0xE01B, 0xE026, 0xE037, 0xE03D, 0xE057, 0xE05B, 0xE05F, 0xE061, - 0xE063, 0xE065, 0xE067, 0xE069, 0xE06B, 0xE06D, 0xE06F, 0x740A, 0x4846, - 0x4847, 0x9C0A, 0xC607, 0x74C0, 0x48C6, 0x9CC0, 0xC602, 0xBE00, 0x13F0, - 0xE054, 0x72CA, 0x4826, 0x4827, 0x9ACA, 0xC607, 0x72C0, 0x48A6, 0x9AC0, - 0xC602, 0xBE00, 0x081C, 0xE054, 0xC60F, 0x74C4, 0x49CC, 0xF109, 0xC60C, - 0x74CA, 0x48C7, 0x9CCA, 0xC609, 0x74C0, 0x4846, 0x9CC0, 0xC602, 0xBE00, - 0x2494, 0xE092, 0xE0C0, 0xE054, 0x7420, 0x48C0, 0x9C20, 0x7444, 0xC602, - 0xBE00, 0x12DC, 0x733A, 0x21B5, 0x25BC, 0x1304, 0xF111, 0x1B12, 0x1D2A, - 0x3168, 0x3ADA, 0x31AB, 0x1A00, 0x9AC0, 0x1300, 0xF1FB, 0x7620, 0x236E, - 0x276F, 0x1A3C, 0x22A1, 0x41B5, 0x9EE2, 0x76E4, 0x486F, 0x9EE4, 0xC602, - 0xBE00, 0x4A26, 0x733A, 0x49BB, 0xC602, 0xBE00, 0x47A2, 0x48C1, 0x48C2, - 0xC5C3, 0xBD00, 0x0A52, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, - 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, - 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000, - 0xC602, 0xBE00, 0x0000 + 0xE008, 0xE013, 0xE01E, 0xE02F, 0xE035, 0xE04F, 0xE053, 0xE055, 0x740A, + 0x4846, 0x4847, 0x9C0A, 0xC607, 0x74C0, 0x48C6, 0x9CC0, 0xC602, 0xBE00, + 0x13F0, 0xE054, 0x72CA, 0x4826, 0x4827, 0x9ACA, 0xC607, 0x72C0, 0x48A6, + 0x9AC0, 0xC602, 0xBE00, 0x081C, 0xE054, 0xC60F, 0x74C4, 0x49CC, 0xF109, + 0xC60C, 0x74CA, 0x48C7, 0x9CCA, 0xC609, 0x74C0, 0x4846, 0x9CC0, 0xC602, + 0xBE00, 0x2494, 0xE092, 0xE0C0, 0xE054, 0x7420, 0x48C0, 0x9C20, 0x7444, + 0xC602, 0xBE00, 0x12DC, 0x733A, 0x21B5, 0x25BC, 0x1304, 0xF111, 0x1B12, + 0x1D2A, 0x3168, 0x3ADA, 0x31AB, 0x1A00, 0x9AC0, 0x1300, 0xF1FB, 0x7620, + 0x236E, 0x276F, 0x1A3C, 0x22A1, 0x41B5, 0x9EE2, 0x76E4, 0x486F, 0x9EE4, + 0xC602, 0xBE00, 0x4A26, 0x733A, 0x49BB, 0xC602, 0xBE00, 0x47A2, 0xC602, + 0xBE00, 0x0000, 0xC602, 0xBE00, 0x0000 }; rtl8125_hw_disable_mac_mcu_bps(dev); @@ -6056,9 +5612,8 @@ rtl8125_set_mac_mcu_8125b_2(struct net_device *dev) rtl8125_mac_ocp_write(tp, 0xFC2E, 0x12DA); rtl8125_mac_ocp_write(tp, 0xFC30, 0x4A20); rtl8125_mac_ocp_write(tp, 0xFC32, 0x47A0); - rtl8125_mac_ocp_write(tp, 0xFC34, 0x0A46); - rtl8125_mac_ocp_write(tp, 0xFC48, 0x007F); + rtl8125_mac_ocp_write(tp, 0xFC48, 0x003F); } static void @@ -6083,38 +5638,6 @@ rtl8125_hw_mac_mcu_config(struct net_device *dev) break; } } -#endif - -#ifdef ENABLE_USE_FIRMWARE_FILE -static void rtl8125_release_firmware(struct rtl8125_private *tp) -{ - if (tp->rtl_fw) { - rtl8125_fw_release_firmware(tp->rtl_fw); - kfree(tp->rtl_fw); - tp->rtl_fw = NULL; - } -} - -void rtl8125_apply_firmware(struct rtl8125_private *tp) -{ - /* TODO: release firmware if rtl_fw_write_firmware signals failure. */ - if (tp->rtl_fw) { - rtl8125_fw_write_firmware(tp, tp->rtl_fw); - /* At least one firmware doesn't reset tp->ocp_base. */ - tp->ocp_base = OCP_STD_PHY_BASE; - - /* PHY soft reset may still be in progress */ - //phy_read_poll_timeout(tp->phydev, MII_BMCR, val, - // !(val & BMCR_RESET), - // 50000, 600000, true); - rtl8125_wait_phy_reset_complete(tp); - - tp->hw_ram_code_ver = rtl8125_get_hw_phy_mcu_code_ver(tp); - tp->sw_ram_code_ver = tp->hw_ram_code_ver; - tp->HwHasWrRamCodeToMicroP = TRUE; - } -} -#endif static void rtl8125_hw_init(struct net_device *dev) @@ -6145,10 +5668,7 @@ rtl8125_hw_init(struct net_device *dev) break; } -#ifndef ENABLE_USE_FIRMWARE_FILE - if (!tp->rtl_fw) - rtl8125_hw_mac_mcu_config(dev); -#endif + rtl8125_hw_mac_mcu_config(dev); /*disable ocp phy power saving*/ if (tp->mcfg == CFG_METHOD_2 || @@ -6170,14 +5690,6 @@ rtl8125_hw_init(struct net_device *dev) rtl8125_set_pci_pme(tp, 0); if (s0_magic_packet == 1) rtl8125_enable_magic_packet(dev); - -#ifdef ENABLE_USE_FIRMWARE_FILE - if (tp->rtl_fw && - !tp->resume_not_chg_speed && - !(HW_DASH_SUPPORT_TYPE_3(tp) && - tp->HwPkgDet == 0x06)) - rtl8125_apply_firmware(tp); -#endif } static void @@ -6291,10 +5803,11 @@ rtl8125_hw_ephy_config(struct net_device *dev) } } -static u16 -rtl8125_get_hw_phy_mcu_code_ver(struct rtl8125_private *tp) +static int +rtl8125_check_hw_phy_mcu_code_ver(struct net_device *dev) { - u16 hw_ram_code_ver = ~0; + struct rtl8125_private *tp = netdev_priv(dev); + int ram_code_ver_match = 0; switch (tp->mcfg) { case CFG_METHOD_2: @@ -6302,22 +5815,14 @@ rtl8125_get_hw_phy_mcu_code_ver(struct rtl8125_private *tp) case CFG_METHOD_4: case CFG_METHOD_5: mdio_direct_write_phy_ocp(tp, 0xA436, 0x801E); - hw_ram_code_ver = mdio_direct_read_phy_ocp(tp, 0xA438); + tp->hw_ram_code_ver = mdio_direct_read_phy_ocp(tp, 0xA438); + break; + default: + tp->hw_ram_code_ver = ~0; break; } - return hw_ram_code_ver; -} - -static int -rtl8125_check_hw_phy_mcu_code_ver(struct net_device *dev) -{ - struct rtl8125_private *tp = netdev_priv(dev); - int ram_code_ver_match = 0; - - tp->hw_ram_code_ver = rtl8125_get_hw_phy_mcu_code_ver(tp); - - if (tp->hw_ram_code_ver == tp->sw_ram_code_ver) { + if ( tp->hw_ram_code_ver == tp->sw_ram_code_ver) { ram_code_ver_match = 1; tp->HwHasWrRamCodeToMicroP = TRUE; } @@ -6325,55 +5830,6 @@ rtl8125_check_hw_phy_mcu_code_ver(struct net_device *dev) return ram_code_ver_match; } -bool -rtl8125_set_phy_mcu_patch_request(struct rtl8125_private *tp) -{ - u16 gphy_val; - u16 WaitCount; - bool bSuccess = TRUE; - - SetEthPhyOcpBit(tp, 0xB820, BIT_4); - - WaitCount = 0; - do { - gphy_val = mdio_direct_read_phy_ocp(tp, 0xB800); - udelay(100); - WaitCount++; - } while (!(gphy_val & BIT_6) && (WaitCount < 1000)); - - if (!(gphy_val & BIT_6) && (WaitCount == 1000)) bSuccess = FALSE; - - if (!bSuccess) - dprintk("rtl8125_set_phy_mcu_patch_request fail.\n"); - - return bSuccess; -} - -bool -rtl8125_clear_phy_mcu_patch_request(struct rtl8125_private *tp) -{ - u16 gphy_val; - u16 WaitCount; - bool bSuccess = TRUE; - - ClearEthPhyOcpBit(tp, 0xB820, BIT_4); - - WaitCount = 0; - do { - gphy_val = mdio_direct_read_phy_ocp(tp, 0xB800); - udelay(100); - WaitCount++; - } while ((gphy_val & BIT_6) && (WaitCount < 1000)); - - if ((gphy_val & BIT_6) && (WaitCount == 1000)) bSuccess = FALSE; - - if (!bSuccess) - dprintk("rtl8125_clear_phy_mcu_patch_request fail.\n"); - - return bSuccess; -} - -#ifndef ENABLE_USE_FIRMWARE_FILE static void rtl8125_write_hw_phy_mcu_code_ver(struct net_device *dev) { @@ -6437,6 +5893,45 @@ rtl8125_release_phy_mcu_patch_key_lock(struct rtl8125_private *tp) } } +static bool +rtl8125_wait_phy_mcu_patch_request_ready(struct rtl8125_private *tp) +{ + u16 gphy_val; + u16 WaitCount; + bool bSuccess = TRUE; + + WaitCount = 0; + do { + gphy_val = mdio_direct_read_phy_ocp(tp, 0xB800); + gphy_val &= BIT_6; + udelay(100); + WaitCount++; + } while(gphy_val != BIT_6 && WaitCount < 1000); + + if (gphy_val != BIT_6 && WaitCount == 1000) bSuccess = FALSE; + + if (!bSuccess) + dprintk("rtl8125_wait_phy_mcu_patch_request_ready fail.\n"); + + return bSuccess; +} + +bool +rtl8125_set_phy_mcu_patch_request(struct rtl8125_private *tp) +{ + SetEthPhyOcpBit(tp, 0xB820, BIT_4); + + return rtl8125_wait_phy_mcu_patch_request_ready(tp); +} + +bool +rtl8125_clear_phy_mcu_patch_request(struct rtl8125_private *tp) +{ + ClearEthPhyOcpBit(tp, 0xB820, BIT_4); + + return rtl8125_wait_phy_mcu_patch_request_ready(tp); +} + static void rtl8125_set_phy_mcu_ram_code(struct net_device *dev, const u16 *ramcode, u16 codesize) { @@ -6462,69 +5957,6 @@ out: return; } -static void -rtl8125_enable_phy_disable_mode(struct net_device *dev) -{ - struct rtl8125_private *tp = netdev_priv(dev); - - switch (tp->HwSuppCheckPhyDisableModeVer) { - case 3: - RTL_W8(tp, 0xF2, RTL_R8(tp, 0xF2) | BIT_5); - break; - } - - dprintk("enable phy disable mode.\n"); -} - -static void -rtl8125_disable_phy_disable_mode(struct net_device *dev) -{ - struct rtl8125_private *tp = netdev_priv(dev); - - switch (tp->HwSuppCheckPhyDisableModeVer) { - case 3: - RTL_W8(tp, 0xF2, RTL_R8(tp, 0xF2) & ~BIT_5); - break; - } - - mdelay(1); - - dprintk("disable phy disable mode.\n"); -} - -static void -rtl8125_set_hw_phy_before_init_phy_mcu(struct net_device *dev) -{ - struct rtl8125_private *tp = netdev_priv(dev); - u16 PhyRegValue; - - switch (tp->mcfg) { - case CFG_METHOD_4: - mdio_direct_write_phy_ocp(tp, 0xBF86, 0x9000); - - SetEthPhyOcpBit(tp, 0xC402, BIT_10); - ClearEthPhyOcpBit(tp, 0xC402, BIT_10); - - PhyRegValue = mdio_direct_read_phy_ocp(tp, 0xBF86); - PhyRegValue &= (BIT_1 | BIT_0); - if (PhyRegValue != 0) - dprintk("PHY watch dog not clear, value = 0x%x \n", PhyRegValue); - - mdio_direct_write_phy_ocp(tp, 0xBD86, 0x1010); - mdio_direct_write_phy_ocp(tp, 0xBD88, 0x1010); - - ClearAndSetEthPhyOcpBit(tp, - 0xBD4E, - BIT_11 | BIT_10, - BIT_11); - ClearAndSetEthPhyOcpBit(tp, - 0xBF46, - BIT_11 | BIT_10 | BIT_9 | BIT_8, - BIT_10 | BIT_9 | BIT_8); - break; - } -} - static void rtl8125_real_set_phy_mcu_8125a_1(struct net_device *dev) { @@ -8571,249 +8003,243 @@ static const u16 phy_mcu_ram_code_8125b_2[] = { 0xa436, 0x8024, 0xa438, 0x3701, 0xa436, 0xB82E, 0xa438, 0x0001, 0xb820, 0x0090, 0xa436, 0xA016, 0xa438, 0x0000, 0xa436, 0xA012, 0xa438, 0x0000, 0xa436, 0xA014, 0xa438, 0x1800, 0xa438, 0x8010, - 0xa438, 0x1800, 0xa438, 0x801a, 0xa438, 0x1800, 0xa438, 0x803f, - 0xa438, 0x1800, 0xa438, 0x8045, 0xa438, 0x1800, 0xa438, 0x8067, - 0xa438, 0x1800, 0xa438, 0x806d, 0xa438, 0x1800, 0xa438, 0x8079, - 0xa438, 0x1800, 0xa438, 0x807e, 0xa438, 0xd093, 0xa438, 0xd1c4, + 0xa438, 0x1800, 0xa438, 0x801a, 0xa438, 0x1800, 0xa438, 0x8024, + 0xa438, 0x1800, 0xa438, 0x802f, 0xa438, 0x1800, 0xa438, 0x8051, + 0xa438, 0x1800, 0xa438, 0x8057, 0xa438, 0x1800, 0xa438, 0x8063, + 0xa438, 0x1800, 0xa438, 0x8068, 0xa438, 0xd093, 0xa438, 0xd1c4, 0xa438, 0x1000, 0xa438, 0x135c, 0xa438, 0xd704, 0xa438, 0x5fbc, 0xa438, 0xd504, 0xa438, 0xc9f1, 0xa438, 0x1800, 0xa438, 0x0fc9, 0xa438, 0xbb50, 0xa438, 0xd505, 0xa438, 0xa202, 0xa438, 0xd504, 0xa438, 0x8c0f, 0xa438, 0xd500, 0xa438, 0x1000, 0xa438, 0x1519, - 0xa438, 0x1000, 0xa438, 0x135c, 0xa438, 0xd75e, 0xa438, 0x5fae, - 0xa438, 0x9b50, 0xa438, 0x1000, 0xa438, 0x135c, 0xa438, 0xd75e, - 0xa438, 0x7fae, 0xa438, 0x1000, 0xa438, 0x135c, 0xa438, 0xd707, - 0xa438, 0x40a7, 0xa438, 0xd719, 0xa438, 0x4071, 0xa438, 0x1800, - 0xa438, 0x1557, 0xa438, 0xd719, 0xa438, 0x2f70, 0xa438, 0x803b, - 0xa438, 0x2f73, 0xa438, 0x156a, 0xa438, 0x5e70, 0xa438, 0x1800, - 0xa438, 0x155d, 0xa438, 0xd505, 0xa438, 0xa202, 0xa438, 0xd500, - 0xa438, 0xffed, 0xa438, 0xd709, 0xa438, 0x4054, 0xa438, 0xa788, - 0xa438, 0xd70b, 0xa438, 0x1800, 0xa438, 0x172a, 0xa438, 0xc0c1, - 0xa438, 0xc0c0, 0xa438, 0xd05a, 0xa438, 0xd1ba, 0xa438, 0xd701, - 0xa438, 0x2529, 0xa438, 0x022a, 0xa438, 0xd0a7, 0xa438, 0xd1b9, - 0xa438, 0xa208, 0xa438, 0x1000, 0xa438, 0x080e, 0xa438, 0xd701, - 0xa438, 0x408b, 0xa438, 0x1000, 0xa438, 0x0a65, 0xa438, 0xf003, - 0xa438, 0x1000, 0xa438, 0x0a6b, 0xa438, 0xd701, 0xa438, 0x1000, - 0xa438, 0x0920, 0xa438, 0x1000, 0xa438, 0x0915, 0xa438, 0x1000, - 0xa438, 0x0909, 0xa438, 0x228f, 0xa438, 0x804e, 0xa438, 0x9801, - 0xa438, 0xd71e, 0xa438, 0x5d61, 0xa438, 0xd701, 0xa438, 0x1800, - 0xa438, 0x022a, 0xa438, 0x2005, 0xa438, 0x091a, 0xa438, 0x3bd9, - 0xa438, 0x0919, 0xa438, 0x1800, 0xa438, 0x0916, 0xa438, 0x1000, - 0xa438, 0x14c5, 0xa438, 0xd703, 0xa438, 0x3181, 0xa438, 0x8077, - 0xa438, 0x60ad, 0xa438, 0x1000, 0xa438, 0x135c, 0xa438, 0xd703, - 0xa438, 0x5fba, 0xa438, 0x1800, 0xa438, 0x0cc7, 0xa438, 0xd096, - 0xa438, 0xd1a9, 0xa438, 0xd503, 0xa438, 0x1800, 0xa438, 0x0c94, - 0xa438, 0xa802, 0xa438, 0xa301, 0xa438, 0xa801, 0xa438, 0xc004, - 0xa438, 0xd710, 0xa438, 0x4000, 0xa438, 0x1800, 0xa438, 0x1e79, - 0xa436, 0xA026, 0xa438, 0x1e78, 0xa436, 0xA024, 0xa438, 0x0c93, - 0xa436, 0xA022, 0xa438, 0x0cc5, 0xa436, 0xA020, 0xa438, 0x0915, - 0xa436, 0xA006, 0xa438, 0x020a, 0xa436, 0xA004, 0xa438, 0x1726, - 0xa436, 0xA002, 0xa438, 0x1542, 0xa436, 0xA000, 0xa438, 0x0fc7, - 0xa436, 0xA008, 0xa438, 0xff00, 0xa436, 0xA016, 0xa438, 0x0010, - 0xa436, 0xA012, 0xa438, 0x0000, 0xa436, 0xA014, 0xa438, 0x1800, - 0xa438, 0x8010, 0xa438, 0x1800, 0xa438, 0x801d, 0xa438, 0x1800, + 0xa438, 0x1800, 0xa438, 0x1548, 0xa438, 0x2f70, 0xa438, 0x802a, + 0xa438, 0x2f73, 0xa438, 0x156a, 0xa438, 0x1800, 0xa438, 0x155c, + 0xa438, 0xd505, 0xa438, 0xa202, 0xa438, 0xd500, 0xa438, 0x1800, + 0xa438, 0x1551, 0xa438, 0xc0c1, 0xa438, 0xc0c0, 0xa438, 0xd05a, + 0xa438, 0xd1ba, 0xa438, 0xd701, 0xa438, 0x2529, 0xa438, 0x022a, + 0xa438, 0xd0a7, 0xa438, 0xd1b9, 0xa438, 0xa208, 0xa438, 0x1000, + 0xa438, 0x080e, 0xa438, 0xd701, 0xa438, 0x408b, 0xa438, 0x1000, + 0xa438, 0x0a65, 0xa438, 0xf003, 0xa438, 0x1000, 0xa438, 0x0a6b, + 0xa438, 0xd701, 0xa438, 0x1000, 0xa438, 0x0920, 0xa438, 0x1000, + 0xa438, 0x0915, 0xa438, 0x1000, 0xa438, 0x0909, 0xa438, 0x228f, + 0xa438, 0x8038, 0xa438, 0x9801, 0xa438, 0xd71e, 0xa438, 0x5d61, + 0xa438, 0xd701, 0xa438, 0x1800, 0xa438, 0x022a, 0xa438, 0x2005, + 0xa438, 0x091a, 0xa438, 0x3bd9, 0xa438, 0x0919, 0xa438, 0x1800, + 0xa438, 0x0916, 0xa438, 0x1000, 0xa438, 0x14c5, 0xa438, 0xd703, + 0xa438, 0x3181, 0xa438, 0x8061, 0xa438, 0x60ad, 0xa438, 0x1000, + 0xa438, 0x135c, 0xa438, 0xd703, 0xa438, 0x5fba, 0xa438, 0x1800, + 0xa438, 0x0cc7, 0xa438, 0xd096, 0xa438, 0xd1a9, 0xa438, 0xd503, + 0xa438, 0x1800, 0xa438, 0x0c94, 0xa438, 0xa802, 0xa438, 0xa301, + 0xa438, 0xa801, 0xa438, 0xc004, 0xa438, 0xd710, 0xa438, 0x4000, + 0xa438, 0x1800, 0xa438, 0x1e79, 0xa436, 0xA026, 0xa438, 0x1e78, + 0xa436, 0xA024, 0xa438, 0x0c93, 0xa436, 0xA022, 0xa438, 0x0cc5, + 0xa436, 0xA020, 0xa438, 0x0915, 0xa436, 0xA006, 0xa438, 0x020a, + 0xa436, 0xA004, 0xa438, 0x155b, 0xa436, 0xA002, 0xa438, 0x1542, + 0xa436, 0xA000, 0xa438, 0x0fc7, 0xa436, 0xA008, 0xa438, 0xff00, + 0xa436, 0xA016, 0xa438, 0x0010, 0xa436, 0xA012, 0xa438, 0x0000, + 0xa436, 0xA014, 0xa438, 0x1800, 0xa438, 0x8010, 0xa438, 0x1800, + 0xa438, 0x801d, 0xa438, 0x1800, 0xa438, 0x802c, 0xa438, 0x1800, 0xa438, 0x802c, 0xa438, 0x1800, 0xa438, 0x802c, 0xa438, 0x1800, 0xa438, 0x802c, 0xa438, 0x1800, 0xa438, 0x802c, 0xa438, 0x1800, - 0xa438, 0x802c, 0xa438, 0x1800, 0xa438, 0x802c, 0xa438, 0xd700, - 0xa438, 0x6090, 0xa438, 0x60d1, 0xa438, 0xc95c, 0xa438, 0xf007, - 0xa438, 0x60b1, 0xa438, 0xc95a, 0xa438, 0xf004, 0xa438, 0xc956, - 0xa438, 0xf002, 0xa438, 0xc94e, 0xa438, 0x1800, 0xa438, 0x00cd, - 0xa438, 0xd700, 0xa438, 0x6090, 0xa438, 0x60d1, 0xa438, 0xc95c, - 0xa438, 0xf007, 0xa438, 0x60b1, 0xa438, 0xc95a, 0xa438, 0xf004, - 0xa438, 0xc956, 0xa438, 0xf002, 0xa438, 0xc94e, 0xa438, 0x1000, - 0xa438, 0x022a, 0xa438, 0x1800, 0xa438, 0x0132, 0xa436, 0xA08E, - 0xa438, 0xffff, 0xa436, 0xA08C, 0xa438, 0xffff, 0xa436, 0xA08A, - 0xa438, 0xffff, 0xa436, 0xA088, 0xa438, 0xffff, 0xa436, 0xA086, - 0xa438, 0xffff, 0xa436, 0xA084, 0xa438, 0xffff, 0xa436, 0xA082, - 0xa438, 0x012f, 0xa436, 0xA080, 0xa438, 0x00cc, 0xa436, 0xA090, - 0xa438, 0x0103, 0xa436, 0xA016, 0xa438, 0x0020, 0xa436, 0xA012, - 0xa438, 0x0000, 0xa436, 0xA014, 0xa438, 0x1800, 0xa438, 0x8010, - 0xa438, 0x1800, 0xa438, 0x8020, 0xa438, 0x1800, 0xa438, 0x802a, - 0xa438, 0x1800, 0xa438, 0x8035, 0xa438, 0x1800, 0xa438, 0x803c, + 0xa438, 0x802c, 0xa438, 0xd700, 0xa438, 0x6090, 0xa438, 0x60d1, + 0xa438, 0xc95c, 0xa438, 0xf007, 0xa438, 0x60b1, 0xa438, 0xc95a, + 0xa438, 0xf004, 0xa438, 0xc956, 0xa438, 0xf002, 0xa438, 0xc94e, + 0xa438, 0x1800, 0xa438, 0x00cd, 0xa438, 0xd700, 0xa438, 0x6090, + 0xa438, 0x60d1, 0xa438, 0xc95c, 0xa438, 0xf007, 0xa438, 0x60b1, + 0xa438, 0xc95a, 0xa438, 0xf004, 0xa438, 0xc956, 0xa438, 0xf002, + 0xa438, 0xc94e, 0xa438, 0x1000, 0xa438, 0x022a, 0xa438, 0x1800, + 0xa438, 0x0132, 0xa436, 0xA08E, 0xa438, 0xffff, 0xa436, 0xA08C, + 0xa438, 0xffff, 0xa436, 0xA08A, 0xa438, 0xffff, 0xa436, 0xA088, + 0xa438, 0xffff, 0xa436, 0xA086, 0xa438, 0xffff, 0xa436, 0xA084, + 0xa438, 0xffff, 0xa436, 0xA082, 0xa438, 0x012f, 0xa436, 0xA080, + 0xa438, 0x00cc, 0xa436, 0xA090, 0xa438, 0x0103, 0xa436, 0xA016, + 0xa438, 0x0020, 0xa436, 0xA012, 0xa438, 0x0000, 0xa436, 0xA014, + 0xa438, 0x1800, 0xa438, 0x8010, 0xa438, 0x1800, 0xa438, 0x8020, + 0xa438, 0x1800, 0xa438, 0x802a, 0xa438, 0x1800, 0xa438, 0x8035, 0xa438, 0x1800, 0xa438, 0x803c, 0xa438, 0x1800, 0xa438, 0x803c, - 0xa438, 0x1800, 0xa438, 0x803c, 0xa438, 0xd107, 0xa438, 0xd042, - 0xa438, 0xa404, 0xa438, 0x1000, 0xa438, 0x09df, 0xa438, 0xd700, - 0xa438, 0x5fb4, 0xa438, 0x8280, 0xa438, 0xd700, 0xa438, 0x6065, - 0xa438, 0xd125, 0xa438, 0xf002, 0xa438, 0xd12b, 0xa438, 0xd040, - 0xa438, 0x1800, 0xa438, 0x077f, 0xa438, 0x0cf0, 0xa438, 0x0c50, - 0xa438, 0xd104, 0xa438, 0xd040, 0xa438, 0x1000, 0xa438, 0x0aa8, - 0xa438, 0xd700, 0xa438, 0x5fb4, 0xa438, 0x1800, 0xa438, 0x0a2e, - 0xa438, 0xcb9b, 0xa438, 0xd110, 0xa438, 0xd040, 0xa438, 0x1000, - 0xa438, 0x0b7b, 0xa438, 0x1000, 0xa438, 0x09df, 0xa438, 0xd700, - 0xa438, 0x5fb4, 0xa438, 0x1800, 0xa438, 0x081b, 0xa438, 0x1000, - 0xa438, 0x09df, 0xa438, 0xd704, 0xa438, 0x7fb8, 0xa438, 0xa718, - 0xa438, 0x1800, 0xa438, 0x074e, 0xa436, 0xA10E, 0xa438, 0xffff, - 0xa436, 0xA10C, 0xa438, 0xffff, 0xa436, 0xA10A, 0xa438, 0xffff, - 0xa436, 0xA108, 0xa438, 0xffff, 0xa436, 0xA106, 0xa438, 0x074d, - 0xa436, 0xA104, 0xa438, 0x0818, 0xa436, 0xA102, 0xa438, 0x0a2c, - 0xa436, 0xA100, 0xa438, 0x077e, 0xa436, 0xA110, 0xa438, 0x000f, - 0xa436, 0xb87c, 0xa438, 0x8625, 0xa436, 0xb87e, 0xa438, 0xaf86, - 0xa438, 0x3daf, 0xa438, 0x8689, 0xa438, 0xaf88, 0xa438, 0x69af, - 0xa438, 0x8887, 0xa438, 0xaf88, 0xa438, 0x9caf, 0xa438, 0x889c, - 0xa438, 0xaf88, 0xa438, 0x9caf, 0xa438, 0x889c, 0xa438, 0xbf86, - 0xa438, 0x49d7, 0xa438, 0x0040, 0xa438, 0x0277, 0xa438, 0x7daf, - 0xa438, 0x2727, 0xa438, 0x0000, 0xa438, 0x7205, 0xa438, 0x0000, - 0xa438, 0x7208, 0xa438, 0x0000, 0xa438, 0x71f3, 0xa438, 0x0000, - 0xa438, 0x71f6, 0xa438, 0x0000, 0xa438, 0x7229, 0xa438, 0x0000, - 0xa438, 0x722c, 0xa438, 0x0000, 0xa438, 0x7217, 0xa438, 0x0000, - 0xa438, 0x721a, 0xa438, 0x0000, 0xa438, 0x721d, 0xa438, 0x0000, - 0xa438, 0x7211, 0xa438, 0x0000, 0xa438, 0x7220, 0xa438, 0x0000, - 0xa438, 0x7214, 0xa438, 0x0000, 0xa438, 0x722f, 0xa438, 0x0000, - 0xa438, 0x7223, 0xa438, 0x0000, 0xa438, 0x7232, 0xa438, 0x0000, - 0xa438, 0x7226, 0xa438, 0xf8f9, 0xa438, 0xfae0, 0xa438, 0x85b3, - 0xa438, 0x3802, 0xa438, 0xad27, 0xa438, 0x02ae, 0xa438, 0x03af, - 0xa438, 0x8830, 0xa438, 0x1f66, 0xa438, 0xef65, 0xa438, 0xbfc2, - 0xa438, 0x1f1a, 0xa438, 0x96f7, 0xa438, 0x05ee, 0xa438, 0xffd2, - 0xa438, 0x00da, 0xa438, 0xf605, 0xa438, 0xbfc2, 0xa438, 0x2f1a, + 0xa438, 0x1800, 0xa438, 0x803c, 0xa438, 0x1800, 0xa438, 0x803c, + 0xa438, 0xd107, 0xa438, 0xd042, 0xa438, 0xa404, 0xa438, 0x1000, + 0xa438, 0x09df, 0xa438, 0xd700, 0xa438, 0x5fb4, 0xa438, 0x8280, + 0xa438, 0xd700, 0xa438, 0x6065, 0xa438, 0xd125, 0xa438, 0xf002, + 0xa438, 0xd12b, 0xa438, 0xd040, 0xa438, 0x1800, 0xa438, 0x077f, + 0xa438, 0x0cf0, 0xa438, 0x0c50, 0xa438, 0xd104, 0xa438, 0xd040, + 0xa438, 0x1000, 0xa438, 0x0aa8, 0xa438, 0xd700, 0xa438, 0x5fb4, + 0xa438, 0x1800, 0xa438, 0x0a2e, 0xa438, 0xcb9b, 0xa438, 0xd110, + 0xa438, 0xd040, 0xa438, 0x1000, 0xa438, 0x0b7b, 0xa438, 0x1000, + 0xa438, 0x09df, 0xa438, 0xd700, 0xa438, 0x5fb4, 0xa438, 0x1800, + 0xa438, 0x081b, 0xa438, 0x1000, 0xa438, 0x09df, 0xa438, 0xd704, + 0xa438, 0x7fb8, 0xa438, 0xa718, 0xa438, 0x1800, 0xa438, 0x074e, + 0xa436, 0xA10E, 0xa438, 0xffff, 0xa436, 0xA10C, 0xa438, 0xffff, + 0xa436, 0xA10A, 0xa438, 0xffff, 0xa436, 0xA108, 0xa438, 0xffff, + 0xa436, 0xA106, 0xa438, 0x074d, 0xa436, 0xA104, 0xa438, 0x0818, + 0xa436, 0xA102, 0xa438, 0x0a2c, 0xa436, 0xA100, 0xa438, 0x077e, + 0xa436, 0xA110, 0xa438, 0x000f, 0xa436, 0xb87c, 0xa438, 0x8625, + 0xa436, 0xb87e, 0xa438, 0xaf86, 0xa438, 0x3daf, 0xa438, 0x8689, + 0xa438, 0xaf88, 0xa438, 0x69af, 0xa438, 0x8887, 0xa438, 0xaf88, + 0xa438, 0x9caf, 0xa438, 0x889c, 0xa438, 0xaf88, 0xa438, 0x9caf, + 0xa438, 0x889c, 0xa438, 0xbf86, 0xa438, 0x49d7, 0xa438, 0x0040, + 0xa438, 0x0277, 0xa438, 0x7daf, 0xa438, 0x2727, 0xa438, 0x0000, + 0xa438, 0x7205, 0xa438, 0x0000, 0xa438, 0x7208, 0xa438, 0x0000, + 0xa438, 0x71f3, 0xa438, 0x0000, 0xa438, 0x71f6, 0xa438, 0x0000, + 0xa438, 0x7229, 0xa438, 0x0000, 0xa438, 0x722c, 0xa438, 0x0000, + 0xa438, 0x7217, 0xa438, 0x0000, 0xa438, 0x721a, 0xa438, 0x0000, + 0xa438, 0x721d, 0xa438, 0x0000, 0xa438, 0x7211, 0xa438, 0x0000, + 0xa438, 0x7220, 0xa438, 0x0000, 0xa438, 0x7214, 0xa438, 0x0000, + 0xa438, 0x722f, 0xa438, 0x0000, 0xa438, 0x7223, 0xa438, 0x0000, + 0xa438, 0x7232, 0xa438, 0x0000, 0xa438, 0x7226, 0xa438, 0xf8f9, + 0xa438, 0xfae0, 0xa438, 0x85b3, 0xa438, 0x3802, 0xa438, 0xad27, + 0xa438, 0x02ae, 0xa438, 0x03af, 0xa438, 0x8830, 0xa438, 0x1f66, + 0xa438, 0xef65, 0xa438, 0xbfc2, 0xa438, 0x1f1a, 0xa438, 0x96f7, + 0xa438, 0x05ee, 0xa438, 0xffd2, 0xa438, 0x00da, 0xa438, 0xf605, + 0xa438, 0xbfc2, 0xa438, 0x2f1a, 0xa438, 0x96f7, 0xa438, 0x05ee, + 0xa438, 0xffd2, 0xa438, 0x00db, 0xa438, 0xf605, 0xa438, 0xef02, + 0xa438, 0x1f11, 0xa438, 0x0d42, 0xa438, 0xbf88, 0xa438, 0x4202, + 0xa438, 0x6e7d, 0xa438, 0xef02, 0xa438, 0x1b03, 0xa438, 0x1f11, + 0xa438, 0x0d42, 0xa438, 0xbf88, 0xa438, 0x4502, 0xa438, 0x6e7d, + 0xa438, 0xef02, 0xa438, 0x1a03, 0xa438, 0x1f11, 0xa438, 0x0d42, + 0xa438, 0xbf88, 0xa438, 0x4802, 0xa438, 0x6e7d, 0xa438, 0xbfc2, + 0xa438, 0x3f1a, 0xa438, 0x96f7, 0xa438, 0x05ee, 0xa438, 0xffd2, + 0xa438, 0x00da, 0xa438, 0xf605, 0xa438, 0xbfc2, 0xa438, 0x4f1a, 0xa438, 0x96f7, 0xa438, 0x05ee, 0xa438, 0xffd2, 0xa438, 0x00db, 0xa438, 0xf605, 0xa438, 0xef02, 0xa438, 0x1f11, 0xa438, 0x0d42, - 0xa438, 0xbf88, 0xa438, 0x4202, 0xa438, 0x6e7d, 0xa438, 0xef02, + 0xa438, 0xbf88, 0xa438, 0x4b02, 0xa438, 0x6e7d, 0xa438, 0xef02, 0xa438, 0x1b03, 0xa438, 0x1f11, 0xa438, 0x0d42, 0xa438, 0xbf88, - 0xa438, 0x4502, 0xa438, 0x6e7d, 0xa438, 0xef02, 0xa438, 0x1a03, - 0xa438, 0x1f11, 0xa438, 0x0d42, 0xa438, 0xbf88, 0xa438, 0x4802, - 0xa438, 0x6e7d, 0xa438, 0xbfc2, 0xa438, 0x3f1a, 0xa438, 0x96f7, - 0xa438, 0x05ee, 0xa438, 0xffd2, 0xa438, 0x00da, 0xa438, 0xf605, - 0xa438, 0xbfc2, 0xa438, 0x4f1a, 0xa438, 0x96f7, 0xa438, 0x05ee, - 0xa438, 0xffd2, 0xa438, 0x00db, 0xa438, 0xf605, 0xa438, 0xef02, - 0xa438, 0x1f11, 0xa438, 0x0d42, 0xa438, 0xbf88, 0xa438, 0x4b02, - 0xa438, 0x6e7d, 0xa438, 0xef02, 0xa438, 0x1b03, 0xa438, 0x1f11, - 0xa438, 0x0d42, 0xa438, 0xbf88, 0xa438, 0x4e02, 0xa438, 0x6e7d, - 0xa438, 0xef02, 0xa438, 0x1a03, 0xa438, 0x1f11, 0xa438, 0x0d42, - 0xa438, 0xbf88, 0xa438, 0x5102, 0xa438, 0x6e7d, 0xa438, 0xef56, - 0xa438, 0xd020, 0xa438, 0x1f11, 0xa438, 0xbf88, 0xa438, 0x5402, - 0xa438, 0x6e7d, 0xa438, 0xbf88, 0xa438, 0x5702, 0xa438, 0x6e7d, - 0xa438, 0xbf88, 0xa438, 0x5a02, 0xa438, 0x6e7d, 0xa438, 0xe185, - 0xa438, 0xa0ef, 0xa438, 0x0348, 0xa438, 0x0a28, 0xa438, 0x05ef, - 0xa438, 0x201b, 0xa438, 0x01ad, 0xa438, 0x2735, 0xa438, 0x1f44, - 0xa438, 0xe085, 0xa438, 0x88e1, 0xa438, 0x8589, 0xa438, 0xbf88, - 0xa438, 0x5d02, 0xa438, 0x6e7d, 0xa438, 0xe085, 0xa438, 0x8ee1, - 0xa438, 0x858f, 0xa438, 0xbf88, 0xa438, 0x6002, 0xa438, 0x6e7d, - 0xa438, 0xe085, 0xa438, 0x94e1, 0xa438, 0x8595, 0xa438, 0xbf88, - 0xa438, 0x6302, 0xa438, 0x6e7d, 0xa438, 0xe085, 0xa438, 0x9ae1, - 0xa438, 0x859b, 0xa438, 0xbf88, 0xa438, 0x6602, 0xa438, 0x6e7d, - 0xa438, 0xaf88, 0xa438, 0x3cbf, 0xa438, 0x883f, 0xa438, 0x026e, - 0xa438, 0x9cad, 0xa438, 0x2835, 0xa438, 0x1f44, 0xa438, 0xe08f, - 0xa438, 0xf8e1, 0xa438, 0x8ff9, 0xa438, 0xbf88, 0xa438, 0x5d02, - 0xa438, 0x6e7d, 0xa438, 0xe08f, 0xa438, 0xfae1, 0xa438, 0x8ffb, - 0xa438, 0xbf88, 0xa438, 0x6002, 0xa438, 0x6e7d, 0xa438, 0xe08f, - 0xa438, 0xfce1, 0xa438, 0x8ffd, 0xa438, 0xbf88, 0xa438, 0x6302, - 0xa438, 0x6e7d, 0xa438, 0xe08f, 0xa438, 0xfee1, 0xa438, 0x8fff, - 0xa438, 0xbf88, 0xa438, 0x6602, 0xa438, 0x6e7d, 0xa438, 0xaf88, - 0xa438, 0x3ce1, 0xa438, 0x85a1, 0xa438, 0x1b21, 0xa438, 0xad37, - 0xa438, 0x341f, 0xa438, 0x44e0, 0xa438, 0x858a, 0xa438, 0xe185, - 0xa438, 0x8bbf, 0xa438, 0x885d, 0xa438, 0x026e, 0xa438, 0x7de0, - 0xa438, 0x8590, 0xa438, 0xe185, 0xa438, 0x91bf, 0xa438, 0x8860, - 0xa438, 0x026e, 0xa438, 0x7de0, 0xa438, 0x8596, 0xa438, 0xe185, - 0xa438, 0x97bf, 0xa438, 0x8863, 0xa438, 0x026e, 0xa438, 0x7de0, - 0xa438, 0x859c, 0xa438, 0xe185, 0xa438, 0x9dbf, 0xa438, 0x8866, - 0xa438, 0x026e, 0xa438, 0x7dae, 0xa438, 0x401f, 0xa438, 0x44e0, - 0xa438, 0x858c, 0xa438, 0xe185, 0xa438, 0x8dbf, 0xa438, 0x885d, - 0xa438, 0x026e, 0xa438, 0x7de0, 0xa438, 0x8592, 0xa438, 0xe185, - 0xa438, 0x93bf, 0xa438, 0x8860, 0xa438, 0x026e, 0xa438, 0x7de0, - 0xa438, 0x8598, 0xa438, 0xe185, 0xa438, 0x99bf, 0xa438, 0x8863, - 0xa438, 0x026e, 0xa438, 0x7de0, 0xa438, 0x859e, 0xa438, 0xe185, - 0xa438, 0x9fbf, 0xa438, 0x8866, 0xa438, 0x026e, 0xa438, 0x7dae, - 0xa438, 0x0ce1, 0xa438, 0x85b3, 0xa438, 0x3904, 0xa438, 0xac2f, - 0xa438, 0x04ee, 0xa438, 0x85b3, 0xa438, 0x00af, 0xa438, 0x39d9, - 0xa438, 0x22ac, 0xa438, 0xeaf0, 0xa438, 0xacf6, 0xa438, 0xf0ac, - 0xa438, 0xfaf0, 0xa438, 0xacf8, 0xa438, 0xf0ac, 0xa438, 0xfcf0, - 0xa438, 0xad00, 0xa438, 0xf0ac, 0xa438, 0xfef0, 0xa438, 0xacf0, - 0xa438, 0xf0ac, 0xa438, 0xf4f0, 0xa438, 0xacf2, 0xa438, 0xf0ac, - 0xa438, 0xb0f0, 0xa438, 0xacae, 0xa438, 0xf0ac, 0xa438, 0xacf0, - 0xa438, 0xacaa, 0xa438, 0xa100, 0xa438, 0x0ce1, 0xa438, 0x8ff7, + 0xa438, 0x4e02, 0xa438, 0x6e7d, 0xa438, 0xef02, 0xa438, 0x1a03, + 0xa438, 0x1f11, 0xa438, 0x0d42, 0xa438, 0xbf88, 0xa438, 0x5102, + 0xa438, 0x6e7d, 0xa438, 0xef56, 0xa438, 0xd020, 0xa438, 0x1f11, + 0xa438, 0xbf88, 0xa438, 0x5402, 0xa438, 0x6e7d, 0xa438, 0xbf88, + 0xa438, 0x5702, 0xa438, 0x6e7d, 0xa438, 0xbf88, 0xa438, 0x5a02, + 0xa438, 0x6e7d, 0xa438, 0xe185, 0xa438, 0xa0ef, 0xa438, 0x0348, + 0xa438, 0x0a28, 0xa438, 0x05ef, 0xa438, 0x201b, 0xa438, 0x01ad, + 0xa438, 0x2735, 0xa438, 0x1f44, 0xa438, 0xe085, 0xa438, 0x88e1, + 0xa438, 0x8589, 0xa438, 0xbf88, 0xa438, 0x5d02, 0xa438, 0x6e7d, + 0xa438, 0xe085, 0xa438, 0x8ee1, 0xa438, 0x858f, 0xa438, 0xbf88, + 0xa438, 0x6002, 0xa438, 0x6e7d, 0xa438, 0xe085, 0xa438, 0x94e1, + 0xa438, 0x8595, 0xa438, 0xbf88, 0xa438, 0x6302, 0xa438, 0x6e7d, + 0xa438, 0xe085, 0xa438, 0x9ae1, 0xa438, 0x859b, 0xa438, 0xbf88, + 0xa438, 0x6602, 0xa438, 0x6e7d, 0xa438, 0xaf88, 0xa438, 0x3cbf, + 0xa438, 0x883f, 0xa438, 0x026e, 0xa438, 0x9cad, 0xa438, 0x2835, + 0xa438, 0x1f44, 0xa438, 0xe08f, 0xa438, 0xf8e1, 0xa438, 0x8ff9, + 0xa438, 0xbf88, 0xa438, 0x5d02, 0xa438, 0x6e7d, 0xa438, 0xe08f, + 0xa438, 0xfae1, 0xa438, 0x8ffb, 0xa438, 0xbf88, 0xa438, 0x6002, + 0xa438, 0x6e7d, 0xa438, 0xe08f, 0xa438, 0xfce1, 0xa438, 0x8ffd, + 0xa438, 0xbf88, 0xa438, 0x6302, 0xa438, 0x6e7d, 0xa438, 0xe08f, + 0xa438, 0xfee1, 0xa438, 0x8fff, 0xa438, 0xbf88, 0xa438, 0x6602, + 0xa438, 0x6e7d, 0xa438, 0xaf88, 0xa438, 0x3ce1, 0xa438, 0x85a1, + 0xa438, 0x1b21, 0xa438, 0xad37, 0xa438, 0x341f, 0xa438, 0x44e0, + 0xa438, 0x858a, 0xa438, 0xe185, 0xa438, 0x8bbf, 0xa438, 0x885d, + 0xa438, 0x026e, 0xa438, 0x7de0, 0xa438, 0x8590, 0xa438, 0xe185, + 0xa438, 0x91bf, 0xa438, 0x8860, 0xa438, 0x026e, 0xa438, 0x7de0, + 0xa438, 0x8596, 0xa438, 0xe185, 0xa438, 0x97bf, 0xa438, 0x8863, + 0xa438, 0x026e, 0xa438, 0x7de0, 0xa438, 0x859c, 0xa438, 0xe185, + 0xa438, 0x9dbf, 0xa438, 0x8866, 0xa438, 0x026e, 0xa438, 0x7dae, + 0xa438, 0x401f, 0xa438, 0x44e0, 0xa438, 0x858c, 0xa438, 0xe185, + 0xa438, 0x8dbf, 0xa438, 0x885d, 0xa438, 0x026e, 0xa438, 0x7de0, + 0xa438, 0x8592, 0xa438, 0xe185, 0xa438, 0x93bf, 0xa438, 0x8860, + 0xa438, 0x026e, 0xa438, 0x7de0, 0xa438, 0x8598, 0xa438, 0xe185, + 0xa438, 0x99bf, 0xa438, 0x8863, 0xa438, 0x026e, 0xa438, 0x7de0, + 0xa438, 0x859e, 0xa438, 0xe185, 0xa438, 0x9fbf, 0xa438, 0x8866, + 0xa438, 0x026e, 0xa438, 0x7dae, 0xa438, 0x0ce1, 0xa438, 0x85b3, + 0xa438, 0x3904, 0xa438, 0xac2f, 0xa438, 0x04ee, 0xa438, 0x85b3, + 0xa438, 0x00af, 0xa438, 0x39d9, 0xa438, 0x22ac, 0xa438, 0xeaf0, + 0xa438, 0xacf6, 0xa438, 0xf0ac, 0xa438, 0xfaf0, 0xa438, 0xacf8, + 0xa438, 0xf0ac, 0xa438, 0xfcf0, 0xa438, 0xad00, 0xa438, 0xf0ac, + 0xa438, 0xfef0, 0xa438, 0xacf0, 0xa438, 0xf0ac, 0xa438, 0xf4f0, + 0xa438, 0xacf2, 0xa438, 0xf0ac, 0xa438, 0xb0f0, 0xa438, 0xacae, + 0xa438, 0xf0ac, 0xa438, 0xacf0, 0xa438, 0xacaa, 0xa438, 0xa100, + 0xa438, 0x0ce1, 0xa438, 0x8ff7, 0xa438, 0xbf88, 0xa438, 0x8402, + 0xa438, 0x6e7d, 0xa438, 0xaf26, 0xa438, 0xe9e1, 0xa438, 0x8ff6, 0xa438, 0xbf88, 0xa438, 0x8402, 0xa438, 0x6e7d, 0xa438, 0xaf26, - 0xa438, 0xe9e1, 0xa438, 0x8ff6, 0xa438, 0xbf88, 0xa438, 0x8402, - 0xa438, 0x6e7d, 0xa438, 0xaf26, 0xa438, 0xf520, 0xa438, 0xac86, - 0xa438, 0xbf88, 0xa438, 0x3f02, 0xa438, 0x6e9c, 0xa438, 0xad28, - 0xa438, 0x03af, 0xa438, 0x3324, 0xa438, 0xad38, 0xa438, 0x03af, - 0xa438, 0x32e6, 0xa438, 0xaf32, 0xa438, 0xfb00, 0xa436, 0xb87c, - 0xa438, 0x8ff6, 0xa436, 0xb87e, 0xa438, 0x0705, 0xa436, 0xb87c, - 0xa438, 0x8ff8, 0xa436, 0xb87e, 0xa438, 0x19cc, 0xa436, 0xb87c, - 0xa438, 0x8ffa, 0xa436, 0xb87e, 0xa438, 0x28e3, 0xa436, 0xb87c, - 0xa438, 0x8ffc, 0xa436, 0xb87e, 0xa438, 0x1047, 0xa436, 0xb87c, - 0xa438, 0x8ffe, 0xa436, 0xb87e, 0xa438, 0x0a45, 0xa436, 0xb85e, - 0xa438, 0x271E, 0xa436, 0xb860, 0xa438, 0x3846, 0xa436, 0xb862, - 0xa438, 0x26E6, 0xa436, 0xb864, 0xa438, 0x32E3, 0xa436, 0xb886, - 0xa438, 0xffff, 0xa436, 0xb888, 0xa438, 0xffff, 0xa436, 0xb88a, - 0xa438, 0xffff, 0xa436, 0xb88c, 0xa438, 0xffff, 0xa436, 0xb838, - 0xa438, 0x000f, 0xb820, 0x0010, 0xa436, 0x846e, 0xa438, 0xaf84, - 0xa438, 0x86af, 0xa438, 0x8690, 0xa438, 0xaf86, 0xa438, 0xa4af, - 0xa438, 0x86a4, 0xa438, 0xaf86, 0xa438, 0xa4af, 0xa438, 0x86a4, - 0xa438, 0xaf86, 0xa438, 0xa4af, 0xa438, 0x86a4, 0xa438, 0xee82, - 0xa438, 0x5f00, 0xa438, 0x0284, 0xa438, 0x90af, 0xa438, 0x0441, - 0xa438, 0xf8e0, 0xa438, 0x8ff3, 0xa438, 0xa000, 0xa438, 0x0502, - 0xa438, 0x84a4, 0xa438, 0xae06, 0xa438, 0xa001, 0xa438, 0x0302, - 0xa438, 0x84c8, 0xa438, 0xfc04, 0xa438, 0xf8f9, 0xa438, 0xef59, - 0xa438, 0xe080, 0xa438, 0x15ad, 0xa438, 0x2702, 0xa438, 0xae03, - 0xa438, 0xaf84, 0xa438, 0xc3bf, 0xa438, 0x53ca, 0xa438, 0x0252, - 0xa438, 0xc8ad, 0xa438, 0x2807, 0xa438, 0x0285, 0xa438, 0x2cee, - 0xa438, 0x8ff3, 0xa438, 0x01ef, 0xa438, 0x95fd, 0xa438, 0xfc04, - 0xa438, 0xf8f9, 0xa438, 0xfaef, 0xa438, 0x69bf, 0xa438, 0x53ca, - 0xa438, 0x0252, 0xa438, 0xc8ac, 0xa438, 0x2822, 0xa438, 0xd480, - 0xa438, 0x00bf, 0xa438, 0x8684, 0xa438, 0x0252, 0xa438, 0xa9bf, - 0xa438, 0x8687, 0xa438, 0x0252, 0xa438, 0xa9bf, 0xa438, 0x868a, - 0xa438, 0x0252, 0xa438, 0xa9bf, 0xa438, 0x868d, 0xa438, 0x0252, - 0xa438, 0xa9ee, 0xa438, 0x8ff3, 0xa438, 0x00af, 0xa438, 0x8526, - 0xa438, 0xe08f, 0xa438, 0xf4e1, 0xa438, 0x8ff5, 0xa438, 0xe28f, - 0xa438, 0xf6e3, 0xa438, 0x8ff7, 0xa438, 0x1b45, 0xa438, 0xac27, - 0xa438, 0x0eee, 0xa438, 0x8ff4, 0xa438, 0x00ee, 0xa438, 0x8ff5, - 0xa438, 0x0002, 0xa438, 0x852c, 0xa438, 0xaf85, 0xa438, 0x26e0, - 0xa438, 0x8ff4, 0xa438, 0xe18f, 0xa438, 0xf52c, 0xa438, 0x0001, - 0xa438, 0xe48f, 0xa438, 0xf4e5, 0xa438, 0x8ff5, 0xa438, 0xef96, - 0xa438, 0xfefd, 0xa438, 0xfc04, 0xa438, 0xf8f9, 0xa438, 0xef59, - 0xa438, 0xbf53, 0xa438, 0x2202, 0xa438, 0x52c8, 0xa438, 0xa18b, - 0xa438, 0x02ae, 0xa438, 0x03af, 0xa438, 0x85da, 0xa438, 0xbf57, - 0xa438, 0x7202, 0xa438, 0x52c8, 0xa438, 0xe48f, 0xa438, 0xf8e5, - 0xa438, 0x8ff9, 0xa438, 0xbf57, 0xa438, 0x7502, 0xa438, 0x52c8, - 0xa438, 0xe48f, 0xa438, 0xfae5, 0xa438, 0x8ffb, 0xa438, 0xbf57, - 0xa438, 0x7802, 0xa438, 0x52c8, 0xa438, 0xe48f, 0xa438, 0xfce5, - 0xa438, 0x8ffd, 0xa438, 0xbf57, 0xa438, 0x7b02, 0xa438, 0x52c8, - 0xa438, 0xe48f, 0xa438, 0xfee5, 0xa438, 0x8fff, 0xa438, 0xbf57, - 0xa438, 0x6c02, 0xa438, 0x52c8, 0xa438, 0xa102, 0xa438, 0x13ee, - 0xa438, 0x8ffc, 0xa438, 0x80ee, 0xa438, 0x8ffd, 0xa438, 0x00ee, - 0xa438, 0x8ffe, 0xa438, 0x80ee, 0xa438, 0x8fff, 0xa438, 0x00af, - 0xa438, 0x8599, 0xa438, 0xa101, 0xa438, 0x0cbf, 0xa438, 0x534c, - 0xa438, 0x0252, 0xa438, 0xc8a1, 0xa438, 0x0303, 0xa438, 0xaf85, - 0xa438, 0x77bf, 0xa438, 0x5322, 0xa438, 0x0252, 0xa438, 0xc8a1, - 0xa438, 0x8b02, 0xa438, 0xae03, 0xa438, 0xaf86, 0xa438, 0x64e0, - 0xa438, 0x8ff8, 0xa438, 0xe18f, 0xa438, 0xf9bf, 0xa438, 0x8684, - 0xa438, 0x0252, 0xa438, 0xa9e0, 0xa438, 0x8ffa, 0xa438, 0xe18f, - 0xa438, 0xfbbf, 0xa438, 0x8687, 0xa438, 0x0252, 0xa438, 0xa9e0, - 0xa438, 0x8ffc, 0xa438, 0xe18f, 0xa438, 0xfdbf, 0xa438, 0x868a, - 0xa438, 0x0252, 0xa438, 0xa9e0, 0xa438, 0x8ffe, 0xa438, 0xe18f, - 0xa438, 0xffbf, 0xa438, 0x868d, 0xa438, 0x0252, 0xa438, 0xa9af, - 0xa438, 0x867f, 0xa438, 0xbf53, 0xa438, 0x2202, 0xa438, 0x52c8, - 0xa438, 0xa144, 0xa438, 0x3cbf, 0xa438, 0x547b, 0xa438, 0x0252, - 0xa438, 0xc8e4, 0xa438, 0x8ff8, 0xa438, 0xe58f, 0xa438, 0xf9bf, - 0xa438, 0x547e, 0xa438, 0x0252, 0xa438, 0xc8e4, 0xa438, 0x8ffa, - 0xa438, 0xe58f, 0xa438, 0xfbbf, 0xa438, 0x5481, 0xa438, 0x0252, - 0xa438, 0xc8e4, 0xa438, 0x8ffc, 0xa438, 0xe58f, 0xa438, 0xfdbf, - 0xa438, 0x5484, 0xa438, 0x0252, 0xa438, 0xc8e4, 0xa438, 0x8ffe, - 0xa438, 0xe58f, 0xa438, 0xffbf, 0xa438, 0x5322, 0xa438, 0x0252, - 0xa438, 0xc8a1, 0xa438, 0x4448, 0xa438, 0xaf85, 0xa438, 0xa7bf, - 0xa438, 0x5322, 0xa438, 0x0252, 0xa438, 0xc8a1, 0xa438, 0x313c, - 0xa438, 0xbf54, 0xa438, 0x7b02, 0xa438, 0x52c8, 0xa438, 0xe48f, - 0xa438, 0xf8e5, 0xa438, 0x8ff9, 0xa438, 0xbf54, 0xa438, 0x7e02, - 0xa438, 0x52c8, 0xa438, 0xe48f, 0xa438, 0xfae5, 0xa438, 0x8ffb, - 0xa438, 0xbf54, 0xa438, 0x8102, 0xa438, 0x52c8, 0xa438, 0xe48f, - 0xa438, 0xfce5, 0xa438, 0x8ffd, 0xa438, 0xbf54, 0xa438, 0x8402, - 0xa438, 0x52c8, 0xa438, 0xe48f, 0xa438, 0xfee5, 0xa438, 0x8fff, - 0xa438, 0xbf53, 0xa438, 0x2202, 0xa438, 0x52c8, 0xa438, 0xa131, - 0xa438, 0x03af, 0xa438, 0x85a7, 0xa438, 0xd480, 0xa438, 0x00bf, - 0xa438, 0x8684, 0xa438, 0x0252, 0xa438, 0xa9bf, 0xa438, 0x8687, - 0xa438, 0x0252, 0xa438, 0xa9bf, 0xa438, 0x868a, 0xa438, 0x0252, - 0xa438, 0xa9bf, 0xa438, 0x868d, 0xa438, 0x0252, 0xa438, 0xa9ef, - 0xa438, 0x95fd, 0xa438, 0xfc04, 0xa438, 0xf0d1, 0xa438, 0x2af0, - 0xa438, 0xd12c, 0xa438, 0xf0d1, 0xa438, 0x44f0, 0xa438, 0xd146, - 0xa438, 0xbf86, 0xa438, 0xa102, 0xa438, 0x52c8, 0xa438, 0xbf86, - 0xa438, 0xa102, 0xa438, 0x52c8, 0xa438, 0xd101, 0xa438, 0xaf06, - 0xa438, 0xa570, 0xa438, 0xce42, 0xa436, 0xb818, 0xa438, 0x043d, - 0xa436, 0xb81a, 0xa438, 0x06a3, 0xa436, 0xb81c, 0xa438, 0xffff, - 0xa436, 0xb81e, 0xa438, 0xffff, 0xa436, 0xb850, 0xa438, 0xffff, - 0xa436, 0xb852, 0xa438, 0xffff, 0xa436, 0xb878, 0xa438, 0xffff, - 0xa436, 0xb884, 0xa438, 0xffff, 0xa436, 0xb832, 0xa438, 0x0003, - 0xa436, 0x0000, 0xa438, 0x0000, 0xa436, 0xB82E, 0xa438, 0x0000, - 0xa436, 0x8024, 0xa438, 0x0000, 0xb820, 0x0000, 0xa436, 0x801E, - 0xa438, 0x0020, 0xFFFF, 0xFFFF + 0xa438, 0xf520, 0xa438, 0xac86, 0xa438, 0xbf88, 0xa438, 0x3f02, + 0xa438, 0x6e9c, 0xa438, 0xad28, 0xa438, 0x03af, 0xa438, 0x3324, + 0xa438, 0xad38, 0xa438, 0x03af, 0xa438, 0x32e6, 0xa438, 0xaf32, + 0xa438, 0xfb00, 0xa436, 0xb87c, 0xa438, 0x8ff6, 0xa436, 0xb87e, + 0xa438, 0x0705, 0xa436, 0xb87c, 0xa438, 0x8ff8, 0xa436, 0xb87e, + 0xa438, 0x19cc, 0xa436, 0xb87c, 0xa438, 0x8ffa, 0xa436, 0xb87e, + 0xa438, 0x28e3, 0xa436, 0xb87c, 0xa438, 0x8ffc, 0xa436, 0xb87e, + 0xa438, 0x1047, 0xa436, 0xb87c, 0xa438, 0x8ffe, 0xa436, 0xb87e, + 0xa438, 0x0a45, 0xa436, 0xb85e, 0xa438, 0x271E, 0xa436, 0xb860, + 0xa438, 0x3846, 0xa436, 0xb862, 0xa438, 0x26E6, 0xa436, 0xb864, + 0xa438, 0x32E3, 0xa436, 0xb886, 0xa438, 0xffff, 0xa436, 0xb888, + 0xa438, 0xffff, 0xa436, 0xb88a, 0xa438, 0xffff, 0xa436, 0xb88c, + 0xa438, 0xffff, 0xa436, 0xb838, 0xa438, 0x000f, 0xb820, 0x0010, + 0xa436, 0x846e, 0xa438, 0xaf84, 0xa438, 0x86af, 0xa438, 0x8690, + 0xa438, 0xaf86, 0xa438, 0xa4af, 0xa438, 0x86a4, 0xa438, 0xaf86, + 0xa438, 0xa4af, 0xa438, 0x86a4, 0xa438, 0xaf86, 0xa438, 0xa4af, + 0xa438, 0x86a4, 0xa438, 0xee82, 0xa438, 0x5f00, 0xa438, 0x0284, + 0xa438, 0x90af, 0xa438, 0x0441, 0xa438, 0xf8e0, 0xa438, 0x8ff3, + 0xa438, 0xa000, 0xa438, 0x0502, 0xa438, 0x84a4, 0xa438, 0xae06, + 0xa438, 0xa001, 0xa438, 0x0302, 0xa438, 0x84c8, 0xa438, 0xfc04, + 0xa438, 0xf8f9, 0xa438, 0xef59, 0xa438, 0xe080, 0xa438, 0x15ad, + 0xa438, 0x2702, 0xa438, 0xae03, 0xa438, 0xaf84, 0xa438, 0xc3bf, + 0xa438, 0x53ca, 0xa438, 0x0252, 0xa438, 0xc8ad, 0xa438, 0x2807, + 0xa438, 0x0285, 0xa438, 0x2cee, 0xa438, 0x8ff3, 0xa438, 0x01ef, + 0xa438, 0x95fd, 0xa438, 0xfc04, 0xa438, 0xf8f9, 0xa438, 0xfaef, + 0xa438, 0x69bf, 0xa438, 0x53ca, 0xa438, 0x0252, 0xa438, 0xc8ac, + 0xa438, 0x2822, 0xa438, 0xd480, 0xa438, 0x00bf, 0xa438, 0x8684, + 0xa438, 0x0252, 0xa438, 0xa9bf, 0xa438, 0x8687, 0xa438, 0x0252, + 0xa438, 0xa9bf, 0xa438, 0x868a, 0xa438, 0x0252, 0xa438, 0xa9bf, + 0xa438, 0x868d, 0xa438, 0x0252, 0xa438, 0xa9ee, 0xa438, 0x8ff3, + 0xa438, 0x00af, 0xa438, 0x8526, 0xa438, 0xe08f, 0xa438, 0xf4e1, + 0xa438, 0x8ff5, 0xa438, 0xe28f, 0xa438, 0xf6e3, 0xa438, 0x8ff7, + 0xa438, 0x1b45, 0xa438, 0xac27, 0xa438, 0x0eee, 0xa438, 0x8ff4, + 0xa438, 0x00ee, 0xa438, 0x8ff5, 0xa438, 0x0002, 0xa438, 0x852c, + 0xa438, 0xaf85, 0xa438, 0x26e0, 0xa438, 0x8ff4, 0xa438, 0xe18f, + 0xa438, 0xf52c, 0xa438, 0x0001, 0xa438, 0xe48f, 0xa438, 0xf4e5, + 0xa438, 0x8ff5, 0xa438, 0xef96, 0xa438, 0xfefd, 0xa438, 0xfc04, + 0xa438, 0xf8f9, 0xa438, 0xef59, 0xa438, 0xbf53, 0xa438, 0x2202, + 0xa438, 0x52c8, 0xa438, 0xa18b, 0xa438, 0x02ae, 0xa438, 0x03af, + 0xa438, 0x85da, 0xa438, 0xbf57, 0xa438, 0x7202, 0xa438, 0x52c8, + 0xa438, 0xe48f, 0xa438, 0xf8e5, 0xa438, 0x8ff9, 0xa438, 0xbf57, + 0xa438, 0x7502, 0xa438, 0x52c8, 0xa438, 0xe48f, 0xa438, 0xfae5, + 0xa438, 0x8ffb, 0xa438, 0xbf57, 0xa438, 0x7802, 0xa438, 0x52c8, + 0xa438, 0xe48f, 0xa438, 0xfce5, 0xa438, 0x8ffd, 0xa438, 0xbf57, + 0xa438, 0x7b02, 0xa438, 0x52c8, 0xa438, 0xe48f, 0xa438, 0xfee5, + 0xa438, 0x8fff, 0xa438, 0xbf57, 0xa438, 0x6c02, 0xa438, 0x52c8, + 0xa438, 0xa102, 0xa438, 0x13ee, 0xa438, 0x8ffc, 0xa438, 0x80ee, + 0xa438, 0x8ffd, 0xa438, 0x00ee, 0xa438, 0x8ffe, 0xa438, 0x80ee, + 0xa438, 0x8fff, 0xa438, 0x00af, 0xa438, 0x8599, 0xa438, 0xa101, + 0xa438, 0x0cbf, 0xa438, 0x534c, 0xa438, 0x0252, 0xa438, 0xc8a1, + 0xa438, 0x0303, 0xa438, 0xaf85, 0xa438, 0x77bf, 0xa438, 0x5322, + 0xa438, 0x0252, 0xa438, 0xc8a1, 0xa438, 0x8b02, 0xa438, 0xae03, + 0xa438, 0xaf86, 0xa438, 0x64e0, 0xa438, 0x8ff8, 0xa438, 0xe18f, + 0xa438, 0xf9bf, 0xa438, 0x8684, 0xa438, 0x0252, 0xa438, 0xa9e0, + 0xa438, 0x8ffa, 0xa438, 0xe18f, 0xa438, 0xfbbf, 0xa438, 0x8687, + 0xa438, 0x0252, 0xa438, 0xa9e0, 0xa438, 0x8ffc, 0xa438, 0xe18f, + 0xa438, 0xfdbf, 0xa438, 0x868a, 0xa438, 0x0252, 0xa438, 0xa9e0, + 0xa438, 0x8ffe, 0xa438, 0xe18f, 0xa438, 0xffbf, 0xa438, 0x868d, + 0xa438, 0x0252, 0xa438, 0xa9af, 0xa438, 0x867f, 0xa438, 0xbf53, + 0xa438, 0x2202, 0xa438, 0x52c8, 0xa438, 0xa144, 0xa438, 0x3cbf, + 0xa438, 0x547b, 0xa438, 0x0252, 0xa438, 0xc8e4, 0xa438, 0x8ff8, + 0xa438, 0xe58f, 0xa438, 0xf9bf, 0xa438, 0x547e, 0xa438, 0x0252, + 0xa438, 0xc8e4, 0xa438, 0x8ffa, 0xa438, 0xe58f, 0xa438, 0xfbbf, + 0xa438, 0x5481, 0xa438, 0x0252, 0xa438, 0xc8e4, 0xa438, 0x8ffc, + 0xa438, 0xe58f, 0xa438, 0xfdbf, 0xa438, 0x5484, 0xa438, 0x0252, + 0xa438, 0xc8e4, 0xa438, 0x8ffe, 0xa438, 0xe58f, 0xa438, 0xffbf, + 0xa438, 0x5322, 0xa438, 0x0252, 0xa438, 0xc8a1, 0xa438, 0x4448, + 0xa438, 0xaf85, 0xa438, 0xa7bf, 0xa438, 0x5322, 0xa438, 0x0252, + 0xa438, 0xc8a1, 0xa438, 0x313c, 0xa438, 0xbf54, 0xa438, 0x7b02, + 0xa438, 0x52c8, 0xa438, 0xe48f, 0xa438, 0xf8e5, 0xa438, 0x8ff9, + 0xa438, 0xbf54, 0xa438, 0x7e02, 0xa438, 0x52c8, 0xa438, 0xe48f, + 0xa438, 0xfae5, 0xa438, 0x8ffb, 0xa438, 0xbf54, 0xa438, 0x8102, + 0xa438, 0x52c8, 0xa438, 0xe48f, 0xa438, 0xfce5, 0xa438, 0x8ffd, + 0xa438, 0xbf54, 0xa438, 0x8402, 0xa438, 0x52c8, 0xa438, 0xe48f, + 0xa438, 0xfee5, 0xa438, 0x8fff, 0xa438, 0xbf53, 0xa438, 0x2202, + 0xa438, 0x52c8, 0xa438, 0xa131, 0xa438, 0x03af, 0xa438, 0x85a7, + 0xa438, 0xd480, 0xa438, 0x00bf, 0xa438, 0x8684, 0xa438, 0x0252, + 0xa438, 0xa9bf, 0xa438, 0x8687, 0xa438, 0x0252, 0xa438, 0xa9bf, + 0xa438, 0x868a, 0xa438, 0x0252, 0xa438, 0xa9bf, 0xa438, 0x868d, + 0xa438, 0x0252, 0xa438, 0xa9ef, 0xa438, 0x95fd, 0xa438, 0xfc04, + 0xa438, 0xf0d1, 0xa438, 0x2af0, 0xa438, 0xd12c, 0xa438, 0xf0d1, + 0xa438, 0x44f0, 0xa438, 0xd146, 0xa438, 0xbf86, 0xa438, 0xa102, + 0xa438, 0x52c8, 0xa438, 0xbf86, 0xa438, 0xa102, 0xa438, 0x52c8, + 0xa438, 0xd101, 0xa438, 0xaf06, 0xa438, 0xa570, 0xa438, 0xce42, + 0xa436, 0xb818, 0xa438, 0x043d, 0xa436, 0xb81a, 0xa438, 0x06a3, + 0xa436, 0xb81c, 0xa438, 0xffff, 0xa436, 0xb81e, 0xa438, 0xffff, + 0xa436, 0xb850, 0xa438, 0xffff, 0xa436, 0xb852, 0xa438, 0xffff, + 0xa436, 0xb878, 0xa438, 0xffff, 0xa436, 0xb884, 0xa438, 0xffff, + 0xa436, 0xb832, 0xa438, 0x0003, 0xa436, 0x0000, 0xa438, 0x0000, + 0xa436, 0xB82E, 0xa438, 0x0000, 0xa436, 0x8024, 0xa438, 0x0000, + 0xb820, 0x0000, 0xa436, 0x801E, 0xa438, 0x0019, 0xFFFF, 0xFFFF }; static void @@ -8897,7 +8323,6 @@ rtl8125_init_hw_phy_mcu(struct net_device *dev) tp->HwHasWrRamCodeToMicroP = TRUE; } -#endif static void rtl8125_enable_phy_aldps(struct rtl8125_private *tp) @@ -9102,6 +8527,9 @@ rtl8125_hw_phy_config_8125a_2(struct net_device *dev) ); + RTL_W16(tp, EEE_TXIDLE_TIMER_8125, dev->mtu + ETH_HLEN + 0x20); + + mdio_direct_write_phy_ocp(tp, 0xB87C, 0x80A2); mdio_direct_write_phy_ocp(tp, 0xB87E, 0x0153); mdio_direct_write_phy_ocp(tp, 0xB87C, 0x809C); @@ -9515,6 +8943,9 @@ rtl8125_hw_phy_config_8125b_1(struct net_device *dev) mdio_direct_write_phy_ocp(tp, 0xB87E, 0x050E); + RTL_W16(tp, EEE_TXIDLE_TIMER_8125, dev->mtu + ETH_HLEN + 0x20); + + mdio_direct_write_phy_ocp(tp, 0xA436, 0x816C); mdio_direct_write_phy_ocp(tp, 0xA438, 0xC4A0); mdio_direct_write_phy_ocp(tp, 0xA436, 0x8170); @@ -9704,7 +9135,7 @@ rtl8125_hw_phy_config_8125b_2(struct net_device *dev) ); - RTL_W16(tp, EEE_TXIDLE_TIMER_8125, tp->eee.tx_lpi_timer); + RTL_W16(tp, EEE_TXIDLE_TIMER_8125, dev->mtu + ETH_HLEN + 0x20); mdio_direct_write_phy_ocp(tp, 0xB87C, 0x80F5); mdio_direct_write_phy_ocp(tp, 0xB87E, 0x760E); @@ -9785,6 +9216,39 @@ rtl8125_hw_phy_config_8125b_2(struct net_device *dev) } } +static void +rtl8125_set_hw_phy_before_init_phy_mcu(struct net_device *dev) +{ + struct rtl8125_private *tp = netdev_priv(dev); + u16 PhyRegValue; + + switch (tp->mcfg) { + case CFG_METHOD_4: + mdio_direct_write_phy_ocp(tp, 0xBF86, 0x9000); + + SetEthPhyOcpBit(tp, 0xC402, BIT_10); + ClearEthPhyOcpBit(tp, 0xC402, BIT_10); + + PhyRegValue = mdio_direct_read_phy_ocp(tp, 0xBF86); + PhyRegValue &= (BIT_1 | BIT_0); + if (PhyRegValue != 0) + dprintk("PHY watch dog not clear, value = 0x%x \n", PhyRegValue); + + mdio_direct_write_phy_ocp(tp, 0xBD86, 0x1010); + mdio_direct_write_phy_ocp(tp, 0xBD88, 0x1010); + + ClearAndSetEthPhyOcpBit(tp, + 0xBD4E, + BIT_11 | BIT_10, + BIT_11); + ClearAndSetEthPhyOcpBit(tp, + 0xBF46, + BIT_11 | BIT_10 | BIT_9 | BIT_8, + BIT_10 | BIT_9 | BIT_8); + break; + } +} + static void rtl8125_hw_phy_config(struct net_device *dev) { @@ -9796,13 +9260,9 @@ rtl8125_hw_phy_config(struct net_device *dev) if (HW_DASH_SUPPORT_TYPE_3(tp) && tp->HwPkgDet == 0x06) return; -#ifndef ENABLE_USE_FIRMWARE_FILE - if (!tp->rtl_fw) { - rtl8125_set_hw_phy_before_init_phy_mcu(dev); + rtl8125_set_hw_phy_before_init_phy_mcu(dev); - rtl8125_init_hw_phy_mcu(dev); - } -#endif + rtl8125_init_hw_phy_mcu(dev); switch (tp->mcfg) { case CFG_METHOD_2: @@ -9843,25 +9303,13 @@ rtl8125_hw_phy_config(struct net_device *dev) rtl8125_mdio_write(tp, 0x1F, 0x0000); if (HW_HAS_WRITE_PHY_MCU_RAM_CODE(tp)) { - if (tp->eee.eee_enabled) + if (tp->eee_enabled == 1) rtl8125_enable_eee(tp); else rtl8125_disable_eee(tp); } } -static void -rtl8125_up(struct net_device *dev) -{ - rtl8125_hw_init(dev); - rtl8125_hw_reset(dev); - rtl8125_powerup_pll(dev); - rtl8125_hw_ephy_config(dev); - rtl8125_hw_phy_config(dev); - rtl8125_hw_config(dev); -} - -/* static inline void rtl8125_delete_esd_timer(struct net_device *dev, struct timer_list *timer) { del_timer_sync(timer); @@ -9878,7 +9326,6 @@ static inline void rtl8125_request_esd_timer(struct net_device *dev) #endif mod_timer(timer, jiffies + RTL8125_ESD_TIMEOUT); } -*/ /* static inline void rtl8125_delete_link_timer(struct net_device *dev, struct timer_list *timer) @@ -9968,28 +9415,28 @@ rtl8125_setup_mqs_reg(struct rtl8125_private *tp) //tx tp->tx_ring[0].tdsar_reg = TxDescStartAddrLow; for (i = 1; i < R8125_MAX_TX_QUEUES; i++) { - tp->tx_ring[i].tdsar_reg = (u16)(TNPDS_Q1_LOW_8125 + (i - 1) * 8); + tp->tx_ring[i].tdsar_reg = (u16)(TNPDS_Q1_LOW_8125 + (i - 1) * 8); } for (i = 0; i < R8125_MAX_TX_QUEUES; i++) { - tp->tx_ring[i].hw_clo_ptr_reg = (u16)(HW_CLO_PTR0_8125 + i * 4); - tp->tx_ring[i].sw_tail_ptr_reg = (u16)(SW_TAIL_PTR0_8125 + i * 4); + tp->tx_ring[i].hw_clo_ptr_reg = (u16)(HW_CLO_PTR0_8125 + i * 4); + tp->tx_ring[i].sw_tail_ptr_reg = (u16)(SW_TAIL_PTR0_8125 + i * 4); } //rx tp->rx_ring[0].rdsar_reg = RxDescAddrLow; for (i = 1; i < R8125_MAX_RX_QUEUES; i++) { - tp->rx_ring[i].rdsar_reg = (u16)(RDSAR_Q1_LOW_8125 + (i - 1) * 8); + tp->rx_ring[i].rdsar_reg = (u16)(RDSAR_Q1_LOW_8125 + (i - 1) * 8); } tp->isr_reg[0] = ISR0_8125; for (i = 1; i < R8125_MAX_QUEUES; i++) { - tp->isr_reg[i] = (u16)(ISR1_8125 + (i - 1) * 4); + tp->isr_reg[i] = (u16)(ISR1_8125 + (i - 1) * 4); } tp->imr_reg[0] = IMR0_8125; for (i = 1; i < R8125_MAX_QUEUES; i++) { - tp->imr_reg[i] = (u16)(IMR1_8125 + (i - 1) * 4); + tp->imr_reg[i] = (u16)(IMR1_8125 + (i - 1) * 4); } } @@ -10001,10 +9448,6 @@ rtl8125_init_software_variable(struct net_device *dev) rtl8125_get_bios_setting(dev); -#ifdef ENABLE_LIB_SUPPORT - tp->ring_lib_enabled = 1; -#endif - switch (tp->mcfg) { case CFG_METHOD_2: case CFG_METHOD_3: @@ -10170,6 +9613,15 @@ rtl8125_init_software_variable(struct net_device *dev) break; } + switch (tp->mcfg) { + case CFG_METHOD_2: + case CFG_METHOD_3: + case CFG_METHOD_4: + case CFG_METHOD_5: + tp->HwSuppGigaForceMode = TRUE; + break; + } + switch (tp->mcfg) { case CFG_METHOD_2: case CFG_METHOD_3: @@ -10306,11 +9758,8 @@ rtl8125_init_software_variable(struct net_device *dev) } tp->HwCurrIsrVer = tp->HwSuppIsrVer; - if (tp->HwSuppIsrVer == 2) { - if (!(tp->features & RTL_FEATURE_MSIX) || - tp->irq_nvecs < R8125_MIN_MSIX_VEC_8125B) - tp->HwCurrIsrVer = 1; - } + if (tp->HwSuppIsrVer == 2 && !(tp->features & RTL_FEATURE_MSIX)) + tp->HwCurrIsrVer = 1; if (tp->HwCurrIsrVer < 2 || tp->irq_nvecs < 19) tp->num_tx_rings = 1; @@ -10349,15 +9798,6 @@ rtl8125_init_software_variable(struct net_device *dev) break; } - switch (tp->mcfg) { - case CFG_METHOD_2: - case CFG_METHOD_3: - case CFG_METHOD_4: - case CFG_METHOD_5: - tp->HwSuppExtendTallyCounterVer = 1; - break; - } - timer_count_v2 = (timer_count / 0x100); tp->NicCustLedValue = RTL_R16(tp, CustomLED); @@ -10379,22 +9819,8 @@ rtl8125_init_software_variable(struct net_device *dev) dev->min_mtu = ETH_MIN_MTU; dev->max_mtu = tp->max_jumbo_frame_size; #endif //LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0) - - if (tp->mcfg != CFG_METHOD_DEFAULT) { - struct ethtool_eee *eee = &tp->eee; - - eee->eee_enabled = eee_enable; - eee->supported = SUPPORTED_100baseT_Full | - SUPPORTED_1000baseT_Full; - switch (tp->mcfg) { - case CFG_METHOD_4: - case CFG_METHOD_5: - eee->supported |= SUPPORTED_2500baseX_Full; - break; - } - eee->advertised = mmd_eee_adv_to_ethtool_adv_t(MDIO_EEE_1000T | MDIO_EEE_100TX); - eee->tx_lpi_timer = dev->mtu + ETH_HLEN + 0x20; - } + tp->eee_enabled = eee_enable; + tp->eee_adv_t = MDIO_EEE_1000T | MDIO_EEE_100TX; tp->ptp_master_mode = enable_ptp_master_mode; } @@ -10423,7 +9849,6 @@ rtl8125_release_board(struct pci_dev *pdev, iounmap(ioaddr); pci_release_regions(pdev); - pci_clear_mwi(pdev); pci_disable_device(pdev); free_netdev(dev); } @@ -10483,14 +9908,19 @@ rtl8125_set_mac_address(struct net_device *dev, { struct rtl8125_private *tp = netdev_priv(dev); struct sockaddr *addr = p; + unsigned long flags; if (!is_valid_ether_addr(addr->sa_data)) return -EADDRNOTAVAIL; + spin_lock_irqsave(&tp->lock, flags); + memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); rtl8125_rar_set(tp, dev->dev_addr); + spin_unlock_irqrestore(&tp->lock, flags); + return 0; } @@ -11190,6 +10620,7 @@ rtl8125_do_ioctl(struct net_device *dev, struct rtl8125_private *tp = netdev_priv(dev); struct mii_ioctl_data *data = if_mii(ifr); int ret; + unsigned long flags; ret = 0; switch (cmd) { @@ -11198,15 +10629,19 @@ rtl8125_do_ioctl(struct net_device *dev, break; case SIOCGMIIREG: + spin_lock_irqsave(&tp->lock, flags); rtl8125_mdio_write(tp, 0x1F, 0x0000); data->val_out = rtl8125_mdio_read(tp, data->reg_num); + spin_unlock_irqrestore(&tp->lock, flags); break; case SIOCSMIIREG: if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); rtl8125_mdio_write(tp, 0x1F, 0x0000); rtl8125_mdio_write(tp, data->reg_num, data->val_in); + spin_unlock_irqrestore(&tp->lock, flags); break; #ifdef ETHTOOL_OPS_COMPAT @@ -11339,12 +10774,9 @@ rtl8125_init_board(struct pci_dev *pdev, goto err_out_free_dev; } - if (pci_set_mwi(pdev) < 0) { -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) - if (netif_msg_drv(&debug)) - dev_info(&pdev->dev, "Mem-Wr-Inval unavailable.\n"); -#endif //LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) - } + rc = pci_set_mwi(pdev); + if (rc < 0) + goto err_out_disable; /* save power state before pci_enable_device overwrites it */ pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM); @@ -11407,6 +10839,8 @@ rtl8125_init_board(struct pci_dev *pdev, } } + pci_set_master(pdev); + /* ioremap MMIO region */ ioaddr = ioremap(pci_resource_start(pdev, 2), pci_resource_len(pdev, 2)); if (ioaddr == NULL) { @@ -11450,9 +10884,13 @@ out: err_out_free_res: pci_release_regions(pdev); + err_out_mwi: pci_clear_mwi(pdev); + +err_out_disable: pci_disable_device(pdev); + err_out_free_dev: free_netdev(dev); err_out: @@ -11462,10 +10900,24 @@ err_out: } static void -rtl8125_esd_checker(struct rtl8125_private *tp) +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,14,0) +rtl8125_esd_timer(unsigned long __opaque) +#else +rtl8125_esd_timer(struct timer_list *t) +#endif { +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,14,0) + struct net_device *dev = (struct net_device *)__opaque; + struct rtl8125_private *tp = netdev_priv(dev); + struct timer_list *timer = &tp->esd_timer; +#else + struct rtl8125_private *tp = from_timer(tp, t, esd_timer); struct net_device *dev = tp->dev; + struct timer_list *timer = t; +#endif struct pci_dev *pdev = tp->pci_dev; + unsigned long timeout = RTL8125_ESD_TIMEOUT; + unsigned long flags; u8 cmd; u16 io_base_l; u16 mem_base_l; @@ -11482,6 +10934,8 @@ rtl8125_esd_checker(struct rtl8125_private *tp) u32 pci_sn_l; u32 pci_sn_h; + spin_lock_irqsave(&tp->lock, flags); + tp->esd_flag = 0; pci_read_config_byte(pdev, PCI_COMMAND, &cmd); @@ -11593,40 +11047,24 @@ rtl8125_esd_checker(struct rtl8125_private *tp) if (tp->esd_flag != 0) { printk(KERN_ERR "%s: esd_flag = 0x%04x\n.\n", dev->name, tp->esd_flag); - netif_tx_stop_all_queues(dev); + rtl8125_stop_all_tx_queue(dev); netif_carrier_off(dev); rtl8125_hw_reset(dev); rtl8125_tx_clear(tp); rtl8125_rx_clear(tp); rtl8125_init_ring(dev); - rtl8125_up(dev); - rtl8125_enable_hw_linkchg_interrupt(tp); + rtl8125_hw_init(dev); + rtl8125_powerup_pll(dev); + rtl8125_hw_ephy_config(dev); + rtl8125_hw_phy_config(dev); + rtl8125_hw_config(dev); rtl8125_set_speed(dev, tp->autoneg, tp->speed, tp->duplex, tp->advertising); tp->esd_flag = 0; } -} -/* -static void -#if LINUX_VERSION_CODE < KERNEL_VERSION(4,14,0) -rtl8125_esd_timer(unsigned long __opaque) -#else -rtl8125_esd_timer(struct timer_list *t) -#endif -{ -#if LINUX_VERSION_CODE < KERNEL_VERSION(4,14,0) - struct net_device *dev = (struct net_device *)__opaque; - struct rtl8125_private *tp = netdev_priv(dev); - struct timer_list *timer = &tp->esd_timer; -#else - struct rtl8125_private *tp = from_timer(tp, t, esd_timer); - //struct net_device *dev = tp->dev; - struct timer_list *timer = t; -#endif - rtl8125_esd_checker(tp); + spin_unlock_irqrestore(&tp->lock, flags); mod_timer(timer, jiffies + timeout); } -*/ /* static void @@ -11645,7 +11083,11 @@ rtl8125_link_timer(struct timer_list *t) struct net_device *dev = tp->dev; struct timer_list *timer = t; #endif - rtl8125_check_link_status(dev); + unsigned long flags; + + spin_lock_irqsave(&tp->lock, flags); + rtl8125_check_link_status(dev, 0); + spin_unlock_irqrestore(&tp->lock, flags); mod_timer(timer, jiffies + RTL8125_LINK_TIMEOUT); } @@ -11707,19 +11149,19 @@ static int rtl8125_try_msi(struct rtl8125_private *tp) unsigned msi = 0; int nvecs = 1; - tp->max_irq_nvecs = 1; - tp->min_irq_nvecs = 1; -#ifndef DISABLE_MULTI_MSIX_VECTOR switch (tp->mcfg) { case CFG_METHOD_4: case CFG_METHOD_5: tp->max_irq_nvecs = R8125_MAX_MSIX_VEC_8125B; tp->min_irq_nvecs = R8125_MIN_MSIX_VEC_8125B; break; + default: + tp->max_irq_nvecs = 1; + tp->min_irq_nvecs = 1; + break; } -#endif -#if defined(RTL_USE_NEW_INTR_API) +#if defined(RTL_USE_NEW_INTR_API) if ((nvecs = pci_alloc_irq_vectors(pdev, tp->min_irq_nvecs, tp->max_irq_nvecs, PCI_IRQ_MSIX)) > 0) msi |= RTL_FEATURE_MSIX; else if ((nvecs = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES)) > 0 && @@ -11746,7 +11188,7 @@ static int rtl8125_try_msi(struct rtl8125_private *tp) static void rtl8125_disable_msi(struct pci_dev *pdev, struct rtl8125_private *tp) { -#if defined(RTL_USE_NEW_INTR_API) +#if defined(RTL_USE_NEW_INTR_API) if (tp->features & (RTL_FEATURE_MSI | RTL_FEATURE_MSIX)) pci_free_irq_vectors(pdev); #elif LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13) @@ -11760,7 +11202,7 @@ static void rtl8125_disable_msi(struct pci_dev *pdev, struct rtl8125_private *tp static int rtl8125_get_irq(struct pci_dev *pdev) { -#if defined(RTL_USE_NEW_INTR_API) +#if defined(RTL_USE_NEW_INTR_API) return pci_irq_vector(pdev, 0); #else return pdev->irq; @@ -11806,20 +11248,28 @@ static int rtl8125_poll(napi_ptr napi, napi_budget budget) RTL_GET_NETDEV(tp) unsigned int work_to_do = RTL_NAPI_QUOTA(budget, dev); unsigned int work_done = 0; + //unsigned long flags; int i; for (i = 0; i < tp->num_rx_rings; i++) work_done += rtl8125_rx_interrupt(dev, tp, &tp->rx_ring[i], budget); + //spin_lock_irqsave(&tp->lock, flags); for (i = 0; i < tp->num_tx_rings; i++) rtl8125_tx_interrupt(&tp->tx_ring[i], budget); + //spin_unlock_irqrestore(&tp->lock, flags); RTL_NAPI_QUOTA_UPDATE(dev, work_done, budget); if (work_done < work_to_do) { #ifdef ENABLE_DASH_SUPPORT - if (tp->DASH) - HandleDashInterrupt(tp->dev); + if (tp->DASH) { + struct net_device *dev = tp->dev; + + spin_lock_irqsave(&tp->lock, flags); + HandleDashInterrupt(dev); + spin_unlock_irqrestore(&tp->lock, flags); + } #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0) @@ -11849,18 +11299,26 @@ static int rtl8125_poll_msix_ring(napi_ptr napi, napi_budget budget) RTL_GET_NETDEV(tp) unsigned int work_to_do = RTL_NAPI_QUOTA(budget, dev); unsigned int work_done = 0; + unsigned long flags; const int message_id = r8125napi->index; work_done += rtl8125_rx_interrupt(dev, tp, &tp->rx_ring[message_id], budget); + //spin_lock_irqsave(&tp->lock, flags); rtl8125_tx_interrupt_with_vector(tp, message_id, budget); + //spin_unlock_irqrestore(&tp->lock, flags); RTL_NAPI_QUOTA_UPDATE(dev, work_done, budget); if (work_done < work_to_do) { #ifdef ENABLE_DASH_SUPPORT - if (tp->DASH && message_id == 0) - HandleDashInterrupt(tp->dev); + if (tp->DASH && message_id == 0) { + struct net_device *dev = tp->dev; + + spin_lock_irqsave(&tp->lock, flags); + HandleDashInterrupt(dev); + spin_unlock_irqrestore(&tp->lock, flags); + } #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0) @@ -11890,12 +11348,15 @@ static int rtl8125_poll_msix_tx(napi_ptr napi, napi_budget budget) RTL_GET_NETDEV(tp) unsigned int work_to_do = RTL_NAPI_QUOTA(budget, dev); unsigned int work_done = 0; + //unsigned long flags; const int message_id = r8125napi->index; //suppress unused variable (void)(dev); + //spin_lock_irqsave(&tp->lock, flags); rtl8125_tx_interrupt_with_vector(tp, message_id, budget); + //spin_unlock_irqrestore(&tp->lock, flags); RTL_NAPI_QUOTA_UPDATE(dev, work_done, budget); @@ -12034,23 +11495,6 @@ static void rtl8125_init_napi(struct rtl8125_private *tp) } } -static int -rtl8125_set_real_num_queue(struct rtl8125_private *tp) -{ - int retval = 0; - - retval = netif_set_real_num_tx_queues(tp->dev, tp->num_tx_rings); - if (retval < 0) - goto exit; - - retval = netif_set_real_num_rx_queues(tp->dev, tp->num_rx_rings); - if (retval < 0) - goto exit; - -exit: - return retval; -} - static int __devinit rtl8125_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) @@ -12090,6 +11534,8 @@ rtl8125_init_one(struct pci_dev *pdev, goto err_out_1; } + spin_lock_init(&tp->lock); + rtl8125_init_software_variable(dev); RTL_NET_DEVICE_OPS(rtl8125_netdev_ops); @@ -12164,16 +11610,9 @@ rtl8125_init_one(struct pci_dev *pdev, #ifdef ENABLE_LIB_SUPPORT ATOMIC_INIT_NOTIFIER_HEAD(&tp->lib_nh); #endif - rtl8125_init_all_schedule_work(tp); - - rc = rtl8125_set_real_num_queue(tp); - if (rc < 0) - goto err_out; rtl8125_exit_oob(dev); - rtl8125_powerup_pll(dev); - rtl8125_hw_init(dev); rtl8125_hw_reset(dev); @@ -12186,8 +11625,6 @@ rtl8125_init_one(struct pci_dev *pdev, rtl8125_get_mac_address(dev); - tp->fw_name = rtl_chip_fw_infos[tp->mcfg].fw_name; - tp->tally_vaddr = dma_alloc_coherent(&pdev->dev, sizeof(*tp->tally_vaddr), &tp->tally_paddr, GFP_KERNEL); if (!tp->tally_vaddr) { @@ -12243,10 +11680,6 @@ rtl8125_remove_one(struct pci_dev *pdev) assert(dev != NULL); assert(tp != NULL); - set_bit(R8125_FLAG_DOWN, tp->task_flags); - - rtl8125_cancel_all_schedule_work(tp); - #ifdef CONFIG_R8125_NAPI rtl8125_del_napi(tp); #endif @@ -12264,11 +11697,6 @@ rtl8125_remove_one(struct pci_dev *pdev) } rtl8125_release_board(pdev, dev); - -#ifdef ENABLE_USE_FIRMWARE_FILE - rtl8125_release_firmware(tp); -#endif - pci_set_drvdata(pdev, NULL); } @@ -12290,12 +11718,12 @@ static void rtl8125_free_irq(struct rtl8125_private *tp) struct r8125_napi *r8125napi = &tp->r8125napi[i]; if (irq->requested) { - irq->requested = 0; -#if defined(RTL_USE_NEW_INTR_API) +#if defined(RTL_USE_NEW_INTR_API) pci_free_irq(tp->pci_dev, i, r8125napi); #else free_irq(irq->vector, r8125napi); #endif + irq->requested = 0; } } } @@ -12442,36 +11870,26 @@ static void rtl8125_free_alloc_resources(struct rtl8125_private *tp) rtl8125_free_tx_desc(tp); } -#ifdef ENABLE_USE_FIRMWARE_FILE -static void rtl8125_request_firmware(struct rtl8125_private *tp) +int rtl8125_set_real_num_queue(struct rtl8125_private *tp) { - struct rtl8125_fw *rtl_fw; + int retval = 0; - /* firmware loaded already or no firmware available */ - if (tp->rtl_fw || !tp->fw_name) - return; + retval = netif_set_real_num_tx_queues(tp->dev, tp->num_tx_rings); + if (retval < 0) + goto exit; - rtl_fw = kzalloc(sizeof(*rtl_fw), GFP_KERNEL); - if (!rtl_fw) - return; + retval = netif_set_real_num_rx_queues(tp->dev, tp->num_rx_rings); + if (retval < 0) + goto exit; - rtl_fw->phy_write = rtl8125_mdio_write; - rtl_fw->phy_read = rtl8125_mdio_read; - rtl_fw->mac_mcu_write = mac_mcu_write; - rtl_fw->mac_mcu_read = mac_mcu_read; - rtl_fw->fw_name = tp->fw_name; - rtl_fw->dev = tp_to_dev(tp); - - if (rtl8125_fw_request_firmware(rtl_fw)) - kfree(rtl_fw); - else - tp->rtl_fw = rtl_fw; +exit: + return retval; } -#endif -int rtl8125_open(struct net_device *dev) +static int rtl8125_open(struct net_device *dev) { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; int retval; retval = -ENOMEM; @@ -12491,6 +11909,10 @@ int rtl8125_open(struct net_device *dev) if (retval < 0) goto err_free_all_allocated_mem; + retval = rtl8125_set_real_num_queue(tp); + if (retval < 0) + goto err_free_all_allocated_mem; + retval = rtl8125_alloc_irq(tp); if (retval < 0) goto err_free_all_allocated_mem; @@ -12506,36 +11928,49 @@ int rtl8125_open(struct net_device *dev) dev->dev_addr[4], dev->dev_addr[5], dev->irq); } -#ifdef ENABLE_USE_FIRMWARE_FILE - rtl8125_request_firmware(tp); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) + INIT_WORK(&tp->task, NULL, dev); +#else + INIT_DELAYED_WORK(&tp->task, NULL); #endif - pci_set_master(tp->pci_dev); #ifdef CONFIG_R8125_NAPI rtl8125_enable_napi(tp); #endif + spin_lock_irqsave(&tp->lock, flags); + rtl8125_exit_oob(dev); - rtl8125_up(dev); + rtl8125_hw_init(dev); + + rtl8125_hw_reset(dev); + + rtl8125_powerup_pll(dev); + + rtl8125_hw_ephy_config(dev); + + rtl8125_hw_phy_config(dev); + + rtl8125_hw_config(dev); #ifdef ENABLE_PTP_SUPPORT if (tp->EnablePtp) rtl8125_ptp_init(tp); #endif - clear_bit(R8125_FLAG_DOWN, tp->task_flags); - if (tp->resume_not_chg_speed) - rtl8125_check_link_status(dev); - else - rtl8125_set_speed(dev, tp->autoneg, tp->speed, tp->duplex, tp->advertising); + rtl8125_set_speed(dev, tp->autoneg, tp->speed, tp->duplex, tp->advertising); - if (tp->esd_flag == 0) { - //rtl8125_request_esd_timer(dev); - - rtl8125_schedule_esd_work(tp); + if (tp->resume_not_chg_speed) { + rtl8125_check_link_status(dev, 1); + tp->resume_not_chg_speed = 0; } + spin_unlock_irqrestore(&tp->lock, flags); + + if (tp->esd_flag == 0) + rtl8125_request_esd_timer(dev); + //rtl8125_request_link_timer(dev); rtl8125_enable_hw_linkchg_interrupt(tp); @@ -12645,7 +12080,14 @@ rtl8125_hw_set_rx_packet_filter(struct net_device *dev) static void rtl8125_set_rx_mode(struct net_device *dev) { + struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; + + spin_lock_irqsave(&tp->lock, flags); + rtl8125_hw_set_rx_packet_filter(dev); + + spin_unlock_irqrestore(&tp->lock, flags); } void @@ -12735,8 +12177,6 @@ rtl8125_hw_config(struct net_device *dev) rtl8125_tally_counter_addr_fill(tp); - rtl8125_enable_extend_tally_couter(tp); - rtl8125_desc_addr_fill(tp); /* Set DMA burst size and Interframe Gap Time */ @@ -12814,7 +12254,7 @@ rtl8125_hw_config(struct net_device *dev) mac_ocp_data = rtl8125_mac_ocp_read(tp, 0xE056); mac_ocp_data &= ~(BIT_7 | BIT_6 | BIT_5 | BIT_4); - //mac_ocp_data |= (BIT_4 | BIT_5); + mac_ocp_data |= (BIT_4 | BIT_5); rtl8125_mac_ocp_write(tp, 0xE056, mac_ocp_data); RTL_W8(tp, TDFNR, 0x10); @@ -12830,14 +12270,17 @@ rtl8125_hw_config(struct net_device *dev) mac_ocp_data |= (BIT_0); rtl8125_mac_ocp_write(tp, 0xEA1C, mac_ocp_data); - rtl8125_mac_ocp_write(tp, 0xE0C0, 0x4000); + mac_ocp_data = rtl8125_mac_ocp_read(tp, 0xE0C0); + mac_ocp_data &= ~(BIT_14 | BIT_11 | BIT_10 | BIT_9 | BIT_8 | BIT_3 | BIT_2 | BIT_1 | BIT_0); + mac_ocp_data |= (BIT_14 | BIT_10 | BIT_1 | BIT_0); + rtl8125_mac_ocp_write(tp, 0xE0C0, mac_ocp_data); - SetMcuAccessRegBit(tp, 0xE052, (BIT_6 | BIT_5)); - ClearMcuAccessRegBit(tp, 0xE052, BIT_3 | BIT_7); + SetMcuAccessRegBit(tp, 0xE052, (BIT_6|BIT_5|BIT_3)); + ClearMcuAccessRegBit(tp, 0xE052, BIT_7); mac_ocp_data = rtl8125_mac_ocp_read(tp, 0xD430); mac_ocp_data &= ~(BIT_11 | BIT_10 | BIT_9 | BIT_8 | BIT_7 | BIT_6 | BIT_5 | BIT_4 | BIT_3 | BIT_2 | BIT_1 | BIT_0); - mac_ocp_data |= 0x45F; + mac_ocp_data |= 0x47F; rtl8125_mac_ocp_write(tp, 0xD430, mac_ocp_data); //rtl8125_mac_ocp_write(tp, 0xE0C0, 0x4F87); @@ -12847,7 +12290,7 @@ rtl8125_hw_config(struct net_device *dev) RTL_W8(tp, 0xD0, (RTL_R8(tp, 0xD0) & ~BIT_6) | BIT_7); if (tp->mcfg == CFG_METHOD_2 || tp->mcfg == CFG_METHOD_3) - RTL_W8(tp, MCUCmd_reg, RTL_R8(tp, MCUCmd_reg) | BIT_0); + RTL_W8(tp, 0xD3, RTL_R8(tp, 0xD3) | BIT_0); rtl8125_disable_eee_plus(tp); @@ -13015,6 +12458,7 @@ rtl8125_change_mtu(struct net_device *dev, { struct rtl8125_private *tp = netdev_priv(dev); int ret = 0; + unsigned long flags; #if LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) if (new_mtu < ETH_MIN_MTU) @@ -13023,32 +12467,39 @@ rtl8125_change_mtu(struct net_device *dev, new_mtu = tp->max_jumbo_frame_size; #endif //LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) + spin_lock_irqsave(&tp->lock, flags); dev->mtu = new_mtu; + spin_unlock_irqrestore(&tp->lock, flags); if (!netif_running(dev)) goto out; rtl8125_down(dev); + spin_lock_irqsave(&tp->lock, flags); + rtl8125_set_rxbufsize(tp, dev); ret = rtl8125_init_ring(dev); - if (ret < 0) + if (ret < 0) { + spin_unlock_irqrestore(&tp->lock, flags); goto err_out; + } #ifdef CONFIG_R8125_NAPI rtl8125_enable_napi(tp); #endif//CONFIG_R8125_NAPI - //netif_tx_stop_all_queues(dev); - //netif_carrier_off(dev); + rtl8125_stop_all_tx_queue(dev); + netif_carrier_off(dev); rtl8125_hw_config(dev); - rtl8125_enable_hw_linkchg_interrupt(tp); rtl8125_set_speed(dev, tp->autoneg, tp->speed, tp->duplex, tp->advertising); - //mod_timer(&tp->esd_timer, jiffies + RTL8125_ESD_TIMEOUT); + spin_unlock_irqrestore(&tp->lock, flags); + + mod_timer(&tp->esd_timer, jiffies + RTL8125_ESD_TIMEOUT); //mod_timer(&tp->link_timer, jiffies + RTL8125_LINK_TIMEOUT); out: #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) @@ -13138,9 +12589,9 @@ rtl8125_alloc_rx_skb(struct rtl8125_private *tp, skb_reserve(skb, RTK_RX_ALIGN); - mapping = dma_map_single(tp_to_dev(tp), skb->data, rx_buf_sz, + mapping = dma_map_single(&tp->pci_dev->dev, skb->data, rx_buf_sz, DMA_FROM_DEVICE); - if (unlikely(dma_mapping_error(tp_to_dev(tp), mapping))) { + if (unlikely(dma_mapping_error(&tp->pci_dev->dev, mapping))) { if (unlikely(net_ratelimit())) netif_err(tp, drv, tp->dev, "Failed to map RX DMA!\n"); goto err_out; @@ -13364,101 +12815,38 @@ rtl8125_tx_clear(struct rtl8125_private *tp) } #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) -static void rtl8125_schedule_reset_work(struct rtl8125_private *tp) +static void rtl8125_schedule_work(struct net_device *dev, void (*task)(void *)) { #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) - set_bit(R8125_FLAG_TASK_RESET_PENDING, tp->task_flags); - schedule_delayed_work(&tp->reset_task, 4); + struct rtl8125_private *tp = netdev_priv(dev); + + INIT_WORK(&tp->task, task, dev); + schedule_delayed_work(&tp->task, 4); #endif //LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) } -static void rtl8125_schedule_esd_work(struct rtl8125_private *tp) -{ -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) - set_bit(R8125_FLAG_TASK_ESD_CHECK_PENDING, tp->task_flags); - schedule_delayed_work(&tp->esd_task, RTL8125_ESD_TIMEOUT); -#endif //LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) -} - -static void rtl8125_schedule_linkchg_work(struct rtl8125_private *tp) -{ -#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) - set_bit(R8125_FLAG_TASK_LINKCHG_CHECK_PENDING, tp->task_flags); - schedule_delayed_work(&tp->linkchg_task, 4); -#endif //LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0) -} - -#define rtl8125_cancel_schedule_reset_work(a) -#define rtl8125_cancel_schedule_esd_work(a) -#define rtl8125_cancel_schedule_linkchg_work(a) +#define rtl8125_cancel_schedule_work(a) #else -static void rtl8125_schedule_reset_work(struct rtl8125_private *tp) +static void rtl8125_schedule_work(struct net_device *dev, work_func_t task) { - set_bit(R8125_FLAG_TASK_RESET_PENDING, tp->task_flags); - schedule_delayed_work(&tp->reset_task, 4); + struct rtl8125_private *tp = netdev_priv(dev); + + INIT_DELAYED_WORK(&tp->task, task); + schedule_delayed_work(&tp->task, 4); } -static void rtl8125_cancel_schedule_reset_work(struct rtl8125_private *tp) +static void rtl8125_cancel_schedule_work(struct net_device *dev) { - struct work_struct *work = &tp->reset_task.work; + struct rtl8125_private *tp = netdev_priv(dev); + struct work_struct *work = &tp->task.work; if (!work->func) return; - cancel_delayed_work_sync(&tp->reset_task); -} - -static void rtl8125_schedule_esd_work(struct rtl8125_private *tp) -{ - set_bit(R8125_FLAG_TASK_ESD_CHECK_PENDING, tp->task_flags); - schedule_delayed_work(&tp->esd_task, RTL8125_ESD_TIMEOUT); -} - -static void rtl8125_cancel_schedule_esd_work(struct rtl8125_private *tp) -{ - struct work_struct *work = &tp->esd_task.work; - - if (!work->func) return; - - cancel_delayed_work_sync(&tp->esd_task); -} - -static void rtl8125_schedule_linkchg_work(struct rtl8125_private *tp) -{ - set_bit(R8125_FLAG_TASK_LINKCHG_CHECK_PENDING, tp->task_flags); - schedule_delayed_work(&tp->linkchg_task, RTL8125_ESD_TIMEOUT); -} - -static void rtl8125_cancel_schedule_linkchg_work(struct rtl8125_private *tp) -{ - struct work_struct *work = &tp->linkchg_task.work; - - if (!work->func) return; - - cancel_delayed_work_sync(&tp->linkchg_task); + cancel_delayed_work_sync(&tp->task); } #endif -static void rtl8125_init_all_schedule_work(struct rtl8125_private *tp) -{ -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) - INIT_WORK(&tp->reset_task, rtl8125_reset_task, dev); - INIT_WORK(&tp->esd_task, rtl8125_esd_task, dev); - INIT_WORK(&tp->linkchg_task, rtl8125_linkchg_task, dev); -#else - INIT_DELAYED_WORK(&tp->reset_task, rtl8125_reset_task); - INIT_DELAYED_WORK(&tp->esd_task, rtl8125_esd_task); - INIT_DELAYED_WORK(&tp->linkchg_task, rtl8125_linkchg_task); -#endif -} - -static void rtl8125_cancel_all_schedule_work(struct rtl8125_private *tp) -{ - rtl8125_cancel_schedule_reset_work(tp); - rtl8125_cancel_schedule_esd_work(tp); - rtl8125_cancel_schedule_linkchg_work(tp); -} - static void rtl8125_wait_for_irq_complete(struct rtl8125_private *tp) { @@ -13475,6 +12863,7 @@ static void _rtl8125_wait_for_quiescence(struct net_device *dev) { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; /* Wait for any pending NAPI task to complete */ #ifdef CONFIG_R8125_NAPI @@ -13485,9 +12874,12 @@ _rtl8125_wait_for_quiescence(struct net_device *dev) /* Give a racing hard_start_xmit a few cycles to complete. */ synchronize_net(); #endif + spin_lock_irqsave(&tp->lock, flags); rtl8125_irq_mask_and_ack(tp); + spin_unlock_irqrestore(&tp->lock, flags); + rtl8125_wait_for_irq_complete(tp); } @@ -13506,6 +12898,43 @@ rtl8125_wait_for_quiescence(struct net_device *dev) #endif//CONFIG_R8125_NAPI } +#if 0 +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) +static void rtl8125_reinit_task(void *_data) +#else +static void rtl8125_reinit_task(struct work_struct *work) +#endif +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) + struct net_device *dev = _data; +#else + struct rtl8125_private *tp = + container_of(work, struct rtl8125_private, task.work); + struct net_device *dev = tp->dev; +#endif + int ret; + + if (netif_running(dev)) { + rtl8125_wait_for_quiescence(dev); + rtl8125_close(dev); + } + + ret = rtl8125_open(dev); + if (unlikely(ret < 0)) { + if (unlikely(net_ratelimit())) { + struct rtl8125_private *tp = netdev_priv(dev); + + if (netif_msg_drv(tp)) { + printk(PFX KERN_ERR + "%s: reinit failure (status = %d)." + " Rescheduling.\n", dev->name, ret); + } + } + rtl8125_schedule_work(dev, rtl8125_reinit_task); + } +} +#endif + static int rtl8125_rx_nostuck(struct rtl8125_private *tp) { int i, ret = 1; @@ -13523,18 +12952,15 @@ static void rtl8125_reset_task(void *_data) static void rtl8125_reset_task(struct work_struct *work) { struct rtl8125_private *tp = - container_of(work, struct rtl8125_private, reset_task.work); + container_of(work, struct rtl8125_private, task.work); struct net_device *dev = tp->dev; #endif u32 budget = ~(u32)0; + unsigned long flags; int i; - rtnl_lock(); - - if (!netif_running(dev) || - test_bit(R8125_FLAG_DOWN, tp->task_flags) || - !test_and_clear_bit(R8125_FLAG_TASK_RESET_PENDING, tp->task_flags)) - goto out_unlock; + if (!netif_running(dev)) + return; rtl8125_wait_for_quiescence(dev); @@ -13546,9 +12972,7 @@ static void rtl8125_reset_task(struct work_struct *work) #endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) } - netif_tx_stop_all_queues(dev); - netif_carrier_off(dev); - rtl8125_hw_reset(dev); + spin_lock_irqsave(&tp->lock, flags); rtl8125_tx_clear(tp); @@ -13558,16 +12982,12 @@ static void rtl8125_reset_task(struct work_struct *work) #ifdef ENABLE_PTP_SUPPORT rtl8125_ptp_reset(tp); #endif - if (tp->resume_not_chg_speed) { - _rtl8125_check_link_status(dev); + rtl8125_enable_hw_linkchg_interrupt(tp); - tp->resume_not_chg_speed = 0; - } else { - rtl8125_enable_hw_linkchg_interrupt(tp); - - rtl8125_set_speed(dev, tp->autoneg, tp->speed, tp->duplex, tp->advertising); - } + rtl8125_set_speed(dev, tp->autoneg, tp->speed, tp->duplex, tp->advertising); + spin_unlock_irqrestore(&tp->lock, flags); } else { + spin_unlock_irqrestore(&tp->lock, flags); if (unlikely(net_ratelimit())) { struct rtl8125_private *tp = netdev_priv(dev); @@ -13576,65 +12996,9 @@ static void rtl8125_reset_task(struct work_struct *work) "%s: Rx buffers shortage\n", dev->name); } } - rtl8125_schedule_reset_work(tp); + rtl8125_schedule_work(dev, rtl8125_reset_task); } - -out_unlock: - rtnl_unlock(); } - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) -static void rtl8125_esd_task(void *_data) -{ - struct net_device *dev = _data; - struct rtl8125_private *tp = netdev_priv(dev); -#else -static void rtl8125_esd_task(struct work_struct *work) -{ - struct rtl8125_private *tp = - container_of(work, struct rtl8125_private, esd_task.work); - struct net_device *dev = tp->dev; -#endif - rtnl_lock(); - - if (!netif_running(dev) || - test_bit(R8125_FLAG_DOWN, tp->task_flags) || - !test_and_clear_bit(R8125_FLAG_TASK_ESD_CHECK_PENDING, tp->task_flags)) - goto out_unlock; - - rtl8125_esd_checker(tp); - - rtl8125_schedule_esd_work(tp); - -out_unlock: - rtnl_unlock(); -} - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) -static void rtl8125_linkchg_task(void *_data) -{ - struct net_device *dev = _data; - //struct rtl8125_private *tp = netdev_priv(dev); -#else -static void rtl8125_linkchg_task(struct work_struct *work) -{ - struct rtl8125_private *tp = - container_of(work, struct rtl8125_private, linkchg_task.work); - struct net_device *dev = tp->dev; -#endif - rtnl_lock(); - - if (!netif_running(dev) || - test_bit(R8125_FLAG_DOWN, tp->task_flags) || - !test_and_clear_bit(R8125_FLAG_TASK_LINKCHG_CHECK_PENDING, tp->task_flags)) - goto out_unlock; - - rtl8125_check_link_status(dev); - -out_unlock: - rtnl_unlock(); -} - #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0) static void rtl8125_tx_timeout(struct net_device *dev, unsigned int txqueue) @@ -13644,9 +13008,16 @@ rtl8125_tx_timeout(struct net_device *dev) #endif { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; + + spin_lock_irqsave(&tp->lock, flags); + rtl8125_stop_all_tx_queue(dev); + netif_carrier_off(dev); + rtl8125_hw_reset(dev); + spin_unlock_irqrestore(&tp->lock, flags); /* Let's wait a bit while any (async) irq lands on */ - rtl8125_schedule_reset_work(tp); + rtl8125_schedule_work(dev, rtl8125_reset_task); } static u32 @@ -13696,9 +13067,9 @@ rtl8125_xmit_frags(struct rtl8125_private *tp, PktLenCnt < ETH_FRAME_LEN && len > 1) { len -= 1; - mapping = dma_map_single(tp_to_dev(tp), addr, len, DMA_TO_DEVICE); + mapping = dma_map_single(&tp->pci_dev->dev, addr, len, DMA_TO_DEVICE); - if (unlikely(dma_mapping_error(tp_to_dev(tp), mapping))) { + if (unlikely(dma_mapping_error(&tp->pci_dev->dev, mapping))) { if (unlikely(net_ratelimit())) netif_err(tp, drv, tp->dev, "Failed to map TX fragments DMA!\n"); @@ -13726,9 +13097,9 @@ rtl8125_xmit_frags(struct rtl8125_private *tp, LsoPatchEnabled = TRUE; } - mapping = dma_map_single(tp_to_dev(tp), addr, len, DMA_TO_DEVICE); + mapping = dma_map_single(&tp->pci_dev->dev, addr, len, DMA_TO_DEVICE); - if (unlikely(dma_mapping_error(tp_to_dev(tp), mapping))) { + if (unlikely(dma_mapping_error(&tp->pci_dev->dev, mapping))) { if (unlikely(net_ratelimit())) netif_err(tp, drv, tp->dev, "Failed to map TX fragments DMA!\n"); @@ -13780,21 +13151,14 @@ __be16 get_protocol(struct sk_buff *skb) static inline u8 rtl8125_get_l4_protocol(struct sk_buff *skb) { - int no = skb_network_offset(skb); - struct ipv6hdr *i6h, _i6h; - struct iphdr *ih, _ih; u8 ip_protocol = IPPROTO_RAW; switch (get_protocol(skb)) { case __constant_htons(ETH_P_IP): - ih = skb_header_pointer(skb, no, sizeof(_ih), &_ih); - if (ih) - ip_protocol = ih->protocol; + ip_protocol = ip_hdr(skb)->protocol; break; case __constant_htons(ETH_P_IPV6): - i6h = skb_header_pointer(skb, no, sizeof(_i6h), &_i6h); - if (i6h) - ip_protocol = i6h->nexthdr; + ip_protocol = ipv6_hdr(skb)->nexthdr; break; } @@ -14057,7 +13421,7 @@ static bool rtl8125_tx_slots_avail(struct rtl8125_private *tp, return slots_avail > MAX_SKB_FRAGS; } -static netdev_tx_t +static int rtl8125_start_xmit(struct sk_buff *skb, struct net_device *dev) { @@ -14067,7 +13431,8 @@ rtl8125_start_xmit(struct sk_buff *skb, dma_addr_t mapping; u32 len; u32 opts[2]; - netdev_tx_t ret = NETDEV_TX_OK; + int ret = NETDEV_TX_OK; + //unsigned long flags; int frags; u8 EnableTxNoClose = tp->EnableTxNoClose; const u16 queue_mapping = skb_get_queue_mapping(skb); @@ -14078,6 +13443,8 @@ rtl8125_start_xmit(struct sk_buff *skb, ring = &tp->tx_ring[queue_mapping]; + //spin_lock_irqsave(&tp->lock, flags); + if (unlikely(!rtl8125_tx_slots_avail(tp, ring))) { if (netif_msg_drv(tp)) { printk(KERN_ERR @@ -14123,8 +13490,8 @@ rtl8125_start_xmit(struct sk_buff *skb, } opts[0] = rtl8125_get_txd_opts1(opts[0], len, entry); - mapping = dma_map_single(tp_to_dev(tp), skb->data, len, DMA_TO_DEVICE); - if (unlikely(dma_mapping_error(tp_to_dev(tp), mapping))) { + mapping = dma_map_single(&tp->pci_dev->dev, skb->data, len, DMA_TO_DEVICE); + if (unlikely(dma_mapping_error(&tp->pci_dev->dev, mapping))) { if (unlikely(net_ratelimit())) netif_err(tp, drv, dev, "Failed to map TX DMA!\n"); goto err_dma_1; @@ -14187,6 +13554,8 @@ rtl8125_start_xmit(struct sk_buff *skb, if (rtl8125_tx_slots_avail(tp, ring)) netif_start_subqueue(dev, queue_mapping); } + + //spin_unlock_irqrestore(&tp->lock, flags); out: return ret; err_dma_1: @@ -14194,6 +13563,7 @@ err_dma_1: rtl8125_tx_clear_range(tp, ring, ring->cur_tx + 1, frags); err_dma_0: RTLDEV->stats.tx_dropped++; + //spin_unlock_irqrestore(&tp->lock, flags); dev_kfree_skb_any(skb); ret = NETDEV_TX_OK; goto out; @@ -14201,6 +13571,8 @@ err_stop: netif_stop_subqueue(dev, queue_mapping); ret = NETDEV_TX_BUSY; RTLDEV->stats.tx_dropped++; + + //spin_unlock_irqrestore(&tp->lock, flags); goto out; } @@ -14220,16 +13592,15 @@ rtl8125_tx_interrupt(struct rtl8125_tx_ring *ring, int budget) u8 EnableTxNoClose = tp->EnableTxNoClose; dirty_tx = ring->dirty_tx; - smp_rmb(); - tx_left = READ_ONCE(ring->cur_tx) - dirty_tx; if (EnableTxNoClose) { - unsigned int tx_desc_closed; u32 NextHwDesCloPtr = RTL_R16(tp, ring->hw_clo_ptr_reg); ring->NextHwDesCloPtr = NextHwDesCloPtr; smp_rmb(); - tx_desc_closed = rtl8125_fast_mod(NextHwDesCloPtr - ring->BeginHwDesCloPtr, MAX_TX_NO_CLOSE_DESC_PTR_V2); - if(tx_left > tx_desc_closed) tx_left = tx_desc_closed; + tx_left = rtl8125_fast_mod(NextHwDesCloPtr - ring->BeginHwDesCloPtr, MAX_TX_NO_CLOSE_DESC_PTR_V2); ring->BeginHwDesCloPtr = NextHwDesCloPtr; + } else { + smp_rmb(); + tx_left = READ_ONCE(ring->cur_tx) - dirty_tx; } while (tx_left > 0) { @@ -14278,13 +13649,10 @@ rtl8125_tx_interrupt_with_vector(struct rtl8125_private *tp, int budget) { int count = 0; - if (message_id == 16) count += rtl8125_tx_interrupt(&tp->tx_ring[0], budget); -#ifdef ENABLE_MULTIPLE_TX_QUEUE else if (message_id == 18) count += rtl8125_tx_interrupt(&tp->tx_ring[1], budget); -#endif return count; } @@ -14499,63 +13867,47 @@ process_pkt: #ifdef ENABLE_PTP_SUPPORT if (tp->EnablePtp) { + struct RxDescV3 *desc_next; u8 desc_type; + u32 status_next; desc_type = rtl8125_rx_desc_type(status); if (desc_type == RXDESC_TYPE_NEXT && rx_left > 0) { - u32 status_next; - struct RxDescV3 *desc_next; unsigned int entry_next; struct sk_buff *skb_next; - entry_next = (cur_rx + 1) % NUM_RX_DESC; - desc_next = (struct RxDescV3 *)rtl8125_get_rxdesc(tp, ring->RxDescArray, entry_next); - rmb(); - status_next = le32_to_cpu(desc_next->RxDescNormalDDWord4.opts1); - if (unlikely(status_next & DescOwn)) { - udelay(1); - rmb(); - status_next = le32_to_cpu(desc_next->RxDescNormalDDWord4.opts1); - if (unlikely(status_next & DescOwn)) { - if (netif_msg_rx_err(tp)) { - printk(KERN_ERR - "%s: Rx Next Desc ERROR. status = %08x\n", - dev->name, status_next); - } - break; - } - } - cur_rx++; rx_left--; - desc_type = rtl8125_rx_desc_type(status_next); - if (desc_type == RXDESC_TYPE_PTP) - rtl8125_rx_ptp_pktstamp(tp, skb, desc_next); - else - WARN_ON(1); + entry_next = cur_rx % NUM_RX_DESC; + desc_next = (struct RxDescV3 *)rtl8125_get_rxdesc(tp, ring->RxDescArray, entry_next); + status_next = le32_to_cpu(desc_next->RxDescNormalDDWord4.opts1); + if (status_next & DescOwn) + break; - rx_buf_phy_addr = ring->RxDescPhyAddr[entry_next]; - dma_unmap_single(tp_to_dev(tp), rx_buf_phy_addr, - tp->rx_buf_sz, DMA_FROM_DEVICE); - skb_next = ring->Rx_skbuff[entry_next]; - dev_kfree_skb_any(skb_next); - ring->Rx_skbuff[entry_next] = NULL; + desc_type = rtl8125_rx_desc_type(status_next); + if (desc_type == RXDESC_TYPE_PTP) { + rtl8125_rx_ptp_pktstamp(tp, skb, desc_next); + skb_next = ring->Rx_skbuff[entry_next]; + dev_kfree_skb_any(skb_next); + ring->Rx_skbuff[entry_next] = NULL; + } else + WARN_ON(1); } else WARN_ON(desc_type != RXDESC_TYPE_NORMAL); } #endif - rx_buf_phy_addr = ring->RxDescPhyAddr[entry]; - dma_sync_single_for_cpu(tp_to_dev(tp), + rx_buf_phy_addr = le64_to_cpu(ring->RxDescPhyAddr[entry]); + dma_sync_single_for_cpu(&tp->pci_dev->dev, rx_buf_phy_addr, tp->rx_buf_sz, DMA_FROM_DEVICE); if (rtl8125_try_rx_copy(tp, ring, &skb, pkt_size, desc, tp->rx_buf_sz)) { ring->Rx_skbuff[entry] = NULL; - dma_unmap_single(tp_to_dev(tp), rx_buf_phy_addr, + dma_unmap_single(&tp->pci_dev->dev, rx_buf_phy_addr, tp->rx_buf_sz, DMA_FROM_DEVICE); } else { - dma_sync_single_for_device(tp_to_dev(tp), rx_buf_phy_addr, + dma_sync_single_for_device(&tp->pci_dev->dev, rx_buf_phy_addr, tp->rx_buf_sz, DMA_FROM_DEVICE); } @@ -14655,16 +14007,12 @@ static irqreturn_t rtl8125_interrupt(int irq, void *dev_instance) handled = 1; -#if defined(RTL_USE_NEW_INTR_API) - if (!tp->irq_tbl[0].requested) - break; -#endif rtl8125_disable_hw_interrupt(tp); RTL_W32(tp, tp->isr_reg[0], status&~RxFIFOOver); if (rtl8125_linkchg_interrupt(tp, status)) - rtl8125_schedule_linkchg_work(tp); + rtl8125_check_link_status(dev, 0); #ifdef ENABLE_DASH_SUPPORT if (tp->DASH) { @@ -14754,18 +14102,14 @@ static irqreturn_t rtl8125_interrupt_msix(int irq, void *dev_instance) #endif do { -#if defined(RTL_USE_NEW_INTR_API) - if (!tp->irq_tbl[message_id].requested) - break; -#endif rtl8125_disable_hw_interrupt_v2(tp, message_id); rtl8125_clear_hw_isr_v2(tp, message_id); //link change if (message_id == 21) { - rtl8125_schedule_linkchg_work(tp); - break; + rtl8125_check_link_status(dev, 0); + return IRQ_HANDLED; } #ifdef CONFIG_R8125_NAPI @@ -14783,7 +14127,9 @@ static irqreturn_t rtl8125_interrupt_msix(int irq, void *dev_instance) #endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) } + //spin_lock_irqsave(&tp->lock, flags); rtl8125_tx_interrupt_with_vector(tp, message_id, ~(u32)0); + //spin_unlock_irqrestore(&tp->lock, flags); rtl8125_enable_hw_interrupt_v2(tp, message_id); #endif @@ -14796,15 +14142,18 @@ static irqreturn_t rtl8125_interrupt_msix(int irq, void *dev_instance) static void rtl8125_down(struct net_device *dev) { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; - //rtl8125_delete_esd_timer(dev, &tp->esd_timer); + rtl8125_delete_esd_timer(dev, &tp->esd_timer); //rtl8125_delete_link_timer(dev, &tp->link_timer); - netif_tx_disable(dev); + rtl8125_stop_all_tx_queue(dev); _rtl8125_wait_for_quiescence(dev); + spin_lock_irqsave(&tp->lock, flags); + netif_carrier_off(dev); rtl8125_hw_reset(dev); @@ -14812,6 +14161,8 @@ static void rtl8125_down(struct net_device *dev) rtl8125_tx_clear(tp); rtl8125_rx_clear(tp); + + spin_unlock_irqrestore(&tp->lock, flags); } static int rtl8125_resource_freed(struct rtl8125_private *tp) @@ -14827,17 +14178,17 @@ static int rtl8125_resource_freed(struct rtl8125_private *tp) return 1; } -int rtl8125_close(struct net_device *dev) +static int rtl8125_close(struct net_device *dev) { struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; if (!rtl8125_resource_freed(tp)) { - set_bit(R8125_FLAG_DOWN, tp->task_flags); + rtl8125_cancel_schedule_work(dev); rtl8125_down(dev); - pci_clear_master(tp->pci_dev); - + spin_lock_irqsave(&tp->lock, flags); #ifdef ENABLE_PTP_SUPPORT rtl8125_ptp_stop(tp); #endif @@ -14845,13 +14196,19 @@ int rtl8125_close(struct net_device *dev) rtl8125_powerdown_pll(dev, 0); + spin_unlock_irqrestore(&tp->lock, flags); + rtl8125_free_irq(tp); rtl8125_free_alloc_resources(tp); } else { + spin_lock_irqsave(&tp->lock, flags); + rtl8125_hw_d3_para(dev); rtl8125_powerdown_pll(dev, 0); + + spin_unlock_irqrestore(&tp->lock, flags); } return 0; @@ -14863,8 +14220,6 @@ static void rtl8125_shutdown(struct pci_dev *pdev) struct net_device *dev = pci_get_drvdata(pdev); struct rtl8125_private *tp = netdev_priv(dev); - rtnl_lock(); - if (tp->DASH) rtl8125_driver_stop(tp); @@ -14877,14 +14232,6 @@ static void rtl8125_shutdown(struct pci_dev *pdev) rtl8125_close(dev); rtl8125_disable_msi(pdev, tp); - - rtnl_unlock(); - - if (system_state == SYSTEM_POWER_OFF) { - pci_clear_master(tp->pci_dev); - pci_wake_from_d3(pdev, tp->wol_enabled); - pci_set_power_state(pdev, PCI_D3hot); - } } #endif @@ -14900,6 +14247,11 @@ net_device_stats *rtl8125_get_stats(struct net_device *dev) #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22) struct rtl8125_private *tp = netdev_priv(dev); #endif + if (netif_running(dev)) { +// spin_lock_irqsave(&tp->lock, flags); +// spin_unlock_irqrestore(&tp->lock, flags); + } + return &RTLDEV->stats; } @@ -14926,44 +14278,40 @@ rtl8125_suspend(struct pci_dev *pdev, pm_message_t state) #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10) u32 pci_pm_state = pci_choose_state(pdev, state); #endif + unsigned long flags; + if (!netif_running(dev)) goto out; - //rtl8125_cancel_all_schedule_work(tp); + rtl8125_cancel_schedule_work(dev); - //rtl8125_delete_esd_timer(dev, &tp->esd_timer); + rtl8125_delete_esd_timer(dev, &tp->esd_timer); //rtl8125_delete_link_timer(dev, &tp->link_timer); - rtnl_lock(); - - set_bit(R8125_FLAG_DOWN, tp->task_flags); - - netif_tx_disable(dev); + rtl8125_stop_all_tx_queue(dev); netif_carrier_off(dev); netif_device_detach(dev); + spin_lock_irqsave(&tp->lock, flags); + #ifdef ENABLE_PTP_SUPPORT rtl8125_ptp_suspend(tp); #endif rtl8125_hw_reset(dev); - pci_clear_master(pdev); - rtl8125_hw_d3_para(dev); rtl8125_powerdown_pll(dev, 1); + spin_unlock_irqrestore(&tp->lock, flags); + if (tp->DASH) rtl8125_driver_stop(tp); - - rtnl_unlock(); out: - pci_disable_device(pdev); - #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10) pci_save_state(pdev, &pci_pm_state); #else @@ -14972,8 +14320,7 @@ out: #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) pci_enable_wake(pdev, pci_choose_state(pdev, state), tp->wol_enabled); #endif - - pci_prepare_to_sleep(pdev); + //pci_set_power_state(pdev, pci_choose_state(pdev, state)); return 0; } @@ -14984,21 +14331,6 @@ rtl8125_hw_d3_not_power_off(struct net_device *dev) return rtl8125_check_hw_phy_mcu_code_ver(dev); } -static int rtl8125_wait_phy_nway_complete_sleep(struct rtl8125_private *tp) -{ - int i, val; - - for (i = 0; i < 30; i++) { - val = rtl8125_mdio_read(tp, MII_BMSR) & BMSR_ANEGCOMPLETE; - if (val) - return 0; - - msleep(100); - } - - return -1; -} - #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,29) static int rtl8125_resume(struct pci_dev *pdev) @@ -15014,18 +14346,12 @@ rtl8125_resume(struct device *device) struct net_device *dev = pci_get_drvdata(pdev); #endif struct rtl8125_private *tp = netdev_priv(dev); + unsigned long flags; #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10) u32 pci_pm_state = PCI_D0; #endif - u32 err; - rtnl_lock(); - - err = pci_enable_device(pdev); - if (err) { - dev_err(&pdev->dev, "Cannot enable PCI device from suspend\n"); - goto out_unlock; - } + pci_set_power_state(pdev, PCI_D0); #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10) pci_restore_state(pdev, &pci_pm_state); #else @@ -15033,39 +14359,50 @@ rtl8125_resume(struct device *device) #endif pci_enable_wake(pdev, PCI_D0, 0); + spin_lock_irqsave(&tp->lock, flags); + /* restore last modified mac address */ rtl8125_rar_set(tp, dev->dev_addr); - tp->resume_not_chg_speed = 0; if (tp->check_keep_link_speed && //tp->link_ok(dev) && - rtl8125_hw_d3_not_power_off(dev) && - rtl8125_wait_phy_nway_complete_sleep(tp) == 0) + rtl8125_hw_d3_not_power_off(dev)) tp->resume_not_chg_speed = 1; + else + tp->resume_not_chg_speed = 0; + + spin_unlock_irqrestore(&tp->lock, flags); if (!netif_running(dev)) - goto out_unlock; + goto out; - pci_set_master(pdev); + spin_lock_irqsave(&tp->lock, flags); rtl8125_exit_oob(dev); - rtl8125_up(dev); + rtl8125_hw_init(dev); - clear_bit(R8125_FLAG_DOWN, tp->task_flags); + rtl8125_powerup_pll(dev); - rtl8125_schedule_reset_work(tp); + rtl8125_hw_ephy_config(dev); - rtl8125_schedule_esd_work(tp); + rtl8125_hw_phy_config(dev); + + rtl8125_hw_config(dev); + + spin_unlock_irqrestore(&tp->lock, flags); + + if (tp->resume_not_chg_speed) + rtl8125_check_link_status(dev, 1); + else + rtl8125_schedule_work(dev, rtl8125_reset_task); - //mod_timer(&tp->esd_timer, jiffies + RTL8125_ESD_TIMEOUT); - //mod_timer(&tp->link_timer, jiffies + RTL8125_LINK_TIMEOUT); -out_unlock: netif_device_attach(dev); - rtnl_unlock(); - - return err; + mod_timer(&tp->esd_timer, jiffies + RTL8125_ESD_TIMEOUT); + //mod_timer(&tp->link_timer, jiffies + RTL8125_LINK_TIMEOUT); +out: + return 0; } #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29) diff --git a/r8125/src/r8125_ptp.c b/r8125/src/r8125_ptp.c old mode 100755 new mode 100644 diff --git a/r8125/src/r8125_ptp.h b/r8125/src/r8125_ptp.h old mode 100755 new mode 100644 diff --git a/r8125/src/r8125_realwow.h b/r8125/src/r8125_realwow.h old mode 100755 new mode 100644 diff --git a/r8125/src/r8125_rss.c b/r8125/src/r8125_rss.c old mode 100755 new mode 100644 index 78e53f514..a77917a93 --- a/r8125/src/r8125_rss.c +++ b/r8125/src/r8125_rss.c @@ -336,6 +336,9 @@ int rtl8125_get_rxfh(struct net_device *dev, u32 *indir, u8 *key, return 0; } +#define RSS_KEY_8125 0x4600 +#define RSS_INDIRECTION_TBL_8125_V2 0x4700 + static u32 rtl8125_rss_key_reg(struct rtl8125_private *tp) { return RSS_KEY_8125; diff --git a/r8125/src/r8125_rss.h b/r8125/src/r8125_rss.h old mode 100755 new mode 100644 index 90e280902..d77752816 --- a/r8125/src/r8125_rss.h +++ b/r8125/src/r8125_rss.h @@ -38,9 +38,6 @@ #include #include -#define RTL8125_RSS_KEY_SIZE 40 /* size of RSS Hash Key in bytes */ -#define RTL8125_MAX_INDIRECTION_TABLE_ENTRIES 128 - enum rtl8125_rss_flag { RTL_8125_RSS_FLAG_HASH_UDP_IPV4 = (1 << 0), RTL_8125_RSS_FLAG_HASH_UDP_IPV6 = (1 << 1), diff --git a/r8125/src/rtl_eeprom.c b/r8125/src/rtl_eeprom.c old mode 100755 new mode 100644 diff --git a/r8125/src/rtl_eeprom.h b/r8125/src/rtl_eeprom.h old mode 100755 new mode 100644 diff --git a/r8125/src/rtltool.c b/r8125/src/rtltool.c old mode 100755 new mode 100644 index ace717bde..a9c46ea74 --- a/r8125/src/rtltool.c +++ b/r8125/src/rtltool.c @@ -47,6 +47,7 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) { struct rtltool_cmd my_cmd; + unsigned long flags; int ret; if (copy_from_user(&my_cmd, ifr->ifr_data, sizeof(my_cmd))) @@ -96,7 +97,10 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); my_cmd.data = rtl8125_mdio_prot_read(tp, my_cmd.offset); + spin_unlock_irqrestore(&tp->lock, flags); + if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) { ret = -EFAULT; break; @@ -108,14 +112,19 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); rtl8125_mdio_prot_write(tp, my_cmd.offset, my_cmd.data); + spin_unlock_irqrestore(&tp->lock, flags); break; case RTLTOOL_READ_EPHY: if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); my_cmd.data = rtl8125_ephy_read(tp, my_cmd.offset); + spin_unlock_irqrestore(&tp->lock, flags); + if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) { ret = -EFAULT; break; @@ -127,13 +136,17 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); rtl8125_ephy_write(tp, my_cmd.offset, my_cmd.data); + spin_unlock_irqrestore(&tp->lock, flags); break; case RTLTOOL_READ_ERI: my_cmd.data = 0; if (my_cmd.len==1 || my_cmd.len==2 || my_cmd.len==4) { + spin_lock_irqsave(&tp->lock, flags); my_cmd.data = rtl8125_eri_read(tp, my_cmd.offset, my_cmd.len, ERIAR_ExGMAC); + spin_unlock_irqrestore(&tp->lock, flags); } else { ret = -EOPNOTSUPP; break; @@ -154,7 +167,9 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) return -EPERM; if (my_cmd.len==1 || my_cmd.len==2 || my_cmd.len==4) { + spin_lock_irqsave(&tp->lock, flags); rtl8125_eri_write(tp, my_cmd.offset, my_cmd.len, my_cmd.data, ERIAR_ExGMAC); + spin_unlock_irqrestore(&tp->lock, flags); } else { ret = -EOPNOTSUPP; break; @@ -210,7 +225,10 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); my_cmd.data = rtl8125_eeprom_read_sc(tp, my_cmd.offset); + spin_unlock_irqrestore(&tp->lock, flags); + if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) { ret = -EFAULT; break; @@ -222,16 +240,21 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); rtl8125_eeprom_write_sc(tp, my_cmd.offset, my_cmd.data); + spin_unlock_irqrestore(&tp->lock, flags); break; case RTL_READ_OOB_MAC: if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); rtl8125_oob_mutex_lock(tp); my_cmd.data = rtl8125_ocp_read(tp, my_cmd.offset, 4); rtl8125_oob_mutex_unlock(tp); + spin_unlock_irqrestore(&tp->lock, flags); + if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) { ret = -EFAULT; break; @@ -245,16 +268,20 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) if (my_cmd.len == 0 || my_cmd.len > 4) return -EOPNOTSUPP; + spin_lock_irqsave(&tp->lock, flags); rtl8125_oob_mutex_lock(tp); rtl8125_ocp_write(tp, my_cmd.offset, my_cmd.len, my_cmd.data); rtl8125_oob_mutex_unlock(tp); + spin_unlock_irqrestore(&tp->lock, flags); break; case RTL_ENABLE_PCI_DIAG: if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); tp->rtk_enable_diag = 1; + spin_unlock_irqrestore(&tp->lock, flags); dprintk("enable rtk diag\n"); break; @@ -263,7 +290,9 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); tp->rtk_enable_diag = 0; + spin_unlock_irqrestore(&tp->lock, flags); dprintk("disable rtk diag\n"); break; @@ -275,7 +304,10 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) if (my_cmd.offset % 2) return -EOPNOTSUPP; + spin_lock_irqsave(&tp->lock, flags); my_cmd.data = rtl8125_mac_ocp_read(tp, my_cmd.offset); + spin_unlock_irqrestore(&tp->lock, flags); + if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) { ret = -EFAULT; break; @@ -289,14 +321,19 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) if ((my_cmd.offset % 2) || (my_cmd.len != 2)) return -EOPNOTSUPP; + spin_lock_irqsave(&tp->lock, flags); rtl8125_mac_ocp_write(tp, my_cmd.offset, (u16)my_cmd.data); + spin_unlock_irqrestore(&tp->lock, flags); break; case RTL_DIRECT_READ_PHY_OCP: if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); my_cmd.data = rtl8125_mdio_prot_direct_read_phy_ocp(tp, my_cmd.offset); + spin_unlock_irqrestore(&tp->lock, flags); + if (copy_to_user(ifr->ifr_data, &my_cmd, sizeof(my_cmd))) { ret = -EFAULT; break; @@ -308,7 +345,9 @@ int rtl8125_tool_ioctl(struct rtl8125_private *tp, struct ifreq *ifr) if (!capable(CAP_NET_ADMIN)) return -EPERM; + spin_lock_irqsave(&tp->lock, flags); rtl8125_mdio_prot_direct_write_phy_ocp(tp, my_cmd.offset, my_cmd.data); + spin_unlock_irqrestore(&tp->lock, flags); break; default: diff --git a/r8125/src/rtltool.h b/r8125/src/rtltool.h old mode 100755 new mode 100644 diff --git a/r8168/patches/001-r8168-add-LED-configuration-from-OF.patch b/r8168/patches/001-r8168-add-LED-configuration-from-OF.patch deleted file mode 100644 index 62a352dd8..000000000 --- a/r8168/patches/001-r8168-add-LED-configuration-from-OF.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- a/src/r8168_n.c -+++ b/src/r8168_n.c -@@ -47,6 +47,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -23482,6 +23483,22 @@ rtl8168_set_bios_setting(struct net_devi - } - } - -+static int rtl8168_led_configuration(struct rtl8168_private *tp) -+{ -+ u32 led_data; -+ int ret; -+ -+ ret = of_property_read_u32(tp->pci_dev->dev.of_node, -+ "realtek,led-data", &led_data); -+ -+ if (ret) -+ return ret; -+ -+ RTL_W16(tp, CustomLED, led_data); -+ -+ return 0; -+} -+ - static void - rtl8168_init_software_variable(struct net_device *dev) - { -@@ -24000,6 +24017,8 @@ rtl8168_init_software_variable(struct ne - tp->NotWrMcuPatchCode = TRUE; - } - -+ rtl8168_led_configuration(tp); -+ - tp->NicCustLedValue = RTL_R16(tp, CustomLED); - - rtl8168_get_hw_wol(dev); diff --git a/shadowsocks-libev/Makefile b/shadowsocks-libev/Makefile index 1cef501f0..00c12c7f5 100644 --- a/shadowsocks-libev/Makefile +++ b/shadowsocks-libev/Makefile @@ -14,11 +14,12 @@ include $(TOPDIR)/rules.mk # - check if default mode has changed from being tcp_only # PKG_NAME:=shadowsocks-libev -PKG_RELEASE:=11 -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL:=https://github.com/Ysurac/shadowsocks-libev.git -PKG_SOURCE_VERSION:=410950d87d8cdf8502d8f59a79dc0ff4c7677543 -PKG_VERSION:=3.3.5-$(PKG_SOURCE_VERSION) +PKG_VERSION:=3.3.5 +PKG_RELEASE:=10 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://github.com/shadowsocks/shadowsocks-libev/releases/download/v$(PKG_VERSION) +PKG_HASH:=cfc8eded35360f4b67e18dc447b0c00cddb29cc57a3cec48b135e5fb87433488 PKG_MAINTAINER:=Ycarus (Yannick Chabanois) diff --git a/shadowsocks-libev/files/shadowsocks.conf b/shadowsocks-libev/files/shadowsocks.conf index a80d14c85..9c6f64727 100644 --- a/shadowsocks-libev/files/shadowsocks.conf +++ b/shadowsocks-libev/files/shadowsocks.conf @@ -52,5 +52,5 @@ net.ipv4.tcp_mtu_probing = 0 # Default conntrack is too small net.netfilter.nf_conntrack_max = 131072 -net.ipv4.tcp_ecn = 2 +net.ipv4.tcp_ecn = 1 #net.ipv4.tcp_sack = 0 diff --git a/shadowsocks-libev/patches/020-NOCRYPTO.patch b/shadowsocks-libev/patches/020-NOCRYPTO.patch new file mode 100644 index 000000000..fbe0cc883 --- /dev/null +++ b/shadowsocks-libev/patches/020-NOCRYPTO.patch @@ -0,0 +1,632 @@ +From e9fc31e06453cacf662448663f0c79ae4878fed5 Mon Sep 17 00:00:00 2001 +From: Fejes Ferenc +Date: Mon, 31 Jul 2017 12:08:11 +0200 +Subject: [PATCH 01/17] No encryption initial implementation + +Set cipher az "none" to disable encryption. +--- + completions/bash/ss-local | 2 +- + completions/bash/ss-manager | 2 +- + completions/bash/ss-redir | 2 +- + completions/bash/ss-server | 4 ++-- + completions/bash/ss-tunnel | 2 +- + completions/zsh/_ss-local | 2 +- + completions/zsh/_ss-manager | 2 +- + completions/zsh/_ss-redir | 2 +- + completions/zsh/_ss-server | 2 +- + completions/zsh/_ss-tunnel | 2 +- + doc/shadowsocks-libev.asciidoc | 4 +++- + doc/ss-local.asciidoc | 4 +++- + doc/ss-manager.asciidoc | 4 +++- + doc/ss-redir.asciidoc | 4 +++- + doc/ss-server.asciidoc | 4 +++- + doc/ss-tunnel.asciidoc | 4 +++- + src/Makefile.am | 3 ++- + src/crypto.c | 15 +++++++++++++++ + src/noencrypt.c | 25 +++++++++++++++++++++++++ + src/noencrypt.h | 11 +++++++++++ + src/server.c | 2 +- + src/stream.c | 17 ++++++++--------- + src/utils.c | 2 +- + 27 files changed, 100 insertions(+), 37 deletions(-) + create mode 100644 src/noencrypt.c + create mode 100644 src/noencrypt.h + +diff --git a/completions/bash/ss-local b/completions/bash/ss-local +index 0186ccc4..57fa318b 100644 +--- a/completions/bash/ss-local ++++ b/completions/bash/ss-local +@@ -2,7 +2,7 @@ _ss_local() + { + local cur prev opts ciphers + opts='-s -p -l -k -m -a -f -t -c -n -i -b -u -U -v -h --reuse-port --fast-open --acl --mtu --mptcp --no-delay --key --plugin --plugin-opts --help' +- ciphers='rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf' ++ ciphers='none rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf' + cur=${COMP_WORDS[COMP_CWORD]} + prev="${COMP_WORDS[COMP_CWORD-1]}" + case "$prev" in +diff --git a/completions/bash/ss-manager b/completions/bash/ss-manager +index d3168a3b..de13c9e9 100644 +--- a/completions/bash/ss-manager ++++ b/completions/bash/ss-manager +@@ -2,7 +2,7 @@ _ss_manager() + { + local cur prev opts ciphers + opts='-s -p -l -k -m -a -f -t -c -n -i -b -u -U -v -h --reuse-port --manager-address --executable --mtu --mptcp --plugin --plugin-opts --help' +- ciphers='rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf' ++ ciphers='none rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf' + cur=${COMP_WORDS[COMP_CWORD]} + prev="${COMP_WORDS[COMP_CWORD-1]}" + case "$prev" in +diff --git a/completions/bash/ss-redir b/completions/bash/ss-redir +index 9a14efe8..fdc7b21e 100644 +--- a/completions/bash/ss-redir ++++ b/completions/bash/ss-redir +@@ -2,7 +2,7 @@ _ss_redir() + { + local cur prev opts ciphers + opts='-s -p -l -k -m -a -f -t -c -n -b -u -U -T -v -h --reuse-port --mtu --mptcp --key --plugin --plugin-opts --help' +- ciphers='rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf' ++ ciphers='none rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf' + cur=${COMP_WORDS[COMP_CWORD]} + prev="${COMP_WORDS[COMP_CWORD-1]}" + case "$prev" in +diff --git a/completions/bash/ss-server b/completions/bash/ss-server +index cec983ce..d8f3c298 100644 +--- a/completions/bash/ss-server ++++ b/completions/bash/ss-server +@@ -1,8 +1,8 @@ + _ss_server() + { + local cur prev opts ciphers +- opts='-s -p -l -k -m -a -f -t -c -n -i -b -u -U -6 -d -v -h --reuse-port --fast-open --acl --manager-address --mtu --mptcp --no-delay --key --plugin --plugin-opts --help' +- ciphers='rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf' ++ opts='-s -p -l -k -m -a -f -t -c -n -i -b -u -U -6 -d -v -h --reuse-port --fast-open --acl --manager-address --mtu --mptcp --key --plugin --plugin-opts --help' ++ ciphers='none rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf' + COMPREPLY=() + cur=${COMP_WORDS[COMP_CWORD]} + prev="${COMP_WORDS[COMP_CWORD-1]}" +diff --git a/completions/bash/ss-tunnel b/completions/bash/ss-tunnel +index 707dc7a9..2e119098 100644 +--- a/completions/bash/ss-tunnel ++++ b/completions/bash/ss-tunnel +@@ -2,7 +2,7 @@ _ss_tunnel() + { + local cur prev opts ciphers + opts='-s -p -l -k -m -a -f -t -c -n -i -b -u -U -L -v -h --reuse-port --mtu --mptcp --key --plugin --plugin-opts --help' +- ciphers='rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf' ++ ciphers='none rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf' + cur=${COMP_WORDS[COMP_CWORD]} + prev="${COMP_WORDS[COMP_CWORD-1]}" + compopt +o nospace +diff --git a/completions/zsh/_ss-local b/completions/zsh/_ss-local +index c56ed521..8b12b767 100644 +--- a/completions/zsh/_ss-local ++++ b/completions/zsh/_ss-local +@@ -1,7 +1,7 @@ + #compdef ss-local + + local ciphers +-ciphers='(rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf)' ++ciphers='(none rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf)' + + _arguments "-h::" \ + "-s:server host:_hosts" \ +diff --git a/completions/zsh/_ss-manager b/completions/zsh/_ss-manager +index 3e65f6c8..66c101a1 100644 +--- a/completions/zsh/_ss-manager ++++ b/completions/zsh/_ss-manager +@@ -1,7 +1,7 @@ + #compdef ss-manager + + local ciphers +-ciphers='(rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf)' ++ciphers='(none rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf)' + + _arguments "-h::" \ + "-s:server host:_hosts" \ +diff --git a/completions/zsh/_ss-redir b/completions/zsh/_ss-redir +index 4f3b065e..6ef867f3 100644 +--- a/completions/zsh/_ss-redir ++++ b/completions/zsh/_ss-redir +@@ -1,7 +1,7 @@ + #compdef ss-redir + + local ciphers +-ciphers='(rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf)' ++ciphers='(none rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf)' + + _arguments "-h::" \ + "-s:server host:_hosts" \ +diff --git a/completions/zsh/_ss-server b/completions/zsh/_ss-server +index 8d9f4316..76bae33c 100644 +--- a/completions/zsh/_ss-server ++++ b/completions/zsh/_ss-server +@@ -1,7 +1,7 @@ + #compdef ss-server + + local ciphers +-ciphers='(rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf)' ++ciphers='(none rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf)' + + _arguments "-h::" \ + "-s:server host:_hosts" \ +diff --git a/completions/zsh/_ss-tunnel b/completions/zsh/_ss-tunnel +index 5a269900..248451f9 100644 +--- a/completions/zsh/_ss-tunnel ++++ b/completions/zsh/_ss-tunnel +@@ -1,7 +1,7 @@ + #compdef ss-tunnel + + local ciphers +-ciphers='(rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf)' ++ciphers='(none rc4-md5 aes-128-gcm aes-192-gcm aes-256-gcm aes-128-cfb aes-192-cfb aes-256-cfb aes-128-ctr aes-192-ctr aes-256-ctr camellia-128-cfb camellia-192-cfb camellia-256-cfb bf-cfb chacha20-ietf-poly1305 xchacha20-ietf-poly1305 salsa20 chacha20 chacha20-ietf)' + + _arguments "-h::" \ + "-s:server host:_hosts" \ +diff --git a/doc/shadowsocks-libev.asciidoc b/doc/shadowsocks-libev.asciidoc +index 5a62f669..f0844a3f 100644 +--- a/doc/shadowsocks-libev.asciidoc ++++ b/doc/shadowsocks-libev.asciidoc +@@ -54,7 +54,9 @@ Set the key directly. The key should be encoded with URL-safe Base64. + Not available in manager mode. + + -m :: +-Set the cipher. ++Set the cipher or turn off the encryption. +++ ++To disable encryption use `none` as cipher. + + + *Shadowsocks-libev* accepts 18 different ciphers: + + +diff --git a/doc/ss-local.asciidoc b/doc/ss-local.asciidoc +index 931fcd54..82439e0f 100644 +--- a/doc/ss-local.asciidoc ++++ b/doc/ss-local.asciidoc +@@ -49,7 +49,9 @@ Set the password. The server and the client should use the same password. + Set the key directly. The key should be encoded with URL-safe Base64. + + -m :: +-Set the cipher. ++Set the cipher or turn off the encryption. +++ ++To disable encryption use `none` as cipher. + + + *Shadowsocks-libev* accepts 18 different ciphers: + + +diff --git a/doc/ss-manager.asciidoc b/doc/ss-manager.asciidoc +index f344cffa..bc00cac0 100644 +--- a/doc/ss-manager.asciidoc ++++ b/doc/ss-manager.asciidoc +@@ -41,7 +41,9 @@ Set the server's hostname or IP. + Set the password. The server and the client should use the same password. + + -m :: +-Set the cipher. ++Set the cipher or turn off the encryption. +++ ++To disable encryption use `none` as cipher. + + + *Shadowsocks-libev* accepts 18 different ciphers: + + +diff --git a/doc/ss-redir.asciidoc b/doc/ss-redir.asciidoc +index f9195b31..6a0207f0 100644 +--- a/doc/ss-redir.asciidoc ++++ b/doc/ss-redir.asciidoc +@@ -48,7 +48,9 @@ Set the password. The server and the client should use the same password. + Set the key directly. The key should be encoded with URL-safe Base64. + + -m :: +-Set the cipher. ++Set the cipher or turn off the encryption. +++ ++To disable encryption use `none` as cipher. + + + *Shadowsocks-libev* accepts 18 different ciphers: + + +diff --git a/doc/ss-server.asciidoc b/doc/ss-server.asciidoc +index 866f0605..0fbacb0c 100644 +--- a/doc/ss-server.asciidoc ++++ b/doc/ss-server.asciidoc +@@ -46,7 +46,9 @@ Set the password. The server and the client should use the same password. + Set the key directly. The key should be encoded with URL-safe Base64. + + -m :: +-Set the cipher. ++Set the cipher or turn off the encryption. +++ ++To disable encryption use `none` as cipher. + + + *Shadowsocks-libev* accepts 18 different ciphers: + + +diff --git a/doc/ss-tunnel.asciidoc b/doc/ss-tunnel.asciidoc +index b4b3e6ec..96ab1d5e 100644 +--- a/doc/ss-tunnel.asciidoc ++++ b/doc/ss-tunnel.asciidoc +@@ -48,7 +48,9 @@ Set the password. The server and the client should use the same password. + Set the key directly. The key should be encoded with URL-safe Base64. + + -m :: +-Set the cipher. ++Set the cipher or turn off the encryption. +++ ++To disable encryption use `none` as cipher. + + + *Shadowsocks-libev* accepts 18 different ciphers: + + +diff --git a/src/Makefile.am b/src/Makefile.am +index dcc5fd9b..2e689b7a 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -31,7 +31,8 @@ crypto_src = crypto.c \ + aead.c \ + stream.c \ + ppbloom.c \ +- base64.c ++ base64.c \ ++ noencrypt.c + + plugin_src = plugin.c + +diff --git a/src/crypto.c b/src/crypto.c +index df608cea..8c9044f6 100644 +--- a/src/crypto.c ++++ b/src/crypto.c +@@ -41,6 +41,7 @@ + #include "aead.h" + #include "utils.h" + #include "ppbloom.h" ++#include "noencrypt.h" + + int + balloc(buffer_t *ptr, size_t capacity) +@@ -144,6 +145,20 @@ crypto_init(const char *password, const char *key, const char *method) + #endif + + if (method != NULL) { ++ if (strncmp(method, "none", 4) == 0) { ++ crypto_t *crypto = (crypto_t *) malloc(sizeof(crypto_t)); ++ crypto_t temp = { ++ .chiper = NULL, ++ .encrypt_all = &none_stream_all, ++ .decrypt_all = &none_stream_all, ++ .encrypt = &none_stream, ++ .decrypt = &none_stream, ++ .ctx_init = &none_stream_ctx_init, ++ .ctx_release = &none_stream_ctx_release, ++ }; ++ memcpy(crypto, &temp, sizeof(crypto_t)); ++ return crypto; ++ } + for (i = 0; i < STREAM_CIPHER_NUM; i++) + if (strcmp(method, supported_stream_ciphers[i]) == 0) { + m = i; +diff --git a/src/noencrypt.c b/src/noencrypt.c +new file mode 100644 +index 00000000..1804aaa5 +--- /dev/null ++++ b/src/noencrypt.c +@@ -0,0 +1,25 @@ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ ++#include "noencrypt.h" ++ ++int ++none_stream (buffer_t *chipertext, chiper_ctx_t *chiper_ctx, size_t capacity) { ++ return CRYPTO_OK; ++} ++ ++int ++none_stream_all (buffer_t *plaintext, chiper_t *chiper, size_t capacity) { ++ return CRYPTO_OK; ++} ++ ++void ++none_stream_ctx_init (chiper_t *chiper, chiper_ctx_t *chiper_ctx, int enc) { ++ ; ++} ++ ++void ++plain_stream_ctx_release (chiper_ctx_t *chiper_ctx) { ++ ; ++} +\ No newline at end of file +diff --git a/src/noencrypt.h b/src/noencrypt.h +new file mode 100644 +index 00000000..38057da7 +--- /dev/null ++++ b/src/noencrypt.h +@@ -0,0 +1,11 @@ ++#ifndef _NOENCRYPT_H ++#define _NOENCRYPT_H ++ ++#include "noencrypt.h" ++ ++int none_stream_all(buffer_t *, cipher_t *, size_t); ++int none_stream(buffer_t *, cipher_ctx_t *, size_t); ++int none_stream_ctx_init(cipher_t *, cipher_ctx_t *, int); ++int none_stream_ctx_release(cipher_ctx_t *); ++ ++#endif _NOENCRYPT_H +\ No newline at end of file +diff --git a/src/server.c b/src/server.c +index 3132c4d4..5fa87c28 100644 +--- a/src/server.c ++++ b/src/server.c +@@ -1710,7 +1710,7 @@ main(int argc, char **argv) + } + + if (server_num == 0 || server_port == NULL +- || (password == NULL && key == NULL)) { ++ || (strncmp(method, "none", 4) && password == NULL && key == NULL)) { + usage(); + exit(EXIT_FAILURE); + } +diff --git a/src/stream.c b/src/stream.c +index 5196c9ef..12c8be33 100644 +--- a/src/stream.c ++++ b/src/stream.c +@@ -72,8 +72,7 @@ + * + */ + +-#define NONE -1 +-#define TABLE 0 ++#define NONE 0 + #define RC4 1 + #define RC4_MD5 2 + #define AES_128_CFB 3 +@@ -96,7 +95,7 @@ + #define CHACHA20IETF 20 + + const char *supported_stream_ciphers[STREAM_CIPHER_NUM] = { +- "table", ++ "none", + "rc4", + "rc4-md5", + "aes-128-cfb", +@@ -198,7 +197,7 @@ cipher_key_size(const cipher_t *cipher) + const cipher_kt_t * + stream_get_cipher_type(int method) + { +- if (method <= TABLE || method >= STREAM_CIPHER_NUM) { ++ if (method <= NONE || method >= STREAM_CIPHER_NUM) { + LOGE("stream_get_cipher_type(): Illegal method"); + return NULL; + } +@@ -224,7 +223,7 @@ stream_get_cipher_type(int method) + void + stream_cipher_ctx_init(cipher_ctx_t *ctx, int method, int enc) + { +- if (method <= TABLE || method >= STREAM_CIPHER_NUM) { ++ if (method <= NONE || method >= STREAM_CIPHER_NUM) { + LOGE("stream_ctx_init(): Illegal method"); + return; + } +@@ -622,7 +621,7 @@ stream_ctx_init(cipher_t *cipher, cipher_ctx_t *cipher_ctx, int enc) + cipher_t * + stream_key_init(int method, const char *pass, const char *key) + { +- if (method <= TABLE || method >= STREAM_CIPHER_NUM) { ++ if (method <= NONE || method >= STREAM_CIPHER_NUM) { + LOGE("cipher->key_init(): Illegal method"); + return NULL; + } +@@ -666,9 +665,9 @@ stream_key_init(int method, const char *pass, const char *key) + cipher_t * + stream_init(const char *pass, const char *key, const char *method) + { +- int m = TABLE; ++ int m = NONE; + if (method != NULL) { +- for (m = TABLE; m < STREAM_CIPHER_NUM; m++) ++ for (m = NONE; m < STREAM_CIPHER_NUM; m++) + if (strcmp(method, supported_stream_ciphers[m]) == 0) { + break; + } +@@ -677,7 +676,7 @@ stream_init(const char *pass, const char *key, const char *method) + m = RC4_MD5; + } + } +- if (m == TABLE) { ++ if (m == NONE) { + LOGE("Table is deprecated"); + return NULL; + } +diff --git a/src/utils.c b/src/utils.c +index b9142e7e..70bc99bb 100644 +--- a/src/utils.c ++++ b/src/utils.c +@@ -289,7 +289,7 @@ usage() + printf( + " -k Password of your remote server.\n"); + printf( +- " -m Encrypt method: rc4-md5, \n"); ++ " -m Encrypt method: none, rc4-md5, \n"); + printf( + " aes-128-gcm, aes-192-gcm, aes-256-gcm,\n"); + printf( + +From 4cbca114514b06a5cbc6c2bab21929fe861852fb Mon Sep 17 00:00:00 2001 +From: Fejes Ferenc +Date: Mon, 31 Jul 2017 12:39:58 +0200 +Subject: [PATCH 06/17] Fixes + +--- + src/crypto.c | 2 +- + src/noencrypt.h | 6 +++--- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/crypto.c b/src/crypto.c +index 8c9044f6..98edee4f 100644 +--- a/src/crypto.c ++++ b/src/crypto.c +@@ -148,7 +148,7 @@ crypto_init(const char *password, const char *key, const char *method) + if (strncmp(method, "none", 4) == 0) { + crypto_t *crypto = (crypto_t *) malloc(sizeof(crypto_t)); + crypto_t temp = { +- .chiper = NULL, ++ .cipher = NULL, + .encrypt_all = &none_stream_all, + .decrypt_all = &none_stream_all, + .encrypt = &none_stream, +diff --git a/src/noencrypt.h b/src/noencrypt.h +index 38057da7..206c18de 100644 +--- a/src/noencrypt.h ++++ b/src/noencrypt.h +@@ -5,7 +5,7 @@ + + int none_stream_all(buffer_t *, cipher_t *, size_t); + int none_stream(buffer_t *, cipher_ctx_t *, size_t); +-int none_stream_ctx_init(cipher_t *, cipher_ctx_t *, int); +-int none_stream_ctx_release(cipher_ctx_t *); ++void none_stream_ctx_init(cipher_t *, cipher_ctx_t *, int); ++void none_stream_ctx_release(cipher_ctx_t *); + +-#endif _NOENCRYPT_H +\ No newline at end of file ++#endif //_NOENCRYPT_H +\ No newline at end of file + +From 07607127317804319b0cb358080516ee99cf30e0 Mon Sep 17 00:00:00 2001 +From: Fejes Ferenc +Date: Mon, 31 Jul 2017 12:57:46 +0200 +Subject: [PATCH 08/17] fixed typenames + +--- + src/noencrypt.c | 8 ++++---- + src/noencrypt.h | 2 +- + 3 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/src/noencrypt.c b/src/noencrypt.c +index 1804aaa5..114c908d 100644 +--- a/src/noencrypt.c ++++ b/src/noencrypt.c +@@ -5,21 +5,21 @@ + #include "noencrypt.h" + + int +-none_stream (buffer_t *chipertext, chiper_ctx_t *chiper_ctx, size_t capacity) { ++none_stream (buffer_t *chipertext, cipher_ctx_t *chiper_ctx, size_t capacity) { + return CRYPTO_OK; + } + + int +-none_stream_all (buffer_t *plaintext, chiper_t *chiper, size_t capacity) { ++none_stream_all (buffer_t *plaintext, cipher_t *chiper, size_t capacity) { + return CRYPTO_OK; + } + + void +-none_stream_ctx_init (chiper_t *chiper, chiper_ctx_t *chiper_ctx, int enc) { ++none_stream_ctx_init (chiper_t *chiper, cipher_ctx_t *chiper_ctx, int enc) { + ; + } + + void +-plain_stream_ctx_release (chiper_ctx_t *chiper_ctx) { ++plain_stream_ctx_release (cipher_ctx_t *chiper_ctx) { + ; + } +\ No newline at end of file +diff --git a/src/noencrypt.h b/src/noencrypt.h +index 206c18de..48954115 100644 +--- a/src/noencrypt.h ++++ b/src/noencrypt.h +@@ -1,7 +1,7 @@ + #ifndef _NOENCRYPT_H + #define _NOENCRYPT_H + +-#include "noencrypt.h" ++#include "crypto.h" + + int none_stream_all(buffer_t *, cipher_t *, size_t); + int none_stream(buffer_t *, cipher_ctx_t *, size_t); + +From 4d1c15ba49a58359234174e775b509efa07bbb95 Mon Sep 17 00:00:00 2001 +From: Fejes Ferenc +Date: Mon, 31 Jul 2017 13:14:53 +0200 +Subject: [PATCH 09/17] small fix + +--- + src/noencrypt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/noencrypt.c b/src/noencrypt.c +index 114c908d..8ddcaabb 100644 +--- a/src/noencrypt.c ++++ b/src/noencrypt.c +@@ -15,7 +15,7 @@ none_stream_all (buffer_t *plaintext, cipher_t *chiper, size_t capacity) { + } + + void +-none_stream_ctx_init (chiper_t *chiper, cipher_ctx_t *chiper_ctx, int enc) { ++none_stream_ctx_init (cipher_t *chiper, cipher_ctx_t *chiper_ctx, int enc) { + ; + } + + +From 01294c25e8e02c399a9df17a13758e7f9f16ed8f Mon Sep 17 00:00:00 2001 +From: Fejes Ferenc +Date: Mon, 31 Jul 2017 13:22:44 +0200 +Subject: [PATCH 11/17] Do not optimize away the unused variablas + +--- + src/noencrypt.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/noencrypt.c b/src/noencrypt.c +index 8ddcaabb..e9bf017d 100644 +--- a/src/noencrypt.c ++++ b/src/noencrypt.c +@@ -6,20 +6,22 @@ + + int + none_stream (buffer_t *chipertext, cipher_ctx_t *chiper_ctx, size_t capacity) { ++ (void) chipertext; (void) chiper_ctx; (void) capacity; + return CRYPTO_OK; + } + + int + none_stream_all (buffer_t *plaintext, cipher_t *chiper, size_t capacity) { ++ (void) plaintext; (void) chiper; (void) capacity; + return CRYPTO_OK; + } + + void + none_stream_ctx_init (cipher_t *chiper, cipher_ctx_t *chiper_ctx, int enc) { +- ; ++ (void) chiper; (void) chiper_ctx; (void) enc; + } + + void + plain_stream_ctx_release (cipher_ctx_t *chiper_ctx) { +- ; ++ (void) chiper_ctx; + } +\ No newline at end of file + +From 1b0c88066515ea496c00049cb5aff92decdbe05a Mon Sep 17 00:00:00 2001 +From: Fejes Ferenc +Date: Mon, 31 Jul 2017 13:39:57 +0200 +Subject: [PATCH 13/17] code fix + +--- + src/noencrypt.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/noencrypt.c b/src/noencrypt.c +index e9bf017d..76253647 100644 +--- a/src/noencrypt.c ++++ b/src/noencrypt.c +@@ -22,6 +22,6 @@ none_stream_ctx_init (cipher_t *chiper, cipher_ctx_t *chiper_ctx, int enc) { + } + + void +-plain_stream_ctx_release (cipher_ctx_t *chiper_ctx) { ++none_stream_ctx_release (cipher_ctx_t *chiper_ctx) { + (void) chiper_ctx; + } +\ No newline at end of file diff --git a/shadowsocks-v2ray-plugin/Makefile b/shadowsocks-v2ray-plugin/Makefile index 5cc81054e..f9e700fe1 100644 --- a/shadowsocks-v2ray-plugin/Makefile +++ b/shadowsocks-v2ray-plugin/Makefile @@ -15,7 +15,7 @@ PKG_SOURCE_PROTO:=git #PKG_SOURCE_URL:=https://github.com/shadowsocks/v2ray-plugin.git PKG_SOURCE_URL:=https://github.com/teddysun/v2ray-plugin.git #PKG_SOURCE_VERSION:=63a74bef9e9f639bc199255db9d452d96f01d11a -PKG_SOURCE_VERSION:=5cafcf9a0ae316cb268120eb1994adf5255eb7f0 +PKG_SOURCE_VERSION:=6c0c5fb15851e13b36fe2eeaaba97fd27c9d291b PKG_BUILD_DEPENDS:=golang/host PKG_BUILD_PARALLEL:=1 diff --git a/shortcut-fe/src/Kconfig b/shortcut-fe/src/Kconfig index f45e56b47..487f1e065 100644 --- a/shortcut-fe/src/Kconfig +++ b/shortcut-fe/src/Kconfig @@ -5,8 +5,7 @@ config SHORTCUT_FE tristate "Shortcut Forwarding Engine" depends on NF_CONNTRACK - default n - help + ---help--- Shortcut is a fast in-kernel packet forwarding engine. To compile this code as a module, choose M here: the module will be diff --git a/speedtestc/Makefile b/speedtestc/Makefile index c08427fad..7e13f6e67 100644 --- a/speedtestc/Makefile +++ b/speedtestc/Makefile @@ -12,7 +12,7 @@ PKG_RELEASE:=3 PKG_SOURCE_URL:=https://github.com/mobrembski/SpeedTestC.git PKG_SOURCE_PROTO:=git -PKG_SOURCE_VERSION:=5bd807bc32269321e500a7e7d36b8ec3fefa5f47 +PKG_SOURCE_VERSION:=64f8d8288cbbaa596a408fd3051a2b5bc831faa9 PKG_MAINTAINER:=Ycarus (Yannick Chabanois) PKG_LICENSE:=GPL-2.0 PKG_BUILD_PARALLEL:=0 diff --git a/speedtestc/patches/compile-fix.patch b/speedtestc/patches/compile-fix.patch new file mode 100644 index 000000000..689e433a9 --- /dev/null +++ b/speedtestc/patches/compile-fix.patch @@ -0,0 +1,38 @@ +diff --git a/src/SpeedtestConfig.c b/SpeedTestC/src/SpeedtestConfig.c +index 7b60a59..d9f58c9 100644 +--- a/src/SpeedtestConfig.c ++++ b/src/SpeedtestConfig.c +@@ -50,7 +50,7 @@ static void parseClient(const char *configline, SPEEDTESTCONFIG_T **result_p) + char lat[16] = {0}; + char lon[16] = {0}; + +- if(sscanf(configline,"%*[^\"]\"%15[^\"]\"%*[^\"]\"%15[^\"]\"%*[^\"]\"%15[^\"]\"%*[^\"]\"%255[^\"]\"", ++ if(sscanf(configline,"%*[^\"]\"%15[^\"]\"%*[^\"]\"%20[^\"]\"%*[^\"]\"%20[^\"]\"%*[^\"]\"%255[^\"]\"", + result->ip, lat, lon, result->isp)!=4) + { + fprintf(stderr,"Cannot parse all fields! Config line: %s", configline); +diff --git a/src/SpeedtestDownloadTest.c b/src/SpeedtestDownloadTest.c +index 54ed45d..545582a 100644 +--- a/src/SpeedtestDownloadTest.c ++++ b/src/SpeedtestDownloadTest.c +@@ -32,7 +32,7 @@ static void *__downloadThread(void *arg) + return NULL; + } + +-void testDownload(const char *url) ++void testDownload(char *url) + { + size_t numOfThreads = speedTestConfig->downloadThreadConfig.count * + speedTestConfig->downloadThreadConfig.sizeLength; +diff --git a/src/SpeedtestDownloadTest.h b/src/SpeedtestDownloadTest.h +index e341f31..45e9d9a 100644 +--- a/src/SpeedtestDownloadTest.h ++++ b/src/SpeedtestDownloadTest.h +@@ -1,6 +1,6 @@ + #ifndef _SPEEDTEST_DOWNLOAD_TEST_ + #define _SPEEDTEST_DOWNLOAD_TEST_ + +-void testDownload(const char *url); ++void testDownload(char *url); + + #endif diff --git a/speedtestc/patches/user-agent.patch b/speedtestc/patches/user-agent.patch new file mode 100644 index 000000000..d5390c0f6 --- /dev/null +++ b/speedtestc/patches/user-agent.patch @@ -0,0 +1,22 @@ +diff --git a/src/http.c b/src/http.c +index 45d7281..99f9cfd 100644 +--- a/src/http.c ++++ b/src/http.c +@@ -88,7 +88,7 @@ sock_t httpPut(char* pAddress, int pPort, char* pRequest, unsigned long contentS + Leaving it uninitialized gives us random high value.*/ + sprintf(buffer, "POST %s HTTP/1.1\r\n" + "Host: %s\r\n" +- "User-Agent: SPEEDTEST_CLIENT\r\n" ++ "User-Agent: OMR_SPEEDTEST_CLIENT\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" + "Connection: keep-alive\r\n" + "Content-Length: %lu\r\n" +@@ -131,7 +131,7 @@ sock_t httpGet(char* pAddress, int pPort, char* pRequest, int ssl) + + sprintf(buffer, "GET %s HTTP/1.1\r\n" + "Host: %s\r\n" +- "User-Agent: SPEEDTEST_CLIENT\r\n" ++ "User-Agent: OMR_SPEEDTEST_CLIENT\r\n" + "Connection: close\r\n" + "\r\n", pRequest, pAddress); + diff --git a/speedtestcpp/Makefile b/speedtestcpp/Makefile deleted file mode 100644 index db25f5bb8..000000000 --- a/speedtestcpp/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# -# Copyright (C) 2021 Ycarus (Yannick Chabanois) for OpenMPTCProuter project -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=speedtestcpp -PKG_VERSION:=1.12 -PKG_RELEASE:=2 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_VERSION:=a01ae6eb04c5d3f4847aef73bf77849275ccc6eb -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://github.com/fmantz/SpeedTest.git - -PKG_MAINTAINER:=Ycarus -PKG_LICENSE:=MIT -PKG_LICENSE_FILES:=LICENSE - -CMAKE_INSTALL:=1 - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/cmake.mk - -define Package/speedtestcpp - SECTION:=net - CATEGORY:=Network - TITLE:=Yet another unofficial speedtest.net client cli interface - URL:=https://github.com/fmantz/SpeedTest - DEPENDS:=+curl +libstdcpp +libopenssl +libxml2 -endef - -define Package/speedtestcpp/install - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/SpeedTest $(1)/usr/bin/ - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/speedtestJson $(1)/usr/bin/ -endef - -$(eval $(call BuildPackage,speedtestcpp)) \ No newline at end of file diff --git a/tracebox/Makefile b/tracebox/Makefile index 9c8117df7..59778d4bd 100644 --- a/tracebox/Makefile +++ b/tracebox/Makefile @@ -14,13 +14,11 @@ PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_SOURCE_URL:=https://github.com/dreibh/tracebox.git -#https://github.com/tracebox/tracebox.git +PKG_SOURCE_URL:=https://github.com/tracebox/tracebox.git PKG_MAINTAINER:=Ycarus PKG_SOURCE_PROTO:=git -PKG_SOURCE_VERSION:=4ad40ea43354038a04ad90aedae5874801c223e8 -#v0.4.4 +PKG_SOURCE_VERSION:=v0.4.4 PKG_FIXUP:=autoreconf @@ -45,7 +43,7 @@ CONFIGURE_VARS += \ CONFIGURE_ARGS += --enable-sniffer --enable-curl --with-libpcap="$(STAGING_DIR)/usr/include/" -EXTRA_CPPFLAGS += -fpermissive -Wno-variadic-macros -std=c++14 +EXTRA_CPPFLAGS += -fpermissive -Wno-variadic-macros TARGET_CFLAGS += -D_GNU_SOURCE diff --git a/umbim/Makefile b/umbim/Makefile new file mode 100644 index 000000000..36763767f --- /dev/null +++ b/umbim/Makefile @@ -0,0 +1,47 @@ +include $(TOPDIR)/rules.mk + +PKG_NAME:=umbim +PKG_RELEASE:=2 + +PKG_SOURCE_PROTO:=git +PKG_SOURCE_URL=$(PROJECT_GIT)/project/umbim.git +PKG_SOURCE_DATE:=2019-09-11 +PKG_SOURCE_VERSION:=184b707ddaa0acee84d02e0ffe599cb8b67782bd +PKG_MIRROR_HASH:=482ff69144f81fafed99035840f5a24e772472f2df2f3ac0219d6de791ac5835 +PKG_MAINTAINER:=John Crispin + +PKG_LICENSE:=GPL-2.0 +PKG_LICENSE_FILES:= + +PKG_BUILD_PARALLEL:=1 + +PKG_FLAGS:=nonshared + +include $(INCLUDE_DIR)/package.mk +include $(INCLUDE_DIR)/cmake.mk + +define Package/umbim + SECTION:=net + CATEGORY:=Network + SUBMENU:=WWAN + DEPENDS:=+libubox +kmod-usb-net +kmod-usb-net-cdc-mbim +wwan + TITLE:=Control utility for mobile broadband modems +endef + +define Package/umbim/description + umbim is a command line tool for controlling mobile broadband modems using + the MBIM-protocol. +endef + +TARGET_CFLAGS += \ + -I$(STAGING_DIR)/usr/include -ffunction-sections -fdata-sections + +TARGET_LDFLAGS += -Wl,--gc-sections + +define Package/umbim/install + $(INSTALL_DIR) $(1)/sbin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/umbim $(1)/sbin/ + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,umbim)) diff --git a/umbim/files/lib/netifd/proto/mbim.sh b/umbim/files/lib/netifd/proto/mbim.sh new file mode 100644 index 000000000..136160997 --- /dev/null +++ b/umbim/files/lib/netifd/proto/mbim.sh @@ -0,0 +1,240 @@ +#!/bin/sh + +[ -n "$INCLUDE_ONLY" ] || { + . /lib/functions.sh + . ../netifd-proto.sh + init_proto "$@" +} +#DBG=-v + +proto_mbim_init_config() { + available=1 + no_device=1 + proto_config_add_string "device:device" + proto_config_add_string pdptype + proto_config_add_string apn + proto_config_add_string pincode + proto_config_add_string delay + proto_config_add_string auth + proto_config_add_string username + proto_config_add_string password + proto_config_add_defaults +} + +_proto_mbim_setup() { + local interface="$1" + local tid=2 + + local device pdptype apn pincode delay auth username password $PROTO_DEFAULT_OPTIONS + json_get_vars device pdptype apn pincode delay auth username password $PROTO_DEFAULT_OPTIONS + + [ -n "$ctl_device" ] && device=$ctl_device + + pdptype=$(echo "$pdptype" | awk '{print tolower($0)}') + case "$pdptype" in + ip ) + pdptype="ipv4" + ;; + ipv4 | ipv6 | ipv4v6 | ipv4-and-ipv6 ) + ;; + * ) pdptype="default" ;; + esac + + [ -n "$device" ] || { + echo "mbim[$$]" "No control device specified" + proto_notify_error "$interface" NO_DEVICE + proto_set_available "$interface" 0 + return 1 + } + [ -c "$device" ] || { + echo "mbim[$$]" "The specified control device does not exist" + proto_notify_error "$interface" NO_DEVICE + proto_set_available "$interface" 0 + return 1 + } + + devname="$(basename "$device")" + devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)" + ifname="$( ls "$devpath"/net )" + + [ -n "$ifname" ] || { + echo "mbim[$$]" "Failed to find matching interface" + proto_notify_error "$interface" NO_IFNAME + proto_set_available "$interface" 0 + return 1 + } + + [ -n "$apn" ] || { + echo "mbim[$$]" "No APN specified" + proto_notify_error "$interface" NO_APN + return 1 + } + + [ -n "$delay" ] && sleep "$delay" + + echo "mbim[$$]" "Reading capabilities" + umbim $DBG -n -d $device caps || { + echo "mbim[$$]" "Failed to read modem caps" + proto_notify_error "$interface" PIN_FAILED + return 1 + } + tid=$((tid + 1)) + + [ "$pincode" ] && { + echo "mbim[$$]" "Sending pin" + umbim $DBG -n -t $tid -d $device unlock "$pincode" || { + echo "mbim[$$]" "Unable to verify PIN" + proto_notify_error "$interface" PIN_FAILED + proto_block_restart "$interface" + return 1 + } + } + tid=$((tid + 1)) + + echo "mbim[$$]" "Checking pin" + local pinstate="/var/run/mbim.$$.pinstate" + umbim $DBG -n -t $tid -d $device pinstate > "$pinstate" 2>&1 || { + local pin + pin=$(awk '$2=="pin:" {print $5}' "$pinstate") + # we only need pin1 (the SIM pin) to connect + [ "$pin" = "pin1" ] && { + echo "mbim[$$]" "PIN required" + proto_notify_error "$interface" PIN_FAILED + proto_block_restart "$interface" + return 1 + } + } + tid=$((tid + 1)) + + echo "mbim[$$]" "Checking subscriber" + umbim $DBG -n -t $tid -d $device subscriber || { + echo "mbim[$$]" "Subscriber init failed" + proto_notify_error "$interface" NO_SUBSCRIBER + return 1 + } + tid=$((tid + 1)) + + echo "mbim[$$]" "Register with network" + umbim $DBG -n -t $tid -d $device registration || { + echo "mbim[$$]" "Subscriber registration failed" + proto_notify_error "$interface" NO_REGISTRATION + return 1 + } + tid=$((tid + 1)) + + echo "mbim[$$]" "Attach to network" + umbim $DBG -n -t $tid -d $device attach || { + echo "mbim[$$]" "Failed to attach to network" + proto_notify_error "$interface" ATTACH_FAILED + return 1 + } + tid=$((tid + 1)) + + echo "mbim[$$]" "Connect to network" + while ! umbim $DBG -n -t $tid -d $device connect "$pdptype:$apn" "$auth" "$username" "$password"; do + tid=$((tid + 1)) + sleep 1; + done + tid=$((tid + 1)) + + echo "mbim[$$]" "Connected, obtain IP address and configure interface" + local config="/var/run/mbim.$$.config" + umbim $DBG -n -t $tid -d $device config > "$config" || { + echo "mbim[$$]" "Failed to obtain IP address" + proto_notify_error "$interface" CONFIG_FAILED + return 1 + } + tid=$((tid + 1)) + + proto_init_update "$ifname" 1 + proto_add_data + json_add_int tid $tid + proto_close_data + proto_send_update "$interface" + + local ip_4 ip_6 + ip_4=$(awk '$1=="ipv4address:" {print $2}' "$config") + ip_6=$(awk '$1=="ipv6address:" {print $2}' "$config") + [ -n "$ip_4" ] || [ -n "$ip_6" ] || { + echo "mbim[$$]" "Failed to obtain IP addresses" + proto_notify_error "$interface" CONFIG_FAILED + return 1 + } + + proto_init_update "$ifname" 1 + proto_set_keep 1 + local ip mask gateway mtu dns dns_servers + + [ -n "$ip_4" ] && { + echo "mbim[$$]" "Configure IPv4 on $ifname" + ip=${ip_4%%/*} + mask=${ip_4##*/} + gateway=$(awk '$1=="ipv4gateway:" {print $2}' "$config") + mtu=$(awk '$1=="ipv4mtu:" {print $2}' "$config") + [ "$mtu" ] && ip link set "$ifname" mtu "$mtu" + + proto_add_ipv4_address "$ip" "$mask" + [ "$defaultroute" = 0 ] || proto_add_ipv4_route 0.0.0.0 0 "$gateway" "$ip_4" "$metric" + [ "$peerdns" = 0 ] || { + dns_servers=$(awk '$1=="ipv4dnsserver:" {printf "%s ",$2}' "$config") + for dns in $dns_servers; do + proto_add_dns_server "$dns" + done + } + + } + [ -n "$ip_6" ] && { + echo "mbim[$$]" "Configure IPv6 on $ifname" + ip=${ip_6%%/*} + mask=${ip_6##*/} + gateway=$(awk '$1=="ipv6gateway:" {print $2}' "$config") + mtu=$(awk '$1=="ipv6mtu:" {print $2}' "$config") + [ "$mtu" ] && ip -6 link set "$ifname" mtu "$mtu" + + proto_add_ipv6_address "$ip" "$mask" + proto_add_ipv6_prefix "$ip_6" + [ "$defaultroute" = 0 ] || proto_add_ipv6_route "::" 0 "$gateway" "$metric" "" "$ip_6" + [ "$peerdns" = 0 ] || { + dns_servers=$(awk '$1=="ipv6dnsserver:" {printf "%s ",$2}' "$config") + for dns in $dns_servers; do + proto_add_dns_server "$dns" + done + } + } + + proto_send_update "$interface" + echo "mbim[$$]" "Connection setup complete" +} + +proto_mbim_setup() { + local ret + + _proto_mbim_setup "$@" + ret=$? + + rm -f "/var/run/mbim.$$."* + + [ "$ret" = 0 ] || { + logger "mbim bringup failed, retry in 15s" + sleep 15 + } + + return $ret +} + +proto_mbim_teardown() { + local interface="$1" + + local device tid + json_get_vars device tid + + [ -n "$ctl_device" ] && device=$ctl_device + + echo "mbim[$$]" "Stopping network" + [ -n "$tid" ] && umbim $DBG -t$tid -d "$device" disconnect + + proto_init_update "*" 0 + proto_send_update "$interface" +} + +[ -n "$INCLUDE_ONLY" ] || add_protocol mbim diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile index f17adbf69..7fb4219d3 100644 --- a/v2ray-core/Makefile +++ b/v2ray-core/Makefile @@ -9,13 +9,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2ray-core -PKG_VERSION:=4.43.0 +PKG_VERSION:=4.35.1 PKG_RELEASE:=1 -#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE:=v$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://github.com/v2fly/v2ray-core/archive/refs/tags/ -PKG_HASH:=f27b8fe8e1e102b0297339ee368c8b650fde0f949e0d90e1229ff6744f99ba0f +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=https://github.com/v2fly/v2ray-core/archive/v$(PKG_VERSION) +PKG_HASH:=ef469a99c7db8596f8556478b478e2701ce2783af9affb7f3cb28201718e7d35 PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE